Время на прочтение
5 мин
Количество просмотров 124K
Иногда критически важно быстро найти нужный файл или информацию в системе. Порой можно ограничиться стандартами функциями поиска, которыми сейчас обладает любой файловый менеджер, но с возможностями терминала им не сравниться.
Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:
- Дате добавления.
- Содержимому.
- Регулярным выражениям.
Данная команда будет очень полезна системным администраторам для:
- Управления дисковым пространством.
- Бэкапа.
- Различных операций с файлами.
Команда find в Linux производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.
Синтаксис команды find:
$ find directory-to-search criteria action
Где:
- directory-to-search (каталог поиска) – это отправной каталог, с которой find начинает поиск файлов по всем подкаталогам, которые находятся внутри. Если не указать путь, тогда поиск начнется в текущем каталоге;
- criteria (критерий) – критерий, по которым нужно искать файлы;
- action (действие) – что делать с каждым найденным файлом, соответствующим критериям.
Поиск по имени
Следующая команда ищет файл s.txt в текущем каталоге:
$ find . -name "s.txt"
./s.txt
Где:
- . (точка) – файл относится к нынешнему каталогу
- -name – критерии по которым осуществляется поиск. В данном случае поиск по названию файла.
В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.
$ find . -iname "s.txt"
./s.txt
./S.txt
Для поиска всех изображений c расширением .png нужно использовать шаблон подстановки *.png:
$ find . -name "*.png"
./babutafb.png
./babutafacebook.png
./Moodle2.png
./moodle.png
./moodle/moodle1.png
./genxfacebook.png
Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:
$ find /home -name "*.png"
find: `/home/babuta/.ssh': Permission denied
/home/vagrant/Moodle2.png
/home/vagrant/moodle.png
/home/tisha/hello.png
find: `/home/tisha/testfiles': Permission denied
find: `/home/tisha/data': Permission denied
/home/tisha/water.png
find: `/home/tisha/.cache': Permission denied
Если выдает слишком много ошибок в отказе разрешения, тогда можно добавить в конец команды – 2> /dev/null. Таким образом сообщения об ошибках будут перенаправляться по пути dev/null, что обеспечит более чистую выдачу.
find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/tisha/hello.jpg
/home/tisha/water.jpg
Поиск по типу файла
Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:
- f – простые файлы;
- d – каталоги;
- l – символические ссылки;
- b – блочные устройства (dev);
- c – символьные устройства (dev);
- p – именованные каналы;
- s – сокеты;
Например, указав критерий -type d будут перечислены только каталоги:
$ find . -type d
.
./.ssh
./.cache
./moodle
Поиск по размеру файла
Допустим, что вам необходимо найти все большие файлы. Для таких ситуаций подойдет критерий -size.
- «+» — Поиск файлов больше заданного размера
- «-» — Поиск файлов меньше заданного размера
- Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.
В данном случае поиск выведет все файлы более 1 Гб (+1G).
$ find . -size +1G
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg
Единицы измерения файлов:
- c — Байт
- k — Кбайт
- M — Мбайт
- G — Гбайт
Поиск пустых файлов и каталогов
Критерий -empty позволяет найти пустые файлы и каталоги.
$ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed
Поиск времени изменения
Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:
$ find . -cmin -60
.
./a.txt
./datafiles
Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).
Для поиска файлов, которые наоборот были изменены в любое время кроме последнего часа необходимо использовать +60.
$ find . -cmin +60
Поиск по времени доступа
Критерий -atime позволяет искать файлы по времени последнего доступа.
$ find . -atime +180
Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).
Поиск по имени пользователя
Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:
$ find /home -user tisha 2>/dev/null
Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.
Поиск по набору разрешений
Критерий -perm – ищет файлы по определенному набору разрешений.
$ find /home -perm 777
Поиск файлов с разрешениями 777.
Операторы
Для объединения нескольких критериев в одну команду поиска можно применять операторы:
- -and
- -or
- -not
Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:
$ find /home -user tisha -and -size +1G 2>/dev/null
Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.
$ find /home ( -user pokeristo -or -user tisha ) -and -size +1G 2>/dev/null
Перед скобками нужно поставить обратный слеш «».
Действия
К команде find можно добавить действия, которые будут произведены с результатами поиска.
- -delete — Удаляет соответствующие результатам поиска файлы
- -ls — Вывод более подробных результатов поиска с:
- Размерами файлов.
- Количеством inode.
- -print Стоит по умолчанию, если не указать другое действие. Показывает полный путь к найденным файлам.
- -exec Выполняет указанную команду в каждой строке результатов поиска.
-delete
Полезен, когда необходимо найти и удалить все пустые файлы, например:
$ find . -empty -delete
Перед удалением лучше лишний раз себя подстраховать. Для этого можно запустить команду с действием по умолчанию -print.
-exec:
Данное действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска.
-exec command {} ;
Где:
- command – это команда, которую вы желаете выполнить для результатов поиска. Например:
- rm
- mv
- cp
- {} – является результатами поиска.
- ; — Команда заканчивается точкой с запятой после обратного слеша.
С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:
$ find . -empty -exec rm {} ;
Другой пример использования действия -exec:
$ find . -name "*.jpg" -exec cp {} /backups/fotos ;
Таким образом можно скопировать все .jpg изображения в каталог backups/fotos
Заключение
Команду find можно использовать для поиска:
- Файлов по имени.
- Дате последнего доступа.
- Дате последнего изменения.
- Имени пользователя (владельца файла).
- Имени группы.
- Размеру.
- Разрешению.
- Другим критериям.
С полученными результатами можно сразу выполнять различные действия, такие как:
- Удаление.
- Копирование.
- Перемещение в другой каталог.
Команда find может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.
Обновлено: 01.02.2022
Опубликовано: 25.07.2016
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Синтаксис
Примеры
Поиск по имени
По дате
По типу файла
По правам
По содержимому
С сортировкой по дате изменения
Лимиты
Действия над найденными объектами
Запуск по расписанию в CRON
Общий синтаксис
find <где искать> <опции>
<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».
<опции> — набор правил, по которым выполнять поиск.
* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Опция | Описание |
---|---|
-name | Поиск по имени. |
-iname | Регистронезависимый поиск по имени. |
-type |
Тип объекта поиска. Возможные варианты:
|
-size | Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»). |
-mtime | Время изменения файла. Указывается в днях. |
-mmin | Время изменения в минутах. |
-atime | Время последнего обращения к объекту в днях. |
-amin | Время последнего обращения в минутах. |
-ctime | Последнее изменение владельца или прав на объект в днях. |
-cmin | Последнее изменение владельца или прав в минутах. |
-user | Поиск по владельцу. |
-group | По группе. |
-perm | С определенными правами доступа. |
-depth | Поиск должен начаться не с корня, а с самого глубоко вложенного каталога. |
-maxdepth | Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный. |
-prune | Исключение перечисленных каталогов. |
-mount | Не переходить в другие файловые системы. |
-regex | По имени с регулярным выражением. |
-regextype <тип> | Тип регулярного выражения. |
-L или -follow | Показывает содержимое символьных ссылок (симлинк). |
-empty | Искать пустые каталоги. |
-delete | Удалить найденное. |
-ls | Вывод как ls -dgils |
Показать найденное. | |
-print0 | Путь к найденным объектам. |
-exec <команда> {} ; | Выполнить команду над найденным. |
-ok | Выдать запрос перед выполнением -exec. |
Также доступны логические операторы:
Оператор | Описание |
---|---|
-a | Логическое И. Объединяем несколько критериев поиска. |
-o | Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска. |
-not или ! | Логическое НЕ. Инвертирует критерий поиска. |
Полный набор актуальных опций можно получить командой man find.
Примеры использования find
Поиск файла по имени
1. Простой поиск по имени:
find / -name «file.txt»
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.
2. Поиск файла по части имени:
find / -name «*.tmp»
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
3. Несколько условий.
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
find . -name «sess_*» -a -name «*cd»
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
find . -name «sess_*» -o -name «*cd»
в) Более компактный вид имеют регулярные выражения, например:
find . -regex ‘.*/(sess_.*cd)’
find . -regex ‘.*/(sess_.*|.*cd)’
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
4. Найти все файлы, кроме .log:
find . ! -name «*.log»
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
find . -type f -mtime +60
* данная команда найдет файлы, которые менялись более 60 дней назад.
Или в промужутке:
find . -mmin -20 -mmin +10 -type f
* найти все файлы, которые менялись более 10 минут, но не более 20-и.
2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).
а) дате изменения:
find . -type f -newermt «2019-11-02 00:00»
* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.
find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02
* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).
б) дате обращения:
find . -type f -newerat 2019-10-08
* все файлы, к которым обращались с 08.10.2019.
find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01
* все файлы, к которым обращались в октябре.
в) дате создания:
find . -type f -newerct 2019-09-07
* все файлы, созданные с 07 сентября 2019 года.
find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
По типу
Искать в текущей директории и всех ее подпапках только файлы:
find . -type f
* f — искать только файлы.
Поиск по правам доступа
1. Ищем все справами на чтение и запись:
find / -perm 0666
2. Находим файлы, доступ к которым имеет только владелец:
find / -perm 0600
Поиск файла по содержимому
find / -type f -exec grep -i -H «content» {} ;
* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.
С сортировкой по дате модификации
find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r | head -n 1
Поиск с действием (exec)
1. Найти только файлы, которые начинаются на sess_ и удалить их:
find . -name «sess_*» -type f -print -exec rm {} ;
* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.
2. Переименовать найденные файлы:
find . -name «sess_*» -type f -exec mv {} new_name ;
или:
find . -name «sess_*» -type f | xargs -I ‘{}’ mv {} new_name
3. Переместить найденные файлы:
find . -name «sess_*» -type f -exec mv {} /new/path/ ;
* в данном примере мы переместим все найденные файлы в каталог /new/path/.
4. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
find . -name «*.tmp» | wc -l
5. Изменить права:
find /home/user/* -type d -exec chmod 2700 {} ;
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
6. Передать найденные файлы конвееру (pipe):
find /etc -name ‘*.conf’ -follow -type f -exec cat {} ; | grep ‘test’
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
7. Произвести замену в файлах с помощью команды sed:
find /opt/project -type f -exec sed -i -e «s/test/production/g» {} ;
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
Чистка по расписанию
Команду find удобно использовать для автоматического удаления устаревших файлов.
Открываем на редактирование задания cron:
crontab -e
И добавляем:
0 0 * * * /bin/find /tmp -mtime +14 -exec rm {} ;
* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.
Очень важно уметь вовремя найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux. Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения.
Кроме того, с найденными файлами можно сразу же выполнять необходимые действия. В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем её синтаксис, опции и рассмотрим несколько примеров.
Команда find — это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.
Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.
Команда find имеет такой синтаксис:
find [папка] [параметры] критерий шаблон [действие]
Папка — каталог в котором будем искать
Параметры — дополнительные параметры, например, глубина поиска, и т д
Критерий — по какому критерию будем искать: имя, дата создания, права, владелец и т д.
Шаблон — непосредственно значение по которому будем отбирать файлы.
Основные параметры команды find
Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.
- -P — никогда не открывать символические ссылки.
- -L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
- -maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
- -depth — искать сначала в текущем каталоге, а потом в подкаталогах.
- -mount искать файлы только в этой файловой системе.
- -version — показать версию утилиты find.
- -print — выводить полные имена файлов.
- -type f — искать только файлы.
- -type d — поиск папки в Linux.
Критерии
Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.
- -name — поиск файлов по имени.
- -perm — поиск файлов в Linux по режиму доступа.
- -user — поиск файлов по владельцу.
- -group — поиск по группе.
- -mtime — поиск по времени модификации файла.
- -atime — поиск файлов по дате последнего чтения.
- -nogroup — поиск файлов, не принадлежащих ни одной группе.
- -nouser — поиск файлов без владельцев.
- -newer — найти файлы новее чем указанный.
- -size — поиск файлов в Linux по их размеру.
Примеры использования
А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.
1. Поиск всех файлов
Показать все файлы в текущей директории:
find
find .
find . -print
Все три команды покажут одинаковый результат. Точка здесь означает текущую папку. В место неё можно указать любую другую.
2. Поиск файлов в определенной папке
Показать все файлы в указанной директории:
find ./Изображения
Искать файлы по имени в текущей папке:
find . -name "*.png
Поиск по имени в текущей папке:
find . -name "testfile*"
Не учитывать регистр при поиске по имени:
find . -iname "TeStFile*"
3. Ограничение глубины поиска
Поиска файлов по имени в Linux только в этой папке:
find . -maxdepth 1 -name "*.php"
4. Инвертирование шаблона
Найти файлы, которые не соответствуют шаблону:
find . -not -name "test*"
5. Несколько критериев
Поиск командой find в Linux по нескольким критериям, с оператором исключения:
find . -name "test" -not -name "*.php"
Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:
find -name "*.html" -o -name "*.php"
Эта команда найдёт как php, так и html файлы.
6. Тип файла
По умолчанию find ищет как каталоги, так и файлы. Если вам необходимо найти только каталоги используйте критерий type с параметром d. Например:
find . -type d -name "Загрузки"
Для поиска только файлов необходимо использовать параметр f:
find . -type f -name "Загрузки"
6. Несколько каталогов
Искать в двух каталогах одновременно:
find ./test ./test2 -type f -name "*.c"
7. Поиск скрытых файлов
Найти скрытые файлы только в текущей папке. Имена скрытых файлов в Linux начинаются с точки:
find . -maxdepth 1 -type f -name ".*"
8. Поиск по разрешениям
Найти файлы с определенной маской прав, например, 0664:
find . -type f -perm 0664
Права также можно задавать буквами для u (user) g (group) и o (other). Например, для того чтобы найти все файлы с установленным флагом Suid в каталоге /usr выполните:
sudo find /usr -type f -perm /u=s
Поиск файлов доступных владельцу только для чтения только в каталоге /etc:
find /etc -maxdepth 1 -perm /u=r
Найти только исполняемые файлы:
find /bin -maxdepth 2 -perm /a=x
9. Поиск файлов в группах и пользователях
Найти все файлы, принадлежащие пользователю:
find . -user sergiy
Поиск файлов в Linux принадлежащих группе:
find /var/www -group www-data
10. Поиск по дате модификации
Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:
find / -mtime 50
Поиск файлов в Linux открытых N дней назад:
find / -atime 50
Найти все файлы, модифицированные между 50 и 100 дней назад:
find / -mtime +50 -mtime -100
Найти файлы измененные в течении часа:
find . -cmin 60
11. Поиск файлов по размеру
Найти все файлы размером 50 мегабайт:
find / -size 50M
От пятидесяти до ста мегабайт:
find / -size +50M -size -100M
Найти самые маленькие файлы:
find . -type f -exec ls -s {} ; | sort -n -r | head -5
Самые большие:
find . -type f -exec ls -s {} ; | sort -n | head -5
12. Поиск пустых файлов и папок
find /tmp -type f -empty
find ~/ -type d -empty
13. Действия с найденными файлами
Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, для того чтобы найти все пустые папки и файлы, а затем выполнить ls для получения подробной информации о каждом файле используйте:
find . -empty -exec ls -ld {} ;
Удалить все текстовые файлы в tmp
find /tmp -type f -name "*.txt" -exec rm -f {} ;
Удалить все файлы больше 100 мегабайт:
find /home/bob/dir -type f -name *.log -size +100M -exec rm -f {} ;
Выводы
Вот и подошла к концу эта небольшая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее важных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желательно знать всем системным администраторам. Если вам нужно искать именно по содержимому файлов, то лучше использовать команду grep.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Найти определенный файл или каталог через shell всегда можно при помощи известной команды find. Однако использовать ее можно по-разному, а всяческие опции во время поиска открывают массу дополнительных возможностей. Рассмотрим их подробнее.
Примитивный поиск файла по названию через find выглядит так:
find . -name test
После самой команды find пишется точный путь каталога, в котором нужно что-то найти. В примере указана точка, что говорит о поиске в текущей папке. Параметр -name указывает на поиск по наименованию. В конце обязательно указывается непосредственно имя. Т.е. мы ищем нечто под названием test в текущей папке.
А вот так происходит аналогичный поиск, в котором не учитывается регистр символов:
find . -iname test
Обратите внимание на то, что конструкция поиска позволяет найти как файл, так и папку с заданным именем. Чтобы исключить из выдачи любые папки, нужно конкретизировать тип искомых данных при помощи специального ключа —type.
find . -type f -name test
Применение ключа —type f ограничит выдачу только файлами (f). Аналогично можно сделать и для папок, только использовать нужно уже ключ —type d:
find . -type d -name test
Еще больше сузить область поиска можно, если указать конкретное расширение файлов. К примеру, нам нужно найти все файлы с расширением .db в папке /var/docs:
find /var/docs -type f -name *.db
Как видите, поиск теперь будет не в текущем каталоге, а в заданном нами.
Если же ситуация сложилась так, что имени файла или папки не знаешь, то можно попробовать поискать по времени доступа или по дате создания. Для этого существует ключ -atime:
find . -type f -atime 1
В поисковой выдаче будут все файлы с любым расширением, которые использовались или были созданы за период последних 24 часов. Параметр n в ключе —atime n обозначает количество 24-часовых промежутков.
Можно также отсортировать все, что было задействовано больше суток тому:
find . -type f -atime +1
По той же логике ограничить можно истечением двух суток:
find . -type f -atime +2
А вот так мы найдем все папки, которые были использованы за последние 24 часа:
find . -type f -atime -1
Существуют и другие ключи, используемые по такому же принципу. Самые популярные из них:
«-mtime n» – ищем файлы, с которыми были проведены любые действия определенное время назад. Само время устанавливается по формуле n=n*24;
«-ctime n» – ищем по времени смены статуса или созданию конкретного файла или папки;
«-amin n» – папки/файлы, которые были использованы определенное время (n) назад (в минутах);
«cmin n» – папки/файлы с измененным статусом (создание, использование и т.п.) за определенное количество минут назад (параметр n);
«mmin n» – папки/файлы с измененным статусом (создание, использование и т.п.) за определенное количество секунд назад (параметр n).
Также, поиск легко ограничивается владельцем директории или файла. Для этого существует ключ -user:
find . -name *.jpg -user Ivan
Данная конструкция позволяет найти все JPG изображения пользователя с именем Ivan.
Однако просто искать чаще всего недостаточно. Над найденными файлами или папками можно сразу проводить определенные операции. Давайте познакомимся с примером, в котором все найденные по маске файлы будут удалены. Для этого будем работать с ключом —exec. Он предназначен для повторения определенного действия над каждым результатом выдачи:
find /aaa -type f -name tmp* -exec rm -f {} ;
Пояснения по конструкции:
«/aaa» – директория поиска /aaa;
«-type f» – ограничиваемся файлами, папки нам не нужны;
«-name tmp*» – имя файла должно начинаться на tmp, на месте звездочки могут быть любые символы;
«-exec rm -f {}» – удаляем каждый найденный по маске файл;
«{}» – список аргументов заменяется;
«;» – логичный конец конструкции.
А вот еще один интересный пример, позволяющий установить нужные права для любых файлов, найденных в определенной папке:
find /home/nobody/public_html -type f -exec chmod 644 {} ;
Аналогично и для найденных папок:
find /home/nobody/public_html -type d -exec chmod 755 {} ;
Стоит отметить, что главный каталог /public_html также получит новые права, т.к. в результатах поиска он будет определяться текущим. Возвращаем ему правильные права простой командой:
chmod 750 public_html
Наконец, предлагаем пример более «продвинутой» работы с find. Тут мы ищем .htaccess и закрываем комментариями определенные php-переменные:
find /home/nobody/public_html -type f -name .htaccess -exec replace «php_admin_flag» «#php_admin_flag» — {} ;
find /home/nobody/public_html -type f -name .htaccess -exec replace «php_flag» «#php_flag» — {} ;
find /home/nobody/public_html -type f -name .htaccess -exec replace «php_admin_value» «#php_admin_value» — {} ;
find /home/nobody/public_html -type f -name .htaccess -exec replace «php_value» «#php_value» — {} ;
Все еще зависите от графического интерфейса? Вы можете значительно повысить свою производительность, изучив несколько основных команд shell. Перевели статью, которая вам в этом поможет.
pwd — возвращает имя текущей директории
Давайте посмотрим, где мы находимся, когда только открыли терминал:
Я в своей домашней директории, а где вы?
ls — просмотр содержимого директории
Давайте посмотрим, что мы видим в текущей директории:
Здесь много всего: редко чищу домашнюю директорию, поэтому я сократил вывод.
Команда ls поддерживает много удобных опций, эти три я использую все время:
- -l: — строчная буква «л». Список в длинном формате (см. ниже.) Общая сумма для всех размеров файлов (в блоках) выводится в строке перед длинным списком.
- -h: — используется с опцией -l, выводит размер файлов в более читабельном виде, например: 10G, 42M. h здесь означает human-readable (понятный человеку).
- -a: — короткая запись опции all (все файлы). Включает отображение скрытых файлов, имена которых начинаются с точки (.).
Вы можете использовать все эти опции одновременно:
$ ls -lha
total: 32
drwxr-xr-x+ 85 erik staff 2.7K May 27 11:11 .
drwxr-xr-x 6 root admin 193B Sep 29 2019 ..
-rw-r--r-- 1 erik staff 2.1K Apr 15 11:06 .gitignore
-rw-r--r-- 1 erik staff 25M May 26 15:44 image.zip
...
Здесь вы видите права доступа, владельца и группу, размер файла, данные последнего изменения файлов и само имя файла.
В первых двух строках вы можете заметить что-то странное: два имени файла — . и ..:
- . — это текущий каталог. Он даже имеет размер, который зависит от количества файлов в каталоге.
- .. — это основной каталог, частью которого является текущий каталог.
Эти удобные ярлыки можно использовать в любой команде. Если вы хотите просмотреть содержимое основного каталога, используйте ls ../. Вы также можете использовать эту конструкцию несколько раз, поэтому, если хотите перейти на две директории выше, можете использовать ls ../../.
cd — перейти в другую директорию
Теперь, когда вы знаете, где находитесь и какие каталоги есть, то хотите перемещаться по каталогам. Допустим, ваши проекты хранятся в папке «Projects». Вы можете перейти туда, набрав:
Большинство оболочек поддерживают автодополнение. Просто попробуйте, набрав:
Оболочка автоматически дополнит название каталога или, если названия нескольких каталогов соответствуют введенному, покажет все варианты.
cp — копирование
Вы можете скопировать или сделать дубликаты некоторых файлов. Команда cp делает именно это — она копирует файл. Это делается путем создания нового файла и копирования всего содержимого в этот файл. Чтобы скопировать файл file1.txt во второй файл, например для резервного копирования, используйте:
$ cp file1.txt file1.txt.bak
Чтобы скопировать файл в другую директорию, используйте:
$ cp file1.txt ./backups/
./ означает «текущий каталог», поэтому «backups» находятся в текущем рабочем каталоге.
mv — переместить
Если нужно переместить файл, используйте команду mv. Обратите внимание, что перемещение файла аналогично переименованию файла. На самом деле нет команды переименования. Использование mv не сильно отличается от cp. Чтобы переименовать/переместить файл:
$ mv file1.txt file1.txt.bak
Чтобы переместить файл в другую директорию:
$ mv file1.txt ./backups/
mkdir — создать директорию
Эта команда просто создаст каталог. Чтобы создать каталог для хранения ваших проектов, используйте:
У этой команды есть один удобный аргумент -p. Когда вы используете его, любые промежуточные каталоги, которые еще не существуют, также будут созданы. Если хотите создать свой первый проект внутри «Projects» напрямую, можете сделать это с помощью:
$ mkdir -p Projects/my_first_project
rmdir — удалить директорию
Противоположностью mkdir является rmdir, он удаляет каталог. Он даже допускает тот же аргумент -p:
Чтобы удалить каталог Projects и первый проект, который мы только что создали:
$ rmdir -p Projects/my_first_project
Удаление каталога будет работать только тогда, когда этот каталог пуст. Если вы хотите удалить каталог, включая его содержимое, смотрите команду rm, которая будет следующей.
Команда rm
Теперь мы попадаем в опасную область. Эта команда очень мощная и может разрушить вашу файловую систему. Используйте ее осторожно.
Давайте начнем с уничтожения файла:
Учтите, что тут нет понятия «Мусорной корзины».
Теперь давайте удалим все файлы в каталоге наших проектов, которые заканчиваются на .txt. Вам нужен так называемый шаблон glob, который соответствует нескольким файлам:
Если вы хотите удалить все файлы в каталоге, используйте:
Шаблон glob * соответствует всем файлам.
Если не хотите ошибиться, используйте опцию -i, которая заставит вас подтвердить операцию удаления.
Теперь давайте удалим целое дерево каталогов и файлов. Для этого вам нужен аргумент -r, сокращение от рекурсивный. Иногда rm -r отказывается удалять специальные файлы или постоянно запрашивает подтверждение. Вы можете использовать опцию -f, чтобы удалить все, что можно — никаких вопросов не будет задано. Давайте удалим все наши проекты:
Вся ваша работа уничтожена.) Как я и говорил, используйте эту команду осторожно!
cat, less, tail, head — просмотр содержимого файлов
Часто бывает, что нужно посмотреть содержимое файла. Есть несколько способов сделать это. Выберите тот, который соответствует вашему варианту использования:
- cat — выводит все содержимое файла на экран;
- less — позволяет пролистывать файл и даже искать внутри него;
- tail — работает как cat, но выводит последние 10 строк файла (по умолчанию);
- head — работает как cat, но выводит первые 10 строк файла (по умолчанию).
И tail, и head используют опцию -n <num>, чтобы изменить количество отображаемых строк.
Рассказываем об IT-бизнесе, технологиях и цифровой трансформации
Подпишитесь в соцсетях или по email
control+r — найти предыдущую команду
Было бы неплохо иметь возможность быстро найти команду, которую вы использовали вчера или на прошлой неделе. Это возможно! Просто нажмите Ctrl + R на клавиатуре и начните вводить ту часть команды, которую вы помните, — это может быть любая часть.
Если то, что вы нашли, не совсем то, что нужно, продолжайте поиск, нажимая несколько раз Ctrl + R. Он будет продолжать давать совпадения по вашей истории команд.
Удачи!