연도를 표시하도록 "마지막" 명령의 출력 형식을 변경할 수 있습니까?

연도를 표시하도록 "마지막" 명령의 출력 형식을 변경할 수 있습니까?

저는 Solaris 10 서버의 모든 사용자에 대한 최근 로그인을 보고하는 방법을 찾으려고 노력하고 있습니다. 명령의 출력부터 시작합니다 last. 이 명령을 사용하면 다음과 같은 출력을 얻습니다.

bd9439    pts/1        vpn-xxx-xx-xxx-x Fri Oct 25 10:46   still logged in
vf7854    pts/1        vpn-xxx-xx-xxx-x Fri Oct 25 10:23 - 10:38  (00:15)

매뉴얼 페이지에 따르면 날짜 및 시간 형식은 로케일 설정에 의해 제어됩니다. 나는 로캘 설정을 거의 사용하지 않습니다. 날짜의 "연도" 부분을 포함하도록 디스플레이를 변경하는 데 사용할 수 있는 것이 있습니까? 다음과 유사한 출력 라인을 얻고 싶습니다.

bd9439    pts/1        vpn-xxx-xx-xxx-x Fri Oct 25 2013 10:46   still logged in
vf7854    pts/1        vpn-xxx-xx-xxx-x Fri Oct 25 2013 10:23 - 10:38  (00:15)

last매뉴얼 페이지가 명령 자체의 출력을 참조하고 있는지, 아니면 데이터가 실제로 /var/adm/wtmpx에 어떻게 저장되어 있는지는 확실하지 않습니다 .

이 "마지막 로그인" 속성을 얻는 다른 방법이 있다면 이에 대해 배우고 싶습니다.

답변1

반은 맥락을 제공하고 반은 고함을 지르고 있어요

당신이 접한 예는 제가 Solaris 시스템 관리를 좋아하지 않는 주된 이유를 보여줍니다. 간단한 것은 없습니다.

로케일이 실제로 타임스탬프의 일부 부분의 순서를 변경하는 것 이외의 다른 작업을 수행하는지 여부는 알 수 없습니다. 솔라리스가 이것을 1년 동안 제공하도록 설득하는 방법을 아는 사람이 있다면 관심이 있지만 last숨을 멈추지 않겠습니다. 소프트웨어 개발에 대한 Sun의 주문은 "기술적으로 가능"한 것 같습니다.

Sun은 그들이 절대적으로 필요로 하는 기능을 개발한 후 거의 거기서 멈춘 것 같습니다. 따라서 일반적으로 받아들여지는 이와 같은 솔루션을 얻게 되며, 일반적인 문제에 대한 해결 방법 목록만 유지하면 됩니다.

내가 찾은 유일한 방법은 /usr/lib/acct/fwtmp파이프의 전체 내용을 텍스트 출력을 조작하는 데 사용하는 다른 프로그램( , 등)에 덤프하는 것입니다./var/adm/wtmpxgreptacsed

보너스: 파일의 끝을 찾고 고정된 wtmpx레코드 길이만큼 뒤로 이동하는 것은 너무 까다로우므로 파일에 나타나는 내용 fwtmp만 인쇄하십시오 . wtmpx따라서 tac실제로 가장 오래된 정보(예:적어도가능한 사용 사례이지만 다른 의견입니다).

시스템이 실행된 기간에 따라 wtmpx약간 클 수 있으므로 커피 한잔 마시고 싶을 수도 있고, 타이어 공기압이 부족한지 확인하고, 휴식을 취하면서 책 한두 권을 읽을 수도 있습니다. 그것에서.

귀하의 질문에 대한 실제 답변:

last다음은 로그인 기록을 보는 데 관심이 있는 대부분의 사람들에게 작동하는 모의 명령입니다 .

# cat /var/adm/wtmpx | /usr/lib/acct/fwtmp | tac | head 

wtmpx에 공급할 파일을 제공하지 않기 때문에 파이프로 연결해야 한다는 것을 알 수 있습니다 fwtmp. 이는 대부분의 사용 사례에서 Technically Works™를 통해 입력하면 stdin몇 가지를 작성할 필요가 없기 때문입니다. 추가 코드 줄. 그래서 그들은 관리자가 그렇게 하도록 놔두는 편이 낫습니다.

다음은 내가 관리하는 시스템의 위 출력 예입니다.

[root@atum root]# cat /var/adm/wtmpx | /usr/lib/acct/fwtmp | tac | head
jadavis6                         ts/1 pts/1                                19410  7 0000 0000 1382723864 157168 0 19 ditirlns01.xxx.edu Fri Oct 25 13:57:44 2013
jadavis6                              sshd                                 19404  7 0000 0000 1382723864 133973 0 19 ditirlns01.xxx.edu Fri Oct 25 13:57:44 2013
oracle                                sshd                                  6640  8 0000 0000 1382713401 157107 0 0  Fri Oct 25 11:03:21 2013
oracle                           ts/1 pts/1                                 6647  8 0000 0000 1382713401 150489 0 0  Fri Oct 25 11:03:21 2013
oracle                           ts/1 pts/1                                 6647  7 0000 0000 1382712445 24488 0 23 a0003040148735.xxx.edu Fri Oct 25 10:47:25 2013
oracle                                sshd                                  6640  7 0000 0000 1382712442 304729 0 23 a0003040148735.xxx.edu Fri Oct 25 10:47:22 2013
jadavis6                              sshd                                 23537  8 0000 0000 1382560970 410725 0 0  Wed Oct 23 16:42:50 2013
jadavis6                         ts/1 pts/1                                23544  8 0000 0000 1382560970 404795 0 0  Wed Oct 23 16:42:50 2013
jadavis6                         ts/1 pts/1                                23544  7 0000 0000 1382552999 619524 0 19 ditirlns01.xxx.edu Wed Oct 23 14:29:59 2013
jadavis6                              sshd                                 23537  7 0000 0000 1382552999 602215 0 19 ditirlns01.xxx.edu Wed Oct 23 14:29:59 2013
[root@atum root]#

편집하다:

사소한 일에 대해 불평하고 있다는 것을 알지만, 잠시 후에는 모든 사소한 일(단순히 "지금이 몇 년입니까?"라고 묻는 것과 같은)이 한 시간 동안 진행되는 Google Fest로 바뀌거나 사물에 대한 부족 지식으로 바뀌는 것에 싫증이 납니다. (예를 들어 의 존재 fwtmp).

답변2

GNU/Linux는 last-F스위치를 제공합니다. 그러나 솔라리스가 이렇게 한다면 나는 놀랄 것입니다.

내부적으로 wtmp파일에는 에포크 타임스탬프가 있어야 하므로 C나 Perl로 무언가를 작성하려는 경우 고유한 last명령을 만들 수 있습니다. 이 구조에 해당하는 C 헤더 파일을 살펴봐야 합니다. 이 파일 wtmp은 "바이너리" 파일이므로 표준 구문 분석 도구를 사용하여 평가하는 데 적합하지 않습니다.

wtmp파일이 어느 연도에 적용되는지 알 수 있도록 정기적으로 파일을 제출하고 자르는 것을 고려하십시오 .

답변3

비슷한 경우가 있지만 사용자 정의 형식의 로그인 날짜가 필요합니다. 이것은 나에게 효과적입니다.

date -d "`last -F | head -n1 | sed -r 's/.*\.[0-9]+\s+//' | sed -r 's/\s(still|-).*//'`" +"%F_%R"

관련 정보