ack.pl 工具和 ack.pl 标志

ack.pl 工具和 ack.pl 标志

我正在使用 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/"或类似的东西来执行此操作。

相关内容