Ищем файлы в Linux

Поиск больших файлов и директорий в Linux

Дисковое пространство не вечно. Рано или поздно приходит момент, когда его катастрофически не хватает. Эффективный способ это исправить — найти файлы и директории, которые занимают больше всего места.

Рассмотрим, как это сделать в Linux с использованием команд find и du .

Поиск больших файлов командой find

Простой поиск

Команда find имеет опцию -size , которая позволяет указать размер файлов для поиска.

Найдем файлы, которые занимают больше 1Gb:

  • Символ точка . после самой команды find, означает, что поиск нужно вести в текущей директории. Вместо точки вы можете указать, например, корневой раздел / или путь до любой другой директории.
  • -mount означает, что в процессе поиска не нужно переходить на другие файловые системы.
  • -type f означает, что мы ищем файлы.
  • -size +1G означает, что нужно найти файлы, размер которых превышает 1Gb. Размер можно указать в различных форматах:
    • b — блоки размером 512 байт. Числом указывается количество блоков.
    • c — в байтах. Например: -size +128с
    • w — в двухбайтовых словах
    • k — в килобайтах
    • M — в мегабайтах
    • G — в гигабайтах
  • 2>/dev/null используется, чтобы не показывать ошибки (например, если нет доступа к файлу).

В результате выполнения команды будет выведен список файлов без какой-либо дополнительной информации.

Вывод подробной информации

Добавим в вывод информацию о каждом файле и отсортируем список по размеру. Выполняем команду

Данная команда состоит из трех частей:

  • Команда find ищет файлы, которые имеют размер больше 512 мегабайт.
  • Результирующий список файлов передается команде xargs , которая, в свою очередь, запускает команду ls -lh над этим списком файлов. В результате получается таблица с файлами и информацией о файлах.

Опция -r , команды xarg, используется для того, чтобы не запускать команду ls, если команда find вернула пустой результат (не нашла файлов). Вместо -r можно использовать длинную запись — опцию –no-run-if-empty
Опция -d ’n’ используется, чтобы разделять список файлов только по символу новой строки (по n ). А у нас так и есть — каждый файл на новой строке. Иначе неправильно будут обработаны файлы, в названии которых содержится пробел, так как по умолчанию команда xarg в качестве разделителя использует одновременно пробел, табуляцию или символ новой строки.

Примечание: Для BSD-систем вместо -d ’n’ нужно использовать опцию −0 , а у команды find вместо -print использовать -print0 . Пример: find . -mount -type f -size +512M -print0 2>/dev/null | xargs -0 ls -lh | sort -k5,5 -h -r

  • Затем результат команды ls передается команде sort , которая выполняет сортировку списка (таблицы) по пятой колонке — 5-я колонка содержит размеры файлов.
    Ключ -h означает, что результат нужно вывести в удобно-читаемом виде (human-readable).
    Ключ -r означает, что сортировку нужно выполнять по убыванию (reverse).
  • Поиск больших файлов и директорий командой du

    Команда du используется для вывода размеров файлов и директорий в Linux. Ее можно использовать для поиска больших файлов и директорий. Для этого выполняется команда du и результат сортируется по размеру. Таким образом можно увидеть, кто занимает больше всего места на диске.

    Найдем пять самых больших файлов и директорий:

    • Символ . указывает путь и означает текущую директорию. Для поиска в другой директории укажите вместо точки ее путь.
    • Опции -ahx означают:
      a — искать и файлы и директории;
      h — выводить информацию в удобно-читаемом формате;
      x — не выполнять поиск на других файловых системах.
    • sort -rh выполняет сортировку результата.
    • head −5 выводит только пять первых результатов.

    Поиск в Linux с помощью find

    Самая универсальная и функциональная команда для поиска в Linux — find. Данная статья представляет из себя шпаргалку с примерами ее использования.

    Общий синтаксис

    путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

    набор правил, по которым выполнять поиск.

    * по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

    Описание опций

    Тип объекта поиска. Возможные варианты:

    • f — файл;
    • d — каталог;
    • l — ссылка;
    • p — pipe;
    • s — сокет.
    Опция Описание
    -name Поиск по имени.
    -iname Регистронезависимый поиск по имени.
    -type
    -size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
    -mtime Время изменения файла. Указывается в днях.
    -mmin Время изменения в минутах.
    -atime Время последнего обращения к объекту в днях.
    -amin Время последнего обращения в минутах.
    -ctime Последнее изменение владельца или прав на объект в днях.
    -cmin Последнее изменение владельца или прав в минутах.
    -user Поиск по владельцу.
    -group По группе.
    -perm С определенными правами доступа.
    -depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
    -maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
    -prune Исключение перечисленных каталогов.
    -mount Не переходить в другие файловые системы.
    -regex По имени с регулярным выражением.
    -regextype Тип ругулярного выражения.
    -L Показывает содержимое символьных ссылок (симлинк).
    -empty Искать пустые каталоги.
    -delete Удалить найденное.
    -ls Вывод как ls -dgils
    -print Показать найденное.
    -print0 Путь к найденным объектам.
    -exec <> ; Выполнить команду над найденным.
    -ok Выдать запрос перед выполнением -exec.

    Полный набор актуальных опций можно получить командой man find.

    Примеры использования find

    Поиск файла по имени

    find / -name “file.txt”

    * в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

    Поиск файла по части имени:

    * данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

    Найти все файлы или папки, которые начинаются на sess_ и заканчиваются на cd

    find . -name “sess_*” -a -name “*cd”

    * -a: логическое И, -o: логическое ИЛИ.

    Поиск по дате

    1. Поиск файлов, которые менялись определенное количество дней назад:

    find . -type f -mtime +60

    * данная команда найдет файлы, которые менялись более 60 дней назад.

    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

    По типу

    Искать в текущей директории и всех ее подпапках только файлы:

    * f — искать только файлы.

    Поиск по правам доступа

    Ищем все справами на чтение и запись:

    find / -perm 0666

    Находим файлы, доступ к которым имеет только владелец:

    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)

    Найти только файлы, которые начинаются на sess_ и удалить их:

    find . -name “sess_*” -type f -print -exec rm <> ;

    * -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

    Переименовать найденные файлы:

    find . -name “sess_*” -type f -exec mv <> new_name ;

    find . -name “sess_*” -type f | xargs -I ‘<>‘ mv <> new_name

    Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

    find . -name “*.tmp” | wc -l

    find /home/user/* -type d -exec chmod 2700 <> ;

    * в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

    Чистка по расписанию

    Команду find удобно использовать для автоматического удаления устаревших файлов.

    Открываем на редактирование задания cron:

    0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> ;

    * в данном примере мы удаляем все файлы и папки из каталога /tmp, соторые старше 14 дней. Задание запускается каждый день в 00:00.
    * полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

    Поиск файлов в Linux или Изучаем команду find

    Автор: Нагибин Владимир . Дата статьи: 26.03.2010

    Несомненно, при работе с Linux, иногда возникает необходимость поиска файлов с определенными характеристиками. Этими характеристиками могут быть размер или тип файла, права доступа и другое.

    Наличие в Linux команды find, во многом помогает справиться с поиском файлов по различным критериям.

    Сегодня мы разберем поиск файлов в Linux и приведем основные опции команды find, которые вы сможете применить в своей работе.

    Формат команды find:

    find путь -опции

    где путь – это каталог, в котором произвести поиск. В качестве пути можно указывать следующие значения:

    . – поиск в текущем каталоге;

    / – поиск от корневого каталога;

    – поиск в домашнем каталоге.

    Что до опций, то тут гораздо бОльший список, с которым крайне необходимо внимательно ознакомиться (это в будущем очень поможет!). Итак, основные опции команды find:

    -name – поиск файлов по имени, используя приведенный шаблон;

    -user – поиск файлов, принадлежащих указанному пользователю;

    -group – поиск файлов, принадлежащих указанной группе;

    -perm – поиск файлов с указанным режимом доступа;

    -type – поиск файлов определенного типа. Типов тоже достаточно:

    • b – специальный блочный файл;
    • d – каталог;
    • c – специальный символьный файл;
    • f – обычный файл;
    • l – символическая ссылка;
    • p – именованный канал;
    • s – сокет.

    -size n – поиск файлов с размером n единиц;

    -mtime -n +n – поиск файлов, содержание которых изменялось менее чем (-) или более чем (+) дней назад.

    Рассмотрим некоторые примеры применения команды find:

    Наиболее часто применяемой опцией является опция -name, которая производит поиск файлов по имени.

    Примеры с опцией -name :

    $ find /mnt/usb -name “*.mp3” -print

    произведет поиск всех файлов (об этом свидетельствует знак *), имеющих расширение .mp3 на USB-устройстве, смонтированном в каталог /mnt/usb.

    выведет на экран список файлов домашнего каталога, начинающихся на test.

    Если вам надо найти файлы, начинающиеся с определенных букв (к примеру, от a до j), то здесь будет удобно применить регулярные выражения, которые крайне удобны в работе:

    $ find / -name “[a-j]*” -print

    Вышеуказанная команда позволит отыскать все файлы в системе, начинающиеся с букв от a до j.

    Поиск файлов с определенными режимами доступа

    Если потребуется найти файлы, имеющие определенные режимы доступа, вам поможет опция -perm, которая легко в этом поможет.

    К примеру, выполним поиск файлов с режимом доступа 775 (владелец и группа имеют полные права и ограничение на запись имеют остальные пользователи), находящихся в текущем каталоге :

    $ find . -perm 775 -print

    Выполняя поиск при помощи find с опцией -perm можно использовать и другой способ – можно перед значением режима поставить дефис и тогда будет произведен поиск файлов, для которых установлены все указанные биты разрешений. Причем, остальные биты в этом случае игнорируются.

    К примеру, найдем файлы, к которым пользователи группы имеют полный доступ:

    $ find . -perm -070 -print

    Вместо знака дефиса, можно указать знак плюса. В этом случае будет произведен поиск файлов, у которых установлен хотя бы один из указанных битов разрешений. Остальные биты при этом игнорируются.

    Поиск файлов определенного пользователя или группы

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

    $ find / -user admin -print

    Вышеуказанная команда произведет поиск файлов в системе, принадлежащих пользователю admin.

    Для того, чтобы найти файлы, принадлежащие определенной группе (к примеру managers), выполним команду:

    $ find / -group managers -print

    Для поиска файлов несуществующих пользователей или групп можно воспользоваться опциями -nouser и -nogroup:

    $ find / -nouser -print

    $ find / -nogroup -print

    Поиск файлов определенного типа

    Одной из удобных возможностей команды find, является возможность поиска файлов определенного типа. Рассмотрим варианты использования опции -type:

    Поиск символических ссылок в каталоге /etc:

    $ find /etc -type l -print

    Вывод на экран списка каталогов, присутствующих в каталоге /mnt/raid

    $ find /mnt/raid -type d -print

    Поиск файлов определенного размера

    Опция -size позволяет произвести поиск файлов определенного размера и имеет следующий вид при выполнении:

    $ find . -size 2000k -print

    Вышеуказанная команда отыщет и отобразит на экране файлы размером 2 мегабайта, находящийся в текущем каталоге. Если, к примеру, необходимо найти файлы размером менее 500 килобайт, то вид команды будет следующий:

    $ find . -size -500k -print

    Если нужно найти файлы размером более 600 мегабайт, то применим команду:

    $ find / -size +600M -print

    Поиск файлов с использованием опции -mtime

    Опция -mtime позволит вам найти файлы, изменявшиеся в какой-то срок времени.

    К примеру, у нас встала задача поиска файлов, находящихся в каталоге /mnt/raid/upload , и изменявшихся за последние 5 дней. В этом нам поможет команда:

    $ find /mnt/raid/upload -mtime -5 -print

    Если нам необходимо обратное, к примеру, отыскать файлы, которые не изменялись неделю, применим команду:

    $ find /mnt/raid/upload -7 -print

    Команда find является крайне удобным инструментом для поиска файлов и может использоваться также и для поиска файлов на дисках NFS (сетевых файловых системах), но в этом случае необходимо учесть, что времени на поиск чего-либо на NFS уйдет гораздо больше, чем на локальных дисках.

    В этой статье мы рассмотрели лишь основные опции команды find, которые помогут вам в вашей работе. Используйте то, что удобно и не переживайте по пустякам!

    IT-поддержка

    Оказываем квалифицированную помощь в поддержке Вашей IT-инфраструктуры

    Команда find в Linux

    Очень важно уметь вовремя и очень быстро найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux. Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения. Кроме того, с найденными файлами можно сразу же выполнять необходимые действия.

    В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.

    Основная информация о Find

    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. Поиск всех файлов

    Показать все файлы в текущей директории:

    2. Поиск файлов в определенной папке

    Показать все файлы в указанной директории:

    Искать файлы по имени в текущей папке:

    Не учитывать регистр при поиске по имени:

    find . -iname “test*”

    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”

    6. Несколько каталогов

    Искать в двух каталогах одновременно:

    find ./test ./test2 -type f -name “*.c”

    7. Поиск скрытых файлов

    Найти скрытые файлы:

    8. Поиск по разрешениям

    Найти файлы с определенной маской прав, например, 0664:

    find . type f -perm 0664

    Найти файлы с установленным флагом suid/guid:

    find / -perm 2644

    find / -maxdepth 2 -perm /u=s

    Поиск файлов только для чтения:

    find /etc -maxdepth 1 -perm /u=r

    Найти только исполняемые файлы:

    find /bin -maxdepth 2 -perm /a=x

    9. Поиск файлов по группах и пользователях

    Найти все файлы, принадлежащие пользователю:

    find . -user sergiy

    Поиск файлов в Linux принадлежащих группе:

    find /var/www -group developer

    10. Поиск по дате модификации

    Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

    Поиск файлов в Linux открытых N дней назад:

    Найти все файлы, модифицированные между 50 и 100 дней назад:

    find / -mtime +50 –mtime -100

    Найти файлы измененные в течении часа:

    11. Поиск файлов по размеру

    Найти все файлы размером 50 мегабайт:

    От пятидесяти до ста мегабайт:

    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

    13. Действия с найденными файлами

    Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, выполнить ls для получения подробной информации о каждом файле:

    find . -exec ls -ld <> ;

    Удалить все текстовые файлы в tmp

    find /tmp -type f -name “*.txt” -exec rm -f <> ;

    Удалить все файлы больше 100 мегабайт:

    find /home/bob/dir -type f -name *.log -size +10M -exec rm -f <> ;

    Выводы

    Вот и подошла к концу эта небольшая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее важных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желательно знать всем системным администраторам. Если вам нужно искать именно по содержимому файлов, то лучше использовать команду grep.

    Читать еще:  Узнаем объем оперативной памяти на ПК
    Ссылка на основную публикацию
    Adblock
    detector