기록에 명령이 추가되지 않도록하는 방법이 있습니까?


65

기록에 명령이 추가되지 않도록하는 방법이 있습니까? 내 히스토리 파일에서 제외하고 싶은 명령이 있으며 메모리에 저장된 히스토리를 검색 할 때 실제로 신경 쓰지 않아도됩니다. 이것을 막을 수있는 방법이 있습니까, 아니면 돌아가서 내 기록 파일을 편집해야합니다.

업데이트 : 이것이 쉘에 따라 다를 수 있다는 것을 몰랐습니다. 내 껍질은 zsh입니다. 다른 쉘에 대한 답변을 환영하므로 사람들은 쉘에서이를 수행하는 방법을 알 수 있습니다.


zsh 답변으로 교차 연결 : superuser.com/questions/352788/…
Michael Shigorin

답변:


52

ZSH에서 :

먼저에 삽입 setopt HIST_IGNORE_SPACE하십시오 ~/.zshrc. 이제 다시 로그인 한 후 기록에 저장하지 않으려는 명령 앞에 접두사를 붙일 수 있습니다 space.

로부터 사용자 설명서 , 다음과 같은 3 가지 옵션은 특정 라인에서 모든 역사에 가지 말았어야 말을 사용할 수 있습니다 :

  • HIST_IGNORE_SPACE 는 공백으로 시작하는 명령을 저장하지 않습니다
  • HIST_NO_STORE히스토리를 저장하지 않습니다 ( fc -l ) 명령
  • HIST_NO_FUNCTIONS 는 함수 정의를 저장하지 않습니다

@mmckinst 답변이 zsh에서 작동합니까? 아니면 그런가요? 또는 아마도 명령어가 포함 된 명령어| somecommand
xenoterracide

AFAIK는 zsh에 bash의 HISTIGNORE에 해당하지 않습니다.
dogbane

@xeno zsh는 preexec이를 위해 사용할 수 있는 후크 기능 을 제공 합니다. 0이 아닌 값을 반환하면 명령이 기록에 저장되지 않습니다.
Keith

1
zsh가 많은 기본 공통 명령을 무시하도록하기 위해, 나는 모두 앞에 공백을 두도록 별명을 붙였다. 별명 $ c = "$ c"; 완료
Will Norris

4
아직 수행 방법을 모르는 나 같은 게으른 미래 독자들을 위해 : setopt HIST_IGNORE_SPACEin~/.zshrc
Al.G.

25

명령을 반복해서 실행하는 경우 쉘 기록 무시 기능을 사용할 수 있습니다. secret.server.com을 언급하는 행을 저장하지 않으려는 secret.server.com, FTP 파일 등을 가지고 있다고 가정 해 보겠습니다.

에서에게 bash당신은 설정합니다

HISTIGNORE="*secret.server.com*"

반면 zsh매개 변수 에서

HISTORY_IGNORE="*secret.server.com*"

콜론으로 구분하여 여러 패턴을 나열 할 수 있습니다. 각 패턴은 전체 입력 라인 과 일치 하므로 *를 포함해야합니다. 예를 들어, 다음은 fortune기록에서 제외 되지만 저장됩니다 fortune -l.

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"

HISTIGNORE를 설정하면 나열된 패턴과 일치하는 항목이 .bash_history/에 저장 .zsh_history되지 않으며 일반적으로 이전 명령을 호출 하는 위쪽 화살표 키도 패턴과 일치하면 작동하지 않습니다.


3
zsh에서 이것이 효과가 있습니까?
xenoterracide

운으로 시작하는 줄만 무시하는 옵션이 있습니까? HISTIGNORE="^fortune*"무시 fortune -l하고 지키고 싶은 것이 myfortune있습니까?
Bernhard

@xenoterracide 그것은하지만 매개 변수의 이름이 다릅니다. 방금 답변을 편집했습니다.
n.st

23

bash에서 HISTCONTROL변수를 사용하십시오 .

HISTCONTROL=ignorespace(또는 HISTCONTROL=ignoreboth)으로 설정하십시오 . 당신이 때 지금부터, 공백 라인을 시작 , 그것은 것입니다 하지 역사에 저장 될 수있다. 이렇게하면 일부 구성 파일에 공개 대상 명령을 포함하지 않아도됩니다.

그럼에도 불구하고 공간을 추가하는 것을 잊어 버린 다음 돌아가고 싶습니다. 역사, 사용 항목을 삭제하려면 history -d <index>와, index찾을 수 history명령 (첫 번째 열).


1
이 작동합니까 zsh?
Gert

11

일회성 가장 쉬운 방법은

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

여기서 $초기 쉘 $$의 프롬프트를 나타내고 서브 쉘의 프롬프트를 나타냅니다. 이것은 bash와 zsh에서 작동합니다. ksh에서는 HISTFILE=/notwritable대신에 필요 합니다. 중요한 것은 HISTFILE명령이 실행될 때가 아니라 실행 기록 파일이 작성된 시점 의 값입니다 . Bash, ksh 및 zsh는 종료시 히스토리 파일에 기록합니다 (zsh는 구성에 따라 더 자주 수행 할 수 있음).

또는 bash 또는 zsh를 사용하여 특정 패턴과 일치하는 행을 무시할 수 있습니다 (이미 다른 답변에서 이미 다루고 있음).

zsh의 또 다른 가능성은

% fc -p
% secret-command
% fc -P

fc -p현재 히스토리 목록을 스택으로 푸시하고 저장 파일과 연관되지 않은 새 목록을 시작합니다. fc -P저장되지 않은 히스토리 목록을 스택에서 꺼내어 완전히 잊어 버립니다.

프로세스가 실행되는 동안 명령 및 인수 (및 일부 시스템의 환경)도 프로세스 테이블 ( ps출력)에 표시됩니다. Root는 시스템 계정 데이터베이스 에서 과거 명령을 볼 수 있으며 사용자가 제어하지 않고도 더 많은 로깅을 수행 할 수 있습니다. 그리고 실행 한 명령 (예 : 파일 수정 시간)을 대략적으로 보여줄 수있는 모든 종류의 법 의학적 증거가있을 수 있습니다. 따라서 도청 자에 대한 프라이버시를 얻지 못합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.