5 сучасних альтернатив старих інструментів командного рядка Linux

Alex Alex 30 червня 2020
5 сучасних альтернатив старих інструментів командного рядка Linux

Використовуючи сучасніші альтернативи поряд зі старими інструментами командного рядка, можна отримати більше задоволення і навіть підвищити продуктивність праці.

У повсякденній роботі в Linux / Unix ми використовуємо безліч інструментів командного рядка - наприклад, du для моніторингу використання диска і системних ресурсів. Деякі з цих інструментів існують вже давно, наприклад, top з'явився в 1984 році, а перший реліз du датується 1971 роком.

За минулі роки ці інструменти були модернізовані та перенесені на різні системи, але в цілому далеко не пішли від своїх перших версій, їх зовнішній вигляд і usability також сильно не змінилися.

Це відмінні інструменти, які необхідні багатьом системним адміністраторам. Однак спільнота розробила альтернативні інструменти, які надають додаткові переваги. Деякі з них просто мають сучасний красивий інтерфейс, а інші значно покращують зручність використання. У цьому перекладі розповімо про п'ять альтернативи стандартним інструментам командного рядка Linux.

1. ncdu vs du

NCurses Disk Usage (ncdu) схожий на du, але з інтерактивним інтерфейсом на основі бібліотеки curses. Ncdu показує структуру каталогів, які займають більшу частину вашого дискового простору.

Ncdu аналізує диск, а потім показує результати, відсортовані по каталогах які найчастіше використовуються  або файлів, наприклад:

ncdu 1.14.2 ~ Use the arrow keys to navigate, press ? for help
--- /home/rgerardi ------------------------------------------------------------
   96.7 GiB [##########] /libvirt
   33.9 GiB [###       ] /.crc
    7.0 GiB [          ] /Projects
.   4.7 GiB [          ] /Downloads
.   3.9 GiB [          ] /.local
    2.5 GiB [          ] /.minishift
    2.4 GiB [          ] /.vagrant.d
.   1.9 GiB [          ] /.config
.   1.8 GiB [          ] /.cache
    1.7 GiB [          ] /Videos
    1.1 GiB [          ] /go
  692.6 MiB [          ] /Documents
. 591.5 MiB [          ] /tmp
  139.2 MiB [          ] /.var
  104.4 MiB [          ] /.oh-my-zsh
   82.0 MiB [          ] /scripts
   55.8 MiB [          ] /.mozilla
   54.6 MiB [          ] /.kube
   41.8 MiB [          ] /.vim
   31.5 MiB [          ] /.ansible
   31.3 MiB [          ] /.gem
   26.5 MiB [          ] /.VIM_UNDO_FILES
   15.3 MiB [          ] /Personal
    2.6 MiB [          ]  .ansible_module_generated
    1.4 MiB [          ] /backgrounds
  944.0 KiB [          ] /Pictures
  644.0 KiB [          ]  .zsh_history
  536.0 KiB [          ] /.ansible_async
 Total disk usage: 159.4 GiB  Apparent size: 280.8 GiB  Items: 561540

По записах можна переміщатися за допомогою клавіш зі стрілками. Якщо ви натиснете Enter, ncdu покаже вміст обраного каталогу:

--- /home/rgerardi/libvirt ----------------------------------------------------
                         /..
   91.3 GiB [##########] /images
    5.3 GiB [          ] /media

Ви можете використовувати цей інструмент, щоб, наприклад, визначити, які файли займають найбільше дискового простору. У попередній каталог можна перейти, натиснувши клавішу зі стрілкою вліво. За допомогою ncdu ви можете видалити файли, натиснувши клавішу d. Перед видаленням він запитує підтвердження. Якщо ви хочете відключити функцію видалення, щоб запобігти випадковій втраті цінних файлів, використовуйте опцію -r для включення режиму доступу тільки для читання: ncdu -r.

Ncdu доступний для багатьох платформ і дистрибутивів Linux. Наприклад, ви можете використовувати dnf для його установки на Fedora безпосередньо з офіційних репозиторіїв:

$ sudo dnf install ncdu

Або sudo apt  install ncdu на Ubuntu

2. htop vs top

Htop - це інтерактивна утиліта для перегляду процесів, схожа на top, але з коробки забезпечує приємну взаємодію з користувачем. За замовчуванням htop показує ту ж інформацію, що і top, але в більш наочному і барвистому вигляді.

За замовчуванням htop виглядає так:
5 сучасних альтернатив старих інструментів командного рядка Linux

На відміну від top:
5 сучасних альтернатив старих інструментів командного рядка Linux

Крім того, у верхній частині htop показує основну інформацію про систему, а нижній частині - панель для запуску команд за допомогою функціональних клавіш. Ви можете налаштувати її, натиснувши F2, щоб відкрити екран налаштування. В налаштуваннях можна змінити кольори, додати або видалити метрики або змінити параметри показу панелі огляду.

Хоча, покрутивши налаштування останніх версій top, теж можна добитися схожого usability, htop надає зручні конфігурації за замовчуванням, що робить його практичнішим і простішим у використанні.

3. tldr vs man

Інструмент командного рядка tldr показує спрощену довідкову інформацію про команди, в основному приклади. Його розробила спільнота tldr pages project.

Варто відзначити, що tldr - це не заміна man. Він як і раніше є канонічним і найповнішим інструментом виведення довідкових сторінок. Однак в деяких випадках man є надмірною. Коли вам не потрібна вичерпна інформація про будь-яку команду, ви просто намагаєтеся запам'ятати основні варіанти її використання. Наприклад, сторінка man для команди curl містить майже 3000 рядків. Сторінка tldr для curl має довжину 40 рядків. Її фрагмент виглядає так:

$ tldr curl

# curl
  Transfers data from or to a server.
  Supports most protocols, including HTTP, FTP, and POP3.
  More information: .

- Download the contents of an URL to a file:

  curl http://example.com -o filename

- Download a file, saving the output under the filename indicated by the URL:

  curl -O http://example.com/filename

- Download a file, following [L]ocation redirects, and automatically [C]ontinuing (resuming) a previous file transfer:

  curl -O -L -C - http://example.com/filename

- Send form-encoded data (POST request of type `application/x-www-form-urlencoded`):

  curl -d 'name=bob' http://example.com/form                                                                                            
- Send a request with an extra header, using a custom HTTP method:

  curl -H 'X-My-Header: 123' -X PUT http://example.com                                                                                  
- Send data in JSON format, specifying the appropriate content-type header:

  curl -d '{"name":"bob"}' -H 'Content-Type: application/json' http://example.com/users/1234

... TRUNCATED OUTPUT

TLDR означає «занадто довго; не читав »: тобто, деякий текст був проігнорований через його надмірну багатослівність. Назва підходить для цього інструменту, тому що man-сторінки, хоча і корисні, але іноді бувають занадто довгими.

Для Fedora tldr був написаний на Python. Ви можете встановити його за допомогою менеджера dnf. Зазвичай для роботи інструменту необхідний доступ до інтернету. Але клієнт Python в Fedora дозволяє завантажувати й кешувати ці сторінки для автономного доступу.

4. jq vs sed / grep

jq - це JSON-процесор для командного рядка. Він схожий на sed або grep, але спеціально розроблений для роботи з даними в форматі JSON. Якщо ви розробник або системний адміністратор, який використовує JSON в повсякденних завданнях, цей інструмент для вас.

Основна перевага jq перед стандартними інструментами обробки тексту, такими як grep і sed, полягає в тому, що він розуміє структуру даних JSON, дозволяючи створювати складні запити в одному вираженні.

Наприклад, ви намагаєтеся знайти назви контейнерів в цьому файлі JSON:

{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "labels": {
      "app": "myapp"
    },
    "name": "myapp",
    "namespace": "project1"
  },
  "spec": {
    "containers": [
      {
        "command": [
          "sleep",
          "3000"
        ],
        "image": "busybox",
        "imagePullPolicy": "IfNotPresent",
        "name": "busybox"
      },
      {
        "name": "nginx",
        "image": "nginx",
        "resources": {},
        "imagePullPolicy": "IfNotPresent"
      }
    ],
    "restartPolicy": "Never"
  }
}

Запустіть grep для пошуку рядка name:

$ grep name k8s-pod.json
        "name": "myapp",
        "namespace": "project1"
                "name": "busybox"
                "name": "nginx",


Grep повернув всі рядки, що містять слово name. Ви можете додати ще кілька параметрів в grep, щоб обмежити його, і за допомогою деяких маніпуляцій з регулярними виразами знайти імена контейнерів.

Щоб отримати цей же результат за допомогою jq, досить написати:

$ jq '.spec.containers[].name' k8s-pod.json
"busybox"
"nginx"

Ця команда видасть вам імена обох контейнерів. Якщо ви шукаєте тільки ім'я другого контейнера, додайте індекс елемента масиву в вираз:

$ jq '.spec.containers[1].name' k8s-pod.json
"nginx"

Оскільки jq знає про структуру даних, він дає ті ж результати, навіть якщо формат файлу незначно зміниться. grep і sed в цьому випадку можуть не працювати належним чином.

У jq багато функцій, але для їх опису потрібна ще одна стаття. Для отримання додаткової інформації зверніться до сторінки проєкту jq або до tldr.

5. fd vs find

fd - це спрощена альтернатива утиліті find. Fd не покликаний замінити її повністю: в ньому за умовчанням встановлено найпоширеніші налаштування, що визначають загальний підхід до роботи з файлами.

Наприклад, при пошуку файлів в каталозі сховища Git, fd автоматично виключає приховані файли та підкаталоги, включаючи каталог .git, а також ігнорує шаблони з файлу .gitignore. В цілому, він прискорює пошук, видаючи релевантніші результати з першої спроби.

За замовчуванням fd виконує пошук без урахування регістру в поточному каталозі з кольоровим виводом. Той же пошук з використанням команди find вимагає введення додаткових параметрів в командному рядку. Наприклад, щоб знайти всі файли .md (або .MD) в поточному каталозі, потрібно написати таку команду find:

$ find . -iname "*.md"

Для fd вона виглядає так:

$ fd .md

Але в деяких випадках і для fd потрібні додаткові параметри: наприклад, якщо ви хочете включити приховані файли та каталоги, ви повинні використовувати опцію -H, хоча зазвичай при пошуку це не потрібно.

fd доступний для багатьох дистрибутивів Linux. У Fedora його можна встановити так:

$ sudo dnf install fd-find

Необов'язково від чогось відмовлятися

Чи використовуєте ви нові інструменти командного рядка Linux? Або сидите виключно на старих? Але швидше за все, у вас комбо, так? Будь ласка, поділіться вашим досвідом в коментарях.

Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.