我有 Ubuntu 12.04.5 LTS。
在终端我执行:
/etc/profile
Run Code Online (Sandbox Code Playgroud)
因此返回权限被拒绝。
这让我感到惊讶,因为我运行了sudo -s命令并且我的命令提示符以root@...
这是什么原因?
这是因为默认情况下该文件没有设置任何可执行位。即使是 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--,文件所有者可以读取和写入文件,组成员只能读取文件,其他人(任何用户或程序)只能读取文件。
的默认权限/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)