Ota*_*our 18 ls sudo wildcards
我正在使用 Linux 应用服务器 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2+deb7u2 x86_64 GNU/Linux。当我去到一个目录名为几个文件name1.php
,name1.html
,name2.php
等和类型:
$ sudo ls *.*
Run Code Online (Sandbox Code Playgroud)
我得到:
ls: cannot access *.*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我有同样的问题grep
:
$ grep "TOS.html" *.*
grep: *.*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我该如何解决这个问题?
$ shopt | grep glob
+ grep glob
+ shopt
dotglob off
extglob on
failglob off
globstar off
nocaseglob off
nullglob off
Run Code Online (Sandbox Code Playgroud)
$ ls -ld;echo --;sudo ls -ld
+ ls --color=auto -ld
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
+ echo --
--
+ sudo ls -ld
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
Run Code Online (Sandbox Code Playgroud)
slm*_*slm 17
我认为您的问题最终是因为该目录的这些权限:
drwxr-x--x 16 www-data root 12288 Oct 10 17:08 .
Run Code Online (Sandbox Code Playgroud)
请注意,所有者 ( www-data
) 和组 ( root
)分别具有rwx
和r-x
。但是请注意,其他权限设置为 just --x
。
这意味着您可以在此目录中执行命令,但不能读取或执行此目录内容的列表。
www-data
当您sudo
在此目录中运行命令时,您是其他用户(不是)。我们称这个用户为 UserX。
当 shell 以 UserX 身份调用此命令时:
$ sudo ls *.*
Run Code Online (Sandbox Code Playgroud)
并返回:
ls: cannot access *.*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
UserX 的 shell 试图将 扩展*.*
到任何文件,但由于 UserX 无法读取此目录的任何内容,因此它什么也不返回。然后,您*.*
将向发送一个sudo ls *.*
无法匹配任何名为*.*
.
当您尝试执行grep
命令时也会出现同样的问题。同样,UserX 无法读取任何文件,因此您指示grep
搜索文字文件*.*
, 并且没有找到该名称的文件。因此消息:
无法访问。: 无此文件或目录
和
. : 无此文件或目录
假设我们有以下设置,就像你的一样。
$ sudo chown nginx.root /tmp/afolder
$ sudo chmod 751 /tmp/afolder/
$ sudo ls -ld /tmp/afolder/
drwxr-x--x 2 nginx root 4096 Nov 23 04:10 /tmp/afolder/
$ sudo touch /tmp/afolder/fakefile.txt
Run Code Online (Sandbox Code Playgroud)
现在让我们成为“UserX”,就我而言,它是saml
:
$ id
uid=500(saml) gid=501(saml) groups=501(saml)
Run Code Online (Sandbox Code Playgroud)
我可以 cd 进入目录:
$ pwd
/tmp/afolder
Run Code Online (Sandbox Code Playgroud)
但是当我尝试列出此目录中的文件时:
$ ls *
ls: cannot access *: No such file or directory
Run Code Online (Sandbox Code Playgroud)
同样的问题sudo
:
$ sudo ls -l *.*
ls: cannot access *.*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
调用 shell 并*
用单引号保护扩展可以得到你想要的:
$ sudo bash -c 'ls -l *.*'
-rw-r--r-- 1 root root 0 Nov 23 04:14 fakefile.txt
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
61155 次 |
最近记录: |