![如何防止使用 grep 时密码或其他敏感信息存储在 bash 历史记录中?](https://linux22.com/image/1371804/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E4%BD%BF%E7%94%A8%20grep%20%E6%97%B6%E5%AF%86%E7%A0%81%E6%88%96%E5%85%B6%E4%BB%96%E6%95%8F%E6%84%9F%E4%BF%A1%E6%81%AF%E5%AD%98%E5%82%A8%E5%9C%A8%20bash%20%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E4%B8%AD%EF%BC%9F.png)
我最近需要 grep 查找可能已保存在文件中的密码。我不希望该行出现在 bash 历史记录中。
使用 grep 时,如何防止密码或其他敏感信息存储在 bash 历史记录中?例如,如何让 grep 从 stdin 或控制台读取模式?
答案1
如果您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
答案2
只是为了完整性,我回答了正文中的问题:如何让 grep 从 stdin 读取模式:
您可以使用以下-f
选项:
grep -f- /path/to/file
这将从中读取任意数量的模式stdin
,每行一个。(-
意味着stdin
;您还可以指定一个包含模式的文件,每行一个。)grep
将匹配与/path/to/file
任何指定模式匹配的行。
答案3
这是我能想到的最好的办法:
grep $(read -p "Pattern: "; echo $REPLY) .*
这够安全吗?除了滚动终端外,还有其他方法可以恢复模式吗?有没有更好的方法?