centos@ip-10-0-5-4 ~ $ sudo ls -l /var/solr/data/new_core/_default/*
zsh: no matches found: /var/solr/data/new_core/_default/*
centos@ip-10-0-5-4 ~ $ sudo ls -l /var/solr/data/new_core/_default/
total 4
drwxr-xr-x. 3 root root 4096 Mar 28 07:34 conf
答案1
*
在调用之前由 shell展开sudo
。如果您无权访问该目录,zsh
shell 将抱怨“未找到匹配项”。如果shellNOMATCH
中未设置 shell 选项zsh
,则 shell 会将模式保留为未展开状态,并ls
生成“没有此类文件或目录”错误(除非*
该目录中存在具有字面名称的内容)。对于NOMATCH
默认情况下的 set,sudo ls
甚至不会被调用。
你可以这样做:
sudo sh -c 'ls -l /var/solr/data/new_core/_default/*'
这可以防止当前 shell 展开*
并使用sh
您想要以 root 身份执行的命令行进行调用。
答案2
在第一种情况下:
访问权限可防止 shell(*) 扩展
/var/solr/data/new_core/_default/*
您的centos
./var/solr/data/new_core/_default/*
然后像第一种情况一样展开命令。中没有*
文件或目录/var/solr/data/new_core/_default/
,因此no match found
.
在第二种情况下, ls 查找文件并列出它们。
(*) 这是Filename Expansion
zsh 的扩展(参见 参考资料man zshexpn
)。
文件名生成
如果一个单词包含字符“*”之一的未加引号的实例,...
该单词将替换为与模式匹配的已排序文件名列表。
就像您centos
之前一样sudo
,zsh 无法访问 dir (例如 file conf
),因此no match found
.