Bash 为什么通配符不';“sudo rm”语句中不起作用?

Bash 为什么通配符不';“sudo rm”语句中不起作用?,bash,shell,wildcard,sudo,Bash,Shell,Wildcard,Sudo,我试图删除日志目录中的所有文件,并在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 je

我试图删除日志目录中的所有文件,并在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完成,而不是由
rm
完成

shell没有
sudo
权限,只有
rm
权限

因此,由于shell没有读取
/var/log/jenkins
的权限,因此不会进行扩展,
rm
尝试删除文件(不是通配符)
/var/log/jenkins/*
——该文件不存在

为了解决这个问题,您需要一个具有执行
rm
sudo
权限的shell:

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

目录
/var/log/jenkins
没有“其他”的权限。即使运行
sudorm-r/var/log/jenkins/*
,shell扩展也由用户完成。您应该删除整个目录(
suro rm-r/var/log/jenkinks
),或者按照适当的用户做任何事情(我建议
su
-ing与
jenkins
用户一起使用)。

@LeoShi:这里的寓意是,“仔细阅读错误消息,并从字面上理解它”。我承认一开始我也有点迷路