В настоящее время я пытаюсь найти команду, которая покажет последнее изменение пароля пользователя в системе UNIX.
Я попытался запустить команду passwd -Sa, и она дает дату изменения пароля, отформатированную в 00/00/0000. Однако я хочу только указать дату последнего пользователя из этой команды. Я попытался передать команду grep, но я не могу понять, что мой синтаксис правильный.
Я ищу только выход даты в результате этой команды.
Текущая команда попыталась:
grep $USER | passwd -Sa
Любая помощь по моим ошибкам оценивается!
Получение большей информации дает лучшие ответы. Оффлайн, на OpenSUSE, я вижу, что
passwd -S -a
дает запись для каждой записи в /etc/passwd
, например:
thomas PS 03/01/2013 0 99999 7 -1
поэтому вы можете отфильтровать это с помощью awk:
passwd -S -a | awk -v user=$USER '{ if ( $1 == user ) { printf "%s\n", $3; } }'
Однако команда passwd
хочет сделать это как root
, поэтому ваш скрипт должен будет сделать что-то более элегантное, чем использовать переменную $USER
(это для текущего пользователя). Причина, по которой он хочет root
заключается в том, что он читает содержимое /etc/shadow
, которое не является общедоступным.
Вы можете использовать chage
, который показывает другой отчет, но при быстрой проверке он запрашивает пароль пользователя (который, вероятно, не тот, который вы хотите):
Программа
chage
требует наличия файла теневого пароля.Команда
chage
ограничена пользователем root , за исключением опции-l
, которая может использоваться непривилегированным пользователем, чтобы определить, когда истечет срок его / ее пароля или учетной записи.
Дальнейшее чтение:
-S
и -a
chage
, но пропускает приглашение пароля … Это звучит как домашнее задание, так что:
sort
может сортировать ввод численно и при необходимости сортировать по нескольким определенным столбцам. cut
может печатать подмножество входных столбцов, используя набор символов для определения разделителей столбцов. a | b
a | b
отправляет вывод команды a
в команду b
. head
и tail
возвращают первую и последнюю строки файла, соответственно. sudo
). Вы можете избежать этого (и любого grep
ping), просто используя passwd --status
чтобы получить статус текущего пользователя.