Tag: linux

  • Поиск файлов в Linux

    \"find\"

    Для начала создаем файл заданного размера, который в последующем будем искать.

    0. Создадим файл размером 10 Мбайт с размером блока 100 Кбайт:

    rootoor@srv:~/dd-test$ dd if=/dev/zero of=file1.test bs=100K count=100
    100+0 записей считано
    100+0 записей написано
    скопировано 10240000 байт (10 MB), 0,0448225 c, 228 MB/c
    
    rootoor@srv:~/dd-test$ ls -l
    итого 10000
    -rw-r--r-- 1 rootoor rootoor 10240000 2013-05-05 13:47 file1.test
    
    rootoor@srv:~/dd-test$

    /dev/zero – специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов (ASCII NUL, 0x00)

    of=file.test – файл который создаем

    bs=100K – размер блока, 100 КБайт (может быть: К – КБайт, М – МБайт, G – ГБайт)

    count=100 – количество блоков

    В результате мы получили заданный файл, размером 100К*100=10 МБ

    rootoor@srv:~# dd if=/dev/zero of=/var/www/file1.test bs=1M count=52
    52+0 records in
    52+0 records out
    54525952 bytes (55 MB) copied, 0.453559 s, 120 MB/s

    теперь в директории /var/www/ находится файл file1.test размером 52 МБ.

    1. Поиск файлов в текущей директории размером больше 10 Мбайт

    rootoor@srv:/var/www$ find . -size +10M -print
    ./var/www/file1.test

    find – утилита для поиска файлов

    . – где ищем. В нашем случае текущей директории (/var/www/* – поиск в директории /var/www/, ~ – поиск в домашней директории, / – поиск в корне файловой системы, $HOME – поиск в домашней директории )

    -size +10M – размер искомого файла. Больше 10 Мбайт (b – блок, размером 512 байт, c – байт, w – слово, размером 2 байта, k – килобайт, M – мегабайт и G– гигабайт )

    -print – вывод на экран

    2. Поиск файлов больше 50 Мб с выводом детальной информации

    Усложним задачу и попробуем вывести на экран кроме имени файла еще некоторую информацию о нем.

    rootoor@srv:~# find /var/www/* -type f -size +50000k -exec ls -lh {} \\; | awk \'{ print $8 \" \" $5 \" \" $1 \" \" $3\":\"$4 }\'
    
    ./var/www/test1.file 110M -rw-r--r-- rootoor:rootoor
    ./var/www/file1.test 52M -rw-r--r-- rootoor:rootoor

    -type f – тип, который ищем (f – файл, d – директория, l – символичная ссылка, s – сокет, b – блок)

    -exec ls -lh {} \\; – выполняет команду ls -lh над найденными файлами (вывод содержимого директории)

    awk \'{ print $8 \” \” $5 \” \” $1 \” \” $3\”:\”$4 }\’ – обрабатываем вывод информации командой ls -lh

    и выводим более детальную информацию в нужном нам порядке:
    $8 – имя файла
    $5 – размер файла
    $1 – права доступа
    $3 – владелец
    $4 – группа

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

    rootoor@srv:~# find $HOME -name w*  -size +1M -exec ls -lh {} \\; | awk \'{ print $8 \" \" $5 }\'
    
    /home/rootoor/kawabanga.tar.gz 17M

    -name w* – любой файл имя, которого содержит w*