Однажды мой знакомый, который на тот момент администрировал некое веб-приложение на сервере под управлением GNU/Linux, пожаловался на одного вредного администратора сервера. Тот ни в какую не хотел устанавливать htop, несмотря на все просьбы.

Я немного удивился и поинтересовался, в чём причина такого странного поведения. Если упростить, то дальнейший наш диалог получился вот таким:

— Он говорит, что вполне достаточно функциональности обычного top.
— А её недостаточно, я правильно понимаю? Какого функционала в нём не хватает?
— Ну… Он весь серый, мне на нём не видно ничего!


Тут я удивился ещё сильнее. Но уже не вредности администратора сервера, а тому, что мой знакомый, имея приличный опыт работы с GNU/Linux, не знает всех возможностей такой распространённой утилиты, как top.

Да, разумеется, если запустить top в свежесозданном профиле пользователя на большинстве дистрибутивов, то мы увидим примерно такую картину:



Зрение у всех разное, и я вполне допускаю, что в данном случае кому-то может быть сложно разглядеть интересующее. Но ведь нажатием буквально нескольких клавиш картина меняется например на вот такую:



Как видите, имеем целых четыре независимых окна, с разными наборами столбцов, в каждом из которых процессы отсортированы по своему параметру. И разумеется, всё это можно настроить так, как нужно вам. И что самое замечательное — для выполнения настроек вам хватит привилегий рядового пользователя.

Как это сделать?


Сначала способ быстрый (и неправильный).
После того, как вы получили пользовательский сеанс, запустите top. Вы увидите интерфейс top по умолчанию:



Но достаточно просто нажать «z», и интерфейс станет не таким уж серым:



Уже лучше, но не видно, по какому параметру отсортированы процессы. Не беда, нажмём «x» и увидим:



Ещё лучше, но окно у нас одно. Сделаем больше, нажмём «A»:



Окон стало четыре, но три из них — чёрно-белые. Исправим ситуацию. Нажмём «a», а затем «z», «x».



Процессы во втором окне отсортированы по PID, а нам надо по %Mem. Исправим это, нажимая «>» (или «<», если промахнулись):



Повторим предыдущие действия для оставшихся окон: «a» для перехода в следующее окно, «z» для включения цветного отображения, «x» для подсветки столбца сортировки. Результат:



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

Разумеется, так и должно быть. Поэтому я и оговорился, что способ быстрый, но неправильный.

А теперь — правильный.

Запустите top и нажмите «?».



Да, вы видите встроенную справку. Она, между прочим, многоуровневая. Но вы удивитесь, сколько пользователей считает этот экран единственным. Поскольку бегло прочитав его, делали то, о чём их просили в последнем предложении — нажимали «q» или «Esc», кому что было удобнее.

А если её внимательно прочитать, то можно выяснить, например, что после всех нужных настроек для их сохранения нужно нажать «W», и ваши настройки сохранятся в файле ~/.toprc. Что цвета, набор полей в каждом окне, режимы отображения некоторых полей и многое другое тоже настраивается.

Небольшой оффтоп
Я ни в коем случае не ставлю своей целью занудное напоминание о пользе чтения документации. Также я не ставлю своей целью подробное описание всех настроек top в рамках данной статьи, хотя, если читатели проявят к этому интерес, с удовольствием опубликую и описание. Я не считаю труд разработчиков htop и других утилит бесполезным. И разумеется, я рассматривал современную версию top.


Я всего лишь хотел сказать, что:
  • Даже опытные специалисты могут не знать элементарных, казалось бы, вещей. Просто потому, например, что им это никогда не требовалось.
  • Даже если утилита появилась в прошлом столетии, это не значит, что проект застрял во времени и не развивается. Например, в прошлом столетии не было отображения контейнера LXC, в котором исполняется процесс.
  • Многие утилиты, несмотря на примитивный внешний вид по умолчанию, очень гибко настраиваются. Это, к слову, касается не только утилит GNU/Linux. И считать утилиту «плохой» и «несовременной», потому что вам не подходят её настройки по умолчанию, по меньшей мере странно. Вы же не бежите покупать новый разводной ключ, если старый настроен не на тот размер гайки, который вам нужен.
  • Иногда вместо того, чтобы требовать для выполнения задачи чего-то дополнительного (или жаловаться, что такой возможности вам не предоставили), стоит потратить несколько минут на изучение возможностей уже имеющихся у вас инструментов.


Спасибо за внимание.

Что ещё полезного можно почитать в блоге Cloud4Y

> Путь искусственного интеллекта от фантастической идеи к научной отрасли
> 4 способа сэкономить на бэкапах в облаке> AI помогает изучать животных Африки
> Лето почти закончилось. Не утекших данных почти не осталось
> IoT, туман и облака: поговорим про технологии?

Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью! Пишем не чаще двух раз в неделю и только по делу.

Комментарии (67)


  1. eumorozov
    07.10.2019 12:26
    +1

    Думаю, что все знать невозможно. Слишком уж много как тривиальных вещей, так и сложных, в любой области. Есть только какие-то градации между полным незнанием и полным знанием.


    И еще есть человеческое сопротивление новому (или необучаемость). Например, в моей практике есть случай, когда встретил человека, который гордится тем, что использует только Unix-way, работает только в командной строке. Я обрадовался, что появился единомышленник, но буквально сразу же заметил, что человек:
    1) не знает и не использует даже основные ключи grep/fgrep/egrep
    2) не знает и не использует команды find, xargs
    3) не знает даже самые простые команды редактора vim
    4) категорически отвергает улучшенные альтернативы grep, такие как ack-grep, ripgrep


    В итоге, он так и продолжает использовать командную строку в лучшем случае на 50%. Но всех не переучишь, я сначала пытался помочь, но моя помощь с гневом отвергалась, и я забил. При этом человек на 10 лет моложе меня, то есть, казалось бы, должен быть намного менее консервативен.


    1. embden
      08.10.2019 02:39
      +1

      А как всё это помнить? Я как-то решился, прошел курс для себя по awk и sed, пользовался активно xargs и find. Проходит какое-то время, снова хочу использовать эти утилиты, а вспомнить не получается. Снова лезу в справку, снова изучаю, снова пишу нужный скрипт, снова проходит несколько месяцев — всё забывается. Еще же у каждой утилиты свой язык регулярных выражений, свой язык подстановки параметров, свой способ экранирования символов. Еще ведь есть и разные версии утилит, синтаксис может незначительно отличаться. И вот не нужно мне каждый день awk использовать, даже каждый месяц использовать не нужно.


      1. eumorozov
        08.10.2019 06:07

        Невозможно все помнить. Думаю, изучение помогает просто потому что запоминаешь скорее факт: «этим инструментом можно решить такой класс задач», и когда требуется, сразу знаешь в какой ман смотреть, чтобы освежить знания.


        А вот те инструменты, которыми пользуюсь многократно каждый день, стараюсь изучить в совершенстве и периодически освежать знания. Это:


        • оболочка и терминал, которыми пользуюсь
        • язык программирования, на котором пишу (синтаксис и стандартная библиотека)
        • текстовый редактор (vim)
        • программы, которыми пользуюсь ежедневно (ripgrep, git)

        Для того, чтобы знания закрепились в памяти, после изучения чего-то, относящегося к последней категории, закрепляю знания практическим применением. Например, увидел в лекции на YouTube какой-нибудь новый прием редактирования в vim: записываю его в блокнот, и после просмотра заставляю себя использовать его несколько раз. Если действительно удобно, то отложится в памяти.


        А так — те же самые проблемы у всех. Тоже редко использую awk, и если требуется что-то за пределами awk /rrr/ '{ print $1 }', приходится заново читать документацию.


        Да что там говорить, когда-то писал на Perl (не очень долго, но все же). Вчера надо было залезть в чужой исходник на Perl, чтобы понять кое-что о старом формате файлов, с которым придется работать. Почти ничего не смог в нем понять (честно говоря, за это и не любил Perl, на мой взгляд, это всегда был write-only язык).


      1. a-tk
        08.10.2019 08:54
        +1

        Вывод: интуитивность и однотипность использования указанных инструментов оставляет желать лучшего…


        1. gecube
          08.10.2019 09:09

          Ага. Чего только стоит вспомнить как вызвать справку в каждой из них.


          tar -> --help, --usage
          openssl -> help
          awk -> -h, -?
          find -> --help

          и т.д.


          1. DreamingKitten
            08.10.2019 10:35

            BSD-стиль против SYSV-стиля. Разые утилиты пришли из разного юзерспейса и сохраняют такой формат своих опций исторически, а не для того, чтобы вам было запутаться проще :)


            1. gecube
              08.10.2019 12:28

              Несомненно, Вы правы. Эти отличия пошли исторически. Но может всё-таки стоит повернуться теперь лицом к пользователю? Я не хочу запоминать 100500 способов вызвать справку ) и добавление новых аргументов, ну, явно, не должно сломать совместимость с уже существующим поведением стандартных приложений.


          1. axifive
            08.10.2019 12:43
            +2

            А потом волей случая заносит в Windows и ты, с заметно большей долей раздражения начинаешь писать /h /d /F /I


    1. gecube
      08.10.2019 09:08

      По п.4 я могу с ним согласиться. По работе часто приходится работать с разными конфигурациями и правильным методом является использование минимального достаточного набора утилит. Ну, вот реально — ack-grep и ripgrep чем принципиально помогают? Тем более в условиях ограничений (pod kubernetes'а со стандартным alpine и без возможности установить утилиты или ИБшники ничего дополнительного не устанавливают — и в принципе — они правы)


      1. eumorozov
        08.10.2019 09:22

        Я знаю, как заменить ripgrep посредством find, xargs, grep. Поэтому в ограниченных условиях могу использовать их в качестве замены. А вот когда занимаюсь разработкой в привычном окружении, ripgrep (ну или любой аналог) намного удобнее. Хотя бы потому что, можно, например, исключить файлы из .gitignore или любые другие, команда для поиска по типу файла, гораздо короче аналогичной конструкции из find.


        В общем-то, наверное, если посчитать по истории, то возможно, использую grep почти так же часто, как и ripgrep. Но в разных ситуациях.


      1. Crandel
        08.10.2019 11:58
        +1

        Самое смешное, что зайдя в pod kubernetes на стандартном alpine и без возможности установить утилиты — вы увидите, что там ни одна из перечисленных команд не работает, даже "?", только этот набор команд


        Keys:
            N/M/P/T: show CPU usage, sort by pid/mem/cpu/time
            S: show memory
            R: reverse sort
            1: toggle SMP
            Q,^C: exit


        1. gecube
          08.10.2019 12:29

          Спасибо, факт интересный, но вполне логичный, учитывая, что в alpine busybox и саой обрезанный облегченный набор стандартных утилит.
          Я уж не говорю о том, что скорее всего top в pod'е будет абсолютно бесполезен и нужно смотреть во внешний мониторинг.


  1. TarasHalturin
    07.10.2019 12:37
    +1

    фанатик админ отказалься установить htop и заставляет пользователя изучить top, как его выучил он )… это ли не признак раздутого ЧСВ у админа?

    PS как-то давно баловался с top'ом и его настройками цветастости и шорткатами, но забылось сильно быстро ибо htop реально после apt install дает максимум комфорта и информации


    1. Ordinatus
      07.10.2019 14:26

      У htop есть проблемы с поеданием ресурсов. Он на питоне и очень прожорлив. Разница между top и htop заметна. Был случай когда мне как админу запрещали ставить htop девелоперы.


      1. DreamingKitten
        07.10.2019 14:41

        Он на питоне и очень прожорлив.
        Што.
        Vecanoi ~ # file /usr/bin/htop
        /usr/bin/htop: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped


        1. Ordinatus
          07.10.2019 14:56

          И правда. Ошибочка вышла. Не знаю почему подумал что питон. Видимо с чем то перепутал.
          github.com/hishamhm/htop


          1. Fedcomp
            08.10.2019 10:03

            А знаете что самое забавное — я тоже думал что htop на питоне. Тоже уже не помню почему.


      1. BubaVV
        07.10.2019 16:06
        +1

        Думаю, перепутали с iotop. Вот он реально тормозной


      1. JerleShannara
        07.10.2019 18:49
        +3

        Вот уж не знаю, некрофил во мне говорит, что htop жрет на 0.3% больше процессора, чем top. Процессор — Pentium-II 300Mhz.


    1. hjornson
      08.10.2019 11:24

      реалии работы с существующей у заказчика инфраструктурой:
      1. не везде htop есть.
      2. не везде его можно просто так взять и установить.


  1. bers-rus
    07.10.2019 13:27

    а если ещё в top`e нажать m1t
    =)


    1. avorsa
      07.10.2019 19:20
      +2

      Как всегда в комментариях можно много интересного откопать!


    1. gecube
      08.10.2019 09:11

      И что это делает? Не томите! Открывает встроенный тетрис? :-)


    1. nickneo
      08.10.2019 09:37

      да, так действительно удобнее, а как сделать так чтобы в top поле Command отображалось как в htop

      Ps: Ниже в коментах нашел, клавиша «c»


    1. thecoder
      08.10.2019 12:22
      +1

      m1tt


  1. shurup
    07.10.2019 16:46
    +1

    Буду занудной — ну и ладно. Как же можно "GNU/Linux" через обратный слэш?! Элементарная грамотность, после которой (уже в заголовке) опасно читать статью.


    1. Cloud4Y Автор
      07.10.2019 16:54

      Спасибо, исправил.
      А статью читать безопасно, ручаюсь.


  1. cxell
    07.10.2019 17:06

    У вас 20 ядер и нужно посмотреть, как распределена нагрузка.
    htop покажет. top — не уверен (хотя если кто знает магическую последовательность нажатия буковок и циферок — киньте сюда заклинание)


    1. alex-open-plc
      07.10.2019 17:34

      В этом случае спасёт nmon от IBM.


      1. MMik
        08.10.2019 13:42

        nmon есть под Linux, но я не уверен, что он тот же самый, что и в AIX.


    1. Cloud4Y Автор
      07.10.2019 17:51

      Если мне не изменят память, магическая комбинация — это цифра 1. Попробуйте?


      1. mistergrim
        08.10.2019 01:55
        +2

        Всегда меня умиляла логика именования аргументов и хоткеев GNU-утилит.


        1. eumorozov
          08.10.2019 06:09

          А причем здесь GNU? top — часть пакета procps-ng, он не принадлежит проекту GNU.


      1. cxell
        08.10.2019 12:17
        +1

        A-a-a-a-a! It's alive! Страшное колдунство работает!


  1. Nalivai
    07.10.2019 17:59

    Вот так при помощи нескольких несложных движений можно из буханки хлеба сделать модель htop. Но зачем?
    Потому что человек должен обслуживать технику, и ни в коем случае не наоборот.


  1. Crandel
    07.10.2019 18:01

    Прикольно, что в термуксе ни одна из команд не работает. Не удивлюсь, что у кого-то на какой-то старой центоси тоже не заработает)
    А вот htop работает как надо)


  1. Symsym
    07.10.2019 22:24
    +6

    Божественная статья, спасибо! В результате которой, обнаружил долгожданную функцию показа процесса с аргументами, не благодарите, это клавиша "с".


    1. nickneo
      08.10.2019 09:43

      о, спасибо.


  1. A1EF
    08.10.2019 02:47
    +1

    За что люблю top, так за отображение подробностей жизни ядер CPU. Большой load average? А почему? Откроешь — а там, например, высокий iowait. И понятно, в какую сторону стоит дальше копать.


    1. ErgoZru
      08.10.2019 03:08

      А можно мне, неучу, подсказать куда копать в таких случаях? Просто для общего развития, вдруг понадобится :) буду благодарен :)


    1. WST
      09.10.2019 08:31
      +1

      В htop тоже можно увидеть iowait глазами: F2 — display options — detailed CPU time. Если включить данную галочку, ожидание ввода-вывода будет отображаться серым цветом.


  1. cru5ader
    08.10.2019 08:25

    А еще полезно бывает сохранить конфигурационные настройки команды top для текущего пользователя — нажмите W


  1. phikus
    08.10.2019 08:58
    +1

    Так то да, но top не может показать отдельно загрузку всех 54 ядер(ибо не влезают по вертикали), а htop может


  1. DenisLaletin
    08.10.2019 09:49

    И всёж легче поставить htop, чем как на пианино играть по клавиатуре — чтоб получить хотяб что-то более менее удобно-читабельное на экране :)


    1. bers-rus
      08.10.2019 11:39

      ИМХО — одинаково htop,top,ps… это инструменты, помогающие решить кейс. Всех программ с параметрами не упомнишь.
      А вот чем действительно всегда приходится пользоваться — это apropos и man.
      Могу посоветовать почитать/посмотреть Дмитрия Кетофа.


  1. 13werwolf13
    08.10.2019 09:58

    для меня у htop есть одна киллерфича которой нет у top, и это tree view.


    1. bers-rus
      08.10.2019 11:25

      man top
      /tree
      V


  1. seasadm
    08.10.2019 10:04

    Устаревшие в прошлом веке и не развиваются? Тут уже говорили про net-tools (ifconfig, netstat)?


    1. gecube
      08.10.2019 11:41

      ifconfig — дно. Аргументирую. Этот исполняемый файл лежит в sbin. Следовательно, обычный юзер его не может запустить. А если нужна диагностика? Поэтому утилита ip — прям must.
      Другой вопрос, что многие считают, что выхлоп ifconfig более читаемый. Но это спорно.


      1. cru5ader
        08.10.2019 11:46
        +1

        Обычный пользователь может запустить ifconfig, указав полный путь /sbin/ifconfig


      1. DreamingKitten
        08.10.2019 19:28

        ifconfig — дно. Аргументирую. Этот исполняемый файл лежит в sbin. Следовательно, обычный юзер его не может запустить. А если нужна диагностика?
        Што^2
        Vecanoi ~ # equery files sys-apps/net-tools | grep bin
        /bin
        /bin/dnsdomainname
        /bin/hostname
        /bin/ifconfig
        /bin/netstat
        /bin/route
        /sbin
        /sbin/arp
        /sbin/ipmaddr
        /sbin/iptunnel
        /sbin/mii-tool
        /sbin/nameif
        /sbin/rarp


        1. gecube
          09.10.2019 08:17

          georg.gaal@HOST:~$ which ifconfig
          /sbin/ifconfig
          georg.gaal@HOST:~$ lsb_release -a
          No LSB modules are available.
          Distributor ID: Ubuntu
          Description:    Ubuntu 18.04.2 LTS
          Release:    18.04
          Codename:   bionic

          т.е. таки sbin. Ну, ок, может я переборщил с тем, что его обычный юзер никогда не может выполнить — но на определенных конфигурациях я сам от этого в осадок выпал.


  1. JordanoBruno
    08.10.2019 11:06

    htop для обычного юзера намного более user-friendly, чем тот же top. В принципе, учитывая, что top появился хрен знает когда, это нормально.

    P.S. Админа тоже можно понять, это защитная реакция от лишнего хлама в OS. А то юзеры же сначала htop, потом еще что-то, а через год — в системе уже всевозможные утилиты и куча зависимостей.


    1. Nalivai
      08.10.2019 13:47

      Сегодня он играет джаз, а завтра он играет джаз! Запретить! Только голый ассемблер, только хардкор. А то так, сегодня он С компилирует, а завтра у него уже микросервисы на JS.


  1. MMik
    08.10.2019 13:48

    Так же можно посмотреть на atop и glances. Оба умеют писать лог, и потом можно в replay просмотреть, что происходило с системой в определённое время. Glances — вообще монстр, умеет работать в клиент-серверном режиме, есть API, есть Web-UI, кроме инфы о системе умеет собирать информацию с некоторых приложений.


    1. gecube
      08.10.2019 13:57

      Ну, давайте тогда уж netdata рекламировать — а чо? красива!
      https://github.com/netdata/netdata


      glances поглядел. Не очень зашло.


  1. ScreamPassion
    08.10.2019 15:30
    +1

    Нажимаем X потом нажимаем A потом Z потом снова A и X и A и Z
    Сразу вспомнились старые времена, когда на игровых приставках вводили коды, которые перед этим приходилось заучивать наизусть, и даже вспомнился Doom95 со своими iddqd и idkfa
    Введи код, и получи бессмертие и все оружие TOPa ))


  1. astenix
    08.10.2019 18:06

    htop от top отличается удобными палочками в верхнем левом углу, которые показывают загрузку ядер и памяти :)


    Реально удобно оценивать изменения нагрузки.


    1. Crandel
      08.10.2019 19:09
      +1

      Вы про эти?


      1. astenix
        08.10.2019 20:02

        Точно так.


        1. mkll
          08.10.2019 21:51

          Да, но на скриншоте выше именно top. :)


          1. astenix
            08.10.2019 22:33

            Экзактли.

            А теперь вернёмся к исходникам и перечитаем мою прекрасную шутку :)


            1. mkll
              08.10.2019 22:34
              +1

              Сорри, видимо, я сегодня слишком серьезен. :)


  1. astenix
    08.10.2019 20:04

    А весёлый админ сделал бы своему пользователю алиас для запуска top через „htop”.


  1. therb1
    09.10.2019 02:01

    А может кто-то поделится красивыми toprc?
    Вот для примера мой.


    top's Config File (Linux processes with windows)
    Id:i, Mode_altscr=0, Mode_irixps=1, Delay_time=0.800, Curwin=0
    Def     fieldscur=L@&*'-068>?ACFML)+,./125BHIJKNOPQRSTUVWXYZ[\]^_`abcdefghij
            winflags=163772, sortindx=18, maxtasks=0, graph_cpus=1, graph_mems=1
            summclr=6, msgsclr=2, headclr=3, taskclr=5
    Job     fieldscur=*(-068>?@ACFGLML)+,./125BHIJKNOPQRSTUVWXYZ[\]^_`abcdefghij
            winflags=193852, sortindx=0, maxtasks=0, graph_cpus=0, graph_mems=0
            summclr=6, msgsclr=6, headclr=7, taskclr=6
    Mem     fieldscur=&*'(-0689FG?ML)+,./125BHIJKNOPQRSTUVWXYZ[\]^_`abcdefghij
            winflags=193852, sortindx=21, maxtasks=0, graph_cpus=0, graph_mems=0
            summclr=5, msgsclr=5, headclr=4, taskclr=5
    Usr     fieldscur=-3468;<=>?@ACFGML)+,./125BHIJKNOPQRSTUVWXYZ[\]^_`abcdefghij
            winflags=193852, sortindx=3, maxtasks=0, graph_cpus=0, graph_mems=0
            summclr=3, msgsclr=3, headclr=2, taskclr=3
    Fixed_widest=0, Summ_mscale=0, Task_mscale=0, Zero_suppress=0


    1. Vovanys
      09.10.2019 15:45
      +1

      Не катит. top не запускается.
      top: window entry #1 corrupt, please delete .toprc
      Видимо в файле есть спец символы не копируемые…


  1. therb1
    09.10.2019 02:10

    Сначала подумал, блин пойду-ка я top подучу. А потом вспомнил, что я админ и люблю htop.