shell 为什么在`sudo rm`语句中不工作?

qmelpv7a  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(117)

我试图删除日志目录中的所有文件,并使用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配置我错过了?

7gs2gvoe

7gs2gvoe1#

在实际调用sudo之前,由shell完成扩展。而且shell本身没有(或获取)sudo权限,因此它无法读取/var/log/jenkins/的内容。
rm(现在被赋予了sudo权限)看到它的参数时,*的扩展已经发生了--或者更确切地说,它还没有发生,因为没有任何东西(shell可读的)可以匹配*
所以rm尝试删除文件(而不是文件夹)/var/log/jenkins/*--它不存在:
rm:无法删除“/var/log/jenkins/js”:No such file or directory
要解决这个问题,你需要一个拥有sudo权限的 shell 来执行你的rm

sudo sh -c 'rm /var/log/jenkins/*'

现在shell本身得到了sudo艾德,并且可以在调用rm之前进行扩展。

k10s72fa

k10s72fa2#

目录/var/log/jenkins没有“其他”的权限。即使运行sudo rm -r /var/log/jenkins/*,shell扩展也是由用户完成的。你应该删除整个目录(suro rm -r /var/log/jenkinks),或者以适当的用户身份执行所有操作(我建议使用jenkins用户su-ing)。

相关问题