使用方式 : chmod [-cfvR] [--help] [--version] mode file...
1. mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],
2. -c,--changes 只输出被改变文件的信息
3. -f,--silent,--quiet 当chmod不能改变文件模式时,不通知文件的用户
4. -v,--verbose 无论修改是否成功,输出每个文件的信息
5. --help 输出帮助信息
6. --version 输出版本信息
u:拥有文件的用户(所有者); g:所有者所在的组群; o:其他人(不是所有者或所有者的组群); a:每个人或全部(u、g、和o)。
r:读取权; w:写入权; x:执行权 r=4,w=2,x=1
+:添加权限; -:删除权限; =:使它成为惟一权限
列举一些android 目录权限:
drwxr-xr-x root root 1970-01-01 00:00 acct
-rwxr-x--- root root 239920 1970-01-01 00:00 charger
lrwxrwxrwx root root 1970-01-01 00:00 d -> /sys/kernel/debug
第一位表示文件类型。d是目录文件,l是链接文件,-是普通文件,p是管道, s是套接字,c是字符设备文件,b是块设备文件
第2-4位表示这个文件的属主拥有的权限,r是读,w是写,x是执行,-是无权限
第5-7位表示和这个文件属主所在同一个组的用户所具有的权限。
第8-10位表示其他用户所具有的权限。
---对应英文全称----
d = directory - = regular file l = symbolic link s = Unix domain socket p = named pipe
c = character device file b = block device file
r = read permission = 4 w = write permission = 2 x = execute permission = 1 - = no permission = 0
u = user/owner g = group o = other a = all
+ add this permission - remove this permission = set exactly this permission
一些范例:
将档案 file1.txt 设为所有人皆可读取 :chmod ugo+r file1.txt or chmod a+r file1.txt or chmod 444 file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将目前目录下的所有档案与子目录皆设为任何人可读取 : chmod -R a+r *
========以下还有三种情况,比较少见============
SUID:只对二进制程序支持,只要拥有该程序的所有者拥有SUID的权限,那么其它用户或者同组用户拥有该程序的x权限,就可以在程序执行过程中拥有所有者的权限支持。
SGID:此权限与SUID有类似的地方,但是SUID是得到所有者的支持,而SGID是得到同组用户的支持。
SBIT 全称Sticky Bit.但是它只对目录有效,对文件却是无效的,它的作用就是防止别人删除对方的资料..
如:
-rwsr-xr-x 1 root root 19876 Jul 17 2006 /usr/bin/passwd
drwxr-srwx 2 root root 4096 Feb 6 21:09 a
SUID为4 SGID为2 SBIT为1
例:
假如我们有个文件叫file.有一个目录叫test..file它的权限是644..test的权限是755
1..如果我们想把file加上suid权限的话执行此命令
#chmod 4755 file
2..如果我们想把test目录加上sgid的话执行此命令
#chmod 2755 test/
3.如果我们想把test目录加上sbit权限的话执行此命令
#chmod 1755 test/
4..大家可以看得出来s与t都是取代x权限的...
5..如果不想让test具备SUID和SGID权限执行此命令
#chmod 7666 file
#ls -l
-rwSrwSrwT 1 root root 0 Feb 6 21:49 file
这里的S和T就代表空..不具备其他人执行的权限...7666也就是说用户,组,以及其他的人都不具备x的权限,除了root.任何人修改不了此文件...
这儿我用数字代替给文件加一些 权限....我们也可以用别的方法.比方说..我们给file文件加上suid权限
#chmod u=rwxs,o=rx file
给test目录加上SGID权限和other可读取写入执行权限
#chmod g+s,o=wrx test/
给test目录加上SBIT权限和other可读取写入执行权限
#chmod o=rwxt test/
以下摘自深入理解linux 内核:
suid
进程执行一个文件时通常保持进程拥有者的UID,然而,如果设置了可执行文件suid的标志位,进程就获得了该文件的拥有者的UID.
sgid
进程执行一个文件时保持进程组的用户组ID.然而,如果设置了可执行文件sgid的标志位,进程就获得了该文件的用户组ID.
sticky
设置了sticky标志位的可执行文件相当于向内核发出一个请求,当程序执行结束以后,依然将它保留在内存(这个标志已经过时,现在使用基于代码页共享的其他方法)
当文件由一个进程创建时,文件拥有者的ID就是该进程的UID。而其用户组ID可以是进程创建者的ID,也可以是父目录的ID,这取决于父目录sgid标志位的值。
指令名称 : chown 使用权限 : root
使用方式 : chown [-cfhvR] [--help] [--version] user[:group] file...
以Android phone system/bin下的文件为例:
-rwxr-xr-x root shell 380075 2013-05-07 12:02 btld
第一列为ugo的权限, 第二列 btld 所属用户, 第三列为 btld 所属用户组.
1.修改所属用户由"root" 变为 "shell" -- chown shell btld (之前要运行adb root , adb remount)
-rwxr-xr-x shell shell 380075 2013-05-07 12:02 btld --修改后
2.修改所属用户组由"shell" 变为 "root" -- chown shell.root btld
-rwxr-xr-x shell root 380075 2013-05-07 12:02 btld --修改后
注: 如果要在linux 修改所属用户组应该用chgrp --chgrp [-cfhRv][--help][--version][所属群组][文件或目录...]
-- chown 有时间再整理 --
Refs:
http://linux.chinaunix.net/techdoc/system/2007/12/11/974135.shtml
http://blog.csdn.net/hsuxu/article/details/7193923