
Linux 셸은 실행 한 명령의 기록을 저장하고 검색하여 과거에 실행 한 명령을 반복 할 수 있습니다. Linux history 명령과 사용법을 이해하면 생산성이 크게 향상 될 수 있습니다.
역사 조작
조지 산타 야나 (George Santayana)는 유명하게 말했듯이“과거를 기억할 수없는 사람들은 그것을 반복해야한다. 불행히도 Linux에서는 과거를 기억할 수없는 경우 원하더라도 반복 할 수 없습니다.
그때는 리눅스 history 명령이 편리합니다. 이전 명령을 검토하고 반복 할 수 있습니다. 이는 게으름을 장려하거나 시간을 절약하기위한 것이 아니라 효율성 (그리고 정확성) 요소이기도합니다. 명령이 길고 복잡할수록 오류없이 기억하고 입력하기가 더 어려워집니다. 두 가지 유형의 오류가 있습니다. 하나는 명령이 작동하지 못하게하는 것과 다른 하나는 명령이 작동하게하지만 예기치 않은 작업을 수행하는 것입니다.
그만큼 history 명령은 이러한 문제를 제거합니다. 대부분의 Linux 명령과 마찬가지로 생각보다 많은 기능이 있습니다. 그러나 사용 방법을 배우면 history 명령을 사용하면 매일 Linux 명령 행 사용을 향상시킬 수 있습니다. 시간의 좋은 투자입니다. 사용하는 훨씬 더 좋은 방법이 있습니다 history 위 화살표를 반복해서 누르는 것보다
역사 명령
가장 간단한 형태로 history 이름을 입력하여 명령 :
history

그런 다음 이전에 사용 된 명령 목록이 터미널 창에 기록됩니다.

명령은 목록의 끝에 가장 최근에 사용 된 번호가 가장 높은 번호가 지정됩니다.
특정 수의 명령을 보려면 history 명령 행에서. 예를 들어, 최근에 사용한 10 개의 명령을 보려면 다음을 입력하십시오.
history 10

파이프하면 동일한 결과를 얻을 수 있습니다 history 를 통해 tail 명령. 이렇게하려면 다음을 입력하십시오.
history | tail -n 10

관련 : Linux에서 파이프를 사용하는 방법
반복 명령
히스토리 목록에서 명령을 재사용하려면 느낌표 (!)와 사이에 공백이없는 명령 수를 입력하십시오.
예를 들어 명령 번호 37을 반복하려면 다음 명령을 입력하십시오.
!37

마지막 명령을 반복하려면 공백없이 두 개의 느낌표를 다시 입력하십시오.
!!

명령을 실행하고 사용을 잊었을 때 유용 할 수 있습니다 sudo . 유형 sudo, 한 칸, 이중 느낌표를 입력 한 다음 Enter 키를 누르십시오.
다음 예에서는 필요한 명령을 입력했습니다. sudo. 전체 줄을 다시 입력하는 대신 많은 키 입력을 저장하고 바로 입력 할 수 있습니다. sudo !!, 아래 그림과 같이:
mv ./my_script.sh /usr/local/bin/
sudo !!

따라서 목록에서 해당 숫자를 입력하여 명령을 반복하거나 이중 느낌표를 사용하여 마지막으로 사용한 명령을 반복 할 수 있습니다. 그러나 다섯 번째 또는 여덟 번째 명령을 반복하려면 어떻게해야합니까?
느낌표, 하이픈 (-) 및 이전 명령의 수 (공백없이)를 반복하여 사용할 수 있습니다.
이전 13 번째 명령을 반복하려면 다음을 입력하십시오.
!-13

문자열로 명령 검색
특정 문자열로 시작하는 마지막 명령을 반복하려면 느낌표를 입력 한 다음 공백없이 문자열을 입력 한 다음 Enter 키를 누릅니다.
예를 들어, 마지막으로 시작한 명령을 반복하려면 sudo이 명령을 입력하십시오.
!sudo

하지만 여기에는 위험 요소가 있습니다. 마지막으로 시작한 명령이 sudo 당신이 생각하는 것이 아니라면, 잘못된 명령을 내립니다.
안전망을 제공하기 위해 :p 아래와 같이 (print) 수정 자 :
!sudo:p

이것은 지시합니다 history 명령을 실행하지 않고 터미널 창에 인쇄합니다. 이를 통해 명령을 사용하기 전에 볼 수 있습니다. 원하는 명령이면 위쪽 화살표를 누른 다음 Enter 키를 눌러 사용하십시오.
특정 문자열이 포함 된 명령을 찾으려면 느낌표와 물음표를 사용할 수 있습니다.
예를 들어 단어 “별칭”이 포함 된 첫 번째 일치 명령을 찾아서 실행하려면 다음 명령을 입력하십시오.
!?aliases

문자열에 나타나는 위치에 관계없이 문자열 “별칭”이 포함 된 명령을 찾습니다.
대화식 검색
대화식 검색을 사용하면 일치하는 명령 목록을 탐색하고 원하는 명령을 반복 할 수 있습니다.
Ctrl + r을 누르면 검색이 시작됩니다.

검색 단서를 입력하면 첫 번째 일치 명령이 나타납니다. 입력 한 문자는 백틱 (`)과 아포스트로피 ( ') 사이에 나타납니다. 각 문자를 입력하면 일치하는 명령이 업데이트됩니다.

Ctrl + r을 누를 때마다 터미널 창에 나타나는 다음 일치 명령을 뒤로 검색합니다.

Enter를 누르면 표시된 명령이 실행됩니다.

명령을 실행하기 전에 편집하려면 왼쪽 또는 오른쪽 화살표 키를 누르십시오.

명령 행에 명령이 나타나고 편집 할 수 있습니다.

다른 Linux 도구를 사용하여 히스토리 목록을 검색 할 수 있습니다. 예를 들어, history 으로 grep 문자열 “별칭”이 포함 된 명령을 검색하면이 명령을 사용할 수 있습니다.
history | grep aliases

마지막 명령 수정
오타를 수정 한 다음 명령을 반복해야하는 경우 캐럿 (^)을 사용하여 수정할 수 있습니다. 명령의 철자가 틀리거나 다른 명령 행 옵션 또는 매개 변수를 사용하여 다시 실행하고자 할 때마다 소매를 준비하는 좋은 방법입니다.
이를 사용하려면 공백없이 캐럿, 바꾸려는 텍스트, 다른 캐럿, 바꿀 텍스트, 다른 캐럿을 입력 한 다음 Enter 키를 누릅니다.
예를 들어, 실수로 “sshd”대신 “shhd”를 입력하여 다음 명령을 입력한다고 가정합니다.
sudo systemctl start shhd
다음을 입력하여 쉽게 수정할 수 있습니다.
^shhd^sshd^

“shhd”가 “sshd”로 수정 된 상태로 명령이 실행됩니다.
히스토리 목록에서 명령 삭제
기록을 사용하여 내역 목록에서 명령을 삭제할 수도 있습니다. -d (삭제) 옵션. 철자 목록에서 철자가 틀린 명령을 유지할 이유가 없습니다.
당신이 사용할 수있는 grep 그것을 찾으려면 history 와 더불어 -d 옵션을 삭제 한 다음 다시 검색하여 사라 졌는지 확인하십시오.
history | grep shhd
history -d 83
history | grep shhd

또한 다양한 명령을 -d 선택권. 22에서 32까지의 모든 목록 항목을 삭제하려면 다음 명령을 입력하십시오.
history -d 22 32
마지막 5 개 명령 만 삭제하려면 다음과 같이 음수를 입력하면됩니다.
history -d -5
히스토리 파일 수동 업데이트
터미널 세션에 로그인하거나 열면 히스토리 파일에서 히스토리 목록이 읽 힙니다. Bash에서 기본 히스토리 파일은 .bash_history.
현재 터미널 창 세션에서 변경 한 내용은 터미널 창을 닫거나 로그 아웃 할 때 기록 파일에만 기록됩니다.
첫 번째 터미널 창에 입력 한 명령을 포함하여 전체 내역 목록에 액세스하기 위해 다른 터미널 창을 열고 싶다고 가정합니다. 그만큼 -a (all) 옵션을 사용하면 두 번째 터미널을 열기 전에 첫 번째 터미널 창에서이 작업을 수행 할 수 있습니다.
사용하려면 다음을 입력하십시오.
history -a

명령은 히스토리 파일에 자동으로 작성됩니다.
내역 목록의 모든 변경 사항을 내역 파일에 기록하려면 (예를 들어 일부 이전 명령을 삭제 한 경우) -w (쓰기) 옵션은 다음과 같습니다.
history -w

히스토리리스트 지우기
기록 목록에서 모든 명령을 지우려면 -c 다음과 같은 (클리어) 옵션 :
history -c

이 변경 사항을 히스토리 파일에 강제로 추가하려면 -w 옵션은 다음과 같습니다.
history -w
보안 및 기록 파일
명령 줄에 민감한 정보 (예 : 비밀번호)를 입력해야하는 응용 프로그램을 사용하는 경우 기록 파일에도 저장됩니다. 특정 정보를 저장하지 않으려면 다음 명령 구조를 사용하여 기록 목록에서 즉시 삭제할 수 있습니다.
special-app my-secret-password;history -d $(history 1)
history 5

이 구조에는 세미콜론 (;)으로 구분 된 두 개의 명령이 포함됩니다. 이것을 분해하자 :
- 특별 응용 프로그램: 사용중인 프로그램의 이름입니다.
- 내 비밀 암호: 명령 줄에서 응용 프로그램에 제공해야하는 비밀 암호입니다. 이것은 명령 하나의 끝입니다.
-
역사 -d: 커맨드 2에서
-d(삭제) 옵션history. 우리가 삭제할 것은 명령의 다음 부분에 있습니다. -
$ (역사 1): 명령 대체를 사용합니다. 에 포함 된 명령 부분
$()서브 쉘에서 실행됩니다. 해당 실행 결과는 원래 명령에 텍스트로 게시됩니다. 그만큼history 1command는 이전 명령을 반환합니다. 따라서 두 번째 명령을 history -d“마지막 명령”이라고 생각할 수 있습니다.
당신은 사용할 수 있습니다 history 5 명령을 사용하여 비밀번호를 포함하는 명령이 히스토리 목록에서 제거되었는지 확인하십시오.
그래도 더 간단한 방법이 있습니다. Bash는 기본적으로 공백으로 시작하는 행을 무시하므로 다음과 같이 행 시작 부분에 공백을 포함하십시오.
special-app another-password
history 5

비밀번호가 포함 된 명령은 내역 목록에 추가되지 않습니다. 이 트릭이 작동하는 이유는 .bashrc 파일.
.bashrc 파일
그만큼 .bashrc 파일은 로그인하거나 터미널 창을 열 때마다 실행됩니다. 또한 동작을 제어하는 일부 값이 포함되어 있습니다. history 명령. 이 파일을 gedit.
다음을 입력하십시오.
gedit .bashrc

파일 상단 근처에 두 개의 항목이 있습니다.
-
HISTSIZE: 히스토리 목록에 포함 할 수있는 최대 항목 수입니다. -
HISTFILESIZE: 히스토리 파일이 포함 할 수있는 행 수의 한계.

이 두 값은 다음과 같은 방식으로 상호 작용합니다.
- 터미널 창 세션에 로그인하거나 시작하면 기록 목록이
.bash_history파일. - 터미널 창을 닫을 때 설정 한 최대 명령 수
HISTSIZE에 저장됩니다.bash_history파일. - 만약
histappend쉘 옵션이 활성화되면 명령이 추가됩니다.bash_history. 만약histappend설정되지 않은.bash_history덮어 씁니다. - 히스토리 목록에서 명령을 저장 한 후
.bash_history, 기록 파일이 더 이상 포함되지 않도록 잘립니다.HISTFILESIZE윤곽.
또한 파일 상단 근처에는 HISTCONTROL 값.

이 값을 설정하여 다음 중 하나를 수행 할 수 있습니다.
-
ignorespaces:공백으로 시작하는 줄은 내역 목록에 추가되지 않습니다. -
ignoredups:중복 명령은 기록 파일에 추가되지 않습니다. -
ignoreboth:위의 두 가지를 모두 사용합니다.
내역 목록에 추가하지 않으려는 특정 명령을 나열 할 수도 있습니다. 콜론 (:)으로 구분하고 따옴표 (“…”)로 묶습니다.
이 구조를 따라 라인을 추가하십시오. .bashrc 파일을 무시하고 무시하려는 명령을 대체하십시오.
export HISTIGNORE="ls:history"

타임 스탬프 사용
기록 목록에 타임 스탬프를 추가하려는 경우 HISTIMEFORMAT 환경. 그렇게하려면 다음과 같은 줄을 .bashrc 파일:
export HISTTIMEFORMAT="%c "
닫는 따옴표 앞에 공백이 있습니다. 이렇게하면 타임 스탬프가 명령 목록에있는 명령과 연결되지 않습니다.

이제 history 명령을 실행하면 날짜 및 타임 스탬프가 표시됩니다. 타임 스탬프를 추가하기 전에 기록 목록에 있던 명령은 타임 스탬프를받는 첫 번째 명령의 날짜 및 시간으로 타임 스탬프됩니다. 아래에 표시된이 예에서 이것은 명령 118입니다.

매우 긴 타임 스탬프입니다. 그러나 다른 토큰을 사용할 수 있습니다 %c 그것을 다듬기 위해. 사용할 수있는 다른 토큰은 다음과 같습니다.
-
%d: 일 -
%m: 달 -
%y: 년 -
%H: 시 -
%M: 의사록 -
%S: 초 -
%F: 전체 날짜 (년-월-일 형식) -
%T: 시간 (시 : 분 : 초 형식) -
%c: 완전한 날짜 및 시간 소인 (일-월-월-년 및시 : 분 : 초 형식)
몇 가지 다른 토큰을 실험하고 사용해 봅시다.
export HISTTIMEFORMAT="%d n%m %T "

출력은 일, 월 및 시간을 사용합니다.

그러나 요일과 월을 제거하면 시간 만 표시됩니다.
모든 변경 사항 HISTIMEFORMAT 전체 기록 목록에 적용하십시오. 이것은 각 명령의 시간이 유닉스 시대부터 초 단위로 저장되기 때문에 가능합니다. 그만큼 HISTTIMEFORMAT지시문은 단순히 다음과 같이 초 단위를 사람이 읽을 수있는 스타일로 렌더링하는 데 사용되는 형식을 지정합니다.
export HISTTIMEFORMAT="%T "

우리의 결과물은 이제 더 관리가 용이합니다.

당신은 또한 사용할 수 있습니다 history 감사 명령. 과거에 사용한 '명령'을 검토하면 문제의 원인을 파악하는 데 도움이 될 수 있습니다.
인생에서 할 수 있듯이 Linux에서는 history 좋은 시간을 재현하고 나쁜 것을 배우라는 명령.
관련 : 알아야 할 중요한 Linux 명령








