/etc/profile 返回错误:权限被拒绝

Tub*_*ose 0 permissions sudo

我有 Ubuntu 12.04.5 LTS。

在终端我执行:

/etc/profile
Run Code Online (Sandbox Code Playgroud)

因此返回权限被拒绝。

这让我感到惊讶,因为我运行了sudo -s命令并且我的命令提示符以root@...

这是什么原因?

fug*_*ive 5

这是因为默认情况下该文件没有设置任何可执行位。即使是 root 也不能​​执行任何用户都不能执行的文件。

ls -l /etc/profile
-rw-r--r-- 1 root root 1722 Jan  6 20:09 /etc/profile
Run Code Online (Sandbox Code Playgroud)

/etc/profile在登录时是否有来源,并设置环境。这样做less /etc/profile,你会看到它到底设置了什么。

默认情况下,大多数常规文件/etc都具有权限644,在符号表示法中rw-r--r--,文件所有者可以读取和写入文件,组成员只能读取文件,其他人(任何用户或程序)只能读取文件。


zx4*_*485 5

的默认权限/etc/profile

-rw-r--r-- 1 root root 575 Okt 22  2015 /etc/profile
Run Code Online (Sandbox Code Playgroud)

这意味着该文件可以使用以下命令读取

cat /etc/profile
Run Code Online (Sandbox Code Playgroud)

但不能像

/etc/profile
Run Code Online (Sandbox Code Playgroud)

正如你试图做的(执行它)。由于未设置可执行权限位,即使具有超级用户权限,这也会失败并创建“权限被拒绝”消息。正如评论中提到的,出于/etc安全考虑,更改权限通常不是一个好主意,因此如果您确实需要执行它,请使用如下source命令:

source /etc/profile
Run Code Online (Sandbox Code Playgroud)

  • 同意@guntbert,您应该在回答中解释没有理由使用命令`/etc/profile` 执行`/etc/profile`。大概 OP 想要读取文件,但是如果他们想*在当前 shell* 中执行该文件(这是合理的,因为它是 shell 的配置文件),这将使用 `source` 命令和权限来完成不会有问题 - 您可以读取可以读取的“源”文件,并在当前 shell 中执行它们。因此,`source` 是一个非常危险的命令——在你获取它之前确保你知道文件中的内容! (2认同)