1 Linux中的文件
1.1 文件属性概述
Linux系统中的文件或目录的属性主要包括:索引节点(inode)、文件类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容。
[root@oldboy ~]# ls -lhi
total 36K
390149 -rw-r--r--. 1 root root 22K Nov 16 11:33 install.log
390150 -rw-r--r--. 1 root root 5.8K Nov 16 11:30 install.log.syslog
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
ls -lhi共显示10列内容,分别介绍所指内容:
2 索引节点inode
inode 中文意思是索引节点(index node)。在每个Linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘、U盘……)被格式化为ext4(Centos6.7)文件系统,一般生成两部分:第一部分是Inode(很多个),第二部分是Block(很多个)。
Block 是用来存储实际数据用的,例如:照片、视频等普通文件数据。
而Inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode属性信息包括不限于问价大小、属主(用户)、归属的用户组、文件权限、文件类型、修改时间,还包含指向文件实体的指针的功能(inode节点–block的对应关系)等,但是,inode里面唯独不包含文件名,文件名一般在上级目录的block里。
Inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体。文件,inode,block 之间的关系见下图:
#stat 显示文件和文件系统状态(查看文件属性)
[root@oldboy test]# stat file1.txt
File: `file1.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 140162 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-15 07:31:09.754991273 -0500
Modify: 2017-12-15 07:31:09.754991273 -0500
Change: 2017-12-15 07:31:09.754991273 -0500
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
因为inode 要存放文件的属性信息,所以每个inode 本身是有大小的,Centos5系列inode的默认大小是128 字节,而Centos6系列inode 的默认大小是256 字节,inode的大小在分区被格式化创建文件系统之后定下来,被格式化之后就无法更改inode的大小了,格式化前可以通过参数指定inode大小,但是一般企业工作环境没这个需求。
dumpe2fs /dev/sda*:可以查看指定分区的
#用grep加 -i 选项不区分大小写检索
[root@oldboy ~]# dumpe2fs /dev/sda1 | grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
[root@oldboy ~]# dumpe2fs /dev/sda3 | grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 256
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
查看文件系统inode总量以及剩余量
[root@oldboy ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 593344 55756 537588 10% /
tmpfs 125514 1 125513 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
文件系统 inode节点数 已使用数 剩余数 已使用百分比 挂载点
查看磁盘的使用量
[root@oldboy ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 35M 146M 19% /boot
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
磁盘空间是否满了,是由两项参数决定的:第一个是inode是否满了,第二个block是否满了,任何一项满了,磁盘就不能再放东西了。
2.1 有关inode的小结
1) 磁盘被分区并格式化为ext4 文件系统后会生成一定数量的inode 和block。
2) inode 称为索引节点,它的作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)。
3) ext3/ext4 文件系统的block 存放的是文件的实际内容。
4) inode 是磁盘上的一块存储空间,Centos6 非启动分区inode默认大小256 字节,Centos5 是128 字节。
5) inode 的表现形式是一串数字,不同的文件对应的inode(一串数字) 在文件系统里是唯一的。
6)inode 节点号相同的文件,互为硬连接文件,可以认为是一个文件的不同入口。
7) ext3/ext4文件系统下,一个文件在创建后至少要占用一个indoe和一个block。
8) ext3/ext4文件系统下,正常情况下一个文件占用且只能占用一个indoe(人和身份证)
9) block是用来存储实际数据的,它的大小一般有1k,2k,3k几种。其中引导分区等为1k,其他普通分区多为4k(Centos6)
10) 如果一个文件很大(4G),可能站多个block;如果文件很小(0.01k),至少占一个block,并且这个block的剩余空间浪费了,即无法再存储其它数据
11) inode大小和总量查看
[root@oldboy ~]# dumpe2fs /dev/sda3|egrep -i “block size|Inode size”
dumpe2fs 1.41.12 (17-May-2010)
Block size: 4096
Inode size: 256
[root@oldboy ~]# dumpe2fs /dev/sda3|egrep -i “block count|Inode count”
dumpe2fs 1.41.12 (17-May-2010)
Inode count: 593344
Block count: 2373376
Reserved block count: 118668
默认一般情况下Block数量大于inode数量
12) 查看inode的总量和使用命令df -i
13) 查看文件的inode:
ls -i or stat filename
14) 如何生成及制定inode大小
格式化命令:mkfs.ext4 -b 2048 -I 256 /dev/sdb
2.2 有关Block的知识小结
1) 磁盘读取数据是按blbck 为单位读取的。
2) 一个文件可能占用多个block。但是每读取一个block就会消耗一次磁盘I/O。
3) 如果要提升磁盘IO 性能,那么尤要尽可能一次性读取数据尽量的多。
4) 一个block 只能存放一个文件的内容,无论内容有多小。如果block 4K,那存放1K 的文件,剩余3K就浪费了。
5) Block 并非越大越好。Block 太大对于小文件存放就会浪费磁盘空间,例如:1000K的文件,BLOCK 大小为4K,占用250 个BLOCK;若BLOCK 为IK,要占1000个BLOCK。访问效率谁更高? 消耗IO 分别为250 次和1000 次。
6) 根据业务需求,确定默认的block 大小,如果是大文件( 大于16K)一般设置block 大一点,小文件(小于1K)一般设置block小一点。
7) BLOCK 太大,例如4K,文件都是0.1K的,大量浪费磁盘空间,但是访问性能高。
8) BLOCK 太小,例如1K,文件都是1000K,消耗大量磁盘IO。
8) BLOCK 的设置也是格式化分区的对候,mkfs.ext4-b 2048-I 256 /dev/sdb
9) 文件较大时,block 设置大一些会提升磁盘访问效率。
10) 企业里的文件都会比较大(一般都会大于4K),block设置大一些会提升磁盘访问效率。
11) ext3/ext4文件系统(Centos5和6),一般都设置为4K。
2.3 可以用inode删除文件
[root@oldboy test]# ll -i file1.txt
140162 -rw-r--r--. 1 root root 0 Dec 15 07:31 file1.txt
[root@oldboy test]# rm `find . -inum 140162`
[root@oldboy test]# find . -inum 140162 -exec rm {} \;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
文件删除备份ext3grep
2.4 企业面试题1
一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写都少个?
假设B 4K 写入1k文件的数量基本上就是block数量
假设 inode 数量够多的时候,就是BLOCK的数量。浪费3/4的容量。
假设 inode 数量小于block的数量,就是inode的数量。浪费3/4的容量。
假设B 4K 写入1M的文件
总block数量/250block=存放1M的数量
硬盘空间多大,基本上就可以写入100/1M数量,一般情况inode和block都是做够。
正确答案:
1、默认分区常规情况下,对大文件来讲inode是够的。而block数量消耗的会更快,BLOCK为4K的情况,1M的文件不会有磁盘浪费情况,所以文件数量大概为100/1=100 个。
2、对于小文件0.1k,inode会消耗的更快。默认分区的时候block数量是大于inode数量的。每个小文件都会占用一个inode和一个block.所以最终文件的数量:
Inode会先消耗完,文件总量是inode的数量。
a.上面的考试题考察的是文件系统inode和block的知识。
b.Inode是存放文件属性信息的(也包含指向文件实体的指针).默认大小128byte(c58),256byte(c64).
c.Block 是存放文件实际内容的,默认大小1K (boot)或4K(非系统分区默认给4K),一般企业多用4K 的 block.
d.一个文件至少要占用一个inode及一个block。
e.默认较大分区常规企业真实场景情况下,inode数量是足够的。而block数量消耗的会更快。
2.5 企业面试题2
如果向磁盘写入数据提示如下错误:No space left on device,通过df -h查看磁盘空间,发现没满,请问可能是什么原因?企业场景什么情况下会导致这个问题发生呢?
解答:可能是inode数量倍消耗尽了。发生的原因就是小文件特别(如/var/spool/clientmquene这里很容易被大量小文件占满导致No space left on device的错误。而这个目录只有安装了sendmail服务才会有,是sendmail邮件的临时队列。centos5.8默认会安装sendmail服务,而centos6.6默认没有sendmail服务,但是有postfix。)
3 Linux文件类型及扩展名
3.1 文件类型介绍
Linux系统不同于windows系统,两者之间的文件类型和文件扩展名也有很大的差异,两者之间所代表的含义不同。
例如:
windows下文件扩展名:.jpg、.txt、.doc、.pdf、.gif、.exe、.bat等等。
Linux下的文件类型却和扩展名没什么关系。
3.2 文件类型
在Linux系统中,可以说是一切(包括目录、普通文件)皆为文件。文件类型包含有普通文件(-)、目录(d)、字符设备文件(c)、块设备文件(b)、符号链接文件(l)、管道文件(p)等等。
1 .tar、.tar.gz、.tgz、.zip、.tar.bz
表示压缩文件,创建命令一般为tar,gzip,unzip等2 .sh 表示shell 脚本文件,通过shell 语言开发的程序。
3 .pl 表示perl 语言文件,通过perl 语言开发的程序。
4 .py 表示python 语言文件,通过python 语言开发的程序。
5 .html、.htm、.php、.jsp、.do 表示网页语言的文件。
6 .conf 表示系统的配置文件。
7 .rpm 表示rpm安装包文件。
可用ls -l 来查看。
[root@oldboy test]# ls -l
total 4
crw-rw-rw-. 1 root root 1, 5 Nov 21 09:53 character
drwxr-xr-x. 2 root root 4096 Dec 15 07:31 dir
-rw-r--r--. 1 root root 0 Dec 15 16:34 file
lrwxrwxrwx. 1 root root 4 Dec 15 16:34 link -> file
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
3.2.1 普通文件(-)
创建: touch、cp、tar、echo、cat、>、>>等工具。
删除: 可用rm命令。
按照内容,有大致可分为三种
1)、纯文本(ascii):文件内容可以直接督导数据,例如:字母、数字、特殊字符串等。可以用cat命令读文件,比如配置文件几乎都是这种类型的。
2)、二进制文件(binary):Linux中的命令程序都是属于这种格式。例如cat命令就是一个二进制文件。
3)、数据格式文件(data)
有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件。
例如:linux 在用户登录时,都会将登录的数据记录在/var/1og/wtmp(last命令的数据库文件)那个文件内,该文件是一个数据文件。通过last命令读出来。cat命令会读出乱码。因为他属于一种特殊格式的文件。lastlog(/var/log/lastlog)
PS:通过file命令可以查看文件类型。
通过file命令可以查看文件类型
[root@oldboy test]# file file
file: ASCII text
[root@oldboy test]# file /var/log/lastlog
/var/log/lastlog: data
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3.2.2 目录文件(directory)
创建: mkdir、cp
删除: rmdir、rm -r
ls -F或ls -p来区分目录
[root@oldboy test]# ls -F
character dir/ file link@
[root@oldboy test]# ls -p
character dir/ file link
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3.2.3 字符设备或块设备文件(character/block)
进入/dev目录下查看一个字符文件
[root@oldboy dev]# ll tty
crw-rw-rw-. 1 root tty 5, 0 Nov 21 09:53 tty
- 1
- 2
- 3
- 4
进入/dev目录下查看一个块设备文件
[root@oldboy dev]# find /dev/ -type b | xargs ls -l
brw-rw----. 1 root disk 8, 1 Nov 22 06:31 sda1
brw-rw----. 1 root disk 8, 2 Nov 21 09:53 sda2
- 1
- 2
- 3
- 4
- 5
- 6
字符设备和块设备一般都在/dev/目录下,块设备就是存放数据的,如/dev/sda等创建字符文件和块设备文件(不重要,了解即可)
[root@oldboy test]# mknod oldboy c 5 1
[root@oldboy test]# mknod oldboy1 b 5 1
[root@oldboy test]# ll oldboy *
crw-r--r--. 1 root root 5, 1 Dec 15 17:46 oldboy
brw-r--r--. 1 root root 5, 1 Dec 15 17:46 oldboy1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3.2.4 套接字文件(socket)
套接字文件也是一类特殊的文件,这类文件通常用在网络之间进行数据连接,如:我们可以启动一个城西来监听客户端的请求,客户端可以通过套接字来进行数据通信。简单了解即可。
查找一个套接字文件
[root@oldboy ~]# find / -type s | xargs ls -l
srw-rw-rw-. 1 root root 0 Nov 21 09:53 /dev/log
- 1
- 2
- 3
- 4
3.2.5 符号链接文件(link)
符号链接文件也被称之为软连接文件
查找链接文件
[root@oldboy test]# ll link
lrwxrwxrwx. 1 root root 4 Dec 15 16:34 link -> file
#/etc/rc.d/init.d和/etc/init.d这两个文件是一个文件
[root@oldboy test]# ll /etc/rc.d/init.d /etc/init.d -d
lrwxrwxrwx. 1 root root 11 Nov 16 11:27 /etc/init.d -> rc.d/init.d
drwxr-xr-x. 2 root root 4096 Dec 15 06:31 /etc/rc.d/init.d
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
可用ln -s创建软连接文件
[root@oldboy test]# ln -s file link
- 1
- 2
3.2.6 管道文件(FIFO.pipo)
FIFO也是一个特殊的文件类型,主要是解决多个程序同时访问一个文件所造成的错误,第一个字符为p。FIFO是fifo–>first-in first-out的缩写。
[root@oldboy ~]# find / -type p | xargs ls -l
prw--w--w-. 1 postfix postfix 0 Dec 15 17:59 /var/spool/postfix/public/pickup
prw--w--w-. 1 postfix postfix 0 Dec 15 17:57 /var/spool/postfix/public/qmgr
- 1
- 2
- 3
- 4
- 5
- 6
4 Linux文件的权限
r read(读) 4
w write (写) 2
x execute (执行) 1
- 没有权限 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
这9个,三位一组,第一组为属主的权限,用户权限位、第二组为属组权限位、第三组为其他用户的权限位。
5 Linux软硬链接知识
5.1 链接的概念
在Linux系统中,链接可分为两种:一种为硬链接(HardLink),另一种为软连接或符号链接(Symbolic Link or Soft Link)。ln直接创建的为硬链接,加-s参数创建的链接为软连接。
格式:
**硬链接:**ln 源文件 目标文件
**软连接:l**n -s 源文件 目标文件(目标文件不能事先存在)
5.2 硬链接
硬链接是指通过索引节点(Inode)来进行链接。在Linux文件系统中,多个文件名指向同一个索引节点(Inode)是正常且允许的这种情况的文件就称为硬链接。提示:硬链接文件就相当于文件的另外一个入口。硬链接的作用之一是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件存储,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接)。为什么一个文件建立了硬链接就会防止数据误删呢?
因为文件系统(ext2) 的原理是,只要文件的索引节点(Inode Index)还有一个以上的硬链接。只删除其中一个硬链接(即仅仅删除了该文件的链接指向)并不影响索引节点本身和其它的链接(即数据文件实体并未被删除),只有当文件的最后一个链接被删除后,此时如果有新数据要存储到硬盘上时或者系统通过类似fsck做磁盘检查的时候。被删除文件的数据块及目录的链接才会被释放,空间被新数据占用并覆盖。此时,数据就再也无法找回了。也就是说,在linux系统中,删除静态文件(没有进程调用) (目录也是文件)的条件是与之相关的所有硬链接文件均被删除。
[root@oldboy test]# echo 1 > a
[root@oldboy test]# cat a
1
[root@oldboy test]# ll a
-rw-r--r--. 1 root root 2 Dec 15 19:25 a
[root@oldboy test]# ln a b
[root@oldboy test]# ll a
-rw-r--r--. 2 root root 2 Dec 15 19:25 a
[root@oldboy test]# ll -i a b
140170 -rw-r--r--. 2 root root 2 Dec 15 19:25 a
140170 -rw-r--r--. 2 root root 2 Dec 15 19:25 b
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
5.2.1 硬链接知识小结
1、具有相同inode 节点号的多个文件是互为硬链接文件。
2、删除硬链接文件或者删除源文件任意之一,文件实体并未被删除。
3、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
4、当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收。(养成删除及多套环境测试的好习惯)。
5、硬链接文件就是文件的另一个入口(相当于超市的前门、后门一样)。
6、可以通过给文件设置硬链接文件,来防止重要文件被误删。
7、通过执行命令“1n 源文件 硬链接文件”,即可完成创建硬链接。
8、硬链接文件可以用rm命令删除。
9、对于静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为0(i_link),文件就被删除。i_link的查看方法(1s -1结果的第三列就是)
5.3 软链接
软链接(Soft Link)也称为符号链接(Symbolic Link)。Linux里的软链接文件类似于Windows系统里的快捷方式。Linux里的软链接文件实际上是一个特殊的文件,文件类型是 l。软链接文件实际上可以理解为一个文本文件,这个文件中包含有软链接指向另一源文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。
软链接图解
查看软链接的value:
[root@oldboy test]# readlink link
file
#可以看到link这个软链接文件是指向file这个文件的
- 1
- 2
- 3
- 4
- 5
- 6
创建软链接
#加个 -s 参数即可
[root@oldboy test]# ln -s file link
- 1
- 2
- 3
- 4
5.3.1 软链接知识小结
1、软链接类似Windows的快捷方式(可以通过readlink查看其指向)
2、软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
3、删除源文件,软连接文件依然存在,但是无法访问指向的源文件路径内容了。
4、软链接失效的时候一般是白色红底闪烁提示。
5、执行命令“ln -s 源文件 软链接文件”,即可完成创建软链接(目标不能存在)。
6、软链接和源文件是不同类型的文件,也是不同的文件。inode号也不相同。
7、软链接文件的文件类型为(l),可以用rm命令删除。
5.4 有关文件链接的小结
1、删除软链接文件对源文件及硬链接文件无任何影响。
2、删除硬链接文件对源文件及软连接文件无任何影响。
3、删除源文件,对应链接文件没有影响,但是会导致软连接文件失效,白字红底闪烁。
4、同时删除源文件和硬链接文件,整个文件会真正的被删除。
5、很多硬件设备中的快照功能,就是利用了硬链接的原理。
6、源文件和硬链接文件具有相同的索引节点,可以认为是同一文件或一个文件的多个入口。
7、源文件和硬链接文件索引节点号不同,是不同的文件,软链接相当于源文件的快捷方式,含有源文件的位置指向。
5.5 有关目录链接的小结
1、对于目录,不可以创建硬链接,但是可以创建软链接
其系统默认在目录下创建“.”硬链接,但是用户不能用ln命令给目录创建硬链接
2、对于目录的软链接是生产场景中常用的技巧,即把一个很深层次的目录给做一个软链接,就相当于整一个快捷方式。
3、目录的硬链接不能跨文件系统(从硬链接原理理解)
4、每个目录下面都有一个硬链接“.”号,和对应上级目录的硬链接“..”。
5、在父目录里创建一个子目录,父目录的链接数增加1(每个子目录里都有..来指向父目录)。但是在父目录里创建文件,父目录的链接数不会增加。
为什么说“.”代表当前目录,因为“.”和oldboy的inode号相同
[root@oldboy test]# ll -a oldboy/. oldboy/ -ldi
140162 drwxr-xr-x. 2 root root 4096 Dec 16 00:14 oldboy/
140162 drwxr-xr-x. 2 root root 4096 Dec 16 00:14 oldboy/.
- 1
- 2
- 3
- 4
- 5
- 6
为什么说“..”代表上一层目录,因为“../test”和oldboy/..的inode号相同
[root@oldboy test]# ll -a oldboy/.. ../test/ -ldi
140161 drwxr-xr-x. 3 root root 4096 Dec 16 00:14 oldboy/..
140161 drwxr-xr-x. 3 root root 4096 Dec 16 00:14 ../test/
- 1
- 2
- 3
- 4
- 5
- 6
#为什么上面硬链接数为3?
[root@oldboy test]# ll -a oldboy/.. ../test/ ../test/. -ldi
140161 drwxr-xr-x. 3 root root 4096 Dec 16 00:14 oldboy/..
140161 drwxr-xr-x. 3 root root 4096 Dec 16 00:14 ../test/
140161 drwxr-xr-x. 3 root root 4096 Dec 16 00:14 ../test/.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
5.6 描述linux下软链接和硬链接的区别
1、默认不带参数的情况下,ln命令创建的是硬链接,带 -s
参数的ln命令创建的是软链接。2、硬链接文件与源文件的inode节点号相同,而软连接文件的inode节点号与源文件不同。
3、ln命令不能目录创建硬链接,但是可以创建软链接,对目录的软链接会经常被用到。
4、删除软链接文件,对源文件及硬链接文件无任何影响。
5、删除文件的硬链接文件,对源文件及软链接文件无任何影响
6、删除链接文件的源文件对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)
7、同时删除源文件及其硬链接文件,整个文件才会被真正的删除
8、很多硬件设备中的快照功能,使用的就类似硬链接的原理
9、软链接可以跨文件系统,硬链接不可以跨文件系统
6 Linux下文件删除的原理
linux的文件名是存在父目录的bolck里面,并指向这个文件的inode节点,这个文件的inode节点再标记指向存放这个文件的bolck的数据块。我们删除一个文件,实际上并不清除inode 节点和block
的数据。只是在这个文件的父目录里面的bolck中,删除这个文件的名字,从而使这个文件名消失,并且无法指向这个文件的inode节点,当没有文件名指向这个inode 节点的时候,会同时释放inode节点和存放这个文件的数据块,并更新inode MAP和block MAP今后让这些位置可以用于放置其他文件数据。
删除原理图:
说明:以上图形i_link=2和i_count=1
i_link(硬链接数量)为0,文件就被删除。。
i_count(进程引用计数)为0,文件就被删除。
文件删除的条件i_link=0并且i_count=0
企业案例1:Web服务器磁盘满故障深入解析
企业案例2:磁盘满的另外的故障(inode满)
小文件:sendmail产生的日志文件,很小
7 Linux文件属性之用户和组
Linux/Unix是一个多用户、多任务的操作系统。
7.1 Linux系统中用户角色划分
在linux系统中用户是分角色的,在Linux系统中,由于角色不同,权限和所完成的任务也不同;
值得注意的是,对于linux系统来说,用户的角色是通过UD和GID识别的;特别是UID,在linux系统运维工作中,一个UID是唯一标识一个系统用户的帐号(相当于我们的身份证)。用户系统帐号的名称(如oldboy)其实给人(管理员)看的,linux系统能够识别的仅仅是UID和GID这样的数字。用户的UID就相当于我们的身份证一样,用户名就相当于我们的名字。UID(User Identify) 中文:用户ID,相当于我们的身份证,在系统里是唯一的
GID(Group Identity)中文:组ID,相当于我们的家庭或我们学校的ID。
用户分为三类:
(1)超级用户:
默认是root用户,其UID和GID均为0.root用户在每台unix/Linux操作系统重都是唯一且真是存在的,通过它可以登录系统,可以操作系统中任何文件和命令,拥有最高的管理权限。
在生产环境中,一般会禁止root账号通过ssh远程连接服务器(保护好皇帝),当然,也会更改默认的ssh端口(保护好皇宫),以加强系统安全。
企业工作中:没有特殊需求,应尽量在普通用户下操作任务,而不是root。
在Linux系统中,uid为0的用户就是超级用户,但是通常不这么做,二十sudo管理提权,可以细到每个命令权限分配。
Root比喻皇帝。Root家目录为皇宫
(2)普通用户
这类用户一般是由具备系统管理员rpot的权限的运维或系统管理人员添加的。例如:oldboy
这类用户可以登录系统,但仅具备操作自己家目录中的文件及目录的权限,除此之外,还可以进入、或浏览相关目录(/etc,/var/log),但是无法创建、修改和删除;普通用户: 比喻皇帝的臣民,干坏事时,国家有法律管束你。为普通用户授权(sudo),封官。布衣也可以提权。
su - root,角色切换,农民起义,推翻皇帝,自己当皇帝。
sudo ls 授权、风管,尚方宝剑。可以为皇帝办事,有一定权限,但还是自己。
(3)虚拟用户
与真实普通用户区分开来,这类用户最大的特点是安装系统后默认就会存在,且默认情况大多数不能登录系统,但是,他们是系统正常运行不可缺少的,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如:系统默认的bin、adm、nobody、mail用户等。由于服务器业务角色的不同,有部分用不到的系统服务被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务对应的虚拟用户也是可以处理掉的(删除或注释)
虚拟用户角色傀儡:
Linux安全优化
1、安装系统后可以删除用不到的虚拟用户,但最好不删除而是注释掉,万一出问题可以恢复过来。
2、我们自己部署服务的时候,也会创建虚拟用户,满足服务的要求!例如:apache、nginx、mysql、nfs、rsync、nagios、zabbix、redis。
7.2 Linux系统中不同用户角色对应的UID说明
超级用户: 0
虚拟用户: 1-499
普通用户: 500-65535
7.3 用户和组的配置文件
Linux系统下的账户文件主要有/etc/passwd、/etc/group、/etc/shadow、/etc/gshadow四个文件。
/etc/passwd #->用户的配置文件
/etc/shadow #->用户影子口令文件
密码文件/etc/passwd:
字段解释:
shell解释器:
[root@oldboy ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
影子口令文件/etc/shadow
由于passwd文件必须要被所有的用户读,所以会带来安全隐患。而shadow文件就是为了解决这个安全隐患而增加的。看一下这个文件的权限:
[root@oldboy ~]# ls -l /etc/shadow
----------. 1 root root 721 Dec 16 01:36 /etc/shadow
这样是很安全的。
- 1
- 2
- 3
- 4
- 5
- 6
shadow字段说明:
和组相关的配置文件:
/etc/group
/etc/gshadow
- 1
- 2
- 3
- 4
用id来查看用户的uid和gid等信息
[root@oldboy ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@oldboy ~]# useradd rsq
[root@oldboy ~]# id rsq
uid=500(rsq) gid=500(rsq) groups=500(rsq)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
8 Linux时间戳
ls -lhi 的7、8、9是时间(默认是修改时间)
modify修改 -mtime(修改文件内容的时候)
change改变时间 -ctime(属性改变)
access访问时间 -atime(访问文件内容的时候)
#一般若改变文件内容的时候modify和change都会发生改变,一般改变文件内容,文件的大小就会发生改变,即属性发生改变。
规范时间的参数 –time-style=long-iso
[root@oldboy test]# ll
total 4
drwxr-xr-x. 2 root root 4096 Dec 16 00:14 oldboy
[root@oldboy test]# ll --time-style=long-iso
total 4
drwxr-xr-x. 2 root root 4096 2017-12-16 00:14 oldboy
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
#显示的更全
[root@oldboy test]# ll --time-style=full
total 4
drwxr-xr-x. 2 root root 4096 2017-12-16 00:14:58.405967561 -0500 oldboy
- 1
- 2
- 3
- 4
- 5
- 6
显示文件的各种时间戳
[root@oldboy oldboy]# stat oldboyfile
File: `oldboyfile'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 140163 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-15 23:01:22.281943883 -0500
Modify: 2017-12-15 23:01:22.281943883 -0500
Change: 2017-12-15 23:01:35.873966214 -0500
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
简单的测试各种时间戳改变
[root@oldboy oldboy]# cat w
123
[root@oldboy oldboy]# stat w
File: `w'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 140165 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-16 07:54:39.700956755 -0500
Modify: 2017-12-16 00:14:40.480969366 -0500
Change: 2017-12-16 06:51:03.002957994 -0500
[root@oldboy oldboy]# echo 321 > w
[root@oldboy oldboy]# stat w
File: `w'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 140165 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-16 07:54:39.700956755 -0500
Modify: 2017-12-16 07:55:09.555960261 -0500
Change: 2017-12-16 07:55:09.555960261 -0500
[root@oldboy oldboy]# cat w
321
[root@oldboy oldboy]# stat w
File: `w'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 140165 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-12-16 07:55:45.973957462 -0500
Modify: 2017-12-16 07:55:09.555960261 -0500
Change: 2017-12-16 07:55:09.555960261 -0500
[root@oldboy oldboy]# chown root.test w
[root@oldboy oldboy]# stat w
File: `w'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 140165 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 501/ test)
Access: 2017-12-16 07:55:45.973957462 -0500
Modify: 2017-12-16 07:55:09.555960261 -0500
Change: 2017-12-16 08:00:41.921954381 -0500
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
第十列 文件名 不在文件inode里,而是在上级目录的block中
转载至https://blog.csdn.net/mr_rsq/article/details/78880922