Существует три потока:
0 - stdin - "стандартный поток ввода", содержит введенные нами команды. Также мы можем направить в него содержимое какого-либо файла и т. д. Для того, что бы перенаправить данные другого потока в stdin, используется символ "<".
1 - stdout - "стандартный поток вывода", содержит все результаты выполнения команд, то есть выводящиеся данные, кроме информации об ошибках и результатов выполнения команд с -help. Для того, чтобы перенаправить данные с других поток в этот, используются символы ">" (="1>") и ">>" (="1>>"):
При введении команды ls > iiii.txt (находясь в директории ~/Term2/Block1/Practices/Pr1, что мы проверили ранее pwd) мы записываем результаты команды ls в файл iiii.txt. Проверим содержимое файла командой less iiii.txt:
YABJ.info aaa.txt iiii.txt infoseq.txt
Команда была выполнена верно. Если мы хотим дописать результат выполнения какой-нибудь команды в тот же файл, используем символ ">>": Sequence (.fasta)
echo "Linux <3" >> iiii.txt less iiii.txt YABJ.info aaa.txt iiii.txt infoseq.txt Linux <3
Но если мы захотим, к примеру, перейти из текущей директории в несуществующую директорию oops и перенаправить результат выполнения этой команды в файл, у нас ничего не выйдет:
cd /oops >> iiii.txt -bash: cd: /oops: No such file or directory
То же самое произойдет, если мы захотим перенаправить, к примеру, результаты команды infoseq –help.
2 - stderr Это происходит потому, что ошибки и результаты подобных команд выводятся через третий поток – stderr. Для перенаправления инфомрации на этот поток используются команды “2>” и “2>>” соответственно (или >& в tcsh как для потока stdout, так и для stderr):
cd /oops 2> iiii.txt more iiii.txt -bash: cd: /oops: No such file or directory
Мы можем убедиться, что команды работают верно.
Для того, чтобы перенаправить поток stdout одной команды на stdin другой, можно использовать символ “|”:
ls -l | find *.txt aaa.txt iiii.txt infoseq.txt
Так мы из списка всех файлов данной директории выбрали командой find только те, которые имеют расширение txt.
Находясь в домашней директории, попытаемся найти все файлы, которые содержат в своем названии строчку “bash_history”. Мы выполняем поиск по имени и не знаем, в начале, конце или середине встречается эта строчка, поэтому команда будет выглядеть так:
find –name “*bash_history*” ./.bash_history
То есть файл находится по адресу …/taisniqm/.bash_history.
С помощью команды man ls изучив команду ls, мы увидим, что по умолчанию команда не выводит некоторые имена файлов, в том числе те, имена которых начинаются с точки. Чтобы отобразить и такие файлы, выполним такую команду:
ls –a . .lesshst AtmProps.sk gegl-0.0 public_html .. .mailboxlist Term1 grstyles.stl template.cfg .bash_history .profile Term2 iiii.txt video .bash_logout .ssh UserStl.sk mail .bashrc Application Data desktop.ini music
Команда выполнена верно.
Для того, чтобы найти у себя файлы с пробелом в имени, воспользуемся практически такой же командой:
find –name “* *” ./video/Sample Pictures.lnk ./Application Data
Нашлись два таких файла. Переименуем их командой mv так, чтобы в названии не было пробела (пример для одного файла):
mv "Application Data" ApplicationData find -name "* *" ./video/Sample Pictures.lnk
pwd сообщает полное имя текущей директории
ls показывает содержимое текущей директории
cp <имя файла 1> <имя файла 2> копирует файл 1 в файл 2
mv <имя файла 1> <имя файла 2> переименовывает файл
mv <имя файла> <имя поддиректории> перемещает файл в поддиректорию
rm <имя файла> уничтожает файл
mkdir <имя поддиректории> создает поддиректорию
cd <имя поддиректории> переход в поддиректорию
cd .. выход из поддиректории (переход в родительскую директорию)
more <имя файла> просмотр содержимого файла (клавишами "пробел" и "Enter")
man <команда> выдает подробную информацию о команде
Существуют символы, которые могут использоваться в ряде команд и поэтому воспринимаются интерпретатором командной строки bash :не буквально:
Для того, чтобы сообщить команде параметры, содержащие спецсимволы, используют кавычки.
‘ – в одинарных кавычках все спецсимволы воспринимаются буквально и не нуждаются ни в каком обозначении;
“ – в двойных кавычках символы только $ и ` воспринимаются как спецсимволы и их надо обозначать \$ и \` соответственно.
USA Database Name Accession Type sw-id:YABJ_BACSU sw YABJ_BACSU P37552 P Length Organism Description 125 Bacillus subtilis RutC family protein yabJ
-outfile |
outfile |
аналогична символу “>”, записывает результаты команды в файл, имя которого идет после (stdout) |
infoseq sw:yabj_bacsu –outfile outfile.txt Display basic information about sequences |
-html |
boolean |
дает возможность вывести результаты в виде html-таблицы |
infoseq sw:yabj_bacsu –html >& html.txt |
-[no]columns |
boolean |
представляет информацию в виде аккуратных столбцов |
infoseq sw:yabj_bacsu –columns >& columns.txt infoseq sw:yabj_bacsu –nocolumns >& nocolumns.txt |
-delimiter |
string |
разделяет данные введенным разделителем |
infoseq sw:yabj_bacsu -nocolumns –delimiter “(_)” >& delimiter.txt |
-only |
boolean |
выводит только те данные, которые мы говорим |
см. ниже |
-[no]heading |
boolean |
[не] показывать заголовки столбцов |
infoseq sw:yabj_bacsu –heading >& heading.txt infoseq sw:yabj_bacsu –noheading >> heading.txt |
-usa |
boolean |
только с –only (USA последовательности) |
infoseq sw:yabj_bacsu –only –usa >& only.txt |
-database |
boolean |
только с –only (база данных) |
infoseq sw:yabj_bacsu –only –database >> only.txt |
-name |
boolean |
только с –only (имя) |
infoseq sw:yabj_bacsu –only –name >> only.txt |
-accession |
boolean |
только с –only |
infoseq sw:yabj_bacsu –only –accession >> only.txt |
-gi |
boolean |
показать колонку gi |
infoseq sw:yabj_bacsu –gi >& gi.txt |
-seqversion |
boolean |
показать колонку версии секвенирования |
infoseq sw:yabj_bacsu –seqversion >& seq.txt |
-type |
boolean |
только с –only (тип) |
infoseq sw:yabj_bacsu –only –type >> only.txt |
-length |
boolean |
только с –only (длина) |
infoseq sw:yabj_bacsu –only –length >> only.txt |
-pgc |
boolean |
только с –only |
infoseq sw:yabj_bacsu –only –pgc >> only.txt |
-organism |
boolean |
только с –only (организм) |
infoseq sw:yabj_bacsu –only –organism >> only.txt |
-description |
boolean |
только с –only (описание) |
infoseq sw:yabj_bacsu –only –description >> only.txt |
-help |
boolean |
вызов информации о команде |
infoseq –help |