Командная строка
Разделение команд
&&
- вторая команда будет выполнена только в том случае, если код завершения первой команды будет равен 0.
||
- вторая команда будет выполнена только в том случае, если код завершения первой команды будет отличен от нуля.
История команд
!string
- Последняя введенная команда, начинающаяся на
string
!?string?
- Последняя введенная команда, содержащая строку
string
Текстовые потоки и фильтры
Cat, tac
$ cat text1
1
2
в обратном порядке:
$ tac text1
2
1
номера строк (то же что и nl):
cat -n text1
1 1
2 2
Split
по 1 строке
$ split -l 1 text1 lines1_
$ ls lines1_*
lines1_aa lines1_ab
$ cat lines1_aa
1
$ cat lines1_ab
2
по 2 байта
$ split -b 2 text1 bytes2_
$ ls bytes2_*
bytes2_aa bytes2_ab
$ cat bytes2_a*
1
2
Sed
$ sed 's/1/555/g' text1
555
2
Управление файлами и директориями
Сортировка вывода
ls -t
отсортирует файлы по времени их модификации
ls -lS
сформирует подробный список файлов, отсортированных по размеру
-r
- сортировка в обратном порядке.
Потоки, программные каналы и перенаправления
Перенаправление вывода
$ ll text1 blablabla >stdout.log 2>stderr.log
Добавляется к содержимому
$ ll text1 blablabla >>stdout.log 2>>stderr.log
Перенаправление двух потоков в один файл
$ ll text1 text3 >output 2>&1
Игнорирование стандартного потока ошибок посредством использования /dev/null
$ ll text1 text3 2>/dev/null
Перенаправление ввода
$ sort -r < text1
2
1
$ sort -r <<END
>5
>6
>END
6
5
-
(дефис) - аргумент многих команд, который означает, что входные данные следует принимать со стандартного устройства ввода, а не из файла:
$ bunzip2 -c somefile.tar.bz2 | tar -xvf -
{}
- указывает место подстановки
\;, ';' или ";"
- команда завершается точкой с запятой, которая представляется в виде escape-последовательности
$ find . -name "*1" -exec grep "1" {} \;
1
1
Здесь не хватает имен файлов, поскольку find вызывает grep один раз для каждого файла, а grep, будучи умной командой, знает о том, что если ей было передано имя лишь одного файла, то нет необходимости сообщать вам о том, что это был за файл.
В этой ситуации мы могли бы воспользоваться командой xargs, однако мы уже знаем о проблеме с файлами, имена которых содержат пробелы. Также мы упоминали тот факт, что команда find может генерировать список имен с пустыми разделителями, благодаря опции -print0. Современные версии команды find могут разделяться не точкой с запятой, а знаком +, благодаря чему, за один вызов команды find можно передать максимально возможное число имен, так же, как и в случае использования xargs
$ find . -name "*1" -print0 |xargs -0 grep "1"
./text 1:1 apple
./text1:1 apple
$ find . -name "*1" -exec grep "1" {} +
./text 1:1 apple
./text1:1 apple
Разделение вывода
Команда tee используется в конвейере, а ее аргументом является имя файла (или имена нескольких файлов), в который будет передаваться стандартный вывод. Опция -a позволяет не замещать старое содержимое файла новым содержимым, а добавлять данные в конец файла. Как уже говорилось при рассмотрении конвейеризации, если вы хотите сохранить как стандартный вывод, так и поток ошибок, то необходимо перенаправлять поток stderr в поток stdout прежде, чем передавать данные на вход команде tee. Для сохранения вывода в два файла, f1 и f2.
$ ls text[1-3]|tee f1 f2
text1
text2
text3
$ cat f1
text1
text2
text3
$ cat f2
text1
text2
text3
Управление приоритетными и фоновыми заданиями
http://www.ibm.com/developerworks/ru/library/l-lpic1-v3-103-5/index.html
Использование &
(while sleep 2; do date;done)&
Ожидание потока stdin:
(date; cat - > bginput.txt;date)&
Использование nohup и списка команд в сценарии:
$ echo "while sleep 30; do date;done">pmc.sh
$ nohup pmc.sh >mynohup.out 2>&1 &
Мониторинг процессов
$ jobs -p
3878
5485
5487
$ ps (jobs -p)
PID TTY STAT TIME COMMAND
3878 pts/1 S 0:06 xclock -d -update 1
5485 pts/1 S 0:00 sh pmc.sh
5487 pts/1 S 0:00 bash pmc.sh
http://www.ibm.com/developerworks/ru/library/l-lpic1-v3-101-3/