Я изучал каталог /usr в рамках своей миссии по лучшему пониманию стандарта иерархии файловой системы Linux — топографии современного сервера. Один вопрос, который возник во время моих путешествий по файловой системе, заключался в том, сколько файлов находится в /bin по сравнению с /user/bin? Именно тогда я обнаружил этот полезный конвейер.

ls | wc -l

Конвейеры состоят из двух или более команд, связанных с конвейерами в командной строке. Труба «|» перенаправляет вывод предыдущей команды на стандартный ввод следующей команды, которая воздействует на полученные данные. В этом случае список имен файлов, созданный ls, передается wc -l, который подсчитывает количество новых строк в списке (т. е. каждое имя файла). Команда wc выводит количество новых строк, слов и байтов данного файла в стандартный вывод в этот порядок. Здесь опция -l ограничивает количество возвращаемых строк только новыми строками. Ниже приведена команда в действии.

[user@host /]$ ls /usr/bin | wc -l
654

В /usr/bin моего дистрибутива Linux есть 654 файла до того, как было установлено какое-либо дополнительное программное обеспечение. Как это соотносится с /bin? Я мог бы запустить этот же конвейер для /bin и сравнить результат, но это все равно не сказало бы мне, имеют ли эти каталоги одинаковое содержимое. Введите diff.

[user@host /]$ diff /usr/bin /bin

diff сравнивает файлы построчно и выводит разницу. Если команда молчит, то два файла идентичны (хотя это поведение можно изменить, используя один из многих параметров diff). Я запустил diff для сравнения /usr/bin и /bin и ничего не получил. Но что, если они используют подкаталоги с одинаковым именем, но разным содержимым?

[user@host /]$ diff -r /usr/bin /bin

Тишина. Опция -r рекурсивно сравнила мои каталоги и не обнаружила различий. Теперь я уверен, что содержимое такое же, но моя первоначальная миссия понять /usr не завершена. Вперед!

(Советы, исправления или комментарии всегда приветствуются.)