grep을 사용할 때 암호 또는 기타 민감한 정보가 bash 기록에 저장되는 것을 방지하는 방법은 무엇입니까?


21

최근에 파일에 저장된 암호를 grep해야했습니다. 나는 그 줄이 bash 기록에 나타나기를 원하지 않았습니다.

grep을 사용할 때 비밀번호 또는 기타 민감한 정보가 bash 기록에 저장되지 않도록하려면 어떻게해야합니까? 예를 들어, grein이 stdin 또는 console에서 패턴을 읽도록하려면 어떻게해야합니까?

답변:


37

당신이 두는 경우에 HISTCONTROL=ignorespace당신의 .bashrc에, 당신은 명령 이름 앞에 공백을 넣어, 그것은 당신의 이력에 추가되지 않습니다.

$ export HISTCONTROL=ignorespace
$ grep "passwd" secret_password_file.txt   # added to history
$  grep "passwd" secret_password_file.txt  # not added to history

3
FWIW : 제목의 질문과 본문의 질문은 완전히 다릅니다. 제목의 질문에 답했습니다.

당신의 비판이 적절합니다. 방금 제목을 편집했습니다. 지금은 더 나아 졌습니까? 나는 아직도 당신의 대답이 가장 관련이 있다고 생각합니다.
Leo

1
나는 당신의 질문을 편집하여 사물을 명확히하여 두 가지 질문 (역사에 저장되는 것을 방지하고 grep으로 stdin에서 읽는 것을 방지) 이렇게하면 모든 답변이 여전히 유효하지만 매우 다른 솔루션은 혼란스럽지 않습니다.

5

완전성을 위해, 나는 신체의 질문에 대답합니다 : grep이 stdin에서 패턴을 읽는 방법 :

-f옵션을 사용할 수 있습니다 :

grep -f- /path/to/file

그것은 stdin한 줄에 하나씩, 많은 패턴을 읽습니다 . ( -의미 stdin; 패턴 당 파일을 한 줄에 하나씩 지정할 수도 있습니다.) grep/path/to/file지정된 패턴과 일치하는 행 과 일치합니다.


고마워 그것은 좋은 기여와 다른 곳에서도 사용하기에 편리한 트릭입니다. 예를 들어 패턴이 필요할 때 말합니다
Leo

2

이것은 내가 생각해 낼 수있는 최선입니다.

grep $(read -p "Pattern: "; echo $REPLY) .*

이것으로 충분합니까? 터미널을 스크롤하는 것 이외의 패턴을 복구 할 수 있습니까? 더 좋은 방법이 있습니까?


3
read -s에코를 방지 하는 데 사용할 수 있습니다 ( 이 질문 참조 ). 비밀은 ps출력에 표시됩니다 . 대신 grep이 파일에서 패턴을 읽 거나으로 입력을 종료하도록 grep -f /dev/stdin *또는 대신 다음을 사용할 수 있습니다 .grep -f - *^D(read -es; echo $REPLY) | grep -f - *
mr.spuratic

1
캡처 쉘은 큰 따옴표로 묶어야합니다. 현재 사용자가 공백이나 특수 문자를 입력하면 중단됩니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.