2015-03-19 2 views
0

Я пытаюсь написать скрипт, который выдает имя пользователя, реальное имя и дату извлечения учетной записи. Это код, который у меня есть.Устранение паролей Linux с помощью Awk, shadow и пароля

awk -F: '$3 > 1000 { print $1, $5 }|grep /etc/shadow (print $9)to_date('1970-01-01','YYYY-MM-DD') + numtodsinterval(1244108886,'SECOND') 

вход:

smithj:Ep6mckrOLChF.:10063:0:99999:7::: 
westf:Ep7uopliokmmm.:1058:0:1087654:7::: 
martinezj:GHolimpjk90.:1010:0:1008759:7:: 

выход:

John Smith   Password expires never 
Frank West   Password expires: May 8th 2015 
Jose Martinez  Password expires: August 12th 2015 
+0

Я думаю, вы хотите направить grep в awk. Также не хватает закрывающего или гнездования '' '... Например: http://unix.stackexchange.com/questions/169911/writing-a-script-that-outputs-local-users-and-their-password -expiration-date –

+0

Не могли бы вы объяснить возникшую у вас проблему? – NathanOliver

+0

Я просто хочу убедиться, что synatx прав, потому что я не уверен, как вывести 2 файла с трубой. Кроме того, я не уверен на 100%, что распечатка с 9 на сегодняшний день покажет дату в обычных условиях. – Scifiguy

ответ

0

Если у вас есть разрешение на просмотр теневой файл, это будет выводить имя пользователя, реальное имя, и счета дату истечения срока действия, двоеточие раздельные:

join -t: -o 0,1.5,2.8 <(sort /etc/passwd) <(sort /etc/shadow) 

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

user=someone 
IFS=: read username name < <(getent passwd "$user" | cut -d: -f1,5) 
expiry=$(chage -l "$user" | awk -F': ' '/^Account expires/ {print $2}') 
printf "%s\n" "$username" "$name" "$expiry"