Вы когда-нибудь задумывались, как эти гуру Linux пишут непонятные команды в командной строке и как они выполняют свою работу?
Вы когда-нибудь сталкивались с ситуациями, когда вы копировали код, чтобы сделать что-то на своем компьютере с Linux, но никогда не имели возможности понять, что означает этот странный знак "|"?
Then you are on the wrong page gentleman, go study those huge ass Linux Manual pages and learn it for yourself. You cheeky goose monkey!! JOKING | KIDDING | BEING SARCASTIC
Вот мое краткое руководство для начинающих «Трубопроводы в Linux 101». Без дальнейших церемоний, давайте нырнем прямо.
Что такое конвейер?
Для новичков «Конвейер — это не что иное, как соединение потока одной команды или программы с другой командой или программой. Прежде чем углубиться в «конвейер», давайте также поймем, что мы подразумеваем под «потоком». Поток — это просто стандартный вывод одной команды или программы. Давайте разберемся во всем этом на простом примере.
Вкратце: есть очень-очень распространенная команда Linux под названием ls
, которая просто выводит список всех файлов или каталогов в любом целевом каталоге.
По умолчанию в нем перечислены файлы для каталога, в котором в данный момент находится пользователь. Так что я, находящийся в настоящее время в каталоге «mediumTest», перечислил все файлы и каталоги, которые были внутри него.
Теперь, когда вы видите, что «поток» в этом случае был выходом команды ls
, мы можем далее обработать этот «поток» в другую команду и заставить ее делать что-то еще для нас. Но как это сделать? Здесь вступает в действие "Трубопровод".
Теперь я просто направлю вывод командыls
, скажем, в команду sort
, которая просто сортирует все, что ей передается.
ls | sort
Давайте поймем используемый здесь жаргон, системы Linux позволяют использовать стандартный вывод команды в качестве стандартного ввода другой команды с использованием вертикальной черты «|».
Вы также можете визуализировать это как временное соединение между двумя или более командами/программами/процессами.
Каналы однонаправлены, т. е. данные идут в одном направлении, слева направо.
syntax: command 1 | command 2 | command 3 | command 4...| command n
Здесь вывод command 1
будет обрабатываться как ввод command 2
, и цикл будет продолжаться и продолжаться до command n
;
Давайте посмотрим еще несколько примеров,
ls -l /usr/bin/ | less
это приведет к выводу ls -l /usr/bin/
, который будет просто перечислять все файлы в каталоге /usr/bin/ в длинном формате, а затем это будет передано нашей команде less
, которая, в свою очередь, выведет информацию один scenful вовремя.
Теперь главный вопрос: зачем все это знать, почему мы не можем просто использоватьls
и прокручивать вывод?
Дело в том, что все дело в эффективности программиста, /usr/bin/
содержит почти "1676" файлов, и пролистывание каждого из них было бы пустой тратой времени.
Кроме того, цитируя приведенное выше утверждение, чтобы правильно передать факты, я использовал конвейер, позвольте мне показать вам, как это сделать.
Я просто передал ls -l /usr/bin
, который перечисляет все файлы в строку за строкой, с помощью команды wc -l
, которая подсчитывает количество строк.
Это одно из преимуществ конвейерной обработки: она выполняет свою работу, занимает минимальное время и очень эффективна.
Что такое Ти?
Если вы когда-нибудь видели, как работают сантехники, то все, что они делают, — это трубопровод, перенаправляя поток воды из одной трубы в другую. Но иногда им нужно объединить или разделить поток трубы, и здесь в дело вступает плохой мальчик «Ти».
В концепциях трубопроводов у нас тоже есть тройник, давайте посмотрим, как он используется через команду и его вариант использования.
Например, если вам нужно перечислить 3 самых больших файла, присутствующих в /usr/bin/
вашего компьютера с Linux, и вы также должны сохранить тот же результат в другом файле, например, «3badboys.txt». И все это с помощью одной-единственной команды, как ты собираешься это сделать? ну, труба с тройником - это ответ.
Давайте подумаем над решением вместе и интуитивно. Нам нужно перечислить файлы, поэтому мы можем использовать команду ls
, мы также должны отсортировать их по размеру файлов, поэтому мы должны использовать команду sort
du -ha /usr/bin/ | sort -h | tail -4 | head -3 |tee 3bigboys.txt
du
лучше, чем ls
, для обработки использования диска, -h
для чтения человеком, -a
для всех внутренних файлов, здесь, в конце концов, с |tee
мы просто также направляем вывод в новый файл «3badboys.txt». tail -4 | head -3
(включите свою голову, чтобы расшифровать это, а то ругайте меня в разделе комментариев!!)
Давайте запустим эту команду,
отлично, теперь давайте также проверим, создан ли файл «3badboys.txt» или нет.
cat 3badboys.txt
Этого вполне достаточно для «Трубопровода в Linux 101», увидимся, братан.