Я взял на себя ответственность за сценарии RHEL5, и у меня не было никакого обучения на этой платформе или сценариях bash. Есть сценарий, который состоит из нескольких частей, и я буду спрашивать только о второй части, но также покажу вам первую, так как думаю, что это поможет с моим вопросом ниже.

Первая часть скрипта показывает вывод пользователей на конкретный сервер:

cut -d : -f 1 /etc/passwd

Вывод будет выглядеть примерно так:

root
bin
joe
rob
other...

Второй сценарий требует, чтобы я заполнил каждую из учетных записей, перечисленных в приведенном выше сценарии, и запустил ее. Из того, что я могу собрать, и из моего поиска на страницах man и других веб-поисков, он обнаруживает владельца группы файла или каталога и, очевидно, сортирует и выбирает только уникальные записи, но не совсем уверен - так что это мой вопрос Что на самом деле делает приведенный ниже скрипт? (Самое смешное, что, если я подключу каждое имя из вышеприведенного вывода, я иногда получаю сообщение «не могу найти имя пользователя бла, бла, бла».)

find username -printf %G | sort | uniq

1 ответ1

1

Если посмотреть на странице человека find вы найдете описание -printf варианта:

   -printf format
          True; print format on the standard output, interpreting `\' escapes
          and `%' directives...

Если вы посмотрите дальше на страницу руководства, вы найдете документацию для %G:

          %G     File's numeric group ID.

Таким образом, он находит все файлы, содержащиеся в каталоге с именем username (в вашем примере), и выводит числовой идентификатор группы, которой они принадлежат. Это sort по конвейеру, что сортирует их лексически. Результаты sort передаются в uniq , который удаляет повторяющиеся записи.

Таким образом, создается список всех уникальных идентификаторов групп, которые владеют файлами в определенном дереве каталогов.

Как написано, это не будет делать именно это, потому что нет разделителей. Если у вас есть файлы, принадлежащие группам 200 и 100 , результат будет выглядеть следующим образом:

100200

... что означает, что sort будет видеть только одну строку и ничего не будет делать.

Можно добавить новую строку в строку формата, чтобы исправить это:

find username -printf '%G\n' | ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .