在使用 Linux 系统时,不少人都遇到过类似 “permission denied” 的错误。今天我们就从这个问题出发,聊聊 Linux 文件权限的那些知识点。
一、为什么会“permission denied” :缺少可执行权限
当出现 “permission denied” 错误时,最常见的原因就是文件没有可执行权限。在 Linux 系统中,文件的权限是严格受控的,一个文件要能被直接执行,必须拥有 “可执行权限”。
文件默认没有被赋予可执行权限,所以系统拒绝执行。
解决方法很简单
只需给文件添加可执行权限,执行以下命令即可:
chmod +x hello
添加权限后,再运行./hello,通常就能正常执行了。
二、解读文件信息:file 命令的妙用
当我们对一个文件不了解时,可以使用file命令查看它的详细信息。比如运行file hello,得到了这样的输出:
filename: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e79cb7179f5166d1f18d72edc1b6601dd295c544, stripped
这串信息看似复杂,其实每一部分都有其含义:
- ELF 64-bit LSB pie executable:ELF 是 Linux 系统下主流的可执行文件格式;64-bit 表示这是 64 位程序,需要运行在 64 位操作系统上;LSB 指小端字节序,是 x86 架构 CPU 的默认方式;PIE 即位置无关可执行文件,是一种安全的编译选项。
- x86-64:说明程序是针对 64 位 Intel/AMD 处理器编译的,在相应架构的系统上兼容。
- dynamically linked:表示这是动态链接的程序,运行时需要依赖系统中的共享库,而不是把所有代码都打包到自身。
- interpreter /lib64/ld-linux-x86-64.so.2:指定了程序运行时的动态链接器路径,这是 64 位 x86 程序的标准链接器。
- for GNU/Linux 2.6.32:说明程序编译时兼容的最低 Linux 内核版本,现在的系统内核版本一般都高于这个,完全兼容。
- stripped:表示程序的调试信息已被剥离,这样能减小文件体积,不影响正常运行,只是调试时会缺少符号信息。
从这些信息可以判断,hello是一个正常的 64 位 Linux 可执行程序,与 Kali 系统兼容,之前的错误确实是缺少可执行权限导致的。
三、Linux 文件权限的基础知识
Linux 系统对文件权限的管理非常严格,这也是它安全性高的一个重要原因。文件权限主要包括读(r)、写(w)、执行(x)三种,分别对应不同的操作权限。
权限的表示方式
权限有两种表示方式:字符表示和数字表示。
- 字符表示:r 代表读权限,w 代表写权限,x 代表执行权限。
- 数字表示:r 对应 4,w 对应 2,x 对应 1。通过数字相加可以表示不同的权限组合,比如 7 表示 rwx(4+2+1),5 表示 r-x(4+1)。
权限的归属
文件的权限归属分为三类:所有者(user)、所属组(group)、其他用户(other)。在查看文件权限时,比如使用ls -l命令,会显示类似-rwxr-xr--的信息,其中前三位表示所有者的权限,中间三位表示所属组的权限,最后三位表示其他用户的权限。
四、chmod 命令:修改文件权限的利器
chmod命令用于修改文件或目录的权限,其基本语法为:
chmod [选项] 权限模式 文件名
常用的权限模式
- +x:给文件添加执行权限,就像我们解决 “permission denied” 时用到的chmod +x hello。
- -x:取消文件的执行权限。
- +r:添加读权限。
- -w:取消写权限。
也可以用数字来设置权限,比如chmod 755 hello,表示所有者拥有读、写、执行权限(7),所属组和其他用户拥有读和执行权限(5)。
五、延伸:文件执行的其他注意事项
除了权限问题,还有一些因素可能影响文件的执行:
脚本文件的解释器声明
如果是脚本文件(如 Shell 脚本、Python 脚本等),除了要有可执行权限,还要在文件头部加上正确的解释器声明。比如 Shell 脚本开头要加上#!/bin/bash,Python 脚本开头要加上#!/usr/bin/python3,这样系统才能知道用什么程序来解释执行这个脚本。
依赖库问题
动态链接的程序运行时需要依赖系统中的共享库,如果缺少相应的依赖库,即使有可执行权限,程序也无法运行,会出现 “error while loading shared libraries” 之类的错误。这时可以通过相关命令排查缺失的依赖库并进行安装。
总结
Linux 文件权限是系统安全的重要保障,了解并掌握文件权限的相关知识,能帮助我们更好地使用 Linux 系统。当遇到 “permission denied” 错误时,首先要考虑是否是权限问题,通过chmod命令添加相应权限通常能解决。同时,file命令能帮助我们了解文件的基本信息,为排查问题提供线索。希望这篇文章能让大家对 Linux 文件权限有更清晰的认识,在使用 Linux 时少走弯路。
7321

被折叠的 条评论
为什么被折叠?



