Linux文件及权限
1. 查看文件权限
(1).ls -l 命令 (ll命令)
显示详细信息
例:
[root@localhost Desktop]# ll
total 178752
-rwxr-xr-x. 1 root root 2092 Nov 20 13:05 1
drwx------. 4 root root 4096 Jan 29 2016 1.22xiancheng2
drwx------. 5 root root 54 Nov 24 2011 16计算机组成原理实验讲稿
-rw-r--r--. 1 root root 0 Dec 21 22:14 1.c
注释:
上述“ls -l”的结果一共有 9 列,分为 7 个部分.下面从左向右对这 7 部分信息进行解释,
我们以 file1 文件为例:
(1)"-rw-r—r—.":文件权限信息,有 10 个字符(不要忽略最后一个字符.)。
第一列的信息,它主要描述了文件的权限信息,可以看到一共有 11个字符
第一个字母表示文件类型
- 普通文件
l link链接文件,指向另一个文件,类似快捷方式
d direct 目录文件
b block块文件 硬盘 二进制文件
c 字符设备文件
s socket套接字文件
p 命名管道文件
共有3组rwx:
u所属用户 g所属组 o不同组的其他用户
r(4) 读 w (2)写 x(1)可执行
rwx =4+2+1= 7
(2)"1":文件的连接数(在软链接和硬链接中会进行讲解)。
(3)"root":文件所属用户。
(4)"root":文件所属的组。
(5)"54":文件容量(默认单位为 bytes)
(6)"Nov 20 13:05":这个文件的创建日期或者是最近一次的修改日期。
(7)"f1.c":文件名称。
2..权限及修改权限命令
在修改文件权限方面 linux 为我们提供了以下 3 个命令:
chown 改变文件的拥有者
chgrp 改变文件所属的组
chmod 改变文件的权限,SUID、SGID
(1)。修改文件的拥有者
例:chown haha file
将file的所属改用户为haha
chown root.haha file
" . "前表示文件所属用户,后表示文件所属组,也可以用“ : ”代替
(2)。修改文件所属组
例: chgrp haha file
(3)。改变文件权限
格式:chmod u=rwx,g=rw,o=r file 设定
chmod +x file 加入
chmod g-r file 除去
chmod 666 file
3.三种特殊权限的管理:SUID、SGID、SBIT
SUID(Set UID)
当 s 这个标志出现在文件拥有者 x 权限上时,此时就被称为 Set UID,简称为 SUID 的特殊权限。 那么 SUID 的权限对于一个文件有这样的限制和功能:
(1)SUID 权限仅对二进制程序(binary program)有效;
(2)执行者对于该程序需要具有 x 的可执行权限;
(3)本权限仅在执行该程序在的过程中有效 (run-time);
(4)执行者将具有该程序拥有者 (owner) 的权限。
,注意:非常关键的是,SUID 所针对的只能是二进制文件,而不是可执行文件,例如 shell
脚本就不可以被赋予 SUID 的权限。
,SGID
SGID 可以针对文件或者目录进行设定。
(1) 如果 SGID 针对的是文件的话有以下限定:
SGID 对二进制程序有用;程序执行者对于该程序来说,需具备 x 的权限;
执行者在执行的过程中将会获得该程序群组的支持
(2)如果 SGID 使用在目录上,它将具有以下的功能:
用户对于此目录具有 r 和 x 的权限时,该用户能够进入此目录。
用户在此目弽下癿有效群组(effective group)将会变成该目弽癿群组;
若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件的
所属组与此目录的组群相同。
Sticky Bit
这个权限只针对目录有效,对于文件是没有效果的,简称为 SBIT。SBIT 对于目录的作用是:
(1) 当用户对于此目录具有 r 与 x 的权限时,该用户能够进入此目录。
(2) 当用户在该目录下建立文件时,只有自己和 root 能够进行删除,其他用户不能够
进行删除。
SUID、SGID 和 SBIT 权限的设定:
(1) 使用符号进行设定:
SUID ====>chmod u+s 二进制文件
SGID ====>chmod g+s 目录或者二进制文件
SBIT ====>chmod o+t 目录
(2) 使用数字进行设定:
4 为 SUID
2 为 SGID
1 为 SBIT
可以使用 chmod 进行赋值,以前我们文件权限的修改是三位数字(例如:777),如果要添加上 SUID 的权限,则为四位数字:4777,添加 SGID 和 SBIT 的方法类似。
4.设置文件与目录的默认权限
在 linux 操作系统中文件的预设权限由 umask 值决定,文件和目录的默认权限是有所区别的:
(1).文件的 x 权限默认情况下是被取消的,也就是说文件默认的满权限是 666。主要考虑
以下两个原因:
1)一般情况下文件只起记录的作用,所以能够进行读写即可。
2)取消 x 权限也是出于安全的考虑。毕竟直创建的文件就可以执行脚本是非常危险的隐患。
(2).目录的满权限是包含 x 的,也就是 777。
(3).文件和目录的初始权限就是由其满权限减去 umask 值决定的。在文件/etc/profile 文件中我们对 umask 值进行了设置:
只有当用户的 id 大于 199,并且用户名称和其组名称相等的时候,它的 umask 值为002,使用 666 和 777 分别减去 002 会得到结果
5.软链接与硬链接
(1)。hard Link(硬链接,或者称作实体链接)
在了解硬链接之前我们需要清楚以下几个知识:
1) 每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;
2) 想要读取该文件的内容,必须通过目录所记录的文件名来找到正确的 inode 号进行读取。
接下来我们举例建立一个文件的硬链接:
我们设置了/mnt/crontab 为/etc/crontab 的硬链接文件,通过列出详细信息可以发现二者的inode 号是相同的,而且链接数目变为了 2。通过 1 和 2 的目录的 inode 号找到指定的块(block),在这两个块中有不同的文档名,但是这两个文档名都可以指定 real 这个 inode 号去找到最终读取的数据。
使用硬链接时,磁盘空间和 inode 数量都不会发生变化。硬链接只是在所指定的目录的block 多写入一个关联数据,既不会增加 inode 数也不会耗用 block 数。
硬链 接的使用有以下限制:
1) 不能跨越文件系统;
2) 不能对目录进行硬链接;
解释:
跨越文件系统会造成链接上的错乱,而如果使用 hard link 链接到目录时, 链接的数据需要连同被链接目录底下的所有数据都要建立链接,举例来说,如果你要将/etc 使用硬链接建立一个 /etc_hd 的目录时,那在 /etc_hd 底下的所有文件同时都与/etc 底下的文件要建立 hard link ,而不仅是两个目录名之间建立硬链接而已。
例:
[root@localhost mnt]# ll -l /etc/crontab
-rw-r--r--. 1 root root 451 Dec 28 2013 /etc/crontab
[root@localhost mnt]# ln /etc/crontab ./crontab
[root@localhost mnt]# ll -i /etc/crontab
135288839 -rw-r--r--. 2 root root 451 Dec 28 2013 /etc/crontab
[root@localhost mnt]# ll -i ./crontab
135288839 -rw-r--r--. 2 root root 451 Dec 28 2013 ./crontab
[root@localhost mnt]#
(2)。 soft Link(软链接,又称作符号链接)
通过软链接建立的文件是一个独立的文件,它相当于是一个“指针”。这个文件会让数据
的读取指向它 link 的文件。因为只是一种指向动作,如果软链接的源文件被修改,它进行读
取也会发生改变,如果源文件被删除,则链接文件无法进行读取了。
例:
[root@localhost c]# ln -s fork.c ./fork.c.bak
[root@localhost c]# ll -i fork.c
3190163 -rw-r--r--. 1 root root 393 Dec 10 14:55 fork.c
[root@localhost c]# ll -i fork.c.bak
137866169 lrwxrwxrwx. 1 root root 6 Jan 8 16:00 fork.c.bak -> fork.c