Linux系统文件和目录的属性及权限
1 文件属性概述
Linux系统中的文件或目录的属性主要包括:索引节点(inode)、文件类型、权限属性、硬链接数、所归属的用户和用户组、最近修改时间等内容(文件名严格来说不属于文件的属性):
下面是我们执行ls –lih命令显示的结果:

文字解释
第一列:inode索引节点编号(如人的身份证全国唯一)
系统读取文件是首先通过文件名找到inode(全称:index node),然后才能读取文件到内容
第二列:文件类型及权限
共有10个字符,第一个字符代表为文件类型(-代表file,d代表directory),后九个字符代表为文件的权限(读、写、执行)
第三列:文件的硬链接个数
硬链接的个数好比对源文件的备份,对同一个文件的访问提供多个不同的入口,即使源文件删除了,我们依然可以访问文件本身的内容。
例如:一个超市有多个进出口,即使其中任何一个进出口封闭,我们依然可以去购物买到我们想要得东西
第四列:文件或目录所属的用户
属主,即创建文件的用户(文件的拥有者),当然我们也可以通过chown修改文件的拥有者
第五列:文件或目录所属的组
这里文件的所属用户组不是用户默认的用户组,我们可以授权给不同的用户组使其文件属于其组
第六列:文件或目录的大小
第七、八、九列:文件或目录的修改时间
查看文件属性里面的时间就是文件的修改时间mtime(全称:modify time)
第十列:实际的文件名或目录名
文件名是不属于文件的属性列表,文件名实际是属于它上一级目录的block块的内容
2 索引节点inode
2.1 inode概述
硬盘要存储数据(房子住人),首先要分区(隔断),然后要格式化创建文件系统(装修),最后存储数据(住人)。
Inode中文意思是索引节点(全称:index node)。在每个linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘、U盘……)被格式化为ext4(Centos6.7)文件系统后,一般会生成两部分:第一部分是Inode索引节点(很多个),第二部分是Block块(很多个)。
Block是用来存储实际数据用的,例如:照片、视频、音乐等普通文件数据。
Inode是用来存储这些数据的属性信息(也就是ls –l的结果),inode包含的属性信息包括文件的大小、属主、归属的用户组、读写执行权限、文件类型、修改时间,还包含指向文件实体(block块)的指针功能(inode节点—block块的对应关系)等,但inode里面唯独不包含文件名。
Inode除了记录文件属性的信息外,还会为每个文件进行信息索引(指向文件实体的指针),所以就有了inode的数值。Linux操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体。
文件—inode—block之间的关系图:

举例说明:
学校教室门口贴一张纸(inode),上面有学生的位置信息,以及学生的身高,体重等信息,座位就相当于block。
当我们使用ls查看某个文件或目录时,如果加上-i参数,就可以看到inode节点了,也可以使用stat查看inode以及其他的文件属性;比如文件—inode—block之间的关系图对应的例子:
方法一:ls –li 查看文件属性
[root@oldboy ~]# ls -li Wolf_File
-rw-r--r-- root root Apr : Wolf_File
方法二:stat查看文件属性:
[root@oldboy ~]# stat Wolf_File
File: `Wolf_File'
Size: Blocks: IO Block: regular file
Device: 803h/2051d Inode: Links:
Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root)
Access: -- ::56.841301484 + #文件的查看时间
Modify: -- ::51.633299332 + #文件的修改时间
Change: -- ::51.633299332 + #文件权限改变的时间
[root@oldboy ~]#
第一列inode值是410472;查看一个文件或目录的inode,通过ls命令的-i参数即可。
因为inode要存放文件的属性信息及指向文件实体的指针索引信息,所以每个inode本身是有大小的,Centos5 系列inode的默认大小是128字节(byte),
而Centos6系列 inode的默认大小是256字节(byte),inode的大小在分区被格式化创建文件系统之后定下来的,格式化以后就无法更改inode的大小了,格式化前可以通过参数指定inode的大小,
但是一般企业工作环境没有这个需求。
不同Centos版本inode大小不同:
Centos6系列查看inode大小:
[root@oldboy ~]# dumpe2fs /dev/sda1 | grep -i "inode size" ##/boot分区默认为128byte
dumpe2fs 1.41. (-May-)
Inode size:
[root@oldboy ~]# dumpe2fs /dev/sda3 | grep -i "inode size"
dumpe2fs 1.41. (-May-)
Inode size:
Centos5系列查看inode大小:
由于我这里没有Centos5系统版本,想验证的可自行安装Centos5系统,使用dumpe2fs /dev/sda3 | grep -i "inode size"命令去查看。
2.2 inode总结
################学会给阶段性的知识做小结是学好linux运维的好习惯################
u 硬盘被分区并格式化为ext4文件系统后会生成一定数量的inode和block
u inode称为索引节点,它的作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)
u ext3/ext4文件系统的block存放的是文件的实际内容
u inode是磁盘上的一块存储空间,Centos6系列版本非启动分区inode默认大小为256byte,Centos5系列版本inode默认大小为128byte
u inode的表现形式是一串数字,不同的文件对应的inode(一串数字)在文件系统里是唯一的
u 在linux文件系统中,inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
u ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个block
u ext3/ext4文件系统下,正常情况一个文件占用且只能占用一个inode(人和身份证)
u block是用来存储实际数据的,每个block的大小一般有1k,2k,4k几种;其中引导分区等为1k,其他普通分区多为4k(Centos6)
u 如果一个文件很大(高清大片4G),需要占多个block,如果文件很小(0.01k),至少占一个block,并且这个block的剩余空间就浪费了,即无法再存储其他数据了
u 查看inode大小和总量
[root@oldboy ~]# dumpe2fs /dev/sda3 | grep -iE "block size|inode size"
dumpe2fs 1.41. (-May-)
Block size:
Inode size:
[root@oldboy ~]# dumpe2fs /dev/sda3 | grep -iE "block count|inode count"
dumpe2fs 1.41. (-May-)
Inode count:
Block count:
Reserved block count:
注意:默认block count一般会大于inode count的数量
u 查看inode的总量是使用量(df -i)
[root@oldboy ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 % /
tmpfs % /dev/shm
/dev/sda1 % /boot
/dev/sr0 - /mnt
u 查看文件的inode信息
方法一:ls –li文件inode
[root@oldboy ~]# ls -li /etc/hosts
-rw-r--r--. root root Jan /etc/hosts
方法二:stat查看文件inode
[root@oldboy ~]# stat /etc/hosts
File: `/etc/hosts'
Size: Blocks: IO Block: regular file
Device: 803h/2051d Inode: Links:
Access: (/-rw-r--r--) Uid: ( / root) Gid: ( / root)
Access: -- ::50.701998104 +
Modify: -- ::22.000000000 +
Change: -- ::01.221267767 +
u 如何生成及指定inode大小
格式化/dev/sdb1分区时指定inode大小为256byte,block大小为2048字节即2k:
[root@oldboy ~]# mkfs.ext4 -b -I /dev/sdb1
mke2fs 1.41. (-May-)
文件系统标签=
操作系统:Linux
块大小= (log=)
分块大小= (log=)
Stride= blocks, Stripe width= blocks
inodes, blocks
blocks (5.00%) reserved for the super user
第一个数据块=
Maximum filesystem blocks=
block groups
blocks per group, fragments per group
inodes per group
Superblock backups stored on blocks:
, , , , , , 正在写入inode表: 完成
Creating journal ( blocks): 完成
Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every mounts or
days, whichever comes first. Use tune2fs -c or -i to override.
查看inode和block的大小:
[root@oldboy ~]# dumpe2fs /dev/sdb1 | grep -iE "block size|inode size"
dumpe2fs 1.41. (-May-)
Block size:
Inode size:
查看inode和block总量:
[root@oldboy ~]# dumpe2fs /dev/sdb1 | grep -iE "block count|inode count"
dumpe2fs 1.41. (-May-)
Inode count:
Block count:
Reserved block count:
2.3 Block总结
u 磁盘读取数据是按block为单位读取的
u 一个文件可能占用多个block,同时每读取一个block就会消耗一次磁盘I/O
u 如果要提升磁盘I/O性能,那就要尽可能一次性读取数据尽量的多
u 一个block只能存放一个文件的内容,无论内容有多小,如果block默认是4K大小,那么存放一个1K的文件,剩余3K的就不能再存放别的文件,只能浪费了
u Block并非越大越好,block太大对于存放小文件就会浪费磁盘空间,例如:1000K的文件;block大小为4K,占用250个block,如果block默认为1K,则需要占1000个block;
访问效率谁更高?消耗I/O分别250次和1000次;当然是block大小为4K时访问效率更高
u 根据业务需求,确定默认的block大小,如果是大文件(大于16K)一般设置block大一点,小文件(小于1K)一般设置block小一点
u Block太大,例如4K,文件都是0.1K的则会大量浪费磁盘空间,但是访问效率高
u Block太小,例如1K,文件都是1000K的则会消耗大量的磁盘I/O,访问效率比较低
u Block大小设置也是格式化分区时确定的,命令为mkfs.ext4 -b 2048 -I 256 /dev/sdb1
u 企业里文件都会比较大(一般会大于4K),block设置大一些会提升磁盘访问效率
u ext3/ext4文件系统(Centos5和6),一般都设置为4K(Centos7默认文件系统为xfs)
2.4 inode与block汇总
u 磁盘被分区格式化文件系统后,会分为inode和block两部分内容
u Inode存放文件的属性以及指向文件实体的指针,文件名不包含在inode里,一般是存放在上级目录的block里
u 访问文件过程原理:文件名àinodeàblocks
u Inode一般情况默认大小为256byte,block大小为1K,2K,4K,默认为4K,注意:引导分区/boot等特殊分区除外
u 通过df –i查看inode的数量以及使用情况,dumpe2fs /dev/sda3查看inode及block的大小及总数量
u 一个文件至少要占用一个inode和一个block,多个文件可以占用同一个inode(硬链接),即相同文件
u 一个block只能被一个文件使用,如果文件很小block很大,剩余空间浪费,无法继续被其他文件使用
u Block不是越大越好,要根据业务的文件大小进行选择,一般Centos6就是默认4K
u 可以在格式化分区时指定inode和block大小(mkfs.ext4 -b 2048 -I 256 /dev/sdb1)
3 文件类型
3.1 Linux文件类型概述
在linux系统,可以说一切(包括目录、普通文件、设备等)皆文件。文件类型包含有普通文件、目录、字符设备文件、块设备文件、符号链接文件、管道文件等等
图一 文件类型对应说明图
|
文件类型标识符 |
文件类型说明 |
|
d(directory) |
表示这是一个目录 |
|
-(regular file) |
表示这是一个普通文件 |
|
l(link) |
表示这个一个符号链接文件,实际上它指向另一个文件,即windows快捷方式 |
|
b(block) |
表示块设备和其他外围设备,是特殊类型的文件(/dev) |
|
c(character) |
表示字符设备文件(/dev) |
|
s (socket) |
表示Socket文件,如:网络通信是产生的包 |
|
p(named pipe) |
表示管道文件 |
|
#####通过ls –l显示文件属性后,第一列的第一个字符就是用来区分文件类型的##### |
|
find命令查看文件类型(-type参数)
-type c
File is of type c:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link;
s socket
D door (Solaris)
3.2 普通文件(按照文件内容分类)
- 纯文本文件(ASCII text):文件内容可以直接读取到文件数据,例如字母、数字等,可以使用cat命令读取文件,比如配置文件几乎都是纯文本文件
file命令查看文件类型:
[root@oldboy ~]# file Wolf_File
Wolf_File: ASCII text
- 二进制文件(binary):linux系统中的命令程序属于这种格式,例如cat命令就是一个二进制文件
file命令查看文件类型:
[root@oldboy ~]# file /bin/cat
/bin/cat: ELF -bit LSB executable, x86-, version (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6., stripped
- 数据格式文件(data):有些程序在运行的过程中就会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件;例如:linux在用户登录时,都会将登录信息记录在/var/log/wtmp(last命令的数据库文件)那个文件中,该文件是一个数据文件;通过last命令可以读取,使用cat命令读取会出现乱码;因为它属于一种特殊格式的文件。lastlog(/var/log/lastlog)查看linux系统所有用户的登录情况
file命令查看文件类型:
[root@oldboy ~]# file /var/log/wtmp
/var/log/wtmp: data
[root@oldboy ~]# file /var/log/lastlog
/var/log/lastlog: data
3.3 目录文件(directory)
[root@oldboy ~]# ls -ld oldboy/
drwxr-xr-x root root Apr : oldboy/
如上文所示,当我们执行ls –ld 目录名时,可以看到第一列内容为drwxr-xr-x,第一个字符带d的文件就表示是目录,目录在linux系统中是比较特殊的文件
创建目录的命令可以用mkdir命令或者cp命令(带-r or –a参数),cp可以把一个目录复制为另一个目录;删除目录用rm –r或rmdir(删除空目录)命令
区别目录和文件:
ls –F命令在目录后面加/来区分文件和目录:
[root@oldboy ~]# ls -F
.py copied.txt install.log stu1/ teacher1/
Wolf_File copied.txt. install.log.syslog stu2/ teacher2/
anaconda-ks.cfg copied.txt.bak oldboy/ stu3/
tree命令显示当前目录下所有的文件:
[root@oldboy ~]# tree .
.
|-- .py
|-- Wolf_File
|-- anaconda-ks.cfg
|-- copied.txt
|-- copied.txt.
|-- copied.txt.bak
|-- install.log
|-- install.log.syslog
|-- oldboy
|-- stu1
|-- stu2
|-- stu3
|-- teacher1
| |-- a
| `-- b
`-- teacher2
|-- a
`-- b directories, files
tree命令只显示当前目录下的目录文件:
[root@oldboy ~]# tree -d .
.
|-- oldboy
|-- stu1
|-- stu2
|-- stu3
|-- teacher1
| |-- a
| `-- b
`-- teacher2
|-- a
`-- b directories
tree命令只显示当前目录下一级目录:
[root@oldboy ~]# tree -Ld .
.
|-- oldboy
|-- stu1
|-- stu2
|-- stu3
|-- teacher1
`-- teacher2 directories
3.4 文件类型实例
) .tar、.tar.gz、.tgz、.zip、.tar.bz表示压缩文件,创建命令一般为tar,gzip,unzip等
) .sh表示shell脚本文件,通过shell语言开发的程序
) .pl表示perl语言文件,通过perl语言开发的程序
) .py表示python语言文件,通过python语言开发的程序
) .html、.htm、.php、.jsp、.do、.asp表示网页语言文件
) .conf表示系统配置文件
) .rpm表示rpm安装包文件
4 文件权限
4.1 文件权限概述
Linux中每个文件或者目录都有一组共9个基础权限位,每三位字符被分为一组,他们分别是属主权限位(占三个字符)、用户组权限位(占三个字符)、其他用户权限位(占三个字符);比如rwxr-xr-x,在linux中正是这9个字符权限位来控制文件属主、用户组以及其他用户的权限
文件权限示例图

文字解释:
r(read)代表读权限,用数字4表示
w(write)代表写权限,用数字2表示
x(execute)代表执行权限,用数字1表示
-代表没有权限,用数字0表示
前三位:代表文件属主/用户(owner/user)
中三位:代表文件用户组(group)
后三位:代表其他用户(other)
说明:特殊权限位:t T s S x X
4.2 模拟演示环境
4.2.1 用户测试准备
[root@oldboy ~]# groupadd incahome #一个家庭(oldboy的家)
[root@oldboy home]# useradd -g incahome oldboy #让家庭住人oldboy属于incahome这个家(模拟user)
[root@oldboy home]# useradd -g incahome oldgril #incahome这个家的家庭成员(模拟用户组group)
[root@oldboy home]# useradd test #外面的人,主人及家庭成员以外的人(other)
[root@oldboy home]# id oldboy
uid=(oldboy) gid=(incahome) groups=(incahome)
[root@oldboy home]# id oldgril
uid=(oldgril) gid=(incahome) groups=(incahome)
[root@oldboy home]# id test
uid=(test) gid=(test) groups=(test)
如果oldboy用户存在的话就用下面修改用户组的命令进行修改
[root@oldboy home]# usermod -g incahome oldboy
4.2.2 创建文件的测试准备
[root@oldboy ~]# mkdir /oldboy -p
[root@oldboy ~]# echo "echo oldboylinux" > /oldboy/test.sh
[root@oldboy ~]# chmod +x /oldboy/test.sh
[root@oldboy ~]# cat /oldboy/test.sh
echo oldboylinux
[root@oldboy ~]# ls -lh /oldboy/test.sh
-rwxr-xr-x root root Apr : /oldboy/test.sh
4.2.3 范例:实操体会文件权限
模拟演练环境:
打开四个窗口分别用root、oldboy、oldgril、test用户登录
分别测试oldboy、oldgril、test用户对上述test.sh文件的权限
实操一:
[root@oldboy ~]# ls -lh /oldboy/test.sh
-rwxr-xr-x root root Apr : /oldboy/test.sh
结论1:
oldboy、oldgril、test三个用户拥有同样的其他用户的权限,即读和执行,没有写的权限
实操二:
[root@oldboy ~]# chown oldboy.incahome /oldboy/test.sh
[root@oldboy ~]# ls -l /oldboy/test.sh
-rwxr-xr-x oldboy incahome Apr : /oldboy/test.sh
结论2:
oldboy用户拥有对应用户的权限,即读、写和执行的权限
oldgril用户拥有对应用户组(incahome)的权限,即读和执行的权限,没有写的权限
test用户拥有对应其他用户的权限,即读和执行的权限,没有写的权限
实操三:
[root@oldboy ~]# chmod g+w,o-x /oldboy/test.sh
[root@oldboy ~]# ls -l /oldboy/test.sh
-rwxrwxr-- oldboy incahome Apr : /oldboy/test.sh
总结文件测试结论:linux普通文件的读、写、执行权限说明:
. 可读r:表示具有读取\阅读文件内容的权限
. 可写w:表示具有新增、修改文件内容的权限
如果没有r配合,那么vi编辑文件会提示无法编辑(但可强制编辑),echo可以重定向或追加
特别提示:删除文件(修改文件名等)的权限是受父目录(即上一级目录)的权限控制,和文件本身(即文件名)权限无关
. 可执行x:表示具有执行文件的权限
文件本身要能够执行
普通用户同时还需要具备r的权限才能执行
root只要有x的权限就能执行
win32下可执行文件:*.exe,*.bat,*.com
linux下可执行文件:*.sh,*.py,*.perl等
4.2.4 企业面试题:请从linux文件系统的角度详细描述读取/oldboy/test.sh文件的过程
有关文件删除的说明:
Linux中的文件名是存在于父目录的block里面,并指向这个文件的inode节点,这个文件的inode节点再标记指向存放这个文件的block的数据块。
我们删除一个文件,实际上并不清楚inode节点和block的数据。只是在这个文件的父目录里面的block中,删除这个文件的名字和这个文件inode的对应关系,使这个文件名消失,并且无法指向这个文件的inode节点,
当没有文件名指向这个inode节点的时候,系统会同时释放inode节点和存放这个文件的数据块,并更新inode MAP和block MAP,让这些位置可以用于放置其他新的文件数据。
图一 详细描述读取/oldboy/test.sh文件的流程图

因此,修改和删除文件名都是在操作文件的上级目录的block,修改或删除的是文件名和inode的关联数据,所以删除文件是和上级目录权限关联
范例:实操体会目录权限
开启两个窗口通过两个用户演示上面的权限。一个是root,一个是oldboy用户,一个是oldgril用户,一个是test用户
演示环境准备:
[root@oldboy ~]# mkdir /oldboy/test -p
[root@oldboy ~]# ls -ld /oldboy/test
drwxr-xr-x root root Apr : /oldboy/test
测试目录的rwx:
特别是文件的删除
总结目录测试结论:linux目录的读、写、执行权限说明:
、可读r:表示具有浏览目录下面文件及子目录的权限,即ls dir
如果没有x权限,不能进到目录里,即无法(cd dir)
如果没有x权限,ls列表时可以看到所有文件名,但是会提示无权访问目录下文件
如果ls -l列表,所有的属性会带有问号,也会提示无权访问目录下文件,但可以看到所有文件名
、可写w:表示具有增加、删除或修改目录内文件名(一般指文件名)的权限(需要x权限配合)
、可执行x:表示具有进入目录的权限,例如:cd dir;但是没有r无法列表文件及目录,没有w无法新建和删除
4.3 文件权限更改命令
4.3.1 改变文件权限属性命令chmod
chmod - change file mode bits
[root@oldboy ~]# which chmod
/bin/chmod
chmod是用来改变文件和目录权限的命令,但只有文件的属主和超级用户root才有这种权限。通过chmod来改变文件或目录的权限有两种方法:一种是通过权限字母和操作符表达式的方法来设置权限;另一种是使用数字方法(常用)来设置权限。
4.3.2 chmod数字权限方法(推荐)
命令格式:
chmod [数字组合] 文件名
chmod [数字组合] 目录名 -R参数可递归生效(该目录下所有文件或子目录一起改变)
数字意义说明:
r
w
x
-
rwxr-xr-x 目录默认权限 rw-r--r-- 644文件默认权限
每个三位的权限代码(分别是属主、属组、其它用户)组合,有8种可能:
八进制 权限
---
--x
-w-
-wx
r--
r-x
rw-
rwx
演示实例:
[root@oldboy oldboy]# ls -l test.sh
-rw-r--r-- oldboy incahome Apr : test.sh
[root@oldboy oldboy]# chmod test.sh
[root@oldboy oldboy]# ls -l test.sh
-rw-rw-r-x oldboy incahome Apr : test.sh
[root@oldboy oldboy]# chmod test.sh
[root@oldboy oldboy]# ls -l test.sh
-rwx--xr-x oldboy incahome Apr : test.sh
4.3.3 chmod字符式权限表示法
命令格式:
Chmod [用户类型] [+ | - | =] [权限字符] 文件名
表一 详细说明表
|
chmod |
用户类型 |
操作字符 |
权限字符 |
文件和目录 |
|
U(user) |
+(增加) |
r |
||
|
G(group |
- |
|||
|
O(others) |
-(减少) |
w |
||
|
A(all) |
=(设置) |
x |
文字说明:
+:添加某个权限
-:取消某个权限
=:取消其他所有权限赋予给定的权限
演示实例:
[root@oldboy oldboy]# ls -l test.sh
-rw-r--r-- oldboy incahome Apr : test.sh
[root@oldboy oldboy]# chmod u+x test.sh
[root@oldboy oldboy]# ls -l test.sh
-rwxr--r-- oldboy incahome Apr : test.sh
[root@oldboy oldboy]# chmod g+w test.sh
[root@oldboy oldboy]# ls -l test.sh
-rwxrw-r-- oldboy incahome Apr : test.sh
[root@oldboy oldboy]# chmod u-x,g-w,o-r test.sh
[root@oldboy oldboy]# ls -l test.sh
-rw-r----- oldboy incahome Apr : test.sh
[root@oldboy oldboy]# chmod a=rw test.sh
[root@oldboy oldboy]# ls -l test.sh
-rw-rw-rw- oldboy incahome Apr : test.sh
[root@oldboy oldboy]#
4.3.4 Umask默认文件或权限分配命令
创建目录dir与创建文件file实例
[root@oldboy test]# mkdir dir
[root@oldboy test]# touch file
[root@oldboy test]# ls -lrt
total
drwxr-xr-x root root Apr : dir ->创建目录默认权限为755
-rw-r--r-- root root Apr : file –>创建文件默认权限为644
说明:root超级用户创建目录默认权限为755,文件默认权限为644
问题:为什么默认权限目录是755,文件是644而不是其他的值呢?
不管是操作系统还是网站站点目录,安全权限的临界点:
)目录755,文件644是相对安全的权限
)用户为root,用户组为root
注意:生产工作中一定尽量要文件和目录达到以上默认权限,其用户和属组都是root
Linux系统默认权限的方针:允许浏览、查看,但禁止创建文件、修改文件内容以及执行文件
实际是由/etc/bashrc文件控制:
[root@oldboy ~]# umask
->root超级用户系统默认的umask值
[root@oldboy ~]# sed -n '65,69p' /etc/bashrc
if [ $UID -gt ] && [ "`id -gn`" = "`id -un`" ]; then
umask
else
umask
fi
umask值为002,举例:
[oldboy@oldboy ~]$ ls -l file1
-rw-rw-r-- oldboy oldboy Apr : file1
[oldboy@oldboy ~]$ id
uid=(oldboy) gid=(oldboy) groups=(oldboy)
[oldboy@oldboy ~]$ umask umask值为022,举例:
[oldboy@oldboy ~]$ ls -l file
-rw-r--r-- oldboy incahome Apr : file
[oldboy@oldboy ~]$ id
uid=(oldboy) gid=(incahome) groups=(incahome)
[oldboy@oldboy ~]$ umask
文件权限计算方法:
root用户下默认文件权限计算方法
)假设umask值为:(所有位为偶数)
==>文件的起始权限值
– ==>umask值(采用减法)
----------
==>创建文件默认权限值
)假设umask值为:(所有是奇数的位要加1)
==>文件的起始权限值
– ==>umask值(采用减法)
----------
==>计算出来的权限值
+ ==>由于umask最后一位是5,在其他用户位再加1(采用加法)
---------
==>真实文件权限(即创建文件默认权限值)
4.3.5 特殊权限位
特殊权限位基本说明:
Linux系统基本权限位为9位权限,但还有额外3位权限位,共12位权限
suid s(有x) S 用户对应的权限位(用户对应的3位上)
sgid s(有x) S 用户组对应的权限位(用户组对应的3位上)
sticky t(有x) T 其他用户对应的权限位
如何查找系统(/usr/bin)目录中设置suid的命令
方法一:
[root@oldboy oldboy]# find /usr/bin -type f -perm | xargs ls -l
-rwsr-xr-x. root Jan /usr/bin/at
-rwsr-xr-x. root Dec /usr/bin/chage
-rwsr-xr-x. root Nov /usr/bin/crontab
-rwsr-xr-x. root Dec /usr/bin/gpasswd
-rwsr-xr-x. root Dec /usr/bin/newgrp
-rwsr-xr-x. root Feb /usr/bin/passwd
-rwsr-xr-x. root Sep /usr/bin/pkexec
方法二:
[root@oldboy oldboy]# find /usr/bin -type f -perm -exec ls -l {} \;
取消suid设置命令:
[root@oldboy oldboy]# find /usr/bin -type f -perm | xargs chmod u-s
[root@oldboy oldboy]# find /usr/bin -type f -perm -exec chmod u-s {} \;
如何查找系统(/usr/bin)目录中设置sgid的命令
[root@oldboy oldboy]# find /usr/bin -type f -perm | xargs ls -l
-rwxr-sr-x. nobody Nov /usr/bin/ssh-agent
-rwxr-sr-x. tty Nov /usr/bin/write
特殊权限对应数字总结:
suid 权限字符s(S),用户位的x位上设置
授权方法:chmod /bin/rm 或chmod u+s /bin/rm
sgid 权限字符s(S),用户组位的x位上设置
授权方法:chmod /bin/rm 或chmod g+s /bin/rm
粘滞位1000权限字符t(T),其他用户位的x位上设置
授权方法:chmod /tmp 或chmod o+t /tmp
如果对应位有x则字符权限表现为小写,否则表现为大写
tmp经典的粘滞位目录案例,特点是谁都有写权限,因此安全成问题。常常是木马第一手跳板地点
特殊权限总结:
)suid是什么、作用,passwd命令案例,如何设置使用rm案例
)sgid是什么、作用,文件locate案例。共享目录用户组案例
)粘滞位是什么、作用,/tmp目录案例
)以数字及字符方式更改权限,chmod命令
)更改文件用户和组,chown命令
)更改用户组,chgrp命令
)chattr更改文件属性(linux安全优化)
命令格式:
chattr - change file attributes on a Linux file system
chattr [ -RVf ] [ -v version ] [ mode ] files...
The format of a symbolic mode is +-=[acdeijstuADST].
-R参数代表递归改变目录以及目录下面的文件的属性
mode指定模式
+ 代表添加属性到已有其他属性的文件中
- 代表从已有属性文件中删除指定的属性
= 代表取消原有的属性设置成指定的属性
i 代表锁定文件使其不可变(linux安全优化常用模式)[immutable 不可变]
a 代表文件只有追加属性(append only)
演示实例:
[root@oldboy ~]# chattr +i /etc/{passwd,shadow,group,gshadow,inittab}
[root@oldboy ~]# lsattr /etc/{passwd,shadow,group,gshadow,inittab}
----i--------e- /etc/passwd
----i--------e- /etc/shadow
----i--------e- /etc/group
----i--------e- /etc/gshadow
----i--------e- /etc/inittab
[root@oldboy ~]# chattr -i /etc/{passwd,shadow,group,gshadow,inittab}
[root@oldboy ~]# lsattr /etc/{passwd,shadow,group,gshadow,inittab}
-------------e- /etc/passwd
-------------e- /etc/shadow
-------------e- /etc/group
-------------e- /etc/gshadow
-------------e- /etc/inittab
)lsattr查看文件属性
命令格式:
lsattr - list file attributes on a Linux second extended file sys-tem
lsattr [ -RVadv ] [ files... ]
参数:
-R 代表递归列出目录以及目录下面的文件的属性
-a 代表显示目录中所有文件,包含”.”与”..”隐藏文件
-d 代表只显示目录本身的属性,而不显示目录下包含的文件属性
演示实例:
[root@oldboy ~]# lsattr /etc/{passwd,shadow,group,gshadow,inittab}
-------------e- /etc/passwd
-------------e- /etc/shadow
-------------e- /etc/group
-------------e- /etc/gshadow
-------------e- /etc/inittab
4.3.6 chown改变文件所属关系
chown(change owner)
当我们要改变一个文件的属主,我们所使用的用户必须是该文件的属主而且同时是目标属组成员,或超级用户。只有超级用户才能改变文件的属主
chown语法:
chown [选项]…[所有者][:[用户组]] 文件……
模拟环境:
[root@oldboy oldboy]# ls -l test.sh
-rw-rw-rw- oldboy incahome Apr : test.sh
常用的更改方法:
chown 用户 文件或目录 <==仅仅授权用户
演示实例:
[root@oldboy oldboy]# chown oldgril test.sh
[root@oldboy oldboy]# ls -l test.sh
-rw-rw-rw- oldgril incahome Apr : test.sh
chown :组 文件或目录 <==仅仅授权组 等同于“chgrp 组 文件或目录”
演示实例:
[root@oldboy oldboy]# chown :oldboy test.sh
[root@oldboy oldboy]# ls -l test.sh
-rw-rw-rw- oldgril oldboy Apr : test.sh
chown 用户:组 文件或目录 <==表示授权用户和组
演示实例:
[root@oldboy oldboy]# chown test:test test.sh
[root@oldboy oldboy]# ls -l test.sh
-rw-rw-rw- test test Apr : test.sh
chgrp 组 文件或目录
演示实例:
[root@oldboy oldboy]# chgrp incahome test.sh
[root@oldboy oldboy]# ls -l test.sh
-rw-rw-rw- test incahome Apr : test.sh
强调:
)其中的冒号”:”可以用点号”.”替代
)要授权的用户和组名,必须是linux系统中实际存在的
5 软硬链接
5.1 链接概述
在linux系统中,链接可分为两种:一种为硬链接(Hard Link),另一种为软链接或符号链接(Symbolic Link or Soft Link);使用ln命令就是创建链接文件,在默认不带参数的情况下,执行ln命令创建的链接是硬链接
如果使用ln –s创建链接则为软链接,前面文件类型为l(字母L)的是软链接
软硬链接使用语法:
硬链接:ln 源文件 目标文件
软链接:ln –s 源文件 目标文件(目标文件事先不能存在)
5.2 硬链接
硬链接是指通过索引节点(Inode)来进行链接。在linux(ext2,ext3,ext4)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Inode index)简称Inode,即在系统中文件的编号。
在linux文件系统中,多个文件指向同一个索引节点(Inode)是正常允许的。这种情况的文件称为硬链接。提示:硬链接文件就相当于文件的另外一个入口。硬链接的作用之一是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件存储,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接)。为什么一个文件建立了硬链接就会防止数据误删呢?
因为文件系统(ext2)的原理是只要文件的索引节点(inode)还有一个以上的硬链接。只删除其中一个硬链接(即仅仅删除了该文件的链接指向)并不影响索引节点本身和其他的链接(即数据文件实体并未被删除),只有当文件的最后一个链接被删除后,此时如果有新数据要存储到硬盘上时或者系统通过类似fsck做磁盘检查的时候。被删除文件的数据块及目录的链接才会被释放,空间被新数据占用并覆盖。此时,数据就再也无法找回了。也就是说,在linux系统中,删除静态文件(没有进程调用)(目录也是文件)的条件是与之相关的所有硬链接文件均被删除
硬链接原理图:

硬链接示意图:

5.3 硬链接总结
) 具有相同inode节点号的多个文件是互为硬链接文件
) 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除
) 只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除
) 当所有的硬链接文件及源文件被删除后,再存放新的数据就会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收(养成删除及多套环境测试的好习惯)
) 硬链接文件就是文件的另一个入口(相当于超市的前后门)
) 可以通过给文件设置硬链接文件,来防止重要文件被误删
) 通过执行命令“ln 源文件 硬链接文件”,即可完成硬链接的创建
) 硬链接文件是普通文件,因此可以使用rm命令删除
) 对于静态文件(没有进程调用的文件)来讲,当对应硬链接数为0(i_link),文件就会被删除。i_link的查看方法(ls –l结果的第三列)
5.4 软链接
软链接(Soft Link)也称为符号链接(Symbolic link)。Linux里的软链接文件就类似于Windows系统中的快捷方式。Linux里的软链接文件实际上是一个特殊的文件,文件类型为l。软链接文件实际上可以理解为一个文本文件,这个文件中包含有软链接指向另一源文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体
软链接原理图:

查看软链接的value(源文件)值的方法:
readlink - print value of a symbolic link or canonical file name ##查看软链接value(源文件)
[root@oldboy ~]# ls -ld /application/apache
lrwxrwxrwx root root Mar : /application/apache -> /application/apache2.2.17
[root@oldboy ~]# readlink /application/apache
/application/apache2.2.17
[root@oldboy ~]#
软链接的创建:
执行命令“ln –s 源文件 软链接文件”,即可完成软链接的创建
误区:创建软链接源文件是需要存在的,要创建的软链接文件是不能事先存在的
5.5 软链接总结
1) 软链接类似windows系统的快捷方式(readlink查看其指向)
2) 软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体
3) 删除源文件,软链接文件依然存在,但是无法访问指向的源文件路径内容了
4) 失效的时候一般是白字红底闪烁提示soft_link_c -> a
5) 执行命令“ln –s 源文件 软链接文件”,即可完成创建(目标文件不能存在)
6) 软链接和源文件是不同类型的文件,也是不同的文件,inode也不相同
7) 软链接文件的文件类型为(l),是普通文件,可以使用rm命令删除

5.6 示例演示
文件示例(创建软硬链接)
[root@oldboy ~]# mkdir /test/oldboy -p
[root@oldboy ~]# cd /test/oldboy/
[root@oldboy oldboy]# touch oldboyfile #创建一个测试文件oldboyfile
[root@oldboy oldboy]# ln oldboyfile oldboyfile_hard_link #创建硬链接
[root@oldboy oldboy]# ln -s oldboyfile oldboyfile_soft_link #创建软链接
[root@oldboy oldboy]# ls -li
total
-rw-r--r-- root root Apr : oldboyfile
-rw-r--r-- root root Apr : oldboyfile_hard_link
lrwxrwxrwx root root Apr : oldboyfile_soft_link -> oldboyfile
[root@oldboy oldboy]# readlink oldboyfile_soft_link #查看软链接value
oldboyfile
目录示例(软硬链接)
[root@oldboy oldboy]# mkdir oldboydir #创建一个测试文件oldboydir
[root@oldboy oldboy]# ln oldboydir oldboydir_hard_link
ln: `oldboydir': hard link not allowed for directory
#为什么目录不允许创建硬链接?原因是创建目录硬链接不能够跨文件系统,如果不同的分区上面有相同的inode所以节点导致系统数据存储混乱,故不能创建硬链接(目录)
[root@oldboy oldboy]# ln -s oldboydir oldboydir_soft_link #创建软链接,目录软链接在生产环境经常用到,硬链接用的不多
[root@oldboy oldboy]# ls -litr
total
-rw-r--r-- root root Apr : oldboyfile_hard_link
-rw-r--r-- root root Apr : oldboyfile
lrwxrwxrwx root root Apr : oldboyfile_soft_link -> oldboyfile
drwxr-xr-x root root Apr : oldboydir
lrwxrwxrwx root root Apr : oldboydir_soft_link -> oldboydir
删除实例(软硬链接)
[root@oldboy oldboy]# echo "this is oldboyfile" >> oldboyfile #往创建的测试文件源文件
[root@oldboy oldboy]# cat oldboyfile
this is oldboyfile
[root@oldboy oldboy]# cat oldboyfile_hard_link
this is oldboyfile
[root@oldboy oldboy]# cat oldboyfile_soft_link
this is oldboyfile
[root@oldboy oldboy]#
结论:往源文件oldboyfile里写入内容后,它的软硬链接文件同样都有相同的内容
通过以上测试,我们可以得出以下几个结论:
- 删除软链接文件,对源文件和硬链接文件无任何影响
- 删除硬链接文件,对源文件和软链接文件无任何影响
- 删除源文件,对硬链接文件没有影响,但是会导致软链接文件失效,白字红底闪烁
- 同时删除源文件和硬链接文件,整个文件会真正的被删除
- 源文件和硬链接文件具有相同的索引节点号(inode),可以认为是同一个文件或一个文件的多个入口
- 源文件和软链接文件索引节点号(inode)不同,是不同的文件,软链接相当于源文件的快捷方式,包含源文件的位置指向
5.7 目录链接总结
) 对于目录,是不可以创建硬链接,但可以创建软链接
) 对于目录的软链接是生产环境运维中常用的技巧
) 目录的硬链接是不能跨文件系统的(从硬链接的原理方面理解)
) 每个目录下面都有一个硬链接“.”号和对应上级目录的硬链接“..”
) 在父目录里创建一个子目录,父目录的链接数增加1(子目录里都有“..”来指向父目录)但是再在父目录里创建文件,父目录的链接数是不会增加了
请问下面的目录(oldboy)的链接数为什么为3?
[root@oldboy oldboy]# ls -lid ../oldboy/ -a
drwxr-xr-x root root 4月 : ../oldboy/
原因如下:(oldboy目录本身,oldboy目录下的“.”,oldboy目录下test子目录的“..”)
[root@oldboy oldboy]# ls -lid ../oldboy/
drwxr-xr-x root root 4月 : ../oldboy/
[root@oldboy oldboy]# ls -lid ../oldboy/.
drwxr-xr-x root root 4月 : ../oldboy/.
[root@oldboy oldboy]# ls -lid ../oldboy/test/..
drwxr-xr-x root root 4月 : ../oldboy/test/..
[root@oldboy oldboy]#
6 Linux系统用户角色和组
6.1 用户角色划分介绍
首先,我们先说明Linux系统是一个多用户、多任务的操作系统。在linux系统中,由于角色的不同,权限和所完成的任务也是不同的;对于linux系统来说,用户的角色是通过UID和GID识别的:特别是UID,在linux系统运维工作中,一个UID是唯一标识一个系统的用户账号(相当于我们的身份证),linux系统仅能够识别的是UID和GID这样的数字。
用户的UID就相当于我们的身份证一样,用户名就相当于我们的名字。
UID(User Identify)中文用户ID,相当于各位的身份证,在系统中是唯一的
GID(Group Identify)中文用户组ID,相当于各位的家庭或者学校ID
Linux系统中用户角色划分为:超级用户(root)、普通用户(自建的用户,UID在500之后,如日常ssh远程登录管理linux操作系统)、虚拟用户(供系统服务进程调用的,如ngnix、apache、ntp等)
有关UID限制说明类比表
|
UID整数范围 |
UID用户角色 |
具备UID用户特性 |
|
0 |
超级用户(root皇帝) |
当用户的UID为0时,表示这个账号为超级管理员账号,如果要增加一个系统管理员账号的话,只需将该账号的UID改成0即可。生产环境不建议这么做,使用sudo替代即可。 |
|
1-499 |
虚拟用户(傀儡) |
这个范围是保留给系统使用的UID,之所以这样划分,是为了防止人为简历账户的UID和系统的UID之间冲突。并没有其他特殊的含义。在/etc/passwd文件中的虚拟用户的UID都会在这个范围内。除了0之外,所有的UID在使用上没有任何区别。安装系统后默认就会存在,且默认情况大多数不能登录系统shell为/sbin/nologin 满足条件:每个文件和进程,都需要对应一个用户和用户组 |
|
500-65535 |
普通用户(百姓) |
普通账户UID,当使用useradd gandalf建立账户时,默认情况下UID就是从500开始的。当然,我们也可以指定UID来创建或修改账户的UID |
6.2 用户和组的对应关系
用户和组的对应关系有:一对一、一对多、多对一和多对多,方便理解,我们通过图形的方式来展示这种对应关系

文字说明:
) 一对一:即一个用户可以存在一个组中,也可以是组中唯一的成员。如:root
) 一对多:即一个用户可以存在于多个用户组中。比如,上图中普通用户oldboy可以是sa组成员,也可以是java用户组成员,还可以是tech用户组成员,这里的oldboy用户具有sa、java、tech多个组的共同权限
) 多对一:即多个用户可以存在于一个组中,这些用户具有和组相同的权限
) 多对多:即多个用户可以存在多个组中,并且几个用户可以归属相同的组;其实多对多的关系是前面三条的扩展
6.3 用户和用户组涉及配置文件说明
新用户创建涉及到四个配置文件包括:/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,每创建一个新用户都会向这四个配置文件中追加一行用户内容信息
用户/etc/passwd配置文件7列说明:
|
root |
:x |
:0 |
:0 |
:root |
:/root |
:/bin/bash |
|
账户名称 |
:账户密码 |
:账户UID |
:账号组GID |
:用户说明 |
:用户家目录 |
:shell解释器 |
用户密码/etc/shadow配置文件说明:

小结论
useradd创建用户会更改/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow
passwd设置用户密码会更改/etc/shadow
用户组/etc/group配置文件说明
|
字段名称 |
注释说明 |
|
用户组名 |
该组的名称 |
|
用户组密码 |
通常不需要设置该密码,由于安全原因,该密码被记录在/etc/gshadow中,因此显示为“x”,类似用户密码被记录在/etc/shadow |
|
GID |
用户组ID |
|
用户组成员 |
加入这个组的所有用户账号 |
|
[root@oldboy ~]# grep "wheel" /etc/group wheel:x:10:gandalf |
|
Linux系统文件和目录的属性及权限的更多相关文章
- Linux文件和目录的属性及权限
Linux文件和目录的属性及权限讲解 文字解释: 第一列:inode索引节点 第二列:文件类型及权限 第三列:硬链接个数 第四列:文件或目录所属的用户(属主) 第五列:文件或目录所属的用户所归属的组( ...
- Linux文件和目录的属性及权限总结
本文讲述的是文件或目录的属性及权限,比如索引节点inode.文件类型.文件权限及属主:还对setuid.setgid及粘贴位进行了相关的讲解.其中,对ln.chmod.chown.chgrp.umas ...
- Linux 文件和目录的属性及权限
一.Linux中的文件 1.1文件属性概述 Linux里一切皆文件! Linux系统中的文件或目录的属性主要包括;索引节点(inode).文件类型.权限属性.链接数.所归属的用户组.最近修改时间等内容 ...
- linux下为目录和文件设置权限
摘:linux下为目录和文件设置权限 分类: Linux2012-05-09 03:18 7456人阅读 评论(1) 收藏 举报 linuxwordpressweb数据库serverfile linu ...
- Linux系统文件和目录管理
Linux系统文件和目录管理 相关命令的解析 1.pwd:显示用户当前的工作目录 2.ls: -a:显示所有文件,包括隐藏文件 -l:显示文件的详细信息 3.设备文件统一存放在/dev 设备文件 块设 ...
- Linux学习之二——档案与目录的属性和权限
一.属性和权限的基本概念 Linux一般将档案可存取的身份分为三个类别,分别是 owner/group/others,这三种身份各有 read/write/execute 等权限. 所有的系统上的账号 ...
- Linux系统文件与目录权限管理
Linux文件目录权限管理 一.Linux文件属性及权限 1.Linux文件及目录权限及属性说明 (1)权限及属性说明 (2)文件权限说明 三种权限说明:r 读 read w 写 write x ...
- Linux系统文件与目录管理(1)
文件与目录的操作 在Linux系统的文件与目录的管理上,不外乎『显示属性』.『拷贝』.『删除文件』.『移动文件或目录』.『重命名』等常用操作,由于文件与目录的管理在 Linux当中是很重要的,尤其是每 ...
- (转)Linux 文件和目录的属性
linux 文件属性与权限 原文:https://www.cnblogs.com/kzloser/articles/2673790.html https://www.cnblogs.com/danh/ ...
随机推荐
- python作业-网络编程
1.什么是C/S架构? 答:C指的是client(客户端软件),S指的是Server(服务端软件) 2.互联网协议是什么?分别介绍五层协议中每一层的功能? 答:互联网的核心就是由一堆协议组成.如果把计 ...
- Django——model进阶(待完成)
https://www.cnblogs.com/yuanchenqi/articles/7570003.html 一.QuerySet 1.可切片 使用Python 的切片语法来限制查询集记录的数目 ...
- 洛谷P4632 [APIO2018] New Home 新家(动态开节点线段树 二分答案 扫描线 set)
题意 题目链接 Sol 这题没有想象中的那么难,但也绝对不简单. 首先把所有的询问离线,按照出现的顺序.维护时间轴来处理每个询问 对于每个询问\((x_i, y_i)\),可以二分答案\(mid\). ...
- windows环境下wampserver配置https
因为公司业务主要是在微信上进行开展的,所以作为程序员的我们每天的开发任务就都是在与微信打交道,这个时候我们就需要在本地配置端口映射到外网,方便我们在微信客户端进行调试. 最近某种需要,所以需要配置 h ...
- GitHub网页端和客户端操作
参见GitHub上的repository中的moreLove.tata.tata2 moreLove 在网页版GitHub上创建的空项目然后填充的tata 在windows客户端创建的空项目然后填充的 ...
- 【PIC单片机】MPLAB X IDE快速入门指南
引言:近期由于项目实践需要,开始动手学习相关硬件知识.从PIC单片机入手. 单片机学习核心要点:查数据手册 配置寄存器 一.基于MPLAB X IDE配置位设置 MPLAB X IDE和MPLAB I ...
- django模板templates详解(二)
1 总体结构 Django是MTV结构,即:Model, Template, View Model:定义数据的存储格式,并且提供了数据库访问的API. View:定义那些数据被显示,是业务逻辑处理 ...
- TinkPHP去重统计查询
当统计一个有重复的字段可以用这个方法 $count = $model->where($map)->count('distinct(id)'); 转自 http://www.thinkphp ...
- ABAP的语法高亮是如何在浏览器里显示的
这篇文章的原文我发表在SAP官方社区上:https://blogs.sap.com/2018/03/09/how-abap-syntax-highlight-is-implemented-in-web ...
- IOS 播放视频(MPMoviePlayerController、MPMoviePlayerViewController)
● iOS提供了叫 做MPMoviePlayerController.MPMoviePlayerViewController的两个 类,可以用来轻松播放视频 ➢ YouTobe就是用MPMoviePl ...