last
通常,如果通过以下函数返回任何内容,我可以检测用户的上次登录时间。我的问题是:如果last
没有返回任何内容,那么我想在用户的主目录日期和时间中查找最近修改的文件。
lastlogLatest() {
last -n 1 "${userName}" | awk ' {
for( i=1;i<=NF;i++ ) {
if ( $i ~ /Mon|Tue|Wed|Thu|Fri|Sat|Sun/ ) {
j = 0
str = ""
for ( j=i; j<=NF;j++ ) {
str = ( str ? (str FS $j):$j )
}
print str
break
}
}
}'
}
答案1
对您的脚本进行以下修改似乎有效:
lastlogLatest() {
last -n 1 "${userName}" | awk ' $1 != "wtmp" {
for( i=1;i<=NF;i++ ) {
if ( $i ~ /Mon|Tue|Wed|Thu|Fri|Sat|Sun/ ) {
j = 0
str = ""
for ( j=i; j<=NF;j++ ) {
str = ( str ? (str FS $j):$j )
}
print str
break
}
}
}'
}
userName=somebody
lastlogin=$(lastlogLatest)
if [[ -z "$lastlogin" ]]; then
echo "${userName} not found in lastlog"
if cd /home/${userName} 2> /dev/null; then
date -d "@$(find . -type f -printf '%T@\n' 2> /dev/null | sort -n | head -n1)"
else
echo "No home directory found for ${userName}" 1>$2
fi
else
echo "$lastlogin"
fi
我在脚本中添加了一个小调整awk
,删除了告诉我们wtmp
日志何时开始的行,这样它就不会提取该日期并假设它是针对指定用户的。
另请注意,这要求执行它的用户有权检查指定用户的主目录及其中的文件。