Я немного удивился и поинтересовался, в чём причина такого странного поведения. Если упростить, то дальнейший наш диалог получился вот таким:
— Он говорит, что вполне достаточно функциональности обычного top.
— А её недостаточно, я правильно понимаю? Какого функционала в нём не хватает?
— Ну… Он весь серый, мне на нём не видно ничего!
Тут я удивился ещё сильнее. Но уже не вредности администратора сервера, а тому, что мой знакомый, имея приличный опыт работы с GNU/Linux, не знает всех возможностей такой распространённой утилиты, как top.
Да, разумеется, если запустить top в свежесозданном профиле пользователя на большинстве дистрибутивов, то мы увидим примерно такую картину:
Зрение у всех разное, и я вполне допускаю, что в данном случае кому-то может быть сложно разглядеть интересующее. Но ведь нажатием буквально нескольких клавиш картина меняется например на вот такую:
Как видите, имеем целых четыре независимых окна, с разными наборами столбцов, в каждом из которых процессы отсортированы по своему параметру. И разумеется, всё это можно настроить так, как нужно вам. И что самое замечательное — для выполнения настроек вам хватит привилегий рядового пользователя.
Как это сделать?
Сначала способ быстрый (и неправильный).
После того, как вы получили пользовательский сеанс, запустите top. Вы увидите интерфейс top по умолчанию:
Но достаточно просто нажать «z», и интерфейс станет не таким уж серым:
Уже лучше, но не видно, по какому параметру отсортированы процессы. Не беда, нажмём «x» и увидим:
Ещё лучше, но окно у нас одно. Сделаем больше, нажмём «A»:
Окон стало четыре, но три из них — чёрно-белые. Исправим ситуацию. Нажмём «a», а затем «z», «x».
Процессы во втором окне отсортированы по PID, а нам надо по %Mem. Исправим это, нажимая «>» (или «<», если промахнулись):
Повторим предыдущие действия для оставшихся окон: «a» для перехода в следующее окно, «z» для включения цветного отображения, «x» для подсветки столбца сортировки. Результат:
Вот мы и получили тот же результат, который я продемонстрировал в самом начале статьи. Почти. Внимательные читатели сразу же укажут на то, что у меня в окнах другой набор полей, и цвета другие, и командную строку запуска процессов видно целиком, и так далее. А те, кто решил сразу же проверить, правду ли я пишу, могут с удивлением обнаружить, что при следующем запуске top снова стал серым и невзрачным.
Разумеется, так и должно быть. Поэтому я и оговорился, что способ быстрый, но неправильный.
А теперь — правильный.
Запустите top и нажмите «?».
Да, вы видите встроенную справку. Она, между прочим, многоуровневая. Но вы удивитесь, сколько пользователей считает этот экран единственным. Поскольку бегло прочитав его, делали то, о чём их просили в последнем предложении — нажимали «q» или «Esc», кому что было удобнее.
А если её внимательно прочитать, то можно выяснить, например, что после всех нужных настроек для их сохранения нужно нажать «W», и ваши настройки сохранятся в файле ~/.toprc. Что цвета, набор полей в каждом окне, режимы отображения некоторых полей и многое другое тоже настраивается.
Я всего лишь хотел сказать, что:
- Даже опытные специалисты могут не знать элементарных, казалось бы, вещей. Просто потому, например, что им это никогда не требовалось.
- Даже если утилита появилась в прошлом столетии, это не значит, что проект застрял во времени и не развивается. Например, в прошлом столетии не было отображения контейнера LXC, в котором исполняется процесс.
- Многие утилиты, несмотря на примитивный внешний вид по умолчанию, очень гибко настраиваются. Это, к слову, касается не только утилит GNU/Linux. И считать утилиту «плохой» и «несовременной», потому что вам не подходят её настройки по умолчанию, по меньшей мере странно. Вы же не бежите покупать новый разводной ключ, если старый настроен не на тот размер гайки, который вам нужен.
- Иногда вместо того, чтобы требовать для выполнения задачи чего-то дополнительного (или жаловаться, что такой возможности вам не предоставили), стоит потратить несколько минут на изучение возможностей уже имеющихся у вас инструментов.
Спасибо за внимание.
Что ещё полезного можно почитать в блоге Cloud4Y
> Путь искусственного интеллекта от фантастической идеи к научной отрасли
> 4 способа сэкономить на бэкапах в облаке> AI помогает изучать животных Африки
> Лето почти закончилось. Не утекших данных почти не осталось
> IoT, туман и облака: поговорим про технологии?
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью! Пишем не чаще двух раз в неделю и только по делу.
Комментарии (67)
TarasHalturin
07.10.2019 12:37+1фанатик админ отказалься установить htop и заставляет пользователя изучить top, как его выучил он )… это ли не признак раздутого ЧСВ у админа?
PS как-то давно баловался с top'ом и его настройками цветастости и шорткатами, но забылось сильно быстро ибо htop реально после apt install дает максимум комфорта и информацииOrdinatus
07.10.2019 14:26У htop есть проблемы с поеданием ресурсов. Он на питоне и очень прожорлив. Разница между top и htop заметна. Был случай когда мне как админу запрещали ставить htop девелоперы.
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
Ordinatus
07.10.2019 14:56И правда. Ошибочка вышла. Не знаю почему подумал что питон. Видимо с чем то перепутал.
github.com/hishamhm/htopFedcomp
08.10.2019 10:03А знаете что самое забавное — я тоже думал что htop на питоне. Тоже уже не помню почему.
JerleShannara
07.10.2019 18:49+3Вот уж не знаю, некрофил во мне говорит, что htop жрет на 0.3% больше процессора, чем top. Процессор — Pentium-II 300Mhz.
hjornson
08.10.2019 11:24реалии работы с существующей у заказчика инфраструктурой:
1. не везде htop есть.
2. не везде его можно просто так взять и установить.
cxell
07.10.2019 17:06У вас 20 ядер и нужно посмотреть, как распределена нагрузка.
htop покажет. top — не уверен (хотя если кто знает магическую последовательность нажатия буковок и циферок — киньте сюда заклинание)Cloud4Y Автор
07.10.2019 17:51Если мне не изменят память, магическая комбинация — это цифра 1. Попробуйте?
mistergrim
08.10.2019 01:55+2Всегда меня умиляла логика именования аргументов и хоткеев GNU-утилит.
eumorozov
08.10.2019 06:09А причем здесь GNU? top — часть пакета
procps-ng
, он не принадлежит проекту GNU.
Nalivai
07.10.2019 17:59Вот так при помощи нескольких несложных движений можно из буханки хлеба сделать модель htop. Но зачем?
Потому что человек должен обслуживать технику, и ни в коем случае не наоборот.
Crandel
07.10.2019 18:01Прикольно, что в термуксе ни одна из команд не работает. Не удивлюсь, что у кого-то на какой-то старой центоси тоже не заработает)
А вот htop работает как надо)
A1EF
08.10.2019 02:47+1За что люблю
top
, так за отображение подробностей жизни ядер CPU. Большой load average? А почему? Откроешь — а там, например, высокий iowait. И понятно, в какую сторону стоит дальше копать.ErgoZru
08.10.2019 03:08А можно мне, неучу, подсказать куда копать в таких случаях? Просто для общего развития, вдруг понадобится :) буду благодарен :)
WST
09.10.2019 08:31+1В htop тоже можно увидеть iowait глазами: F2 — display options — detailed CPU time. Если включить данную галочку, ожидание ввода-вывода будет отображаться серым цветом.
cru5ader
08.10.2019 08:25А еще полезно бывает сохранить конфигурационные настройки команды top для текущего пользователя — нажмите W
phikus
08.10.2019 08:58+1Так то да, но top не может показать отдельно загрузку всех 54 ядер(ибо не влезают по вертикали), а htop может
DenisLaletin
08.10.2019 09:49И всёж легче поставить htop, чем как на пианино играть по клавиатуре — чтоб получить хотяб что-то более менее удобно-читабельное на экране :)
bers-rus
08.10.2019 11:39ИМХО — одинаково htop,top,ps… это инструменты, помогающие решить кейс. Всех программ с параметрами не упомнишь.
А вот чем действительно всегда приходится пользоваться — это apropos и man.
Могу посоветовать почитать/посмотреть Дмитрия Кетофа.
seasadm
08.10.2019 10:04Устаревшие в прошлом веке и не развиваются? Тут уже говорили про net-tools (ifconfig, netstat)?
gecube
08.10.2019 11:41ifconfig — дно. Аргументирую. Этот исполняемый файл лежит в sbin. Следовательно, обычный юзер его не может запустить. А если нужна диагностика? Поэтому утилита ip — прям must.
Другой вопрос, что многие считают, что выхлоп ifconfig более читаемый. Но это спорно.cru5ader
08.10.2019 11:46+1Обычный пользователь может запустить ifconfig, указав полный путь /sbin/ifconfig
DreamingKitten
08.10.2019 19:28ifconfig — дно. Аргументирую. Этот исполняемый файл лежит в 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
gecube
09.10.2019 08:17georg.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. Ну, ок, может я переборщил с тем, что его обычный юзер никогда не может выполнить — но на определенных конфигурациях я сам от этого в осадок выпал.
JordanoBruno
08.10.2019 11:06htop для обычного юзера намного более user-friendly, чем тот же top. В принципе, учитывая, что top появился хрен знает когда, это нормально.
P.S. Админа тоже можно понять, это защитная реакция от лишнего хлама в OS. А то юзеры же сначала htop, потом еще что-то, а через год — в системе уже всевозможные утилиты и куча зависимостей.Nalivai
08.10.2019 13:47Сегодня он играет джаз, а завтра он играет джаз! Запретить! Только голый ассемблер, только хардкор. А то так, сегодня он С компилирует, а завтра у него уже микросервисы на JS.
MMik
08.10.2019 13:48Так же можно посмотреть на atop и glances. Оба умеют писать лог, и потом можно в replay просмотреть, что происходило с системой в определённое время. Glances — вообще монстр, умеет работать в клиент-серверном режиме, есть API, есть Web-UI, кроме инфы о системе умеет собирать информацию с некоторых приложений.
gecube
08.10.2019 13:57Ну, давайте тогда уж netdata рекламировать — а чо? красива!
https://github.com/netdata/netdata
glances поглядел. Не очень зашло.
ScreamPassion
08.10.2019 15:30+1Нажимаем X потом нажимаем A потом Z потом снова A и X и A и Z
Сразу вспомнились старые времена, когда на игровых приставках вводили коды, которые перед этим приходилось заучивать наизусть, и даже вспомнился Doom95 со своими iddqd и idkfa
Введи код, и получи бессмертие и все оружие TOPa ))
astenix
08.10.2019 18:06htop от top отличается удобными палочками в верхнем левом углу, которые показывают загрузку ядер и памяти :)
Реально удобно оценивать изменения нагрузки.
Crandel
08.10.2019 19:09+1astenix
08.10.2019 20:04А весёлый админ сделал бы своему пользователю алиас для запуска top через „htop”.
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
Vovanys
09.10.2019 15:45+1Не катит. top не запускается.
top: window entry #1 corrupt, please delete .toprc
Видимо в файле есть спец символы не копируемые…
therb1
09.10.2019 02:10Сначала подумал, блин пойду-ка я top подучу. А потом вспомнил, что я админ и люблю htop.
eumorozov
Думаю, что все знать невозможно. Слишком уж много как тривиальных вещей, так и сложных, в любой области. Есть только какие-то градации между полным незнанием и полным знанием.
И еще есть человеческое сопротивление новому (или необучаемость). Например, в моей практике есть случай, когда встретил человека, который гордится тем, что использует только Unix-way, работает только в командной строке. Я обрадовался, что появился единомышленник, но буквально сразу же заметил, что человек:
1) не знает и не использует даже основные ключи
grep
/fgrep
/egrep
2) не знает и не использует команды
find
,xargs
3) не знает даже самые простые команды редактора vim
4) категорически отвергает улучшенные альтернативы
grep
, такие какack-grep
,ripgrep
В итоге, он так и продолжает использовать командную строку в лучшем случае на 50%. Но всех не переучишь, я сначала пытался помочь, но моя помощь с гневом отвергалась, и я забил. При этом человек на 10 лет моложе меня, то есть, казалось бы, должен быть намного менее консервативен.
embden
А как всё это помнить? Я как-то решился, прошел курс для себя по awk и sed, пользовался активно xargs и find. Проходит какое-то время, снова хочу использовать эти утилиты, а вспомнить не получается. Снова лезу в справку, снова изучаю, снова пишу нужный скрипт, снова проходит несколько месяцев — всё забывается. Еще же у каждой утилиты свой язык регулярных выражений, свой язык подстановки параметров, свой способ экранирования символов. Еще ведь есть и разные версии утилит, синтаксис может незначительно отличаться. И вот не нужно мне каждый день awk использовать, даже каждый месяц использовать не нужно.
eumorozov
Невозможно все помнить. Думаю, изучение помогает просто потому что запоминаешь скорее факт: «этим инструментом можно решить такой класс задач», и когда требуется, сразу знаешь в какой ман смотреть, чтобы освежить знания.
А вот те инструменты, которыми пользуюсь многократно каждый день, стараюсь изучить в совершенстве и периодически освежать знания. Это:
Для того, чтобы знания закрепились в памяти, после изучения чего-то, относящегося к последней категории, закрепляю знания практическим применением. Например, увидел в лекции на YouTube какой-нибудь новый прием редактирования в vim: записываю его в блокнот, и после просмотра заставляю себя использовать его несколько раз. Если действительно удобно, то отложится в памяти.
А так — те же самые проблемы у всех. Тоже редко использую awk, и если требуется что-то за пределами
awk /rrr/ '{ print $1 }'
, приходится заново читать документацию.Да что там говорить, когда-то писал на Perl (не очень долго, но все же). Вчера надо было залезть в чужой исходник на Perl, чтобы понять кое-что о старом формате файлов, с которым придется работать. Почти ничего не смог в нем понять (честно говоря, за это и не любил Perl, на мой взгляд, это всегда был write-only язык).
a-tk
Вывод: интуитивность и однотипность использования указанных инструментов оставляет желать лучшего…
gecube
Ага. Чего только стоит вспомнить как вызвать справку в каждой из них.
и т.д.
DreamingKitten
BSD-стиль против SYSV-стиля. Разые утилиты пришли из разного юзерспейса и сохраняют такой формат своих опций исторически, а не для того, чтобы вам было запутаться проще :)
gecube
Несомненно, Вы правы. Эти отличия пошли исторически. Но может всё-таки стоит повернуться теперь лицом к пользователю? Я не хочу запоминать 100500 способов вызвать справку ) и добавление новых аргументов, ну, явно, не должно сломать совместимость с уже существующим поведением стандартных приложений.
axifive
А потом волей случая заносит в Windows и ты, с заметно большей долей раздражения начинаешь писать /h /d /F /I
gecube
По п.4 я могу с ним согласиться. По работе часто приходится работать с разными конфигурациями и правильным методом является использование минимального достаточного набора утилит. Ну, вот реально —
ack-grep
иripgrep
чем принципиально помогают? Тем более в условиях ограничений (pod kubernetes'а со стандартным alpine и без возможности установить утилиты или ИБшники ничего дополнительного не устанавливают — и в принципе — они правы)eumorozov
Я знаю, как заменить ripgrep посредством
find
,xargs
,grep
. Поэтому в ограниченных условиях могу использовать их в качестве замены. А вот когда занимаюсь разработкой в привычном окружении, ripgrep (ну или любой аналог) намного удобнее. Хотя бы потому что, можно, например, исключить файлы из.gitignore
или любые другие, команда для поиска по типу файла, гораздо короче аналогичной конструкции изfind
.В общем-то, наверное, если посчитать по истории, то возможно, использую grep почти так же часто, как и ripgrep. Но в разных ситуациях.
Crandel
Самое смешное, что зайдя в pod kubernetes на стандартном alpine и без возможности установить утилиты — вы увидите, что там ни одна из перечисленных команд не работает, даже "?", только этот набор команд
gecube
Спасибо, факт интересный, но вполне логичный, учитывая, что в alpine busybox и саой обрезанный облегченный набор стандартных утилит.
Я уж не говорю о том, что скорее всего top в pod'е будет абсолютно бесполезен и нужно смотреть во внешний мониторинг.