sh变更权限
添加权限
假设您创建一个 “Hello world” 的 shell 脚本。当您第一次创建脚本时,它通常是不可执行的。使用 chmod
命令和 +x
选项添加执行权限,如清单 5 所示。
清单 5. 创建可执行的 shell 脚本
[ian@echidna ~]$ echo 'echo "Hello world!"'>hello.sh [ian@echidna ~]$ ls -l hello.sh -rw-rw-r--. 1 ian ian 20 Nov 30 13:05 hello.sh [ian@echidna ~]$ ./hello.sh bash: ./hello.sh: Permission denied [ian@echidna ~]$ chmod +x hello.sh [ian@echidna ~]$ ./hello.sh Hello world! [ian@echidna ~]$ ls -l hello.sh -rwxrwxr-x. 1 ian ian 20 Nov 30 13:05 hello.sh
您可以按类似的方法使用 +r
来设置读权限,使用 +w
设置写权限。事实上,您可以联合使用 r
、w
和 x
。例如,使用 chmod +rwx
将会设置文件的所有读、写和执行权限。chmod
会添加尚未设置的权限。
可选性
您在上面的例子中可能已经注意到,执行权限被设置给所有者、组 和 其他。为了更具可选性,您可以给模式描述加前缀 u
来设置用户权限,g
来设置组权限,还有 o
为其他人设置。需要指出的是 a
设置所有用户的权限,这就相当于忽略它。清单 6 显示了如何添加用户和组写和执行权限到 shell 脚本的其他副本。
清单 6. 有选择性地添加权限
[ian@echidna ~]$ echo 'echo "Hello world!"'>hello2.sh [ian@echidna ~]$ chmod ug+xw hello2.sh [ian@echidna ~]$ ls -l hello2.sh -rwxrwxr--. 1 ian ian 20 Nov 30 13:08 hello2.sh
删除权限
有时您需要删除权限,而不单单是添加。简单地将 +
改变为 -
,就能删除任何已设置的指定权限。清单 7 显示了如何删除两个 shell 脚本上的其他用户的所有权限。
清单 7. 删除权限
[ian@echidna ~]$ ls -l hello*.sh -rwxrwxr--. 1 ian ian 20 Nov 30 13:08 hello2.sh -rwxrwxr-x. 1 ian ian 20 Nov 30 13:05 hello.sh [ian@echidna ~]$ chmod o-xrw hello*.sh [ian@echidna ~]$ ls -l hello*.sh -rwxrwx---. 1 ian ian 20 Nov 30 13:08 hello2.sh -rwxrwx---. 1 ian ian 20 Nov 30 13:05 hello.sh
请注意,您可以一次改变一个或者多个文件的权限。正如在 topic 103 的文章中看到其他命令一样,您甚至可以使用 -R
(或者 --recursive
)选项在目录和文件上进行递归操作。
设置权限
现在已经可以添加或者删除权限了,您可能会想,怎样才能只设置一些特殊权限。使用 =
替换 +
或者 -
来完成这个动作。要在上述脚本中设置权限,这样其他用户就没有访问权利,您可以使用 chmod o= hello*
替换我们用于删除权限的命令。
如果您想对用户、组合或其他设置不同的权限,您可以通过逗号分隔不同的表达;例如,ug=rwx,o=rx
,或者您可以使用稍后提到的数字权限。