Полезные команды Linux с примерами

30 2

На сегодняшний день тема импортозамещения актуальна как никогда, в том числе переход на отечественные ОС на базе Linux. Таким образом, разработчику необходимы знания хотя бы базовых команд, чтобы выполнять привычные действия, такие как поиск логов, публикация разработки.

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

Поиск логов по фрагменту текста

Работа с логами является неотъемлемой частью рутины разработчика. С переходом на Linux получить логи можно различными способами: перенести их с сервера к себе на ПК, открыть в ftp-клиенте или же использовать командную строку. Как правило, первые два способа занимают слишком много времени из-за объёма логов, количества серверов, на которых развернут Directum RX. В то время, как всего пара команд в терминале позволяет оптимизировать поиски и сильно сократить время.

Поиск производится при помощи утилиты grep. Она имеет довольно большие возможности, но разработчику достаточно знать лишь некоторые из них.

Общий вид команды:

grep -<различные префиксы> "<текст для поиска>" <путь до логов>

Строка начинается с команды grep, далее можно указать разного рода префиксы (пример будет ниже) для более детальной «настройки», затем в кавычках указывается шаблон, по которому будет осуществлен поиск строк и, наконец, путь до логов, указанный через правый слэш.

Например, следующая команда позволит найти и отобразить в терминале строки, содержащие фрагмент «error», при этом регистр шаблона при поиске не учитывается благодаря префиксу -i:

grep -i "error" /srv/drx_logs/*/Worker/*2023-11-08*

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

Общий вид выглядит следующим образом:

cat <путь до файлов> | grep -i "<текст для поиска>" 

Grep умеет и сам выводить текст на экран. Но в паре с cat можно вводить дополнительные надстройки, например, перед поиском строк отсортировать их по началу строки (поскольку лог начинается с даты и времени, сортировка осуществится именно по этим параметрам, что может быть удобно):

cat /srv/logs/*/Worker/*2023-11-08*.log | sort  | grep -i "error"   

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

Еще один пример: найти все строки в логах по строке "error" за 08.11.2023 и отобразить в удобочитаемом формате JSON:

cat /srv/logs/*/Worker/*2023-11-08*.log | grep -i "error" | jq

В данном случае за форматирование в JSON отвечает утилита jq. Для неё требуется отдельная установка. Удобно использовать для отображения небольшой выборки.

В jq также есть удобная возможность вывести значения по определенному ключу. После выполнения следующей команды, будут найдены строки, содержащие «Error» и выведены значения только по ключу «mt», то есть в нашем случае на экран будет выведен только текст ошибок:

cat CTL-DIRAPP01-sungeroworker.Worker.2023-12-20.log | grep "Error" | jq .mt

Для исключения определенных файлов из выборки необходимо использовать параметр --exclude:

cat /srv/drx_logs/*/Worker/*2023-12-07*log | grep --exclude="*IsolatedArea*log" "Error" --color 

Примечание:

  • Вместо jq иногда удобнее использовать параметр --color (пример выше). При использовании данного параметра в результатах будет подсвечен введенный шаблон для поиска.
  • Если при поиске встретилась ошибка "Binary file (standard input) matches", то попробуйте добавить к grep префикс -a, он позволит обработать двоичный файл, как текстовый.

Копирование результатов выполнения команды в файл

Если выборка получилась слишком объёмная и не помещается в терминал, то результат можно записать в файл при помощи перенаправления вывода >/>> либо команды tee. Команда tee позволяет записывать результат и в терминал, и в файл одновременно, в то время как >/>> просто записывают результат в файл.

Общий вид использования tee:

<любая команда> | tee <путь до файла для записи с наименованием файла и расширением>

Пример:

grep -i "error" /home/user/DirectumRX/logs/*2023-09-11*log | tee ./savedLogs/log1.txt

Если файл уже существует, то он будет перезаписан. Если к tee добавить префикс -a, то результат запишется в конец файла. Данная команда записывает абсолютно любой результат выполнения команды в файл.

Различие между > и >> в том, что в первом случае содержимое указанного файла будет перезаписано, во втором случае добавлено в конец:

grep -i "error" /home/user/DirectumRX/logs/*2023-09-11*log > /home/user/DirectumRX/log1.txt

Публикация разработки

Разработчик, как правило, также занимается публикацией пакета на различные стенды, поэтому здесь будет уместно оставить скрипты публикации с использованием утилиты DeploymentToolCore

Для дальнейших команд считаем, что DirectumLaunсher у нас находится в каталоге /srv/drx

Опубликовать и проинициализировать пакет:

/srv/drx/do.sh dt deploy --init --package=/srv/releases/2023-12-14.dat

Отдельно проинициализировать разработку:

/srv/drx/do.sh dt deploy --init

Получить все установленные решения и их версии:

/srv/drx/do.sh dt deploy -l

Получить список компонентов в виде таблицы. В таблице отображаются установленные, добавленные и доступные для добавления компоненты:

/srv/drx/do.sh components list

Если есть ошибка "permission denied", попробуйте в начале команды добавить sudo.

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

Посмотреть содержимое папки:

ls -c

Очистить содержимое папки:

rm -f <путь до папки>

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

ls -la <путь до папки>

Вывод информации о свободном месте и примонтированных хранилищах:

df -hT

Команды по навигации между директориями:

  • ./ - текущая папка, в который вы находитесь. Путь до текущей папки покажет команда pwd.
  • ../logs - две точки - это родительская папка. То есть из данной папки необходимо подняться в родительскую, а из родительской перейти в папку с именем log.

Примечание: Linux зависим от регистра. При написании команд, префиксов, путей нужно это учитывать.

* * *

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

30
Авторизуйтесь, чтобы оценить материал.
7
Алексей Присяжный

+20% комфорта добавит команда, работает с Debian/Ubuntu/Astra/Alt:

sudo apt-get install mc

Дальше просто пишем в консоли mc

Алексей Присяжный: обновлено 27.12.2023 в 09:48
Надежда Семенова

Спасибо за полезную статью! Ждём вторую часть.

Авторизуйтесь, чтобы написать комментарий