
예를 들어 오늘 날짜가 이번 달의 첫 번째 로그인인지 확인하는 방법이 있습니까? 내 스크립트에서 사용하려고합니다. 익숙 last
하지만 이 직업에 맞는 명령은 아닌 것 같습니다.
예를 들어 보겠습니다.
- 오늘이 이번 달 첫 로그인이라면 "first!"를 출력하세요.
- 그렇지 않으면 "아니요"를 에코합니다.
샘플 시나리오:
7월 2일은 7월 첫 로그인이었는데, 그날 5번 로그인했습니다. 첫 번째 로그인에서는 "first"만 표시되고 다음 4번 로그인에서는 "nope"만 표시되어야 합니다.
답변1
사용 last
및awk
last -R "$USER" | \
perl -ne 'print unless /wtmp\sbegins/ || /^$/' | \
awk 'END {print $4,$5,$6}'
last
파일 /var/log/wtmp
(또는 플래그로 지정된 파일 -f
)을 다시 검색하고 해당 파일이 생성된 이후 로그인(및 로그아웃)한 모든 사용자 목록을 표시합니다.
기본값은 /var/log/wtmp
매 달마다 생성됩니다.
% awk '/\/var\/log\/wtmp/,/}/' /etc/logrotate.conf
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
last -R $USER
/var/log/wtmp
해당 사용자에 대한 모든 항목을 반환합니다 . 첫 번째 로그인은 출력 맨 아래에 배치되므로 END
내 awk
명령에 포함됩니다.
% last -R "$USER"
aboettge pts/1 Wed Jul 15 12:04 still logged in
aboettge pts/1 Wed Jul 15 11:29 - 12:04 (00:34)
aboettge pts/1 Wed Jul 15 08:08 - 11:29 (03:21)
aboettge pts/1 Wed Jul 15 08:08 - 08:08 (00:00)
aboettge pts/1 Wed Jul 15 08:07 - 08:08 (00:00)
aboettge tty2 Wed Jul 15 08:03 still logged in
aboettge pts/1 Tue Jul 14 12:58 - down (00:53)
aboettge pts/1 Tue Jul 14 09:06 - 12:58 (03:51)
aboettge pts/1 Tue Jul 14 09:03 - 09:06 (00:02)
aboettge pts/1 Tue Jul 14 08:23 - 09:03 (00:40)
aboettge pts/1 Tue Jul 14 08:22 - 08:23 (00:00)
aboettge tty2 Tue Jul 14 08:22 - down (05:28)
aboettge pts/1 Mon Jul 13 12:01 - 16:26 (04:24)
aboettge pts/1 Mon Jul 13 11:49 - 11:59 (00:10)
aboettge pts/1 Mon Jul 13 11:46 - 11:49 (00:02)
aboettge tty2 Mon Jul 13 11:44 - down (04:42)
aboettge pts/2 Mon Jul 13 11:26 - 11:35 (00:08)
aboettge tty2 Mon Jul 13 11:25 - down (00:09)
aboettge pts/3 Fri Jul 10 14:26 - 14:28 (00:01)
aboettge pts/3 Fri Jul 10 14:23 - 14:26 (00:03)
aboettge pts/2 Fri Jul 10 13:34 - 15:27 (01:53)
aboettge pts/2 Fri Jul 10 13:31 - 13:31 (00:00)
aboettge pts/2 Fri Jul 10 13:25 - 13:30 (00:05)
aboettge pts/2 Fri Jul 10 10:28 - 13:19 (02:50)
aboettge pts/1 Fri Jul 10 08:35 - 15:27 (06:52)
aboettge tty2 Fri Jul 10 08:00 - down (07:28)
aboettge pts/1 Thu Jul 9 16:25 - 16:27 (00:01)
aboettge tty2 Thu Jul 9 16:21 - down (00:06)
aboettge tty1 Thu Jul 9 16:03 - crash (00:00)
aboettge tty1 Thu Jul 9 15:29 - 16:03 (00:33)
aboettge pts/1 Thu Jul 9 14:32 - 14:32 (00:00)
aboettge pts/1 Thu Jul 9 08:51 - 08:51 (00:00)
aboettge pts/1 Thu Jul 9 08:51 - 08:51 (00:00)
aboettge pts/1 Thu Jul 9 08:50 - 08:51 (00:00)
aboettge pts/1 Thu Jul 9 08:46 - 08:46 (00:00)
aboettge pts/1 Thu Jul 9 08:46 - 08:46 (00:00)
aboettge pts/1 Thu Jul 9 08:45 - 08:45 (00:00)
aboettge pts/1 Thu Jul 9 08:44 - 08:44 (00:00)
aboettge pts/1 Thu Jul 9 08:42 - 08:42 (00:00)
aboettge pts/1 Thu Jul 9 08:42 - 08:42 (00:00)
aboettge pts/1 Thu Jul 9 08:42 - 08:42 (00:00)
aboettge pts/1 Thu Jul 9 08:41 - 08:41 (00:00)
aboettge pts/1 Thu Jul 9 08:41 - 08:41 (00:00)
aboettge pts/1 Thu Jul 9 08:40 - 08:41 (00:00)
aboettge pts/1 Thu Jul 9 08:39 - 08:39 (00:00)
aboettge pts/1 Thu Jul 9 08:38 - 08:38 (00:00)
aboettge pts/1 Thu Jul 9 08:36 - 08:36 (00:00)
aboettge pts/1 Thu Jul 9 08:36 - 08:36 (00:00)
aboettge pts/1 Thu Jul 9 08:36 - 08:36 (00:00)
aboettge pts/1 Thu Jul 9 08:35 - 08:35 (00:00)
aboettge pts/1 Thu Jul 9 08:35 - 08:35 (00:00)
aboettge pts/2 Thu Jul 9 07:50 - 16:03 (08:12)
aboettge :0 Thu Jul 9 07:50 - crash (08:13)
aboettge pts/1 Wed Jul 8 16:13 - 16:27 (00:13)
aboettge pts/2 Wed Jul 8 13:47 - 16:27 (02:39)
aboettge pts/1 Wed Jul 8 11:30 - 14:14 (02:44)
aboettge pts/1 Wed Jul 8 08:18 - 11:29 (03:11)
aboettge :0 Wed Jul 8 08:02 - crash (23:47)
aboettge pts/2 Tue Jul 7 08:54 - 08:55 (00:00)
aboettge pts/1 Tue Jul 7 08:02 - 13:13 (05:10)
aboettge :0 Tue Jul 7 07:50 - down (05:23)
aboettge pts/1 Mon Jul 6 09:55 - 14:48 (04:53)
aboettge :0 Mon Jul 6 08:27 - crash (23:19)
aboettge pts/2 Fri Jul 3 07:52 - 15:30 (07:38)
aboettge :0 Fri Jul 3 07:51 - down (07:40)
aboettge pts/2 Thu Jul 2 15:16 - 15:18 (00:01)
aboettge pts/2 Thu Jul 2 15:07 - 15:07 (00:00)
aboettge pts/1 Thu Jul 2 14:46 - 16:21 (01:35)
aboettge pts/1 Thu Jul 2 09:53 - 09:53 (00:00)
aboettge pts/2 Thu Jul 2 08:00 - 14:41 (06:40)
aboettge :0 Thu Jul 2 08:00 - crash (23:47)
aboettge pts/5 Wed Jul 1 14:16 - 14:38 (00:21)
aboettge pts/3 Wed Jul 1 14:01 - 16:10 (02:09)
aboettge pts/2 Wed Jul 1 13:27 - 16:10 (02:42)
aboettge pts/1 Wed Jul 1 13:22 - 16:10 (02:48)
aboettge :0 Wed Jul 1 13:15 - 16:21 (03:05)
aboettge pts/2 Wed Jul 1 11:30 - 11:36 (00:06)
aboettge pts/1 Wed Jul 1 11:29 - 13:02 (01:32)
aboettge pts/1 Wed Jul 1 11:27 - 11:29 (00:01)
aboettge pts/2 Wed Jul 1 08:28 - 11:27 (02:58)
wtmp begins Wed Jul 1 08:28:18 2015
예
% last -R "$USER" | perl -ne 'print unless /wtmp\sbegins/ || /^$/' | awk 'END {print $4,$5,$6}'
Jul 1 08:28
고장
% last -R "$USER"
위 참조
perl -ne 'print unless /wtmp\sbegins/ || /^$/'
빈 줄을 제거하고
wtmp begins …
awk 'END {print $4,$5,$6}'
마지막 줄의 필드 4, 5, 6을 인쇄합니다. 기본 구분 기호는
(공백) 입니다.
답변2
를 사용하여 현재 wtmp
로그 파일을 구문 분석할 수 있습니다 rawtmp
.
먼저 도구를 설치합니다.
sudo apt-get install sac
그런 다음 다음 명령을 사용하십시오.
(rawtmp -s 07/01/15; rawtmp -s 07/01/15 -w /var/log/wtmp.1) \
| grep 'LOGIN Process' | sort | head -n 1 | awk -F: '{print $1}' \
| perl -pe 's/(\d+)/localtime($1)/e'
나에게는 다음과 같이 출력됩니다.
Wed Jul 1 08:40:58 2015
한 달 전체에 대한 항목을 얻으려면 명령이 rawtmp
두 번 호출됩니다. 두 번째로 저장된 로그 회전을 사용합니다( /var/log/wtmp.1
).
wtmp
회전 설정은 logrotate
우분투에서 관리되며 기본적으로 다음 위치에 저장됩니다 /etc/logrotate.conf
.
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
답변3
last <username> | tac | awk '{
if ( b != $5 && NR !=1 ){
b=$5; print $4,$5,$6,$7,$8,$9,$10
}
}'
매월 첫 번째 로그인이 표시됩니다 last
.
여기에서는 출력이 tac
반전됩니다 last
.
awk
한 달의 첫 번째 로그인인 5열에 새 문자열이 처음으로 나타나는 경우만 표시됩니다.
NR !=1
라인을 제거합니다 wtmp begins
.
답변4
로그인 직후 스크립트가 한 번만 실행되는 경우 last
또는 에 의존하지 않는 접근 방식은 빈 파일을 만드는 것입니다. /var/log/wtmp
다음 실행 시 생성 시간이 당월 첫 번째 순간보다 빠르거나 파일이 존재하지 않으면 ècho "first!"
. 두 경우 모두 touch
다음 번에 파일을 업데이트하거나 생성하십시오.
MONTH=`/bin/tempfile`
touch -d "01 $(date +'%b %y')" "$MONTH"
if [ ~/.lastlogin -ot "$MONTH" ]
then echo "first!"
fi
rm "$MONTH"
touch ~/.lastlogin