У пользователей Unix их реальные имена могут быть перечислены в /etc/passwd/ . Команда finger может отображать настоящие имена. Может ли ls -l показать эти настоящие имена владельцев файлов рядом с файлами?

Если ls не может сделать это напрямую, каков наилучший способ передать вывод ls -l через finger для достижения этого результата? Звучит как работа для awk - используйте ls -l | finger как справочную таблицу для перезаписи третьего столбца ls -l .

(Связанный вопрос в случае, если настоящие имена не в finger а в таблице поиска: замена текста в таблице поиска в bash)

1 ответ1

0

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

while read -r line
do
    user=`echo "$line" | awk '{print $3}'`
    name=`getent passwd "$user" | cut -d ':' -f 5 | cut -d ',' -f 1`
    echo $line | sed "s/$user/$name/"
done < <(ls -lh | tail -n +2)

user переменная получает имя пользователя владельца (из 3-го столбца вывода ls), name получает настоящее имя пользователя, а затем в выводе ls мы просто заменяем имя пользователя настоящим именем, используя sed .

В моем примере я не использовал finger , так как при разборе файла /etc/passwd менее подвержен ошибкам, и вам также не нужен внешний инструмент. (finger не установлен в Debian/Ubuntu по умолчанию)

Пример вывода:

-rwxr-xr-x 1 Pavlin Nikolov fanatique 41 Aug 29 15:13 cpu.sh
-rwxr-xr-x 1 Pavlin Nikolov fanatique 193 Aug 28 11:36 httpingwrap.sh
-rwxr-xr-x 1 Pavlin Nikolov fanatique 3.8K Aug 14 15:36 imgconv.py
-rwxr-xr-x 1 Pavlin Nikolov fanatique 504 Oct 19 16:04 lsp
-rwxr-xr-x 1 Pavlin Nikolov fanatique 77 Aug 28 14:24 mg
-rwxrwxrwx 1 Pavlin Nikolov fanatique 386 Sep 14 15:02 mon-install.sh
-rwxr-xr-x 1 Pavlin Nikolov fanatique 589 Sep 11 11:55 ping-wrapper.py

Обратите внимание, что это не самый лучший вывод, так как он не выровнен идеально, но все равно должен работать.

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