Linux环境下,执行可执行程序遇到Permission denied,原因是此可执行程序没有“执行”权限。
1.可以通过"ls -al "命令确认
以我遇到的为例子,可以看到play_test 没有执行权限(x)
ls -al
-rw-r--r-- 1 idtv idtv 82656 Apr 5 20:43 play_test
2."chmod 777 play_test" 改变play_test 权限
再次查看权限,已经包含执行权限(x)
-rwxrwxrwx 1 idtv idtv 82656 Apr 5 20:43 play_test
这就可以执行了。
3.顺便记录一下,linux file 的文件权限以及chmod 的用法
以play_test 的文件权限为例进行讲解,
-rwxrwxrwx
-表示play_test 是一个文件,不是目录,如果是目录,-会变成d(directory)
红色rwx表示所有者(owner)的权限是read+write+execute
蓝色rwx表示所属组(group)的权限是read+write+execute
绿色rwx表示其他(other)的权限是read+write+execute
用户获取文件权限的顺序: 先看是否为所有者,如果是,则后面权限不看;再看是否为所属组,如果是,则后面权限不看;如果是other ,则看other 权限。
除了上述字符表示,还可以数字表示权限
4 代表 读(r)权限
2 代表 写(w)权限
1 代表 执行(x)权限
因此在尝试修改文件权限时,可以使用字符,也可以使用数字,比如:
chmod 777 play_test ==>便是User/Group/Other 都有read + write +execute 权限
chmod =rwx,=rwx,=rwx play_test==>便是User/Group/Other 都有read + write +execute 权限
4.chmod 的使用方式
BusyBox v1.34.1 (2023-03-16 17:24:17 CST) multi-call binary.
Usage: chmod [-Rcvf] MODE[,MODE]... FILE...
MODE is octal number (bit pattern sstrwxrwxrwx) or [ugoa]{+|-|=}[rwxXst]
-R Recurse
-c List changed files
-v Verbose
-f Hide errors
#ls -al
-rwxrwxrwx 1 idtv idtv 82656 Apr 5 20:43 play_test
原始权限
#chmod =-r--r--r-- play_test
--wx-wx-wx 1 idtv idtv 82656 Apr 5 20:43 play_test
执行后,相当于少了r 权限
#chmod =-r--,=r--,=r-- play_test
-r--r--r-- 1 idtv idtv 82656 Apr 5 20:43 play_test
执行后,相当于User/Group/Other最终权限是read
#chmod 777 play_test
-rwxrwxrwx 1 idtv idtv 82656 Apr 5 20:43 play_test
使用习惯是,mode 使用数字,比如上述“chmod 777 play_test”
如果是目录的权限改变,则需要加上-R, "chmod -R 777 directory"
5.umask
除了chmod 命令,还有umask 命令可以改权限。umask 的作用是“取消”对应的权限,影响“新”创建文件和目录的默认权限,chmod 改变的是已经存在目录和文件的权限。
shell console 下,umask 命令,就会列出4位八进制的数字,比如,
#umask
0000
umask的值为000,该用户新建的文件具有(666-000)=666八进制权限,等效于下面字符串:
-rw-rw-rw-
因为新创建的文件是不能有执行权限的,因此新建文件默认是666(read+write)
umask
的值为0245意味着新建的目录具有(777-0245)=0532八进制权限,等效于下面字符串:
dr-x-wx-w-
新建的目录是具有执行权限的,目录的执行权限是可以进入,也就是cd 命令可以进此目录。
rwx 权限,对于文件和目录有差异,差异如下,
文件
r:读取文件内容 w:修改文件内容 x:执行程序(执行权限对除二进制程序以外的文件没什么意义)
目录
r:查看目录下的文件列表 w:删除和创建目录下的文件 x:可以cd进入目录,能查看目录中文件的详细属性,能访问目录下文件内容(基础权限)