У меня проблемы с пониманием кода: ls -l / projects / ghosttrail | хвост -n +2 | sed 's / \ s \ s * / / g' | вырезать -d '' -f 3 | сортировать | uniq -c
. Кто-нибудь может дать мне подробное объяснение того, что происходит на каждом этапе? Я знаю, что могу сделать это сам, добавляя каждую команду одну за другой, но код у меня не работает, и я не понимаю некоторых вещей, таких как значение аргумента +2 для хвоста или что мы достигли, поместив команду sed и почему мы не берем 4-й столбец в команде вырезания.
Источник: https://ryanstutorials.net/linuxtutorial/piping.php
Шаги конвейера, вывод предыдущей команды используется как ввод для следующей:
ls -l /projects/ghosttrail
список содержимого каталога (, не начинающегося с точки ), с подробностями.
tail -n +2
вывод, начинающийся со строки 2 (удаляет первую строку ). Без +
tail
будет показывать последние две строки (столько, сколько указано в -n
, по умолчанию 10 ).
sed 's/\s\s*/ /g'
заменяет несколько последовательных пробелов одним.
cut -d ' ' -f 3
получить 3-е поле (имя пользователя ).
sort | uniq -c
сортировать и подсчитывать уникальные строки. sort
используется, потому что uniq
не обнаруживает повторяющиеся строки, если они не являются смежными, как описано вman uniq
.
Альтернативный способ получить те же результаты с помощью GNUfind
:
find. -maxdepth 1 -not -name '.*' -printf '%u\n' | sort | uniq
find
перечисляет имена пользователей(-printf '%u\n'
вариант )в рабочем каталоге. -maxdepth 1
предотвращает поиск подкаталогов -. -not -name '.*'
исключает точечные файлы. sort | uniq
имеет ту же цель, что и в исходном примере.