Настольная книга по Linux: различия между версиями

Содержимое удалено Содержимое добавлено
оформление, орфография
Строка 1:
{{Темы|Linux}}
Все системные администраторы рано или поздно начинают записывать команды в текстовый файлик сразу с нужными параметрами и опциями, чтобы заново не перечитывать man'ыman’ы. Было принято решение его структурировать, и лучше wiki инструмента не нашлось. Информация собрана здесь коллективным разумом, накоплена с опытом, подсмотрена на различных сайтах и в книгах. Убедительная просьба к системным администраторам  — давайте синхронизировать наши знания!
 
== Работа в командной строке ==
=== Настройка ===
 
=== Настройка ===
* '''~/.bashrc''' - Глобальная настройка и запуск программ при первичном входе, и при каждом открытии консоли
* '''~/.bashrc''' — Глобальная настройка и запуск программ при первичном входе, и при каждом открытии консоли
* '''~/.bash_profile''' - Применяется только при входе в систему, автозапуск пользовательских приложений
* '''~/.bash_profile''' — Применяется только при входе в систему, автозапуск пользовательских приложений
* '''~/.bash_logout''' - Выполнение сценариев при выходе
* '''~/.bash_logout''' — Выполнение сценариев при выходе
* '''~/.inputrc''' - Настройка хоткеев
* '''~/.inputrc''' — Настройка хоткеев
<blockquote><syntaxhighlight lang="bash">
"\e[A": history-search-backward
Строка 14:
TAB: menu-complete
</syntaxhighlight></blockquote>
- реализация поиска в history по стрелкам.
Получение клавишных кодов
Строка 22:
0000004
</pre>
- получен код \033[A, аналог \e[A.
* '''echo "«alias iconv='iconv -f cp1251 -t utf8'"» >> .bashrc''' - — Назначаем алиасы (сокращения) командам. Теперь можно будет писать просто '''iconv''' вместо '''iconv -f cp1251 -t utf8'''
 
Чтобы единовременно отменить alias (для использования действия команды по умолчанию, например, в скрипте), нужно перед соответствующей командой поставить "«\"». Например, \ls.
 
=== Горячие клавиши ===
* '''«Esc+.»''' или '''«Alt+.»''' — Вставка последнего аргумента предыдущей(-их, при многократном нажатии) команды (здорово жизнь упрощает)
 
* '''«Shift+PgUP»''' — Просмотреть вывод выходящий за границы экрана
* '''«Esc+.»''' или '''«Alt+.»''' - Вставка последнего аргумента предыдущей(-их, при многократном нажатии) команды (здорово жизнь упрощает)
* '''«Ctrl+a»''' — Перейти в начало строки, '''«Ctrl+e»''' — перейти в конец
* '''«Shift+PgUP»''' - Просмотреть вывод выходящий за границы экрана
* '''«Ctrl+a»''' - Перейти в начало строки, '''«Ctrl+e»''' - перейти в конец
* '''«Home»''', '''«End»''' то же самое, но еще проще
* '''«Ctrl+r»''' или '''«Ctrl+s» ''' - — Поиск по истории, для поиска нажимать несколько раз. '''«Ctrl+n»''' - — в обратную сторону. Для редактирования - — клавиши "«Вправо"» или "«Влево"»
* '''«Ctrl+u»''' - — Вырезает все слева от курсора. Очень удобно!
* '''«Ctrl+w»''' - — Вырезать текст от курсора до начала слова (пробела). Очень удобно!
* '''«Alt+Backspace»''' - — Вырезать слово слева от курсора до спецсимвола (удобно в путях, очень!)
* '''«Ctrl+k»''' - — Вырезать текст от курсора до конца строки
* '''«Alt+b»''' - — Переместить курсор назад на одно слово, '''«Alt+f»''' - — вперёд
* '''«Alt+d»''' - — Вырезать текст от курсора до конца слова
* '''«Ctrl+y»''' - — Вставить вырезанный текст
* '''«Ctrl+l»''' - — Очистить экран
* '''«Ctrl+d»''' - — Завершить сессию, тоже самое, что и exit
* '''«Ctrl+z»''' - — Перевести текущую задачу в фоновый режим и "«усыпить"». '''fg''' ''x'' вернуть процесс (где ''x''=1-…), а '''program &''' запуск программы в фоновом режиме. А а '''bg''' перевести "«усыпленную"» задачу в фоновый режим, так как если бы мы запустили '''program &'''
* '''«Ctrl+s»'''  — Приостановить вывод, '''«Ctrl+q»'''  — возобновить вывод
 
=== Алиасы и функции .*shrc ===
* '''alias psgrep='ps aux | grep --color $(echo $1 | sed "«s/^\(.\)/[\1]/g"»)'''' - — Поиск запущеных приложений по имени (не оптимально, нужен круче)
* '''alias psgrep='ps aux | egrep -i $1'''' - — безкостыльный вариант.
* '''alias dirsz='du -s `pwd`/* | sort -nr | cut -f 2- | while read a; do du -sh "«$a"»; done'''' - — покажет отсортированный размеру список директорий в `pwd`
* '''alias sharethis='python -m SimpleHTTPServer'''' - — Расшаривание папки по http порт 8000, с помощью сервера python
* '''alias hh='history | egrep -i''' - — Поиск в истории команд по ключевому слову без учета регистра
* '''alias p='ping 8.8.8.8 -A'''' - — Пинг публичного dns-сервера
* '''myip(){ lynx --dump 2ip.ru | egrep -o <nowiki>'([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | uniq</nowiki>; }''' - — Выводит внешний ip-адрес вашего интернет-шлюза
* '''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; }''' - — Вывести в стандартный вывод файл без комментариев и пустых строк (например, gr /etc/fstab)
* '''alias pwg='pwgen -cnB 8 10 | while read PASS; do echo -n -e "«$PASS\t"»; echo -n "«$PASS"» | md5sum | cut -f1 -d" "«; done'''' - — Генерирование 10-ти запоминаемых восьмизначных паролей (pwgen -B 8 10), c цифрами (-n), с буквами из верхнего регистра (-с) и хэш md5 к нему (linux only). Хэш подходит для mysql
* '''Функция, эмулирующая поведение redhat'овскойredhat’овской утилиты service (особенно удобна в сочетании с zsh):'''
<blockquote><syntaxhighlight lang="bash">service(){
init_path="/etc/rc.d"
Строка 101 ⟶ 100 :
 
=== Скрипты ===
* ' — Строгие кавычки, передать неинтерпретируемое значение
 
* '''`''' — Обратные кавычки, выполнить содержимое. То же, что и $()
* ' - Строгие кавычки, передать неинтерпретируемое значение
* '''»''' — Двойные кавычки, подстановка переменных и предотвращение разбиения на слова
* '''`''' - Обратные кавычки, выполнить содержимое. То же, что и $()
* '''ping -с 1 domain.com ''';''' echo «host»''' — Пропинговать domain.com одним пакетом, затем просто вывести сообщение
* '''”''' - Двойные кавычки, подстановка переменных и предотвращение разбиения на слова
* '''ping -с 1 domain.com ''';||''' echo «bad host»''' - — Пропинговать domain.com, одним пакетом,в затемслучае простонеудачи вывести сообщение
* '''ping -с 1 domain.com '''||&&''' echo «badok host»''' - — Пропинговать domain.com, в случае неудачиуспеха вывести сообщение
* '''&''' — AND (логическое «И»)
* '''ping -с 1 domain.com '''&&''' echo «ok host»''' - Пропинговать domain.com, в случае успеха вывести сообщение
* '''|''' — Прямая черта, она же пайп (pipe)
* '''&''' - AND (логическое "И")
* '''>''' — Перенаправить вывод (stdout) в файл
* '''|''' - Прямая черта, она же пайп (pipe)
* '''>>''' — Дописать в конец файла
* '''>''' - Перенаправить вывод (stdout) в файл
* '''2 > file''' — Вывод ошибок (stderr) в файл
* '''>>''' - Дописать в конец файла
* '''2 > file&1''' - — Вывод ошибок (stderr) втуда файлже куда и стандартный вывод (stdout)
* '''$!''' — PID последнего запущенного в фоновом режиме процесса
* '''2>&1''' - Вывод ошибок (stderr) туда же куда и стандартный вывод (stdout)
* '''$0''' — Наименование текущего сценария
* '''$!''' - PID последнего запущенного в фоновом режиме процесса
* '''$1, $2, $((i))''' — Первый, второй и i-тый аргументы, переданные программе. i передаётся, например, как переменная из цикла
* '''$0''' - Наименование текущего сценария
* '''$*''' — Все аргументы сценария/команды
* '''$1, $2, $((i))''' - Первый, второй и i-тый аргументы, переданные программе. i передаётся, например, как переменная из цикла
* '''$@''' — Каждый из переданных программе аргументов
* '''$*''' - Все аргументы сценария/команды
* '''$((<выражение>))''' — Выражение в скобках вычисляется
* '''$@''' - Каждый из переданных программе аргументов
* '''$#''' — Число аргументов, передаваемых сценарию
* '''$((<выражение>))''' - Выражение в скобках вычисляется
* '''$$''' — Текущий PID выполняемого сценания
* '''$#''' - Число аргументов, передаваемых сценарию
* '''$-''' — Текущие опции интерпретатора, аналогично применению set
* '''$$''' - Текущий PID выполняемого сценания
* '''$?''' — Код завершения команды. 0 обычно свидетельствует о завершении без ошибок
* '''$-''' - Текущие опции интерпретатора, аналогично применению set
* '''array=(); while read -r; do array+=(«$REPLY»); done < file.txt''' — Cоздать массив array. Элементами будут строки из файла file.txt
* '''$?''' - Код завершения команды. 0 обычно свидетельствует о завершении без ошибок
* '''array=(); while read -r; do array+=("«$REPLY"»); done < file.txt<(<function>)''' - — Cоздать массив array. Элементами будутбудет строкивывод изфункции файлаили file.txtкоманды <function>
* ''' for file in * ; do '''['''[''' -z $oldest || $file -ot $oldest ''']''']''' && oldest=$file; done; echo $oldest''' — Найти самый старый файл в директории
* '''array=(); while read -r; do array+=("$REPLY"); done < <(<function>)''' - Cоздать массив array. Элементами будет вывод функции или команды <function>
* '''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''' — Создать ассоциативный массив и вывести содержимое.
*''' for file in * ; do '''['''[''' -z $oldest || $file -ot $oldest ''']''']''' && oldest=$file ; done; echo $oldest''' - Найти самый старый файл в директории
* '''func() {<команды>}''' — Объявление функции. '''func''' — Вызов
* '''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''' - Создать ассоциативный массив и вывести содержимое.
* '''while true; do firefox& wait $!; done''' — перезапускает процесс firefox сразу после его окончания
* '''func() {<команды>}''' - Объявление функции. '''func''' - Вызов
* '''{<command1>&&<command2>;}''' — объединение команд в единую структуру в пределах процесса
* '''while true; do firefox& wait $!; done''' - перезапускает процесс firefox сразу после его окончания
* '''{(<command1>&&<command2>;})''' — - объединениевыполнение команд в единую структуру в пределах процессаподшелле
* '''for ((var=1; var<101; var++)); do echo «$var»; done''' — Цикл в стиле C
* '''(<command1>&&<command2>)''' - выполнение команд в подшелле
* '''repeat 10 (echo выводим строку; sleep 1)''' — Повторить 10 раз команды в скобках (в zsh)
* '''for ((var=1; var<101; var++)); do echo "$var"; done''' - Цикл в стиле C
* '''rand=$((RANDOM%100)); echo «$rand»''' — Вывести случайное число от 0 до 100
* '''repeat 10 (echo выводим строку; sleep 1 )''' - Повторить 10 раз команды в скобках (в zsh)
* '''rand=$((RANDOM%100)); echo "$rand"''' - Вывести случайное число от 0 до 100
 
Не забываем про фигурные скобки:
Строка 154 ⟶ 152 :
 
=== Калькуляторы ===
* '''let «a = 2 + 2»'''
 
* '''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 "«print 3*5"»'''
* '''python -c "«print (9*5)"»'''
* '''mysql -e "«select 1+2*(1+2)"»'''
 
=== Утилита screen ===
 
Чрезвычайно полезная утилита screen есть в linux. Позволяет она создавать в терминале ssh несколько экранов и удобно переключаться между ними. Также полезен screen в случае если надо делать какие-то опреации по ssh и обрывы связи вредны. Достаточно просто, работать в скрин
 
http://citkit.ru/articles/609/ -- вот хорошая статья
 
* '''screen -ls''' - — Вывести список запущенных сессий screen
* '''screen -r 4541.pts-1.mail''' - — Восстановить подключение к сессии screen с именем 4541.pts-1.mail, после чего можно выбрать окно с запущенными ранее в нем задачами и продолжить работу
* '''screen -x 4541.pts-1.mail''' - — параллельное подключение к сессии screen, для совместной работы в одном терминале двух пользователей, для этого сначала нужно войти в систему под пользователем, создавшим сессию screen.
 
=== Утилита tmux ===
Разрабатывался как замена screen.
 
* '''tmux new''' — Запустить tmux.
Разрабатывался как замена screen.
* '''tmux attach''' — Присоединиться к сессии, работающей в фоне.
 
== Работа с файлами ==
* '''tmux new''' - Запустить tmux.
* '''tmux attach''' - Присоединиться к сессии, работающей в фоне.
 
== Работа с файлами ==
=== Создание ===
* '''fallocate -l 10m filename''' - — резервирование диска под файл размером 10 мегабайт
 
=== Права ===
* '''chmod -R 741 /var/www/files''' — Сменить права рекурсивно (-R) во всей папке files на rwx r-- --x, где: 4 — чтение (r), 2 — запись (w), 1 — выполнение (x)
 
* '''chmod -R 741u+rwx, g+r-xw, a-rw+x /var/www/files''' — - СменитьСмена праваправ рекурсивно (-R) во всей папке files на rwx r-- --x, где: 4u+rwx — – чтениеu (ruser — владелец файла) добавить rwx, 2g+r-xw (group — записьпользователи группы владельца) добавить r убрать xw, a-rw+x (wall — для всех пользователей, эквивалентно ugo) убрать rw добавить x, 1где r — выполнениечтение, w — запись, (x) — выполнение
* '''chattr +Sai''' — Добавление атрибутов к файлу, синхронное изменение всех данных на диск, без кэширования (S); только добавление данных, удаление и переименование запрещено (a); запрещено удаление, изменение или переименование (i) (immutable)
* '''chmod -R u+rwx,g+r-xw,a-rw+x /var/www/files''' - Смена прав рекурсивно (-R) во всей папке files на rwx r-- --x, где u+rwx - u (user - владелец файла) добавить rwx, g+r-xw (group - пользователи группы владельца) добавить r убрать xw, a-rw+x (all - для всех пользователей, эквивалентно ugo) убрать rw добавить x, где r - чтение, w – запись, x - выполнение
* '''chmod g+ws, o= /tmp/test/''' — Включить наследование группы к которой принадлежит /tmp/test/ для всех вновь создаваемых объектов
* '''chattr +Sai''' - Добавление атрибутов к файлу, синхронное изменение всех данных на диск, без кэширования (S); только добавление данных, удаление и переименование запрещено (a); запрещено удаление, изменение или переименование (i) (immutable)
* '''cd <dir> && chown user.user -R .''' — Рекурсивное изменение группы и пользователя всех объектов в <dir>
* '''chmod g+ws,o= /tmp/test/''' - Включить наследование группы к которой принадлежит /tmp/test/ для всех вновь создаваемых объектов
* '''cd <dir> && chown user.user -R .''' - Рекурсивное изменение группы и пользователя всех объектов в <dir>
 
=== Поиск ===
* '''locate foo''' - — Быстрый поиск по файлам, заранее проиндексированным посредством updatedb
* '''mlocate foo''' - — То же самое, но updatedb.mlocate не индексирует заново не изменявшиеся файлы
* '''pinfo bash''' - — Удобная замена info
* '''find /usr/bin -type f -mtime -10−10 -iname '*.log'''' - — Найти все файлы в '/usr/bin', созданные или изменённые в течениитечение последних 10 дней, с именем заканчивающимся на "«.log"» без учета регистра
* '''find /usr/project \( -name *.htm -o -name '*.html' \) -exec enconv -V --convert-to=UTF-8 {} \;''' - — Конвертировать найденные файлы в правильную кодировку
* '''find -iname '*.mp3' -print0 | xargs -0−0 mid3iconv -eCP1251 --remove-v1''' - — Конвертация тегов в UTF-8 (должен быть установлен python-mutagen)
* '''find /bakdir -name bak-20??-??-??.tar.gz | sort | head -n -7−7 | egrep -v 20[01][0-9]-[01][0-9]-01 | while read I ; do rm -v "«$I" »; done''' - — Вымученная изящная конструкция, по очистке бэкап архивов, которая оставляет файлы за последнюю неделю и каждое первое число. find выводит список наших бэкап файлов, формат которых bak-год-месяц-число.tar.gz, sort правильно сортирует, head передает все файлы, кроме последних 7-ми, egrep исключает файлы за первое число, конструкция while удаляет остальное
* '''ls /bakdir/bak-20??-??-??.tar.gz | head -n -7−7 | egrep -v '20[01][0-9]-[01][0-9]-01' | while read I ; do rm -v "«$I" »; done''' - — Еще более изящная и ресурсоемкая конструкция
* '''rm -rf `find ./ -iname '*.svn'`''' - — удаляет все служебные папки SVN
* '''find . -name "«*.*"»| while read i;do cat "«$i"» | grep -H --label="$i" -n "«что нужно найти"»;done''' - — поиск по содержимому файлов в папке
* '''grep -r "«что нужно найти"» /путь/до/папки''' - — поиск по содержимому файлов в папке
* '''shopt -s globstar ; builtin echo **/*.txt''' - — рекурсивный поиск по шаблону в директории (используется только /bin/bash)
 
=== Вывод ===
* '''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 -cjvf /home/user/etc_`date '+%Y-%m-%d' -d yesterday`.tar.bz2 /etc''' - (с)Запаковать в (f)tar-архив и (j)сжать bzip2 папку /etc c текущей датой в имени файла, с (v)подробным выводом
* '''tar -xzvf /home/user/Downloads/centerim-4.22.6.tar.gz -С /opt/''' — (x)Распаковать (z)gzip-архив в /opt
* '''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.gzuse-compress-program=xz -Сxvf /opt/kernel.txz''' — - (x)Распаковать (z)gzipxz-архив в /opt
* '''grep -v ^# /etc/mail.conf | grep -v ^$ ''' — Показать файл без комментариев и пустых строк (неоптимально)
* '''tar --use-compress-program=xz -xvf kernel.txz''' - Распаковать xz-архив
* '''grepegrep -v '^\s*(#|$)' /etc/mail.conf | grep -v ^$ ''' - — Показать файл без комментариев и пустых строк (неоптимальнооптимально)
* '''ls -f1 /var/log/packages/ | wc -l''' — Вывести количество строк (wc -c — байт)
* '''egrep -v '^\s*(#|$)' /etc/mail.conf''' - Показать файл без комментариев и пустых строк (оптимально)
* '''diff -y httpd.conf httpd.con.new''' — Сравнение в две колонки
* '''ls -f1 /var/log/packages/ | wc -l''' - Вывести количество строк (wc -c - байт)
* '''diff -yu httpd.conf httpd.con.new''' — -Унифицированное Сравнениеcравнение (в двеодин колонкистолбец, но читаемо). (рек. colordiff)
* '''tail -n +5 /file''' — Вывести строки, начиная с 5-ой
* '''diff -u httpd.conf httpd.con.new''' - Унифицированное cравнение (в один столбец, но читаемо). (рек. colordiff)
* '''tailegrep -n +5o <nowiki>'([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'</filenowiki>''' - — Вывести строки,только начиная с 5-ойIP
* '''… | awk '{print($1"STRING")}'''' — Вывести то что в пайпе, добавив STRING
* '''egrep -o <nowiki>'([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'</nowiki>''' - Вывести только IP
* '''awk '$1=="string" {print $2}' file1 >> file2''' — Считать файл file1 , если данные в первом столбце равны 'string' добавить в файл file2 данные из второго столбца этой строки
* '''... | awk '{print($1"STRING")}'''' - Вывести то что в пайпе, добавив STRING
* '''… | tr '\n' ' '''' — Заменить все переносы строки на пробелы
* '''awk '$1=="string" {print $2}' file1 >> file2''' - Считать файл file1 , если данные в первом столбце равны 'string' добавить в файл file2 данные из второго столбца этой строки
* '''… | awk '{s += $2} END {print s*9}'''' — Сложить второй столбец и вывести результат умноженный на 9
* '''... | tr '\n' ' '''' - Заменить все переносы строки на пробелы
* '''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
* '''... | awk '{s += $2} END {print s*9}'''' - Сложить второй столбец и вывести результат умноженный на 9
* '''cat /tmp/text | /usr/local/bin/topnwords.pl | head -n 5''' — показать TOP5 слов в файле text
* '''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>'''
 
* '''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
 
== Работа с дисками ==
* '''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''' — реинициализация дисков и разделов
* '''rescan-scsi-bus -l''' - После добавления sata-диска, чтобы он определился системой (полезно для горячей замены!)
* '''cat /proc/scsi/scsi''' — Посмотреть подключенные диски
* '''partprobe''' - реинициализация дисков и разделов
* '''fsarchiver probe''' — Выводит список дисков и разделов
* '''cat /proc/scsi/scsi''' - Посмотреть подключенные диски
* '''df -h''' — Показывает занятость подмонтированных дисков
* '''fsarchiver probe''' - Выводит список дисков и разделов
* '''dfc -h''' — Цветной df
* '''df -h''' - Показывает занятость подмонтированных дисков
* '''dfc -hpydf''' — -Правильная Цветнойзамена df
* '''du -smc --exclude={proc, sys, dev} /* | sort -gr''' — Получаем отсортированный список самых „тяжелых“ каталогов в мегабайтах
* '''pydf''' - Правильная замена df
* '''find . -size +<размер>k''' — Поиск файлов размер которых превышает указанный (или c — для байтов, M — мегабайт, G — гигабайт. В примере, соответственно, килобайты)
* '''du -smc --exclude={proc,sys,dev} /* | sort -gr''' - Получаем отсортированный список самых "тяжелых" каталогов в мегабайтах
* '''ls -lSrh''' — В конце вывода увидим самые большие файлы
* '''find . -size +<размер>k''' - Поиск файлов размер которых превышает указанный (или c — для байтов, M — мегабайт, G — гигабайт. В примере, соответственно, килобайты)
* '''vdir''' — расширенный вывод содержимого директории
* '''ls -lSrh''' - В конце вывода увидим самые большие файлы
* '''hdparm -tT /dev/sda''' — Тестирование производительности диска, ей же можно тонко настроить производительность (обычно не нужно, так как современные системы корректно определяют параметры)
* '''vdir''' - расширенный вывод содержимого директории
* '''dd if=/dev/sdx of=/dev/null bs=1M''' — Вроде как выявление проблем с диском.<ref>Если простое считывание окажется для него серьёзной нагрузкой. Лучше сделать дамп диска, а потом сравнить хэши.</ref>
* '''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]''' - — Температура жестких дисков в системе (раб.<60 °C)
* '''testdisk''' - — Анализ и восстановление файловых систем
* '''parted''' - — Подходит для создания и восстановления разделов
 
=== Горячее подключение дисков SATA ===
* '''echo „- — -“ > /sys/class/scsi_host/host1/scan''' — Сканирование и инициализация нового устройства на порту host1.
 
* '''ls −1 /sys/class/scsi_host/''' — Вывести список портов host используемых для подключения дисков.
* '''echo "- - -" > /sys/class/scsi_host/host1/scan''' - Сканирование и инициализация нового устройства на порту host1.
* '''ls /sys/class/scsi_host/host?/device/target?:?:?/?:?:?:?/block''' — Показать на каких портах hostX подключены диски /dev/sdX.
* '''ls -1 /sys/class/scsi_host/''' - Вывести список портов host используемых для подключения дисков.
* '''echo 1 > /sys/block/sdb/device/delete''' — Деактивировать и удалить из системы диск /dev/sdb.
* '''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) в мегабайтах.
Разметка диска, по сути - запись (таблица разделов в самом начале диска начиная с 447 байта 64 байта) о том где и какие разделы расположены физически на диске. Т.е. редактируя таблицу разделов, данные (находящиеся на жестком диске) остаются нетронутыми.
* '''partprobe -s /dev/sda''' — Перечитывает таблицу разделов блочного устройства.
 
* '''cat /proc/partitions''' — Tаблица разделов, с которыми работает ядро.
* '''sfdisk -luM /dev/sda''' - Информация о разделах на диске (-uM) в мегабайтах.
* '''mkfs.ext3 -L fsroot /dev/sda6''' — Создать файловую систему ext3 c меткой „fsroot“.
* '''partprobe -s /dev/sda''' - Перечитывает таблицу разделов блочного устройства.
* '''tune2fs -L fsroot /dev/sda6''' — Присвоить метку „fsroot“ диску, для удобства монтирования (или e2label /dev/sda6 fsroot).
* '''cat /proc/partitions''' - Tаблица разделов, с которыми работает ядро.
* '''blkid''' — Отображает атрибуты: UUID, метку, тип ФС блочных устройств.
* '''mkfs.ext3 -L fsroot /dev/sda6''' - Создать файловую систему ext3 c меткой "fsroot".
* '''mount LABEL=fsroot /mnt/data''' — Монтрирование по метке раздела.
* '''tune2fs -L fsroot /dev/sda6''' - Присвоить метку "fsroot" диску, для удобства монтирования (или e2label /dev/sda6 fsroot).
* '''sfdisk -d /dev/sda | sfdisk /dev/sdb''' — Копирование таблицы разделов с sda на sdb.
* '''blkid''' - Отображает атрибуты: UUID, метку, тип ФС блочных устройств.
* '''sfdisk -d /dev/sda > sda.mbr.bak''' — Копирование MBR в файл (файл можно редактировать).
* '''mount LABEL=fsroot /mnt/data''' - Монтрирование по метке раздела.
* '''sfdisk /dev/sda < sda.mbr.bak''' — Восстановление MBR из файла.
* '''sfdisk -d /dev/sda | sfdisk /dev/sdb''' - Копирование таблицы разделов с sda на sdb.
* '''fdisk -p ad2 > /tmp/slices''' — Скопировать таблицу слайсов в файл.
* '''sfdisk -d /dev/sda > sda.mbr.bak''' - Копирование MBR в файл (файл можно редактировать).
* '''sfdiskfdisk -f /devtmp/sdaslices < sda.mbr.bakad0''' — -Применить Восстановлениетаблицу MBRслайсов из файла к ad0.
* '''dd if=/dev/sda of=/root/sda.mbr.img bs=512 count=1''' — Копирование MBR в файл, самый надежный способ.
* '''fdisk -p ad2 > /tmp/slices''' - Скопировать таблицу слайсов в файл.
* '''dd if=/dev/zero of=/dev/hda bs=512 count=1''' — Очищаем MBR (внимательно!). Если без таблицы разделов, то bs=446
* '''fdisk -f /tmp/slices ad0''' - Применить таблицу слайсов из файла к ad0.
* '''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/''' - — Расширение xfs раздела налету
 
=== Монтирование ===
* '''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''' — Монтирование виндовых разделов
* '''cat /proc/mounts''' - подробная инфа о примонтированных устройствах. Можно заменить вызовом '''mount''' без аргументов. '''column -t /proc/mounts''' или '''mount | column -t''' то же, но отформатированное. Если нужно коротко, то df -h
* '''mount -t cifscurlftpfs ftp://192.168.0.122/data<ftp_user>:@<ftp_server_ip> /mnt/amigoglobal/data -o user=USER,pass=PASSWORD,uid=1000<local_directory>''' - — Монтирование виндовых разделовфтп-ресурса
* '''curlftpfsmount -o loop ftp:/mnt/<ftp_user>:@<ftp_server_ip>bak/disk/LiveCD/newcd/live.iso /<local_directory>mnt/cdrom/''' - — Монтирование фтп-ресурсаобраза диска
* '''mount -a''' — Монтировать все из fstab (напр. при добавлении ресурсов)
* '''mount -o loop /mnt/bak/disk/LiveCD/newcd/live.iso /mnt/cdrom/''' - Монтирование образа диска
* '''mount -o remount /dev/sda1 /''' — Перемонтировать. Например, при изменении опций
* '''mount -a''' - Монтировать все из fstab (напр. при добавлении ресурсов)
* '''mount --bind olddir newdir''' — Примонтировать одну директорию к другой
* '''mount -o remount /dev/sda1 /''' - Перемонтировать. Например, при изменении опций
* '''fuser -v /opt''' — Узнать, кто занимает ресурс. Например, если не дает размонтировать
* '''mount --bind olddir newdir''' - Примонтировать одну директорию к другой
* '''fuser -km /opt''' — Принудительное размонтирование раздела
* '''fuser -v /opt''' - Узнать, кто занимает ресурс. Например, если не дает размонтировать
* '''umount -l /dev/sdb1''' — Размонтировать, когда ресурс освободится
* '''fuser -km /opt''' - Принудительное размонтирование раздела
* '''archivemount archivemount /home/directory.zip /mnt''' — Примонтировать архив в директорию /mnt
* '''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'''  — Получаем новое блочное устройство decrypted, с которым можно работать, как с обычным разделом
 
=== Шифрование директории ===
* '''mv /images /images_bak'''  — Переименовываем директорию, которую хотим зашифровать, чтобы освободить имя директории
* '''mkdir /images/'''  — Создаем директорию, которую будем шифровать
* '''mount -t ecryptfs /images /images'''  — Монтируем шифрованную директорию. Отвечаем на вопросы : 1, 1, n, n
* '''cp -av /images_bak/* /images/'''  — Копируем файлы в зашифрованную директорию. Если директорию размонтировать теперь, файлы будут зашифрованы. Архив можно удалять (rm -fr /images_bak)
 
=== Swap ===
* '''mkswap -L swap /dev/sda5''' - — создаём файловую систему для раздела подкачки, устанавливаем метку swap
* '''swapon /dev/sda5''' - — подключаем раздел.
* '''swapon -a''' - — подключаем все разделы с подкачкой прописаные в /etc/fstab.
 
Создаем файл подкачки вместо раздела. Позволяет перераспределить дисковые ресурсы(при LVM, RAID, XEN), но слегка замедляет работу подкачки.
Обычно размер файла подкачки предпочитают устанавливать равным объему оперативной памяти.
 
* '''dd if=/dev/zero of=/file.swp bs=1M count=1024''' - — создаем файл необходимого размера (у нас 1Гб).
* '''mkswap /file.swp''' - — создаём файловую систему внутри файла.
* '''swapon /file.swp''' - — подключаем.
* '''swapoff /dev/sda5''' - — отключаем подкачку.
* '''swapoff -a''' - — отключаем все использующиеся файлы и устройства подкачки.
* '''/file.swp none swap sw 0 0''' - — запись в fstab
* '''echo 0 > /proc/sys/vm/swappiness''' - — использовать swap в крайнем случае
 
=== Образ диска ===
* '''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 — размер кэша на винчестере. Побитное копирование раздела с последующей упаковкой, я использую для бэкапа свеже настроенных систем (копирует вместе с файловым мусором, зато надежно).
* '''dd if=/dev/zero of=/null bs=1024 ; rm -f /null''' - Забиваем свободное место на диске нулями, чтобы dd мусор не сохранял, и сразу удаляем.
* '''gunzip -с /mnt/bak/sda2.img.gz | dd of=/dev/sda2 bs=16M''' — Восстановление из сжатого образа.
* '''dd if=/dev/sda2 bs=16M | gzip -c > /mnt/bak/sda2.img.gz''' - где bs=16M - размер кэша на винчестере. Побитное копирование раздела с последующей упаковкой, я использую для бэкапа свеже настроенных систем (копирует вместе с файловым мусором, зато надежно).
* '''На оригинальной системе: dd if=/dev/sdX bs=16065b | netcat <REMOTE_IP> <REMOTE_PORT>. На целевой системе: netcat -l -p <PORT> | dd of=/dev/sdY bs=16065b''' — Копирование раздела по сети.
* '''gunzip -с /mnt/bak/sda2.img.gz | dd of=/dev/sda2 bs=16M''' - Восстановление из сжатого образа.
* '''На оригинальной системе: ddcat if=/dev/sdX bs=16065bsda | netcat <REMOTE_IP> <REMOTE_PORT>. На целевой системе: netcat -l -p <PORT> | dd> of=/dev/sdYsda bs=16065b''' - — Копирование раздела по сети. Вариант без использования dd
* '''На оригинальной системе: cat /dev/sda | netcat <REMOTE_IP> <REMOTE_PORT>. На целевой системе: netcat -l -p <PORT> | > /dev/sda ''' - Копирование раздела по сети. Вариант без использования dd
 
=== Работа с 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 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 — деактивизировать)
* '''vgscan''' - Поиск по системе виртуальных групп VG
* '''pvscan''' — Поиск доступных физических томов и отображение сравнительной информации о них
* '''vgchange -ay''' - Активизировать виртуальную группу (-an - деактивизировать)
* '''pvdisplay /dev/sda1''' — Просмотр полной информации о физическом томе.
* '''pvscan''' - Поиск доступных физических томов и отображение сравнительной информации о них
* '''pvdisplaypvs /dev/sda1''' - — Просмотр полнойкраткой информации о физическом томе.
* '''pvcreate /dev/sda1''' — Подготовка физического тома PV (тип раздела 8Eh)
* '''pvs /dev/sda1''' - Просмотр краткой информации о физическом томе.
* '''pvcreatepvmove /dev/sda1''' — - ПодготовкаОсвобождение физического тома PV (типперенос разделаданных 8Ehна другие физические тома)
* '''pvresize /dev/sda2''' — Расширить физический том
* '''pvmove /dev/sda1''' - Освобождение физического тома (перенос данных на другие физические тома)
* '''vgdisplay VG''' — Просмотреть полную информацию о виртуальной группе
* '''pvresize /dev/sda2''' - Расширить физический том
* '''vgdisplayvgs VG''' - — Просмотреть полнуюкраткую информацию о виртуальной группе
* '''vgcreate VG /dev/sda1 /dev/sdb1''' — Создание виртуальной группы на основе двух физических томов
* '''vgs VG''' - Просмотреть краткую информацию о виртуальной группе
* '''vgcreatevgremove VG /dev/sda1 /dev/sdb1''' — - СозданиеУдаление виртуальной группы на основе двух физических томов
* '''vgremovevgextend VG /dev/sdc1''' — Добавление физического -тома Удалениек виртуальной группыгруппе
* '''vgextendvgreduce VG /dev/sdc1sda1''' — - ДобавлениеУдаление физического тома киз виртуальной группегруппы
* '''vgexport VG''' — Подготовка виртуальной группы для переноса на иную машину
* '''vgreduce VG /dev/sda1''' - Удаление физического тома из виртуальной группы
* '''vgexportvgimport VG /dev/sda1 /dev/sda2''' — - ПодготовкаИмпорт виртуальной группы для переноса на инуюдругой машинумашины)
* '''lvcreate -L1500 -nlv00 VG''' — Создание логического тома (LV) с именем nlv00 и размером 1500 Мб
* '''vgimport VG /dev/sda1 /dev/sda2''' - Импорт виртуальной группы (с другой машины)
* '''lvcreate -l 100 %FREE -n nlv00 VG''' — Создаем „логический том“ на все доступное пространство
* '''lvcreate -L1500 -nlv00 VG''' - Создание логического тома (LV) с именем nlv00 и размером 1500 Мб
* '''lvremove /dev/VG/home''' — Удаление логического тома
* '''lvcreate -l 100%FREE -n nlv00 VG''' - Создаем "логический том" на все доступное пространство
* '''lvremovelvextend -L120M /dev/VG/home''' — -Увеличение Удалениеразмера логического тома до указаной величины
* '''lvextend -L120ML+100M /dev/VG/home''' - — Увеличение размера логического тома дона указанойуказанную величинывеличину
* '''lvextend -Ll +100M100 %FREE /dev/VGmapper/homescientific-root''' — -Расширить Увеличение размераразмер логического тома на указаннуюмаксимально возможную величину
* '''lvresize -L +10G /dev/VG/home''' — Добавляет в логический том 10Гб, при их наличии в физическом томе.
* '''lvextend -l +100%FREE /dev/mapper/scientific-root''' - Расширить размер логического тома на максимально возможную величину
* '''lvreduce -L120M /dev/VG/home''' — Уменьшение размера логического тома до указаной величины
* '''lvresize -L +10G /dev/VG/home''' - Добавляет в логический том 10Гб, при их наличии в физическом томе.
* '''lvreduce -L120ML-100M /dev/VG/home''' - — Уменьшение размера логического тома дона указанойуказанную величинывеличину
* '''resize2fs /dev/VG/home''' — Расширяем раздел находу на все доступное пространство (для ext3)
* '''lvreduce -L-100M /dev/VG/home''' - Уменьшение размера логического тома на указанную величину
* '''mkfs.ext3 /dev/VG/home''' — Создаем файловую систему
* '''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 '0-5 20,22*/15 * *3 1-5* root bak.sh' >> /etc/crontab''' - Запись в означает, что — bak.sh будет выполняться cron'омкаждые с15 нулевой по пятую минуту в 20 и в 22 каждый день сминут, понедельникакаждое потретье пятницучисло
* '''ps aux | grep process''' — Вывод системной информации по конкретному процессу
* '''echo '*/15 * 3 * root bak.sh' >> /etc/crontab''' - bak.sh будет выполняться каждые 15 минут, каждое третье число
* '''kill -TERM `cat /usr/local/apache2/logs/httpd.pid`''' — Послать сигнал процессу
* '''ps aux | grep process''' - Вывод системной информации по конкретному процессу
* '''pgrep <PROGRAM_NAME>''' — Выводит PID’ы процессов
* '''kill -TERM `cat /usr/local/apache2/logs/httpd.pid`''' - Послать сигнал процессу
* '''pgreppidof <PROGRAM_NAME>''' - — Выводит PID'ыPID’ы процессов
* '''pkill httpd''' — Послать сигнал найденным процессам
* '''pidof <PROGRAM_NAME>''' - Выводит PID'ы процессов
* '''pkillkillall /usr/sbin/httpd''' - — Послать сигнал найденнымпроцессу только по полному процессамимени
* '''nice -n −20 command''' — Запустить command с наивысшим приоритетом (-n 19 — наименьший)
* '''killall /usr/sbin/httpd''' - Послать сигнал процессу только по полному имени
* '''niceionice -n -20c3 command''' - — Запустить command с наивысшимнаименьшем приоритетом по системе ввода-вывода (-nс1 — 19наивысший). -(только для планировщика наименьшийCFQ)
* '''LANG=en_EN[.UTF-8] command''' — Запуск программы в другой локали [.кодировке]
* '''ionice -c3 command''' - Запустить command с наименьшем приоритетом по системе ввода-вывода (-с1 - наивысший). (только для планировщика CFQ)
* '''gnome-screenshot --window --delay=5''' — Сделать скриншот активного окна, с задержкой 5 секунд
* '''LANG=en_EN[.UTF-8] command''' - Запуск программы в другой локали [.кодировке]
* '''espeak -v ru „таки да“ --stdout -s 60 | aplay''' — Сгенерировать и озвучить слова в кавычках с помощью синтезатора речи. Язык — русский, скорость 60 (слов в минуту)
* '''gnome-screenshot --window --delay=5''' - Сделать скриншот активного окна, с задержкой 5 секунд
* '''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)
* '''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''' - — Выключить машину через 10 минут
* '''shutdown -r 05:00''' - — Запланировать перезагрузку на 05 часов 00 минут (время в 24-м формате, от 0 до 23)
* '''shutdown -c''' - — Отменить запланированную кем-нибудь перезагрузку
 
=== Планировщик задач ===
* '''cron''' - — Для периодического выполнения заданий
** '''crontab -e''' - — править список заданий
** '''crontab -l''' - — вывести список заданий
* '''at''' - — Для разового выполнения заданий
<blockquote><syntaxhighlight lang="text">
# at 7:30
Строка 636 ⟶ 621 :
 
=== Конфигурация ===
* '''ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime''' — Установка часового пояса
 
* '''ntpdate ntpserver''' — Жесткая синхронизация времени (быстрая смена времени может быть вредна некоторым сервисам, рек. ntpd)
* '''ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime''' - Установка часового пояса
* '''sysctl -a''' — Вывести текущие настройки ядра
* '''ntpdate ntpserver''' - Жесткая синхронизация времени (быстрая смена времени может быть вредна некоторым сервисам, рек. ntpd)
* '''sysctl -ap''' — - Вывести текущиеПрименить настройки ядра /etc/sysctl.conf (для слаки вероятно параметры задавать в rc.local)
* '''hostname -F /etc/hostnamefile''' — Установить сетевое имя из файла (см. ниже)
* '''sysctl -p''' - Применить настройки ядра /etc/sysctl.conf (для слаки вероятно параметры задавать в rc.local)
* '''sysctl hw.model hw.ncpu hw.physmem machdep.tsc_freq''' — Сведения о системе (FreeBSD)
* '''hostname -F /etc/hostnamefile''' - Установить сетевое имя из файла (см. ниже)
* '''sysctl hw.model hw.ncpu hw.physmem machdep.tsc_freq''' - Сведения о системе (FreeBSD)
 
=== Для Debian-like ===
* '''/etc/hostname''' — Прописываем имя машины
 
* '''dpkg-reconfigure locales''' — Установка системной локали
* '''/etc/hostname''' - Прописываем имя машины
* '''dpkg-reconfigure locales''' - Установка системной локали
 
=== Для RHEL-like ===
* '''/etc/sysconfig/network''' — Прописываем имя машины (напр. HOSTNAME=localhost.localdomain)
 
* '''/etc/sysconfig/clock''' — Правка часового пояса
* '''/etc/sysconfig/network''' - Прописываем имя машины (напр. HOSTNAME=localhost.localdomain)
* '''/etc/sysconfig/clock''' - Правка часового пояса
 
=== Для Slackware ===
* '''/etc/HOSTNAME''' — Прописываем имя машины.
 
* '''/etc/HOSTNAME''' - Прописываем имя машины.
 
=== Пользователи и группы ===
* '''chfn''' — изменение информации о пользователе
 
* '''chfn''' - изменение информации о пользователе
<blockquote><syntaxhighlight lang="bash">
# chfn -o 'User for ftp' userftp
</syntaxhighlight></blockquote>
* '''useradd -r -N -g <groupname> --uid 1000 <username>''' - — Создать системного пользователя <username>. -N не даёт создавать одноимённую группу для пользователя, -g <groupname> - — назначает основной для пользователя группу <groupname>
* '''userdel -r <username>''' - — Удалить пользователя <username> вместе с домашним каталогом
* '''usermod -g <group_main> -G <Group1>, <Group2> <username>''' - — Назначить пользователю <username> основной группу <group_main> и включить его в две дополнительные группы <Group1> и <Group2>
* '''vipw''' - — Редактор vi блокирует /etc/passwd, так, чтобы другие команды не могли модифицировать его в то же самое время
* '''vigr''' - — Редактор vi блокирует /etc/group, так, чтобы другие команды не могли модифицировать его в то же самое время
* '''visudo''' - — Спец редактор vi для правки /etc/sudoers. ('''visudo -c''' - — проверка синтаксиса)
* '''PASS=666; useradd testuser -m -p $(echo $PASS | mkpasswd -m sha-512 -s)''' - — Создание пользователя в скрипте сразу с паролем
* Использование утилиты '''newusers''' для массового создания системных пользователей по шаблону "user1„user1 — - userN"userN“ со случайными паролями; список пользователей с настройками и паролями выводится в файл users.txt:
<blockquote><syntaxhighlight lang="bash">
uid=`cat /etc/passwd | cut -d ":" -f 3 | sort -gr | head -1`
Строка 680 ⟶ 660 :
</syntaxhighlight></blockquote>
 
* '''groupadd <group_name>''' - — Создать группу <group_name>
* '''groupdel <group_name>''' - — Удалить группу <group_name>
* '''groupmod -n <new_group_name> <old_group_name>''' - — Переименовать группу <old_group_name> в <new_group_name>
* '''ssh sudouser@servername '/usr/bin/sudo /usr/sbin/usermod --expiredate 1 username &&/usr/bin/sudo /usr/bin/pkill -u username''''  — запускается удаленно, под пользователем у которого есть sudo, лочит (lock) юзера в независимости от типа авторизации (пасс/key) в отличии от '''usermod -L''' и '''passwd -l''', '''pkill''' выкидывает (kick) из сессии.
* '''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''' — Показать загруженные модули ядра
 
* '''lsmodmodinfo foo''' - — Показать загруженныеинформацию о модуле модули(зависимости ядраи т. п.)
* '''modprobe foo''' — Включить модуль
* '''modinfo foo''' - Показать информацию о модуле (зависимости и т.п.)
* '''modprobe -vr foo''' — -Удалить Включитьнеиспользуемый модуль (почти тоже что и *rmmod foo*)
* '''modprobe -vr pcspkr''' — Выключить динамик на материнской плате. А еще лучше echo 'blacklist pcspkr' >> /etc/modprobe.d/blacklist
* '''modprobe -vr foo''' - Удалить неиспользуемый модуль (почти тоже что и *rmmod foo*)
* '''cat /dev/dsp > wave-file.wav''' — Записываем несжатый аудио‐поток с микрофона компьютера через вход звуковой карты
* '''modprobe -vr pcspkr''' - Выключить динамик на материнской плате. А еще лучше echo 'blacklist pcspkr' >> /etc/modprobe.d/blacklist
* '''cat wave-file.wav > /dev/dsp''' — Проиграть файл
* '''cat /dev/dsp > wave-file.wav''' - Записываем несжатый аудио‐поток с микрофона компьютера через вход звуковой карты
* '''cat wave-file.wav > /dev/dsp''' - Проиграть файл
 
=== Мониторинг ===
* '''htop'''  — Правильная замена top
* '''vmstat 5'''  — Подробные сведения о системе виртуальной памяти
* '''dstat'''  — Удобный генератор статистики по ресурсам.
* '''iostat 5 -m -x'''  — Нагрузка на разделы дисков в мегабайтах, с усредненным значением за 5 секунд
* '''iotop'''  — Анализ нагрузки отдельными программами на дисковую подсистему (python)
* '''atop'''  — расширенный top (диски, память, сеть)
* '''tailf''' или '''tail -f /путь/к/логу'''  — Просмотр изменений лога
* Нажатие '''Shift+f''' в '''less''' аналогично поведению tailf
* '''iftop'''  — Статистика по сетевому интерфейсу в реальном времени
* '''vnstat'''  — Простой, но весьма полезный учётчик трафика
* '''ifstat -TtSnqA -i wimax0'''  — Статистика по конкретному сетевому интерфейсу и по общему трафику в реальном времени
* '''apachetop''' и '''mytop'''  — Статистика в реальном времени по запросам apache и mysql соответственно
* '''iptraf'''  — Грамотный сетевой монитор
* '''watch -n 1 <program>'''  — Запускать программу раз в 1 секунду. Удобно наблюдать за выводом программ
* '''script -t 2> timingfile'''  — Записать лог терминальной сессии с отметками времени
* '''scriptreplay timingfile'''  — Проиграть записанный лог
* '''nethogs'''  — Показывает сетевое потребление трафика процессом
* '''tcpstat'''  — Статистика сетевых интерфейсов
* '''cat /proc/net/nf_conntrack''' - — Посмотреть таблицу трансляции сетевых адресов (NAT)
* Перенаправляем вывод какого-нибудь лога (скажем, syslog) на консоль (скажем, девятую)  — заносим (или раскомментируем) в файле /etc/rsyslog.conf подобные строки:
 
daemon,mail.*;\
Строка 761 ⟶ 741 :
 
=== Журналирование ===
* '''/home/adm/script.sh 2>&1 | /usr/bin/logger -t event_name''' - — запись всех сообщение от script.sh в системный журнал
 
=== Ядро ===
* '''lsmod''' - — Показать загруженные модули ядра
* '''modprobe foo''' - — Включить модуль
* '''modprobe -vr foo''' - — Удалить неиспльзуемый модуль (почти тоже что и *rmmod foo*)
 
=== Пересборка ядра ===
 
* Скачать ядро, разархивировать и перейти в папку с исходниками (cd /usr/src/linux-2.6.30)
* '''make config''' - — Конфигурация сборки ядра создается файл .config (удобнее menuconfig или xconfig). Для надежности можно взять конфиг уже рабочей системы и править его (cp /boot/config-generic-2.6.29.4 /usr/src/linux-2.6.30/.config)
* '''make dep''' - — Создание файлов зависимостей
* '''make clean''' - — Очистка от ранее скомпилированных модулей
* '''make''' - — Компиляция ядра
* '''make kernelversion''' - — Узнать версию скомпилированного ядра
* '''make install''' - — Установка ядра (желательно делать это вручную cp arch/i386/boot/bzImage /boot/bzImage-2.6.23.1 и cp System.map /boot/System.map-2.6.23.1)
* '''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''' - — Пересборка initrd
* И добавить ядро в загрузчик
 
== Сети ==
 
{| 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)
* '''/etc/resolv.conf''' — DNS-сервера провайдера (для RHEL-like можно также указать в конфиге DNS{1,2}=80.80.111.254, он приоритетней)
* '''ip route add 192.168.124.0/24 via 192.168.0.220''' — Добавить маршрут (временно, до первой перезагрузки)
* '''/etc/sysctl.conf''' — Для маршрутизации пакетов в системе net.ipv4.ip_forward = 1 (или в rc.local добавить строку: echo 1 > /proc/sys/net/ipv4/ip_forward)
* '''ip router adda 192.168.124.0/24 via 192.168.0.220'''  — Добавить маршрут (временно,краткая дозапись первойпредыдущей перезагрузкикоманды)
* '''iproute radd adefault 192.168.124.0/24 viagw 192.168.01.2201'''  — Добавить маршрут (краткаяпо записьумолчанию через шлюз 192.168.1.1 (временно, предыдущейдо командыперезагрузки)
* '''routeip addr add default gw 192.168.10.1100/24 dev eth0'''  — Добавить маршрутIP-адрес по умолчанию через шлюз 192.168.1.1интерфейсу (временно, до первой перезагрузки); для совместимости с ifconfig в конце добавить „label eth0:0“
* '''vconfig <NET_DEV> <VLAN_ID>''' — Добавить тегированный интерфейс (предварительно убедиться, что подгружен модуль 802.1q); устаревший вариант
* '''ip addr add 192.168.0.100/24 dev eth0''' — Добавить IP-адрес интерфейсу (временно, до первой перезагрузки); для совместимости с ifconfig в конце добавить "label eth0:0"
* '''vconfigip <NET_DEV>link <VLAN_ID>add link wimax0 name mgmt type vlan id 123'''  — Добавить тегированный интерфейс (предварительнос именем mgmt и vlan_id убедиться,равным что123 подгруженна модульинтерфейсе 802.1q)wimax0; устаревшийсовременный вариант
* '''ip -details link show dev mgmt''' — Посмотреть созданный интерфейс
* '''ip link add link wimax0 name mgmt type vlan id 123''' — Добавить тегированный интерфейс с именем mgmt и vlan_id равным 123 на интерфейсе wimax0; современный вариант
* '''ip -detailss link show dev mgmtup'''  ПосмотретьВывести статистику по созданныйподнятым интерфейсинтерфейсам
* '''brctl addbr <BRIDGE_NAME>''' — Создать контейнер интерфейсов для коммутатора (нужен модуль ядра bridge)
* '''ip -s link show up''' - Вывести статистику по поднятым интерфейсам
* '''brctl addif <BRIDGE_NAME> <IFACE>''' — Добавить интерфейс в созданный коммутатор
* '''brctl addbr <BRIDGE_NAME>''' — Создать контейнер интерфейсов для коммутатора (нужен модуль ядра bridge)
* '''brctl addif <BRIDGE_NAME> <IFACE>''' — Добавить интерфейс в созданный коммутатор
 
=== Для Debian-like ===
* '''/etc/network/interfaces''' — Файл конфигурации интерфейсов
 
* '''/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
* '''/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)
* '''/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 секунды
* '''traceroute -i eth3 ya.ru''' - Трассировать через определенный интерфейс (для отладки маршрута)
* '''mtr ya.ru''' — traceroute и ping в одном флаконе
* '''ping -I eth1 -i4 -c3 host''' - Пропинговать хост через eth1 три раза с интрервалом в 4 секунды
* '''ifconfig''' — Вывод конфигурации всех интерфейсов (рек. ip addr)
* '''mtr ya.ru''' - traceroute и ping в одном флаконе
* '''netstat -tunap''' — Список всех портов и соединений (lsof -i -n)
* '''ifconfig''' - Вывод конфигурации всех интерфейсов (рек. ip addr)
* '''netstat -tnlpu''' — Список всех слушающих приложений и соответствующих tcp/udp портов. Чтобы видеть все приложения, запускать необходимо от рута
* '''netstat -tunap''' - Список всех портов и соединений (lsof -i -n)
* '''arp''' — Вывод arp-таблицы (нужно для выяснения физической доступности в сети, или выяснения МАС-адреса соседа). Правильнее ip neigh (или ip n)
* '''netstat -tnlpu''' - Список всех слушающих приложений и соответствующих tcp/udp портов. Чтобы видеть все приложения, запускать необходимо от рута
* '''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''' — Ищем незнакомый трафик в сети
* '''arp''' - Вывод arp-таблицы (нужно для выяснения физической доступности в сети, или выяснения МАС-адреса соседа). Правильнее ip neigh (или ip n)
* '''tcpdump -c 100 -nni vlan100 dst megahost.ru and icmp''' — Отфильтровать 100 сообщений ICMP для megahost.ru
* '''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''' - Ищем незнакомый трафик в сети
* '''ip neigh (ip link, ip address, ip route, ip rule, ip tunnel и пр.)''' — Показать соседей канального уровня (линки, ip-адреса, маршруты, таблицы правил маршрутизации: утилиты из состава iproute2)
* '''tcpdump -c 100 -nni vlan100 dst megahost.ru and icmp''' - Отфильтровать 100 сообщений ICMP для megahost.ru
* '''ethtool eth0''' — Статистика интерфейса, режимы текущего соединения и поддерживаемых соединений и прочее
* '''ip neigh (ip link, ip address, ip route, ip rule, ip tunnel и пр. )''' - Показать соседей канального уровня (линки, ip-адреса, маршруты, таблицы правил маршрутизации: утилиты из состава iproute2)
* '''iptstate''' — Мониторинг contrack из iptables, показывает активные трансляции с возможностью их прибить
* '''ethtool eth0''' - Статистика интерфейса, режимы текущего соединения и поддерживаемых соединений и прочее
* '''iptstate''' - Мониторинг contrack из iptables, показывает активные трансляции с возможностью их прибить
 
=== Сетевые сервисы и утилиты ===
* '''rsync -avz -e "ssh„ssh -p 9876"9876“ root@192.168.222.20:/home/$USRNAME/Desktop/ /home/$USERNAME/Desktop --del --exclude="»*.avi" --bwlimit=75''' - — Синхронизировать содержимое директории /home/Desktop на двух машинах посредством rsync через ssh (ssh-сервер на порту 9876, ограничение пропускной способности - — 75 килобайт в секунду)
* '''rdesktop 192.168.0.1 -u admin -p 'pass' -fzPa8 -k ru'''  — Подключение к RDP серверу со сжатием, кэшированием, на полный экран, с русской раскладкой.
* '''xfreerdp 192.168.0.1 -u admin -p 'pass' -k common -g 1280x1024'''  — Подключение к RDP серверу под соответствующим пользователем с соответствующим паролем, раскладкой, в окне соответствующего разрешения. Клиент  — допиленный rdesktop
* '''pdsh -w root@host-0[1-7,10] uptime'''  — Выполнить команду uptime на хостах с 1 по 7 и на 10ом. Предварительно должен быть настроен вход ssh по ключам.
* '''pdcp -w root@host-0[1-7,10], root@otherhost /home/user/.vimrc /root/'''  — Копировать локальный файл .vimrc в папку /root на удаленных хостах. pdsh должен быть установлен на всех хостах
* '''trickle'''  — Шейпер трафика (неудобный)
* '''knockd'''  — Забавный инструмент ограничения доступа к портам
* '''ngrep'''  — Простой и удобный сниффер
* '''netsed'''  — Модификация трафика на лету
* '''autossh'''  — Поддержания ssh соединения
* '''iperf'''  — Анализ пропускной способности канала (генератор TCP и UDP трафика). iperf -s  — на сервере, iperf -c <server_ip>  — на клиенте
* '''#pptpsetup --create <CONNECTION_NAME> --server <PPTP_SERVER_IP> --username <USERNAME> --password <PASSWORD> --encrypt mschap --start'''  — Создать и поднять pptp соединение
* '''#pon <CONNECTION_NAME>'''  — Поднять туннель
* '''#poff <CONNECTION_NAME>'''  — Отключить туннель
* '''mausezahn'''  — Грамотный конструктор сетевых пакетов-генератор трафика
* '''nemesis'''  — Также конструктор сетевых пакетов-генератор трафика
* '''nmap'''  — Сетевой сканер
* '''zenmap''' - — gui к нему
* '''ipcalc'''  — Калькулятор для расчёта сетей
* '''clusterssh''' - — Мультиплексор для ssh (и telnet) подключений
* '''hping''' - — сканер и конструктор сетевых пакетов
* '''fping -sq 192.168.1.1 192.168.1.254''' - — Пропинговать диапазон адресов
* '''redir --laddr=<IP 1> --lport=80 --caddr=<IP 2> --cport=80''' - — Простое перенаправление tcp сервиса на другой ip адрес и порт
* '''siege mysite.ru -d1 -r10 -c250''' - — Нагрузочное тестирование сайта
 
==== SSH ====
* '''ssh user@domen.ru -p 2233''' — Подключится к серверу на нестандартный порт 2233 под пользователем user.
 
* '''ssh 192.168.1.100 «uptime»''' — Выполнить команду на удаленном сервере.
* '''ssh user@domen.ru -p 2233''' - Подключится к серверу на нестандартный порт 2233 под пользователем user.
* '''ssh -X 192.168.1.100200 "uptime"«iceweasel &» &''' — -Запустить графическое Выполнитьприложение, командуустановленное на удаленном сервере.
* '''ssh -L 5555:192.168.0.10:80 root@213.37.57.236''' — После установки соединения твой локальный порт 5555 будет проброшен на 192.168.0.10:80
* '''ssh -X 192.168.1.200 "iceweasel &" &''' - Запустить графическое приложение, установленное на удаленном сервере.
* '''ssh -f -N -L 55554080:192.168.0.10internal_server:8022 rootproxy_user@213.37.57.236proxy_server''' — -Пробросить После22 установкипорт соединенияinternal_server’а на твойсвой локальный 4080 порт 5555через будетвнешний проброшен на 192.168.0.10:80proxy_server
* '''ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa''' — Создать пару ключей (секретный и публичный) длинной 2048 бит и положить их в ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub соответственно
* '''ssh -f -N -L 4080:internal_server:22 proxy_user@proxy_server''' - Пробросить 22 порт internal_server'а на свой локальный 4080 порт через внешний proxy_server
* '''ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host_ip'''' — скопировать публичный ключ (id_rsa.pub) на удаленную машину user@machine. Это позволить заходить на machine по ssh без ввода пароля
* '''ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa''' - Создать пару ключей (секретный и публичный) длинной 2048 бит и положить их в ~/.ssh/id_rsa и ~/.ssh/id_rsa.pub соответственно
* '''scp remote_user@remote_host_ip:/etc/rc.d/autostart.sh /<local_dir>''' — Копирование файла /etc/rc.d/autostart.sh с удаленного хоста в локальную директорию <local_dir>
* '''ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host_ip'''' - скопировать публичный ключ (id_rsa.pub) на удаленную машину user@machine. Это позволить заходить на machine по ssh без ввода пароля
* '''sftp -i ~/.ssh/id_rsa remote_host_ip''' — Подключиться к удаленному, встроенному в openssh, sftp-серверу с авторизацией по ключу
*'''scp remote_user@remote_host_ip:/etc/rc.d/autostart.sh /<local_dir>''' - Копирование файла /etc/rc.d/autostart.sh с удаленного хоста в локальную директорию <local_dir>
* '''sshfs -o allow_other user@host:/home/user/ /mnt/host_user/''' — монтирует /home/user/ удаленного хоста(host) в /mnt/host_user/. Опция allow_other позволяет другим пользователям обращаться к ресурсу
*'''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:
- на узле '''A''' - — проброс 12345 порта с узла A на порт 6789 узла B
<blockquote><syntaxhighlight lang="bash">
ssh -tNf -L12345:127.0.0.1:6789 "B" -l user
</syntaxhighlight></blockquote>
- на узле '''B''' - — переводим содержимое TCP пакетов в FIFO и тут же забираем и упаковываем в UDP и отсылаем на узел C порт 2056:
<blockquote><syntaxhighlight lang="bash">
mkfifo /tmp/fifo
nc -l -p 6789 < /tmp/fifo | nc -u "C" 2056 > /tmp/fifo
</syntaxhighlight></blockquote>
- на узле '''A''' - — переводим содержимое UDP пакетов, отсылаемых локальным сервисом на localhost:2056 в FIFO и сразу забираем из FIFO и отправляем на localhost:12345:
<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''' - — Утилита для работы ssh через https прокси
 
=== Сеть PPPoE ===
* '''pppoeconf''' — поиск и настройка концентратора pppoe.
 
* '''pon dsl-provider''' — установить соединение.
* '''pppoeconf''' - поиск и настройка концентратора pppoe.
* '''pon dsl-providerpoff''' — - установитьразорвать соединение.
* '''poff''' - разорвать соединение.
 
 
 
== Принтеры, сканеры ==
* '''pdf2ps -dASCII85EncodePages=true -dLanguageLevel=1 input.pdf out.ps''' - — кодирование PDF в PostScript версии 1
* '''psnup -PA2 -pA3 -1−1 out.ps | lp -d Printer -t input.pdf -o media=A3 -''' - — меняем формат с А2 на А3 и печатаем 1 копию на бумагу формата A3. Имя задания - — input.pdf
 
== Криптография ==
* '''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 и вырезать соответствующую часть)
* '''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 года, закрытым ключом и соответствующими параметрами
* '''grub-crypt --md5''' — Создать хеш пароля для /etc/shadow
* ''' openssl x509 -text -in my_cert.pem ''' - Просмотреть сертификат (если нужно вычленить ключ или сертификат, то cat my_cart.pem и вырезать соответствующую часть)
* '''grub-cryptopenssl passwd −1 «PassWorD» --md5''' - — Создать хеш пароля для /etc/shadow
* '''openssl aes-128-cbc -d -salt -in pass.aes -out /tmp/pass.txt''' — Расшифровать файл
* '''openssl passwd -1 "PassWorD" ''' - Создать хеш пароля для /etc/shadow
* '''openssl aes-128-cbc -d -salt -in /tmp/pass.aestxt -out pass.aes; rm -f /tmp/pass.txt''' — - РасшифроватьЗашифровать файл
* '''openssl s_client -host mail.ru -port 443''' — Соединиться с хостом по шифрованному соединению
* '''openssl aes-128-cbc -salt -in /tmp/pass.txt -out pass.aes; rm -f /tmp/pass.txt''' - Зашифровать файл
* '''openssl s_client -hoststarttls mail.ruimap -portconnect 443mymail.ru:993''' — - Соединиться с хостомПротестировать поimap шифрованномучерез соединениюстарттлс
* '''openssl s_client -starttls imap -connect mymail.ru:993''' - Протестировать imap через старттлс
 
== Кластеры ==
* '''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''' - — «Вырезать» звук из видеофайла и переконвертировать в mp3
 
=== mplayer, mencoder ===
 
==== CUE ====
Строка 955 ⟶ 926 :
* '''cuetag sample.cue track*.flac'''- Прописать теги
 
==== mplayer ====
* '''mplayer dvd:// -dvd-device <dir>''' — воспроизведение контента DVD из каталога <dir>
 
* '''mplayer -vf cropdetect''' — определение кропа
* '''mplayer dvd:// -dvd-device <dir>''' — воспроизведение контента DVD из каталога <dir>
* '''mplayer -vf cropdetectcrop=704:416:8:80'''  определениевоспроизведение с кропакропом
* '''mplayer -vfaf cropvolume=70420.1:416:8:800'''  воспроизведение сувеличение кропомгромкости
* '''mplayer -afidx volume=20file.1:0avi'''  увеличениевоспроизведение файла с «битым» громкостииндексом
* '''mplayer -idx file.avi''' — воспроизведение файла с «битым» индексом
 
''':'''
<blockquote>
mplayer file.avi -dumpaudio -dumpfile audio.ac3</br>
mplayer file.avi -vo null -ao pcm: fast: file=filename.wav</br>
</blockquote>
 
==== Кодирование ====
 
Запись видео с вебкамеры:
<blockquote>
Строка 1109 ⟶ 1078 :
 
== Обработка графики ==
* '''convert input.tiff output.pdf''' - — конвертация изображения tiff в pdf
* '''convert -geometry 60x80 in.png out.png''' - — привести изображение к указанному разрешению
* '''gs -r384 -sDEVICE=jpeg -dNOPAUSE -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=passport.jpg -- — passport.pdf''' - — конвертирование PDF в JPEG
* '''pdftk 1.pdf 2.pdf cat output 1_plus_2.pdf''' - — объединить файлы pdf в один
 
== Примечания ==
{{примечания}}