我试图删除日志目录中的所有文件并使用 CentOS 6.5 上的默认 bash shell
[lei@ids7gueywjZ /]$ sudo ls -al /var/log/jenkins/
total 1541512
drwxr-x--- 2 jenkins jenkins 4096 Jul 22 09:52 .
drwxr-xr-x. 10 root root 4096 Jul 14 21:27 ..
-rw-r--r-- 1 jenkins jenkins 31483 Jul 22 17:07 jenkins.log
-rw-r--r-- 1 jenkins jenkins 1073606656 Jul 18 03:16 jenkins.log-20150718
-rw-r--r-- 1 jenkins jenkins 504815011 Jul 19 03:30 jenkins.log-20150719.gz
[lei@ids7gueywjZ /]$ sudo rm -r /var/log/jenkins/*
rm: cannot remove `/var/log/jenkins/*': No such file or directory
我不明白为什么
rm -r /var/log/jenkins/*
不起作用?我是否缺少一些默认的 shell 配置?
通配符扩展由 shell 在实际调用
sudo
之前完成。而shell本身没有(或获取)sudo
权限,因此无法读取/var/log/jenkins/
的内容。
当
rm
(现在被赋予了 sudo 权限)看到它的参数时,通配符扩展已经发生了——或者更确切地说,它还没有发生,因为没有任何东西(可以由 shell 读取)与 *
相匹配。
因此
rm
尝试删除 文件(不是通配符)/var/log/jenkins/*
——它不存在:
rm:无法删除`/var/log/jenkins/*':没有这样的文件或目录
要解决这个问题,您需要一个具有 sudo
权限的
shell来执行您的
rm
:
sudo sh -c 'rm /var/log/jenkins/*'
现在 shell 本身得到
sudo
ed,并且可以在调用 rm
之前进行扩展。
目录
/var/log/jenkins
没有“其他”的权限。即使您运行 sudo rm -r /var/log/jenkins/*
,shell 扩展也是由您的用户完成的。您应该删除整个目录 (suro rm -r /var/log/jenkinks
),或者以适当的用户身份执行所有操作(我建议 su
-ing 与 jenkins
用户)。