SSH를 통해 다시 연결한 후 다른 "history" 명령 출력

SSH를 통해 다시 연결한 후 다른 "history" 명령 출력

연결이 끊긴 SSH 세션을 다시 연결한 후 동일한 사용자에 대해 "history" 명령에 대해 다른 결과를 얻는 이유는 무엇입니까?

  • 퍼티(SSH)를 사용하여 서버(예: 루트)에 연결합니다.
  • 인터넷이 다운됐어요
  • Putty 세션을 다시 연결합니다.
  • 마지막으로 사용한 명령을 다시 실행하기 위해 위쪽 화살표 키를 누르면 다른 명령이 표시됩니다.

다른 지점에 다시 연결했기 때문인 것 같아요. 내가 맞나요?

답변1

이는 로그아웃 중에 현재 세션의 명령 기록이 디스크로 플러시되기 때문입니다. 연결이 끊어진 경우 다시 연결하면 마지막으로 새로 고친 기록을 받게 됩니다.

다음 명령을 실행하여 기록을 디스크로 수동으로 플러시할 수도 있습니다.

history -a

인용하다 man history:

   history [n]
   history -c
   history -d offset
   history -anrw [filename]
   history -p arg [arg ...]
   history -s arg [arg ...]
          With no options, display the command history list with line numbers.  Lines listed with a * have been  modified.
          An  argument  of n lists only the last n lines.  If the shell variable HISTTIMEFORMAT is set and not null, it is
          used as a format string for strftime(3) to display the time stamp associated with each displayed history  entry.
          No intervening blank is printed between the formatted time stamp and the history line.  If filename is supplied,
          it is used as the name of the history file; if not, the value of HISTFILE is used.  Options, if  supplied,  have
          the following meanings:
          -c     Clear the history list by deleting all the entries.
          -d offset
                 Delete the history entry at position offset.
          -a     Append  the ‘‘new’’ history lines (history lines entered since the beginning of the current bash session)
                 to the history file.
          -n     Read the history lines not already read from the history file into the current history list.   These  are
                 lines appended to the history file since the beginning of the current bash session.
          -r     Read the contents of the history file and use them as the current history.
          -w     Write the current history to the history file, overwriting the history file’s contents.
          -p     Perform  history  substitution on the following args and display the result on the standard output.  Does
                 not store the results in the history list.  Each arg must be quoted to disable normal history  expansion.
          -s     Store  the  args  in the history list as a single entry.  The last command in the history list is removed
                 before the args are added.

          If the HISTTIMEFORMAT variable is set, the time stamp information associated with each history entry is  written
          to  the history file, marked with the history comment character.  When the history file is read, lines beginning
          with the history comment character followed immediately by a digit are interpreted as timestamps for the  previ-
          ous  history line.  The return value is 0 unless an invalid option is encountered, an error occurs while reading
          or writing the history file, an invalid offset is supplied as an argument to -d, or the history  expansion  sup-
          plied as an argument to -p fails.

답변2

기본적으로 @frzie가 질문에 대답했지만 명확히 하기 위해 쉘 세션에 로그인할 때 생성되는 임시 기록 파일이 있습니다. 로그아웃하면 이 기록 파일 .history$HOME.

로그아웃하지 않으셨기 때문에 추가가 발생하지 않았습니다. 이를 테스트하려면 명령을 실행 하고 history출력(임시 기록 포함)을 출력(즉, 의 파일 내용)과 cat $HOME/.history비교할 수 있습니다. 이러한 출력은 달라야 합니다(출력 중 하나에서 방금 실행한 명령만 표시되고 다른 출력에서는 표시되지 않는 경우에도). 이제 명령을 실행하면 파일은 거의 동일해야 합니다..history$HOMEhistoryhistory -a

답변3

기록 로깅 동작을 제어하는 ​​여러 환경 변수가 있습니다. 이들 중 일부는 다음과 같습니다:

HISTFILE=/home/saml/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000

일반적으로 발생하는 현상은 여러 개의 셸이 열려 있고 마지막으로 닫은 셸이 먼저 닫은 셸 이전에 작성된 일부 항목을 손상시키는 것입니다.

보세요명령 기록에 대한 Bash 참조 매뉴얼 섹션더 많은 정보를 알고 싶습니다.

관련 정보