Linux中一切皆文件!养成先备份在操作,才能快速还原,如不容易还原先通过
测试环境测试,然后再操作。
文件属性:文件的描述信息,主要包括:时间,大小,权限,创建日期,修改日期等等。
[root@root ~]# ls -lhi
total 12K
33574978 -rw-------. 1 root root 1.7K Sep 4 18:51 anaconda-ks.cfg
33574993 -rw-r--r--. 1 root root 1.8K Sep 4 21:18 initial-setup-ks.cfg
76768 -rw-r--r--. 1 root root 292 Sep 21 13:58 j.txt
17043971 d--------x. 2 root root 6 Nov 7 17:02 test
主要包括这10列
第一列 33574978 :文件的索引节点号;好比人的身份证,是唯一的。
系统读取文件时首先通过文件名找到inode,然后读取文件内容。
第二列 -rw-------. :文件类型及权限,共11个字符;
第一个字符代表文件的类型,后9个字符代表文件的权限;看,读,写,改,等等
.目前不了解
第三列 硬链接的数量;硬链接:同一个文件的不同访问入口。像楼的前后门,具有备份的作用。
第四列 文件的拥有者(属主);
在Linux里面文件和程序的存在必须要有用户和组满足相应存在的需求。
第五列 文件所属的组;
第六列 文件的大小;
第七、八、九列 默认文件的修改时间; -ctime (change)属性的改变;
-mtime (modify); -atime (access)访问;
第十列 实际的文件名;严格的说文件名不算文件的属性;
第一列
1.inode 索引节点(index node);inode本身是具有大小的,创建文件系统一般会生成两个部分:
第一部分是inode许多个,第二部分是Block许多个;
其中Block是用来存储实际数据的;
inode中包含文件属性信息不限于大小、属主、归属组、读写权限、文件类型、修改时间等等;
唯独不包含文件名;
逻辑关系:file------>inode(ls -l)----->Block;
[root@root ~]#ls -li 接文件名
[root@root ~]# stat /etc/hosts 看文件的详细属性;
File: '/etc/hosts'
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 16778299 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:net_conf_t:s0
Access: 2024-11-07 16:21:02.754102262 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2024-09-04 18:16:40.663027209 +0800
2.查看文件系统inode总量以及剩余量 df -i
[root@root ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 120459 391 120068 1% /dev
tmpfs 124715 1 124714 1% /dev/shm
tmpfs 124715 969 123746 1% /run
tmpfs 124715 16 124699 1% /sys/fs/cgroup
/dev/mapper/centos-root 8910848 161019 8749829 2% /
/dev/sda1 524288 340 523948 1% /boot
tmpfs 124715 20 124695 1% /run/user/1000
/dev/sr0 0 0 0 - /run/media/admin/CentOS 7 x86_64
tmpfs 124715 1 124714 1% /run/user/0
3.查看磁盘的使用量 df -h
[root@root ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 8.6M 479M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 5.7G 12G 33% /
/dev/sda1 1014M 172M 843M 17% /boot
tmpfs 98M 32K 98M 1% /run/user/1000
/dev/sr0 4.4G 4.4G 0 100% /run/media/admin/CentOS 7 x86_64
tmpfs 98M 0 98M 0% /run/user/0
磁盘空间是否满了由inode(df -i)和Block(df -h)共同决定;
磁盘满的一个特征:no space on device left
4.inode小结
1)磁盘被分区并格式化为ext4文件系统后会发生一定数量的inode和Block;
2)inode称为索引节点,它的作用是存放文件属性信息以及作为
文件的索引并指向文件的实际内容 ;
3)ext3/ext4文件系统的Block,存放文件的实际内容;
4)inode是磁盘上的一块存储空间,CentOS 7非启动分区inoode默认大小为256字节;
5)inode的表现形式是一串数字,不同文件对应的inode(一串数字)在文件系统里是唯一的;
6)inode节点号相同文件,互为硬链接文件,可以认为是一个文件的不同入口;
7)ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个Block;
8)ext3/ext4文件系统下,正常情况下一个文件只能占用一个inode;
9)Block是用来存储实际数据的,他的大小一般有1K、2K、4K几种。
其中引导分区的为1K;
10)如果一个文件很大,需要占用多个Block;如果文件很小至少占用一个Block
且剩余空间被浪费了(无法存储其他文件);但都只占用一个inode;
11)inode大小和总量查看
a.dumpe2fs /dev/sda1|egrep -i"block size|inode size 大小
b.dumpe2fs /dev/sda1|egrep -i"block count|inode count 总量
12)查看inode总量和使用量命令 df -i
13)查看文件的inode
ls -li /stat/etc/hosts
14)如何生成指定的inode大小
格式化命令:mkfs.ext4 -b 2048 -l 256/dev/sdb;
5.Block知识小结
1)磁盘读取数据是按Block为单位读取;
2)一个文件可能占用多个Block。但是每读取一个Block会消耗一次磁盘I/O;
3)如果要提升磁盘IO性能,那么就要可能一次性读取数据尽量多;
4)一个Block只能存放一个内容文件,无论内容大小。如果 Block默认是4K大小,那么
存放一个1K的文件,剩余3K就浪费了;
5)Block并不是越大越好。Block太大对于存放小文件存放就会浪费磁盘空间,
例如:1000K的文件,Block大小为4K,占用250个Block,如果Block默认为1K,
则需要占1000个Block。访问谁的效率更高?消耗IO分别为250次和1000次;
6)根据业务需求确定默认的Block大小,大文件(大于16K)一般设置Block大一点,
对于小文件(小于1K)一般设置Block小一点;
7)Block太大例如4K,但文件都是0.1K的,就大量浪费磁盘空间;
8)Block太小例1K,但文件都是1000K的,就大量浪费磁盘IO;
9)Block的大小设置是在格式化的时候确定的,命令
mkfs.ext4 -b 2048 -I 256/dev/sdb
10)ext3/ext4文件,一般设置为4K;
11)企业文件都会比较大(一般不能会大于4K),这是Block设置的
会大一些提高磁盘访问效率;
有关的面试题:
A.1个100M(10000K)的文件的磁盘分区,分别写入1K或写入1M(100K)的文件,
分别可以写多少个?(说出知识点)
答:考察文件系统inode与Block的知识点
1.inode是关于存放文件属性信息的,默认大小为256byte;
2.Block是关于存放文件实际数据的,默认大小为1K或4K(企业);
3.一个文件占用一个inode及至少要占用一个Block;
默认较大的分区只是在企业场景下inode数量是足够的,而Block数量消耗的更快;
B.如果向磁盘写入数据提示如下错误:no space left on device,通过
查看磁盘空间发现没满,请问可能的原因是什么?企业环境下什么情况下会发生此问题?
答:可能是inode数量消耗尽了。
企业:邮寄临时队列/var/spool/clientmquence这里很容易被小文件占满导致no space left on device的错误;clientmquence目录只有安装了sendmail,才会有,是sendmail邮件的临时队列。
解决方法:解决/var/spool/clientmquence小文件过多的方法;
第二列 Linux文件类型(目录、普通文件、字符设备文件、符号链接文件、管道文件等等)
文件类型标识符 | 文件类型说明 |
d(directory) | 表示这是一个目录,如ext,在ext2fs中,目录是一个特殊文件 |
-(regular flie) | 表示这是一个普通文件 |
l(link) | 表示这是一个软链接文件,实际上指向了另一个文件 |
c(character) | 表示字符设备文件 |
s(socket) | 表示是一个socket文件 |
p(named pipe) | 表示管道文件 |
b 特殊块文件(缓冲的)
d 目录
f 普通文件
l 符号链接
1.普通文件的三种类型
1)纯文本文件:可直接读到数据;
2)二进制文件:常见的是命令;
3)数据格式文件:存放命令的信息/结果;登录数据会记录在/var/log/wtmp”“数据文件”;
可以通过last命令读出来,cat命令会乱码,因数据文件属于特殊格式的文件;
lastlog(/var/log/lastlog)
[root@localhost ~]# file /var/log/wtmp
/var/log/wtmp: data
[root@localhost ~]# file /var/log/lastlog
/var/log/lastlog: data
2.目录
1)/是所有目录的顶点。
2)目录结构像一颗倒挂的树。
3)目录与磁盘分区没有关联的。
4)/不同的目录可能会对应不同的分区或磁盘。
5)所有的目录按照一定的类别有规律的组织和命名的。
查看目录:ls、ls -l、ls -a、tree -Ld 层数
3.字符设备与块设备;块设备:find /dev -type d |xargs ls -l例如磁盘;
字符设备:find /dev -type c |xargs ls -l;仅了解一下哈;
4..sock文件是一种特殊文件;
5.符号链接文件:此文件实际上指向了另一个文件;
[root@localhost /]# ls -l /etc/rc.d/init.d/ -d
drwxr-xr-x. 2 root root 4096 Oct 12 11:48 /etc/rc.d/init.d/
[root@localhost /]# ls -l /etc/rc.d/init.d /etc/init.d -d
lrwxrwxrwx. 1 root root 11 Jun 22 23:53 /etc/init.d -> rc.d/init.d
drwxr-xr-x. 2 root root 4096 Oct 12 11:48 /etc/rc.d/init.d
6.文件类型(必会)
1).tar、tar.gz、.zip、.tar.bz表示压缩文件,创建命令一般为tar,gzip,unzip等
2).sh表示shell脚本语言,通过shell语言开发的程序;
3).pl 表示perl语言文件,通过Perl语言开发的程序;
4).py表示python语言文件,通过python语言开发的程序;
5).html、.php、.jsp、.do表示网页语言文件;
6).conf 表示系统的配置文件;
7).rpm表示rpm安装包文件;
小结:
d(directory) | 表示这是一个目录,如ext,在ext2fs中,目录是一个特殊文件 |
-(regular flie) | 表示这是一个普通文件 |
第二列 权限 rwxr-xr-x
rwxr-xr-x
r ——>read 读 4
w——>write 写 2
x——>(execute)执行 1
- ——>没有权限 0
第三列:硬链接(hard link)
硬链接:ln 源文件 目标文件
软链接(symbolic link):ln -s源文件 目标文件“不能事先存在”
1.硬链接
是指通过索引节点inode来进行链接;
在Linux中多个文件名指向同一个inode是允许的;
硬链接文件相当于文件的一个入口;
[root@localhost ~]# echo 1 >a
[root@localhost ~]# ls -l a
-rw-r--r--. 1 root root 2 Nov 9 17:05 a
[root@localhost ~]# cat a
1
[root@localhost ~]# ln a b
[root@localhost ~]# ls -l a
-rw-r--r--. 2 root root 2 Nov 9 17:05 a
硬链接具有备份的作用[root@localhost ~]# ls -hil a b
16777226 -rw-r--r--. 2 root root 2 Nov 9 17:05 a
16777226 -rw-r--r--. 2 root root 2 Nov 9 17:05 b
[root@localhost ~]# cat a b
1
1
[root@localhost ~]# rm a
rm: remove regular file 'a'? y
[root@localhost ~]# cat a
cat: a: No such file or directory
[root@localhost ~]# cat b
1
【知识小结】:
1、具有相同inode节点号的多个文件互为硬链接文件;
2、删除硬链接文件或者删除源文件任意文件之一,文件实体并未被删除;
3、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除;
4、当所有硬链接文件及所有对应的硬链接文件被删除后,在存放新的
数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据与
会被系统回收,所以要养成删除或多套环境测试的好习惯;
5、硬链接文件就是文件的另一个入口,好比大楼的前后门;
6、可以通过给文件设置硬链接来防止文件被误删;
7、通过执行命令“ ln 源文件 硬链接文件”即可完成创建硬链接;
8、硬链接文件只是普通文件,可以用rm命令来删除;
9、对于静态文件(没有进程正在调用的文件)来说,当硬链接数为0(i_link),
文件被删除。i_link的查看方法(ls -l 命令结果的第三列就是);
2.软链接
[root@localhost ~]# touch file
[root@localhost ~]# ln -s file soft_file
[root@localhost ~]# ls -lhi file soft_file
16777226 -rw-r--r--. 1 root root 0 Nov 9 19:38 file
16777231 lrwxrwxrwx. 1 root root 4 Nov 9 19:39 soft_file -> file
索引号发生了变化;由soft_file指向file;
[root@localhost ~]# readlink soft_file 查看软链接指向谁;
file
【软链接知识小结】:
1、软链接类似于Windows的快捷方式(可以通过readlink查看其指向);
2、软链接类似于一个文本文件,里面存放的是源文件的路径,只有源文件实体;
3、删除源文件,软链接文件依然存在,但是无法访问指向源文件实体;
4、时效的时候一般是白字红底闪烁提示;
5、执行命令“ln -s源文件 软链接文件”,即可完成创建软链接(目标不存在);
6、软链接和源文件是不同类型的文件,也是不同的文件,inode号不相同;
7、删除软链接文件的文件类型为(l)可以用rm命令;
例子:
[root@localhost ~]# mkdir /test/oldboy -p
[root@localhost ~]# cd /test/oldboy/
[root@localhost oldboy]# touch oldboyfile
[root@localhost oldboy]# ln oldboyfile oldboy_hard_link
[root@localhost oldboy]# ln -s oldboyfile oldboyfile_soft_link
[root@localhost oldboy]# ls -li
total 0
7077891 -rw-r--r--. 2 root root 0 Nov 9 21:13 oldboy_hard_link
7077891 -rw-r--r--. 2 root root 0 Nov 9 21:13 oldboyfile
7077892 lrwxrwxrwx. 1 root root 10 Nov 9 21:15 oldboyfile_soft_link -> oldboyfile、
【有关文件链接的小结】
1)删除软链接oldboyfile_soft_link,对oldboyfile,oldboyfile_soft_link无影响;
全局结论:删除软链接文件对源文件及硬链接无任何影响。
2)删除硬链接 oldboyfile_hard_link,对oldboyfile,oldboyfile_soft_link都无影响;
全局结论:删除硬链接文件对源文件及软链接文件都无任何影响。
3)删除源文件oldboyfile,对硬链接oldboy_hard_link没有影响,但是会导致
软链接olydboy_soft_link失效;
全局结论:删除源文件oldboyfile,硬链接文件没有影响,但是会导致
软链接文件失效白字红底闪烁。
4)同时删除源文件oldboyfile,硬链接文件oldboyfile_hard_link,整个文件会真正的被删除。
5)源文件和硬链接文件具有相同的索引点号,可以认为是同一个文件或一个文件的多个入口;
6)源文件和软链接文件索引节点号不同,是不同的文件,软链接相当于源文件的快捷方式,
含源文件的位置指向;
7)很多硬件设备的快照功能是利用了硬链接;
【目录的小结】
1、对于目录不能创建硬链接,但可以创建软链接;
2、对于目录的软链接是生产场景运维中常用的技巧;
3、目录的硬链接不能跨越文件系统(从硬链接原理可以理解);
4、每个目录下面都有一个硬链接“.”和对应上级目录的硬链接“..”;
5、在父目录里创建一个子目录,父目录的链接数量会增加1
?:链接数目为什么是145
(每个子目录里都有..指向父目录),但是父目录里创建文件,父目录的链接数量都不会增加;
面试题:描述Linux下软链接与硬链接的区别?
软硬链接的概念+创建+区别(文件与目录)/画图解决问题;
1.默认情况下,ln 命令创建的硬链接,ln -s创建的是软链接;
2.硬链接与源文件的索引节点号是相同的,而软链接文件的inode节点号与源文件不同;
3.ln命令不能对目录创建硬链接,但是ln -s可以对目录创建软链接;
4.删除软链接文件,对源文件及硬链接无任何影响;
5.删除硬链接文件对源文件及软链接文件都无任何影响;
6.删除源文件,对硬链接文件没有影响,但是会导致
软链接文件失效白字红底闪烁。
7.同时删除源文件与其硬链接文件,整个文件才会真正的删除;
8.很多硬件设备的快照功能是有硬连接创建的;
9.软链接可以跨文件系统,硬链接不可以跨文件系统;
Linux下删文件的原理
上图为i_link为2,i_count为1 ,其中文件删除的条件为i_link并且i_count都为0;
Linux的文件删除受i_link与i_count共同控制。
i_link (硬链接数量)为0,文件就被删除。
i_count(进程引用计数)为0,文件就被删除。
i_link=0并且i_count=0。
第五列:用户和组
用户:
1.Linux中用户的角色是通过UID(user identify)用户ID和GID(group identify)
组ID识别的,用户的UID就相当于我们的身份证一样,用户名就相当于我们的名字;
2.root用户0的UID和GID都为0,可以登录到系统,可以操作系统中任何文件和命令,
拥有最高的管理权限;查看cat /etc/passwd,为超级用户;
3.普通用户500-65535:权限较小,可以进入和浏览相关文件和目录,但无法修改和删除;
su - root、sudo
4.虚拟用户1-499:安装系统后会默认存在,且不能登录系统;
5.添加用户:useradd 用户名;
用户组:
一、用户和组的关系
一对一、一对多、多对一、多对多;
二、用户和组的配置文件
1./etc/passwd 用户配置文件;
nologin 不能登录;
2./etc/shadow 用户影子口令文件;注意权限
3.小结
a、useradd添加用户会更改etc/passwd、etc/shadow、etc/group、etc/gshadow;
b、passwd为用户设置密码会更改/etc/pshadow;
c、查看用户组 id 用户名;
第七、八、九列是时间,默认是修改时间;
modfiy修改 -mtime、一般为修改文件内容;
change改变时间 -ctime、文件的属性改变;
access访问时间 -atime;访问文件内容;
格式化显示时间属性:ls -lhi --time-style=long-iso
查看文件时间属性:stat /文件名
最后一列:文件名
1.不在文件的inode中,而是在上级目录的bloke里;
2.文件名中不要特殊符号;
如有什么错误的地方恳请大家批评指正,谢谢各位!