相关疑难解决方法(0)

执行与读取位。Linux 中的目录权限如何工作?

在我的 CMS 中,我注意到目录需要+x为用户设置可执行位 ( ) 才能打开它们。为什么读取目录需要执行权限,Linux 中的目录权限是如何工作的?

linux permissions directory

453
推荐指数
6
解决办法
33万
查看次数

了解 UNIX 权限和文件类型

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) …

linux ls permissions chmod

85
推荐指数
4
解决办法
7万
查看次数

当我在我的 shell 中执行一个文件时到底发生了什么?

所以,我以为我对此有一个很好的理解,但只是进行了一个测试(以回应我不同意某人的对话)并发现我的理解有缺陷......

尽可能详细地说明当我在 shell 中执行文件时到底发生了什么?我的意思是,如果我输入:./somefile some arguments进入我的 shell 并按回车键(并且somefile存在于 cwd 中,并且我有读取+执行权限somefile),那么引擎盖下会发生什么?

以为答案是:

  1. 外壳程序对 进行系统调用exec,将路径传递给somefile
  2. 内核检查somefile并查看文件的幻数,以确定它是否是处理器可以处理的格式
  3. 如果幻数表明文件是处理器可以执行的格式,那么
    1. 创建一个新进程(在进程表中有一个条目)
    2. somefile被读取/映射到内存。创建堆栈并执行跳转到代码的入口点somefile,并ARGV初始化为参数数组 (a char**, ["some","arguments"])
  4. 如果幻数是shebang,exec()如上所述生成一个新进程,但使用的可执行文件是shebang(例如/bin/bash/bin/perl)引用的解释器并somefile传递给STDIN
  5. 如果文件没有有效的幻数,则会出现“无效文件(错误的幻数):Exec 格式错误”之类的错误

但是有人告诉我,如果文件是纯文本,那么 shell 会尝试执行命令(就像我输入了bash somefile)。我不相信这一点,但我只是尝试了一下,结果是正确的。所以我显然对这里实际发生的事情有一些误解,并想了解机制。

当我在我的 shell 中执行一个文件时到底发生了什么?(尽可能多的细节是合理的......)

shell kernel exec shebang

38
推荐指数
3
解决办法
5761
查看次数

Linux 上有哪些类型的可执行文件?

例如,如果我这样做

[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 executable

1
推荐指数
1
解决办法
531
查看次数

标签 统计

linux ×3

permissions ×2

chmod ×1

directory ×1

exec ×1

executable ×1

kernel ×1

ls ×1

shebang ×1

shell ×1