Команда cut linux

Как вырезать по полю

Команда Cut в основном используется для отображения выбранных полей из каждой строки файлов или стандартного ввода. Если не указан, по умолчанию используется разделитель «TAB».

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

test.txt

245:789 4567    M:4540  Admin   01:10:1980
535:763 4987    M:3476  Sales   11:04:1978

Для отображения 1-го и 4-го полей вы должны использовать:

cut test.txt -f 1,3
245:789	M:4540
535:763	M:3476

Или, если вы хотите отобразить с 1-го по 4-е поле:

cut test.txt -f -4
245:789	4567	M:4540	Admin
535:763	4987	M:3476	Sales

Как резать на основе разделителя

Чтобы Cut на основе разделителя, используйте параметр -d, за которым следует разделитель, который вы хотите использовать.

Например, чтобы отобразить 1-е и 3-е поля, используя «:» в качестве разделителя, введите:

cut test.txt -d ':' -f 1,3
245:4540	Admin	01
535:3476	Sales	11

Вы можете использовать любой отдельный символ в качестве разделителя. В следующем примере мы используем символ пробела в качестве разделителя и печатаем 2-е поле:

echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2
ipsum

Как дополнить выбор

Для дополнения списка полей выбора используйте опцию –complement. Это напечатает только те поля, которые не выбраны с опцией -f.

Следующая команда напечатает все поля кроме 1-го и 3-го:

cut test.txt -f 1,3 --complement

Опции и их описания с примерами

1. -b (byte, байт): используется для извлечения заданных байтов, номера которых указываются после опции через запятую. Можно указать диапазоны через дефис. Если не указать ничего, команда выдаст ошибку. Символы табуляции и пробелы рассматриваются как символы размером в один байт.

$ cut -b 1,2,3 state.txt
Рос
Гер
Нид
Сое
Исп
$ cut -b 1-3,5-7 state.txt
Росия
Герани
Нидрла
Соеине
Испния
echo Россия | cut -b 1,2,3
Рос

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

$ cut -b 1- state.txt
Россия
Германия
Нидерланды
Соединенное Королевство
Испания

Аналогичным образом можно указать байты от начала строки до заданной позиции:

$ cut -b -3 state.txt
Рос
Гер
Нид
Сое
Исп

2. -c (column, столбец): используется для вырезания по символам. Это также может быть список символов, указанных через запятую, или диапазон, заданный через дефис. Символы табуляции и пробела интерпретируются как один символ. Номера символов указывать обязательно, иначе команда выдаст ошибку.

$cut -c [(k)-(n)/(k),(n)/(n)] filename

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

$ cut -c 2,5,7 state.txt
ои
еаи
ира
оие
сня

А эта команда – выводит первые семь символов каждой строки файла:

$ cut -c 1-7 state.txt
Россия
Германи
Нидерла
Соедине
Испания

Интервалы от заданной позиции до конца строки и от начала строки до заданной позиции задаются аналогично предыдущей опции:

$ cut -c 1- state.txt
Россия
Германия
Нидерланды
Соединенное Королевство
Испания
$ cut -c -5 state.txt
Росси
Герма
Нидер
Соеди
Испан

3. -f (field, поле): опция -с полезна для строк фиксированной длины, однако в большинстве файлов они не встречаются. Вам потребуется вырезать данные по полям, а не по столбцам, чтобы получить нужную информацию. Для этого используется опция -f. Номера полей должны разделяться запятыми. Данная опция не позволяет указывать диапазоны

По умолчанию в качестве разделителя полей используется символ табуляции, но при помощи опции -d можно задать другой разделитель.
Важно: по умолчанию пробел не является разделителем

$cut -d "разделитель" -f (номер поля) файл

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

$ cut -f 1 state.txt
Россия
Германия
Нидерланды
Соединенное Королевство
Испания

При помощи опции -d можно задать в качестве разделителя пробел:

$ cut -d " " -f 1 state.txt
Россия
Германия
Нидерланды
Соединенное
Испания

Было выведено каждое слово до пробела.

4. –complement: используется с другими опциями, например, -f или -c, и инвертирует опции вывода:

$ cut --complement -d " " -f 1 state.txt
Россия
Германия
Нидерланды
Королевство
Испания
$ cut --complement -c 5 state.txt
Росся
Гермния
Ниделанды
Соедненное Королевство
Испаия

5. –output-delimiter: По умолчанию разделитель выводимых данных такой же, как указанный в опции -d. Чтобы его изменить, воспользуйтесь опцией –output-delimiter. Следующая команда задает в качестве разделителя вывода символ «%» и выводит 1 и 2 поля с опцией -f:

$ cut -d " " -f 1,2 state.txt --output-delimiter='%'
Россия
Германия
Нидерланды
Соединенное%Королевство
Испания

6. –version: Выводит информацию о версии команды:

$ cut --version
cut (GNU coreutils) 8.26
Packaged by Cygwin (8.26-2)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David M. Ihnat, David MacKenzie, and Jim Meyering.

7. –help: Выводит справочную информацию.

Примеры использования данного синтаксиса:

  • Означает zxcvbn 
  • Означает количество символов с более нуля (включительно) и одну букву d. Например, ccccccd; cd; или d.
  • Означает x или zx
  • Означает одну или больше букв c и одну или больше букв d. Например: cd; ccccd; cddddd; или ccccccddddddd.
  • Выражение, которое определяет весь текст в строке, на всех строках, включая пустые.
  • Маска, задающая все символы на строках с количеством не менее одного символа. Это выражение игнорирует пустые строки.
  • Маска для поиска строк, которые начинаются со слова after, а также включают открывающую и закрывающие скобки, причем перед и после открывающей скобки может располагаться произвольное количество символов (в том числе, равное нулю).
  • Поиск строк, которые начинаются с символа шарп (удобно для поиска и редактирования комментариев в коде)
  • Строки, в конце которых стоит обратный слэш (\).
  • Любые буквы или цифры
  • (В скобке, установлен также пробел и табуляция) — команда описывает один и более символов, кроме пробела и табуляции. Как правило, такое регулярное выражение соответствует словам.

Знак означает любой текстовый фрагмент, обнаруженный в документе: 

$ echo 20381 | sed 's/*/(&)/'
 (20381)

Без знака « текстовый редактор применил бы регулярное выражение только к первому знаку:

$ echo 20381 | sed 's//(&)/'
(2)0381

Рассмотрим практический пример, где необходимо отредактировать алгебраическое выражение, поставив скобки: 

 x+5467-176=y
$ sed 's/*-*/(&)/' mathexpression.txt
 x+(5467-176)=y

Пример удвоения исходного фрагмента текста с помощью амперсанда 

$ echo 701 | sed "s/*/& &/"
701 701

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

$ echo "xyz 701" | sed "s/*/& &/"
xyz 701

Чтобы они удваивались, необходимо отредактировать маску замены:

$ echo "xyz qwer 701" | sed "s/*/& &/"
xyz qwer 701 701

Перестановка слов местами

Ниже показан пример синтаксиса для редактора Sed, при котором слова в текстовом фрагменте меняются местами. 

В этом выражении мы запоминаем две подстроки, а затем выполняем их ротацию.

Удаление повторов

В данном случае соответствует второму слову, а — первому. Маску можно использовать не только в шаблоне для замены, но и в образце для удаления повторяющихся слов. 

Например:

Примеры заданий для Crontab

Давайте проверим некоторые примеры crontab для планирования заданий cron.

1. Запускать задания cron каждые 12 часов

Это помогает при регулярных проверках системы или резервном копировании. Чтобы запланировать выполнение задачи каждые 12 часов, введите:

2. Запускать задание cron каждые 5 минут

Иногда вам нужно следить за своей системой каждые n минут. Используйте следующее выражение для выполнения задачи каждые 5 минут.

3. Запускать работу cron каждый день в 2 часа ночи

Ежедневное резервное копирование может быть запланировано на определенное время. Следующее выражение запускает задание cron каждый день в 2 часа ночи.

Чтобы запланировать работу cron каждый день в 2 часа дня, cron использует 24-часовые часы.

7. Пример задания cron для запуска каждую субботу в 1 час ночи

Это поможет вам запустить резервное копирование в субботу в определенное время. Следующее выражение помогает выполнять работу cron каждую субботу в 1 час ночи.

13. Запуск задания cron ежемесячно

Вместо использования 0 0 1 * *, вы можете использовать ярлык с помощью @monthly. Он работает в 00:00 1-го числа месяца. В качестве альтернативы вы можете разместить свой скрипт в /etc/cron.monthly/.

14. Запуск задания cron еженедельно

Вместо использования 0 0 * * mon, вы можете использовать ярлык с помощью @weekly. Он начинается в 00:00 в понедельник. В качестве альтернативы вы можете разместить свой скрипт в файле /etc/cron.weekly/.

15. Запуск задания cron ежедневно

Вместо использования 0 0 * * *, вы можете использовать ярлык с помощью @daily. Это работает каждый день в 00:00. В качестве альтернативы вы можете разместить свой сценарий в файле /etc/cron.daily/.

16. Выполнение задания cron каждый час

Вместо использования 0 */1 * * *, вы можете использовать ярлык с помощью @hourly. Он работает в 0 минут каждый час. В качестве альтернативы вы можете разместить свой скрипт в файле /etc/cron.hourly/.

17. Запуск задания cron при перезагрузке

Для запуска задачи при каждой перезагрузке системы используйте строку @reboot. Скрипт будет выполнен после перезагрузки.

18. Запуск задания для cron каждые 30 секунд

Cron позволяет работать только с минутами. Не существует простого способа запланировать выполнение задания каждые 30 секунд.

Но мы можем использовать обходной путь, увеличив задержку на 30 секунд.

19. Запустите задание cron и перенаправить вывод

Если наш скрипт имеет какой-то вывод, нам, возможно, захочется его увидеть. Для этого можно сохранить его в отдельный файл. Этот пример позволит запускать php-скрипт каждые 3 минуты и перенаправлять вывод в файл.

Обратите внимание что тут используются абсолютные пути, так как мы не определили нашу переменную $PATH

Резервное копирование заданий cron

Для бекапа задач cron, можно использовать следующую команду:

Для бекапа задач cron определенного пользователя:

Чтобы восстановить cron из файла резервной копии, просто используйте:

Фильтр grep

Фильтр снискал известность среди пользователей систем Unix. Наиболее простым сценарием использования фильтра является фильтрация строк текста, содержащих (или не содержащих) определенную подстроку.

$ cat tennis.txt 
Amelie Mauresmo, Fra
Kim Clijsters, BEL
Justine Henin, Bel
Serena Williams, usa
Venus Williams, USA
$ cat tennis.txt | grep Williams
Serena Williams, usa
Venus Williams, USA

Вы можете выполнить эту же задачу без задействования фильтра cat.

$ grep Williams tennis.txt 
Serena Williams, usa
Venus Williams, USA

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

$ grep Bel tennis.txt 
Justine Henin, Bel
$ grep -i Bel tennis.txt 
Kim Clijsters, BEL
Justine Henin, Bel
$

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

$ grep -v Fra tennis.txt 
Kim Clijsters, BEL
Justine Henin, Bel
Serena Williams, usa
Venus Williams, USA
$

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

$ grep -vi usa tennis.txt 
Amelie Mauresmo, Fra
Kim Clijsters, BEL
Justine Henin, Bel
$

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

paul@debian5:~/pipes$ grep -A1 Henin tennis.txt 
Justine Henin, Bel
Serena Williams, usa

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

paul@debian5:~/pipes$ grep -B1 Henin tennis.txt 
Kim Clijsters, BEL
Justine Henin, Bel

С помощью параметра (контекст) в вывод может быть добавлена одна строка, находящейся обнаруженной строки, и одна строка, находящаяся нее. Все три параметра (A, B и C) могут быть использованы для вывода произвольного количества дополнительных строк (например, могут быть использованы параметры A2, B4 или C20).

paul@debian5:~/pipes$ grep -C1 Henin tennis.txt 
Kim Clijsters, BEL
Justine Henin, Bel
Serena Williams, usa

Фильтр comm

Сравнение потоков данных (или файлов) может быть осуществлено с помощью фильтра . По умолчанию фильтр будет выводить данные в трех столбцах. В данном примере строки Abba, Cure и Queen присутствуют в списках из обоих файлов, строки Bowie и Sweet только в списке из первого файла, а строка Turnet — только в списке из второго файла.

paul@debian5:~/pipes$ cat > list1.txt
Abba
Bowie
Cure
Queen
Sweet
paul@debian5:~/pipes$ cat > list2.txt
Abba
Cure
Queen
Turner
paul@debian5:~/pipes$ comm list1.txt list2.txt 
                Abba
Bowie
                Cure
                Queen
Sweet
        Turner

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

paul@debian5:~/pipes$ comm -12 list1.txt list2.txt 
Abba
Cure
Queen
paul@debian5:~/pipes$ comm -13 list1.txt list2.txt 
Turner
paul@debian5:~/pipes$ comm -23 list1.txt list2.txt 
Bowie
Sweet

Фильтр tr

Вы можете преобразовывать символы с помощью фильтра . В примере ниже показана процедура преобразования всех обнаруженных в потоке данных символов e в символы E.

$ cat tennis.txt | tr 'e' 'E'
AmEliE MaurEsmo, Fra
Kim ClijstErs, BEL
JustinE HEnin, BEl
SErEna Williams, usa
VEnus Williams, USA

В данном случае мы переводим все буквенные символы в верхний регистр, указывая два диапазона значений.

$ cat tennis.txt | tr 'a-z' 'A-Z'
AMELIE MAURESMO, FRA
KIM CLIJSTERS, BEL
JUSTINE HENIN, BEL
SERENA WILLIAMS, USA
VENUS WILLIAMS, USA
$

А здесь мы преобразовываем все символы новых строк в символы пробелов.

$ cat count.txt 
один
два
три
четыре
пять
$ cat count.txt | tr '\n' ' '
один два три четыре пять $

Параметр также может использоваться для преобразования последовательностей из множества заданных символов в один символ.

$ cat spaces.txt 
один    два        три
     четыре   пять  шесть
$ cat spaces.txt | tr -s ' '
один два три
 четыре пять шесть
$

Вы можете использовать фильтр даже для ‘шифрования’ текстов с использованием алгоритма .

$ cat count.txt | tr 'a-z' 'nopqrstuvwxyzabcdefghijklm'
bar
gjb
guerr
sbhe
svir
$ cat count.txt | tr 'a-z' 'n-za-m'
bar
gjb
guerr
sbhe
svir
$

В последнем примере мы используем параметр для удаления заданного символа.

paul@debian5:~/pipes$ cat tennis.txt | tr -d e
Amli Maursmo, Fra
Kim Clijstrs, BEL
Justin Hnin, Bl
Srna Williams, usa
Vnus Williams, USA

Список всех сетевых подключений

Следующая команда с опцией ‘-i‘ показывает список всех сетевых соединений ‘LISTENING & ESTABLISHED’.

# lsof -i

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)
cupsd     1346    root    7u  IPv4  12113      0t0  TCP localhost:ipp (LISTEN)
sshd      1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
master    1551    root   12u  IPv4  12896      0t0  TCP localhost:smtp (LISTEN)
master    1551    root   13u  IPv6  12898      0t0  TCP localhost:smtp (LISTEN)
sshd      1834    root    3r  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
httpd     1918    root    5u  IPv6  15991      0t0  TCP *:http (LISTEN)
httpd     1918    root    7u  IPv6  15995      0t0  TCP *:https (LISTEN)
clock-app 2362   narad   21u  IPv4  22591      0t0  TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT)
chrome    2377   narad   61u  IPv4  25862      0t0  TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED)
chrome    2377   narad   80u  IPv4  25866      0t0  TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)

Указание количества символов для сравнения

По аналогии с пропуском символов, вы можете сообщить утилите uniq о необходимости сравнения лишь заданного количества символов строк. Для этой цели вам придется использовать параметр командной строки .

$ uniq -w  

Например, предположим, что файл содержит следующие строки:

Теперь при необходимости ограничения диапазона символов строк для сравнения тремя первыми символами, может использоваться следующая команда:

$ uniq -w 3 file1

Это приведенная выше команда в действии:

Так как первые три символа третьей и четвертой строк совпадают, эти строки считаются утилитой идентичными. По этой причине в выводе находится лишь третья строка.

Синтаксис Crontab

Каждая строка в файле crontab представляет задание. Это задание содержит пять полей, за которыми следует команда  или скрипт для выполнения.

Синтаксис:

* Минуты Это значение может быть в пределах 0 — 59
* Часы Это значение может быть в пределах 0 — 23
* День месяца Это значение может быть в пределах 1 — 31
* Месяц в году Это значение поля находится в диапазоне от 1 до 12. Так же можно использовать три первые буквы названия месяца, например: jan, feb, mar
* День недели Это значение поля находится в диапазоне от 0 до 7. Где 0 и 7-воскресенье. 1-понедельник, 2-вторник и так далее

Указать несколько значений или диапазон

Для определения нескольких значений или диапазона используйте запятую (,) и дефис (-). Звездочка (*) соответствует чему угодно. Например, для отображения нескольких значений используйте 1,2,3, а для диапазона можно использовать 1-3.

пример:

0 10 1-3 * * /scripts/test.sh

Фильтр od

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

paul@laika:~/test$ cat > text.txt
abcdefg
1234567
paul@laika:~/test$ od -t x1 text.txt 
0000000 61 62 63 64 65 66 67 0a 31 32 33 34 35 36 37 0a
0000020

Содержимое этого же файла может быть выведено и в форме восьмеричных значений байт.

paul@laika:~/test$ od -b text.txt 
0000000 141 142 143 144 145 146 147 012 061 062 063 064 065 066 067 012
0000020

А это содержимое рассматриваемого файла в форме символов ascii (или экранированных символов).

paul@laika:~/test$ od -c text.txt 
0000000   a   b   c   d   e   f   g  \n   1   2   3   4   5   6   7  \n
0000020

Исключение пользователя с помощью символа ‘^’

Здесь мы исключили пользователя root. Вы можете исключить любого пользователя, используя команду ‘^‘ как показано выше.

# lsof -i -u^root

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser    5r  IPv4  11836      0t0  UDP *:soap-beep
rpc.statd 1277 rpcuser    8u  IPv4  11850      0t0  UDP *:55146
rpc.statd 1277 rpcuser    9u  IPv4  11854      0t0  TCP *:32981 (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)

Часто используемые опции

Давайте без долгих предисловий перейдем сразу к делу и изучим наиболее часто используемые опции командной строки.

-b, —bytes=LIST
выбрать из файла только заданные байты согласно списку-c, —characters=LIST
выбрать из файла заданные символы согласно списку-f, —fields=LIST
выбирает только поля, перечисленные в списке. Разделителем по умолчанию служит TAB. Значение по умолчанию может быть переопределено с помощью опции -d.-d, —delimiter=DELIMITER
Позволяет задать разделитель полей. Как уже говорилось выше, значением по умолчанию является TAB, но эта опция позволяет переопределить его.

Options

-b, —bytes=LIST Select only the bytes from each line as specified in LIST. LIST specifies a byte, a set of bytes, or a range of bytes; see below.
-c, —characters=LIST Select only the characters from each line as specified in LIST. LIST specifies a character, a set of characters, or a range of characters; see below.
-d, —delimiter=DELIM Use character DELIM instead of a tab for the field delimiter.
-f, —fields=LIST Select only these fields on each line; also print any line containing no delimiter character, unless the -s option is specified. LIST specifies a field, a set of fields, or a range of fields; see below.
-n This option is ignored, but is included for compatibility reasons.
—complement Complement the set of selected bytes, characters or fields.
-s, —only-delimited Do not print lines not containing delimiters.
—output-delimiter=STRING Use STRING as the output delimiter string. The default is to use the input delimiter.
—help Display a help message and exit.
—version Output version information and exit.

Как обрезать по байтам и символам

Прежде чем идти дальше, давайте проведем различие между байтами и символами.

Один байт составляет 8 бит и может представлять 256 различных значений. Когда был установлен стандарт ASCII, он учитывал все буквы, цифры и символы, необходимые для работы с английским языком. Таблица символов ASCII состоит из 128 символов, и каждый символ представлен одним байтом. Когда компьютеры стали доступны во всем мире, технологические компании начали вводить новые кодировки символов для разных языков. Для языков, содержащих более 256 символов, простое сопоставление 1 к 1 было невозможно. Это приводит к различным проблемам, таким как совместное использование документов или просмотр веб-сайтов, и требовался новый стандарт Unicode, который может обрабатывать большинство мировых систем письма. UTF-8 был создан для решения этих проблем. В UTF-8 не все символы представлены 1 байтом. Символы могут быть представлены от 1 до 4 байтов.

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

В следующих примерах мы используем символ который занимает 2 байта.

Выберите 5-й байт:

Выберите 5-й, 9-й и 13-й байты:

Выберите диапазон от 1-го до 5-го байта:

На момент написания этой статьи версия входящая в состав GNU coreutils, не имела возможности вырезать по символам. При использовании параметра команда ведет себя так же, как и при использовании параметра .

Команда ps в Linux

Сначала рассмотрим общий синтаксис команды, здесь все очень просто:

$ ps опции

$ ps опции | grep параметр

Во втором варианте мы используем утилиту grep для того, чтобы отобрать нужные нам процессы по определенному критерию. Теперь рассмотрим опции утилиты. Они делятся на два типа — те, которые идут с дефисом Unix и те, которые используются без дефиса — BSD. Лучше пользоваться только опциями Unix, но мы рассмотрим и одни и другие. Заметьте, что при использовании опций BSD, вывод утилиты будет организован в BSD стиле.

  • -A, -e, (a) — выбрать все процессы;
  • -a — выбрать все процессы, кроме фоновых;
  • -d, (g) — выбрать все процессы, даже фоновые, кроме процессов сессий;
  • -N — выбрать все процессы кроме указанных;
  • -С — выбирать процессы по имени команды;
  • -G — выбрать процессы по ID группы;
  • -p, (p) — выбрать процессы PID;
  • —ppid — выбрать процессы по PID родительского процесса;
  • -s — выбрать процессы по ID сессии;
  • -t, (t) — выбрать процессы по tty;
  • -u, (U) — выбрать процессы пользователя.

Опции форматирования:

  • -с — отображать информацию планировщика;
  • -f — вывести максимум доступных данных, например, количество потоков;
  • -F — аналогично -f, только выводит ещё больше данных;
  • -l — длинный формат вывода;
  • -j, (j) — вывести процессы в стиле Jobs, минимум информации;
  • -M, (Z) — добавить информацию о безопасности;
  • -o, (o) — позволяет определить свой формат вывода;
  • —sort, (k) — выполнять сортировку по указанной колонке;
  • -L, (H)- отображать потоки процессов в колонках LWP и NLWP;
  • -m, (m) — вывести потоки после процесса;
  • -V, (V) — вывести информацию о версии;
  • -H — отображать дерево процессов;

Теперь, когда вы знаете синтаксис и опции, можно перейти ближе к практике. Чтобы просто посмотреть процессы в текущей оболочке используется такая команда терминала ps:

Все процессы, кроме лидеров групп, в том же режиме отображения:

Все процессы, включая фоновые и лидеры групп:

Чтобы вывести больше информации о процессах используйте опцию -f:

При использовании опции -f команда выдает такие колонки:

  • UID — пользователь, от имени которого запущен процесс;
  • PID — идентификатор процесса;
  • PPID — идентификатор родительского процесса;
  • C — процент времени CPU, используемого процессом;
  • STIME — время запуска процесса;
  • TTY — терминал, из которого запущен процесс;
  • TIME — общее время процессора, затраченное на выполнение процессора;
  • CMD — команда запуска процессора;
  • LWP — показывает потоки процессора;
  • PRI — приоритет процесса.

Например, также можно вывести подробную информацию обо всех процессах:

Больше информации можно получить, использовав опцию -F:

Эта опция добавляет такие колонки:

  • SZ — это размер процесса в памяти;
  • RSS — реальный размер процесса в памяти;
  • PSR — ядро процессора, на котором выполняется процесс.

Если вы хотите получить еще больше информации, используйте вместо -f опцию -l:

Эта опция добавляет отображение таких колонок:

  • F — флаги, ассоциированные с этим процессом;
  • S — состояние процесса;
  • PRI — приоритет процесса в планировщике ядра Linux;
  • NI — рекомендованный приоритет процесса, можно менять;
  • ADDR — адрес процесса в памяти;
  • WCHAN — название функции ядра, из-за которой процесс находится в режиме ожидания.

Дальше мы можем отобрать все процессы, запущенные от имени определенного пользователя:

С помощью опции -H можно отобразить дерево процессов:

Если вас интересует информация только об определенном процессе, то вы можете использовать опцию -p и указать PID процесса:

Через запятую можно указать несколько PID:

Опция -С позволяет фильтровать процессы по имени, например, выберем только процессы chrome:

Дальше можно использовать опцию -L чтобы отобразить информацию о процессах:

Очень интересно то, с помощью опции -o можно настроить форматирование вывода, например, вы можете вывести только pid процесса и команду:

Вы можете выбрать такие колонки для отображения: pcpu, pmem, args, comm, cputime, pid, gid, lwp, rss, start, user, vsize, priority. Для удобства просмотра можно отсортировать вывод программы по нужной колонке, например, просмотр процессов, которые используют больше всего памяти:

Или по проценту загрузки cpu:

Ещё одна опция — -M, которая позволяет вывести информацию про права безопасности и флаги SELinux для процессов:

Общее количество запущенных процессов Linux можно узнать командой:

Мы рассмотрели все основные возможности утилиты ps. Дальше вы можете поэкспериментировать с её параметрами и опциями чтобы найти нужные комбинации, также можно попытаться применить опции BSD.

Использование списков

Список (list) в данном случае может состоять из одного или набора байтов, символов или полей. Например, для вывода только второго байта список будет включать единственное число 2.
Поэтому:

2 — будет выведен только второй байт, символ или поле, считая с первого.
2-5 — будут выведены все байты, символы и поля со второго по пятый.
-3 — будут выведены все байты, символы и поля до четвертого.
5- — будут выведены все байты, символы или поля, начиная с пятого.
1,3,6 — будут выведены только первый, третий и шестой байты, символы или поля.
1,3- — будут выведены первый и все байты, символы или поля, начиная с третьего.

Вывод лишь повторяющихся строк

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

Например, предположим, что файл с именем файл file1 теперь содержит дополнительную строку в конце (обратите внимание на то, что эта строка не повторяется).

Теперь при исполнении команды

$ uniq -D file1

будет генерироваться следующий вывод:

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

$ uniq --all-repeated file1

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

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

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: