以下是针对传统Linux文件系统(ext,xfs等)进行的学习,与其他文件系统(NTFS,FAT32等)无关
文件类型
在Linux的文件系统中与Windows不同,Linux没有后缀。也就是说,在Linux中,即使没有后缀,系统依然能够判断出文件的类型,后缀只是方便用户管理文件的一种直观方法。
那么系统在判断文件类型时,会对文件的头部信息进行识别。用户使用
file命令用于判断系统中文件的类型。
语法:file [选项] 文件
[root@CentOS6 ~]# file /bin/touch
/bin/touch: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
file命令在对文件进行探测时,会对先探测文件的文件的文件系统,再是魔数,最后是语言,所以不是Linux传统文件系统下的文件是不能够被探测出来的。
Linux常见的文件类型有:普通文件(-)、块设备文件(b)、目录(d)、链接(l)、管道文件(p)、字符文件设备(c)、套接字文件(s)
文件权限
Linux的文件权限分为:读(read)、写(wirte)、执行(execute)三种。
[root@CentOS6 boot]# ll /data
total 268
drwxr-xr-x. 2 root root 4096 Apr 1 12:03 account
其中第一个字段为:
其中r代表读权限,w代表写权限,x代表执行权限,而-代表没用对应位置的权限。也可以用数字表示文件的权限,分别对应为
新建默认的文件权限是666,文件夹权限是777。
新建文件的权限取决于 umask 的值,默认root为022,普通用户为002。
[root@CentOS6 ~]# umask
0022
可以在/etc/bashrc(全局)或者~/.bashrc(局部)中修改。
umask值是新建文件权限的掩码,意在取消对应位上的权限。所以新建的文件权限是:
1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1
0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0
1 1 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 0 1
6 4 4 7 5 5 6 6 4 7 7 5
对于文件夹来说读权限决定用户能否查看文件夹中文件的目录
[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen/ -d
d-wx-wx-wx. 2 root root 17 Apr 5 16:21 /data/jiangbowen/
[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen
ls: cannot open directory /data/jiangbowen: Permission denied
而写权限决定用户能否对文件夹的目录结构进行更改
[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen -d
dr-xr-xr-x. 2 root root 17 Apr 5 16:21 /data/jiangbowen
[jiangbowen@CentOS7 ~]$ touch /data/jiangbowen/file
touch: cannot touch ‘/data/jiangbowen/file’: Permission denied
最后,执行权限决定用户能否访问文件夹里的内容
[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen -d
drw-rw-rw-. 2 root root 17 Apr 5 16:21 /data/jiangbowen
[jiangbowen@CentOS7 ~]$ cat /data/jiangbowen/who
cat: /data/jiangbowen/who: Permission denied
对于文件来说,root在没有执行权限时也是无法执行文件的。
当文件判断用户是否对其拥有权限时,会根据所有者->所属组->其他人的顺序进行判断,一旦符合一种身份便不会继续向下继续判断。
[jiangbowen@CentOS7 ~]$ ll /data/jiangbowen
total 4
--w-rw-rwx. 1 jiangbowen jiangbowen 38 Apr 5 16:29 who
[jiangbowen@CentOS7 ~]$ cat /data/jiangbowen/who
cat: /data/jiangbowen/who: Permission denied
除了读、写、执行三种权限之外,还有三种特殊权限:SetUID、SetGID(s)和SBIT(t)。
SUID:当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份访问资源。但是只有可执行的二进制程序才可以设置SUID,并且文件的所有者要对文件拥有执行权限,当程序结束时,系统会收回用户的SUID权限。
SGID:继承所属组的所有权限。在文件夹具有SGID权限时,新建的文件所有者将自动属于文件夹的属主。
Sticky:当一个目录设置SBIT权限后,目录内的文件只能够被文件的所有者删除。
权限管理
chown命令用于更改文件的所有者。使用-R选项可以实现递归修改,将目录下的文件和目录所有者全部更改。
语法:chown [-R] 文件
[root@CentOS7 data]# chown jiangbowen /data/haha
[root@CentOS7 data]# ll /data/haha
-rw-r--r--. 1 jiangbowen root 8 Apr 5 17:18 /data/haha
chgrp命令用于个更改文件的所属组,与chown命令有语法相同。
chmod命令用于更改文件的权限。
语法:chmod [选项] 行为
[root@CentOS7 data]# ll -a dir1/
total 0
drwxr--r--. 3 root root 38 Apr 5 18:58 .
drw-r--r--. 3 jiangbowen root 28 Apr 5 18:48 ..
drw-r--r--. 3 root root 28 Apr 5 18:48 dir2
-rw-r--r-x. 1 root root 0 Apr 5 18:48 f2
-rw-r--r--. 1 root root 0 Apr 5 18:58 f3
[root@CentOS7 data]# chmod -R +X /data/dir1/
[root@CentOS7 data]# ll -a dir1/
total 0
drwxr-xr-x. 3 root root 38 Apr 5 18:58 .
drw-r--r--. 3 jiangbowen root 28 Apr 5 18:48 ..
drwxr-xr-x. 3 root root 28 Apr 5 18:48 dir2
-rwxr-xr-x. 1 root root 0 Apr 5 18:48 f2
-rw-r--r--. 1 root root 0 Apr 5 18:58 f3
选项:
-R 递归改变文件权限
--refernce=file 将file文件的权限复制给其他文件
+X 将文件夹和带有执行权限的文件全部赋予执行权限
在文件被赋予特殊权限(s,t)时,对应对象拥有执行权限会以小写表示,没有则是大写。
chattr命令用于更改文件的特定权限。可以使用lsattr命令查看文件的特定权限。
语法 :chattr [-R] 行为 文件
[root@CentOS7 data]# chattr +ai dir1/f3
[root@CentOS7 data]# lsattr dir1/f3
----ia---------- dir1/f3
[root@CentOS7 data]#
行为:
a:让文件或目录仅供追加;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。
控制访问列表(ACL)
ACL可以实现更加灵活的权限管理。他的生效顺序是:所有者->ACLowner->ACLgroup->其他人
setfacl命令用于在命令行里设置ACL。
语法:setfacl [选项] 对象类型:对象:行为 文件
[jiangbowen@CentOS7 ~]$ ll /data/dir1/f2
-rwxrwxr-x+ 1 root root 0 Apr 5 18:48 /data/dir1/f2
[jiangbowen@CentOS7 ~]$ ls /data/dir1/f2
/data/dir1/f2
[jiangbowen@CentOS7 ~]$ getfacl /data/dir1/f2
getfacl: Removing leading '/' from absolute path names
# file: data/dir1/f2
# owner: root
# group: root
user::rwx
user:jiangbowen:rwx
group::r-x
mask::rwx
other::r-x
选项:
-m, --modify=acl:修改文件或目录的扩展ACL设置信息
-x, --remove=acl:从文件或目录删除一个扩展的ACL设置信息
-b, --remove-all:删除所有的扩展的ACL设置信息
-n, --no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定
-R, --recursive:操作递归到所有子目录和 文件
mask值限制了除了所有者与其他人以外的用户最大权限,当其对应权限超过mask时,则不会生效,以mask的值为最大权限。可以使用-mask选项设置mask的值。
getfacl命令用于查看文件的acl权限。-R实现递归查看目录下的acl权限设置。
利用重定向至文件,可以将文件的acl权限设置进行备份。在需要时使用 setfacl --setfile=备份 文件 可以还原已经备份的acl权限设置。