bash는 시작 시 "HISTFILE"을 메모리에 로드합니까?

bash는 시작 시 "HISTFILE"을 메모리에 로드합니까?

history나는 bash 및 관련 bash 변수에 대한 비디오를 시청했습니다 . stackoverflow 질문 링크가 있습니다이 비디오그것은 편집을 언급했습니다 .bash_history.

$HISTFILEmy 파일을 쉘 A의 로컬 파일로 변경 하고 첫 번째 줄을 쉘 A의 파일 cd로 변경한 다음 실행하여 .lshistorycd

    1  Sun 22/Dec/19 07:59:02 cd
    2  Sun 22/Dec/19 07:59:12 view ~/.bash_profile
    3  Sun 22/Dec/19 08:00:22 history 5
    4  Sun 22/Dec/19 08:00:58 vim ~/.bash_profile
    5  Sun 22/Dec/19 08:01:43 history 5
    6  Sun 22/Dec/19 08:01:59 history 4
    7  Sun 22/Dec/19 08:30:36 echo $HISTFILE
    8  Sun 22/Dec/19 08:30:48 vim $HISTFILE
    9  Sun 22/Dec/19 08:31:02 history

그런 다음 쉘 B를 열고 history. 이는 명령의 출력입니다. 새 쉘은 첫 번째 줄을 ls.

    1  Sun 22/Dec/19 07:59:02 ls
    2  Sun 22/Dec/19 07:59:12 view ~/.bash_profile
    3  Sun 22/Dec/19 08:00:22 history 5
    4  Sun 22/Dec/19 08:00:58 vim ~/.bash_profile
    5  Sun 22/Dec/19 08:01:43 history 5
    6  Sun 22/Dec/19 08:01:59 history 4
    7  Sun 22/Dec/19 08:31:19 history

그러면 bash프로세스가 열 때마다 기록 파일이 메모리에 로드됩니까? 따라서 매우 큰 경우 $HISTFILE메모리 문제가 크지 않습니까?

답변1

예, (에서) 메모리에 로드됩니다 man bash.

시작 시 기록은 HISTFILE 변수(기본값 ~/.bash_history)로 명명된 파일에서 초기화됩니다. 필요한 경우 HISTFILE 값으로 명명된 파일은 HISTFILESIZE 값으로 지정된 행 수를 초과하지 않도록 잘립니다.

예, 이론적으로는 문제가 될 수 있지만 요즘 대부분의 컴퓨터에는 이를 처리할 수 있는 충분한 메모리가 있습니다. 예를 들어, 내 안에는 다음이 있습니다 ~/.profile.

$ grep SIZE ~/.profile
export HISTSIZE=999999
export HISTFILESIZE=999999

이로 인해 내 기록에는 999999가 남습니다. 지금까지 나는 여기 있다:

$ history | wc
 109207  637303 4614715

~/.bash_history이렇게 하면 약 3.7M의 파일 크기가 제공됩니다 .

$ ls -l ~/.bash_history
-rw-r--r-- 1 terdon terdon 3846502 Dec 21 18:15 /home/terdon/.bash_history

내 32G RAM 노트북에서는 이 현상이 눈에 띄지도 않습니다.

어쨌든 그게 바로 나야. 나는 풍부한 역사를 선택했기 때문에 내가 얻는 이점을 위해 약간의 속도를 희생할 수도 있습니다. 이를 원하지 않으면 기본값( man bash)을 유지할 수 있습니다.

   HISTFILESIZE
          The maximum number of lines contained in the history file.  When
          this  variable  is  assigned  a value, the history file is trun‐
          cated, if necessary, to contain no  more  than  that  number  of
          lines  by removing the oldest entries.  The history file is also
          truncated to this size after writing it when a shell exits.   If
          the  value  is  0,  the  history file is truncated to zero size.
          Non-numeric values and numeric values  less  than  zero  inhibit
          truncation.   The  shell  sets the default value to the value of
          HISTSIZE after reading any startup files.
   HISTSIZE
          The  number  of commands to remember in the command history (see
          HISTORY below).  If the value is 0, commands are  not  saved  in
          the history list.  Numeric values less than zero result in every
          command being saved on the history list  (there  is  no  limit).
          The  shell  sets  the  default  value  to  500 after reading any
          startup files.

따라서 기본 크기는 명령 500개에 불과하며 이는 오늘날의 컴퓨터에서는 실제로 무시할 수 있는 수준입니다. 이것이 너무 많으면 언제든지 더 낮게 설정할 수 있습니다.

관련 정보