Rating@Mail.ru

Форум по операционной системе GNU/Linux и свободному программному обеспечению


Текущее время: 21 сен 2017, 11:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: редкие полезные команды
Непрочитанное сообщениеДобавлено: 15 июл 2015, 12:52 
Не в сети
Писатель
Аватара пользователя

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

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 15 июл 2015, 12:57 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Подсказали:
Код:
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 сервера (который конечно сам никогда не завершится).
Для проверки выбран запуск именно программы, запускаемой с разнообразными своими параметрами.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 15 июл 2015, 13:22 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Команда 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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 15 июл 2015, 13:39 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Управление и контроль аффинити маской процесса (битовой маской тех процессоров в 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).


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 02 авг 2015, 21:39 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Используемые 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.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 10 авг 2015, 13:26 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Блочные устройства в системе 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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 27 сен 2015, 17:07 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Вот такая свежая публикация: Консоль 21 века: mosh, tmux, fish
Цитата:
сегодня в 14:25

Изображение
Изображение
Изображение


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 01 окт 2015, 22:23 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Терминальный клиент 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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 21 окт 2015, 14:08 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Буферизация потока вывода, команда 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


Вернуться к началу
 Профиль Отправить личное сообщение  
 
 Заголовок сообщения: Re: редкие полезные команды
Непрочитанное сообщениеДобавлено: 26 май 2016, 17:20 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 10062
Откуда: Харьков
Более простые, но не часто вспоминаемые, команды описаны в другой теме: мелкие полезные команды.
Так что это получаются 2 половинки одной темы.


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.146s | 17 Queries | GZIP : On ]