1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-llthw-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ex8.md 7.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 03:02 8398775

Теперь вы попробовали Linux, и я расскажу вам о способе Unix. Обратите внимание.

Вот в чём философия Unix: написать несколько программ, каждая из которых делает что-то одно, но делает это хорошо. Написать программы так, чтобы они работали вместе. Написать программы для обработки потоков текста, потому что это универсальный интерфейс.

На практике это означает, что для эффективного использования Linux нужно знать, как получить вывод одной программы и передать его другой программе, часто модифицируя его в процессе. Обычно можно объединить несколько программ в цепочку с помощью конвейера (или «пайпа»), который позволяет соединить вывод одной программы со входом другой программы. Например:

запустить программу 1
    начать читать данные с клавиатуры
    начать выводить ошибки на экран
    запустить программу 2
        начать считывать ввод от программы 1
        начать выводить ошибки на экран
        запустить программу 3
            начать считывать ввод от программы 2
            начать выводить данные на экран
            начать выводить ошибки на экран```

Есть и другой способ описать происходящее, если вам нравится юмор в стиле South Park, но будьте осторожны: то, что вы увидите, не будет видимым! [Внимание! Вы не сможете это игнорировать](http://osxdaily.com/wp-content/uploads/2011/04/south-park-human-centipad.jpg).

Рассмотрим следующий конвейер, который принимает вывод `ls -al` и печатает только имена файлов и время их модификации:

ls -al | tr -s ' ' | cut -d ' ' -f 8,9


Это краткое описание происходящего:

Запустить ls -al получить список файлов в текущем каталоге вывести ошибки на экран передать вывод в конвейер запустить tr -s ' ' прочитать ввод из ls -al через конвейер оставить только один пробел между двумя полями вывести ошибки на экран передать вывод в конвейер запустить cut -d ' ' -f 8,9 прочитать ввод из tr -s ' ' через конвейер сохранить только поля 8 и 9, отбросив остальные вывести ошибки на экран вывести результат на экран```

Более подробно, вот что происходит на каждом шаге:

Первый шаг: ls -al, мы получаем список каталогов, где каждое поле называется столбцом.

user1@vm1:~$ ls -al
total 52
drwxr-xr-x 2 user1 user1 4096 Jun 18 14:16 .
drwxr-xr-x 3 root  root  4096 Jun  6 21:49 ..
-rw------- 1 user1 user1 4865 Jun 15 19:34 .bash_history
-rw-r--r-- 1 user1 user1  220 Jun  6 21:48 .bash_logout
-rw-r--r-- 1 user1 user1 3184 Jun 14 12:24 .bashrc
-rw-r--r-- 1 user1 user1   64 Jun 18 14:16 hello.txt
-rw------- 1 user1 user1   89 Jun 18 16:26 .lesshst
-rw-r--r-- 1 user1 user1  634 Jun 15 20:03 ls.out
-rw-r--r-- 1 user1 user1  697 Jun  7 12:25 .profile
-rw-r--r-- 1 user1 user1  741 Jun  7 12:19 .profile.bak
-rw-r--r-- 1 user1 user1  741 Jun  7 13:12 .profile.bak1
-rw------- 1 user1 user1  666 Jun 18 14:16 .viminfo

Второй шаг: ls -al | tr -s ' ', мы оставляем только один пробел между полями, поскольку cut не может разделить несколько пробелов и понять, где заканчивается одно поле и начинается другое.

user1@vm1:~$ ls -al | tr -s ' '
total 52
drwxr-xr-x 2 user1 user1 4096 Jun 18 14:16 .
drwxr-xr-x 3 root root 4096 Jun 6 21:49 ..
-rw------- 1 user1 user1 4865 Jun 15 19:34 .bash_history
-rw-r--r-- 1 user1 user1 220 Jun 6 21:48 .bash_logout
-rw-r--r-- 1 user1 user1 3184 Jun 14 12:24 .bashrc
-rw-r--r-- 1 user1 user1 64 Jun 18 14:16 hello.txt
-rw------- 1 user1 user1 89 Jun 18 16:26 .lesshst
-rw-r--r-- 1 user1 user1 634 Jun 15 20:03 ls.out
-rw-r--r-- 1 user1 user1 697 Jun 7 12:25 .profile
-rw-r--r-- 1 user1 user1 741 Jun 7 12:19 .profile.bak
-rw-r--r-- 1 user1 user1 741 Jun 7 13:12 .profile.bak1
-rw------- 1 user1 user1 666 Jun 18 14:16 .viminfo

Третий шаг: мы сохраняем только поля 8 и 9, которые нам нужны.

user1@vm1:~$ ls -al | tr -s ' ' | cut -d ' ' -f 8,9
 
14:16 .
21:49 ..
19:34 .bash_history
21:48 .bash_logout
12:24 .bashrc
14:16 hello.txt
16:26 .lesshst
20:03 ls.out
12:25 .profile
12:19 .profile.bak
13:12 .profile.bak1
14:16 .viminfo```

Теперь вы знаете, как получать ввод от одной программы, передавать его другой программе и преобразовывать его.

## Вот что можно сделать

1: ls -al | head -n 5 2: ls -al | tail -n 5 3: ls -al | awk '{print $8, $9}' 4: ls -al | awk '{print $9, $8}' 5: ls -al | awk '{printf "%-20.20s %s\n",$9, $8}' 6: ls -al | grep bash 7: ls -al > ls.out 8: cat ls.out 9: cat ls.out | sed 's/bash/I replace this!!!/g'```

Вы увидите следующее

user1@vm1:~$ ls -al | head -n 5
total 52
drwxr-xr-x 2 user1 user1 4096 Jun 18 14:16 .
drwxr-xr-x 3 root  root  4096 Jun  6 21:49 ..
-rw------- 1 user1 user1 4865 Jun 15 19:34 .bash_history
-rw-r--r-- 1 user1 user1  220 Jun  6 21:48 .bash_logout
user1@vm1:~$ ls -al | tail -n 5
-rw-r--r-- 1 user1 user1  636 Jun 18 17:52 ls.out
-rw-r--r-- 1 user1 user1  697 Jun  7 12:25 .profile
-rw-r--r-- 1 user1 user1  741 Jun  7 12:19 .profile.bak
-rw-r--r-- 1 user1 user1  741 Jun  7 13:12 .profile.bak1
-rw------- 1 user1 user1  666 Jun 18 14:16 .viminfo
user1@vm1:~$ ls -al | awk '{print $8, $9}'
 
14:16 .
``` **Текст запроса:**

21:49 ..
19:34 .bash_history
21:48 .bash_logout
12:24 .bashrc
14:16 hello.txt
16:26 .lesshst
17:52 ls.out
12:25 .profile
12:19 .profile.bak
13:12 .profile.bak1
14:16 .viminfo
user1@vm1:~$ ls -al | awk '{print $9, $8}'

. 14:16
.. 21:49
.bash_history 19:34
.bash_logout 21:48
.bashrc 12:24
hello.txt 14:16
.lesshst 16:26
ls.out 17:52
.profile 12:25
.profile.bak 12:19
.profile.bak1 13:12
.viminfo 14:16

**Перевод:**

21:49 —
19:34 — .bash_history
21:48 — .bash_logout
12:24 — .bashrc
14:16 — hello.txt
16:26 — .lesshst
17:52 — ls.out
12:25 — .profile
12:19 — .profile.bak
13:12 — .profile.bak1
14:16 — .viminfo
пользователь1@vm1:~$ ls -al | awk {'{print $9, $8}'}

— 14:16
.. 21:49
— .bash_history 19:34
— .bash_logout 21:48
— .bashrc 12:24
— hello.txt 14:16
— .lesshst 16:26
— ls.out 17:52
— .profile 12:25
— .profile.bak 12:19
— .profile.bak1 13:12
— .viminfo 14:16

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-llthw-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-llthw-zh.git
oschina-mirror
wizardforcel-llthw-zh
wizardforcel-llthw-zh
master