因为shell脚本内部是很多命令的集合,这些命令也许会涉及到操作某一个文件,而且shell脚本的运行,也是需要当前用户对脚本具有运行的权限,否则,会因为权限不够而失败。
Linux中涉及权限的命令有:chmod、acl、sudo,下面一一讲解他们各自的用法。
chmod:用于分配权限,使用的频率很高。
分配权限时,常用的有两种形式,一种是直接使用八进制的三个数字指定文件的所有权限(Owner,group,other),一种是使用某类用户的简写,追加一个+/-,然后加上要分配或者收回的权限。
[email protected]:/# echo ‘echo "hello world"‘ > test.sh [email protected]:/# ls -l test.sh -rw-r--r-- 1 root root 19 1月 14 11:10 test.sh [email protected]:/# ./test.sh bash: ./test.sh: Permission denied [email protected]:/# chmod 744 test.sh [email protected]:/# ./test.sh hello world [email protected]:/# su ubuntu [email protected]:/$ ls -l test.sh -rwxr--r-- 1 root root 19 1月 14 11:10 test.sh [email protected]:/$ echo "cover it" > test.sh bash: test.sh: Permission denied [email protected]:/$ chmod 746 test.sh chmod: changing permissions of ‘test.sh‘: Operation not permitted [email protected]:/$ su Password: [email protected]:/# chmod 746 test.sh [email protected]:/# su ubuntu [email protected]:/$ echo "cover it" > test.sh [email protected]:/$
注意,只有文件的拥有者才可以对文件的权限进行更改,即使其他用户对文件拥有rwx权限,也是不能更改文件权限的。
另外一种形式:
[email protected]:/# echo ‘echo "hello world"‘ > test.sh [email protected]:/# ls -l test.sh -rw-r--r-- 1 root root 19 1月 14 11:20 test.sh [email protected]:/# chmod o+x test.sh #给other分配执行权限 [email protected]:/# su ubuntu [email protected]:/$ ./test.sh hello world [email protected]:/$
上面的一种形式,分配权限比较直观,因为给什么样的用户分配什么权限,一目了然,不需要计算。其中拥有者使用u,组用户使用g,其他用户使用o,a表示所有用户。
对于权限分配,比较稳妥的方式是:给某个文件的group用户分配读写执行的权限,然后将某个other的用户添加到group中去。否则如果other分配权限是不能细分的,比如我只想对other中的6个用户分配写权限,那么就不能对other分配w权限了,因为一旦分配w,则所有的other就有了w权限。