본문 바로가기

CentOS/Study

[Study35]Linux Bash 셸 기술로 생산성 향상 - 히스토리(history)

반응형

history 명령어

사용자가 로그인 하게 되면 사용자의 명령어를 저장하기 위해서 Stack 공간이 할당된다. Stack 공간은 ksh 쉘을 사용하고 있다면, 기본값은 1000개의 명령어를 저장할 수 있는 공간이 할당된다. bash 쉘은 1000개의 명령어를 저장 할 수 있다. 또한 sh 쉘은 히스토리 기능이 없다.

위에서 언급한 sh 쉘의 제한 사항 외에도, 명령어의 크기 및 사용 빈도가 저장 가능한 명령어 수에 영향을 미칠 수 있습니다. 또한 일부 쉘은 스택 공간의 할당량 조정을 허용하여 더 많은 명령어를 저장할 수 있도록 할 수 있습니다.

사용자는 이러한 제한 사항을 인식하고 명령어 히스토리를 관리하기 위한 조치를 취해야 합니다. 이는 주기적으로 오래된 또는 사용되지 않는 명령어를 삭제하거나, 더 큰 스택 공간 할당을 허용하는 다른 쉘을 사용하는 것 등을 포함할 수 있습니다. 이렇게 함으로써 사용자는 시간이 지남에 따라 명령어 히스토리를 쉽게 액세스하고 관리할 수 있습니다.

~/.bash_history 파일은 터미널에서 실행한 명령어들의 목록을 포함합니다. 터미널에서 명령어를 실행할 때마다 이 파일에 저장됩니다. 이 파일을 사용하면 이전에 실행한 명령어들을 위/아래 화살표를 사용해 쉽게 찾아볼 수 있습니다. 특히 비슷한 명령어들을 자주 사용한다면 시간과 노력을 절약할 수 있습니다. 이 파일은 사용자의 홈 디렉토리에 저장되며, 텍스트 편집기를 사용하거나 명령어를 사용하여 내용을 볼 수 있습니다. 이 파일에 저장된 정보는 문제 해결 및 명령어 히스토리를 추적하는 데 유용할 수 있습니다.

 

예제 코드

# 히스토리 스택 크기 설정
HISTSIZE=1000

# 히스토리 파일 지속적으로 저장
HISTFILE=~/.bash_history

# 히스토리 파일 크기 제한
HISTFILESIZE=2000

# 이전에 실행한 명령 검색
history | grep ssh

# 이전에 실행한 명령 재실행
!ssh

# 히스토리 스택 삭제
history -c

위 코드에서는 HISTSIZE를 사용하여 히스토리 스택의 크기를 1000으로 설정하고, HISTFILE을 사용하여 히스토리 파일의 이름을 ~/.bash_history로 설정합니다. 또한, HISTFILESIZE를 사용하여 히스토리 파일의 크기를 2000으로 제한합니다.

또한, history를 사용하여 이전에 실행한 명령어를 검색하고, !ssh를 사용하여 이전에 실행한 ssh 명령을 재실행할 수 있습니다. 마지막으로, history -c를 사용하여 히스토리 스택을 삭제할 수 있습니다.

# /etc/profile 파일에서 HISTSIZE 설정값 찾기
grep -i histsize /etc/profile

위 코드는 /etc/profile 파일에서 HISTSIZE 설정값을 찾는 코드입니다. grep은 파일에서 주어진 패턴을 찾고 해당 라인을 출력하는 명령어입니다. -i 옵션은 대소문자를 구분하지 않도록 설정합니다.

# 현재까지 사용한 명령어 스택 출력
history | less
# 현재까지 사용한 명령어 스택 삭제
history -c

위 코드는 현재까지 사용한 명령어 스택을 출력하고 삭제하는 코드입니다. history 명령어는 사용자가 현재까지 실행한 명령어를 출력합니다. less 명령어는 출력 결과를 페이지 단위로 출력합니다.

하지만, 위 코드에서 중간에 주석에 /* 현재까지 사용한 스택에 들어간 명령이 출력 */ 이라는 내용이 있습니다. 이것은 history 명령어를 실행한 결과를 마지막에 출력하는 것으로 보입니다. 이를 삭제하는 것이 명확한 명령어 스택 삭제를 위해서는 필요합니다.

따라서, 아래와 같이 코드를 수정해주는 것이 좋습니다. 먼저 history 명령어를 실행하여 스택의 내용을 확인한 후, history -c 명령어를 실행하여 명령어 스택을 삭제합니다.

# 현재까지 사용한 명령어 스택 출력
history | less
# 현재까지 사용한 명령어 스택 삭제
history -c

 

alias

별칭(Alias)

별칭(Alias)은 명령어를 단축하여 입력할 수 있는 기능입니다. 복잡한 명령어를 간단하게 입력하거나 자주 사용하는 명령어의 이름을 짧게 만들어 사용할 수 있습니다.

단계 1: 별칭(alias) 등록

# alias cp='cp –i'
# alias   (# alias cp)
# unalias cp     < cp로 등록되어 있는 alias 해제

  • alias cp='cp –i': cp 명령어를 실행할 때 -i 옵션을 자동으로 추가해 줌
  • alias: 현재 등록된 별칭 목록을 출력
  • unalias cp: 등록된 cp 별칭을 해제

단계 2: 별칭(alias) 등록

# alias cp='cp –i'
# alias mv='mv –i'
# alias rm='rm –i'

# alias vi='/usr/bin/vim'
# alias pps='ps –ef | head –1 ; ps –ef | grep $1'

  • alias cp='cp –i': cp 명령어를 실행할 때 -i 옵션을 자동으로 추가해 줌
  • alias mv='mv –i': mv 명령어를 실행할 때 -i 옵션을 자동으로 추가해 줌
  • alias rm='rm –i': rm 명령어를 실행할 때 -i 옵션을 자동으로 추가해 줌
  • alias vi='/usr/bin/vim': vi 명령어를 vim으로 대체
  • alias pps='ps –ef | head –1 ; ps –ef | grep $1': $1에 해당하는 프로세스 정보를 출력하는 명령어

단계 3: 별칭(alias) 테스트

# alias a='cd /test && rm –rf /test/*'
# alias b='cp /etc/passwd file1 ; cp file1 file2 ; cp file1 file3'
# a
# b
# ls

  • alias a='cd /test && rm –rf /test/*': /test 디렉토리로 이동 후 /test 디렉토리 내부의 모든 파일과 디렉토리를 삭제하는 명령어
  • alias b='cp /etc/passwd file1 ; cp file1 file2 ; cp file1 file3': /etc/passwd 파일을 file1으로 복사한 후, file1을 file2와 file3로 복사하는 명령어
  • a: /test 디렉토리 내부의 모든 파일과 디렉토리 삭제
  • b: /etc/passwd 파일을 file1으로 복사한 후, file1을 file2와 file3로 복사
  • ls: 현재 디렉토리의 파일과 디렉토리 목록을 출력

위 코드에서는 별칭을 등록하는 과정에서 '-', '–'의 차이로 인해서 오류가 있을 수 있습니다.

별칭 등록시에는 '-'를 사용하시기 바랍니다.

반응형