我想掃描passwd文件並只打印行,如果用戶沒有鎖定。即,passwd -S $user
不返回「密碼:鎖定」。我可以在ksh中輕鬆完成。在Perl中這樣做的最好方法是什麼?如何運行passwd -S並在Perl中捕獲其輸出?
回答
此前,此答案報告瞭如何僅打印鎖定的用戶。錯誤糾正了。
在Linux上,鎖定的用戶帳戶的密碼開頭爲'!'
。您可以解析冒號分隔/etc/shadow
文件一下:
# Run as root with /etc/shadow as program argument
while (<>) {
chomp;
my ($user, $password, $remainder) = split /:/, $_, 3;
print $user."\n" unless $password =~ /^!/;
}
編輯:另外,攜帶方便,方法是使用getpwent功能:
# Must run as root
while (my ($user, $password) = getpwent) {
print $user."\n" unless $password =~ /^!/;
}
注:你需要root從/etc/shadow
讀取用戶的密碼,並找出用戶是否被鎖定。
我不確定你是否在尋找一種命令行方式來做到這一點,下面的代碼假設passwd -S的輸出正好是你如何指定它(可能贏了「T在實際工作),但是這是一個方法:
cat /etc/passwd | perl -ne '$user = (split /:/)[0]; print "$user\n" if `passwd -S $user` ne "Password: locked"'
在實踐中,你可能需要某種毛茸茸的正則表達式的結尾,像:
`passwd -S $user` !~ /^\s*Password\s*:\s*locked\s*$/im'
凡」我'最後會使其不區分大小寫(這可能不是必需的) ,'m'允許匹配多行輸出[來自passwd -S]。沒有看到您匹配的確切輸出(在您的* nix上),很難確切地說出您需要什麼。
例如,在Cygwin的,我覺得相當的將是這樣:
`passwd -S $user` !~ /^\s*Account\s+disabled\s+:\s+yes\s*$/im'
同爲一個班輪。
sudo perl -F: -lane 'print $F[0] if $F[1]!~/^!/' /etc/shadow
他要求打印未鎖定的用戶。我自己犯了同樣的錯誤;) – 2010-02-24 10:38:56
謝謝你指出我的錯誤。 – codeholic 2010-02-24 10:40:39
open(F,"<","/etc/shadow") or die "Cannot open shadow file:$!\n";
while(<F>){
chomp;
@s = split /:/;
if ($s[1] !~ /!/){
print "user: $s[0] not locked \n";
}
}
close(F);
作爲根使用。
- 1. 如何在Perl中運行外部命令並捕獲其輸出?
- 2. 從powershell運行VBS並捕獲輸出
- 3. 如何從Perl運行進程並捕獲輸出和返回代碼?
- 4. 如何在終端運行命令並捕獲輸出
- 5. Perl:如何在同一時間捕獲變量中的輸出並將其顯示在標準輸出中?
- 6. 在AutoIT中,我如何運行子進程並一次捕獲一行輸出?
- 7. Perl - 調用其他腳本並在運行時顯示輸出
- 8. 如何在perl6中執行外部命令並捕獲其輸出?
- 9. 如何在Perl中捕獲pkgrm的輸出?
- 10. 在Perl中捕獲運行時錯誤並將其轉換爲例外
- 11. 如何運行程序並獲取其輸出
- 12. 如何使用NSTask運行.sh文件並獲取其輸出?
- 13. 如何從perl`command`調用捕獲多行輸出?
- 14. 從管道捕獲輸出並將其存儲在變量中
- 15. Perl中捕獲運行時錯誤
- 16. 運行腳本的Bash捕獲輸出
- 17. 如何從輸出中修剪空白並用Perl中的反引號捕獲?
- 18. Perl fork fork線程捕獲輸出
- 19. 如何在jQuery中捕獲COMMAND + S?
- 20. 如何在C#中運行tracetcp並獲取輸出結果?
- 21. 如何在可可中運行shell命令並獲取輸出?
- 22. 如何運行Java程序並在PHP中獲取輸出?
- 23. 如何在rails中捕獲ffmpeg輸出?
- 24. 在perl中捕獲android命令的輸出
- 25. 如何捕獲並重新拋出Perl中的錯誤?
- 26. 在PHP中捕獲Python腳本輸出並避免雙輸出
- 27. 從Ruby文件運行Shell腳本並捕獲輸出
- 28. 從Java運行PHP腳本並捕獲輸出
- 29. PYQT:如何捕獲python解釋器的輸出並將其顯示在QEditText中?
- 30. 如何在Rust中調用系統命令並捕獲其輸出?
謝謝你們 - 我想我現在已經做到了。 – paul44 2010-02-24 11:32:25
不客氣! :)請投票贊成有用的答案,並選擇最有幫助的(如果有的話)作爲接受的答案。 – 2010-02-24 16:45:22