Linux: простые способы поиска файлов Самый простой способ оценить важность задачи выполняемой на компьютере - посчитать сколько программ написано для ее решения. Посчитав различные варианты поиска файлов становится понятно что эта задача важна как для рядовых пользователей так и для администраторов систем под управлением Linux.

[ad#ad-2]
Вариант первый: поиск файлов по имени в заведомо известной директории.

test@test:~$ ls *search_file*
search_file.txt
test@test:~$

или поиск по всем поддиректориям (исходя из той директории в которой вы находитесь)

test@test:ls */*search_file* 

или же можно объединить поиск

test@test:ls */*search_file* *search_file*
ls: невозможно получить доступ к */*search_file*: Нет такого файла или каталога
search_file.txt

Для некоторых дистрибутивов так же доступна программа slocate. Она создает индекс файлов файловой системы и выполняет поиск по нему.

test@test:slocate search_file

Вариант второй: Использование команд which и whereis
Программа whereis ищет исполняемые файлы , исходные коды и документацию (man файлы ) для указанной команды. Приэтом поиск происходит только в директориях указанных в переменных окружения. Например:

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

Выполнение этой команды покажет нам где находится исполняемый файл для команды "ls", а так же где находится документация (man файл).
Команда which ищет исполняемый файл команды и только в тех директориях которые указаны в переменной "path" среды окружения. Например

$ which vi
/usr/bin/vi

Вариант третий: использование мощного инструмента "find"
Команда "find" мощный инструмент поиска, который в состоянии определить местонахождение файлов на основе собственности, прав доступа, времени последнего доступа, размера, и многого другого. Соответственно и синтаксис команды намного сложнее

$ find /etc -name '*.conf' -user cupsys -print 
find: /etc/ssl/private: Permission denied 
find: /etc/cups/ssl: Permission denied 
/etc/cups/cupsd.conf 
/etc/cups/printers.conf 

В этом примере мы ищем файл с расширением *.conf, которые принадлежат пользователю cupsys и находятся в директории /etc.
В общем случае синтаксис команды find такой

$ find <где ищем > <что ищем> <что делаем с тем что найдено> 

<где ищем > - это простой список директорий, разделенный пробелами, указывающий где искать файл. Далее мы покажем как задать <что ищем>:
1. -name string : поиск файлов в названии которых есть указанная строка. Например: -name '*.jpg'
2. -iname string: тоже что и -name но не чувствительно к регистру. Например: -iname '*tax*'
3. -user username: указывает файлы какого пользователя искать. Например: -user test
4. -group groupname: указывает на принадлежность файла группе. Например: -group www-data
5. -type x: указывает на тип файла. А именно: f - ищем файл, d - ищем директорию, l - ищем символическую ссылку, b - ищем файл устройства. Например: -type d
6. -size +N: указывает что размер файла должен быть равен или больше указанного значения (используем суффикс c для указания размера в байтах , k в килобайтах, M в мегабайтах). Например: -size +100M
7. -size -N: указывает что размер файла должен быть равен или меньше указанного значения (используем суффикс c для указания размера в байтах , k в килобайтах, M в мегабайтах). Например: -size -50c
8. -mtime -N: указывает что дата последнего изменения фала должна быть меньше чем указанное количество дней. Например: -mtime -1
9. -mtime +N: указывает что дата последнего изменения фала должна быть больше чем указанное количество дней. Например: -mtime +21
10. -perm mode: указывает какими должны быть права доступа к искомому файлу. Например: -perm 644.

<что делаем с тем что найдено> указывает дальнейшие действия с найденными файлами
-print - стандартное решение (дефолтное и может не указываться) - вывод полного пути к файлу.
-ls - вывод всей информации о найденный файлах - аналогично ls -dils
-delete - удалить найденный файлы

А таперь несколько примеров

$ find ~ -name '*.ppt'

Ищет файлы PowerPoint в домашней директории пользователя

$ find /var -type d -user daemon

Ищет все директории владельцем которых является пользователь daemon в папке /var

$ find /etc -user cupsys -or -size 0

Ищет в папке /etc все файлы владельцем которых является пользователь cupsys или размер которых равен 0 байт

Теги: