【发布时间】:2022-01-20 14:26:48
【问题描述】:
我有 remove.txt 文件,其中包含 a.txt 和 b.txt 作为文本。所有文件都在同一个文件夹中,我为所有这些文件设置了 chmod 777。现在,当我运行 sudo cat remove.txt | xargs rm 对于删除 remove.txt 中列出的这两个文件,我得到了 Permission denied。我究竟做错了什么?我想现在的问题是把 sudo 放在哪里?
【问题讨论】:
-
for all those files.他们所在的目录呢? -
对于文件的删除,与目录的权限有关,与文件的权限无关。请edit您的问题并显示
ls -ld . a.txt b.txt的输出。如果你想以 root 身份运行rm,你需要cat remove.txt | sudo xargs rm或者没有可能没用的cat:sudo xargs rm < remove.txt -
非常感谢,我一直在学习一些教程,但被 xargs 卡住了。猫删除.txt | sudo xargs rm 做到了。和 sudo xargs rm
-
你应该非常小心 xargs 和 rm 。这里有两个安全问题:(1)如果你不严格控制'remove.txt'的生成,有人可能会注入一个你真的不想删除的文件名,例如/tmp/passwd。 (2) xargs 依赖于换行符和空格,但您的文件名可能包含特殊字符和空格。更安全的方法是使用 '\0' 字符作为分隔符,并改为调用
xargs -0 rm。要了解我的意思,请尝试:touch a b "a b" ; echo "a b" | xargs ls -l,它将显示两个文件,而不是原始的“a b”文件。