Linux bash

Linux bash


Bash – это одна из наиболее популярных современных разновидностей командной оболочки Linux. Программа-оболочка запускается после регистрации пользователя. Bash в среде Linux часто используется в качестве предустановленной командной оболочки. Каждая программная оболочка использует свой командный язык. Программная оболочка Bash работает со стандартными потоками информации.

Стандартные потоки (потоки ввода, вывода и ошибок) имеют файловые дескрипторы: 0, 1, 2. По умолчанию в интерактивном режиме стандартные потоки ассоциированы с терминалом пользователя. Подключение потоков к файлам, программам, к устройствам называется перенаправлением.

stdin (дескриптор=0) Стандартный поток ввода Содержит то, что набирает пользователь в консоли (команды или входные данные)
stdout (дескриптор=1) Стандартный поток вывода Вывод программы
stder (дескриптор=2) Стандартный поток ошибок Вывод диагностических и отладочных сообщений

В консольном окне отображается содержание, и stdout, и stder. Чтобы различить их, можно перенаправить stdout или stder на stdin другой программы или записать в файл.

Операторы перенаправления потоков

Символ “>” создает файл для записи, если он еще не создан, или перезаписывает информацию в уже существующем файле.

Для добавления информации в существующий файл предначен двойной символ “>>”.

Оператор Пример Описание действия
1> или > infoseq sw:pdxk_bacsu -only -name >file Перенаправление stdout команды infoseq в файл “file”, причем файл перезапишется поступающими данными. Файл будет создан в той же директории, где находится пользователь в данный момент.
1>> infoseq sw:pdxk_bacsu -only -description 1>>file Перенаправление стандартного вывода команды infoseq в файл “file”, при этом данные записываются в конец файла.
2> infoseq sw:pdxk_* 2>file Перенаправление стандартного вывода ошибок в файл “file”, при этом файл перезаписывается поступающими данными.
2>> infoseq sw:pdxk_* 2>>file Перенаправление стандартного вывода ошибок в файл “file”, при этом данные записываются в конец файла.
&> infoseq sw:pdxk_* &> file Перенаправляет stderr вместе с stdout в файл.
| infoseq sw:pdxk_* | wc -l Конвейер. Перенаправляет поток stdout одной команды(infoseq sw:pdxk_*) в stdin другой команды(wc). В данном случае мы посчитали количество найденных в базе данных строк.

Спецсимволы bash

Символ Описание Пример
Пробел или знак табуляции Разделяют различные параметры команды друг от друга infoseq -only -type sw:pdxk_*
~ Переход в домашнюю директорию пользователя cd ~Ivanov
Переход в домашнюю директорию пользователя Ivanov при условии, что пользователь Ivanov существует, путь заменяется полным именем домашнего каталога этого пользователя
; Разделитель в командной последовательности при записи в одной строке mkdir test; ls
Запись в командной строке создаст в текущей директории поддиректорию test, покажет содержимое текущей директории
' ' Одинарные кавычки. Все, что находится в них воспринимается буквально, как литеральные значения (конечно, исключая сами кавычки). Между одинарными кавычками нельзя указывать еще символы одинарных кавычек даже с предваряющим \ echo '`date`'
`date`
В этом примере выводится набор литералов внутри одинарных кавычек, а не значение переменной
" " Двойные кавычки. Все, что находится в них воспринимается буквально, кроме $ и ` (обратных кавычек) echo "Сегодня: `date`"
Сегодня: Mon Feb 18 23:14:20 MSK 2013
Здесь в двойных кавычках - литералы, а обратные кавычки означают необходимость замены имени переменной ее значением
\ Сочетание \ с любым символом воспринимается буквально Символ (\) (обратный слэш) можно рассматривать как "символ отмены специального значения" для любого из специальных символов, который стоит за \. Например, если в имени файла необходим символ пробела, то вместо простого пробела необходимо поставить (\).

cd files\ EMBOSS

Зашли в поддиректорию "files EMBOSS".
/ Разделитель, используемый в указании пути к каталогам и файлам /usr/local/bin в качестве аргумента команде cd означает ей перейти в корневую директорию /, затем в директорию usr, потом в local и bin. Абсолютные пути начинаются с /
! Вызов команды из журнала команд !3 - вызовется команда (из ранее выполненных), записанная в журнале под номером 3
<,> Работа с потоками информации Описано выше

"Маски" имен файлов

Символ Описание Пример
? Обозначает один произвольный символ ls /tmp/AA??
Будет выведен список файлов в директории /tmp/ имена которых из четырех букв, первые из которых AA
* Обозначает любое количество произвольных символов (в том числе их отсутствие) *tt – список файлов, названия которых имеют последние буквы tt
[ ] Обозначает любой из символов, указанных в скобках. Если в скобках указаны два символа, разделенные знаком -, то это обозначает любой из символов из интервала между ними. ! и ^ обозначают отрицание, то есть программа будет искать файлы именах которых нет символов, указанных после ! и ^. [0-3]? – список всех файлов текущей директории, название которых начинается с цифр 0,1,2,3, далее идет произвольный символ