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

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

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

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

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

Непрочитанное сообщение Olej » 03 июн 2016, 12:56

Переключение альтернативных версий ПО - alternatives:

Очень могучий инструмент администрирования ПО Linux!
По команде очень мало описаний и обсуждений (т.е. фактически просто нет), кроме man и --help ...
Есть только частные примеры переключения версий Java между Open JDK & Sun JDK.

В Debian (и других DEB?) эта утилита называется update-alternatives.

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

[olej@dell tasks]$ alternatives --help
alternatives, версия 1.7,  (C) 2001 Red Hat, Inc.
Может свободно распространяться в рамках GNU Public License.

формат: alternatives --install <ссылка> <имя> <путь> <приоритет>
                    [--initscript <служба>]
                    [--family <family>]
                    [--slave <ссылка> <имя> <путь>]*
       alternatives --remove <имя> <путь>
       alternatives --auto <имя>
       alternatives --config <имя>
       alternatives --display <имя>
       alternatives --set <имя> <путь>
       alternatives --list

общие параметры: --verbose --test --help --usage --version
                --altdir <каталог> --admindir <каталог>

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

[olej@dell tasks]$ man alternatives
UPDATE-ALTERNATIVES(8)                                     System Manager's Manual                                    UPDATE-ALTERNATIVES(8)

NAME
       alternatives - maintain symbolic links determining default commands

SYNOPSIS
       alternatives [options] --install link name path priority [--slave link name path]...  [--initscript service] [--family name]

       alternatives [options] --remove name path

       alternatives [options] --set name path

       alternatives [options] --auto name

       alternatives [options] --display name

       alternatives [options] --config name

       alternatives [options] --list name

DESCRIPTION
       alternatives  creates,  removes,  maintains and displays information about the symbolic links comprising the alternatives system. The
       alternatives system is a reimplementation of the Debian alternatives system. It was rewritten primarily to remove the  dependence  on
       perl;  it  is intended to be a drop in replacement for Debian's update-dependencies script. This man page is a slightly modified ver‐
       sion of the man page from the Debian project.
...
Интерактивная система просмотра системных руководств (man-ов)

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

NAME
alternatives - maintain symbolic links determining default commands
... 

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

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

Непрочитанное сообщение Olej » 03 июн 2016, 13:04

Olej писал(а): Есть только частные примеры переключения версий Java между Open JDK & Sun JDK.
Вот как добавляется новая альтернатива:

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

# /usr/sbin/alternatives --install /usr/bin/java java /opt/jre1.6.0_06/bin/java 3
Где:
- /usr/bin/java - новое имя запуска программы - ссылка на /etc/alternatives/java
- java - имя ссылки в /etc/alternatives/java - ссылка не реальный исполнимый файл java
- /opt/jre1.6.0_06/bin/java - исполнимый файл из Sun JDK
- 3 - приоритет альтернативы

Вот как переключается Go с пакета GCC (пакет dcc-go) на пакет GoLang (пакет golang)... этого достаточно для понимания работы alternatives.

До:

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

[olej@dell tasks]$ alternatives --list
...
go   auto   /usr/bin/go.gcc

[olej@dell tasks]$ alternatives --display go
go - статус "авто".
 ссылка сейчас указывает на /usr/bin/go.gcc
/usr/lib/golang/bin/go - priority 90
 slave gofmt: /usr/lib/golang/bin/gofmt
/usr/bin/go.gcc - priority 92
 slave gofmt: /usr/bin/gofmt.gcc
Текущая `лучшая' версия - /usr/bin/go.gcc.
Меняем версию Go по умолчанию, только от root:

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

[olej@dell tasks]$ sudo alternatives --config go
[sudo] пароль для olej:

Имеется 2 программ, которые предоставляют 'go'.

  Выбор    Команда
-----------------------------------------------
   1           /usr/lib/golang/bin/go
*+ 2           /usr/bin/go.gcc

Enter - сохранить текущий выбор[+], или укажите номер: 1

[olej@dell tasks]$ alternatives --display go
go - статус "вручную"
 ссылка сейчас указывает на /usr/lib/golang/bin/go
/usr/lib/golang/bin/go - priority 90
 slave gofmt: /usr/lib/golang/bin/gofmt
/usr/bin/go.gcc - priority 92
 slave gofmt: /usr/bin/gofmt.gcc
Текущая `лучшая' версия - /usr/bin/go.gcc.

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

[olej@dell 06]$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/olej/2016_WORK/GoBook"
GORACE=""
GOROOT="/usr/lib/golang"
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT=""
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

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

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

Непрочитанное сообщение Olej » 06 июн 2016, 00:23

Соответствие между USB-концентраторами и подключенными на них устройствами:

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

[olej@dell 1-blockchain]$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
        |__ Port 1: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 7: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
        |__ Port 7: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
        |__ Port 7: Dev 3, If 2, Class=Vendor Specific Class, Driver=, 12M
        |__ Port 7: Dev 3, If 3, Class=Application Specific Interface, Driver=, 12M
        |__ Port 8: Dev 4, If 0, Class=Application Specific Interface, Driver=, 12M
        |__ Port 8: Dev 4, If 1, Class=Chip/SmartCard, Driver=, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M

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

olej@nvidia ~ $ lsusb -t
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 2: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/8p, 480M
    |__ Port 3: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 7: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M

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

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

Непрочитанное сообщение Olej » 16 окт 2016, 22:50

Профилировщик systemd - systemd-analyze.
В частности, время загрузки системы:

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

[olej@dell ~]$ systemd-analyze
Startup finished in 1.595s (kernel) + 5.124s (initrd) + 31.045s (userspace) = 37.765s
Все остальные детали см.:

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

[olej@dell ~]$ systemd-analyze --help
systemd-analyze [OPTIONS...] {COMMAND} ...

Profile systemd, show unit dependencies, check unit files.

  -h --help               Show this help
     --version            Show package version
     --no-pager           Do not pipe output into a pager
     --system             Operate on system systemd instance
     --user               Operate on user systemd instance
  -H --host=[USER@]HOST   Operate on remote host
  -M --machine=CONTAINER  Operate on local container
     --order              Show only order in the graph
     --require            Show only requirement in the graph
     --from-pattern=GLOB  Show only origins in the graph
     --to-pattern=GLOB    Show only destinations in the graph
     --fuzz=SECONDS       Also print also services which finished SECONDS
                          earlier than the latest in the branch
     --man[=BOOL]         Do [not] check for existence of man pages

Commands:
  time                    Print time spent in the kernel
  blame                   Print list of running units ordered by time to init
  critical-chain          Print a tree of the time critical chain of units
  plot                    Output SVG graphic showing service initialization
  dot                     Output dependency graph in dot(1) format
  set-log-level LEVEL     Set logging threshold for systemd
  dump                    Output state serialization of service manager
  verify FILE...          Check unit files for correctness

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

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

Непрочитанное сообщение Olej » 14 май 2018, 16:42

В смысле безопасности системы, полезная и редко пользуемая команда, которая устанавливается (на сегодня) из стандартного репозитория практически любого дистрибутива Linux (хотя это и отдельный независимый проект): chkrootkit - проверка системы на rootkit-ы и всякую другую дрянь (в теме по ссылке всё подробно рассказано).

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

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

Непрочитанное сообщение Olej » 20 фев 2019, 12:07

Olej писал(а):

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

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

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

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

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL$ timeout 5s ls
common.py  HISTORY  linaro  linaro.1  linaro.2	linaro.3  MLfaces  Movie1.mkv  Movie2.mkv  Movie3.mkv  Nfaces

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL$ echo $?
0
А это - ping на несуществующий IP:

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

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL$ timeout 3s ping 10.0.30.68 > /dev/null

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL$ echo $?
124

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

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

Непрочитанное сообщение Olej » 13 мар 2019, 13:58

Как ограничить загрузку процессора в Ubuntu Linux с помощью CPULimit.

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

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc/time.report.01$ aptitude search cpulimit
p   cpulimit                                                        - ограничение использования центрального процессора                        

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc/time.report.01$ sudo apt install cpulimit
[sudo] пароль для olej: 
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие НОВЫЕ пакеты будут установлены:
  cpulimit
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 6 пакетов не обновлено.
Необходимо скачать 20,9 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 47,1 kB.
Пол:1 http://deb.debian.org/debian buster/main amd64 cpulimit amd64 2.5-1 [20,9 kB]
Получено 20,9 kB за 0с (66,1 kB/s)
Выбор ранее не выбранного пакета cpulimit.
(Чтение базы данных … на данный момент установлено 379869 файлов и каталогов.)
Подготовка к распаковке …/cpulimit_2.5-1_amd64.deb …
Распаковывается cpulimit (2.5-1) …
Настраивается пакет cpulimit (2.5-1) …
Обрабатываются триггеры для man-db (2.8.5-2) …

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc/time.report.01$ cpulimit --help
CPUlimit version 2.4
Usage: cpulimit TARGET [OPTIONS...] [-- PROGRAM]
   TARGET must be exactly one of these:
      -p, --pid=N        pid of the process
      -e, --exe=FILE     name of the executable program file
                         The -e option only works when
                         cpulimit is run with admin rights.
      -P, --path=PATH    absolute path name of the
                         executable program file
   OPTIONS
      -b  --background   run in background
      -f  --foreground   launch target process in foreground and wait for it to exit
      -c  --cpu=N        override the detection of CPUs on the machine.
      -l, --limit=N      percentage of cpu allowed from 1 up.
                         Usually 1 - 200, but can be higher
                         on multi-core CPUs (mandatory)
      -m, --monitor-forks  Watch children/forks of the target process
      -q, --quiet        run in quiet mode (only print errors).
      -k, --kill         kill processes going over their limit
                         instead of just throttling them.
      -r, --restore      Restore processes after they have
                         been killed. Works with the -k flag.
      -s, --signal=SIG   Send this signal to the watched process when cpulimit exits.
                         Signal should be specificed as a number or 
                         SIGTERM, SIGCONT, SIGSTOP, etc. SIGCONT is the default.
      -v, --verbose      show control statistics
      -z, --lazy         exit if there is no suitable target process,
                         or if it dies
          --             This is the final CPUlimit option. All following
                         options are for another program we will launch.
      -h, --help         display this help and exit

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

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

Непрочитанное сообщение Olej » 13 мар 2019, 14:20

Тестовая задача:

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

olej@ACER:~/2019_WORK/own.WORK/fb$ dd if=/dev/zero of=/dev/null &
[1] 29976

olej@ACER:/usr/share/consolefonts$ top -p 29976
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s): 30,8 us, 36,2 sy,  0,0 ni, 32,8 id,  0,2 wa,  0,0 hi,  0,0 si,  0,0 st
MiB Mem :  11888,2 total,    470,8 free,   8401,2 used,   3016,2 buff/cache
MiB Swap:  12165,0 total,  10713,8 free,   1451,2 used.   1981,1 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                   
29976 olej      20   0    5264    752    688 R  99,7   0,0   0:34.07 dd                                                                        
Загрузка 100% - 1-го из процессоров!
Ограничиваю:

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

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc/time.report.01$ cpulimit -l20 -p29976
Process 29976 detected
...
Обращает на себя внимание (для меня это неожиданность), что контролирующий процесс не прекращается (не завершается)!
Проверка:

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

olej@ACER:/usr/share/consolefonts$ top -p 29976
Tasks:   1 total,   0 running,   0 sleeping,   1 stopped,   0 zombie
%Cpu(s): 25,3 us, 13,7 sy,  0,0 ni, 60,7 id,  0,2 wa,  0,0 hi,  0,2 si,  0,0 st
MiB Mem :  11888,2 total,    466,0 free,   8404,0 used,   3018,3 buff/cache
MiB Swap:  12165,0 total,  10713,8 free,   1451,2 used.   1976,8 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                   
29976 olej      20   0    5264    752    688 T  22,7   0,0   3:07.17 dd                                                                        
Всё! 20% загрузки...
Останавливаю контролирующий процесс:

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

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc/time.report.01$ cpulimit -l20 -p29976
Process 29976 detected
^C Exiting...
Проверяю:

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

olej@ACER:/usr/share/consolefonts$ top -p 29976
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s): 39,9 us, 35,8 sy,  0,0 ni, 24,3 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
MiB Mem :  11888,2 total,    458,5 free,   8411,8 used,   3018,0 buff/cache
MiB Swap:  12165,0 total,  10713,8 free,   1451,2 used.   1969,4 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                   
29976 olej      20   0    5264    752    688 R  98,0   0,0   4:02.64 dd                                                                        
Снова процесс отпущен на все 100%!

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

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

Непрочитанное сообщение Olej » 03 ноя 2019, 21:36

Из новых (с ядра 2.6.38, не POSIX) системный вызов fallocate(2) и команда fallocate(1).
Создаю файл:

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

olej@ACER:~/2019_WORK/HISTORY/11/03$ dd if=/dev/zero of=./f1 bs=1M count=100
100+0 записей получено
100+0 записей отправлено
104857600 байт (105 MB, 100 MiB) скопирован, 0,350649 s, 299 MB/s
 
olej@ACER:~/2019_WORK/HISTORY/11/03$ ls -l f1
-rw-r--r-- 1 olej olej 104857600 ноя  3 20:26 f1

olej@ACER:~/2019_WORK/HISTORY/11/03$ du -hs f1
101M	f1

olej@ACER:~/2019_WORK/HISTORY/11/03$ du -s f1
102404	f1
Всё путём - создан файл размером 100Mb (1Mb x 100).
Теперь делаю (размещаю) "дыру" в файле:

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

olej@ACER:~/2019_WORK/HISTORY/11/03$ fallocate -p -o 1M -l 98M ./f1

olej@ACER:~/2019_WORK/HISTORY/11/03$ ls -l f1
-rw-r--r-- 1 olej olej 104857600 ноя  3 20:27 f1

olej@ACER:~/2019_WORK/HISTORY/11/03$ du -hs f1
2,1M	f1
Оп-па! :lol:
Файл, имеющий размер в файловой системе Linux 100Mb, занимает на дисковом пространстве размер 2Mb.

Про системный вызов fallocate здесь: управление пространством файла

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

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

Непрочитанное сообщение Olej » 06 фев 2022, 22:34

Искал (перебирал) утилиты для диагностики загрузки по процессорам, более информационного чем uptime, и дающего информацию по процессорам.
Вот самое подходящее - mpstat:

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

21:21:31     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
21:21:31     all   52,98    0,00    0,48    0,01    0,00    0,00    0,00    0,00    0,00   46,53

olej@ESPRIMO:~$ mpstat -P ALL
Linux 5.4.0-97-generic (ESPRIMO) 	06.02.2022 	_x86_64_	(8 CPU)

21:18:52     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
21:18:52     all   52,97    0,00    0,48    0,01    0,00    0,00    0,00    0,00    0,00   46,53
21:18:52       0   99,73    0,00    0,11    0,00    0,00    0,00    0,00    0,00    0,00    0,15
21:18:52       1   99,74    0,00    0,11    0,00    0,00    0,00    0,00    0,00    0,00    0,15
21:18:52       2   99,73    0,00    0,12    0,00    0,00    0,00    0,00    0,00    0,00    0,15
21:18:52       3   99,73    0,00    0,11    0,00    0,00    0,00    0,00    0,00    0,00    0,16
21:18:52       4    6,14    0,00    0,71    0,01    0,00    0,00    0,00    0,00    0,00   93,13
21:18:52       5    5,88    0,00    1,25    0,01    0,00    0,00    0,00    0,00    0,00   92,86
21:18:52       6    5,96    0,00    0,73    0,04    0,00    0,00    0,00    0,00    0,00   93,28
21:18:52       7    6,08    0,00    0,72    0,01    0,00    0,01    0,00    0,00    0,00   93,18
olej@ESPRIMO:~$ 
olej@ESPRIMO:~$ mpstat 
Linux 5.4.0-97-generic (ESPRIMO) 	06.02.2022 	_x86_64_	(8 CPU)
Или в многопроцессорной системе:

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

olej@R420:~$ mpstat -P 0-1
Linux 5.4.0-97-generic (R420) 	06.02.2022 	_x86_64_	(40 CPU)

21:30:45     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
21:30:45       0   99,41    0,00    0,05    0,00    0,00    0,00    0,00    0,00    0,00    0,53
21:30:45       1   99,41    0,00    0,05    0,00    0,00    0,00    0,00    0,00    0,00    0,54

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

olej@R420:~$ mpstat -P 0,4,8
Linux 5.4.0-97-generic (R420) 	06.02.2022 	_x86_64_	(40 CPU)

21:31:09     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
21:31:09       0   99,41    0,00    0,05    0,00    0,00    0,00    0,00    0,00    0,00    0,53
21:31:09       4   99,40    0,00    0,06    0,00    0,00    0,00    0,00    0,00    0,00    0,55
21:31:09       8   99,39    0,00    0,06    0,00    0,00    0,00    0,00    0,00    0,00    0,55

Ответить

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

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

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