我正在使用 ack.pl 工具来搜索文件中的字符串或 IP
ack.pl 的官方网站是 -http://beyondgrep.com/documentation/
ack.pl CLI 示例(想要在 /etc 下的文件中查找字符串 STRING_TO_FIND )
/tmp/ack.pl -Q -a -l --max-count=1 STRING_TO_FIND /etc
但有时 ack.pl 会卡在文件上,如下所示:
---S--l--- 1 root root 0 Mar 10 04:25 /opt/POP_lock
来自 MAN paget“S”attr 的意思是:
使用大写“S”而不是小写“s”告诉文件系统立即将文件写入磁盘,而不是将其存储在缓冲区中。 (另请注意,这次我们保留了“s”属性,因此我们现在为此文件设置了两个属性。)
所以我的问题是:
ack.pl 如何忽略带有“S”的文件,或者 ack.pl 标志应该忽略带有“S”的文件?
答案1
您确定是“ S
”引起了问题吗?正如我在回答中所解释的你之前的问题,“ l
”表示您的操作系统和文件系统支持强制文件锁定,并且对该文件启用了强制文件锁定。我怀疑您作为示例提供的两个文件(在这个问题和上一个问题中)的名称都以_lock
.这些文件可能是——你猜怎么着? —锁定! 这可能会阻止ack
(或任何其他程序)读取它们。
(以上是“为什么无法ack
读取这些文件?”这个问题的答案,我知道您没有问过这个问题。)
使用以下命令搜索所有l
设置了“ ”模式位的文件
find /etc -perm -2000 ! -perm -010
命令(我在我的答案你之前的问题)。查看是否所有文件的名称都以_lock
.然后做
find /etc -name "*_lock" –ls
验证所有_lock
文件都l
设置了“ ”模式位。如果存在一对一对应关系(或者,通常,如果没有_lock
您需要搜索的文件),请按文件名模式将它们从搜索中排除。
我无法访问 的副本来ack
进行测试,但是,从文档来看,您似乎可以使用--ignore-file="match:/.*_lock/"
或类似的东西来执行此操作。