<<TableOfContents()>>
= Comand Line Interface =
== Полезные ссылки ==
[[https://habrahabr.ru/post/114082|Обзор практически всех *top утилит под linux]]
== Информация о системе ==
Информация об ОС
{{{#!highlight bash
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
{{{#!highlight bash
# --- все процессоры, частоты, флаги и многое другое
cat /proc/cpuinfo
lscpu
# --- средняя загрузка процессора за последние 1, 5, и 15 минут
cat /proc/loadavg
# --- при нажатии на клавишу C все процессы будут отсортированы по использованию CPU
top
}}}
RAM
{{{#!highlight bash
# --- количество RAM и swap, а так же сколько и чем расходуется
cat /proc/meminfo
# --- полный объем, использованный объем и объем свободной памяти в Mb
free -mh
# --- при нажатии на клавишу M все процессы будут отсортированы по использованию оперативной памяти
top
}}}
Graphics
{{{#!highlight bash
# --- информация OpenGL, Xserver и вашей видеокарте
glxinfo
# --- проверка поддержки "direct 3D rendering"
glxinfo | grep direct
# --- производитель видеокарты
glxinfo | grep vendor
# --- модель видеокарты
lspci | grep VGA
# --- простой 3D тест, печатает fps в терминале
glxgears
# --- поддерживаемые монитором разрешения
xrandr
}}}
Audio
{{{#!highlight bash
# --- аудио-контроллеры
lspci | grep Audio
# --- расширенная информация об аудио-контроллере
aplay --list-devices
}}}
Misc
{{{#!highlight bash
# --- шины 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-архивов.
}}}
== Поиск файлов ==
Поиск
{{{#!highlight bash
# --- найти конкретный файл
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
}}}
Поиск и замена
{{{#!highlight bash
# --- замена всех вхождений в файлах директории
find . -name '*.php' -exec sed -i -e 's/www.fubar.com/www.fubar.ftw.com/g' {} \;
}}}
Поиск и удаление
{{{#!highlight bash
# --- поиск файлов и удаление найденных
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 {} +
}}}
Поиск и что-то еще...
{{{#!highlight bash
# --- найти и посчитать количество найденных файлов
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/*
}}}
== Архивы ==
{{{#!highlight bash
# === 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, который может использоваться для анализа памяти.
}}}
== Разное ==
{{{#!highlight bash
# --- отображаем заголовок файла
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
# --- скрываем ''приглашение'' командной строки типа `username@hostname:/current/path$`
# например, если хотим поделиться экраном и не хотим показывать эту информацию
username@hostname:/current/path$ export PS1='$ '
$ echo "Hello world"
Hello world
}}}
=== Сколько? ===
{{{#!highlight bash
# --- количество байтов в выводе другой команды
output=$(your_program)
size=$(echo "$output" | wc -c)
echo "Size in bytes: $size"
# --- количество файлов в текущей директории и поддиректориях
ls -laR | grep "^-" | wc
}}}
=== Grep ===
{{{#!highlight bash
# --- 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.
{{{#!highlight bash
# --- Команда ping отработает 3 секунды и завершится
timeout 3s ping proglib.io
# --- синтаксис
timeout DURATION COMMAND
}}}
`DURATION` = Длительность. Это число с плавающей запятой и с необязательным суффиксом:
s = секунды
m = минуты
h = часы
d = дни
`COMMAND` = сама команда или скрипт, которому нужно ограничить работу по времени.
'''Задача''': нужно запустить какое-то приложение (например top) на удалённом сервере и через 3 минуты остановить.
{{{#!highlight bash
# --- Прошло 3 минуты, приложение стопается, ssh сессия завершается.
timeout 3m ssh user@proglib.io -- /usr/bin/top
}}}