我们似乎在/var/spool/lp/logs
名为“requests”的文件夹中有两个文件。一个由 lp 拥有,另一个由 root 拥有。
我们需要删除 root 拥有的请求文件 - 我们如何引用它?
这是ls -l
命令的输出:
-rw-r--r-- 1 root sys 0 Jan 30 2014 lp
-rw-rw---- 1 root lp 6584 Nov 4 06:10 lpsched
-rw-rw---- 1 lp lp 3365 Dec 14 10:56 requests
-rw-r--r-- 1 root sys 1668416 Dec 14 10:41 requests
drwxr-xr-x 2 root sys 1024 Sep 30 2013 requests.archives
Run Code Online (Sandbox Code Playgroud)
Jef*_*ler 11
如果您有 GNU ls,则可以运行ls -lQ
以查看文件名的引用版本:
$ ls -lQ
total 0
-rw-r--r--. 1 user group 0 Dec 14 14:32 "requests"
-rw-r--r--. 1 user group 0 Dec 14 14:32 "requests "
Run Code Online (Sandbox Code Playgroud)
要删除特定文件,首先使用以下命令查找其 inode 编号ls -li
:
$ touch 'requests' 'requests '
$ ls -li
total 0
440 -rw-r--r--. 1 user group 0 Dec 14 14:32 requests
441 -rw-r--r--. 1 user group 0 Dec 14 14:32 requests
Run Code Online (Sandbox Code Playgroud)
这里我们有两个相似的文件,一个有 inode 440,另一个有 441(左栏)。
对于您的情况,找到 root 拥有的文件并获取该 inode 编号。该-xdev
(或-mount
)选项,find
说留在同一个文件系统,以防万一你有安装在当前目录下的一个文件系统,以避免受凉在孩子文件系统匹配的任何文件。
然后:
$ find . -inum 441 -xdev -user root -ls
441 0 -rw-r--r-- 1 user group 0 Dec 14 14:32 ./requests\
Run Code Online (Sandbox Code Playgroud)
请注意,find
在末尾引用了空格字符。
并删除:
$ find . -inum 441 -xdev -user root -delete # GNU find
Run Code Online (Sandbox Code Playgroud)
或者
$ find . -inum 441 -xdev -user root -exec rm {} \; # otherwise
Run Code Online (Sandbox Code Playgroud)
同一个文件夹中不能有两个同名的文件。很可能其中有一个不可见的字符(例如尾随空格)。
我的建议是重命名requests
为requests.real
,然后运行交互式删除。您可以选择删除不需要的一个,然后(如有必要)使用通配符将另一个重命名为正确的名称
mv requests requests.real # STOP if this fails
mv requests.archives KEEP.archives # Temporary
rm -i req* # Interactive delete: "y" to delete, "n" to skip
mv req* requests # Rename whatever's left that begins "req"
mv KEEP.archives requests.archives # Put this one back again
Run Code Online (Sandbox Code Playgroud)