~ / .bash_history에서 히스토리 삭제


8

에 저장된 터미널 또는 명령 줄 기록에 대한 몇 가지 질문이 ~/.bash_history있습니다.

  1. history명령으로 터미널에서 파일을 볼 수 있지만 gedit bash_history파일 로 열려고하면 완전히 비어 있습니다. 왜?

  2. 이 코드 줄을 사용하여 터미널에서 파일의 특정 줄 수를 삭제하는 방법을 찾았습니다.

    for i in {1..N}; do history -d N; done

    여기서 N은 삭제하려는 줄 수 또는 명령 수이지만 이제 기록 파일에는이 마지막 명령이 표시되며 물건을 덮으려고하면 그다지 똑똑하지 않습니다. 그래서 질문은 : 마지막 코드 줄을 어떻게 제공하고 이것이 기록되지 않도록 할 수 있습니까?



나중에 참고로 공백으로 명령을 시작하면 해당 명령이 기록에 저장되지 않습니다.
Paddy Landau

답변:


18
  1. 위의 점을 잊어 버렸습니다. (bash) 터미널 기록 파일을 여는 명령은 다음과 같습니다.

    gedit ~/.bash_history

    이 파일은 터미널 을 닫을 때만 업데이트됩니다 .

  2. 이 파일에서 마지막 10 행 을 제거 하고이 명령 자체를 기록하지 않으려면 새 터미널을 열고 다음 명령 체인을 실행하십시오.

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit

    또는

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit

    또는

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit

    sed또는 head각각으로부터 선택된 라인을 삭제 ~/.bash_history, history -c단말기의 이력을 지우고 exit를 닫는다.


for+ sed:에 대한 짧고 희망적으로 빠른 대안 : head -n -N대문자 N는 제거 할 줄의 수입니다. stackoverflow.com/a/13380679/711006
Melebius

2
@Melebius 유망 해 보이지만 출력을 덮어 쓰는 입력 파일로 출력을 어떻게 리디렉션합니까? head -n -N testfile > testfile파일을 지 웁니다! 해결 방법을 추가했지만 확실히 짧지는 않습니다.
디저트

당신이 바로 그 깜빡하는 head자리에서 같은 작동하지 않을 수 있습니다 sed. 나는 주로 루프를 sed대체 하는 단일 명령을 찾고있었습니다 for. 링크 된 페이지에 몇 가지 옵션이 있지만 코드만큼 이해하기 어려워 보입니다.
Melebius

@Melebius 참조는 sed1line.txt 그것을 위해 - 내가 위를 추가, 정말 짧은 아니지만 빨리해야한다.
디저트

4

bash_history 파일은 점으로 시작하는 숨겨진 파일입니다. 당신은해야합니다

gedit ~/.bash_history

파일이 gedit로 열립니다.


1

명령 로그의 특정 부분 만 삭제하려면 위의 방법으로도 충분합니다. 특정 bash 세션에 대한 명령 로깅을 중지하려면 명령을 발행하십시오.

unset HISTFILE

보다 과감하게 명령을 기록하지 않으려면 할 수 있습니다.

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

첫 번째 방법은 단일 세션에만 적용되는 반면, 두 번째 방법은 이후의 모든 세션에 대한 명령 로깅을 중지합니다.


1

나는 이것이 이미 받아 들일만한 대답을 가지고 있다는 것을 알고 있지만 이것이 80 년대 이후로해온 방법입니다. 트랙을 숨길 수있는 좋은 방법이며 다단계 접근 방식입니다. 대부분의 경우 실제로주의를 기울이지 않는 한 눈에 띄지 않는 것입니다. 방법은 다음과 같습니다.

터미널 / 쉘 / 세션을 열고 다음을 수행하십시오.

 chmod 444 ~/.bash_history

쉘을 종료하면 터미널 / 쉘 / 세션을 열고 다음을 수행하십시오. 히스토리를 영구적으로 지우는 창의적인 방법은 다음과 같습니다.

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (가짜 이력 만들기)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

그런 다음 좋은 측정을 위해 :

 chmod 444 ~/.bash_history

껍질을 나가다

새로운 껍질을 열고 입력

 history

덜 눈에 띄는 것은 ls -ratl을 수행하면 ~ / .bash_history는 결국 디렉토리 목록의 딸랑이에서 사라집니다. 불필요한주의를 끌 수있는 링크로 표시되지 않습니다. 대부분의 사람들은 루트에서 -a를 수행하지 않으므로 에뮬레이션이 필요할 때 유용합니다.

이 방법의 단점은 돌아가서 기록을 검색 할 수있는 능력을 상실한다는 것입니다. 실제 ~ / .bash_history 파일은 시간이 지남에 따라 실제로 오래된 수정 날짜로 끝날 수 있기 때문에 디렉토리 목록의 맨 위에있을 수 있습니다.


당신이 사용하는 경우 9999999 dd다음 파일의 모든 행을 삭제 :%d, :1,$d또는 dG직장 훨씬 더
phuclv

0

1) 실행 sh; 이것은 역사를 전혀 기록하지 않는 재의 하위 껍질을 만듭니다. 거기에서 편집

2) 라인을 추가 HISTCONTROL=ignoreboth로를 .bashrc, 그리고 어떻게 exec bash영구적으로 선도적 인 공간 로그인하지 않으 모든 명령을 한 후, A는 하나를 다시 초기화와 현재 쉘을 대체 할 수 있습니다.


0

아직 댓글을 달 수 없으므로 답변으로 내 댓글을 추가합니다.

man history 모든 것에 대답합니다.

# 1에 대한 답은 역사가 기억에 있다는 것입니다. history -a파일에 즉시 저장합니다. history -w또한 저장하지만 다른 세션을 망칠 수 있습니다.

답변 # 2 : history -a, gedit, 원하는 줄 삭제,history -r


0

기록은 쉘에서 로그 아웃 할 때까지 저장되지 않습니다. 쉘에서 로그 아웃 한 후 .bash_history를 다시보십시오. 명령 기록이 있어야합니다.


제안한대로 수정했습니다. 지금 충분합니까?
Lightning Stalker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.