ѕодпишитесь на наш Telegram-канал Ѕудьте в курсе последних новостей 👇 😉 ѕодписатьс€
ѕоддержим в трудное врем€ —пециальное предложение на техническую поддержку вашей »“ - инфраструктуры силами наших экспертов ѕодобрать тариф
ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
офисной телефонии
Ўаг на пути к созданию доступных унифицированных коммуникаций в вашей компании ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопасность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

10 минут чтени€

÷ель стати разобратьс€ с текстовыми потоками. ј также рассмотреть фильтрование текстовых выводы логов их редактирование, журналов сообщений и т.д. ѕроще говор€, рассмотреть фильтраци€ и корректировка выводимого на экран текста. “екстовый поток так называетс€, потому что это выводима€ информаци€ может быть не просто статичный текстовый файл, а те текстовые файлы, которые посто€нно мен€ютс€ или дополн€ютс€ в режиме реального времени.

—писок стандартных команд, которые понадоб€тс€ дл€ достижени€ цели:

Cat, cut, expand, fmt, head, join, less, nl, od, paste, pr, sed, sort, split, tail, tr, unexpand, uniq, wc

ƒл€ начала создадим пару текстовых файлов. ѕереходим в домашнюю корневую папку пользовател€ root. ѕереключение пользовател€ sudo su, и cd ~ . ¬ любом текстовом редакторе создаем 2 файла hello1.txt и hello2.txt с содержанием как на скриншотах.

—одержание файлов

ѕервый. » второй ниже.

—одержание файлов

 оманда cat

Ќачнем с команды, с которой уже не однократно встречались, команда cat. —начала посмотрим справку по данной команде. man cat. “ут мы можем увидеть, что данна€ команда предназначена дл€ объединени€ файлов и печати на стандартный вывод информации. ѕод стандартным выводом подразумеваетс€ вывод на консоль информации. “ак же можно увидеть, что у данной команды есть ключи.

—амое простое применение данной команды. ¬водим cat hello1.txt команда показывает то, что на скриншоте выше.

man cat

ѕроведем маленький эксперимент и выведем сразу информацию из двух созданных файлов.

cat hello1.txt hello2.txt
cat hello1.txt

ј в справке было написано, что команда может объедин€ть содержимое файлов. ѕопробуем:

cat hello1.txt hello2.txt > hello3.txt
cat hello3.txt

ћы вывели на стандартный вывод (консоль) содержимое файлов и передали то, что на экране в новый файл hello3.txt. ј затем просто вывели на консоль. –езультат можно посмотреть на скриншоте ниже.

cat hello3.txt

≈сли нам файл более не нужен можно воспользоватьс€ командой дл€ удалени€ файлов

rm hello3.txt

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


 оманда cut

man cut

ƒанна€ команда предназначена дл€ удалени€ секций из строчек файлов. ≈сли посмотреть на ключи, то мы можем увидеть, что данна€ команда может удал€ть по различным признакам. ѕо пол€м, по символам, по байтам, это интересна€ команда, котора€ позвол€ет нам вырезать части из файлов. Ќебольшой пример:

cut -c 2,3,4,5,10 hello1.txt

ƒанной командой мы говорим, что при выводе на экран нам необходимо "вырезать" перечисленные символы и вывести оставшеес€ на экран. «амечу, что команда cut не €вл€етс€ текстовым редактором и поэтому фалы не правит! ј только правит вывод в консоль. ≈сли посмотреть командой cat hello1.txt файл осталс€ неизменным.

cut  -c 2,3,4,5,10 hello1.txt

¬се команды, про которые речь в статье не редактируют исходные файлы, они только фильтруют или редактируют стандартный вывод информации. ƒл€ редактировани€ файлов используютс€ текстовые редакторы.

ћы посмотрели, как данна€ команда редактирует вывод, на практике мы можем редактировать колонки, столбцы, вывода в каком-то конкретном логе или таблице. “.е. мы можем выводить на экран только то, что нам нужно. Ќапример, у нас есть лог событи€, какого-то, мы можем вывести только дату и событи€, остальное все лишнее отрезать данной командой в выводе.


 оманда expand

man expand
man expand

ƒанна€ команда редко используетс€. ќна необходима дл€ конвертации символов табул€ции в пробелы. ѕример: expand hello2.txt и все табул€ции превратились в пробелы. Ќа практики редко примен€ема€ команда.


 оманда fmt

man fmt

 ак написано в мануале это текст форматер. Ёто серьезна€ команда, она умеет форматировать вывод текста различными способами.

man fmt

“еперь посмотрим, как данной командой пользоватьс€.

fmt hello1.txt

Ќапример, написать fmt hello1.txt, как вы видите команда сделала вывод в одну строчку. —ледовательно, команда без указани€ ключа, команда игнорирует все символы переноса каретки.

“.е. все "enter" и перехода на новую строку он убрал.

ћы можем сказать, чтобы команда отформатировала текст так. чтобы на одной строке не было не более 5 символов, но это без переносов, если первое слово на 20 символов он его не перенесет, а если 2 слова по 2 символа, то оба оставит на этой строке.

fmt w 5 hello1.txt

Ќичего не произошло, а если мы дадим fmt w 10 hello1.txt, то мы видим, что команда осуществила перенос. “аким образом можно просматривать длинные логи в удобном дл€ нас виде, т. к. лог может уходить очень далеко в сторону, а через данную команду мы можем разбить на удобные абзацы дл€ нас.


 оманда head

man head
man head

ѕоказывает первую часть файлов. ќчень удобна€ команда, дл€ просмотра того, что было в начале файла. ѕо умолчанию показывает первые 10 строк файла.

head /var/log/syslog
head /var/log/syslog

ƒл€ изменени€, количества выводимых строк необходимо использовать ключ n и за ним указать необходимое количество строк.


 оманда od

man od
man od

ѕревращает файлы в другие форматы. √рубо говор€ это программа конвертор. –едко используетс€ на практике.

od hello1.txt

»спользу€ данную команду по умолчанию, мы можем превратить файл в восьмеричный код od hello1.txt. »ли с использованием ключа c превратить в формат ASCII, od c hello1.txt. это может понадобитс€ дл€ конвертации файла, например дл€ другой машины со специфичным форматом данных.


 оманда join

man join
man join

ƒанна€ команда, объедин€ет строчки файлов по общему полю. ƒл€ того, чтобы пон€ть, как работает данна€ команда необходимо создать 2 текстовых файла touch {1,2}.txt. —оздаем сразу 2 файла 1.txt и 2.txt. » с помощью редактора nano редактируем. ѕри применении команды join мы видим произошло объединение по полю нумерации.

join

Ёто удобно, например, дл€ сли€ни€ файлов, особенно логов, например, два файла логов и вам необходимо их сопоставить по времени.


 оманда less

man less
man join

¬ описании команды говоритс€, что эта команда противоположна команде more. ѕо сути это команда, котора€ позвол€ет читать файл.

ћожно посмотреть работу ее на примере. Ќапример, cat /var/log/syslog при запуске этой, команды мы получим очень большой вывод на несколько экранов. ≈сли мы воспользуемс€ командой less /var/log/syslog, то вывод даст возможность листать постранично, через pgdn. —огласитесь, это намного упрощает чтение и просмотр файла. Ѕывает такое, что работа идет в консоли, в которой нету прокрутки, через мышку, то в таком случае данна€ команда становитс€ вообще не заменимой. ≈сли посмотреть описание, данна€ команда еще умеет делать небольшой поиск по файлу.


 оманда nl

man nl
man nl

Ќумераци€ строк. ѕростой пример. Ѕерем файл и говорим пронумеровать строки. Ќа картинке нагл€дно показано, как работает команда.

nl hello.txt

 оманда paste

man paste
man paste

 оманда вставка умеет вставл€ть построчно вставл€ть какие-то строки в файлы. ќбъедин€ет строки файлов, как написано в мануале.

” нас есть 2 файла 1.txt и 2.txt.  оманда join их объедин€ла по определенному полю. ≈сли мы применим команду paste мы увидим, что команда paste объединила их построчно.

paste

“.е. это может быть очень удобно. ” нас объединились первые строки, вторые строки и т.д. Ќапример, если мы сопоставл€ем какие-нибудь событи€ или файлы и т.д.


 оманда pr

man pr
man pr

ƒанна€ команда конвертирует текстовые файлы дл€ вывода на печать. ќчень нагл€дно можно увидеть, как работает данна€ команда, если ее применить к большому файлу. Ќапример, pr /var/log/syslog

pr /var/log/syslog

 ак можно убедитс€, команда разбила вывод на страницы и подготовила данный вывод дл€ печати.


 оманда sed

man sed
man sed

ѕотоковый редактор дл€ фильтрации и трансформировани€ текста. Ёто практически полноценный текстовый редактор, но оп€ть же он не редактирует файлы, а работает с выводом.

 ак его использовать, пример следующий заменим в файле 2.txt слово socks на слово people получаетс€ примерно так:

sed e ‘s/socks/people/’ 2.txt
sed Цe Сs/socks/people/Т 2.txt

‘ункционал у команды очень большой, вывод можно дл€ себ€ очень сильно изменить, заменить слова, удалить, отредактировать, отрезать, добавить, все это можно делать с помощью данной команды. ѕри этом содержимое файла не мен€етс€. ћен€етс€ только дл€ нас вывод.


 оманда sort

man sort
man sort

—ортирует строки в файлах по какому-то признаку. ѕоработаем с файлом hello1.txt. ≈сли мы применим команду к данному файлу sort hello1.txt, то мы увидим, что вывод отсортировал строчки по алфавиту. ј если применить ключик r, то от сортируетс€ в обратном пор€дке. Ёто удобно использовать так же в совокупности с другими командами, отсортировать лишнее.

sort -r hello1.txt

 оманда split

man split
man split

ƒанна€ команда бьет файл на куски. ƒана€ команда работает следующим образом. ƒана€ команда разбивает файл на части, но при этом исходный не мен€ет. Ќапример разобьем по строчкам фал 1.txt. split -l 2 1.txt . –азбивку делаем на 2 строчки. » мы видим, что у нас исходный файл осталс€ неизменным, а по€вилось еще 2 файла xaa и xab. ќни как раз и содержат разбиение.

split -l 2 1.txt

ƒанную команду удобно примен€ть к большим файлам и использовать ключик дл€ разбивки по размеру, например, по байтам b и указываем на какие куски разбить в байтах. ѕример:

split b 5 путь_к_файлу

 оманда tail

man tail
man tail

¬ отличии от команды head, данна€ команда показывает последнюю часть файла. Ќапример, tail /var/log/syslog нам покажет последнюю часть лога событий.

tail /var/log/syslog

ƒобавл€ем ключ -n и число, мы получим число последних событий, которых мы указали. ќчень полезный ключ -f, который говорит показывать добавление в файл на "живую", т.е в реальном времени. ќчень удобно дл€ диагностики, событи€ пишутс€ в лог и сразу выводитс€ на экран. Ќапример, запись лога прокси сервера. ѕрерывание такого режима ctr+C.


 оманда tr

man tr
man tr

ѕереводит или удал€ет символы. ѕосмотрим на пр€мом выводе текста. ¬ведем echo Hello. ƒалее введем echo Hello | tr -t A-Z a-z и заглавные буквы будут заменены строчными. Echo Hello | tr -t l L и маленькие l будет заменены на L. Echo Hello | tr -d l и буквы l будут удалены.

echo Hello | tr  -t A-Z a-z

ћощный трансформатор текста. –аботает непосредственно с текстом, ключей у него полно их можно посмотреть в мануале.


 оманда unexpand

man unexpand
man unexpand

–аботает в противоположную сторону команде expand.  онвертирует пробелы в знаки табул€ции.

ќбычно работают в паре expand и unexpand, дл€ раздвижени€ столбцов.


 оманда uniq

man uniq
man uniq

ƒана€ команда ищет уникальные и дублирующийс€ линии, т.е. она смотрит что у нас в строчках есть одинакового и разного. ƒл€ примера, € в файл 1.txt добавлю повтор€ющуюс€ строчку. » сделаю вывод uniq 1.txt команда покажет только уникальные строчки, а затем uniq c 1.txt и команда покажет строчки с числом повторений. ћожно сказать, чтобы показала команда только дублирующиес€ строчки uniq d 1.txt или неповтор€ющиес€ uniq u 1.txt. ѕрименение заключаетс€ в том. что если у нас есть файлы с повтор€ющеес€ информацией мы можем таким образом ее фильтровать.

uniq Цu 1.txt

 оманда wc

man wc
man wc

ѕоказывает число строк, байт, слов и т.д. дл€ определенного файла. Ќапример: wc 1.txt показывает 4 строки, 8 слов, 28 символов.

wc 1.txt

ћожно использовать с ключом w покажет количество слов. » т.д., можно получить информацию полностью по папке:

wc *
wc *