bash 기록에서“history -d”숨기기


14

실수로 내 비밀번호 또는 bash에 민감한 것을 입력하면으로 해당 줄을 쉽게 제거 할 수 history -d ROW#있지만 항상 history -d ROW#누군가에게 실수를 고쳤다는 것을 보여주는 기록에 명령이 남아 있습니다.

bash 기록에 나타나지 않도록 명령에 무언가를 추가 할 수 있습니까?

답변:


27

기록에 단일 명령을 저장하지 않으려면 명령 앞에 공백이 있어야합니다 ( 여기 로 표시 ).

$ echo test
test
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2
$ echo test2
test2
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2

이 동작은 ~/.bashrc파일, 즉 다음 줄에 설정됩니다.

HISTCONTROL=ignoreboth

man bash 말한다 :

HISTCONTROL
명령이 내역 목록에 저장되는 방법을 제어하는 ​​콜론으로 구분 된 값 목록입니다. 값 목록이 포함 된 경우 ignorespace을 , 공백 문자로 시작하는 라인은 기록 목록에 저장되지 않습니다 . ignoreups 값은 이전 히스토리 항목과 일치하는 행을 저장하지 않습니다. 값 ignoreboth은 속기이다 ignorespaceignoredups .

ignoredups그건 그렇고 history | tail -n2위의 테스트에서 역사에 한 번만 나타나는 이유 입니다.


터미널 기록은 RAM에 저장되고 ~/.bash_history터미널을 닫 자마자 플러시됩니다 . 특정 항목을 삭제하려면 ~/.bash_history다음을 수행 하십시오 sed.

                                   # print every line…
sed '/^exit$/!d' .bash_history     # … which is just “exit”
sed '/^history/!d' .bash_history   # … beginning with “history”
sed '/>>log$/!d' .bash_history     # … ending with “>>log”
sed '\_/path/_!d' .bash_history    # … containing “/path/” anywhere

마지막에서 기본 구분 기호 /_검색어 내부에서 사용되는 것으로 변경 했습니다 sed -i '/\/path\//d' .bash_history. 실제로 이것은 같습니다 . 명령 출력 당신이 추가, 삭제하려는 경우에만 라인의 경우 -i옵션과 변화를 !d위해 d삭제를 수행합니다 :

                                   # delete every line…
sed -i '/^exit$/d' .bash_history   # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history   # … ending with “>>log”
sed -i '\_/path/_d' .bash_history  # … containing “/path/” anywhere

12

한 가지 방법은 HISTIGNORE환경 변수 를 설정하는 것입니다. 에서man bash

HISTIGNORE
      A colon-separated list of patterns used to decide which  command
      lines  should  be  saved  on  the history list.  Each pattern is
      anchored at the beginning of the line and must  match  the  com‐
      plete  line  (no  implicit  `*'  is  appended).  Each pattern is
      tested against the line after the checks specified  by  HISTCON‐
      TROL  are  applied. 

[FWIW의 경우, HISTCONTROL전면 유형 공간 해결 방법을 제공하는 것이 기본값 입니다].

예를 들어

HISTIGNORE='history -d*'

지속적으로 유지하려면 ~/.bashrc

export HISTIGNORE='history -d*'

6

당신은 할 수 있습니다

  • 터미널 창을 닫습니다 . 그러면 터미널 창에서 마지막으로 닫은 (최근 다른 창을 닫은 후) 파일의 최신 기록이 플러시됩니다./home/$USER/.bash_history

  • /home/$USER/.bash_historybash예를 들어 Alt+ 를 통해 좋아하는 편집기를 시작 하여을 포함하지 않고 파일편집F2

    이렇게하면 전체 기록을 검사하고 더 이상 존재하지 않는 명령을 제거 할 수 있습니다.

    여기에 이미지 설명을 입력하십시오

    여기에 이미지 설명을 입력하십시오


1

나는 보통 다음을 사용합니다.

history -w; history -c; $EDITOR $HISTFILE; history -r

히스토리 파일은 디스크에 기록되고 메모리에서 지워지고 원하는 작업을 수행하도록 편집 한 다음 편집 한 히스토리 파일을 다시 읽습니다.

편집기가 백업 파일을 저장하면 나쁜 단어가 여전히 디스크에 나타날 수 있습니다.

사용하는 또 다른 옵션 -d은 예측 기록 번호를 사용하는 것입니다.

startide sr> # good thing
startide sr> # bad thing
startide sr> history | tail -n 2
17239  # bad thing
17240  history | tail -n 2
startide sr> history -w; history -d 17239; history -d 17239; history -d 17239
startide sr> # other thing
startide sr> history | tail -n 3
17239  # good thing
17240  # other thing
17241  history | tail  -n 3

이 예에서는 잘못된 것을 삭제하고 기록 번호를 얻기 위해 명령을 삭제 한 다음 기록을 삭제하는 데 사용한 명령을 삭제합니다. 그때 모든 것이 위생 처리됩니다.


0

기록에 저장하지 않고 명령을 실행하려면 추가 공간을 두십시오

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

이것이 작동하려면 HISTCONTROL에서 ignorespace 또는 ignoreboth가 필요합니다. 예를 들어

HISTCONTROL = ignorespace이 설정을 영구적으로 유지하려면 .bashrc에 넣으십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.