리눅스 / 명령어 / history / 이전에 실행했던 명령어 목록 출력하는 명령어

Linux에서 Bash의 history 명령은 현재 셸에서 관리하는 명령 기록을 번호와 함께 보여줍니다. 기록을 조회해 이전 명령을 찾거나 다시 실행할 수 있으며, 기록 범위와 저장 여부는 셸 설정에 따라 달라집니다.

명령 기록 확인하기

다음 명령을 대화형 Bash 터미널에 입력합니다. history는 Bash에 내장된 명령으로, 현재 셸의 기록 목록을 출력합니다.

history

출력에는 각 항목의 번호와 명령이 표시됩니다. 예를 들어 42 pwd라는 줄은 해당 셸의 기록에서 42번 항목이 pwd라는 뜻입니다. 번호와 내용은 사용하는 계정, 세션 및 기록 설정에 따라 달라지므로 예제의 번호를 그대로 사용하지 마세요. 명령 실행 결과가 아니라 입력한 명령이 기록됩니다.

최근 항목만 보려면 숫자를 지정합니다. 다음 명령은 기록에서 마지막 10개 항목을 표시합니다.

history 10

목록에 이 history 10 명령 자체가 포함될 수도 있습니다. 원하는 명령이 보이지 않으면 기록 기능과 보관 크기, 제외 설정을 확인하세요.

기록 검색과 다시 실행

Bash의 기본 대화형 입력에서 위쪽 화살표를 누르면 이전 항목을 불러와 편집할 수 있습니다. Ctrl+R을 누르고 검색어를 입력하면 기록을 역방향으로 검색합니다. 찾은 명령은 내용을 확인한 후 실행하거나 수정할 수 있습니다.

기록 확장 기능이 켜진 대화형 Bash에서는 !!가 직전 기록 항목으로 확장됩니다. !n은 목록에서 번호가 n인 항목을 뜻합니다. 예를 들어 아래 명령은 현재 목록에 42번 항목이 있을 때 그 항목을 실행합니다.

!42

번호가 실제 기록과 일치하는지 먼저 확인하세요. 기록 확장은 보통 입력 후 바로 실행되므로 파일 삭제나 설정 변경 같은 명령은 특히 주의해야 합니다. 비대화형 셸에서는 기본적으로 기록 확장이 꺼져 있고 다른 셸에서는 동작이 다를 수 있습니다.

바로 실행하지 않고 직전 항목의 확장 결과만 보려면 작은따옴표로 감싸 다음과 같이 입력합니다. 화면에 표시된 명령이 실행되는 것은 아닙니다.

history -p '!!'

또는 shopt -s histverify를 설정하면 Readline을 사용하는 대화형 Bash에서 확장된 명령이 편집 줄에 표시되어 실행 전 확인할 수 있습니다. 현재 셸에서 설정을 되돌리려면 shopt -u histverify를 사용합니다. 자세한 내용은 Bash 기록 확장 설명을 참고하세요.

기록이 저장되는 위치와 시점

Bash는 기록을 메모리의 목록으로 관리하며, 시작할 때 HISTFILE에 지정된 파일에서 기록을 읽습니다. 일반적인 기본 파일은 ~/.bash_history이지만 환경이나 POSIX 모드에 따라 다를 수 있습니다. 현재 설정은 다음 명령으로 확인합니다.

printf '%s\n' "$HISTFILE"

기록이 활성화된 셸이 종료될 때 파일에 저장되지만, 파일이 쓰기 불가능하거나 HISTFILE이 설정되지 않았거나 비어 있으면 저장되지 않습니다. 여러 터미널은 각각 별도의 메모리 기록을 가지므로 한쪽에서 실행한 명령이 다른 쪽에 즉시 나타나지 않을 수 있습니다. histappend 옵션에 따라 종료 시 파일에 추가하거나 덮어쓰며, 설정과 동시 세션에 따라 결과가 달라집니다.

history -a는 현재 세션에서 아직 추가하지 않은 새 기록을 기록 파일에 덧붙입니다. 반면 history -w는 현재 목록으로 기록 파일을 덮어쓰므로 다른 세션의 기록을 잃을 수 있습니다. 여러 터미널을 사용하는 경우 이 차이를 확인한 뒤 사용하세요. 저장 동작은 Bash 기록 기능 문서에서 확인할 수 있습니다.

기록 크기와 제외 설정 확인

HISTSIZE는 메모리의 기록 항목 수를, HISTFILESIZE는 기록 파일의 최대 줄 수를 제어합니다. 여러 줄로 된 항목에는 파일 줄 수에 대한 예외가 있습니다. 현재 값은 다음과 같이 확인할 수 있습니다.

printf 'HISTSIZE=%s\nHISTFILESIZE=%s\nHISTCONTROL=%s\nHISTIGNORE=%s\n' "$HISTSIZE" "$HISTFILESIZE" "$HISTCONTROL" "$HISTIGNORE"

HISTCONTROL과 HISTIGNORE는 기록에서 제외할 입력을 정할 수 있습니다. 예를 들어 HISTCONTROL에 ignorespace가 포함되면 공백으로 시작하는 입력은 기록 목록에서 제외될 수 있습니다. 이는 셸 기록에 관한 설정일 뿐 다른 로그나 프로그램에 남는 기록까지 지워 주지는 않습니다.

기록 삭제와 민감한 정보

history -d 번호는 현재 셸의 기록 목록에서 지정한 항목을 삭제합니다. 먼저 history로 실제 번호를 확인하세요. history -c는 현재 목록 전체를 비우므로 신중히 사용해야 합니다. 두 명령은 이미 저장된 기록 파일이나 다른 셸의 목록을 자동으로 지우지 않습니다.

비밀번호나 토큰을 명령줄에 직접 입력하면 기록이나 다른 곳에 남을 수 있으므로 피하세요. 이미 비밀정보가 노출되었다면 기록 삭제만으로 해결됐다고 가정하지 말고 해당 자격 증명을 교체하고 관련 노출 범위를 확인해야 합니다.