我正在使用 Linux Mint 18.3,我有一个学校任务,要在一台 Linux 机器上查找所有日志文件,并且没有任何错误消息。我需要整理一个命令并彻底解释它。我想我已经找到了一种使用 find 的方法,但有一条关于 gvfs 的访问被拒绝消息,我不确定如何处理。你能帮我编写一个简单而智能的命令,它不仅会盲目地过滤掉任何错误消息,而且只会忽略那些确实没有意义的地方吗?我的第一次尝试:
# find / -type f -name '*.log'
似乎返回所有日志文件,但结果包括:
find: '/run/user/1000/gvfs': Permission denied
然后我尝试省略一个文件夹:
# find / -type d \( -name run \) -prune -o -type f -name '*.log' -print
但忽略整个运行文件夹似乎并不明智,因此开始指定,也许将其缩小到一个特定路径。成立这帖子,以及unix.stackexchange.com/a/77592回答,并试图省略这个特定的路径:
# find / -name '*.log' -path '/run/user/1000/gvfs' -prune -o -type f -name '*.log' -print
但它似乎没有像我预期的那样工作,在似乎所有日志文件中返回仍然相同:
find: '/run/user/1000/gvfs': Permission denied
现在,我遇到了理解问题,我的想法是错误的,或者是忽略了这一特定路径,这是最简单和最明智的事情。
答案1
日志文件存储在中,/var/log
因此实际上不需要find
在整个根目录上运行。如果您坚持这样做并希望排除该目录以免出现错误,那么您的语法应该是:
find / -wholename /run -prune -o -type f -name '*.log' -print
该目录是 FUSE 的挂载点,不包含任何日志文件,并且/run
本身具有目录(至少在 Centos、Fedora 和 RHEL 中),其中会出现权限错误,因此上述命令将完全排除该目录。我没有安装 Mint,因此您可以编辑命令以修剪得更低,直到收到错误为止。
另外,需要记住的一件事是日志文件并不总是.log
以messages
、dmesg
、cron
和等结尾secure
。
答案2
做就是了:
find / -type f -name '*.log' 2>/dev/null
或者
find /var -type f -name '*.log'
就日志而言var
答案3
避免“权限被拒绝”错误消息的正确习惯用法是:
find <root-path> ! -readable -prune -o <rest of your find arguments>
将其应用到你原来的作业答案中将会得到:
find / ! -readable -prune -o -type f -name "*.log"
这应该满足您“组装一个简单而智能的命令”的要求。它还满足“不只是盲目地过滤掉任何错误消息”的要求,因为它只过滤掉不可读的内容。你的最终要求“但只留下那些确实没有意义的地方”完全是另一回事,并且会提出一个很好的单独问题,即“有没有办法让脚本找到默认的系统日志根目录” ,在运行脚本的特定系统上?我不知道有什么环境变量。