Настольная книга по Linux: различия между версиями
Содержимое удалено Содержимое добавлено
Indigio59 (обсуждение | вклад) м →Вывод |
оформление, орфография |
||
Строка 1:
{{Темы|Linux}}
Все системные администраторы рано или поздно начинают записывать команды в текстовый файлик сразу с нужными параметрами и опциями, чтобы заново не перечитывать
== Работа в командной строке ==
=== Настройка ===
* '''~/.bashrc''' — Глобальная настройка и запуск программ при первичном входе, и при каждом открытии консоли
* '''~/.bash_profile''' — Применяется только при входе в систему, автозапуск пользовательских приложений
* '''~/.bash_logout''' — Выполнение сценариев при выходе
* '''~/.inputrc''' — Настройка хоткеев
<blockquote><syntaxhighlight lang="bash">
"\e[A": history-search-backward
Строка 14:
TAB: menu-complete
</syntaxhighlight></blockquote>
Получение клавишных кодов
Строка 22:
0000004
</pre>
* '''echo
Чтобы единовременно отменить alias (для использования действия команды по умолчанию, например, в скрипте), нужно перед соответствующей командой поставить
=== Горячие клавиши ===
* '''«Esc+.»''' или '''«Alt+.»''' — Вставка последнего аргумента предыдущей(-их, при многократном нажатии) команды (здорово жизнь упрощает)
* '''«Shift+PgUP»''' — Просмотреть вывод выходящий за границы экрана
* '''«Ctrl+a»''' — Перейти в начало строки, '''«Ctrl+e»''' — перейти в конец
* '''«Home»''', '''«End»''' то же самое, но еще проще
* '''«Ctrl+r»''' или '''«Ctrl+s» '''
* '''«Ctrl+u»'''
* '''«Ctrl+w»'''
* '''«Alt+Backspace»'''
* '''«Ctrl+k»'''
* '''«Alt+b»'''
* '''«Alt+d»'''
* '''«Ctrl+y»'''
* '''«Ctrl+l»'''
* '''«Ctrl+d»'''
* '''«Ctrl+z»'''
* '''«Ctrl+s»'''
=== Алиасы и функции .*shrc ===
* '''alias psgrep='ps aux | grep --color $(echo $1 | sed
* '''alias psgrep='ps aux | egrep -i $1''''
* '''alias dirsz='du -s `pwd`/* | sort -nr | cut -f 2- | while read a; do du -sh
* '''alias sharethis='python -m SimpleHTTPServer''''
* '''alias hh='history | egrep -i'''
* '''alias p='ping 8.8.8.8 -A''''
* '''myip(){ lynx --dump 2ip.ru | egrep -o <nowiki>'([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | uniq</nowiki>; }'''
* '''myip(){ curl -s checkip.dyndns.org | sed 's/[^0-9.]//g' }'''
* '''myip(){ curl ifconfig.me }'''
* '''Убивает процессы по имени программы (например, ki skype nmap firefox):'''
<blockquote><syntaxhighlight lang="bash">ki(){
Строка 64 ⟶ 63 :
done
}</syntaxhighlight></blockquote>
* '''gr(){ egrep -v '^#|^$' $1; }'''
* '''alias pwg='pwgen -cnB 8 10 | while read PASS; do echo -n -e
* '''Функция, эмулирующая поведение
<blockquote><syntaxhighlight lang="bash">service(){
init_path="/etc/rc.d"
Строка 101 ⟶ 100 :
=== Скрипты ===
* ' — Строгие кавычки, передать неинтерпретируемое значение
* '''`''' — Обратные кавычки, выполнить содержимое. То же, что и $()
* '''»''' — Двойные кавычки, подстановка переменных и предотвращение разбиения на слова
* '''ping -с 1 domain.com ''';''' echo «host»''' — Пропинговать domain.com одним пакетом, затем просто вывести сообщение
* '''ping
* '''ping -с 1 domain.com '''
* '''&''' — AND (логическое «И»)
* '''|''' — Прямая черта, она же пайп (pipe)
* '''>''' — Перенаправить вывод (stdout) в файл
* '''>>''' — Дописать в конец файла
* '''2 > file''' — Вывод ошибок (stderr) в файл
* '''2
* '''$!''' — PID последнего запущенного в фоновом режиме процесса
* '''$0''' — Наименование текущего сценария
* '''$1, $2, $((i))''' — Первый, второй и i-тый аргументы, переданные программе. i передаётся, например, как переменная из цикла
* '''$*''' — Все аргументы сценария/команды
* '''$@''' — Каждый из переданных программе аргументов
* '''$((<выражение>))''' — Выражение в скобках вычисляется
* '''$#''' — Число аргументов, передаваемых сценарию
* '''$$''' — Текущий PID выполняемого сценания
* '''$-''' — Текущие опции интерпретатора, аналогично применению set
* '''$?''' — Код завершения команды. 0 обычно свидетельствует о завершении без ошибок
* '''array=(); while read -r; do array+=(«$REPLY»); done < file.txt''' — Cоздать массив array. Элементами будут строки из файла file.txt
* '''array=(); while read -r; do array+=(
* ''' for file in * ; do '''['''[''' -z $oldest || $file -ot $oldest ''']''']''' && oldest=$file; done; echo $oldest''' — Найти самый старый файл в директории
* '''declare -A array=([one]=hello [two]=world [three]='!'); count=${#array[@]}; for element in ${!array[@]}; do echo -e «$element\t\t» «${array[$element]}\t\t» $(($count-${#array[@]})); count=$((count+1)); done''' — Создать ассоциативный массив и вывести содержимое.
* '''func() {<команды>}''' — Объявление функции. '''func''' — Вызов
* '''while true; do firefox& wait $!; done''' — перезапускает процесс firefox сразу после его окончания
* '''{<command1>&&<command2>;}''' — объединение команд в единую структуру в пределах процесса
* '''
* '''for ((var=1; var<101; var++)); do echo «$var»; done''' — Цикл в стиле C
* '''repeat 10 (echo выводим строку; sleep 1)''' — Повторить 10 раз команды в скобках (в zsh)
* '''rand=$((RANDOM%100)); echo «$rand»''' — Вывести случайное число от 0 до 100
Не забываем про фигурные скобки:
Строка 154 ⟶ 152 :
=== Калькуляторы ===
* '''let «a = 2 + 2»'''
* '''bс -l'''
<blockquote><syntaxhighlight lang="bash">
Строка 164 ⟶ 161 :
* '''echo $((2+2))'''
* '''awk 'BEGIN{ print exp(1)+2^(1.0/3); }''''
* '''perl -le
* '''python -c
* '''mysql -e
=== Утилита screen ===
Чрезвычайно полезная утилита screen есть в linux. Позволяет она создавать в терминале ssh несколько экранов и удобно переключаться между ними. Также полезен screen в случае если надо делать какие-то опреации по ssh и обрывы связи вредны. Достаточно просто, работать в скрин
http://citkit.ru/articles/609/ -- вот хорошая статья
* '''screen -ls'''
* '''screen -r 4541.pts-1.mail'''
* '''screen -x 4541.pts-1.mail'''
=== Утилита tmux ===
Разрабатывался как замена screen.
* '''tmux new''' — Запустить tmux.
* '''tmux attach''' — Присоединиться к сессии, работающей в фоне.
== Работа с файлами ==
=== Создание ===
* '''fallocate -l 10m filename'''
=== Права ===
* '''chmod -R 741 /var/www/files''' — Сменить права рекурсивно (-R) во всей папке files на rwx r-- --x, где: 4 — чтение (r), 2 — запись (w), 1 — выполнение (x)
* '''chmod -R
* '''chattr +Sai''' — Добавление атрибутов к файлу, синхронное изменение всех данных на диск, без кэширования (S); только добавление данных, удаление и переименование запрещено (a); запрещено удаление, изменение или переименование (i) (immutable)
* '''chmod g+ws, o= /tmp/test/''' — Включить наследование группы к которой принадлежит /tmp/test/ для всех вновь создаваемых объектов
* '''cd <dir> && chown user.user -R .''' — Рекурсивное изменение группы и пользователя всех объектов в <dir>
=== Поиск ===
* '''locate foo'''
* '''mlocate foo'''
* '''pinfo bash'''
* '''find /usr/bin -type f -mtime
* '''find /usr/project \(
* '''find -iname '*.mp3' -print0 | xargs
* '''find /bakdir -name bak-20??-??-??.tar.gz | sort | head -n
* '''ls /bakdir/bak-20??-??-??.tar.gz | head -n
* '''rm -rf `find ./ -iname '*.svn'`'''
* '''find . -name
* '''grep -r
* '''shopt -s globstar
=== Вывод ===
* '''tar -cjvf /home/user/etc_`date '+%Y-%m-%d' -d yesterday`.tar.bz2 /etc''' — (с)Запаковать в (f)tar-архив и (j)сжать bzip2 папку /etc c текущей датой в имени файла, с (v)подробным выводом
* '''tar -C каталог_источника --exclude={«/home*»,"/etc/passwd*"/,"/etc/shadow*"}-czpvf — . | ssh user@REMOTE_IP «cat > каталог_назначения/backup.tgz»''' — Запаковать с соответствующими исключениями и передать посредством ssh на удаленный сервер
* '''tar -xzvf /home/user/Downloads/centerim-4.22.6.tar.gz -С /opt/''' — (x)Распаковать (z)gzip-архив в /opt
* '''tar -
* '''grep -v ^# /etc/mail.conf | grep -v ^$ ''' — Показать файл без комментариев и пустых строк (неоптимально)
* '''
* '''ls -f1 /var/log/packages/ | wc -l''' — Вывести количество строк (wc -c — байт)
* '''diff -y httpd.conf httpd.con.new''' — Сравнение в две колонки
* '''diff -
* '''tail -n +5 /file''' — Вывести строки, начиная с 5-ой
* '''
* '''… | awk '{print($1"STRING")}'''' — Вывести то что в пайпе, добавив STRING
* '''awk '$1=="string" {print $2}' file1 >> file2''' — Считать файл file1 , если данные в первом столбце равны 'string' добавить в файл file2 данные из второго столбца этой строки
* '''… | tr '\n' ' '''' — Заменить все переносы строки на пробелы
* '''… | awk '{s += $2} END {print s*9}'''' — Сложить второй столбец и вывести результат умноженный на 9
* '''TIME=$(LANG=en_US.UTF-8 date -d '2 min ago' '+\[%d\/%b\/%Y:%H:%M:');awk «/$TIME/,/END/» /var/log/nginx/access.log | awk '$0~"GET / HTTP" {print $1}' | sort -rg | uniq -c | awk '$1>5 {print $2}' >> black.list''' — Еще один вымученный скрипт против DDOS, если host попросил больше 5 раз за 2 минуты главную страницу вашего сайта, то он добавляется в black.list, дальше можно и в ipset
* '''cat /tmp/text | /usr/local/bin/topnwords.pl | head -n 5''' — показать TOP5 слов в файле text
<blockquote><syntaxhighlight lang="bash">
Строка 245 ⟶ 239 :
=== Модификация ===
* '''sed -i 's/foo/too/'''' — Заменить foo на too*
* '''sed -i 's/[^[:digit:]]//g'''' — Убрать все символы, кроме цифр ([:digit:])
* '''sed -i '14d' /file''' — Удалить 14ю строку
* '''sed -i '/[Nn]etwork/d' /file''' — Удалить строку содержащую Network или network
* '''sed -i '$ a \\n[mounts]\nuser root'''' /etc/munin/config — Добавить в конец файла «[mounts]» затем перенос на новую строка и «user root»
* '''sed '14a\ echo \"graph_category logger\"'''' /etc/munin/plugins/command — После 14ой строки добавить «echo „graph_category logger“»
* '''sed '1i \# vim: ft=ruby\n'''' — Вставить в начало файла '# vim: ft=ruby' и перенос строки
* '''sed -i '/LOGREJECT/d' /var/log/messages''' — Удалить строки содержащие 'LOGREJECT'
* '''tr -d '<символ>'''' — Удалить символ. Можно использовать классы символов POSIX (вроде '[:space:]')
* '''tr -s '<X>' '<Y>'''' — Заменить символ <Х> на <Y>. Можно использовать классы символов POSIX (например, cat /etc/fstab | tr -s «[:lower:]» «[:upper:]»)
* '''cat /etc/fstab | tr -s 'a-z' 'A-Z'''' — Заменить все строчные буквы в соответствующем файле на прописные (подобным образом можно делать и транслитерацию)
* '''cp /dev/null file.txt''' — Быстрая очистка содержимого файла file.txt
* '''echo "« > file.txt''' — Быстрая очистка содержимого файла file.txt
* ''' > file.txt — самая быстрая очистка содержимого файла
* '''cat /proc/PID/cmdline | tr '\000' ' ' ''' — Cделать cmdline читаемым
* '''cat /proc/PID/cmdline | xargs −0 echo''' — То же самое
* '''Пример, заменяющий шаблон ip-адрес/маска на '*.*.*.*', '/префикс' на '/*' и поднимающими регистр букв:
<syntaxhighlight lang="bash">ip ad | sed 's/\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}/*.*.*.*/g;s/\/[[:digit:]]\{1,2\}/\/*/g;s/\(.*\)/\U\1/g'</syntaxhighlight> '''
* '''Пример, поднимающий регистр букв в файле /etc/fstab в строках, содержащей 'sda' кроме самой подстроки 'sda':
<syntaxhighlight lang="bash">cat /etc/fstab | sed 's/\(.*\)\(sda\)\(.*\)/\U\1\L\2\U\3/g'</syntaxhighlight> '''
* '''Пример, заменяющий последний октет ip адреса на ноль:
<syntaxhighlight lang="bash">echo 192.168.23.46 | sed 's/[[:digit:]]*/0/4'</syntaxhighlight>'''
==== Кодировки ====
* '''iconv -f koi8-r -t utf-8 < file.php > file2.php''' — Конвертация KOI8-R в UTF8
* '''recode KOI8-R..UTF-8 blah.php''' — Конвертация KOI8-R в UTF8
== Работа с дисками ==
=== Состояние дисковой подсистемы ===
* '''rescan-scsi-bus -l''' — После добавления sata-диска, чтобы он определился системой (полезно для горячей замены!)
* '''partprobe''' — реинициализация дисков и разделов
* '''cat /proc/scsi/scsi''' — Посмотреть подключенные диски
* '''fsarchiver probe''' — Выводит список дисков и разделов
* '''df -h''' — Показывает занятость подмонтированных дисков
* '''dfc -h''' — Цветной df
* '''
* '''du -smc --exclude={proc, sys, dev} /* | sort -gr''' — Получаем отсортированный список самых „тяжелых“ каталогов в мегабайтах
* '''find . -size +<размер>k''' — Поиск файлов размер которых превышает указанный (или c — для байтов, M — мегабайт, G — гигабайт. В примере, соответственно, килобайты)
* '''ls -lSrh''' — В конце вывода увидим самые большие файлы
* '''vdir''' — расширенный вывод содержимого директории
* '''hdparm -tT /dev/sda''' — Тестирование производительности диска, ей же можно тонко настроить производительность (обычно не нужно, так как современные системы корректно определяют параметры)
* '''dd if=/dev/sdx of=/dev/null bs=1M''' — Вроде как выявление проблем с диском.<ref>Если простое считывание окажется для него серьёзной нагрузкой. Лучше сделать дамп диска, а потом сравнить хэши.</ref>
* '''smartctl -s on -S on -t long /dev/sda''' Запуск процесса диагностики диска
* '''hddtemp /dev/sd[a-z]'''
* '''testdisk'''
* '''parted'''
=== Горячее подключение дисков SATA ===
* '''echo „- — -“ > /sys/class/scsi_host/host1/scan''' — Сканирование и инициализация нового устройства на порту host1.
* '''ls −1 /sys/class/scsi_host/''' — Вывести список портов host используемых для подключения дисков.
* '''ls /sys/class/scsi_host/host?/device/target?:?:?/?:?:?:?/block''' — Показать на каких портах hostX подключены диски /dev/sdX.
* '''echo 1 > /sys/block/sdb/device/delete''' — Деактивировать и удалить из системы диск /dev/sdb.
=== Разметка диска ===
Разметка диска, по сути — запись (таблица разделов в самом начале диска начиная с 447 байта 64 байта) о том где и какие разделы расположены физически на диске. То есть редактируя таблицу разделов, данные (находящиеся на жестком диске) остаются нетронутыми.
* '''sfdisk -luM /dev/sda''' — Информация о разделах на диске (-uM) в мегабайтах.
* '''partprobe -s /dev/sda''' — Перечитывает таблицу разделов блочного устройства.
* '''cat /proc/partitions''' — Tаблица разделов, с которыми работает ядро.
* '''mkfs.ext3 -L fsroot /dev/sda6''' — Создать файловую систему ext3 c меткой „fsroot“.
* '''tune2fs -L fsroot /dev/sda6''' — Присвоить метку „fsroot“ диску, для удобства монтирования (или e2label /dev/sda6 fsroot).
* '''blkid''' — Отображает атрибуты: UUID, метку, тип ФС блочных устройств.
* '''mount LABEL=fsroot /mnt/data''' — Монтрирование по метке раздела.
* '''sfdisk -d /dev/sda | sfdisk /dev/sdb''' — Копирование таблицы разделов с sda на sdb.
* '''sfdisk -d /dev/sda > sda.mbr.bak''' — Копирование MBR в файл (файл можно редактировать).
* '''sfdisk /dev/sda < sda.mbr.bak''' — Восстановление MBR из файла.
* '''fdisk -p ad2 > /tmp/slices''' — Скопировать таблицу слайсов в файл.
* '''
* '''dd if=/dev/sda of=/root/sda.mbr.img bs=512 count=1''' — Копирование MBR в файл, самый надежный способ.
* '''dd if=/dev/zero of=/dev/hda bs=512 count=1''' — Очищаем MBR (внимательно!). Если без таблицы разделов, то bs=446
* '''dumpfs -m /dev/sda2'''
* '''yum install cloud-utils-growpart.x86_64; growpart /dev/vdb 1; xfs_growfs /srv/vdb1/'''
=== Монтирование ===
* '''cat /proc/mounts''' — подробная инфа о примонтированных устройствах. Можно заменить вызовом '''mount''' без аргументов. '''column -t /proc/mounts''' или '''mount | column -t''' то же, но отформатированное. Если нужно коротко, то df -h
* '''mount -t cifs //192.168.0.122/data /mnt/amigoglobal/data -o user=USER,pass=PASSWORD,uid=1000''' — Монтирование виндовых разделов
* '''
* '''
* '''mount -a''' — Монтировать все из fstab (напр. при добавлении ресурсов)
* '''mount -o remount /dev/sda1 /''' — Перемонтировать. Например, при изменении опций
* '''mount --bind olddir newdir''' — Примонтировать одну директорию к другой
* '''fuser -v /opt''' — Узнать, кто занимает ресурс. Например, если не дает размонтировать
* '''fuser -km /opt''' — Принудительное размонтирование раздела
* '''umount -l /dev/sdb1''' — Размонтировать, когда ресурс освободится
* '''archivemount archivemount /home/directory.zip /mnt''' — Примонтировать архив в директорию /mnt
=== Шифрование раздела ===
'''<span style="color:red">Осторожно! Использовать только после изучения манов и тренировки на тестовом разделе!</span>'''
* '''dd if=/dev/random of=<key.file> bs=1 count=256'''
* '''cryptsetup -h=sha256 -c=aes-cbc-essiv: sha256 -s=256 -d=<key.file> luksFormat /encrypted/part'''
* '''cryptsetup -d=<key.file> luksOpen /encrypted/part decrypted'''
=== Шифрование директории ===
* '''mv /images /images_bak'''
* '''mkdir /images/'''
* '''mount -t ecryptfs /images
* '''cp -av /images_bak/* /images/'''
=== Swap ===
* '''mkswap -L swap /dev/sda5'''
* '''swapon /dev/sda5'''
* '''swapon -a'''
Создаем файл подкачки вместо раздела. Позволяет перераспределить дисковые ресурсы(при LVM, RAID, XEN), но слегка замедляет работу подкачки.
Обычно размер файла подкачки предпочитают устанавливать равным объему оперативной памяти.
* '''dd if=/dev/zero of=/file.swp bs=1M count=1024'''
* '''mkswap /file.swp'''
* '''swapon /file.swp'''
* '''swapoff /dev/sda5'''
* '''swapoff -a'''
* '''/file.swp
* '''echo 0 > /proc/sys/vm/swappiness'''
=== Образ диска ===
* '''dd if=/dev/zero of=/null bs=1024 ; rm -f /null''' — Забиваем свободное место на диске нулями, чтобы dd мусор не сохранял, и сразу удаляем.
* '''dd if=/dev/sda2 bs=16M | gzip -c > /mnt/bak/sda2.img.gz''' — где bs=16M — размер кэша на винчестере. Побитное копирование раздела с последующей упаковкой, я использую для бэкапа свеже настроенных систем (копирует вместе с файловым мусором, зато надежно).
* '''gunzip -с /mnt/bak/sda2.img.gz | dd of=/dev/sda2 bs=16M''' — Восстановление из сжатого образа.
* '''На оригинальной системе: dd if=/dev/sdX bs=16065b | netcat <REMOTE_IP> <REMOTE_PORT>. На целевой системе: netcat -l -p <PORT> | dd of=/dev/sdY bs=16065b''' — Копирование раздела по сети.
* '''На оригинальной системе:
=== Работа с CD/DVD ===
* '''dd if=/dev/cdrom of=cd_image.iso bs=1M''' — Копирование образа (а так же: cp /dev/cdrom cd_image.iso или cat /dev/cdrom > cd_image.iso)
* '''wodim dev=/dev/cdrom -eject -v mycd.iso''' — Запись диска
* '''wodim -v blank=fast dev=/dev/cdrom''' — Стирание диска
* '''genisoimage -f -v -J -o /home/${USERNAME}/ARCH/DIR.iso /home/${USERNAME}/DIR''' — Создать iso-образ директории
==== Наблюдаем за работой dd: ====
* '''dd status=progress if=/dev/disk of=disk.iso''' (для coreutils>8.24)
Строка 425 ⟶ 413 :
=== LVM ===
* '''vgscan''' — Поиск по системе виртуальных групп VG
* '''vgchange -ay''' — Активизировать виртуальную группу (-an — деактивизировать)
* '''pvscan''' — Поиск доступных физических томов и отображение сравнительной информации о них
* '''pvdisplay /dev/sda1''' — Просмотр полной информации о физическом томе.
* '''
* '''pvcreate /dev/sda1''' — Подготовка физического тома PV (тип раздела 8Eh)
* '''
* '''pvresize /dev/sda2''' — Расширить физический том
* '''vgdisplay VG''' — Просмотреть полную информацию о виртуальной группе
* '''
* '''vgcreate VG /dev/sda1 /dev/sdb1''' — Создание виртуальной группы на основе двух физических томов
* '''
* '''
* '''
* '''vgexport VG''' — Подготовка виртуальной группы для переноса на иную машину
* '''
* '''lvcreate -L1500 -nlv00 VG''' — Создание логического тома (LV) с именем nlv00 и размером 1500 Мб
* '''lvcreate -l 100 %FREE -n nlv00 VG''' — Создаем „логический том“ на все доступное пространство
* '''lvremove /dev/VG/home''' — Удаление логического тома
* '''
* '''lvextend -
* '''lvextend -
* '''lvresize -L +10G /dev/VG/home''' — Добавляет в логический том 10Гб, при их наличии в физическом томе.
* '''lvreduce -L120M /dev/VG/home''' — Уменьшение размера логического тома до указаной величины
* '''lvreduce -
* '''resize2fs /dev/VG/home''' — Расширяем раздел находу на все доступное пространство (для ext3)
* '''mkfs.ext3 /dev/VG/home''' — Создаем файловую систему
== Работа с программами ==
* '''echo '0-5 20,22 * * 1-5 root bak.sh' >> /etc/crontab''' — Запись в означает, что bak.sh будет выполняться cron’ом с нулевой по пятую минуту в 20 и в 22 каждый день с понедельника по пятницу
* '''echo '
* '''ps aux | grep process''' — Вывод системной информации по конкретному процессу
* '''kill -TERM `cat /usr/local/apache2/logs/httpd.pid`''' — Послать сигнал процессу
* '''pgrep <PROGRAM_NAME>''' — Выводит PID’ы процессов
* '''
* '''pkill httpd''' — Послать сигнал найденным процессам
* '''
* '''nice -n −20 command''' — Запустить command с наивысшим приоритетом (-n 19 — наименьший)
* '''
* '''LANG=en_EN[.UTF-8] command''' — Запуск программы в другой локали [.кодировке]
* '''gnome-screenshot --window --delay=5''' — Сделать скриншот активного окна, с задержкой 5 секунд
* '''espeak -v ru „таки да“ --stdout -s 60 | aplay''' — Сгенерировать и озвучить слова в кавычках с помощью синтезатора речи. Язык — русский, скорость 60 (слов в минуту)
* '''CREATE ROLE test_user; GRANT ALL privileges ON DATABASE test_database TO test_user; ALTER ROLE test_user WITH LOGIN; ALTER USER staging_rb_user WITH PASSWORD 'testPassWord;'''' — Дать права пользователю на БД (postgres)
= Управление пакетами =
Строка 610 ⟶ 596 :
==== Сборка пакетов ====
* '''rpm -i foo-1.2.src.rpm && cd /usr/src/redhat/SPECS && rpmbuild -bb foo-1.2.spec''' — Собрать foo.rpm
* '''cd /usr/ports/foo && make package''' — Собрать package для FreeBSD
Строка 617 ⟶ 602 :
== Система ==
* '''shutdown -P now'''
* '''shutdown -P +10'''
* '''shutdown -r 05:00'''
* '''shutdown -c'''
=== Планировщик задач ===
* '''cron'''
**
**
* '''at'''
<blockquote><syntaxhighlight lang="text">
# at 7:30
Строка 636 ⟶ 621 :
=== Конфигурация ===
* '''ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime''' — Установка часового пояса
* '''ntpdate ntpserver''' — Жесткая синхронизация времени (быстрая смена времени может быть вредна некоторым сервисам, рек. ntpd)
* '''sysctl -a''' — Вывести текущие настройки ядра
* '''sysctl -
* '''hostname -F /etc/hostnamefile''' — Установить сетевое имя из файла (см. ниже)
* '''sysctl hw.model hw.ncpu hw.physmem machdep.tsc_freq''' — Сведения о системе (FreeBSD)
=== Для Debian-like ===
* '''/etc/hostname''' — Прописываем имя машины
* '''dpkg-reconfigure locales''' — Установка системной локали
=== Для RHEL-like ===
* '''/etc/sysconfig/network''' — Прописываем имя машины (напр. HOSTNAME=localhost.localdomain)
* '''/etc/sysconfig/clock''' — Правка часового пояса
=== Для Slackware ===
* '''/etc/HOSTNAME''' — Прописываем имя машины.
=== Пользователи и группы ===
* '''chfn''' — изменение информации о пользователе
<blockquote><syntaxhighlight lang="bash">
# chfn -o 'User for ftp' userftp
</syntaxhighlight></blockquote>
* '''useradd -r -N -g <groupname> --uid 1000 <username>'''
* '''userdel -r <username>'''
* '''usermod -g <group_main> -G <Group1>, <Group2> <username>'''
* '''vipw'''
* '''vigr'''
* '''visudo'''
* '''PASS=666; useradd testuser -m -p $(echo $PASS | mkpasswd -m sha-512 -s)'''
* Использование утилиты '''newusers''' для массового создания системных пользователей по шаблону
<blockquote><syntaxhighlight lang="bash">
uid=`cat /etc/passwd | cut -d ":" -f 3 | sort -gr | head -1`
Строка 680 ⟶ 660 :
</syntaxhighlight></blockquote>
* '''groupadd <group_name>'''
* '''groupdel <group_name>'''
* '''groupmod -n <new_group_name> <old_group_name>'''
* '''ssh sudouser@servername '/usr/bin/sudo /usr/sbin/usermod --expiredate 1 username &&/usr/bin/sudo /usr/bin/pkill -u username''''
* '''ssh sudouser@servername '/usr/bin/sudo /usr/sbin/usermod --expiredate 99999 username''''
==== Авторизация по флешке ====
* '''sudo pamusb-conf --add-device <flash>'''
* '''sudo pamusb-conf --add-user <username>'''
* '''sudo pamusb-check username'''
==== Автовход в систему ====
Строка 717 ⟶ 698 :
=== Железо (Модули) ===
* '''lsmod''' — Показать загруженные модули ядра
* '''
* '''modprobe foo''' — Включить модуль
* '''modprobe -vr foo''' —
* '''modprobe -vr pcspkr''' — Выключить динамик на материнской плате. А еще лучше echo 'blacklist pcspkr' >> /etc/modprobe.d/blacklist
* '''cat /dev/dsp > wave-file.wav''' — Записываем несжатый аудио‐поток с микрофона компьютера через вход звуковой карты
* '''cat wave-file.wav > /dev/dsp''' — Проиграть файл
=== Мониторинг ===
* '''htop'''
* '''vmstat 5'''
* '''dstat'''
* '''iostat 5 -m -x'''
* '''iotop'''
* '''atop'''
* '''tailf''' или '''tail -f /путь/к/логу'''
* Нажатие '''Shift+f''' в '''less''' аналогично поведению tailf
* '''iftop'''
* '''vnstat'''
* '''ifstat -TtSnqA -i wimax0'''
* '''apachetop''' и '''mytop'''
* '''iptraf'''
* '''watch -n 1 <program>'''
* '''script -t 2> timingfile'''
* '''scriptreplay timingfile'''
* '''nethogs'''
* '''tcpstat'''
* '''cat /proc/net/nf_conntrack'''
* Перенаправляем вывод какого-нибудь лога (скажем, syslog) на консоль (скажем, девятую)
daemon,mail.*;\
Строка 761 ⟶ 741 :
=== Журналирование ===
* '''/home/adm/script.sh 2>&1 | /usr/bin/logger -t event_name'''
=== Ядро ===
* '''lsmod'''
* '''modprobe foo'''
* '''modprobe -vr foo'''
=== Пересборка ядра ===
* Скачать ядро, разархивировать и перейти в папку с исходниками (cd /usr/src/linux-2.6.30)
* '''make config'''
* '''make dep'''
* '''make clean'''
* '''make'''
* '''make kernelversion'''
* '''make install'''
* '''make modules'''
* '''make modules_install'''
* '''cp System.map /boot/System.map-2.6.30'''
* '''cd /boot; mkinitrd -c -k 2.6.30 -m mbcache: jbd: ext3 -f ext3 -r /dev/sda2'''
* И добавить ядро в загрузчик
== Сети ==
{| class="wikitable"
|-
Строка 808 ⟶ 786 :
|-
| Физический
| Определяет: тип среды передачи (медь, оптика, радиоэфир, окружающее пространство); метод передачи информации (широкополосный, узкополосный); тип синхронизации (синронный, асинхронный
|
|}
=== Конфигурация ===
* '''/etc/resolv.conf''' — DNS-сервера провайдера (для RHEL-like можно также указать в конфиге DNS{1,2}=80.80.111.254, он приоритетней)
* '''/etc/sysctl.conf''' — Для маршрутизации пакетов в системе net.ipv4.ip_forward = 1 (или в rc.local добавить строку: echo 1 > /proc/sys/net/ipv4/ip_forward)
* '''ip route add 192.168.124.0/24 via 192.168.0.220''' — Добавить маршрут (временно, до первой перезагрузки)
* '''ip
* '''
* '''
* '''vconfig <NET_DEV> <VLAN_ID>''' — Добавить тегированный интерфейс (предварительно убедиться, что подгружен модуль 802.1q); устаревший вариант
* '''
* '''ip -details link show dev mgmt''' — Посмотреть созданный интерфейс
* '''ip -
* '''brctl addbr <BRIDGE_NAME>''' — Создать контейнер интерфейсов для коммутатора (нужен модуль ядра bridge)
* '''brctl addif <BRIDGE_NAME> <IFACE>''' — Добавить интерфейс в созданный коммутатор
=== Для Debian-like ===
* '''/etc/network/interfaces''' — Файл конфигурации интерфейсов
=== Для RHEL-like ===
* '''/etc/sysconfig/networking/devices/ifcfg-eth0''' — Файл конфигурации интерфейса (/etc/sysconfig/network-scripts/ifcfg-eth0 — жесткая ссылка на него же)
* '''/etc/sysconfig/network-scripts/route-eth0''' — Файл статической маршрутизации, с синтаксисом: 192.168.124.0/24 via 192.168.0.220 dev eth0 или ADDRESS0=192.168.124.0
=== Для Slackware ===
* '''/etc/rc.d/rc.inet1.conf''' — Файл конфигурации интерфейсов.
* '''/etc/udev/rules.d/70-persistent-net.rules''' — Переопределение имени инт. (напр. eth1 -> eth0)
=== Мониторинг ===
* '''traceroute -i eth3 ya.ru''' — Трассировать через определенный интерфейс (для отладки маршрута)
* '''ping -I eth1 -i4 -c3 host''' — Пропинговать хост через eth1 три раза с интрервалом в 4 секунды
* '''mtr ya.ru''' — traceroute и ping в одном флаконе
* '''ifconfig''' — Вывод конфигурации всех интерфейсов (рек. ip addr)
* '''netstat -tunap''' — Список всех портов и соединений (lsof -i -n)
* '''netstat -tnlpu''' — Список всех слушающих приложений и соответствующих tcp/udp портов. Чтобы видеть все приложения, запускать необходимо от рута
* '''arp''' — Вывод arp-таблицы (нужно для выяснения физической доступности в сети, или выяснения МАС-адреса соседа). Правильнее ip neigh (или ip n)
* '''tcpdump -vvvnnni eth0 not port ssh and not 3389 and not 80 and not 5191 and not 443 and not 53 and not 2222 and not 5223 and not udp port 5001''' — Ищем незнакомый трафик в сети
* '''tcpdump -c 100 -nni vlan100 dst megahost.ru and icmp''' — Отфильтровать 100 сообщений ICMP для megahost.ru
* '''ip neigh (ip link, ip address, ip route, ip rule, ip tunnel и пр.)''' — Показать соседей канального уровня (линки, ip-адреса, маршруты, таблицы правил маршрутизации: утилиты из состава iproute2)
* '''ethtool eth0''' — Статистика интерфейса, режимы текущего соединения и поддерживаемых соединений и прочее
* '''iptstate''' — Мониторинг contrack из iptables, показывает активные трансляции с возможностью их прибить
=== Сетевые сервисы и утилиты ===
* '''rsync -avz -e
* '''rdesktop 192.168.0.1 -u admin -p 'pass' -fzPa8 -k ru'''
* '''xfreerdp 192.168.0.1 -u admin -p 'pass' -k common -g 1280x1024'''
* '''pdsh -w root@host-0[1-7,10] uptime'''
* '''pdcp -w root@host-0[1-7,10], root@otherhost /home/user/.vimrc /root/'''
* '''trickle'''
* '''knockd'''
* '''ngrep'''
* '''netsed'''
* '''autossh'''
* '''iperf'''
* '''#pptpsetup --create <CONNECTION_NAME> --server <PPTP_SERVER_IP> --username <USERNAME> --password <PASSWORD> --encrypt mschap --start'''
* '''#pon <CONNECTION_NAME>'''
* '''#poff <CONNECTION_NAME>'''
* '''mausezahn'''
* '''nemesis'''
* '''nmap'''
* '''zenmap'''
* '''ipcalc'''
* '''clusterssh'''
* '''hping'''
* '''fping -sq 192.168.1.1 192.168.1.254'''
* '''redir --laddr=<IP 1> --lport=80 --caddr=<IP 2> --cport=80'''
* '''siege
==== SSH ====
* '''ssh user@domen.ru -p 2233''' — Подключится к серверу на нестандартный порт 2233 под пользователем user.
* '''ssh 192.168.1.100 «uptime»''' — Выполнить команду на удаленном сервере.
* '''ssh -X 192.168.1.
* '''ssh -L 5555:192.168.0.10:80 root@213.37.57.236''' — После установки соединения твой локальный порт 5555 будет проброшен на 192.168.0.10:80
* '''ssh -f -N -L
* '''ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa''' — Создать пару ключей (секретный и публичный) длинной 2048 бит и положить их в ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub соответственно
* '''ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host_ip'''' — скопировать публичный ключ (id_rsa.pub) на удаленную машину user@machine. Это позволить заходить на machine по ssh без ввода пароля
* '''scp remote_user@remote_host_ip:/etc/rc.d/autostart.sh /<local_dir>''' — Копирование файла /etc/rc.d/autostart.sh с удаленного хоста в локальную директорию <local_dir>
* '''sftp -i ~/.ssh/id_rsa remote_host_ip''' — Подключиться к удаленному, встроенному в openssh, sftp-серверу с авторизацией по ключу
* '''sshfs -o allow_other user@host:/home/user/ /mnt/host_user/''' — монтирует /home/user/ удаленного хоста(host) в /mnt/host_user/. Опция allow_other позволяет другим пользователям обращаться к ресурсу
* Просмотр статистики неудачного логина
<syntaxhighlight lang="bash">
Строка 902 ⟶ 874 :
===== Проброс UDP трафика через SSH туннель =====
: Проброс UDP трафика с узла '''A''' на узел '''C''' через промежуточный узел '''B''', к которому есть доступ по ssh:
<blockquote><syntaxhighlight lang="bash">
ssh -tNf -L12345:127.0.0.1:6789 "B" -l user
</syntaxhighlight></blockquote>
<blockquote><syntaxhighlight lang="bash">
mkfifo /tmp/fifo
nc -l -p 6789 < /tmp/fifo | nc -u "C" 2056 > /tmp/fifo
</syntaxhighlight></blockquote>
<blockquote><syntaxhighlight lang="bash">
mkfifo /tmp/fifo
nc -l -u -p 2056 < /tmp/fifo | nc 127.0.0.1 12345 > /tmp/fifo
</syntaxhighlight></blockquote>
* ''' corkscrew'''
=== Сеть PPPoE ===
* '''pppoeconf''' — поиск и настройка концентратора pppoe.
* '''pon dsl-provider''' — установить соединение.
* '''
== Принтеры, сканеры ==
* '''pdf2ps -dASCII85EncodePages=true -dLanguageLevel=1 input.pdf out.ps'''
* '''psnup -PA2 -pA3
== Криптография ==
* '''openssl req -x509 -nodes -days 730 -subj '/C=Russia/ST=Center/L=Moscow/CN=mysite.org' -newkey rsa:1024 -keyout my_cert.pem -out my_cert.pem ''' — Создать файл с сертификатом, действительным 2 года, закрытым ключом и соответствующими параметрами
* ''' openssl x509 -text -in my_cert.pem ''' — Просмотреть сертификат (если нужно вычленить ключ или сертификат, то cat my_cart.pem и вырезать соответствующую часть)
* '''grub-crypt --md5''' — Создать хеш пароля для /etc/shadow
* '''
* '''openssl aes-128-cbc -d -salt -in pass.aes -out /tmp/pass.txt''' — Расшифровать файл
* '''openssl aes-128-cbc
* '''openssl s_client -host mail.ru -port 443''' — Соединиться с хостом по шифрованному соединению
* '''openssl s_client -
== Кластеры ==
* '''pcs resource create int_ip ocf: heartbeat:IPaddr2 ip=10.10.10.10 cidr_netmask=32 op monitor interval=30s'''
== Мультимедиа ==
=== ffmpeg ===
* '''ffmpeg -i file.avi -vn output.mp3'''
=== mplayer, mencoder ===
==== CUE ====
Строка 955 ⟶ 926 :
* '''cuetag sample.cue track*.flac'''- Прописать теги
==== mplayer ====
* '''mplayer dvd:// -dvd-device <dir>''' — воспроизведение контента DVD из каталога <dir>
* '''mplayer -vf cropdetect''' — определение кропа
* '''mplayer -vf
* '''mplayer -
* '''mplayer -
''':'''
<blockquote>
mplayer file.avi -dumpaudio -dumpfile audio.ac3<
mplayer file.avi -vo null -ao pcm: fast: file=filename.wav<
</blockquote>
==== Кодирование ====
Запись видео с вебкамеры:
<blockquote>
Строка 1109 ⟶ 1078 :
== Обработка графики ==
* '''convert input.tiff output.pdf'''
* '''convert -geometry 60x80 in.png out.png'''
* '''gs -r384 -sDEVICE=jpeg -dNOPAUSE -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=passport.jpg
* '''pdftk 1.pdf 2.pdf cat output 1_plus_2.pdf'''
== Примечания ==
{{примечания}}
|