linux chmod and chown

使用方式 : 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
posted on 2013-05-10 19:18  舍得0215  阅读(325)  评论(0编辑  收藏  举报