Операційна система 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