技术解析

问大家一个 Linux 权限的问题
0
2021-06-23 14:54:47
idczone

我想给一个目录加上可读权限,但是不小心手残了。写成了

sudo chmod -R -o+r files

中间多了个写-(横杠)。 我改正了之后

sudo chmod -R o+r files

又执行了一遍。 然后我就 cd 不进去了。提示"Permission denied".

我想那好吧。我给就给个最开放的权限

sudo chmod -R 777 files

这下是可以 cd 进去了,但是一直给最开放的权限也不行呀。想想一下还是把可执行权限去掉吧,执行了

sudo chmod -R o-x files

然后奇怪的事发生了。我又 cd 不进去了。为什么我只是撤掉了执行权限但是读权限也没了。

与没有知道的大佬,帮忙给个提示。


删除 新建 给权限 不要太纠结

sudo chmod -R 755 files

进目录需要执行权限

r:你可以 ls dir 看里面的文件。
x:你可以 cd 到该文件夹,及其子文件夹,ls 子文件的内容也需要 x。
一般目录都是 rx 同时有的,特殊情况只给 x 权限,比如 android 的 /data 分区似乎是如此,这样就能限制 app 读取 data 里面的文件列表,但又不影响 app 对自己数据文件夹的操作

![]( )
执行那个错误的命令的时候,就把用户的 x 权限搞丢了。后来又没加上去,所有就 Permission denied 咯
这个链接: https://wiki.archlinux.org/index.php/File_permissions_and_attributes
```
- The directory cannot be accessed with cd.
x The directory can be accessed with cd
```

要 CD 进去,除了 r 可读权限,还需要 x 执行权限

还是国内书籍理解的问题。
linux 下,什么 cd,ls 这些严格意思上来说不能叫命令。
实际上编辑好的二进制小工具。你可以理解成就是一堆小软件
通过 bash shell 自动调用 /bin /sbin 下的工具。
不相信,你随便删除一个,看看你所谓的“命令”还能执行吗?
实际是 CD 是个工具,对文件格式下的目录做出了相对应的操作。







问题已经搞定了。
感谢各位,确实是的,对 Linux 的权限配置方面了解不多。不知道进目录还需要执行权限。以前用 ll 命令看权限的时候没注意进目录都有执行权限。

666


哈哈,我还奇怪呢,上层目录权限是 drw-r--r--没有执行权限的时候我用 ls 命令发现可以看到文件名,但是 其他列都是问号。我还以为搞出啥问题了呢。

理解的确是一个大问题,不过命令这个也不能怪翻译,毕竟 shell 爆的就是 command not found,一般也不会给爆诸如“ executable not found “什么的。

你可能忘记了命令分为内部命令和外部命令。此外 cd 是一个内部命令,ls 是一个外部命令。
就是“命令”。

别乱自己定义好不.. "ls 不是命令" "cd 是个工具" 都讲得出 人才

多谢,我还没仔细看过

我理解的是,命令本身就是集成在 shell 的,而不是和 shell 独立开来的某个程序,但是像 ls,cp 这类的,我一直认为是个独立的二进制工具,当文件删除的时候,就无法在 bash 里调用了。不过今天听 geelaw 一说,有了更深层次的理解。
比如 ls
[email&ls -l /bin | grep ls
-rwxr-xr-x 1 root root 31464 Feb 22 2017 false
-rwxr-xr-x 1 root root 130736 Feb 22 2017 ls
-rwxr-xr-x 1 root root 81376 Mar 7 13:29 lsblk
lrwxrwxrwx 1 root root 4 Dec 25 2016 lsmod -> kmod
一旦删除 ls,你无论如何无法 ls 这个命令。

whereis cd

没有这个文件也可以定义叫 ls 的 alias 或函数。考虑一下: 为什么 "aabbcc 回车" 的错误信息是 **command** not found,而 "/bin/aabbcc 回车" 的错误信息是 No such file or directory

Unix 作业刚写完一个 shell … cd 是 shell 实现的,ls 是系统提供的

楼是明白人。
想了解这个,楼主可以查询 linux 里的数据存储问题. 关键字:inode
意识到目录也是文件,知道目录的 inode 里面都有什么,对应的就能了解对目录执行 ls,cd 都需要什么权限。
建议看看鸟哥的 linux 私房菜。

你要 cd 进某个目录,必须具有 x 权限。我不知道为什么,但事实就是这样。

三楼正解:cd 进目录需要 x 权限

The execute permission grants the ability to execute a file. This permission must be set for executable programs, in order to allow the operating system to run them. When set for a directory, the execute permission is interpreted as the search permission: it grants the ability to access file contents and meta-information if its name is known, but not list files inside the directory, unless read is set also.
Source: https://en.m.wikipedia.org/wiki/File_system_permissions#Permissions

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服