20 команд Linux для системного адміністратора

Операційна система Linux надає безліч команд і інструментів, які значно спрощують та прискорюють виконання задач системного адміністрування.

Робота системного адміністратора охоплює широкий спектр обов’язків, зокрема: встановлення та налаштування програмного забезпечення, управління правами доступу, моніторинг продуктивності, забезпечення безперебійної роботи, створення резервних копій, їх відновлення та, звичайно, оперативне усунення несправностей. 😜

У цій статті ми розглянемо деякі з команд, які часто використовуються системними адміністраторами Linux у повсякденній практиці.

Інформація про систему за допомогою uname

Команда `uname` з опцією `-a` дозволяє вивести детальну інформацію про операційну систему. Вона показує назву ядра, версію, реліз, ім’я хоста, тип процесора та інші характеристики вашої апаратної платформи.

[email protected]:~$ uname -a
Linux ubuntu18 5.3.0-1028-azure #29~18.04.1-Ubuntu SMP Fri Jun 5 14:32:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Розшифрування виведених даних:

назва ядра: Linux
ім'я хоста: ubuntu18
реліз ядра: 5.3.0-1028-azure
версія ядра: #29~18.04.1-Ubuntu SMP Fri Jun 5 14:32:34 UTC 2020
архітектура: x86_64
процесор: x86_64
апаратна платформа: x86_64
операційна система: GNU/Linux

Перевірка використання дискового простору з df

Команда `df` використовується для отримання інформації про розмір файлових систем та наявний дисковий простір. Запуск `df` без додаткових опцій показує результати у блоках по 1КБ.

[email protected]:~$ df
Файлова система 1K-блоків Використано Доступно Вик% Змонтовано на
udev 437208 0 437208 0% /dev
tmpfs 91100 692 90408 1% /run
/dev/sda1 30309264 2383952 27908928 8% /
....

Опція `-h` представляє вихідні дані у більш зручному для сприйняття людиною форматі, тобто в МБ та ГБ.

[email protected]:~$ df -h
Файлова система Розмір Використ. Доступно Вик% Змонтовано на
udev 427M 0 427M 0% /dev
tmpfs 89M 692K 89M 1% /run
/dev/sda1 29G 2.3G 27G 8% /
tmpfs 445M 0 445M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 445M 0 445M 0% /sys/fs/cgroup
/dev/sda15 105M 3.6M 101M 4% /boot/efi
/dev/sdb1 3.9G 16M 3.7G 1% /mnt
tmpfs 89M 0 89M 0% /run/user/1001 

Щоб виключити певні типи файлових систем, наприклад `tmpfs`, для більш лаконічного виведення, використовуйте опцію `-x`.

[email protected]:~$ df -h -x tmpfs
Файлова система Розмір Використ. Доступно Вик% Змонтовано на
udev 427M 0 427M 0% /dev
/dev/sda1 29G 2.3G 27G 8% /
/dev/sda15 105M 3.6M 101M 4% /boot/efi
/dev/sdb1 3.9G 16M 3.7G 1% /mnt

Для виведення інформації лише про певний тип файлової системи, застосуйте опцію `-t`. Наприклад, щоб переглянути тільки файлову систему `ext4`:

[email protected]:~$ df -h -t ext4
Файлова система Розмір Використ. Доступно Вик% Змонтовано на
/dev/sda1 29G 2.3G 27G 8% /
/dev/sdb1 3.9G 16M 3.7G 1% /mnt

Використання опції `–total` додає рядок з підсумками по всіх файлових системах:

[email protected]:~$ df -h -t ext4 --total
Файлова система Розмір Використ. Доступно Вик% Змонтовано на
/dev/sda1 29G 2.3G 27G 8% /
/dev/sdb1 3.9G 16M 3.7G 1% /mnt
загалом 33G 2.3G 31G 8% -

Використання дискового простору в каталогах з du

Для аналізу використання дискового простору в конкретному каталозі використовуйте команду `du`. Наприклад, щоб дізнатися обсяг дискового простору, який займає каталог `/var/log`. Опція `-h` забезпечує вивід у зручному для читання форматі.

[email protected]:~$ sudo du -h /var/log
24K /var/log/Microsoft/Azure/NetworkWatcherAgent/Logs
28K /var/log/Microsoft/Azure/NetworkWatcherAgent
32K /var/log/Microsoft/Azure
36K /var/log/Microsoft
60K /var/log/apt
4.0K /var/log/samba
177M /var/log/journal/0f4f926f583b4691af7de11025b19ff6
177M /var/log/journal
...
204M /var/log

Щоб отримати тільки загальний обсяг використання дискового простору, застосуйте опцію `-s` (сумарно).

[email protected]:~$ sudo du -hs /var/log
204M /var/log

Моніторинг пам’яті з free

Команда `free` відображає загальний обсяг, використану та вільну пам’ять системи. Опція `-h` робить вивід зручним для читання.

ubuntu[email protected]:~$ free -h
загалом використано вільно спільно буф/кеш доступно
Пам'ять: 889M 272M 100M 712K 517M 443M
Swap: 0B 0B 0B
загалом - загальний обсяг встановленої пам'яті (memtotal + swaptotal)
використано - використовувана пам'ять
вільно - невикористана пам'ять (memfree + swapfree)
буфери - пам'ять, що використовується буферами ядра
кеш - пам'ять, що використовується кешем сторінок
буф/кеш - сума буферів і кешу
доступно - оцінка доступної пам'яті для запуску нових програм без використання swap-файлу

Інформація про процеси з ps

Команда `ps` надає інформацію про стан процесів, що виконуються в системі. Щоб переглянути всі процеси, що належать користувачеві `ubuntu`, використовуйте опцію `-u` з ім’ям користувача:

[email protected]:~$ ps -u ubuntu
 PID TTY ЧАС CMD
7804 ? 00:00:00 systemd
7805 ? 00:00:00 (sd-pam)
7940 ? 00:00:00 sshd
7941 pts/0 00:00:00 bash
8111 ? 00:00:00 sshd
8112 pts/1 00:00:00 bash
13868 ? 00:00:00 sshd
13869 pts/2 00:00:00 bash
13885 pts/0 00:00:00 man
13895 pts/0 00:00:00 pager
18111 pts/2 00:00:00 man
18121 pts/2 00:00:00 pager
18485 pts/1 00:00:00 ps

Щоб переглянути всі процеси в системі, запустіть `ps` з опціями `aux`:

[email protected]:~$ ps aux
КОРИСТУВАЧ PID %CPU %MEM ВСЗ RSS TTY СТАТ ЗАПУСК ЧАС КОМАНДА
root 1 0.0 0.7 160076 7020 ? Ss Jun29 0:34 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun29 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Jun29 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Jun29 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< Jun29 0:00 [kworker/0:0H-kb]
....

де

Заголовок
Значення
PID
Ідентифікаційний номер процесу
%CPU
Відсоток процесорного часу, який використовує процес
%MEM
Відсоток оперативної пам’яті, який використовує процес
ВСЗ
Використовувана віртуальна пам’ять в КБ
RSS
Фізична пам’ять, яку використовує процес в КБ
TTY
Термінал, пов’язаний з процесом
СТАТ
R – Запущено або готовий до запуску, S – Сплячий режим, I – Неактивний, T – Зупинений, Z – Зомбі, D – Очікування дискового вводу/виводу, X – Не працює, W – Замінено, N – Процес з низьким пріоритетом, < – Процес високого пріоритету

Динамічний моніторинг процесів з top

На відміну від команди `ps`, яка показує знімок стану процесів на певний момент, `top` показує безперервно оновлюваний (за замовчуванням кожні 3 секунди) список системних процесів, відсортованих за активністю процесора.

Вивід команди `top` складається з двох основних частин: системної статистики у верхній частині та таблиці процесів, впорядкованих за використанням процесора.

top - 14:25:32 up 44 days, 11:37, 1 user, load average: 0.00, 0.00, 0.00
Завдання: 114 загалом, 1 запущено, 59 сплять, 0 зупинено, 0 зомбі
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 910992 загалом, 101208 вільно, 274712 використано, 535072 буф/кеш
KiB Swap: 0 загалом, 0 вільно, 0 використано. 458492 доступно Mem

PID КОРИСТУВАЧ PR NI VIRT RES SHR S %CPU %MEM ЧАС+ КОМАНДА
50497 ubuntu 20 0 44528 3944 3368 R 0.7 0.4 0:00.15 top
1 root 20 0 160076 7020 4400 S 0.0 0.8 0:34.85 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:+
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_+

Основні поля в системній статистиці:

up
Час безперервної роботи системи. Час з моменту останнього завантаження.
load average
Середнє навантаження вказує на кількість процесів, що очікують виконання. Значення менше 1.0 означає, що система не перевантажена. Представлено 3 значення: середнє за останні 60 секунд, за останні 5 хвилин і за останні 15 хвилин.
%CPU

Рядок описує активність центрального процесора.
0.3 us, користувач
0.3% процесорного часу використовується для процесів користувача.
0.0 sy, система
0.0% процесорного часу використовується для системних процесів.
0.0 ni, добре
0.0% процесорного часу використовується процесами з низьким пріоритетом (nice).
99.7 id, холостий
99.7% процесорного часу не використовується.
0.0 wa, IO-чекати
0.0% процесорного часу очікує на операції вводу/виводу.
0.0 hi
Час, витрачений на обробку апаратних переривань.
0.0 si
Час, витрачений на обробку програмних переривань.
0.0 st
Час, “вкрадений” у віртуальної машини гіпервізором.

Поля таблиці процесів:

PID
Ідентифікаційний номер процесу
КОРИСТУВАЧ
Власник процесу
PR
Пріоритет процесу
NI
Значення nice (впливає на пріоритет)
VIRT
Використовувана віртуальна пам’ять процесом (КБ)
RES
Фізична пам’ять, яку використовує процес
SHR
Спільна пам’ять, яку використовує процес
C
Статус процесу. R – працює, S – спить, I – неактивний, T – зупинено, Z – зомбі, D – очікує введення/виведення диска, W – замінено, X – мертвий
%CPU
Відсоток використаного процесорного часу
%MEM
Відсоток використаної фізичної пам’яті процесом
ЧАС[+]
Загальний час процесора, використаний процесом
КОМАНДА
Назва програми

Під час роботи `top`, ви можете вводити різні команди. Натисніть `h` або `?`, щоб переглянути список доступних команд. Натисніть `k`, щоб завершити процес. Натисніть `q`, щоб вийти з `top`.

DNS-запити з dig

`dig` – потужний інструмент для виконання DNS-запитів. Його використовують наступним чином:

dig <DNS-сервер> <домен> <тип-запиту>

де

  • <DNS-сервер> – ім’я DNS-сервера, до якого ви звертаєтеся
  • <домен> – доменне ім’я, для якого робите запит
  • <тип-запиту> – тип запису, який ви шукаєте (A, MX, NS, SOA і т.д.)

Щоб зменшити багатослівність виводу, застосуйте опцію `+short`.

Для перегляду А-запису для google.com:

[email protected]:~$ dig google.com +short
172.217.164.174

Для перегляду MX-записів для google.com:

[email protected]:~$ dig google.com MX +short
50 alt4.aspmx.l.google.com.
10 aspmx.l.google.com.
20 alt1.aspmx.l.google.com.
40 alt3.aspmx.l.google.com.
30 alt2.aspmx.l.google.com.

Для виконання DNS-запитів через інтернет можна скористатися онлайн DNS-інструментами.

Перегляд користувачів з who та w

Команда `who` відображає список користувачів, які зараз ввійшли в систему.

[email protected]:~$ who
ubuntu pts/0 2020-08-14 17:28 (183.83.211.129)
ubuntu pts/1 2020-08-14 17:58 (183.83.211.129)

Команда `w` показує користувачів, що зараз в системі, та запущені ними процеси. Заголовок виводу містить поточний час, час роботи системи, кількість користувачів та середнє навантаження системи.

[email protected]:~$ w
18:07:33 up 46 days, 15:19, 2 users, load average: 0.00, 0.00, 0.00
КОРИСТУВАЧ TTY FROM IDLE JCPU PCPU WHAT
ubuntu pts/0 183.83.211.129 17:28 2.00s 0.10s 0.00s w
ubuntu pts/1 183.83.211.129 17:58 9:07 0.05s 0.01s vi

Нижче відображаються імена користувачів, термінал та віддалена IP-адреса, з якої вони ввійшли, час входу, час простою, JCPU, PCPU і програму, яку вони запускають. `JCPU` — це загальний час, використаний усіма процесами, пов’язаними з терміналом, тоді як `PCPU` — час, використаний поточним процесом.

Архівування файлів з tar

За допомогою `GNU tar` можна створювати архіви, об’єднуючи кілька файлів в один.

Наприклад, створимо каталог `myfiles` і три файли: `a.txt`, `b.txt`, `c.txt`:

[email protected]:~$ mkdir myfiles ; touch myfiles/{a.txt,b.txt,c.txt}

Тепер, щоб створити архів `allfiles.tar`, що містить усі файли з `myfiles`:

[email protected]:~$ tar -cvf allfiles.tar myfiles
myfiles/
myfiles/c.txt
myfiles/a.txt
myfiles/b.txt

Список вмісту поточного каталогу показує наявність каталогу `myfiles` та архіву `allfiles.tar`:

[email protected]:~$ ls
allfiles.tar myfiles

Розпакувати архів можна за допомогою опції `-x`. Для розпакування `allfiles.tar`:

[email protected]:~$ tar -xvf allfiles.tar
myfiles/
myfiles/c.txt
myfiles/a.txt
myfiles/b.txt

Також можна стиснути архів, додавши опцію `-z`. Це створить архів, стиснутий за допомогою `gzip`.

[email protected]:~$ tar -zcvf allfiles.tar.gz myfiles
myfiles/
myfiles/c.txt
myfiles/a.txt
myfiles/b.txt
[email protected]:~$ ls
allfiles.tar.gz myfiles

Для розпакування стисненого архіву застосовується `-z` разом з опцією `-x`.

[email protected]:~$ tar -zxvf allfiles.tar.gz
myfiles/
myfiles/c.txt
myfiles/a.txt
myfiles/b.txt

Пошук тексту з grep

`grep` використовується для пошуку шаблонів у файлах. Він виводить рядки, які відповідають заданому шаблону. Наприклад, для пошуку рядка, що містить `”ServerRoot”` у файлі `/etc/apache2/apache2.conf`:

[email protected]:~$ grep ServerRoot /etc/apache2/apache2.conf
# ServerRoot: The top of the directory tree under which the server's
#ServerRoot "/etc/apache2"

Для пошуку у всіх файлах у каталозі використовуйте `*`. Для пошуку у підкаталогах додайте опцію `-r` (рекурсивний). Наприклад, щоб знайти всі рядки з шаблоном `”VirtualHost”` у всіх файлах `/etc/apache2`:

[email protected]:~$ cd /etc/apache2
[email protected]:/etc/apache2$ grep -r VirtualHost *
apache2.conf:# If you do not specify an ErrorLog directive within a <VirtualHost>
apache2.conf:# logged here. If you *do* define an error logfile for a <VirtualHost>
conf-available/localized-error-pages.conf:# even on a per-VirtualHost basis. If you include the Alias in the global server
conf-available/other-vhosts-access-log.conf:# Define an access log for VirtualHosts that don't define their own logfile
ports.conf:# have to change the VirtualHost statement in
sites-available/000-default.conf:<VirtualHost *:80>
...

Синхронізація файлів з rsync

`rsync` — це швидкий інструмент командного рядка для синхронізації файлів і каталогів між двома розташуваннями. Він може використовуватися як для локального, так і для віддаленого копіювання та є ефективним, оскільки надсилає лише зміни між вихідними файлами та їхніми копіями.

Він часто застосовується для резервного копіювання і як покращена альтернатива `cp` для повсякденних задач.

Наприклад:

Для копіювання всіх файлів з каталогу `myfiles` до каталогу `backups`:

[email protected]:~$ rsync -avh myfiles/ /backups
sending incremental file list
./
a.txt
b.txt
c.txt

sent 218 bytes received 76 bytes 588.00 bytes/sec
total size is 0 speedup is 0.00

Для синхронізації всіх файлів з каталогу `myfiles` з каталогом `backups` на віддаленому хості, додайте `віддалений_користувач@віддалений_хост` до цільового шляху. Для синхронізації папки `myfiles` на віддалений хост з IP 10.0.0.50:

[email protected]:~$ rsync -avh myfiles/ [email protected]:/home/vagrant
[email protected]'s password:
sending incremental file list
./
a.txt
b.txt
c.txt

sent 230 bytes received 76 bytes 47.08 bytes/sec
total size is 0 speedup is 0.00

Статистика сокетів з ss

Команда `ss` використовується для виведення статистики сокетів, вона є сучасною заміною застарілої утиліти `netstat`. Щоб відобразити TCP-сокети, застосуйте опцію `-t`.

[email protected]:~$ ss -t
Стан Recv-Q Send-Q Локальна адреса:Порт Адреса піра:Порт
ESTAB 0 0 10.0.0.4:53852 168.63.129.16:8037
ESTAB 0 0 10.0.0.4:ssh 183.83.211.129:64118
ESTAB 0 0 10.0.0.4:33256 169.254.169.254:http
ESTAB 0 1080 10.0.0.4:ssh 222.186.30.35:11527
ESTAB 0 0 10.0.0.4:ssh 183.83.211.129:63049

Це не відображає сокети, що прослуховують. Щоб включити як прослуховуючі, так і непрослуховуючі сокети, використовуйте опції `-t` та `-a`.

[email protected]:~$ ss -t -a
Стан Recv-Q Send-Q Локальна адреса:Порт Адреса піра:Порт
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
LISTEN 0 80 127.0.0.1:mysql 0.0.0.0:*
LISTEN 0 128 127.0.0.53%lo:domain 0.0.0.0:*
ESTAB 0 0 10.0.0.4:53852 168.63.129.16:8037
ESTAB 0 0 10.0.0.4:ssh 183.83.211.129:64118
ESTAB 0 0 10.0.0.4:33256 169.254.169.254:http
ESTAB 0 1080 10.0.0.4:ssh 222.186.30.35:11527
ESTAB 0 120 10.0.0.4:ssh 183.83.211.129:63049
LISTEN 0 128 [::]:ssh [::]:*
LISTEN 0 128 *:http *:*

Пошук файлів з locate

Команда `locate` використовує базу даних для пошуку файлів, що робить її швидшою, ніж `find`. Для пошуку файлу, наприклад `apache2.conf`:

[email protected]:~$ locate apache2.conf
/etc/apache2/apache2.conf
/var/lib/dpkg/info/apache2.conffiles

Опція `-c` виводить тільки кількість файлів, що відповідають шаблону пошуку.

[email protected]:~$ locate -c apache2.conf
2

Іноді необхідно оновити базу даних, яку використовує `locate` (mlocate). Для цього потрібно запустити команду `updatedb` з правами суперкористувача.

[email protected]:~$ sudo updatedb

Пошук файлів з find

Одна з найбільш часто використовуваних команд в Linux. Використовуйте її для пошуку файлів за іменем, правами, ідентифікатором користувача, ідентифікатором групи, розміром, типом файлу та іншими критеріями.

Для пошуку файлу за ім’ям в поточному каталозі, використовуйте опцію `-name`, а потім ім’я файлу:

[email protected]:~$ find . -name a.txt
./myfiles/a.txt

Для пошуку каталогів використовуйте опцію `-type d`:

[email protected]:~$ find . -type d
.
./.ssh
./myfiles
./.cache
./.gnupg
./.gnupg/private-keys-v1.d
./docker

Для пошуку файлів за розміром, наприклад, файлів розміром понад 20 МБ, використовуйте опцію `-size`:

[email protected]:~$ find . -size +20M
./docker/docker-ce-cli_5%3a19.03.12~3-0~ubuntu-bionic_amd64.deb
./docker/docker-ce_5%3a19.03.12~3-0~ubuntu-bionic_amd64.deb

Управління службами з systemctl

Оскільки systemd замінив SysV init в більшості дистрибутивів Linux, використовуйте `systemctl` для керування службами та модулями systemd.

Для запуску служби, наприклад `apache2`:

[email protected]:~$ sudo systemctl start apache2.service

Суфікс `.service` можна опустити.

Щоб зупинити службу:

[email protected]:~$ sudo systemctl stop apache2

Для перегляду статусу служби використовуйте команду `systemctl status`. Наступний приклад показує стан `apache2`, коли вона запущена:

[email protected]:~$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
 └─apache2-systemd.conf
Active: active (running) since Wed 2020-08-19 11:34:04 UTC; 2s ago
Process: 25346 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 18202 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Process: 25536 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 25555 (apache2)
Tasks: 55 (limit: 1024)
CGroup: /system.slice/apache2.service
 ├─25555 /usr/sbin/apache2 -k start
 ├─25558 /usr/sbin/apache2 -k start
 └─2555