了解linux文件属性

回复 收藏
本帖最后由 SHMILY 于 2013-10-4 09:08 编辑

linux中的一切都是文件,它的文件分为以下几类:
普通文件:分为纯文本文件(ASCII文件,一般可以直接读取的文件,比如配置文件)、二进制文件(比如可执行文件),数据格式文件(比如登陆文件);
目录文件:就是目录
连接文件:类似windows的快捷方式
设备文件:通常在/dev中,又分为块设备文件和字符设备文件,块设备是以字符块为传输单位,而字符设备是以单个字符为传输单位。
套接字:  这类文件通常作用于网络数据连接中,通常放在/var/run目录中
管道文件:用于多个进程间的通信,它是指上是一个文件缓冲区


当我们使用ls –al这条命令列出目录中的文件信息时,我们可以看到它的文件属性是以下格
式:-rwxrwxrwx,其中’-’这个表示文件类型:
【d】表示目录;【-】表示文件;【l】表示连接文件;【b】表示块设备文件;【c】表示字符设
备文件;
而后面的9个属性又分为三组,没三个一组,分别表示用户,群组和其它。其中【r】表示
可读;【w】表示可写;【x】表示可执行。同时,这三种属性可以分别用数字来表示:
【r】:4;【w】:2;【x】:1
以上所述是文件的基本权限,此外,linux下的文件还有三个特殊的权限:SUID/SGID/Sticky Bit
SUID:当s权限取代user的x时,也就是类似-r-s—x—x,称为set UID,简称为SUID,这时,当
用户执行这个文件时,就会暂时得到这个文件拥有者的权限。
setGID:与SUID类似,只不过它的s是取代群组的x。
SBIT:当t权限取代其它的x时,就表示SBIT,它只对目录有效,对文件没有任何效果。在具
有SBIT的目录下,用户若再该目录下具有w及x的权限,则当用户在该目录下建立文件或
目录时,只有文件拥有者与root才有权限删除。

文件权限的更改
Chgrp:改变文件所属群组
用法:chgrp [-R] dirname/filename;//下列的-R参数统一为目录下文件的递归
例:chgrp users install.log
Chown:改变文件拥有者
用法:chown [-R] 拥有者文件或目录
     Chown [-R] 拥有者:群组 文件或目录
例:chown huli install.log
    Chown huli:usersinstall.log
注意:当我们使用cp将自己的文件拷贝给另一个用户时,该文件的拥有者和群组并没有改
变,因此,要让这个文件彻底地属于这个用户,还必须修改该文件的拥有者和群组。

Chmod:更改文件属性
前面已经提到过,r,w,x三个属性分别对应的数字是4、2、1。而9个属性又分为三组,那么
一组的属性就是这三个属性的的累加。
例如,当属性为【-rwxr-x---】时,可知
Owner=rwx=4+2+1=7;group=r-x=4+1=5;others=---=0+0+0=0;
这个文件的权限就为750
用法:chmod [-R] xyz 文件或目录
其中xyz就是刚刚提到的文件权限,如上面的750
例:chmod 777 ~/.bashrc

还有一种更改文件权限的方法。可以使用u,g,o分别表示三组的属性,a表示all,语法如下:
Chmod [ugoa][+-=] [rwx] 文件或目录
参数:
其中u表示用户,g表示群组,o表示其他,a表示所有,+表示加入属性,-表示减去属性
=表示设置属性。
例:chmod u=rwx,go=rx ~.bashrc
    Chmod a+w~/.bashrc
   Chmod a-x~/.bashrc

注意:目录属性有一个特别之处,那就是能否进入它与x这个属性有关
例:cd /tmp
   Mkdir testing
    Chmod 766testing
    Su huli
   Cd testing;//permissiondenied
可以看到,在上面的例子中,我在/tmp下建立了一个目录,并将目录的权限更改为【rwxrw-rw-】
然后将切换到huli这个用户下,可以看到,该用户对于这个目录有读写的权限,但是没有执
行权限,这时,我使用cd命令进入这个目录,会看到permission denied的提示信息,表示
没有权限进入该目录。这时,如果你将x权限补上,chmod o+x testing,再使用cd命令,便
可以顺利进入该目录。
由此可知,能否进入该目录是与x属性息息相关的。

前面提到过SUID/SGID/SBIT这几个权限,那么这里就理所当然地要涉及到这几个权限的设置。
与普通属性相似,SUID/SGID/SBIT所对应的数字也为4、2、1
例:将文件的权限更改为【-rwsr-xr-x】
chmod 4755 test
将文件的权限更改为【-rwxr-sr-t】
Chmod 3755 test
由此可知,这三个权限是设置在最前面。
注意:当一个文件的权限为【-rw-rw-rw-】时,我们再来更改这几个特殊权限试试看
Chmod 7666 test;ls –l test
可看到,打印出的结果为【rwSrwSrwT】,为什么是大写的S和T呢,这是因为文件原来的基础属性中,用户,群组和其它中都没有x这个属性,而SUID表示“该文件在执行时,具有文件拥有者的权限”,但文件拥有者都无法执行了,又哪来的权限给别人呢,因此,大写的S和T都表示空的意思。

文件与目录的默认权限

当我们新建立一个文件或者目录时,它的默认属性是什么呢?这就与umask相关。umask就是“文件或者目录的属性默认值要减掉的权限”。如果查看umask值和文件或者目录的属性默认值呢?
Umask有两种方式来查看。
第一种是直接使用umask
0022
第一组数字就是指刚才讲到的特殊属性
第二种是以符号的形式打印unmask  -S
U=rwx,g=rx,o=rx

文件与目录的属性默认值也是不一样的。默认权限下,文件是没有可执行权限的,也就是
666,【-rw-rw-rw-】;
而由于x与是否进入此目录有关,因此默认为所有权限开放,即为777,【drwxrwxrwx】;
当新建立一个文件或者目录时,它们的属性就是上面的默认属性减去umask的值。

文件的隐藏属性
文件有隐藏属性,在系统安全性方面,该隐藏属性非常的重要
Chattr:设置文件隐藏
用法:chattr [+-=] [ASacdistu] 文件或者目录名
所有的参数就不一一列举了,这里只列举两个比较重要的参数
a:设置了a之后,这个文件只能增加数据,而不能删除,只有root才能设置这个属性。
:它的作用很大,它可以让一个文件“不能被删除、改名、设置连接,也无法写入或者增加数据”
注意:这两个属性是较常用的属性,而且只有root才能设置

lsattr:显示文件的隐藏属性
格式:lsattr [-aR] 文件或者目录
-a表示将隐藏文件的属性也显示出来,而-R连同子目录的属性也一并列出来。
2013-10-04 08:57 举报
已邀请:
0

eepan

赞同来自:

收藏,鼎力支持。
0

eepan

赞同来自:

支持,向1000金币进军。
0

eepan

赞同来自:

一天增加几个金币
0

eepan

赞同来自:

论坛还是有实际使用意义
0

eepan

赞同来自:

常来看看,常来学习。
0

eepan

赞同来自:


一天十个金币,足够了
0

eepan

赞同来自:

又来抢金币了。
0

eepan

赞同来自:

学习了,发帖发到手累
0

eepan

赞同来自:


今天没事,继续发帖
0

eepan

赞同来自:

一天十个金币,足够了
0

eepan

赞同来自:

一天十个金币,足够了
0

eepan

赞同来自:

一个小时20金币

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: