www.zabrosov.ru - обширная шпаргалка по командам Линукс в примерах.
Некоторая часть из нижеописанного актуальна для ubuntu и подобных дистрибутивов.
*** Как загрузить Ubuntu без графики? [from]
В меню загрузки ОС отредактировать конфигурация заменив quiet splash на text.
*** Как избежать сохранения команды в истории bash?
Для этого нудно оставить перед ней пробел.
*** Как сохранить введённую в консоли команду без её выполнения? [se]
Ctrl + U - для запоминания
Ctrl + Y - для вставки запомненной команды
*** Если файл существует, то выполнить действие...
Цсловный оперетор
if условие; then ... else ... fi
if условие; then ... elif [ .. ] ... fi
Цикл с предусловием
while условие; do ... done
Условие может выглядеть так [подробнее]
diff etc
сравнивает содержимое файлов
раскрасить вывод diff [SO]:
Последнее умеет делать слияние файлов.
Некоторая часть из нижеописанного актуальна для ubuntu и подобных дистрибутивов.
*** Как загрузить Ubuntu без графики? [from]
В меню загрузки ОС отредактировать конфигурация заменив quiet splash на text.
*** Как избежать сохранения команды в истории bash?
Для этого нудно оставить перед ней пробел.
*** Как сохранить введённую в консоли команду без её выполнения? [se]
Ctrl + U - для запоминания
Ctrl + Y - для вставки запомненной команды
*** Если файл существует, то выполнить действие...
if [ -f filename ]; then echo "exists"; fiСинтексис управляющих операторов [подробнее]
Цсловный оперетор
if условие; then ... else ... fi
if условие; then ... elif [ .. ] ... fi
Цикл с предусловием
while условие; do ... done
Условие может выглядеть так [подробнее]
(( `hcitool scan | wc -l` > 1 ))
diff etc
сравнивает содержимое файлов
раскрасить вывод diff [SO]:
diff old new | colordiffГрафические приложения для сравнения файлов: Kompare, Meld.
Последнее умеет делать слияние файлов.
Vim, [Vim Викиучебник]
Управление
i - перейти в режим (вставки) редактирования;
Esc - перейти в нормальный режим (режим ввода комманд)
v - пеерейти в режим выделения текста.
/ слово - поиск вперёд
? слово - поиск назад
n и N - следующее и предыдущее вхождение
yy - копировать строку
pp - вставить строку
:q - выход
:q! - выход без сохранения
:wq - сохранить и выйти
:set nu - включить номера строк
Esc - перейти в нормальный режим (режим ввода комманд)
v - пеерейти в режим выделения текста.
/ слово - поиск вперёд
? слово - поиск назад
n и N - следующее и предыдущее вхождение
yy - копировать строку
pp - вставить строку
:q - выход
:q! - выход без сохранения
:wq - сохранить и выйти
:set nu - включить номера строк
.vimrc - файл настроек.
...
***
wc <file> - посчитать число строк, слов и размер файла в байтах
***
Напечатать DOC файл в консоли
antiword file
PDF
Показать PDF в консоли ][
***
wc <file> - посчитать число строк, слов и размер файла в байтах
***
Напечатать DOC файл в консоли
antiword file
sudo apt-get install fbi
Для просмотра пользователь должен быть добавлен в группу video:$ sudo usermod -a -G video user
Теперь можно смотреть:$ fbgs file.pdf
Собрать PDF из отдельных изображений(страниц) [SO]convert page*.png mydoc.pdfВырезать из PDF файла страницы [askubuntu]
pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf
== latex ==
TeX-live - core
Kile - editor
TexMaker - editor
texlive-latex-extra
xneur - PuntoSwitcher for linux
Stardict - Context dictioary
copy dictionaries to /usr/share/stardict/dic
***
Напечатать время в каждой строке вывода [SO]
nc localhost 30003 | awk '{print strftime("%m-%d %H:%M:%S"), $0; fflush();'
Здесь для печати времени в формате %m-%d %H:%M:%S перед каждой строкой $0 вывода nc используется скриптовый язык AWK [rus-linux, linuxgeeks].
Ещё один способ (необходим пакет moreutils)[stackexchange]
echo "foo" | ts '[%Y-%m-%d %H:%M:%S]***
Разбить строку на поля по разделителю ':' и вывести только второе (-f 2) поле
echo email:password | cut -d ':' -f 2***
Направить вывод команды одновременно на экран и в файл [SO, Tee]
nc localhost 30003 | tee logfile.txt
***
Сгенерировать QR-код.
qrencode "hello" -o image.pngСгенерировать QR-код в ASCII-арт и тут же его показать.
qrencode "hello" -t ASCII - | cat
Сеть и интернет
SSH
У каждой машины с установленным SSH сервером есть свой уникальный идентификатор - отпечаток ключа шифрования, который генерируется во вреся установки сервера. При подключении, до того как сервер запросит пароль, этот отпечаток выводится на экран. Это необходимо, чтобы удостоверится в подлинности сервера и защитить себя от MitM.
Поэтому для начала нужно узнать один или несколько различных отпечатков используя программу ssh-keygen. Программе передаются два параметра -l (вывести отпечаток ключа) и -f <путь к ключу>. "Нарисовать" как и раньше отпечаток поможет ключ -v. Устаревшее шифрование алгоритмом DSA используется редко. В основном в ходу RSA и ECDSA.
Узнать отпечаток ECDSA ключа
Поэтому для начала нужно узнать один или несколько различных отпечатков используя программу ssh-keygen. Программе передаются два параметра -l (вывести отпечаток ключа) и -f <путь к ключу>. "Нарисовать" как и раньше отпечаток поможет ключ -v. Устаревшее шифрование алгоритмом DSA используется редко. В основном в ходу RSA и ECDSA.
Узнать отпечаток ECDSA ключа
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_keyОтпечатки могут быть по разному представлены (в зависимости от версии SSH [SU]), например клиентская программа напечатает в виде шестнадцатеричного числа, а сервер (комманда ssh-keygen) в base64.
Рекомендуется отключить аутетнтификацию по паролю и использовать вместо этого ключи шифрования. Закрытый ключ, хранится на клиентской части, открытый - на сервере.
Сгенерируем ключи
ssh-keygenони будут сохранены в .ssh/id_rsa, откуда потом их можно загрузить в память:
ssh-add key_fileПросмотреть загруженные ключи
ssh-add -l***
Копировать файл по ssh на удалённый хост
scp file user@host:new_file
Посмотреть отпечаток ключа сервера
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub***
Отпечаток публичного ключа ssh-сервера (например ECDSA key fingerprint is 09:0c:2f:bb:9d:f3:69:21:5c:3c:a9:ec:dd:a2:18:16) трудно запомнить, однако его можно "рисовать" при подключении подобным образом [www.howtogeek.com]:
с помощью опции -o VisualHostKey=yes:
***ssh -o VisualHostKey=yes user@host
Не добавлять адрес в список известных.
Иногда при подключении к серверу нет необходимости добавлять его с список доверенных (known_hosts). Один их способов, это самостоятельно указать путь для этого файла, заменив его на /dev/null (-o UserKnownHostsFile=/dev/null):
ssh -o UserKnownHostsFile=/dev/null user@some_server
***
Смотреть файлы на удаленной машине удобнее всего через файловый менеджер. Например в nautilus: File > Connect to Server... В качестве адреса использовать: sftp://user@server. Фактически будет смонтирована удалённая файловая система. Это в частности решает проблему просмотра графических и др. файлов в консоли.
*** Socks-proxy
Чтобы дать возможность обращатся локольному приложению с IP ssh сервера к другим машинам можно настроить ssh в режиме socks-прокси. Это решит и проблему открытого или недоверенного соединения с интернетом, например в случае публичного WiFi. Весь траффик будет передаватся по защищённому каналу между ssh клиентом и сервером, и в конце концов будет исходить как буд-то от машины, на которой запущен ssh сервер.
Подключемся к серверу в режиме socks прокси
*** Socks-proxy
Чтобы дать возможность обращатся локольному приложению с IP ssh сервера к другим машинам можно настроить ssh в режиме socks-прокси. Это решит и проблему открытого или недоверенного соединения с интернетом, например в случае публичного WiFi. Весь траффик будет передаватся по защищённому каналу между ssh клиентом и сервером, и в конце концов будет исходить как буд-то от машины, на которой запущен ssh сервер.
Подключемся к серверу в режиме socks прокси
ssh -D 8080 user@server
Теперь остаётся настроть локальное приложение, например браузер, на использование прокси localhost:8080.
tmux
Менеджер терминалов, аналог screen.
tmux - запустить и создать новую сессию.
tmux attach - подключится к последней сессии. Удобно при подключении по ssh вернутся в то же место, на котором закончил в последний раз.
Запущенные в tmux приложения продолжают выполнятся, даже если соединение по ssh было разорвано.
Ctrl+b, c - создать новый терминал.
Ctrl+b, 1 - переключится на терминал #1.
Ctrl+b, d - отключится
Ctrl+b, [ - включить прокрутку
Ctrl+b " - split pane horizontally.
Ctrl+b % - split pane vertically.
Ctrl+b arrow key - switch pane.
Hold Ctrl+b, don't release it and hold one of the arrow keys - resize pane.
Ctrl+b c - (c)reate a new window.
Ctrl+b n - move to the (n)ext window.
Ctrl+b p - move to the (p)revious window.
tmux - запустить и создать новую сессию.
tmux attach - подключится к последней сессии. Удобно при подключении по ssh вернутся в то же место, на котором закончил в последний раз.
Запущенные в tmux приложения продолжают выполнятся, даже если соединение по ssh было разорвано.
Ctrl+b, c - создать новый терминал.
Ctrl+b, 1 - переключится на терминал #1.
Ctrl+b, d - отключится
Ctrl+b, [ - включить прокрутку
Ctrl+b " - split pane horizontally.
Ctrl+b % - split pane vertically.
Ctrl+b arrow key - switch pane.
Hold Ctrl+b, don't release it and hold one of the arrow keys - resize pane.
Ctrl+b c - (c)reate a new window.
Ctrl+b n - move to the (n)ext window.
Ctrl+b p - move to the (p)revious window.
mosh
Браузер в консоли
links2 [URL]
-dump - вывести страницу на стандартный вывод
wget
скачать файл:
wget URL -O КУДА(имя файла)
***
Измерить пропускную способность сети - iperfЗапустить сервер, по желанию указать интерфейс -s 192.168.1.9:
iperf
Запустить клиент но 10 секунд (или на N секунд -t N):
iperf -c <server_ip>
Показать использование сети каждым процессом
nethogs
Утилита должна запускаться от имени суперпользователя.
***
VNC
http://geckich.blogspot.com/2012/09/vino-vnc-linux.html
Подключения
Подключиться к сети my_wifi используя nmcli (network manager)
nmcli connection add con-name mynewcon ifname wlan0 type wifi ssid myssid
nmcli connection modify mynewcon 802-11-wireless-security.key-mgmt wpa-psk
nmcli connection modify mynewcon 802-11-wireless-security.psk password123
Запустить HTTP сервер в любой папке [askubuntu]
python -m SimpleHTTPServer 80
python3 -m http.serverПорт (80) можно не указывать.
Это быстрый способ сделать доступным содрежимое каталога для других.
Если требуется запустить сервер для сайта, работающего на php то:
php -S 0.0.0.0:8080
Using the NetworkManager Command Line Tool, nmcli
***
How do I change the hostname without a restart?
How to spoof the MAC address of a network interface on Linux
Отправить сообщение из консоли через XMPP
Создать простой файл конфигурации в каталоге пользователя .sendxmpprc который будет содержать имя пользователя от имени которого будет отправлено сообщение, сервер и пароль:user@jabber.com passwordПрава на доступ к файлу должен имть только текуший пользователь:
chmod 0600 .snedxmppНаконец можно отправлять сообщение (используя tls соединение -t)
echo "Hello" | sendxmpp -t reciver@jabber.com
Отправить сообщение через публичный почтовый сервер
sendEmail -f "from@server.ru" -t "reciver@server.ru" -u "Subject" -m "message" -s "smtp.server.ru" -xu "from@server.ru" -xp password
-f адрес_отправителя
-t адрес_получателя
-u тема
-s smtp сервер[:порт]
-xu имя_пользователя_для_авторизации
-xp пароль_для авторизации
*** Узнать свой публичный IP [askubuntu]
Самый простой способ сделать это - спросить IP у одного из web-сервисов. Стоит выбирать те сайты, которые выдают IP адрес простым текстом, без лишнего оформления. Используем программу curl
curl ipinfo.io/ip
curl ifconfig.me
curl icanhazip.com
curl ipecho.net/plain; echo
Если IP адрес выдаётся в одну строку, без символа переноса строки то добавим его с помощью последующего вызова echo, как это сделано в последнем примере
Геолокация по IP
geoip <IP>
#<struct GeoIP::Country request="8.8.8.8", ip="8.8.8.8", country_code=225, country_code2="US", country_code3="USA", country_name="United States", continent_code="NA">или
geoiplookup <IP>
GeoIP Country Edition: US, United StatesHow to Do IP Address Geolocation Lookups
GeoIP City Edition, Rev 1: US, CA, California, Mountain View, 94040, 37.384499, -122.088097, 807, 650
GeoIP ASNum Edition: AS15169 Google Inc.
Система
Системные мониторы (консольные)
htop
glances
*** Отправить сообщение во все открытые терминалы [stackexchange]
sudo wall -n Hello
cron
Редактировать расписание:
crontab -eКаждая запись расписания состоит из нескольких полей [wiki]:
* * * * * выполняемая команда - - - - - | | | | | | | | | ----- День недели (0 - 7) (Воскресенье =0 или =7) | | | ------- Месяц (1 - 12) | | --------- День (1 - 31) | ----------- Час (0 - 23) ------------- Минута (0 - 59)
* (звёздачка) обознаяает любое значение, таким образом запись
буде означать, что скрипт в домашнем каталоге пользователя бедет запускатся каждую минуту (каждую минуту каждого часа каждого дня месяца каждого дня недели)* * * * * ~/script.py
Следующая комманда будет запускатся каждые пять минут
Вместо описания времени, можно указать событие - перезагрузка (@reboot). Тогда запись длжна выгялдеть так*/5 * * * * echo "Прошло пять минут"
@reboot ~/script.py
Есть и другой способ запускать программу переодически. Утилита watch будет запускать скрипт script.py комманду каждый 60 секунд:
watch -n 60 ~/script.py***
who - who is logged?
ps - show processes
tightvncserver - vnc server
tightvncpasswd - set password
ps - show processes
tightvncserver - vnc server
tightvncpasswd - set password
Диски и разделы
df -h # show hdd free spacefdisk -l # list of all disks
gparted
***
Анализ занятого места на диске из консоли [SE]
ncdu
***
gsmartcontrol - GUI smart
== smartmontools (пакет) ==
smartctl --scan - scan for the devices
smartctl /dev/sda -x - show info
== fix ntfs ==
ntfsprogs - пакет
ntfsfix /dev/sda1 - Fix common filesystem errors and force Windows to check NTFS
Сделать образ диска
dd if=/dev/sdb of=disk.img bs=4kif - диск;
of - имя файла в который будет сохранён образ;
bs - размер блоков, которыми будет производится копирование.
По-умолчанию информации о ходе операции не показывается, чтобы это исправить нужно добавить опцию [askubuntu]
status=progress
В старых версиях во время копирования никакой информации о прогрессе не показывается.
status=progress
В старых версиях во время копирования никакой информации о прогрессе не показывается.
Объём скопированных данных показывает утилита dcfldd основанная на dd. Программе можно указать дополнительные опции, которые могут быть полезны, если во время копирования возможны ошибки чтения. noerror и sync - не даст программе остановится при возникновении ошибки, а нечитаемый блок (размер указан в опции bs) при копировании будет заполнен нулями.
dd if=/dev/sdb of=disk.img bs=4k conv=noerror,sycn
Для плохо читаемых дисков иметь смысл уменьшить размер блока.
Чтобы показывать состояние [askubuntu] операции нужно добавить параметр status=progress
dd if=/dev/sdb of=disk.img bs=4k conv=noerror,sycn status=progress
Чтобы показывать состояние [askubuntu] операции нужно добавить параметр status=progress
dd if=/dev/sdb of=disk.img bs=4k conv=noerror,sycn status=progress
По окончанию операции копирования хорошо будет сравнить хэши:
md5sum disk.img
md5sum /dev/sdb
md5sum не показывает статуса о ходе операции, поэтому вызывая её для больших объёмов данных нельзя сказать о длительности операции. Воспользуемся отдельной программой pv, [habr] которая показывает прогресс бар, скорость и другую информацию:
pv disk.img | md5sumЧтобы сжать образ на лету используем gzip [create a compressed backup image]:
dd if=/dev/sda | gzip -9 > /mnt/external/filename.img.gz-1 - быстрое сжатие
-9 - качественное сжатие (медленно)
Стоит отметить, что создание образа таким способом может быть очень медленным.
=== boot manager ===
startupmanager - gui for grub settings
***
Температура
http://www.youisbee.ru/howto/linux/86-nastrojka-lm-sensors-v-debian-ubuntu.html
***
Установить частоту, например для четырёхрядерного процессора:
for i in 0 1 2 3; do cpufreq-set -c $i -g ondemand; done
*** music
paplay /usr/share/sounds/KDE-Im-Sms.oggВоспроизвести mp3 [superuser]:
mpg123 music.mp3cmus - консольный аудиоплеер
== other ===
bc - console calculator
gksudo <app> - run GUI app with root
=== console ===
Alt+. - previous param
== screen ==
Ctrl+A, S - split the screen horizontaly
Ctrl+A, Tab - switch the windows
Ctrl+A, c - create new session in a windows
Ctrl+A, | - split the windows verticaly
Ctra+A, X - close window
== write console to the file ==
bash > <file> - start new session and write output to the file. (No output at the screen)
bash | tee <file> - start new session and write output to the file
== history ==
!n - execute command with position #n in history
!-n - execute command with position #n from tail in history
!! - выполнить последнюю комманду
!! - выполнить последнюю комманду
Файлы и папки
Получить полное имя файла [so]:
readlink -f file.txtdu -sh /home/user
-s - напечатать только суммарный объём файлов
-р - в удобном для чтения виде
Поиск всех файлов с именем test
find / -name test
Вернуться в домашнюю директорию:
cd
Сделать что-либо со всеми файлами в папке, например, распаковать все zip архивы в текущей папке:
for f in *.zip ; do unzip $f ; done
Архиваторы [help.ubuntu]
Архиваторы bzip2 и gzip не способны обрабатывать несколько файлов, поэтому файлы для архивирования часто помещают в один контейнер - несжатый архив tar, который непосредственно уже можно сжимать.
Сжатие -c архиватором gzip -z в файл с именем z.tar.gz. Файлы которые нужно сжать указываются последнем параметром
tar -сzf z.tar.gz file1 file2 file3Просмотр -t содержимого архива (добавить ключ -v для подробных сведениях о файлах):
tar -tf z.tar.bzРаспаковка архива:
tar -xf z.tar.bzили распаковка в каталог -С:
tar -xf z.tar.bz -С /extract/here
Изображения
Удалить EXIF данные и перезаписать файл [exif]
exiftool -overwrite_original -all= image.jpg
Изменить размер изображение в два раза и увеличить степень сжатия (с потерями)
convert -resize 50% -quality 80 image.jpg image-new.jpg
Железо
Средствами "из коробки" показать всю информацию о железе в одном месте и в удобном для человека виде можно, но для этого придётся запускать несколько программ и возможно обрабатывать их вывод [more, подробнее].
Поэтому чтобы просто и наглядно представить данные о аппаратном обеспечении нужно установить дополнительный пакет: inxi.
Программа умеет показывать многое [more], но необходимый минимум информации можно посмотреть вызвав:
Ключи:
-H - вывод в более читаемом виде (например использование относительного времени для сообщений);
-w - вывод в реальном времени.
Поэтому чтобы просто и наглядно представить данные о аппаратном обеспечении нужно установить дополнительный пакет: inxi.
Программа умеет показывать многое [more], но необходимый минимум информации можно посмотреть вызвав:
inxi -Fxdmesg - показывает буффер сообщений ядра, среди которых может быть информация о вновь подключённых устройствах.
Ключи:
-H - вывод в более читаемом виде (например использование относительного времени для сообщений);
-w - вывод в реальном времени.
lshw - консольная утилита рассказывающая о аппаратном обеспечении, можно импортировать вывод программы в html;
lshw-gtk - то же самое но с графическим интерфейсом.
Программу нужно запускать от имени сеперпользователя, иначе информация может быть скудной.
HardInfo - менне детальная информация, дружелюбный интерфейс.
lspci - печатает информацию о PCI шинах и подключённых к ним устройствах (в том числе USB).
WiFi
iw list
lspci | grep -i network
Узнать состояние аккумулятора наутбука
acpi -b
Battery 0: Full, 100%
acpi -V # вся информация***
cat /sys/class/power_supply/BAT1/capacity***
upower -i /org/freedesktop/UPower/devices/battery_BAT1
Антивирус
Свободный CalmAV - обладает достаточно скромными возможностями по сравнению с популярными антивирусами. Это скорее сканер чем полноценный антивирус, хоть он и может работать в режиме демона. Поэтому для полноценной защиты его будет недостаточно.
Обновить базу (требуются права суперпользователя):
freshclam
Сканировать файл:
clamscan файл
Рекурсивно сканировать папку:
clamscan -r Downloads
При этом в вывод попадут все просканированные файлы. Чтобы напечатать только заражённые файлы необходимо использовать ключ --infected.
Графическая оболочка для антивируса - clamtk.
Об эффективности антивируса в сравнении с другими http://www.shadowserver.org/wiki/pmwiki.php/Stats/VirusYearlyStats
Программа chkrootkit предназначена для поиска руткитов. Установка, настройка и использование сканера уязвимостей chkrootkit
GPG
gpg -c <file> - encrypt the file with passwordgpg <file> - decrypt
http://wiki.linuxformat.ru/wiki/LXF117:GPG
http://wikiadmin.net/gnupg/
***
=== windows ===chntpw - registry editor
Регулярные выражения etc
Показать строки содержашие mytext
cat myfile | grep mytexttext1 ИЛИ text2:
cat myfile | grep -e text1 -e text2показать 5 строк до и после
cat myfile | grep -e text1 -С 5Показать всё, кроме
... | grep -v some_textПоказать только текст совпадающий с шаблоном (-o)
... | grep -o some_regexpGrep Cheat Sheet
***
Вычислить md5 хэш
echo -n "[eqyz" | openssl md5
Программирование etc
Отформатировать код на Pascal\Delphi:ptop src.pas new_src.pasУтилита ptop входит в состав FPC.
***
Интерпретатор JavaScript в консоли - rhino
***
Увидеть содержимое файла в шестнадцатеричном виде:
xxd файл
hexdump файл
Иногда полезно вывести файл в виде набора значений байт. Добавим ключ -e с описанием соответствующего формата:
' [iterations]/[byte_count] "[format string]" '
Применяет строку формата format string к группам байт по byte_count штук iterations раз. format string описывается подобно формату функции printf.
Применяет строку формата format string к группам байт по byte_count штук iterations раз. format string описывается подобно формату функции printf.
hexdump -ve '1/1 "%x"' ave.txt
-v - не пропускать повторяющие данные (hexdump заменяет их сиволом *)
%x - печатать шестнадцатеричные значения
Регулярные выражения
ПамяткаРегулярные выражения для валидации распространенных видов данных
=== apt-get ===
sud apt-get install openssh-server mc vim gedit links2 git python galculator codeblocks gnuplot deluge vlc marble stellarium lynx thunderbird wxmaxima lazarus synaptic gnome-tweak-tool shutter blender inkscape gimp file-roller virtualbox stardict xneur texlive kile mcabber keepass2 clementine texmaker texlive-lang-cyrillic xdotool pidgin celestia cmus jabref screen stardict sshfs goldendict
apt-get install samba libpam-smbpass sshfs firefox-mozilla-build gpg gauke truecrypt
apt-get
install nmap wireshark hydra crunch aircrack-ng metasploit mtr bkhive
samdump2 chntpw dsniff sslstrip ettercap-text-only ngrep tshark dsniff
ettercap-graphical ettercap-text-only
Переменные пользователя в bash
Переменная создаётся в момент присваивания значения:
myvar=1234myvar2='Ave Statanas'
Пробелы вокруг оператора присваивания = недопустимы.
Чтобы обратится к переменной, перед её именем нужно поставить знак $.
Печать содержимого переменной: echo $myvar2