如何使用 SSH 在整个 Ubuntu 计算机上的每个文件中搜索特定单词?
笔记:我正在使用 Windows 程序 PuTTY 来运行 SSH 会话,但是一旦连接,我就有了一个普通的 bash 会话。
下列的这个答案在 UL.SE 上,我使用了这个 bash 命令:
find / -xdev -type f -print0 | xargs -0 grep -H "search for this text"
但即使访问被拒绝或没有匹配项,此命令也会返回输出,并且由于 PuTTY 限制了可查看的会话历史记录,因此我无法看到所有结果。
我正在做一个捕获标志的挑战,我必须通过 SSH 连接到 Linux 机器,我想在整个机器上的每个文件中搜索字符串“flag”。我对 bash 及其命令的了解非常有限。
答案1
附加2> /dev/null
到命令以隐藏错误。这称为重定向 stderr。因此,对于您的具体命令,它将是:
find / -xdev -type f -print0 | xargs -0 grep -H "search for this text" 2> /dev/null
但这非常冗长。你也可以:
grep -rw "flag"
从grep(1)
:
-r, --recursive
Read all files under each directory, recursively,
following symbolic links only if they are on the
command line. Note that if no file operand is given,
grep searches the working directory. This is
equivalent to the -d recurse option.
-w, --word-regexp
Select only those lines containing matches that form
whole words. The test is that the matching substring
must either be at the beginning of the line or preceded
by a non-word constituent character. Similarly, it
must be either at the end of the line or followed by a
non-word constituent character. Word-constituent
characters are letters, digits, and the underscore.
This option has no effect if -x is also specified.
请注意,这将在当前目录中的任何文件中查找单词“flag”。因此,如果您想搜索整个机器,请从 运行此命令/
。如果您希望它不区分大小写,请添加-i
.这样做的另一个优点是flagged
不会找到类似的词。
用于grep -rw "flag" 2> /dev/null
过滤掉所有这些Permission denied
消息