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进入目录,能查看目录中文件的详细属性,能访问目录下文件内容(基础权限)