Создайте список всех пользователей, владеющих файлом в данном каталоге, а также количество файлов и каталогов, которыми они владеют.

У меня проблемы с пониманием кода: 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

0
01.09.2017, 13:42
1 ответ

Шаги конвейера, вывод предыдущей команды используется как ввод для следующей:

  1. ls -l /projects/ghosttrailсписок содержимого каталога (, не начинающегося с точки ), с подробностями.

  2. tail -n +2вывод, начинающийся со строки 2 (удаляет первую строку ). Без +tailбудет показывать последние две строки (столько, сколько указано в -n, по умолчанию 10 ).

  3. sed 's/\s\s*/ /g'заменяет несколько последовательных пробелов одним.

  4. cut -d ' ' -f 3получить 3-е поле (имя пользователя ).

  5. 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имеет ту же цель, что и в исходном примере.

0
28.01.2020, 04:40

Теги

Похожие вопросы