무제한 배쉬 기록 [닫힘]


350

.bash_history파일을 무제한으로 만들고 싶습니다 . 예를 들어 항상 돌아가서 내가 어떻게 무언가를 구축 / 구성했는지, 그 멋진 명령이 무엇인지, 몇 주 전에 어떤 명령이 어떻게 깨 졌는지 확인할 수 있습니다. 이 설정을 어떻게 변경합니까?



1
Bash는 프로그래밍 언어이며 프로그래밍에 관한 것이 아닙니다.
NeilG

답변:


307

설정 HISTSIZEHISTFILESIZE빈 문자열의 .bashrc에 :

HISTSIZE= 
HISTFILESIZE=

bash 4.3 이상 에서는 다음 을 사용할 수도 있습니다 HISTSIZE=-1 HISTFILESIZE=-1.

n.  Setting HISTSIZE to a value less than zero causes the history list to be
    unlimited (setting it 0 zero disables the history list).

o.  Setting HISTFILESIZE to a value less than zero causes the history file size
    to be unlimited (setting it to 0 causes the history file to be truncated
    to zero size).

12
(export PROMPT_COMMAND = 'history -a')는 명령을 플러시하여 기록을 즉시 bash로 만들 수 있습니다.
cruelcage

3
설정 HISTSIZE= HISTFILESIZE=하면 적어도 나에게 bash 기록이 완전히 비활성화됩니다.
Philipp Ludwig 7

5
@PhilippLudwig 설정은 HISTSIZE=-1 HISTFILESIZE=-1내 역사를 비활성화 HISTSIZE= HISTFILESIZE=했지만 트릭을 수행했습니다. CentOS 7은 여기에 있습니다.
See

1
@PhilippLudwig 난 HISTSIZE= HISTFILESIZE=당신 보다 생각export HISTSIZE= export HISTFILESIZE=
Matzz

3
@Seether 대답은 "Bash 4.3 이상에서 ..."이라고 명확하게 나타납니다. CentOS 7에는 bash 4.2.x가 있습니다.
villapx

426

수년에 걸쳐 많은 크고 추악한 반복과 이상한 일이 일어난 후에, 나는 이것을 위해 .bashrc 의 간결한 섹션을 가지고 있습니다 .

먼저 .bashrc의이 섹션을 주석 처리하거나 제거 해야합니다 (Ubuntu의 기본값). 그렇지 않으면 screen세션 실행과 같은 특정 환경에서 여전히 기록이 잘립니다.

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

둘째, 이것을 .bashrc의 맨 아래에 추가 하십시오 :

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# http://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

참고 : 모든 명령은 실행 직후에 기록되므로 실수로 암호를 붙여 넣은 경우 기록 기록을 피하기 위해 "kill -9 %%"만 할 수 없으므로 수동으로 제거해야합니다.

또한 각 bash 세션은 전체 히스토리 파일을 메모리에로드하지만 히스토리 파일이 10MB로 증가하더라도 ( 시간이 오래 걸리는 경우) bash 시작 시간에 큰 영향을 미치지 않습니다.


1
@AquariusPower-정확히 위의 것을 시도하고 -1 대신 HISTFILESIZE=HISTSIZE=공백을 만들고 .bashrc 또는 .bash_profile 또는 .profile에 해당 매개 변수에 대한 다른 선언이 없는지 확인하십시오.
fotinakis 2016 년

2
의 범인 .bashrc, .bashrc에 의해로드 된 다른 파일에 설치를했습니다 ... 지금 작동합니다! 고마워!
물병 자리 힘

10
내 표준 bash 시스템에 추가하고 현재 기록을 추가하는 것도 좋습니다. 구성 후에 다음을 실행하십시오cat ~/.bash_history >>~/.bash_eternal_history
Jean-Christophe Meillaud

2
히스토리 히스토리를 유지하려면 현재 히스토리로 히스토리 파일을 초기화하십시오.
Arthur

3
많은 감사- 설정 HISTFILESIZE(및 가능하면 HISTSIZE)이 즉시 효력을 발휘 한다는 사실은 지나치게 강조 될 수 없습니다 .
Attie

37

요 르그 베이어는 위에서 언급 한 것처럼 HISTSIZEHISTFILESIZE열쇠입니다.

또한, 당신은해야 확실히 환경 변수 확인 HISTCONTROL당신이 멋진 일을 (중복 역사의 명령을 저장하지 좋아 수행 할 수 있습니다, HISTCONTROL=erasedups)를. 수백 줄 cd ..이상 을 탐색해야한다면 무제한 히스토리를 가질 필요가 없습니다 .

링크 : here , bash history 작업 . bash 변수 FAQ도 찾아 볼 가치 가 있습니다 .


13
이러한 cd 행은 발행 된 명령에 대한 컨텍스트를 제공합니다. 그들은 실제로 매우 유용합니다. 역사를 사용하는 유일한 방법이 한 번에 한 명령 씩 페이징하는 것 외에는 왜 누군가가 삭제하고 싶어하는지 이해할 수 없습니다.
iconoclast

@simont 또한 HISTCONTROL과 함께 ignorespace 옵션을 사용한 다음 암호와 같이 기록에 기록하고 싶지 않은 모든 항목에 이것을 사용합니다.
bigtunacan

6
일련의 명령을 재사용 할 경우 행을 순서대로 유지하는 것이 매우 유용합니다. 예를 들어 Ctrl-rsomechars Ctrl-o Ctrl-o Ctrl-o Ctrl-o. 그래서 나는 역사에서 중복을 유지합니다.
Stéphane Gourichon

1
@ StéphaneGourichon 무엇 Ctrl-o입니까?
Ciprian Tomoiagă

4
@ CiprianTomoiagă Ctrl-o는 프롬프트에서 명령을 실행하고 기록에서 이전 명령 바로 다음에 명령을 표시합니다. 한 가지 이점은 Ctrl-r이전 명령을 찾은 후 (이력에서 이웃 명령으로 이동하기 위해 위 / 아래 화살표를 사용하는 경우) 무한 루프에서도 이전 일련의 명령을 다시 실행하기 위해 여러 번 Ctrl누르고 있으면 충분하다는 것입니다 o네가 원한다면. 참조 : 위키 백과 - GNU Readline와
스테판 구리 콘

22

여기에 적어도 두 가지 관련 환경이 있습니다.

  • HISTSIZE : 히스토리 파일의 항목 수
  • HISTFILESIZE : 히스토리 파일의 줄 수

나는 무제한 이라는 용어 가 종종 매우 큰 것과 동일 하다는 것에 동의 할 수 있다고 생각합니다 (또는 무제한 파일 저장 공간이 있습니까?). 따라서 값을 매우 크게 설정하십시오.


23
"1000000000은 매우 작은 값의 무한대에 대해서만 무한대와 같습니다. – sepp2k"lol. 예, 나는 작은 값의 무한대에 만족합니다 (즉, 터미널을 자주 사용하는 한 달).
Francis Haart

6
터미널을 자주 사용하는 달은 무한한 작은 비율입니다. 터미널을 자주 사용하는 수명은 매우 작은 무한대의 값 과 같습니다 . 그러나 평생 터미널을 자주 사용하면 쉘 역사에 충분합니다. ;)
iconoclast

2
충분한 메모리를 사전 할당하려고하기 때문에 HISTSIZE 및 / 또는 HISTFILESIZE를 너무 크게 설정하면 이전 버전의 zsh가 중단됩니다. zsh를 쉘로 사용하는 도구 (예 : dbx)를 실행할 때 관련이 있습니다.
Brian Vandenberg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.