Найважливіші команди Linux для DevOps
Важко уявити сучасного DevOps-спеціаліста без знання ОС Linux та команд для виконання налаштувань системи та конфігураційних файлів.
Саме тому в цій статті я поділюсь з вами основними командами, які надають можливість вміло оперувати необхідними інструментами і швидко виконувати поставлені задачі.
На сьогодні існує велика кількість різноманітних дистрибутивів ОС Linux, але, незважаючи на їхню технічну відмінність, наявний стандартний набір базових команд та утиліт, які функціонують однаково на них усіх. Вони «встановлені з коробки» і доступні для використання.
Далі поговоримо про найкорисніші з них, заздалегідь розділивши їх на певні групи залежно від специфіки та особливостей використання.
Команди для роботи з файлами та каталогами
До цієї категорії належать системні утиліти для навігації між каталогами, пошуку, створення, переміщення, видалення, редагування та відображення вмісту файлів:
pwd
— відображення шляху до поточного каталогу.cd
— перехід у потрібний каталог.
ls
— вивід вмісту поточного каталогу. Для кращого відображення інформації бажано використовувати з ключем-la
.
Також є інші ключі, які можна знайти ввівши команду man
перед ls
. Її можна використовувати до всіх наявних команд. Вона виводить manual по кожній команді з усіма доступними ключами та параметрами.
mkdir
— створення нового каталогу.mkfile
,touch
,echo
— створення нового файлу. За використання командиmkfile
необхідно вказати ключі-nv
та після нього розмір створюваного файла і його імʼя. У випадку зtouch
тільки імʼя. Зecho
використовується певна конструкція, в якій записується стрічка в файл, якщо його не існує, то він створюється з цією стрічкою. Текст вказується у лапках. Можна вказати пусті лапки й тоді буде створений новий пустий файл.
cp
— копіювання файлів або каталогів. Після команди вказується два параметри: імʼя файлу/каталогу, що копіюється і назва файлу/каталогу, куди буде скопійовано. Під час копіювання каталогу з вкладеними каталогами використовується ключ-r
для копіювання всього вмісту підкаталогів. Інші, можливі для застосування, ключі можна переглянути командоюman cp
.
mv
— переміщення файлів/каталогів. Як і з попередньою командою вказується імʼя файлу/каталогу, що буде переміщатись і назва файлу/каталогу, куди буде переміщено. Утиліта використовується також для перейменування. Найпопулярніші ключі:-i
— під час переміщення файлу, якщо такий файл вже існує, то видається запит на перезапис;-f
— за наявності такого ж файлу, виконується перезапис без запиту;-n
— якщо такий файл вже є, то він не перезаписується.
rm
— видалення каталогів/файлів. Після команди потрібно вказати що видаляти. Для виконання операції без підтвердження використовують ключ-f
, якщо потрібно видалити всі вкладені каталоги, то необхідно вказати ключ-r
.vi
,vim
— системний текстовий редактор. Використовується для відкриття і редагування вмісту файлу.Vim
— більш модифікована і сучасна версія редактора, проте вона встановлена не на всіх ОС, на відміну відvi
. Використання цього редактора є дещо специфічним. Тут представлені два режими роботи: командний і безпосередньо редагування тексту. Для переходу в командний режим використовують символ : і далі вводять потрібну команду. Для переходу в режим редагування тексту потрібно натиснути клавішу i (тобто insert). Щоб вийти з режиму редагування натисніть Esc. Щоб вийти з редактора з збереженням внесених змін потрібно в режимі команд ввести :x, без змін — :q!.cat
- відображення вмісту файлу в розмір вікна терміналу. Після команди вказується назва файлу. Якщо файл більший за область вікна, то для подальшого виведення використовується клавіша Enter.find
— пошук файлу або каталогу. Після команди вказується каталог, в якому буде відбуватися пошук, якщо є підкаталоги, то в них також. Далі задається критерій пошуку. Зазвичай використовують два ключі-name
(пошук за іменем файлу) та-type
(пошук за типом файлу).
df
- відображає інформацію про кількість вільного простору системних каталогів. Зазвичай застосовують з ключем-h
.lsof
— розшифровується як LiSt Open Files і використовується для того, щоб зрозуміти, які файли відкриваються якими процесами. Як ми всі знаємо, Linux система розглядає все як файли (зокрема каталоги, канали, пристрої, сокети, тощо). Одна з причин використання командиlsof
— це ситуація, коли диск не може бути розмонтований, оскільки виникає помилка: «Файли використовуються». За допомогою цієї команди ми можемо легко визначити які файли використовуються.
Найчастіше використовувані комбінації команди
# lsof -u www-root
— відображає список усіх відкритих файлів користувача www-root;
# lsof -i TCP:22
— відображає список процесів, що працюють на 22 порту;
# lsof -i -u^root
— відображає список процесів за виключенням користувача root;
# lsof -i -u www-root
— показує які команди використовує користувач www-root;
# lsof -i
— виводить список всіх мережевих підключень;
# kill -9 `lsof -t -u www-root`
— завершення всіх процесів користувача www-root.
</code>
<code>grep
— розшифровується як global regular expression printer. Іншими словами grep
вирізає потрібні вам рядки з текстових файлів, які містять вказаний користувачем текст. Структура виглядає так:
# grep “запит” “файл”
“запит”
— слово, яке ви шукаєте;
“файл”
— файл, у якому ви шукаєте слово.
Ключі: -i
— пошук з ігноруванням регістру букв; -с
— підраховує кількість «запитів» у «файлі».
Команди для роботи з мережею
Існує велика кількість команд як для відстежування мережевих пакетів, так і для перевірки системних налаштувань та портів. До основних можна віднести наступні:
ss
абоnetstat
— виводить інформацію про використання портів та стан мережі. За замовчуванням встановлена саме командаss
, аnetstat
представлена у пакеті net-tools, після його встановлення стає доступною до використання. Зазвичай застосовується з ключами-ntpl
.
Деякі корисні комбінації команди netstat
# netstat -npt | awk '{print $5}' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
— список IP та кількість TCP-зʼєднань з кожного з них.
# netstat -npt | grep <port> | awk '{print $5}' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
— список IP та кількість TCP-зʼєднань на певному порту (<port
>).
# netstat -npt | grep <port> | grep ESTABLISHED | awk '{print $5}' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
— cписок встановлених TCP-з’єднань за IP-адресою на певному порту та в стані ESTABLISHED.
netstat -npt | awk '{print $6}' | sort | uniq -c | sort -nr | head
— Стан SYN_RECV означає, що ваш сервер отримав початковий пакет SYN, він надіслав власний пакет SYN+ACK і очікує на ACK від зовнішнього комп’ютера для завершення рукостискання TCP. Використовується для відстежування SYN flood атак.
ifconfig
— відображення інформації про всі мережі інтерфейси в системі.ip address
— виведення IP-адрес всіх мережевих інтерфейсів.ifup, ifdown
— ввімкнення та вимкнення мережевих інтерфейсів відповідно. Після команди вказується мережевий інтерфейс.ping
— перевірка зʼєднання з заданим сайтом, хостом. Слід за командою вказується домен або IP-адреса.
traceroute
— перевірка маршруту до кінцевого вузла. Якщо на якомусь вузлі є проблеми, то це відображається у результатах виконання команди з вказанням певної IP-адреси. Зазвичай така ситуація може бути у певних провайдерів, які блокують підмережі на своїй стороні.tcpdump
— захоплює та відображає мережевий трафік згідно з вказаними параметрами. Вони можуть бути представлені у вигляді IP, порту, мережевого інтерфейсу, вхідних чи вихідних пакетів. Найчастіше застосовують комбінації:
# tcpdump -i eth0
— перегляд трафіку з мережевого інтерфейсу eth0
.
# tcpdump -i eth0 host <host IP>
— захоплення пакетів з певного хоста.
# tcpdump -i eth0 src host <host IP>
— виводить трафік, який надходить лише з <host IP>
. Якщо потрібно трафік, що надходить на <host IP>
, то замість src
пишемо dst
.
# tcpdump -i eth0 dst port <port number>
— виводить трафік, який виходить з порта під номером <port number>
. Якщо потрібно трафік, що надходить на порт <port number>
, то замість dst
пишемо src
.
iptables
— файрвол, котрий фільтрує трафік на сервер та з сервера. Можна налаштувати як блокування певних IP, портів та підмереж, так і дозволи для доступу до певних портів тільки з конкретних IP. Для перегляду всіх правил використовуйте ключ-L
.
Системні утиліти та служби
Використовується велика кількість служб та утиліт для налаштування та моніторингу системи. Запускають, зупиняють і перевіряють роботу служб за допомогою команди systemctl
. Після команди вказують операцію, яку необхідно виконати, а далі назва сервісу, до якого вона буде застосована.
Доступні наступні операції: status
(виведення поточного статусу сервісу), start
(запуск), stop
(зупинка), restart
(перезапуск служби з її вимкненням та запуском), reload
(перезапуск служби з внесенням змін без її вимкнення), enable
(додає сервіс в автозавантаження операційної системи), disable
(видалення служби з автозавантаження).
Найчастіше використовувані утиліти:
top
— виводить інформацію про запущені процеси, використання ними ресурсів, а також навантаження на систему. Є більш сучасна і модифікована версія утиліти —htop
, проте її потрібно встановлювати за допомогою пакетного менеджера.
iotop
— відображає навантаження запущених процесів на диск.w
— виводить список активних користувачів системи.ps
— показує список всіх процесів користувача. Застосовується як з ключами, так і з параметрами.free
— виводить інформацію про кількість використаної та вільної оперативної памʼяті, а також підкачки, якщо вона використовується. Для виводу у гігабайтах використовується ключ-h
.
curl
— утиліта, яка надає можливість передачі даних через мережу «Інтернет», формування URL запитів з потрібними параметрами для отримання вибірки даних. Працює з протоколами HTTP, SMTP, IMAP, POP3, Telnet, LDAP, RTMP, FTP, SCP. Після команди вказується URL сторінки або домен, а також необхідні параметри чи ключі.-I
— виводить інформацію про доступність сайту чи сторінки (якщо доступний, то код 200).-O
— виконує завантаження файлу, який вказаний по URL, має бути повне посилання на файл. Найбільш поширені та найкорисніші команди вказані на зображенні нижче.
netcat (nc)
— це утиліта комп’ютерної мережі для читання з мережевих з’єднань і запису в них, використовуючи TCP або UDP проколи. Netcat функціонує як внутрішній інструмент, який дозволяє сканувати та прослуховувати порти. Структура команди має такий порядок:
nc -<параметри> <адреса> <порт(-и)>
Найчастіше використовувані ключі: -I
— режим прослуховування, використовується з вказанням порту, якого потрібно прослухати; -p
— вказати номер порту. Найчастіше порт зчитується без вказівки параметра; -u
— використовувати протокол UDP, за замовчуванням використовується TCP; -v
— детальний режим (використовується при скануванні); -z
— вимкнути надсилання даних (використовується при скануванні).
dig
(з англ. domain information groper) — утиліта (DNS-клієнт), що надає користувачеві інтерфейс командного рядка для звернення до DNS-серверів. Деякі комбінації:
# dig google.com
— отримання інформації про домен.
# dig google.com +noall +answer
— виводить інформацію тільки секції ANSWER. Більш зручно для читання.
# dig google.com <DNS record type> +noall +answer
— виводить інформацію про конкретний тип DNS-запис <DNS record type>
.
# dig @8.8.8.8 google.com +noall +answer
— отримання інформації з конкретного DNS-сервера. У нашому випадку вказаний конкретний DNS-сервер Google.
# dig -x <IP address> +short
— дізнатись доменне імʼя, яке відповідає вказаній IP-адресі.
strace
— показує всі системні виклики утиліти або програми, які та надсилає до системи під час виконання, а також їх параметри та результат виконання. Але за потреби можна підʼєднатися і до вже запущеного процесу. Часто використовувані команди з використанням даної утиліти:
# strace <program name>
— запуск моніторингу за програмою <program name>
.
# strace -p <process id>
— запуск моніторингу за <process id>
.
# strace -e trace=<parametr> <program name>
— за допомогою ключа -e
можна відфільтрувати вивід команди. Після даного ключа вказується параметр фільтрації <parametr>
. Доступні такі параметри: file — всі системні виклики, які стосуються файлів; network — мережеві системні виклики; process — управління процесами; signal — системні виклики сигналів; desc — керування дескрипторами файлів; ipc — системні виклики IPC; memory — робота з пам’яттю програми.
# strace -c <program name>
— збір статистики системних викликів програмою <program name>
.
# strace -t <program name>
— відображення часу виконання кожного системного виклику програми <program name>
.
Операційна система Linux надає широкі можливості налаштування та моніторингу систем. Про частинку цих інструментів я розповів у цій статті, проте існує безліч інших команд, які є не менш корисними та часто використовуваними.
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
37 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів