Текст книги "Linux и UNIX: программирование в shell. Руководство разработчика"
Автор книги: Дэвид Тейнсли
сообщить о нарушении
Текущая страница: 2 (всего у книги 25 страниц)
ствующего права. Система разрешений подробно описана ниже
1
Количество жестких ссылок на файл
root
Идентификатор владельца файла
root
Идентификатор группы, в которую входит владелец файла
3756
Размер файла в байтах
Oct 14 04:44
Дата и время последнего изменения файла
dmesg
Имя файла
1.2. Типы файлов
В начале строки режима может стоять не только символ ' – " или d, ведь в каталоге насчитывается до семи различных типов записей (табл. 1.1):
Таблица 1.1. Типы файлов
d
Каталог
l
Символическая ссылка (указатель на другой файл)
s
Сокет
b
Специальный блочный файл
с
Специальный символьный файл
p
Файл именованного канала
—
Обычный файл или, если выразиться точнее, ни один из файлов, перечисленных выше
1.3. Права доступа к файлам
Давайте создадим файл, используя команду touch:
$ touch myfile
Теперь выполним команду ls -1:
$ ls -1 myfile
–rw‑r–r– 1 dave admin 0 Feb 19 22:05 myfile
Мы получили пустой файл, и, как и ожидалось, первый символ в строке режима свидетельствует о том, что это обычный файл. В результате выполнения большинства операций по созданию файлов образуются либо обычные файлы, либо символические ссылки (о них говорится ниже).
Права владельца
Права группы
Права остальных пользователей
rw-
r–
r–
Следующие три символа в строке режима (rw-) описывают права доступа к созданному файлу со стороны его владельца (пользователь dave). За ними следуют символы r–, указывающие на права группы, в которую входит этот пользователь (в данном случае он является членом группы admin). Последние три символа (r–) представляют собой права пользователей, не принадлежащих к данной группе.
Существует три вида разрешений:
r
Право чтения данного файла
w
Право записи/изменения данного файла
x
Право выполнения данного файла, если он является сценарием или программой
Следовательно, строку режима для файла myfile необходимо интерпгретировать следующим образом:
-
rw-
r–
r–
Обычный файл
Владелец может
Пользователи указанной группы могут осуществлять только чтение этого файла
Остальные пользователи также могут осуществлять только чтение этого файла
осуществлять чтение и запись этого файла
Возможно, вы обратили внимание на то, что при создании файла myfile владелец не получил право выполнять данный файл. Это связано с ограничениями, установленными по умолчанию в системе. Ситуация прояснится чуть позже, когда мы изучим команду umask.
Рассмотрим несколько дополнительных примеров (табл. 1.2).
Таблица 1.2. Примеры строк режима
Строка режима Результат
r– – –
Доступ к файлу разрешен только владельцу, который может читать содержимое файла, но не имеет права осуществлять запись в файл и выполнять его
r–r– –
Доступ к файлу возможен только для чтения и разрешен владельцу и всем пользователям группы, в которую он входит
r–r–r–
Любой пользователь может получить доступ к файлу для чтения, остальные действия запрещены
rwx – –
Владелец имеет полный доступ к файлу, для остальных пользователей файл недоступен
rwxr‑x –
Владелец имеет полный доступ к файлу; пользователи группы, в которую входит владелец, могут читать файл и запускать его на выполнение; для остальных пользователей файл недоступен
rwxr‑x r‑x
Владелец имеет полный доступ к файлу; остальные пользователи могут читать файл и запускать его на выполнение
rw‑rw– –
Владелец и пользователи группы, в которую он входит, могут осуществлять чтение и запись файла; для остальных пользователей файл недоступен
rw‑rw‑r–
Владелец и пользователи группы, в которую он входит, могут осуществлять чтение и запись файла; остальным пользователям разрешено только чтение файла
rw‑rw‑rw-
Все пользователи могут осуществлять чтение и запись файла
1.4. Изменение прав доступа к файлу
Вы можете изменять режим доступа к файлам, которыми владеете, с помощью команды chmod. Аргументы этой команды могут быть заданы либо в числовом виде (абсолютный режим), либо в символьном (символьный режим). Сначала рассмотрим символьный режим.
1.4.1. Символьный режим
Общий формат команды chmod для символьного режима таков:
chmod [кто] оператор [разрешения] файл
Значения параметра кто:
u Владелец
g Группа
o Другие пользователи
a Все (владелец, группа и другие пользователи)
Значения параметра оператор:
+ Добавление разрешения
– Удаление разрешения
= Установка заданного разрешения
Значения параметра разрешения:
r Право чтения
w Право записи
x Право выполнения
X Установка права выполнения только в том случае, если для какой‑либо категории пользователей уже задано право выполнения
s Установка бита SUID или SG1D для владельца или группы
t Установка sticky–бита[1]
u Установка тех же прав, что и у владельца
g Установка тех же прав, что и у группы
o Установка тех же прав, что и у других пользователей
1.4.2. Примеры использования команды chmod
Рассмотрим несколько примеров изменения режима доступа к файлу с помощью команды chmod. Предполагается, что строка режима для нашего файла имеет такой вид: rwxrwxrwx.
Команда
Строка режима
Результат
chmod a‑x myfile
rw‑rw‑rw-
Отмена всех разрешений на выполнение
chmod og‑w myfile
rw‑r–r–
Отмена разрешений на запись для группы и других пользователей
chmod g+w myfile
rw‑rw‑r–
Добавление разрешения на запись для группы
chmod u+x myfile
rwxrw‑r–
Добавление разрешения на выполнение для владельца
chmod go+x myfile
rwxrwxr‑x
Добавление разрешения на выполнение для группы и других пользователей
chmod g=o myfile
rwxr‑x r‑x
Предоставление группе тех прав, которые уже установлены для других пользователей
1.4.3. Абсолютный режим
Общий формат команды chmod для абсолютного режима таков:
chmod [режим] файл
Здесь параметр режим представляет собой восьмеричное число. В простейшем случае оно состоит из трех трехбитовых наборов, каждый из которых относится к соответствующей категории разрешений (владельца, группы, других пользователей). Старший бит
соответствует разрешению не чтение (1 – установлено, 0 -cнято), средний -pазрешению на запись, а младший -pазрешению на выполнение. Рассмотрим примеры:
Таблица 1.3. Восьмеричные значения Режима
Восьмеричное число
Результат
400
Владелец имеет право чтения
200
Владелец имеет право записи
100
Владелец имеет право выполнения
040
Группа имеет право чтения
020
Группа имеет право записи
010
Группа имеет право выполнения
004
Другие пользователи имеют право чтения
002
Другие пользователи имеют право записи
001
Другие пользователи имеют право выполнения
Чтобы получить итоговое значение режима, который вы хотите задать для. своего файла, определите требуемый набор разрешений и сложите соответствующие числа в левой колонке таблицы.
Обратимся к примеру файла, который рассматривался ранее:
–rw‑r–r– 1 dave admin 0 Feb 19 22:05 myfile
Его строка режима эквивалентна числу 644, сформированного таким образом:
право чтения и записи для владельца
–400+200=600
+
право чтения для группы
040
+
право чтения для других пользователей
004
=644
Правило формирования восьмеричного режима доступа проще всего сформулировать с помощью следующей таблицы:
Таблица 1.4. Определение режима доступа к файлу
Владелец
Группа
Другие пользователи
rwx
rwx
rwx
4 + 2 + 1
4+2+1
4+2+1
1.4.4. Дополнительные примеры использования команды chmod
Ниже приведен ряд Примеров, иллюстрирующих применение команды chmod в абсолютном режиме:
Команда
Строка режима
Результат
chmod 666
rw‑rw‑rw-
Установка разрешений на чтение и запись для владельца, группы и других пользователей
chmod 644
rw‑r–r–
Установка разрешений на чтение и запись для владельца; группа и остальные пользователи получают право чтения
chmod
rwxr–r–
Предоставление полного доступа владельцу; группа и другие пользователи имеют право чтения
744
chmod
rw‑rw‑r–
Установка разрешений на чтение и запись для владельца и группы; другим пользователям предоставляется право чтения
664
chmod
Предоставление полного доступа только владельцу; остальным пользователям доступ запрещен
700
chmod
r–r–r–
Все пользователи получают разрешение только на чтение
444
В качестве примера изменим права доступа к файлу myfile:
–rw‑r–r– 1 dave admin 0 Feb 19 22:05 myfile
Необходимо, чтобы владелец имел полный доступ к файлу, а пользователи группы – только разрешение на чтение. Для этого введите следующую команду:
$ chmod 740 myfile
$ ls -l myfile
–rwxr 1 dave admin 0 Feb 19 22:05 myfile
Если другим пользователям также нужно дать разрешение на чтение, воспользуйтесь такой командой:
$ chmod 744 myfile
$ la -1 myfile
–rwxr–r– 1 dave admin 0 Feb 19 22:05 myfile
Для изменения режима доступа ко всем файлам, находящимся в каталоге, предназначена команда, подобная приведенной ниже:
$ chmod 664 *
В результате выполнения этой команды владелец и группа получат разрешения на чтение и запись всех файлов текущего каталога, а другие пользователи – только право чтения файлов. Чтобы действие данной команды рекурсивно распространилось на все подкаталоги, воспользуйтесь опцией -R:
$ chmod -R 664 *
Следствием применения этой команды является рекурсивный обход всех подкаталогов, которые содержатся в текущем каталоге. При этом владелец и группа получают разрешение на чтение и запись, а другие пользователи -pазрешение на чтение. Используйте опцию -R с осторожностью: убедитесь в том, что действительно требуется изменить разрешения для всех файлов из дерева подкаталогов.
1.5. Каталоги
Установка битов режима приобретает несколько иной смысл, когда команда chmod применяется по отношению к каталогу. Бит "чтения" означает возможность просмотра списка файлов в каталоге. Бит "записи" свидетельствует о том, что вам разрешается создавать и удалять файлы в данном каталоге. Наконец, бит "выполнения" указывает на возможность осуществления поиска файлов в каталоге и перехода в него.
Таблица 1.5. Праве доступа к каталогу
r
w
X
Возможность просмотра списка файлов в каталоге
Возможность
Возможность поиска файлов в каталоге и перехода в него
создания/удаления файлов в каталоге
Таблица 1.6. Примеры режимов доступа к каталогу
Строка режима
Владелец
Группа
Другие пользователи
drwxrwxr‑x (775)
Чтение, запись,
Чтение, запись,
Чтение, поиск
поиск
поиск
drwxr‑xr– – (754)
Чтение, запись, поиск
Чтение, поиск
Чтение
drwxr‑xr‑x (755)
Чтение, запись, поиск
Чтение, поиск
Чтение, поиск
Когда строка режима для группы и других пользователей имеет значение -~х, никто не может просматривать содержимое каталога, кроме его владельца. Если каталог содержит сценарий или программу с установленным битом выполнения, пользователи по–прежнему могут выполнять их, указывая точное имя файла. При этом не имеет значения, может ли пользователь перейти в данный каталог.
Разрешения, установленные для каталога, имеют более высокий приоритет, чем разрешения, установленные для файлов этого каталога. Например, если есть каталог docs.
drwxr–r– 1 louise admin 2390 Jul 23 09: 44 docs
а в нем – файл pay:
–rwxrwxrwx 1 louise admin 5567 Oct 3 05:40 pay
пользователь, который является членом группы admin и собирается редактировать файл pay, не сможет этого сделать из‑за отсутствия соответствующих прав доступа к каталогу– Этот файл доступен каждому, но поскольку бит поиска не установлен для группы admin, владеющей каталогом docs, ни один из пользователей группы не может получить доступ к каталогу. Если предпринимается попытка доступа, отображается сообщение "Permission denied" (доступ не разрешен).
1.6. Биты смены идентификаторов (SUID и SGID)
Биты SUID (Set User ID – установить идентификатор пользователя) и SGID (Set Group ID – установить идентификатор группы) были предметом жарких споров на протяжении многих лет. В некоторых системах установка этих битов не допускается либо они полностью игнорируются, даже если установлены. Это связано с тем, что при использовании данных битов возникает дополнительная угроза безопасности системы.
Идея, лежащая в основе применения бита SUID, состоит в том, что пользователь, запустивший программу, для которой владелец установил бит SUID, на время выполнения программы получает все права ее владельца. Если, например, администратор создал сценарий и установил для него бит SU1D, а другой пользователь запускает этот сценарий, привилегии администратора на время выполнения сценария переходят к пользователю. Тот же принцип применим и к биту SGID, только в данном случае меняются привилегии группы, владеющей сценарием.
1.6.1. Для чего нужны биты SUID и SGID?
Для чего нужны сценарии, при запуске которых происходит смена идентификаторов? Сейчас я попытаюсь объяснить. Я отвечаю за администрирование нескольких больших баз данных. Чтобы выполнить операцию по их резервированию, требуется специальный профильный файл администратора. Я создал несколько сценариев и установил для них бит SG1D, благодаря чему пользователи, которым разрешен запуск этих сценариев, не обязаны регистрироваться а качестве администраторов баз данных. А это, в свою очередь, уменьшает риск случайного повреждения информации на сервере. При запуске указанных сценариев пользователи получают разрешение на выполнение операций по выгрузке базы данных, хотя обычно такое право предоставляется только административному персоналу. После завершения сценариев восстанавливаются изначальные права пользователей.
Существует несколько системных команд UNIX, для которых установлен бит SUID или SGID. Чтобы найти эти команды, перейдите в каталог /bin или /sbin и введите:
$ ls -l | grep '^…s'
Вы получите список команд с установленным битом SUID.
$ ls -1 | grep '^…s..s'
В результате выполнения этой команды выводится список команд, у которых установлен как бит SUID, так и бит SGID.
1.6.2. Установка битов SUID и SGID
Чтобы установить бит SUID, вставьте цифру 4 перед числом, задающим режим доступа. Биту SGID соответствует цифра 2. Если одновременно устанавливаются оба бита, следует ввести цифру 6 (4 + 2).
В строке режима установленные биты SUID и SGID обозначаются символом s, который помещается на место символа x в первую или вторую триаду соответственно. Помните, что сам бит выполнения (х) также должен быть установлен. Если, например, вы хотите для какой‑либо программы установить бит SGID, убедитесь в том, что группа обладает правом выполнения этой программы.
Примечание:
Команда chmod не запрещает вам установить бит SUID или SGID при отсутствии соответствующего разрешения на выполнение файла. В этом случае при выполнении команды ls -l в строке режима будет указан символ S, а не s. Система таким образом информирует вас о неправильной установке прав доступа к файлу.
Рассмотрим несколько примеров:
Команда
Строка режима
Результат
chmod 4755
rwsr‑xr‑x
Для файла установлен бит SUID; владелец имеет право чтения, записи и выполнения; группа и другие пользователи имеют право чтения и выполнения
chmod 6711
rws–s – х
Для файла установлены биты SUID и SGID; владелец имеет право чтения, записи и выполнения; группа и другие пользователи имеют право выполнения
chmod 2751
rwxr‑s–x
Для файла установлен бит SGID; владелец имеет право чтения, записи и выполнения; группа имеет право чтения и выполнения; другие пользователи имеют право выполнения
Для установки битов SUID и SGID можно также воспользоваться символьными
операторами команды chmod. Вот как это делается:
chmod u+s имя_файла – SUID
chmod g+s имя_файла – SGID
Заметьте, что команда chmod не выполняет проверку корректности установок. Даже если для файла установлен бит выполнения, это еще не означает, что мы имеем дело с программой или сценарием.
1.7. Команды chown и chgrp
Создав файл, вы автоматически становитесь его владельцем, но можете передать право владения другому пользователю, у которого есть запись в файле /etc/passwd. Только системный администратор либо фактический владелец может передавать права на файл другому пользователю. Если вы отказались от владения файлом, для того чтобы восстановить свои права на него, вам придется обратиться к системному администратору.
Для передачи прав владельца предназначена команда chown. Команда chgrp задает группу, которой принадлежит файл. Общий формат этих команд таков:
chown владелец файл chgrp владелец файл
Опция -R позволяет выполнить рекурсивное изменение файлов в указанном каталоге и всех его подкаталогах.
1.7.1. Пример использования команды chown
Вот как можно поменять владельца файла с помощью команды chown:
$ ls -l
–rwxrwxrwx 1 louise admin 345 Sep 20 14:33 project
$ chown pauline project
$ ls -l
–rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 project
Право владения файлом project переходит от пользователя louise к пользователю
pauline.
1.7.2. Пример использования команды chgrp
Следующий пример демонстрирует, как поменять группу, которой принадлежит файл:
$ ls -1
–rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 project
$ chgrp sysadmin project
$ ls -1
–rwxrwxrwx 1 pauline sysadmin 345 Sep 20 14:33 project
Пользователь pauline передал группе sysadmin право владения файлом project, которое до этого принадлежало группе admin.
1.7.3. Определение групп, в состав которых вы входите
Если вы хотите узнать, к какой группе принадлежите, введите команду groups:
$ groups
admin sysadmin appsgen general
либо воспользуйтесь командой id:
$ id
uid=0(root) gid=0(root) groups=0(root), 1(bin), 2(daemon), 3(sys), 4(ado)
1.7.4. Определение групп, в состав которых входят другие пользователи
Определить, в состав каких групп входит другой пользователь, позволяет команда groups, в качестве аргумента которой указано имя пользователя:
$ groups matty
sysadmin appsgen post
Данная команда сообщает о том, что пользователь matty входит в состав групп
sysadmin, appsgen и post.
1.8. Команда umask
Когда вы регистрируетесь в системе, команда umask устанавливает стандартный режим доступа к создаваемым файлам и каталогам. Задайте с помощью этой команды подходящий для вас режим, чтобы пользователи, не являющиеся членами вашей группы, не могли выполнять нежелательные операции над вашими файлами. Действие команды длится до тех пор, пока вы не выйдете из системы либо не выполните команду umask еще раз.
Как правило, значение umask устанавливается в файле /etc/profile, доступ к которому имеют все пользователи. Поэтому, если вы хотите установить общесистемное значение umask, отредактируйте данный файл (для этого нужно иметь права администратора). Свое собственное значение umask можно задать в файле .profile или .bash_profile, находящемся в каталоге /home.
1.8.1. Обработка значений umask
Команда umask задает восьмеричное число, которое при создании каждого файла и каталога вычитается из стандартного значения режима доступа. Полученное значение режима присваивается файлу или каталогу. Стандартному режиму доступа к каталогам соответствует число 777, а режиму доступа к файлам – 666 (система не позволяет создавать текстовые файлы с установленными битами выполнения, эти биты следует добавлять отдельно с помощью команды chmod). Значение umask также состоит из трех трехбитовых наборов: для владельца, группы и других пользователей.
Общий формат команды umask таков:
umask nnn
где nnn – это маска режима в диапазоне от 000 до 777.
Ниже показано; как на основании значения umask определить режим доступа к файлу или каталогу (табл. 1.8).
Таблица 1.8. Интерпретация значения umask
Цифра в значении umask
Результат для файла
Результат для каталога
0
6
7
1
6
6
2
4
5
3
4
4
4
2
3
5
2
2
6
0
1
7
0
0
Из таблицы следует, что, например, значению umask, равному 002, соответствует режим 664 для файлов и 775 для каталогов.
Если вам удобнее работать со строками режима, руководствуйтесь описанной ниже последовательностью действий. Предположим, значение umask равно 002.
• Сначала запишите полную строку режима, эквивалентную числу 777.
• Под ней запишите строку режима, соответствующую значению umask (002).
• Вычеркните из первой строки те символы, которые дублируются в тех же позициях во второй строке. Вы получите строку режима для каталогов.
• Вычеркните из полученной строки все символы x. Вы получите строку режима для файлов.
1. Полная строка режима
rwxrwxrwx (777)
2. Значение umask (002)
w-
3. Строка режима для каталогов
rwxrwxr-x (775)
4. Строка режима для файлов
rw‑rw‑r– (664)
1.8.2. Примеры установки значений umask
В табл. 1.9 представлены некоторые возможные значения umask и указаны соответствующие им режимы доступа к файлам и каталогам.
Таблица 1.9. Примеры значений umask
Значение umask
Режим доступа к каталогам
Режим доступа к файлам
022
755
644
027
750
640
002
775
664
006
771
660
007
770
660
Для просмотра текущего значения umask введите команду umask без параметров.
$ umask
022
$ touch file1
$ 1s -1 file1
–rw‑r–r– 1 dave admin 0 Feb 18 42:05 file1
Чтобы изменить существующую установку, просто укажите новый аргумент команды umask:
$ umask 002
Убедимся в том, что система приняла изменения:
$ umask
002
$ touch file2
$ ls -l file2
–rw‑rw‑r– 1 dave admin 0 Feb 18 45:0? file2
1.9. Символические ссылки
Существует два типа ссылок: жесткие и символические (мягкие). Мы рассмотрим последние. Символическая ссылка представляет собой файл, содержащий имя другого файла и в действительности являющийся указателем на файл.
1.9.1. Применение символических ссылок
Предположим, у нас есть файл с информацией о продажах, находящийся в каталоге /usr/locai/admin/sales. Необходимо, чтобы каждый пользователь мог работать с этим файлом. Вместо того чтобы создавать множество копий файла в пользовательских каталогах, можно образовать в них символические ссылки, которые указывают на исходный файл в каталоге /usr/local/admin/sales. Тогда о всех изменениях, производимых в файле любым пользователем, немедленно узнают остальные пользователи. Имена символических ссылок могут быть произвольными и не обязаны совпадать с именем исходного файла.
Ссылки удобны в том случае, когда для получения доступа к файлу необходимо пройти через большое количество подкаталогов. Вместо этого можно создать ссылку в текущем каталоге, которая будет указывать на подкаталог, глубоко "спрятанный" в недрах других подкаталогов. Это также избавляет вас от необходимости запоминать местоположение таких файлов.
1.9.2. Примеры создания символических ссылок
Символическая ссылка создается с помощью команды ln -s, формат которой таков:
ln -s исхолный_файл [имя_ссылки]
Если имя ссылки не указано, будет создана ссылка, имя которой совпадает с именем исходного файла.
Рассмотрим случай, когда в системе регистрируются 40 пользователей, относящихся к двум группам – менеджеры (sales) и административный персонал (admin). Для каждой группы при входе в систему должны быть заданы свои установки. Сначала
я удалю все профильные файлы (.profile) во всех пользовательских начальных каталогах, а затем создам в каталоге /usr/local/menus два новых профильных файла – sales.profile и admin.profile. В начальном каталоге каждого пользователя необходимо создать символическую ссылку на один из этих двух файлов. Вот как это делается для пользователя matty, являющегося членом группы sales:
$ cd /home/sales/matty
$ rm .profile
$ ln -s /usr/local/menus/sales.profile .profile
$ ls -la .profile
lrwxrwxrwx 1 matty sales 5567 Oct 3 05:40 .profile -> /usr/local/menus/sales.profile
Аналогичные действия выполняются для всех пользователей. Теперь для изменения любого из профилей достаточно поменять всего один файл – либо sales.profile, либо admin.profile.
Когда ссылка больше не нужна, ее можно удалить. Однако помните, что при удалении исходного файла символическая ссылка не удаляется автоматически, а лишь становится недействительной. При обращении к ней выводится сообщение "No such file оr directory" (нет такого файла или каталога).
Символическая ссылка может указывать на файл или каталог, находящийся в другой файловой системе. Следует только учитывать, что у вас должно быть право поиска во всех каталогах, перечисленных в путевом имени к исходному файлу. Режим доступа к ссылке устанавливается равным 777 (rwxrwxrwx), но режим доступа к исходному файлу не меняется.
После инсталляции новой системы мне часто приходится создавать ссылку на каталог /tmp из каталога /var, так как некоторые приложения рассчитывают на каталог /var/tmp (а он не всегда существует) для размещения в нем своих временных файлов. Чтобы хранить все временные файлы в одном месте и не создавать новый каталог, я формирую символическую ссылку:
$ ln -s /tmp /var/tmp $ cd /var $ ls -l
lrwxrwxrwx 1 root root 5567 Sep 9 10:40 tmp -> /tmp
1.10. Заключение
Эта глава содержит базовые сведения о системе безопасности файлов. Будьте предельно внимательны, реализуя наши рекомендации. Небольшая ошибка при вводе команды chmod -R из корневого каталога может привести к огромным затратам времени на то, чтобы восстановить для файлов корректный режим доступа.
Создание сценариев с установленным битом SUID является весьма удобным. Но старайтесь осторожно применять SUID–сценарии, обеспечивающие предоставление прав пользователя root.
ГЛАВА 2
Команды find и xargs
Часто в процессе работы возникает необходимость осуществить поиск файлов с определенными характеристиками, такими как права доступа, размер, тип и т. д. Команда find представляет собой универсальный инструмент поиска: она позволяет искать файлы и каталоги, просматривать все каталоги в системе или только текущий каталог.
В этой главе рассматриваются следующие темы, связанные с применением команды find:
• параметры команды find;
• примеры использования различных опций команды find;
• примеры совместного использования команд xargs и find .
Возможности команды find обширны, велик и список предлагаемых опций. В настоящей главе описаны наиболее важные из них. Команда find может проводить поиск даже на дисках NFS (Network File System -cетевая файловая система), конечно, при наличии соответствующих разрешений. В подобных случаях команда обычно выполняется в фоновом режиме, поскольку просмотр дерева каталогов требует значительных затрат времени.
Общий формат команды find таков:
find путевое_имя -oпции
где путевое_имя – это каталог, с которого необходимо начинать поиск. Символ '.' служит для обозначения текущего каталога, символ '/' – корневого каталога, а символ '~' – записанного в переменной $НОМЕ начального каталога текущего пользователя.
2.1. Опции команды find
Остановимся на описании основных опций команды find . Таблица 2.1. Основные опции команды find
-name
Поиск файлов, имена которых соответствуют заданному шаблону
Запись полных имен найденных файлов в стандартный поток вывода
-perm
Поиск файлов, для которых установлен указанный режим доступа
-prune
Применяется для того, чтобы команда find не выполняла рекурсивный поиск по уже найденному путевому имени; если указана опция -depth, опция -prune игнорируется
-user
Поиск файлов, принадлежащих указанном пользователю
-group
Поиск файлов, которые принадлежат данной группе
-mtime -n +n
Поиск файлов, содержимое которых модифицировалось менее чем (-) или более чем (+) n дней назад; имеются также опции -atime и -ctime, которые позволяют осуществлять поиск файлов соответственно по дате последнего чтения и дате последнего изменения атрибутов файла
-nogroup
Поиск файлов, принадлежащих несуществующей группе, для которой, иначе говоря, отсутствует запись в файле /etc/groups
-nouser
Поиск файлов, принадлежащих несуществующему пользователю, для которого, другими словами, отсутствует запись в файле
/etc/passwd
-newer файл
Поиск файлов, которые созданы позднее, чем указанный файл
-type
Поиск файлов определенного типа, а именно:
b -cпециальный блочный файл;
d – каталог;
с -cпециальный символьный файл;
p – именованный канал;
1 -cимволическая ссылка;
s -cокет;
f -oбычный файл
-size n
Поиск файлов, размер которых составляет n единиц; возможны
следующие единицы измерения:
b – блок размером 512 байтов (установка по умолчанию);
c – байт;
k – килобайт (1024 байта);
w – двухбайтовое слово
-depth
При поиске файлов сначала просматривается содержимое текущего каталога и лишь затем проверяется запись, соответствующая самому каталогу
-fstype
Поиск файлов, которые находятся в файловой системе определенного типа; обычно соответствующие сведения хранятся в файле /etc/fstab, который содержит данные о файловых системах, используемых на локальном компьютере
-mount
Поиск файлов только в текущей файловой системе; аналогом этой опции является опция -xdev
-exec
Выполнение команды интерпретатора shell для всех обнаруженных
файлов; выполняемые команды имеют формат
команда {} ;
(обратите внимание на наличие пробела между символами {} и
-ok
Аналогична опции -exec, но перед выполнением команды отображается запрос
2.1.1. Опция -name
При работе с командой find чаще всего используется опция -name. После нее в кавычках должен быть указан шаблон имени файла.
Если необходимо найти все файлы с расширением txt в вашем начальном каталоге, укажите символ '~' в качестве путевого имени. Имя начального каталога будет извлечено из переменной $номе.
$ find ~ -name "*.txt" – print
Чтобы найти все файлы с расширением txt, находящиеся в текущем каталоге, следует воспользоваться такой командой:
$ find . – name "*.txt" – print
Для нахождения в текущем каталоге всех файлов, в именах которых встречается хотя бы один символ в верхнем регистре, введите следующую команду:
$ find . – name "[A‑Z]*" – print
Найти в каталоге /etc файлы, имена которых начинаются с символов "host", позволяет команда
$ find /etc -name "host*" – print
Поиск в начальном каталоге всех файлов с расширением txt, а также файлов, имена которых начинаются с точки, производит команда
$ find ~ -name "*.txt" – print -o -name ".*" – print
Опция -o является обозначением операции логического ИЛИ. В случае ее применения помимо файлов с обычными именами будут найдены файлы, имена которых начинаются с точки.
Если вы хотите получить список всех файлов в системе, не имеющих расширения, выполните представленную ниже команду, «о будьте осторожны, так как она может существенно замедлить работу системы:
$ find / -name "*" – print
Ниже показано, как найти все файлы, в именах которых сначала следуют символы нижнего регистра, а за ними – две цифры и расширение .txt (например, ах37.txt):
$ find . – name "[a‑z][a‑z][0—9][0—9].txt" – print
2.1.2. Опция -perm
Опция -perm позволяет находить файлы с заданным режимом доступа. Например, для поиска файлов с режимом доступа 755 (их может просматривать и выполнять любой пользователь, но только владелец имеет право осуществлять запись) следует воспользоваться такой командой: