26 команд в Linux, которые должен знать каждый сисадмин

  Дмитрий Бушуев  | 

  Обновл. 6 Апр 2021  | 

 677

 ǀ   2 

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

Работа системного администратора включает в себя выполнение таких задач, как: установка и запуск программного обеспечения, контроль доступа пользователей к системе, обеспечение доступности необходимых ресурсов, резервное копирование важных данных (а также восстановление их из резерва) и пр.

В этой статье мы рассмотрим наиболее часто используемые системными администраторами команды в Linux.


Команда uname

Команда uname с параметром -a применяется для вывода системной информации: наименование используемого ядра, его версия, имя хоста, тип процессора и информация о вашей аппаратной платформе.

diego@debian:~$ uname -a
Linux debian 5.10.0-5-amd64 #1 SMP Debian 5.10.24-1 (2021-03-19) x86_64 GNU/Linux

Разберем вышеприведенный вывод детально:

название ядра: Linux
имя хоста: debian
номер релиза ядра: 5.10.0-5-amd64
номер версии ядра: #1 SMP Debian 5.10.24-1 (2021-03-19)
архитектура: x86_64
операционная система: GNU/Linux


Команда who


Команда who выводит список вошедших в систему пользователей.

diego@debian:~$ who
diego    tty7         2021-04-03 09:21 (:0)


Команда w

Команда w отображает пользователей и их процессы. Вначале идет заголовок, содержащий текущее время, время безотказной работы системы (uptime), количество пользователей, вошедших в систему, и средние значения загрузки системы.

Далее мы видим имена пользователей, используемый терминал и удаленный IP-адрес, с которого они вошли в систему, время их входа, время простоя, JCPU (время, использованное всеми процессами, закрепленными за терминалом), PCPU (время, использованное процессом из поля WHAT) и программу, которую они запустили.


Команда ls


Команда ls выводит содержимое каталога. Кроме того, данная команда помогает проверить установленные для файлов/каталогов разрешения. В следующем примере показана неудачная (из-за отсутствия необходимых прав) попытка запуска приложения ravesli_app. Выполнив после этого команду ls -l, мы видим, что в наборе прав -rw-r--r-- отсутствует разрешение на выполнение — символ x:

$ ./ravesli_app
bash: ./ravesli_app: Отказано в доступе
$ ls -l ravesli_app
-rw-r--r-- 1 diego diego   180 мар 29 14:51  ravesli_app


Команда tar

Команда tar позволяет заархивировать несколько файлов в один архив.

В качестве примера, давайте создадим каталог ravesli_docs, и поместим в него три файла: a.txt, b.txt и c.txt:

diego@debian:~$ mkdir ravesli_docs; touch ravesli_docs/{a.txt,b.txt,c.txt}

Теперь с помощью команды tar -cvf создадим архив ravesli.tar, содержащий все файлы из каталога ravesli_docs:

Просмотрев с помощью команды ls содержимое текущего каталога можно заметить каталог ravesli_docs и вновь созданный нами архив ravesli.tar:

diego@debian:~$ ls
ravesli.tar  ravesli_docs

Для распаковки архива применяется команда tar -xvf:

Также вы можете задействовать gzip-сжатие для архива (для этого необходимо добавить параметр -z):

Для распаковки сжатого архива применяется связка параметров -z и -x:


Команда rsync


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

Ниже показан пример копирования при помощи команды rsync всех файлов из каталога ravesli_docs в каталог backups:


Команда find

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

Например, если мы хотим найти в текущем каталоге некий файл с известным нам именем, то после команды find . -name необходимо указать имя файла:

diego@debian:~$ find . -name a.txt
./ravesli_docs/a.txt
./backups/a.txt

Для поиска каталогов применяется параметр -type d:

diego@debian:~$ find . -type d
.
./ravesli_docs
./.pki
./.pki/nssdb
./Шаблоны
./Документы
./.cache
./.cache/QtProject
./.cache/QtProject/QtCreator
./.cache/QtProject/QtCreator/qmlcache
./.cache/fontconfig
./.cache/systemsettings
./.cache/systemsettings/qmlcache
./.cache/systemsettings/attica
[…]

За поиск файлов по размеру отвечает параметр -size. Например, если в текущем каталоге мы хотим найти все файлы, размер которых более 10 МБ, то необходимо выполнить команду find . -size +10M:

diego@debian:~$ find . -size +10M
./.cache/icon-cache.kcache
./.cache/appstream/system/ru_RU.cache
./.cache/plasma_theme_default_v5.78.0.kcache
./.mozilla/firefox/am73pqpn.default-esr/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.sqlite


Команда locate


Команда locate использует базу данных для поиска файлов и, по сути, может быть намного быстрее команды find. Например, для поиска файла apache2.conf необходимо сделать следующее:

diego@debian:~$ locate apache2.conf
/etc/apache2/apache2.conf
/usr/share/doc/apache2/examples/apache2/apache2.conf
/var/lib/dpkg/info/apache2.conffiles

Если вам нужно отобразить только количество файлов, соответствующих шаблону поиска, то просто добавьте параметр -c:

diego@debian:~$ locate -c apache2.conf
3

Иногда вам может потребоваться обновить базу данных, к которой обращается locate. Для этого необходимо ввести команду updatedb (её запуск производится от имени суперпользователя):

diego@debian:~$ sudo updatedb


Команда systemctl

Команда systemctl используется для управления системными службами.

Например, запуск службы веб-сервера apache2 выполняется следующим образом:

diego@debian:~$ sudo systemctl start apache2.service

Примечание: Допускается опускать суффикс .service.

Остановка службы выполняется аналогичным образом, только start меняется на stop:

diego@debian:~$ sudo systemctl stop apache2

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


Команда journalctl

Команда journalctl используется для просмотра логов, собранных systemd. systemd «собирает» логи в бинарном формате. Чтобы их посмотреть, используется команда sudo journalctl:

Как правило, более полезным является реверсивный просмотр логов (т.е. сначала новые логи, а затем уже старые). Чтобы произвести вывод логов в обратном порядке, используйте параметр -r:

Для просмотра логов, касающихся какой-то конкретной службы, например, apache2, используйте параметр -u:


Команда kill

Команда kill используется для принудительного завершения процесса.

Чтобы посмотреть все сигналы, которые вы можете отправить процессу, добавьте к команде параметр -l:

Два наиболее часто используемых сигнала — это SIGTERM и SIGKILL.

   Сигнал SIGTERM позволяет процессу самостоятельно завершиться ДО его принудительного завершения и поэтому относится к т.н. категории «soft kill» (мягкое завершение).

   Сигнал SIGKILL приводит к немедленному завершению процесса.

Также можно указывать числовые значения сигналов вместо их названий, например, -9 вместо SIGKILL и -15 вместо SIGTERM.

Ниже представлен список всех процессов веб-сервера apache2:

Чтобы убить процесс apache2 с идентификатором 2409, необходимо ввести следующую команду:

diego@debian:~$ sudo kill -9 2409

Еще раз посмотрим на список процессов apache2. Как видите, теперь осталось только три процесса:


Команда killall

Команда killall применяется в том случае, если вы хотите убить управляющий (родительский) процесс и все дочерние процессы. Чтобы убить все экземпляры процесса apache2 в вышеприведенном примере, выполните следующее:

diego@debian:~$ sudo killall apache2


Команда curl

Команда curl позволяет взаимодействовать с внешними ресурсами посредством URL-адресов. Часто данная команда применяется для определения того, может ли ваше приложение связаться с другой службой, например, с базой данных, или для проверки работоспособности вашей службы.

Представьте, что у нас есть база данных MongoDB, которая не может связаться с внешним приложением, выдавая при этом сообщение об ошибке HTTP 500:

$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR

Параметр -I выводит информацию о заголовке HTTP-запроса, а параметр -s отвечает за тихий (silent) режим, при котором опускается тело HTTP-ответа от сервера. В то же время, проверка подключения к базе данных с локального хоста проходит успешно:

$ curl -I -s database:27017
HTTP/1.0 200 OK

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

$ curl -I -s https://ravesli.com
HTTP/1.1 200 OK

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

$ curl database:27017
curl: (6) Couldn't resolve host 'database'

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


Команда tail

Команда tail отображает последнюю часть (хвост) файла. Как правило, при решении различных проблем нет необходимости просматривать весь лог-файл в поиске ошибок. Вместо этого можно проверить, что сказано в самом последнем его сообщении. Например, вы можете применить команду tail и узнать, что происходит в лог-файле во время выполнения запроса к своему HTTP-серверу Apache:

Благодаря параметру -f (от англ. «follow» — следовать), строки лог-файла будут выводиться по мере их записи в лог-файл. Теперь представим другую ситуацию: у вас есть скрипт, работающий в фоновом режиме, который каждые несколько секунд обращается к некоторому внешнему ресурсу, и лог-файл ведет запись данных запросов. Вместо того, чтобы в режиме реального времени следить за всем содержимым лог-файла, вы можете прибегнуть к команде tail -n, выводящей 100 последних строк:

$ tail -n 100 /var/log/httpd/access_log


Команда cat

Команда cat используется для вывода в терминал содержимого файлов. Вы можете использовать её, например, для просмотра файла с фамилиями ваших коллег по работе:

$ cat работа_коллеги.txt

Иванов А. А.
Петров Б. Б.
Сидоров С. С.


Команда grep

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

Предположим, вы захотели посмотреть, запустился ли ваш сервер Apache Tomcat, и выполнили команду cat tomcat.log. То количество информации, которое в этот момент хлынет в терминал, может с легкостью вас «ошеломить». Вместо этого мы перенаправим все эти данные в команду grep, которая произведет отбор только тех строк, которые будут указывать на запуск сервера:

$ cat tomcat.log | grep org.apache.catalina.startup.Catalina.start

01-Jul-2017 18:03:47.542 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 681 ms


Команда top

Команда top отображает и обновляет отсортированную информацию о текущем процессе (или процессах). Используйте её, чтобы определить, какие процессы в данный момент запущены и сколько памяти и ресурсов процессора они потребляют. Обычно бывает так, что вы запускаете приложение, и оно через минуту «умирает». Проверив соответствующий лог-файл, вы замечаете запись, указывающую на ошибку памяти:

$ tail myapp.log
Traceback (most recent call last):
MemoryError

Действительно ли вашему приложению не хватает памяти? Чтобы подтвердить эту догадку, применяем команду top и смотрим, какое количество ресурсов процессора и памяти потребляется приложением. В результате этого замечаем, что основную нагрузку на процессор и память создает процесс python3.

Нажав клавишу C, вы можете увидеть полную команду, которая запустила приложение.

Оказывается, это действительно ваше приложение (memeater.py). Когда у него закончится память, система убьет процесс, выдав ошибку «out-of-memory» (OOM).


Команда netstat

Команда netstat отображает информацию о состоянии сети. Она показывает используемые сетевые порты и входящие соединения к ним. Однако стоит заметить, что команда netstat не входит в базовую поставку Linux; утилита устанавливается вместе с пакетом net-tools.

Предположим, вы проводите локальные эксперименты со своей программой, принимающей входящие подключения от других программ. Может случиться так, что вы получите сообщение об ошибке типа «Необходимый вам порт (или адрес) уже занят». Применив команду netstat с параметрами протокола, процесса и порта, мы увидим, что HTTP-сервер Apache уже использует 80 порт на нижеприведенном хосте:


Команда ip

Команда ip используется для настройки и отображения сетевых интерфейсов. Также данная команда используется для отображения и изменения IP-адресов, маршрутов и соседних объектов.

Например, отобразим информацию обо всех сетевых интерфейсах:

diego@debian:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0d:3a:9b:88:d6 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.4/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20d:3aff:fe9b:88d6/64 scope link
valid_lft forever preferred_lft forever


Команда lsof

Команда lsof отображает информацию о том, какие файлы используются тем или иным процессом. В Linux практически любое взаимодействие с системой рассматривается как взаимодействие с файлом. Если ваше приложение записывает данные в файл или открывает сетевое соединение, то команда lsof отобразит соответствующую информацию по данному взаимодействию. Подобно команде netstat, вы можете использовать команду lsof для проверки открытых сетевых портов. Например, если вы хотите узнать, занят ли в вашей системе 80 порт, то, применив команду lsof, вы получите информацию о том, какой именно процесс в данный момент его использует.

Ниже вы можете видеть, что процесс apache2 прослушивает порт 80. Вы также можете использовать команду lsof для запроса информации по идентификатору процесса, чтобы узнать, по какому пути расположен соответствующий ему двоичный файл:

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


Команда df

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

Параметр -h выводит информацию в читабельном формате. По умолчанию команда df предоставляет результаты для всего, что находится в корневом каталоге, но вы также можете ограничить результаты выдачи, добавив к команде путь к заданному каталогу (например, df -h /home).


Команда du

Команда du используется для получения информации о том, какие файлы (и в каком объеме) используют дисковое пространство в заданном каталоге. Например, если вы хотите узнать, какой лог-файл занимает больше всего места в каталоге /var/log, вы можете использовать команду du с параметром –s (для отображения занимаемого места) и параметром -h (читабельный формат):

В этом примере видно, что самым большим каталогом в каталоге /var/log является /var/log/apt. Применение команды du в сочетании с командой df поможет вам быстро определить, что и в каких объемах использует дисковое пространство на вашем компьютере.


Команда id

Команда id используется для получения информации по текущему пользователю. В следующем примере, я попытался установить анализатор сетевого трафика Wireshark, на что система отреагировала сообщением, что я не могу выполнить данную команду, т.к. не имею прав суперпользователя (root). После этого, чтобы проверить своего пользователя и группу, я выполнил команду id и обратил внимание, что работал под учетной записью обычного пользователя diego в группе diego:

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


Команда chmod

Команда chmod используется для управления разрешениями на заданный файл/каталог.

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

Как видите, у скрипта отсутствуют права на выполнение (символ x в наборе разрешений). В такой ситуации нам поможет команда chmod, которая добавляет (или убирает) необходимые разрешения, обеспечивающие пользователю возможность запускать скрипт (или двоичный файл):

После этого, при повторной попытке выполнить скрипт ravesli.sh, вы больше не получите ранее описанного сообщения об ошибке.


Команда sestatus

Обычно, SELinux (модуль безопасности Linux) применяется там, где процессам, запущенным на хосте, требуется обеспечить наименьшие привилегии, предотвращая тем самым доступ потенциально вредоносных процессов к важным файлам в системе. Однако в некоторых ситуациях, приложение, которому требуется получить доступ к определенному файлу, может выдать ошибку. Чтобы проверить, не блокирует ли SELinux наше приложение, применяется связка команд tail и grep, ведущих поиск сообщения типа «denied» в лог-файле /var/log/audit.

Проверка того, включен ли сам модуль SELinux, производится с помощью команды sestatus:

$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

Вывод указывает на то, что на хосте модуль SELinux включен.


Команда history

Команда history отображает историю команд, которые были введены с момента начала сессии. Например, если сейчас применить команду history, то она покажет различные команды, с которыми вы экспериментировали по ходу данного урока:

diego@debian:~$ history
1 clear
2 uname -a
3 who
[…]

Но что делать, если вы хотите выполнить предыдущую команду, но не хотите заново вручную её набирать? Ответ — используйте символ восклицательного знака ! перед номером команды для её повторного выполнения:

[…]
570 sudo firewall-cmd --get-active-zones --list-all
571 sudo man firewall-cmd
572 sudo firewall-cmd --get-default-zones
573 sudo firewall-cmd --get-default-zone
574 clear
575 history
576 uname
577 uname -a
578 clear
579 history
diego@debian:~$ !577
uname -a
Linux debian 5.10.0-5-amd64 #1 SMP Debian 5.10.24-1 (2021-03-19) x86_64 GNU/Linux
diego@debian:~$

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (4 оценок, среднее: 5,00 из 5)
Загрузка...

Комментариев: 2

  1. Аватар Sergey:

    Отличная статья, спасибо.
    Освежил в памяти. )

    1. Дмитрий Бушуев Дмитрий Бушуев:

      Пожалуйста 🙂

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *