воскресенье, 16 октября 2016 г.

Основы Linux: sort

sort [опции сортировки] [файл или поток]

Позволяет отсортировать строки файла или стандартного вывода по разным критериям (алфавитный порядок, нумерованный, по конкретному столбцу, по нескольким столбцам и т.д.).

Если опции не заданы, сортировка производится по первым словам строк.
sysadmin@localhost:~$ sort mypasswd                                   
bin:x:2:2:bin:/bin:/bin/sh                                             
daemon:x:1:1:daemon:/usr/sbin:/bin/sh                                 
root:x:0:0:root:/root:/bin/bash                                       
sync:x:4:65534:sync:/bin:/bin/sync                                     
sys:x:3:3:sys:/dev:/bin/sh           
-t позволяет указать разделитель столбцов внутри файла
-n указывает использовать нумерованную сортировку
-k указывает номер столбца по которому будут сортироваться строки

Сортируем строки из файла mypasswd в нумерованном порядке по третьему столбцу, разделитель двоеточие:
sysadmin@localhost:~$ sort -t: -n -k3 mypasswd                         
root:x:0:0:root:/root:/bin/bash                                       
daemon:x:1:1:daemon:/usr/sbin:/bin/sh                                 
bin:x:2:2:bin:/bin:/bin/sh   
-r позволяет делать сортировку в обратном порядке.
Тот же пример, что и раньше, но сортировка в обратном порядке:
sysadmin@localhost:~$ sort -t: -n -r -k3 mypasswd                     
sync:x:4:65534:sync:/bin:/bin/sync                                     
sys:x:3:3:sys:/dev:/bin/sh                                             
bin:x:2:2:bin:/bin:/bin/sh
Сортировка по нескольким столбца (сначала по второму, потом по первому, потом по третьему), разделитель столбцов двоеточие

sysadmin@localhost:~$ sort -t: -k2 -k1 -k3n mypasswd

пятница, 14 октября 2016 г.

Основы Linux: find

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

-name задаем имя файла который ищем (с учетом регистра).
Ищем файл hosts в папке /etc:
sysadmin@localhost:~$ find /etc -name hosts                           
find: `/etc/dhcp': Permission denied                          
/etc/hosts
Если у пользователя недостаточно прав на чтение папки, будет выведена ошибка. чтобы не засорять вывод результата поиска  на экран мы можем перенаправить STDERR в файл (если нам нужна эта информация):
sysadmin@localhost:~$ find /etc -name hosts 2> errors.txt           
/etc/hosts 
/etc/avahi.hosts 
Если информация по ошибкам поиска нам не нужна, можно перенаправить вывод в null (т.е. выкинуть):
sysadmin@localhost:~$ find /etc -name hosts 2> /dev/null             
/etc/hosts
/etc/avahi/hosts

-ls позволяет добавить в выдачу подробную информацию по найденным файлам в стиле утилиты ls.
sysadmin@localhost:~$ find /etc -name hosts -ls 2> /dev/null
    41   4 -rw-r--r--   1 root     root      158 Jan 12 2010 /etc/hosts
  6549   4 -rw-r--r--   1 root     root      1130 Jul 19 2011 /etc/avahi/hosts
Первые два столбца указывают на inode number файла и номера блоков в которых он хранится.

-size позволяет указать точный размер файла который ищем, или же больше(+)/меньше(-). Для указания размера можно использовать Байты (c), килобайты (k), мегабайты (M), гигабайты (G).
Ищем файл размером 10 байт:
sysadmin@localhost:~$ find /etc -size 10c -ls 2>/dev/null   
   432    4 -rw-r--r--   1 root     root           10 Jan 28  2015 /etc/adjtime
Ищем файл размером более 100 мегабайт:
sysadmin@localhost:~$ find /usr -size +100M -ls 2> /dev/null
574683 104652 -rw-r--r--   1 root      root      107158256 Aug  7 11:06 /usr/share/icons/oxygen/icon-theme.cache

-maxdepth n ищем файлы на указанной глубине субдиректорий. 
-group groupname ищем файлы принадлежащие указанной группе.
-iname filename ищем по имени без учета регистра.
-mmin n ищем файлы измененные n минут назад.
-type type ищем файлы указанного типа (f - файл, d - папка).
-user username ищем файлы принадлежащие указанному пользователю.

Объединение нескольких опций в поиске действует как инюнкция (все опции должны совпасть).
Ищем только файлы в папке /etc размером 10 байт.
sysadmin@localhost:~$ find /etc -size 10c -type f -ls 2>/dev/null     
432    4 -rw-r--r--   1 root     root           10 Jan 28  2015 /etc/adjtime
73468    4 -rw-r--r--   1 root     root           10 Nov 16 20:42 /etc/hostname