在我的 CMS 中,我注意到目录需要+x
为用户设置可执行位 ( ) 才能打开它们。为什么读取目录需要执行权限,Linux 中的目录权限是如何工作的?
chmod
直到今天,我才真正了解如何工作。我遵循了一个向我解释了很多事情的教程。
例如,我了解到您拥有三个不同的权限组:
u
)g
)o
)基于这三个群体,我现在知道:
我还了解到您拥有以下权限:
r
)w
)x
)我创建了一个目录来测试我新获得的知识:
mkdir test
Run Code Online (Sandbox Code Playgroud)
然后我做了一些测试:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Run Code Online (Sandbox Code Playgroud)
经过一段时间的鬼混后,我想我终于掌握chmod
了使用此命令设置权限的方法。
我还有几个问题:
d
在开始代表什么?d
?(因为你只有 7=4+2+1 7=4+2+1 7=4+2+1)0777
而不是777
来设置他们的权限?但因为我不应该问多个问题,所以我会尝试用一个问题来问它。
在基于 UNIX 的系统(例如所有 Linux 发行版)中,关于权限,第一部分 ( d
) …
所以,我以为我对此有一个很好的理解,但只是进行了一个测试(以回应我不同意某人的对话)并发现我的理解有缺陷......
尽可能详细地说明当我在 shell 中执行文件时到底发生了什么?我的意思是,如果我输入:./somefile some arguments
进入我的 shell 并按回车键(并且somefile
存在于 cwd 中,并且我有读取+执行权限somefile
),那么引擎盖下会发生什么?
我以为答案是:
exec
,将路径传递给somefile
somefile
并查看文件的幻数,以确定它是否是处理器可以处理的格式somefile
被读取/映射到内存。创建堆栈并执行跳转到代码的入口点somefile
,并ARGV
初始化为参数数组 (a char**
, ["some","arguments"]
)exec()
如上所述生成一个新进程,但使用的可执行文件是shebang(例如/bin/bash
或/bin/perl
)引用的解释器并somefile
传递给STDIN
但是有人告诉我,如果文件是纯文本,那么 shell 会尝试执行命令(就像我输入了bash somefile
)。我不相信这一点,但我只是尝试了一下,结果是正确的。所以我显然对这里实际发生的事情有一些误解,并想了解机制。
当我在我的 shell 中执行一个文件时到底发生了什么?(尽可能多的细节是合理的......)
例如,如果我这样做
[OP@localhost executable]$ cat garbage
lalala
trololol
[OP@localhost executable]$ chmod +x garbage
[OP@localhost executable]$ ./garbage
./garbage: line 1: lalala: command not found
./garbage: line 2: trololol: command not found
Run Code Online (Sandbox Code Playgroud)
Bash 似乎试图将这个“可执行文件”解释为脚本。但是,有两种情况显然不会发生这种情况:文件以#!
, 和 ELF 文件开头。还有吗?某处是否有关于此的全面文档?
linux ×3
permissions ×2
chmod ×1
directory ×1
exec ×1
executable ×1
kernel ×1
ls ×1
shebang ×1
shell ×1