요구 사항은 명령이 실행 된 특정 날짜 및 시간이있는 파일에서 명령 줄 기록을 캡처하는 것입니다.

아래 스크립트는 날짜와 시간이 포함 된 기록을 캡처하지만 이전 명령의 현재 날짜와 시간도 할당합니다. 또한 내역 출력 파일의 증분 백업을 수행하도록 스크립트를 확장하고 싶습니다.

#!/bin/bash . ~/.bash_profile HISTFILE=~/.bash_history set -o history history >/home/user/hist_`date "+%d%b%y%T"` 

코멘트

  • 이 작업에 셸 기록을 사용하지 마십시오. ' 계정 또는 sudo (및 sudo 명령 기록)를 사용합니다.
  • 파일에서 기록 캡처를 위해 계정 또는 sudo를 사용하는 방법
  • sudo는 기록을 캡처하도록 구성 할 수 있습니다. )을 파일로 (또는 syslog를 통해). " 회계 "는 무엇을 의미합니까?
  • @SunLynx, 입력 한 모든 명령을 어떻게 기록 할 수 있습니까?

답변

정답이 아닙니다. 원했지만 bash를 가져와 기록의 각 줄에 자동으로 타임 스탬프를 추가 할 수 있습니다. 예를 들어 간단히 설정하면됩니다.

HISTTIMEFORMAT="%d%b%y%T " 

history 명령 인수가없는 는 다음과 같은 내역 항목을 표시합니다.

23Jul1515:48:14 ls -ld . 

history -w 명령은 항상 내부 형식 다음 중

#1437659315 ls -ld . 

즉 두 줄에서 첫 번째 줄은 “기원 이후”(즉, 1970 년 1 월 1 일) 시간을 초 단위로 유지하며 앞에 #가 있으므로 명령과 혼동되지 않습니다.

댓글

  • 위의 스크립트는 작동하지만 모든 명령에 현재 날짜를 할당합니다. 또한 모든 명령 후에 하나의 숫자가 생성되지만 ' 원하지 않습니다. 누구든지 도움을 줄 수 있다면 정말 도움이 될 것입니다.
  • " 하나의 숫자가 생성된다는 것이 무슨 뜻인지 모르겠습니다. ". 얻고 자하는 파일과 그 내용의 예를 들어 원래 질문을 편집 할 수 있습니까?
  • 598 05Jul15 00 : 00 : 01less .bash_history 599 05Jul15 00 : 00 : 01 # 1435987168 600 05Jul15 00 : 00 : 01man rsync 601 05Jul15 00 : 00 : 01 # 1435988263 602 05Jul15 00 : 00 : 01ls -lrt / srv / cloud- * 603 05Jul15 00 : 00 : 01 # 1435988281 604 05Jul15 00 : 00 : 01crontab -l 605 05Jul15 00 : 00 : 01 # 1435988290 606 05Jul15 00 : 00 : 01cat /srv/cloud-user_hist.sh
  • 이 메시지가 생성하는 것처럼
  • 댓글에서 읽기가 어렵습니다. 댓글을 제거하고 원래 작성한 질문 을 수정하십시오.

답변

bash에는 각 명령에 타임 스탬프를 기록하도록 bash에 지시하는 옵션이 있습니다. 환경 변수 HISTTIMEFORMAT에 유용한 값을 할당하여이를 수행합니다. bash 맨 페이지에서 :

이 변수가 설정되고 null이 아닌 경우 해당 값은 strftime(3)의 형식 문자열은 히스토리 내장에 의해 표시되는 각 히스토리 항목과 연관된 타임 스탬프를 인쇄합니다. 이 변수가 설정되면 시간 소인이 히스토리 파일에 기록되어 쉘 세션에서 보존 될 수 있습니다. 이것은 기록 주석 문자를 사용하여 타임 스탬프를 다른 기록 줄과 구분합니다.

내 환경에서는

명령을 쉽게 정렬하고 (%s는 초 단위의 타임 스탬프) 사람이 읽을 수 있도록합니다. 내 셸에서 history를 입력하면 다음과 같은 내용이 표시됩니다.

3 1437664568 (17:16:08):man bash 4 1437664699 (17:18:19):history 

편집 : OPs 질문 완전히 답변되지 않았습니다.

또한 기록 출력 파일의 증분 백업을 수행하도록 스크립트를 확장하고 싶습니다.

히스토리 파일의 “증분 백업”이 무엇을 의미하는지 잘 모르겠습니다. 히스토리를 주기적으로 백업하기를 원할 수도 있습니다. 다음과 같은 몇 가지 방법을 사용할 수 있습니다.

  • history -a를 사용하여 PROMPT_COMMAND 변수를 설정하여 매 호출 후 기록 명령을 지속적으로 업데이트합니다 (로그 아웃을 기다리는 대신).
  • 디버그 트랩 정의한 함수로 신호를 보냅니다. 명령을 입력 할 때마다 함수가 호출됩니다. 함수 내에서 모든 작업을 수행 할 수 있습니다. (PROMPT_COMMAND보다 약간 더 안정적입니다.)
  • 주기적으로 복사 / 보관하는 cronjob 기록 파일.

댓글

  • 제안 해 주셔서 감사하지만 ' 위에서 테스트했습니다. 역사에 대해 더 자세히 설명해 주시겠습니까? 셸 스크립트가 제대로 작동하지만 타임 스탬프가 잘못되었습니다.이것은 하나의 문제이고 다른 하나는 #으로 시작하는 모든 명령 다음에 하나의 숫자입니다. 예 : # 1435987168.
  • 기록 파일의 #1435987168 타임 스탬프입니다 ! 이를 사용자 친화적 인 형식으로 변환하는 몇 가지 방법이 있습니다. history -n _filename_를 사용하여 히스토리 파일을 bash로로드 한 다음 history를 사용합니다. . 또는 다음과 같이 할 수 있습니다. perl -lane '{ /^#(\d+)$/&&print "#".localtime($1) or print;}' $HISTFILE 타임 스탬프와 함께 기록을 표시합니다. 따라서 ' 타임 스탬프는 정확하지만 로케일 또는 시간대 문제가있는 것 같습니다.
  • history -a에 대해 자세히 설명하세요. div> ?? 매뉴얼 페이지는 약간 오해의 소지가 있습니다. $ HISTFILE로 지정된 파일에 현재 세션 기록을 추가합니다. 후속 호출은 마지막 호출 이후 생성 된 기록을 추가합니다 (' 전체 파일을 반복해서 덮어 쓰지 않음)

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다