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, далее идет произвольный символ |