Comand Line Interface
Полезные ссылки
Обзор практически всех *top утилит под linux
Информация о системе
Информация об ОС
cat /etc/os-release # PRETTY_NAME="Ubuntu 23.04" # NAME="Ubuntu" # VERSION_ID="23.04" # VERSION="23.04 (Lunar Lobster)" # VERSION_CODENAME=lunar # ... # --- краткое наименование ОС cat /etc/issue Ubuntu 23.04 \n \l # --- отображение информации о системе (ОС, железо) sudo apt install screenfetch screenfetch ./+o+- zoid@npc yyyyy- -yyyyyy+ OS: Ubuntu 23.04 lunar ://+//////-yyyyyyo Kernel: x86_64 Linux 6.2.0-25-generic .++ .:/++++++/-.+sss/` Uptime: 5h 29m .:++o: /++++++++/:--:/- Packages: 2959 o:+o+:++.`..```.-/oo+++++/ Shell: bash .:+o:+o/. `+sssoo+/ Resolution: 4480x1440 .++/+:+oo+o:` /sssooo. DE: GNOME 44.0 /+++//+:`oo+o /::--:. WM: Mutter \+/+o+++`o++o ++////. WM Theme: Adwaita .++.o+++oo+:` /dddhhh. GTK Theme: Yaru [GTK2/3] .+.o+oo:. `oddhhhh+ Icon Theme: Yaru \+.++o+o``-````.:ohdhhhhh+ Font: Ubuntu 11 `:o+++ `ohhhhhhhhyo++os: Disk: 188G / 228G (88%) .o:`.syhhhhhhh/.oo++o` CPU: AMD Ryzen 7 2700X Eight-Core @ 16x 3,7GHz /osyyyyyyo++ooo+++/ GPU: NVIDIA GeForce GTX 1660 ````` +oo+++o\: RAM: 7075MiB / 15927MiB `oo++.
CPU
# --- все процессоры, частоты, флаги и многое другое cat /proc/cpuinfo lscpu # --- средняя загрузка процессора за последние 1, 5, и 15 минут cat /proc/loadavg # --- при нажатии на клавишу C все процессы будут отсортированы по использованию CPU top
RAM
# --- количество RAM и swap, а так же сколько и чем расходуется cat /proc/meminfo # --- полный объем, использованный объем и объем свободной памяти в Mb free -mh # --- при нажатии на клавишу M все процессы будут отсортированы по использованию оперативной памяти top
Graphics
# --- информация OpenGL, Xserver и вашей видеокарте glxinfo # --- проверка поддержки "direct 3D rendering" glxinfo | grep direct # --- производитель видеокарты glxinfo | grep vendor # --- модель видеокарты lspci | grep VGA # --- простой 3D тест, печатает fps в терминале glxgears # --- поддерживаемые монитором разрешения xrandr
Audio
# --- аудио-контроллеры lspci | grep Audio # --- расширенная информация об аудио-контроллере aplay --list-devices
Misc
# --- шины USB и подключённые устройства lsusb # --- мониторинг за изменениями в оборудовании lshal -m # --- все PCI-устройства lspci # --- детальная информация по всему оборудованию (требуется пакет hwinfo) hwinfo --short # --- время, прошедшее с момента последней перезагрузки, пользователи и средняя загрузка uptime
Управление файлами
ls - отображает список файлов и каталогов в текущей директории. cd - изменяет текущую директорию. pwd - выводит полный путь текущей директории. mkdir - создает новый каталог. rm - удаляет файлы или каталоги. cp - копирует файлы и каталоги. mv - перемещает или переименовывает файлы и каталоги. touch - создает новый файл или обновляет время доступа и модификации существующего файла. cat - выводит содержимое файла. less - позволяет просматривать содержимое файла постранично. head - выводит первые строки файла. tail - выводит последние строки файла. grep - ищет заданный текст в файлах или выводе команд. find - находит файлы и каталоги на основе различных критериев. chmod - изменяет права доступа к файлам и каталогам. chown - изменяет владельца файлов и каталогов. chgrp - изменяет группу файлов и каталогов. tar - создает или распаковывает архивы. zip - создает ZIP-архивы. unzip - извлекает файлы из ZIP-архивов.
Поиск файлов
Поиск
# --- найти конкретный файл find / -name 'postgresql.conf' # --- найти все файлы по шаблону в текущей директории find . -type f -name '*.rb' # --- не учитывать регистр при поиске по имени: find . -iname "test*" # --- поиск файлов по имени только в текущей папке: find . -maxdepth 1 -name "*.php" # --- найти файлы в директории, которые не соответствуют шаблону: find /some/path -not -name "test*" # --- найти все jar-файлы и исключить результаты, которые содержат поддиректорию tmp find . -not -regex '.*/tmp/.*' -name '*.jar' # --- найти все файлы с раширением .html или .php: find /some/path -name "*.html" -o -name "*.php" # --- найти все файлы, принадлежащие пользователю evgeniy: find /some/path -user evgeniy # --- найти все файлы размером 50 мегабайт: find /some/path -type f -size 50M # --- найти все файлы от пятидесяти до ста мегабайт: find /some/path -type f -size +50M -size -100M
Поиск и замена
# --- замена всех вхождений в файлах директории find . -name '*.php' -exec sed -i -e 's/www.fubar.com/www.fubar.ftw.com/g' {} \;
Поиск и удаление
# --- поиск файлов и удаление найденных find / -name .DS_Store -exec rm {} + # --- удалить все log-файлы больше 100 мегабайт: find /home/evgeniy/log -type f -name "*.log" -size +100M -exec rm -f {} \; find /home/evgeniy/log -type f -name "*.log" -size +100M -exec rm -f {} +
Поиск и что-то еще...
# --- найти и посчитать количество найденных файлов find . -type f -name '*.rb' | wc -l # --- вывести 10 первых строк каждого найденого файла записать в sources.txt find . -type f -name '*.rb' -print -exec head {} \; > sources.txt # --- найти файлы по wildcard с отображением размера find -name '*abcd*' -print0 | xargs -0 ls -l # --- поиск заданной строки в файлах, найденных через find (в большом количестве файлов) # (1) ищем файлы по имени (2) ищем в найденных те, которые содержат заданный контент find ../xml/223/77/ -type f -name 'purchaseNotice_*' | xargs grep 'jointPurchase>true' | head # --- (1) ищем файлы по имени (2) ищем в найденных те, которые НЕ содержат заданный контент find ../xml/223/77/ -type f -name 'purchaseNotice_*' | xargs grep -L '<jointLotData>' | head # --- поиск файла внутри архивов в заданной директории for f in *.zip; do echo "$f: "; unzip -l $f | grep <filename>; done # --- поиск заданной строки внутри архива zgrep 'article15FeaturesInfo' notifications/*
Архивы
# === zip # --- создание архива zip -r output_file.zip file1 folder1 # --- список файлов в архиве unzip -l file.zip # --- распаковать в текущую директорию unzip file.zip # === tar # --- создать .tar tar -cvf file.tar rel/path # --- распаковать .tar tar -xvf archive.tar # --- распаковать .tar в заданную директорию tar -xf archive.tar -C /target/directory # === tar.gz # --- создаем архив tar -czvf file.tar.gz rel/path # --- распаковываем архив tar -xvf file.tar.gz [-C /abs/path] # === tar.bz2 # --- создать архив .tar.bz2 tar -cjvf file.tar.bz2 /full/path # === 7zip sudo apt-get install p7zip-rar p7zip-full
Управление пользователями
adduser - создает нового пользователя. usermod - изменяет параметры существующего пользователя. deluser - удаляет пользователя. passwd - изменяет пароль пользователя. su - переключается на другого пользователя или становится суперпользователем. sudo - выполняет команду с привилегиями суперпользователя. finger - отображает информацию о пользователе. who - отображает информацию о вошедших пользователях. id - отображает информацию о текущем пользователе или указанном пользователе. groups - отображает группы, к которым принадлежит пользователь. useradd - создает нового пользователя (альтернатива для adduser). userdel - удаляет пользователя (альтернатива для deluser). usermod - изменяет параметры существующего пользователя (альтернатива для usermod). passwd - изменяет пароль пользователя (альтернатива для passwd). last - отображает историю входа пользователей. w - отображает текущих пользователей и их активность. logout - выходит из текущей сессии пользователя.
Управление приложениями
pt-get install - устанавливает новое приложение или пакет. apt-get remove - удаляет установленное приложение или пакет. apt-get update - обновляет список доступных обновлений пакетов. apt-get upgrade - обновляет установленные пакеты до последних версий. apt-cache search - ищет пакеты по ключевому слову. dpkg -i - устанавливает .deb пакет. dpkg -r - удаляет .deb пакет. dpkg -l - отображает список установленных пакетов. snap install - устанавливает приложение из snap-пакета. snap remove - удаляет установленное snap-приложение. snap list - отображает список установленных snap-приложений. systemctl start - запускает системную службу. systemctl stop - останавливает системную службу. systemctl restart - перезапускает системную службу. systemctl enable - включает автозапуск системной службы при загрузке системы. systemctl disable - отключает автозапуск системной службы при загрузке системы. service <service> start - запускает службу. service <service> stop - останавливает службу. service <service> restart - перезапускает службу. service <service> status - отображает статус службы.
Управление системой
shutdown - позволяет выключить или перезагрузить систему. Например, shutdown -h now выключает систему немедленно. reboot - перезагружает систему. Просто запустите reboot в терминале. halt - выключает систему. Просто запустите halt в терминале. poweroff - выключает систему. Просто запустите poweroff в терминале. systemctl - команда для управления системными сервисами. Например, systemctl start apache2 запускает службу Apache. service - альтернативный способ управления системными службами. Например, service nginx restart перезапускает службу Nginx. ifconfig - отображает и настраивает сетевые интерфейсы системы, включая IP-адреса, маски и шлюзы. ip - альтернативный способ управления сетевыми интерфейсами и конфигурацией сети. netstat - отображает сетевые соединения, открытые порты и другую связанную информацию. ping - отправляет ICMP-пакеты на указанный IP-адрес для проверки доступности хоста в сети. traceroute - отображает путь, по которому проходят пакеты до указанного IP-адреса в сети. ssh - устанавливает безопасное соединение с удаленным сервером по протоколу SSH. scp - копирует файлы между удаленным и локальным серверами по протоколу SSH. rsync - выполняет синхронизацию и копирование файлов между удаленными и локальными серверами. crontab - позволяет управлять cron-задачами, которые выполняются автоматически по заданному расписанию. at - позволяет запускать команды или скрипты в определенное время в будущем. shutdown - планирует выключение или перезагрузку системы по расписанию. nohup - запускает команду с игнорированием сигналов завершения процесса. Это полезно для выполнения задач в фоновом режиме. history - отображает историю команд, введенных пользователем в терминале.
Управление процессами
top - отображает список процессов и их характеристики, такие как использование CPU и памяти. ps - выводит список текущих запущенных процессов с их идентификаторами (PID). kill - отправляет сигнал процессу для его завершения. Например, kill PID завершит процесс с указанным идентификатором. pkill - отправляет сигнал процессам по их имени или другим атрибутам. Например, pkill firefox завершит все процессы Firefox. htop - интерактивное утилита мониторинга процессов, которая позволяет видеть дополнительную информацию и управлять процессами. free - отображает общую, использованную и свободную память системы, включая физическую и подкачку. vmstat - предоставляет информацию о использовании памяти, процессоре, вводе-выводе, планировании и других системных ресурсах. killall - завершает все процессы с указанным именем. Например, killall firefox завершит все процессы Firefox. renice - изменяет приоритет процесса в реальном времени. Например, renice -n -5 -p PID увеличит приоритет процесса с указанным идентификатором. nice - запускает процесс с более низким приоритетом. Например, nice -n 10 command запустит команду с очень низким приоритетом. pgrep - выводит идентификаторы процессов, соответствующие указанной строке. Например, pgrep firefox выведет идентификаторы процессов Firefox. strace - отслеживает системные вызовы и сигналы, связываемые с процессом. Можно использовать для отладки или анализа процессов. lsof - выводит открытые файлы и сетевые соединения для всех процессов на системе. sar - собирает информацию о использовании ресурсов системы, таких как процессор, память, сеть и диски, и сохраняет ее для последующего анализа. uptime - выводит информацию о времени работы системы, средней загрузке и количестве активных пользователей. time - запускает команду и отображает время, затраченное на ее выполнение, включая CPU-время и время ввода-вывода.
kill
# kill -N PID # kill -s SIGX PID 0 - ? 1 - SIGHUP - ?, controlling terminal closed, 2 - SIGINT - interupt process stream, ctrl-C 3 - SIGQUIT - like ctrl-C but with a core dump, interuption by error in code, ctl-/ 4 - SIGILL 5 - SIGTRAP 6 - SIGABRT 7 - SIGBUS 8 - SIGFPE 9 - SIGKILL - terminate immediately/hard kill, use when 15 doesn't work or when something disastrous might happen if the process is allowed to cont., kill -9 10 - SIGUSR1 11 - SIGSEGV 12 - SIGUSR2 13 - SIGPIPE 14 - SIGALRM 15 - SIGTERM - terminate whenever/soft kill, typically sends SIGHUP as well? 16 - SIGSTKFLT 17 - SIGCHLD 18 - SIGCONT - Resume process, ctrl-Z (2nd) 19 - SIGSTOP - Pause the process / free command line, ctrl-Z (1st) 20 - SIGTSTP 21 - SIGTTIN 22 - SIGTTOU 23 - SIGURG 24 - SIGXCPU 25 - SIGXFSZ 26 - SIGVTALRM 27 - SIGPROF 28 - SIGWINCH 29 - SIGIO 29 - SIGPOLL 30 - SIGPWR - shutdown, typically from unusual hardware failure 31 - SIGSYS
Управление памятью
smem - отображает детальную информацию об использовании памяти процессами, группами процессов и системой в целом. sync - записывает все буферы операционной системы на диск, чтобы обеспечить сохранность данных перед завершением работы. swapoff - отключает файл подкачки, что позволяет освободить диск, но может увеличить использование оперативной памяти. swapon - включает файл подкачки, добавляя дополнительную виртуальную память для использования системой. sysctl - позволяет просматривать и изменять настройки ядра, включая параметры, связанные с памятью. ulimit - устанавливает ограничения на использование ресурсов, включая память, для отдельного пользователя или процесса. pmap - выводит карту памяти процесса, позволяя увидеть как процесс использует физическую и виртуальную память. slabtop - отображает информацию о кэшах ядра, которые используют физическую память системы. ulimit - устанавливает ограничения на использование ресурсов, включая память, для отдельного пользователя или процесса. numactl - управляет доступом процессов к памяти и процессорам, особенно в многоядерных системах. sysrq - позволяет отправлять системным вызовом определенные команды ядру Linux, в том числе сброс памяти (Memory Management). mdb - интерактивный отладчик для системы Solaris, который может использоваться для анализа памяти.
Разное
# --- отображаем заголовок файла head /some/file.txt # первые N строк файла head -N /some/file.txt # --- отображаем хвост файла tail /some/file.txt # крайние N строк файла tail -N /some/file.txt # --- отображение файла с номерами строк nl /some/file.txt # ---- отображение файла с разбиением на страницы more /some/file.txt # --- кодируем FILANEM из кодировки WINDOWS-1251 в UTF-8 iconv -f WINDOWS-1251 -t UTF-8 FILENAME # --- Конкатенация файлов # добавление вывода cat в файл all.txt cat *.txt >> all.txt # перезапись файла all.txt выводом cat cat *.txt > all.txt # --- замена всех вхождений в файле и запись результата в отдельный файл sed s/mysql/MySQL/g /some/file.txt > file2.txt
Сколько?
# --- количество байтов в выводе другой команды output=$(your_program) size=$(echo "$output" | wc -c) echo "Size in bytes: $size" # --- количество файлов в текущей директории и поддиректориях ls -laR | grep "^-" | wc
Grep
# --- grep in grep in grep # grep by multipal strings in files ("grep AND") # на вход команды grep можно передать ограниченное кол-во файлов (команда head) grep -rl 'Rejected' $(grep -rl 'admissionResults' $(grep -rl 'fcsProtocolEF1' . | head -n 1000))
timeout
Есть скрипт с бесконечным циклом, который выполняет какие-то действия.
Задача: нужно чтобы скрипт отработал 3 минуты и завершился (стопать руками не вариант).
Можно использовать утилиту timeout. Это утилита командной строки, которая запускает указанную команду и завершает ее, если она все еще выполняется через определенный промежуток времени. Команда является частью пакета основных утилит GNU.
# --- Команда ping отработает 3 секунды и завершится timeout 3s ping proglib.io # --- синтаксис timeout DURATION COMMAND
DURATION
= Длительность. Это число с плавающей запятой и с необязательным суффиксом:
s = секунды m = минуты h = часы d = дни
COMMAND
= сама команда или скрипт, которому нужно ограничить работу по времени.
Задача: нужно запустить какое-то приложение (например top) на удалённом сервере и через 3 минуты остановить.
# --- Прошло 3 минуты, приложение стопается, ssh сессия завершается. timeout 3m ssh user@proglib.io -- /usr/bin/top