редкие полезные команды

Инструменты для управления и диагностики системы

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

редкие полезные команды

Непрочитанное сообщение Olej » 15 июл 2015, 12:52

Общеизвестные команды, которые знают и используют все: cat, echo, ls, mount, ... и ещё сотня других.
Мы их используем ежедневно.

Но есть команды, которые используются редко, не из-за того что не нужны, а из-за их специфичности, использования только в определённых обстоятельствах (экзотика ;-) ).
Но когда они нужны, то вспомнить их и найти бывает очень сложно - их почти не упоминается в руководствах. А без них приходится чуть ли не наизнанку выворачиваться какими-то косвенными способам.
Но и по темам разным их рассеивать и памятку оставлять - бессмысленно: потеряются в потоке.

Вот здесь я намереваюсь создать себе такую памятку.
Возможно ещё кому-то пригодится.

P.S. Как и в большинстве тем, меня больше всего волнует судьба программистов разработчиков (не администраторов, не пользователей, не геймеров и т.д.). :lol: Поэтому и подборка команд будет, естественно, главным образом направлена на то, чтобы им облегчить жизнь. Но и другим, возможно, пригодится...

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 15 июл 2015, 12:57

Подсказали:

Код: Выделить всё

time timeout 1s ./a.out
Команда timeout.

Очень полезно при программировании и отладке, когда есть риск зависших программ, да ещё таких, которые отбивают или перехватывают реакцию на сигналы.

Код: Выделить всё

olej@nvidia ~/2015_WORK/in.WORK/FWall/disfw/cliserv $ time timeout 3s ./tcpserv -vv -p50000 
listening on the TCP port 50000

real	0m3.002s
user	0m0.000s
sys	0m0.000s
Это показан запуск моего тестового TCP сервера (который конечно сам никогда не завершится).
Для проверки выбран запуск именно программы, запускаемой с разнообразными своими параметрами.

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 15 июл 2015, 13:22

Команда chrt, которая позволяет либо а). изменить режим уже выполняющейся программы, либо б). запустить программу в режиме диспетчирования реального времени и определить приоритет реального времени, см.:

Код: Выделить всё

[Olej@modules ~]$ chrt --help

chrt - manipulate real-time attributes of a process

Set policy:
  chrt [options] [<policy>] <priority> [-p <pid> | <command> [<arg>...]]
...
О режиме реального времени в стандартном Linux, как я знаю из обсуждений, многие не знают вообще.
И не путать - это не имеет никакого отношения к действительно реальному времени, в Linux это понимается как: "делать так, как это делают в системах реального времени".

Это информация о приоритетах в системе вообще:

Код: Выделить всё

[Olej@modules ~]$ chrt --max
SCHED_OTHER min/max priority    : 0/0
SCHED_FIFO min/max priority     : 1/99
SCHED_RR min/max priority       : 1/99
SCHED_BATCH min/max priority    : 0/0
SCHED_IDLE min/max priority     : 0/0
Вот так запускается любая программа в режиме диспетчирования реального времени:

Код: Выделить всё

[Olej@modules ~]$ sudo chrt -r 50 bash
[sudo] password for Olej:
...
[root@modules Olej]# ps
  PID TTY          TIME CMD
 3068 pts/2    00:00:00 sudo
 3074 pts/2    00:00:00 bash
 3100 pts/2    00:00:00 ps
Естественно, что такое изменение режима и приоритета допустимо только для root (иначе развалить работу всей системы ничего не стоит ;-) ).

А вот так изменяется режим уже запущенной ранее программы и контролируется её режим:

Код: Выделить всё

[root@modules Olej]# chrt -p 3074
pid 3074's current scheduling policy: SCHED_RR
pid 3074's current scheduling priority: 50

[root@modules Olej]# chrt -r -p 5 3074

[root@modules Olej]# chrt -p 3074
pid 3074's current scheduling policy: SCHED_RR
pid 3074's current scheduling priority: 5

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 15 июл 2015, 13:39

Управление и контроль аффинити маской процесса (битовой маской тех процессоров в SMP, которые позволено задействовать процессу).
Ещё лет 5 назад эта команда мало кого интересовала, на сегодня она актуальна, потому как на каждом рабочем столе стоит компьютер с несколькими ядрами.
Команда taskset:

Код: Выделить всё

bash-4.2$ taskset
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]

Options:
 -a, --all-tasks         operate on all the tasks (threads) for a given pid
 -p, --pid               operate on existing given pid
 -c, --cpu-list          display and specify cpus in list format
 -h, --help              display this help
 -V, --version           output version information
...
Вот проверка аффинити маски процесса и как она выглядит (а заодно как быстро проверить сколько у вас процессоров):

Код: Выделить всё

[Olej@modules affinity]$ cat /proc/cpuinfo | grep processor | wc -l
4

[Olej@modules affinity]$ uname -a
Linux modules.localdomain 3.15.4-200.fc20.x86_64 #1 SMP Mon Jul 7 14:24:41 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

[Olej@modules affinity]$ ps
  PID TTY          TIME CMD
 3562 pts/10   00:00:00 bash
 5070 pts/10   00:00:00 ps
    
[Olej@modules affinity]$ taskset -p 3562
pid 3562's current affinity mask: f

Код: Выделить всё

-bash-4.2$ cat /proc/cpuinfo | grep processor | wc -l
2

bash-4.2$ uname -a
Linux notebook.localdomain 3.14.8-200.fc20.i686 #1 SMP Mon Jun 16 22:36:56 UTC 2014 i686 i686 i386 GNU/Linux
       
-bash-4.2$ ps
  PID TTY          TIME CMD
 2139 pts/1    00:00:00 bash
 2234 pts/1    00:00:00 ps

-bash-4.2$ taskset -p 2139
pid 2139's current affinity mask: 3
Как легко видеть, это получено на разных процессорах.

Вот как можно одну и ту же задачу (многопоточную ... что за задача не важно) не только на указанном числе процессоров (1, 2, 3, 4), но и выборочно указать на каких процессорах разрешить выполнение задачи:

Код: Выделить всё

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0-3 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 02 sec. 208 msec.

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 05 sec. 963 msec.

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 1 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 05 sec. 950 msec.

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 2 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 05 sec. 939 msec.

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 3 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 05 sec. 970 msec.

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0-1 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 02 sec. 967 msec.

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0,2 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 04 sec. 405 msec.

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0,1 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 02 sec. 987 msec.

olej@atom:~/2014-WORK/GlobalLogic/BOOK.Tools.org/examples.others.DRAFT/affinity$ taskset -c 0,3 ./tspeed -t4 -n60 -a100
threads number = 4, repeat slices in thread 15 times : full time was 02 sec. 956 msec.
Точно так же, как этой командой можно запускать новый процесс, также можно изменить разрешение на использование процессоров для уже ранее выполняющегося процесса по его PID (здесь похоже на chrt).

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 02 авг 2015, 21:39

Используемые TCP/IP порты, lsof:

Код: Выделить всё

olej@nvidia ~ $ lsof -i
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
cinnamon- 1726 olej   29u  IPv6  20667      0t0  TCP ip6-localhost:48844->ip6-localhost:ipp (CLOSE_WAIT)
skype     2376 olej   13u  IPv4  15403      0t0  UDP localhost:34721 
skype     2376 olej   43u  IPv4  16012      0t0  TCP nvidia:60853->db3msgr6012507.gateway.messenger.live.com:https (ESTABLISHED)
skype     2376 olej   44u  IPv4  14577      0t0  TCP *:27593 (LISTEN)
skype     2376 olej   84u  IPv4  14578      0t0  UDP *:27593 
skype     2376 olej   88u  IPv4  15433      0t0  TCP nvidia:37245->91.190.218.51:12350 (ESTABLISHED)
skype     2376 olej  103u  IPv4  20097      0t0  TCP nvidia:48277->65.55.223.47:40033 (ESTABLISHED)
thunderbi 2427 olej   34u  IPv4 105203      0t0  TCP nvidia:50246->mail2.ks.pochta.ru:imap2 (CLOSE_WAIT)
thunderbi 2427 olej   95u  IPv4 105244      0t0  TCP nvidia:50249->mail2.ks.pochta.ru:imap2 (CLOSE_WAIT)
thunderbi 2427 olej   96u  IPv4  15534      0t0  TCP nvidia:55032->ee-in-f16.1e100.net:imaps (ESTABLISHED)
thunderbi 2427 olej   97u  IPv4  15526      0t0  TCP nvidia:55838->imap.yandex.ru:imaps (ESTABLISHED)
firefox   2483 olej    3u  IPv4 104272      0t0  TCP nvidia:37209->mc.yandex.ru:https (ESTABLISHED)
firefox   2483 olej   44u  IPv4 104273      0t0  TCP nvidia:37210->mc.yandex.ru:https (ESTABLISHED)
firefox   2483 olej   48u  IPv4 105534      0t0  TCP nvidia:37211->mc.yandex.ru:https (ESTABLISHED)
firefox   2483 olej   70u  IPv4  25986      0t0  TCP nvidia:50591->185.45.5.50:https (ESTABLISHED)
Показать открытые (используемые) порты может и netstat, но здесь идёт привязка: какой процесс (имя) использует какой порт.

По поводу открытых портов есть вот такая заметка: Как посмотреть открытые порты в Linux.
Там есть для сравнения как это делается с помощью netstat, lsor и nmap.

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 10 авг 2015, 13:26

Блочные устройства в системе lsblk:

Код: Выделить всё

olej@nvidia ~ $ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 232,9G  0 disk 
├─sda1   8:1    0  68,4G  0 part /
├─sda2   8:2    0 160,1G  0 part /home
└─sda3   8:3    0   4,4G  0 part [SWAP]
sdb      8:16   0 149,1G  0 disk 
├─sdb1   8:17   0  48,9G  0 part /media/sdb1
├─sdb3   8:19   0     1K  0 part 
└─sdb5   8:21   0 100,2G  0 part /media/sdb5
sdc      8:32   1   1,9G  0 disk /media/olej/7cf3debf-91f4-4c16-89ed-850ff029c807
sdd      8:48   0 298,1G  0 disk 
├─sdd1   8:49   0  93,7G  0 part /media/olej/WINDOWS
└─sdd2   8:50   0 204,4G  0 part /media/olej/Linux
sr0     11:0    1  1024M  0 rom  
Хорошо в сочетании с:

Код: Выделить всё

olej@nvidia ~ $ df
Файл.система   1K-blocks Использовано Доступно Использовано% Cмонтировано в
/dev/sda1       70423984      9572212 57251388           15% /
none                   4            0        4            0% /sys/fs/cgroup
udev             2053772            4  2053768            1% /dev
tmpfs             413516         1324   412192            1% /run
none                5120            0     5120            0% /run/lock
none             2067564          760  2066804            1% /run/shm
none              102400           16   102384            1% /run/user
/dev/sda2      165142816    129152396 27578516           83% /home
/dev/sdb1       51215188     42521976  8693212           84% /media/sdb1
/dev/sdb5      105073660     16813100 88260560           17% /media/sdb5

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 27 сен 2015, 17:07

Вот такая свежая публикация: Консоль 21 века: mosh, tmux, fish
сегодня в 14:25
Изображение
Изображение
Изображение

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 01 окт 2015, 22:23

Терминальный клиент Net Manager - nmcli:

Код: Выделить всё

olej@nvidia ~ $ nmcli connection
ИМЯ                       UUID                                   ТИП               ДЕЙСТВ. МЕТКА ВРЕМЕНИ             
ADSL                      ea7b5d1a-96be-4d13-b7ba-d7284e63eb9d   802-3-ethernet    Чт. 01 окт. 2015 22:14:32         
PON                       18633525-300c-4822-b3ac-b8b4674b8b66   802-3-ethernet    Чт. 01 окт. 2015 02:31:08         
Это те активные соединения, которые мы видим в аплете NM.

Код: Выделить всё

olej@nvidia ~ $ nmcli connection list 18633525-300c-4822-b3ac-b8b4674b8b66
Неизвестный параметр: 18633525-300c-4822-b3ac-b8b4674b8b66
Ошибка: указан недопустимый параметр.
olej@nvidia ~ $ nmcli connection list uuid 18633525-300c-4822-b3ac-b8b4674b8b66
connection.id:                          PON
connection.uuid:                        18633525-300c-4822-b3ac-b8b4674b8b66
connection.type:                        802-3-ethernet
connection.autoconnect:                 да
connection.timestamp:                   1443655868
connection.read-only:                   нет
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.secondaries:                 
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  full
802-3-ethernet.auto-negotiate:          да
802-3-ethernet.mac-address:             F4:6D:04:60:78:6F
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     автоматически
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
ipv4.method:                            auto
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         
ipv4.routes:                            
ipv4.ignore-auto-routes:                нет
ipv4.ignore-auto-dns:                   нет
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                да
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     нет
ipv4.may-fail:                          нет
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.routes:                            
ipv6.ignore-auto-routes:                нет
ipv6.ignore-auto-dns:                   нет
ipv6.never-default:                     нет
ipv6.may-fail:                          да
ipv6.ip6-privacy:                       2 (включено, предпочитается временный IP-адрес)
ipv6.dhcp-hostname:                     --

Код: Выделить всё

olej@nvidia ~ $ nmcli connection list id PON
connection.id:                          PON
connection.uuid:                        18633525-300c-4822-b3ac-b8b4674b8b66
connection.type:                        802-3-ethernet
connection.autoconnect:                 да
connection.timestamp:                   1443655868
connection.read-only:                   нет
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.secondaries:                 
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  full
802-3-ethernet.auto-negotiate:          да
802-3-ethernet.mac-address:             F4:6D:04:60:78:6F
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     автоматически
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
ipv4.method:                            auto
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         
ipv4.routes:                            
ipv4.ignore-auto-routes:                нет
ipv4.ignore-auto-dns:                   нет
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                да
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     нет
ipv4.may-fail:                          нет
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.routes:                            
ipv6.ignore-auto-routes:                нет
ipv6.ignore-auto-dns:                   нет
ipv6.never-default:                     нет
ipv6.may-fail:                          да
ipv6.ip6-privacy:                       2 (включено, предпочитается временный IP-адрес)
ipv6.dhcp-hostname:                     --
Ним же можно изменить параметры (те что подлежат изменению) ... утверждается:

Код: Выделить всё

# nmcli connection modify PON 802-3-ethernet.cloned-mac-address 00:11:22:33:44:66
После чего нужно перезапустить интерфейс:

Код: Выделить всё

nmcli device disconnect PON
nmcli device connect PON
P.S. Внимание! Утилита изменяется, у неё версия 0.9.Х.Х ... синтаксис может слегка меняться: вместо list - show и т.д.
Но вам поможет ;-) :

Код: Выделить всё

$ nmcli --help

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 21 окт 2015, 14:08

Буферизация потока вывода, команда buffer.
В большинстве дистрибутивов её нет по умолчанию и нужно установить пакетным менеджером:

Код: Выделить всё

olej@nvidia ~/2015_WORK/own.BOOK/Habrahabr/4write $ sudo apt-get install buffer
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
НОВЫЕ пакеты, которые будут установлены:
  buffer
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 60 пакетов не обновлено.
Необходимо скачать 15,5 kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 71,7 kB.
Получено:1 http://ftp.tu-chemnitz.de/pub/linux/ubuntu/ trusty/universe buffer i386 1.19-11 [15,5 kB]
Получено 15,5 kБ за 0с (45,2 kБ/c)
Выбор ранее не выбранного пакета buffer.
(Чтение базы данных … на данный момент установлено 237199 файлов и каталогов.)
Preparing to unpack …/buffer_1.19-11_i386.deb ...
Unpacking buffer (1.19-11) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Настраивается пакет buffer (1.19-11) …
Здесь её man-страница.
(хотя после установки такая же страница появится у вас локально)

Команда получает поток стандартного ввода (sysin), буферизует его (с указанным размером буфера), и отправляет на стандартный вывод (sysout), фильтр.
Естественно, это всё можно перенаправлять между файлами:

Код: Выделить всё

olej@nvidia ~/2015_WORK/own.BOOK/Habrahabr/4write $ time cat 4write_01.odt | buffer -s 1k -o xxx
real	0m0.004s
user	0m0.000s
sys	0m0.000s

Аватара пользователя
Olej
Писатель
Сообщения: 17564
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: редкие полезные команды

Непрочитанное сообщение Olej » 26 май 2016, 17:20

Более простые, но не часто вспоминаемые, команды описаны в другой теме: мелкие полезные команды.
Так что это получаются 2 половинки одной темы.

Ответить

Вернуться в «Системные утилиты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость