Unix — заметки для начинающих

Unix HotKeys

Ctrl+Alt+Fn
Переключение на n-ый консольный терминал (n=1..6)

Ctrl+Alt+F7
Переключение на графический терминал

Tab
Дополнение текущей последовательности символов, набранной в консоли, до исполняемой команды

ArrowUp
Просмотр и редактирование буфера выполненных команд

Shift+PgUp
Просмотр текста выведенного на консольный терминал и ушедшего за приделы экрана. Перемещение вверх.

Shift+PgUp
Просмотр текста выведенного на консольный терминал и ушедшего за приделы экрана. Перемещение вверх.

Shift+PgDown
Просмотр текста выведенного на консольный терминал и ушедшего за приделы экрана. Перемещение вниз.

Ctrl+Alt+ +
(в X-windows) Изменение разрешения. Переключение к следующей конфигурации.

Ctrl+Alt+ —
(в X-windows) Изменение разрешения. Возврат к предыдущей конфигурации.

Ctrl+Alt+BkSpc
(в X-windows) Убить текущий сервер X-windows (выйти из графической оболочки, убить все процессы)

Ctrl+c
Убить текущий процесс

Ctrl+d
Выход из текущего терминала

Ctrl+d
Посылка текущему процессу сигнала «Конец файла»

Ctrl+s
Остановка вывода на терминал

Ctrl+q
Возобновление вывода на терминал

Ctrl+z
Послать текущий процесс в background

Конвейеры — перенаправление ввода и вывода

Условия в последовательном выполнении команд. Командная строка unix позволяет результаты выполнения одних команд использовать как параметры для других, а так же перенаправлять вывод команд со стандартного потока вывода (экран) в файл или куда-то еще, а так же изменять поток, откуда программы получают данные (по умолчанию – клавиатура). Так же возможно последовательно выполнять несколько команд, причем можно контролировать их выполнение в зависимости от результата выполнения предыдущей команды. Рассмотрим примеры. Предположим, нам необходимо постранично пролистать список файлов какой-либо директории (потому что он большой и не умещается на один экран). Это можно сделать так: ls | less. Таким образом результат выполнения команды ls будет передан команде less (просмотр текста с возможностью листания). Теперь предположим, что нам надо отправить почту из командной строки, причем у нас имеется текстовый файл с письмом. Это можно сделать так:

less letter.txt | mail user@domain.com

То есть команда less прочитает файл, однако ее вывод со стандартного потока вывода (экрана) будет перенаправлен в поток ввода команды mail. А теперь мы запишем результат вывода less в текстовый файл lessout.txt. Для этого надо выполнить команду

less letter.txt > lessout.txt

Команда less прочтет файл, и то, что вывелось бы на экран, запишется в файл. За это отвечает оператор >. Если мы выполним эту же команду повторно, файл перезапишется. Чтобы файл не перезаписывался, а каждый раз дополнялся, используйте оператор >>. При помощи оператора < можно читать из файла информацию и использовать ее как поток ввода для другой команды. Рассмотрим такой пример. Нам надо прочитать файл in.txt, передать его команде tr –d „a‟, которая удалит из файла все вхождения символов а, а затем записать результат в файл out.txt. Вот как будет выглядеть команда:

tr –d ‘a’ < in.txt > out.txt.

Наконец, рассмотрим вариант, когда нам надо выполнить несколько команд подряд, причем они должны выполняться друг за другом независимо от того, успешно ли выполнилась предыдущая команда или с ошибкой. Например, надо удалить несколько директорий: d1, d2, d3. Это можно сделать так:

rm –rf d1 || rm –rf d2 || rm –rf d3

Теперь пусть нам надо скомпилировать ядро FreeBSD. Это делается в общем случае путем последовательного выполнения 4 команд – конфигурирование, компиляция, установка, очистка каталогов компиляции. Причем каждое следующее действие имеет смысл только в случае успешного выполнения предыдущего. В таких случаях команды объединяют оператором &&. Необходимая последовательность команд выглядит так:

make depend && make && make install && make clean

За дополнительной информацией обратитесь к документации к shell.

Wildcards – специальный тип регулярных выражений применяемых для shell

В командной строке unix существует возможность использовать регулярные выражения. В простейшем случае нам понадобятся два символа заменителя, ? и *. Вопросительный знак может заменять собой ОДИН любой символ, а звезда – ЛЮБОЕ КОЛИЧЕСТВО символов.

Например,

под шаблон ?abc?a будут подходить строки babc6a, nabc9a.

Под шаблон *ann? – строки 55345lkjlann1, danna.

Вообще, как можно понять, символ * означает собой любое имя. Рассмотрим пример. Например, необходимо удалить все файлы в текущей директории, имя которых начинается с 2000. Сделать это можно так: rm 2000*. А если надо удалить файлы, третья буква в имени которых третья буква ‘r’, то надо выполнить следующую команду: rm ??r*. Если мыхотим ограничить количество букв пятью, то это будет выглядеть так: rm ??r??.

Наиболее используемые:

  • * — любой символ или последовательность символов, включая пустую последовательность,
  • ? – любой одиночный символ,
  • [ ] – любые из перечисленных в скобках символов. Используя квадратные скобки можно ссылаться на диапазоны с помощью — (тире), например [a-z] означает любой символ латинского алфавита в нижнем регистре.

HOWTO: clear squid cache

systemctl stop squid
# OR:
# squid -k shutdown
#
# check status
systemctl status squid
# set cache directory
CACHEDIRSQ="$(grep cache_dir /etc/squid/squid.conf | awk '$1 ~ /#.*/ {print $3"/*"}')"
# clean
read -p "Are you sure? " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
 rm -fr "${CACHEDIRSQ}"
 # rebuild swap directories
 squid -z
fi
# start
systemctl start squid
systemctl status squid