Apr 26, 2012

Linux - Командная строка

Командная строка

Разделение команд

&& - вторая команда будет выполнена только в том случае, если код завершения первой команды будет равен 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/

No comments: