文件路径末尾的 /* 对于 chmod 是什么意思?

文件路径末尾的 /* 对于 chmod 是什么意思?

我正在按照在 ubuntu 上安装 tomcat 的指南进行操作,但我卡在了运行以下命令的步骤上:

sudo chmod g+r conf/*

这是什么/*意思?这是否意味着对文件夹中的所有文件进行更改/conf?当我运行该命令时,出现以下错误:

chmod: cannot access 'conf/*': No such file or directory

该文件夹的样子如下:

bin  conf  lib  LICENSE  logs  ...

因此/conf文件夹就在那里 - 我在该文件夹上运行的其他命令可以正常工作:

sudo chgrp -R tomcat conf
sudo chmod g+rwx conf

导游在这儿

我处于“步骤 4:更新权限”。

以下是ls -la/opt/tomcat文件夹的一个内容:

drwxr-xr-x 9 root root    4096 Aug 15 03:15 .
drwxr-xr-x 3 root root    4096 Aug 15 03:14 ..
drwxr-x--- 2 root root    4096 Aug 15 03:15 bin
drwxrwx--- 2 root tomcat  4096 Jul  6 08:45 conf
drwxr-x--- 2 root root    4096 Aug 15 03:15 lib
-rw-r----- 1 root root   57092 Jul  6 08:45 LICENSE
drwxr-x--- 2 root root    4096 Jul  6 08:43 logs
-rw-r----- 1 root root    1723 Jul  6 08:45 NOTICE
-rw-r----- 1 root root    7063 Jul  6 08:45 RELEASE-NOTES
-rw-r----- 1 root root   15946 Jul  6 08:45 RUNNING.txt
drwxr-x--- 2 root root    4096 Aug 15 03:15 temp
drwxr-x--- 7 root root    4096 Jul  6 08:44 webapps
drwxr-x--- 2 root root    4096 Jul  6 08:43 work

这些是 /conf 文件夹中的文件:

sudo ls -al conf/
-rw------- 1 root tomcat  12502 Jul  6 08:45 catalina.policy
-rw------- 1 root tomcat   7203 Jul  6 08:45 catalina.properties
-rw------- 1 root tomcat   1338 Jul  6 08:45 context.xml
-rw------- 1 root tomcat   1149 Jul  6 08:45 jaspic-providers.xml
-rw------- 1 root tomcat   2358 Jul  6 08:45 jaspic-providers.xsd
-rw------- 1 root tomcat   3622 Jul  6 08:45 logging.properties
-rw------- 1 root tomcat   7283 Jul  6 08:45 server.xml
-rw------- 1 root tomcat   2164 Jul  6 08:45 tomcat-users.xml
-rw------- 1 root tomcat   2633 Jul  6 08:45 tomcat-users.xsd
-rw------- 1 root tomcat 168577 Jul  6 08:45 web.xml

答案1

我怀疑您在运行命令时不在该tomcat组中。这里的问题是,*在执行之前,您的 shell 将扩展 glob,sudo因此它将以您当前的用户身份对其进行扩展。如果该用户不在目录中,则tomcat它无权列出目录中的文件conf,因此 glob 无法扩展,这通常意味着您得到的字符串没有改变,然后您尝试该sudo命令,但 glob 扩展已经完成,因此它正在寻找一个conf/*显然不存在的字面名称的文件。

因此,您可以使用在该目录中具有权限的用户,也可以sudo运行推迟 glob 扩展的命令,例如

sudo sh -c "chmod g+r conf/*"

sudo因此在授予您提升的权限后,glob 将扩展

为了回答你的问题“这是什么意思”,正如我上面提到的,这*是 shell 的 glob 字符。你可以阅读很多关于它的内容这里。这是一种匹配大量文件的方法,无需手动枚举它们。您只需指定匹配所需名称的模式,*基本上意味着“几乎任何内容任意次数”

由于运算顺序对这个问题来说似乎很重要,这里是一个页面,其中讨论了 shell 中不同扩展发生的顺序(至少是这样的,bash但大多数是相似的)。所有这些都发生在命令执行之前,因此sudo在这种特定情况下,所有这些都发生在调用之前。

答案2

要补充@Eric Renoufs 的回答,你可以使用这个命令向 tomcat8 用户授予 shell 访问权限

$ sudo -s -u <tomcat user> then issue
$ chmod g+r conf/*

此链接将我引导至此答案

相关内容