Linux и UNIX: программирование в shell. Руководство разработчика
Linux и UNIX: программирование в shell. Руководство разработчика читать книгу онлайн
Данная книга является практическим руководством по программированию интерпретатора Bourne shell -cтандартного командного интерпретатора в UNIX, полностью совместимого с интерпретатором BASH shell в Linux. Книга предназначена для начинающих и опытных программистов и содержит множество полезных примеров, советов и подсказок. С ее помощью читатель сможет быстро научиться создавать shell–сценарии для реальных задач и ситуаций, возникающих в большинстве систем UNIX и Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
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 (их может просматривать и выполнять любой пользователь, но только владелец имеет право осуществлять запись) следует воспользоваться такой командой:
$ find . — perm 755 -print
Если перед значением режима вставить дефис, будет произведен поиск файлов, Для которых установлены все указанные биты разрешений, остальные биты при этом
игнорируются. Например, следующая команда ищет файлы, к которым другие пользователи имеют полный доступ:
$ find . — perm -007 -print
Если же перед значением режима введен знак "плюс", осуществляется поиск файлов, для которых установлен хотя бы один из указанных битов разрешений, при этом остальные биты игнорируются.
2.1.3. Опция -prune
Когда вы не хотите вести поиск в том или ином каталоге, воспользуйтесь опцией -prune. Она служит указанием остановить поиск на текущем путевом имени. Если путевое имя указывает на каталог, команда find не будет заходить в него. При наличии опции -depth опция -prune игнорируется.
Следующая команда проводит поиск в текущем каталоге, не заходя в подкаталог /bin:
$ find . — name "bin" — prune -o -print
2.1.4. Опции -user и -nouser
Чтобы найти файлы, принадлежащие определенному пользователю, укажите в команде find опцию -user, а также имя пользователя. Например, поиск в начальном каталоге файлов, принадлежащих пользователю dave, осуществляется посредством такой команды:
$ find ~ -user dave -print
Поиск в каталоге /etc файлов, принадлежащих пользователю uucp, выполняет
следующая команда: |
$ find /etc -user uucp -print
Благодаря опции -nouser возможен поиск файлов, принадлежащих несуществующим пользователям. При ее использовании производится поиск файлов, для владельцев которых нет записи в файле /etc/passwd. Конкретное имя пользователя указывать не нужно: команда find выполняет всю необходимую работу сама. Чтобы найти все файлы, которые принадлежат несуществующим пользователям и находятся в каталоге /hоте, задайте вот такую команду:
$ find /home -nouser -print
2.1.5. Опции -group и -nogroup
Опции -group и -nogroup аналогичны опциям -user и -nouser и позволяют искать файлы, принадлежащие заданной группе или несуществующим группам. Ниже приведена команда для нахождения в каталоге /apps всех файлов, которыми владеют пользователи группы accts:
$ find /apps -group accts -print
Следующая команда ищет во всей системе файлы, принадлежащие несуществующим группам:
$ find / -nogroup -print
2.1.6. Опция -mtime
Опцию -mtime следует применять при поиске файлов, доступ к которым осуществлялся x дней назад. Если аргумент опции снабдить знаком ' — ', будут отобраны файлы, к которым не было доступа в течение x дней. Аргумент со знаком '+' приводит к противоположному результату — производится отбор файлов, доступ к которым осуществлялся на протяжении последних х дней.
Найти все файлы, которые не обновлялись в течение последних пяти дней, позволяет следующая команда:
$ find / -mtime -5 -print
Ниже приведена команда, выполняющая поиск в каталоге /var/adm файлов, которые обновлялись в течение последних трех дней:
$ find /var/adm -mtime +3 -print
2.1.7. Опция -newer
Если необходимо найти файлы, доступ к которым осуществлялся в промежутке времени между обновлениями двух заданных файлов, воспользуйтесь опцией -newer. Общий формат ее применения таков:
-newer старый_файл ! —newer новый_файл
Знак '!' является оператором логического отрицания. Он означает: найти файлы, которые новее, чем старый_файл, но старее, чем новый_файл.
Предположим, у нас есть два файла, которые обновлялись с интервалом немногим более двух дней: