RHEL54文件系统和TAR工具.docx
《RHEL54文件系统和TAR工具.docx》由会员分享,可在线阅读,更多相关《RHEL54文件系统和TAR工具.docx(13页珍藏版)》请在冰豆网上搜索。
![RHEL54文件系统和TAR工具.docx](https://file1.bdocx.com/fileroot1/2023-1/29/8559c861-104a-4562-a92e-c4101d3e863d/8559c861-104a-4562-a92e-c4101d3e863d1.gif)
RHEL54文件系统和TAR工具
RHEL5.4文件系统和TAR工具
关于linux下面文件系统的深究和tar工具的使用讨论,
分区和文件系统
磁盘驱动器被划分成分区,分区被格式化成文件系统(filesystem),从而使用户能够去保存数据。
Linux下面的默认文件系统是:
ext3(第三级扩展linux文件系统,thirdextendedlinuxfilesystem)。
其他常见的文件系统:
Ext2和msdos(典型用于软盘)
Iso9660 (典型拥有光盘)
GFS和GFS2(典型用于SAN)主要用来做集群级的文件系统
Inodes(节点)
Inode(indexnode索引节点)
Inodestable包含了ext2和ext3文件系统的所有属性,
一个文件其实是由两部分组成:
节点表和数据区。
节点表里面主要存放文件的类型,权限,UID,GID,Linkcount,大小和时间戳,数据存放在磁盘的什么位置。
数据区里面就是存放真正的数据。
一个inodes的大小大概为128B,一个文件至少要占有1个inodes。
通过tune2fs-l/dev/sda7可以查看这个分区的inodesize,inodecount,blockcount。
我们知道,计算机在识别一个用户是通过UID来识别的,识别一个进程是通过进程号来识别的,那么,同样,计算机识别一个文件是通过一个inodenumber来识别文件的。
而文件名只是给人的识别的。
如何查看文件的节点号呢?
#ls-li
[root@localhost~]#
[root@localhost~]#ls-li
total56
533587-rw-------1rootroot1050Mar602:
15anaconda-ks.cfg
919063drwxr-xr-x2rootroot4096Mar602:
43Desktop
524290-rw-r--r--1rootroot29302Mar602:
15install.log
524291-rw-r--r--1rootroot3738Mar602:
15install.log.syslog
[root@localhost~]#
前面的一串数字就是文件的节点号,
其实我们的节点号是在分区创建的时候就已经分配好了的。
下面我们来学习复制,剪切,删除对文件inode的影响。
1. 复制对文件inode的影响,
现在先来查看一下,
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ls-lifile
6030-rw-r--r--1rootroot0Mar613:
26file
[root@localhostboot]#
可以看到,这个文件的节点号是6030,现在我们将它复制到另外一个分区,
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#cpfile/var/
[root@localhostboot]#
[root@localhostboot]#cd/var/
[root@localhostvar]#
[root@localhostvar]#ls-lifile
2115361-rw-r--r--1rootroot0Mar613:
27file
[root@localhostvar]#
将这个文件复制到/var分区下面后,这个文件的inodenumber就改变了。
当一个文件从一个分区复制到另外一个分区的时候,系统就分配了另外一个inode给这个文件。
刚才我们是将一个文件从一个分区复制到另外一个分区,现在我们在同一个分区里面复制文件,文件的节点号会不会发生改变。
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ls-lifile
6030-rw-r--r--1rootroot0Mar613:
26file
[root@localhostboot]#
[root@localhostboot]#cpfile/boot/grub/
[root@localhostboot]#
[root@localhostboot]#cdgrub/
[root@localhostgrub]#ls-lifile
22091-rw-r--r--1rootroot0Mar613:
29file
[root@localhostgrub]#
可以看到,刚才这个文件的节点号是6030,现在就变成了22091了。
在同一个分区里面复制文件,这个文件的节点号也是会发生改变的。
因为在这个分区有两份相同的文件,只是文件的内容相同,但是文件的inode属性却是不一样的。
2.剪切对文件inode的影响
现在先来查看一下,
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ls-lifile
6030-rw-r--r--1rootroot0Mar613:
26file
[root@localhostboot]#
可以看到,这个文件的节点号是6030,现在我们将这个文件在同个分区里剪切一份。
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ls-lifile
6030-rw-r--r--1rootroot0Mar613:
26file
[root@localhostboot]#
[root@localhostboot]#mvfile/boot/test/
[root@localhostboot]#
[root@localhostboot]#cdtest/
[root@localhosttest]#
[root@localhosttest]#ls-lifile
6030-rw-r--r--1rootroot0Mar613:
26file
[root@localhosttest]#
可以看到,这个文件节点号是没有改变的。
当在同一个分区里面移到文件,文件的节点号没有发生改变。
刚才我们是在同一个分区里面移到文件,现在我们将文件在不同的分区当中移到,文件的节点号会不会发生改变呢。
[root@localhost~]#
[root@localhost~]#cd/boot/test/
[root@localhosttest]#
[root@localhosttest]#ls-lifile
6030-rw-r--r--1rootroot0Mar613:
26file
[root@localhosttest]#
[root@localhosttest]#mv/boot/test/file/var/ftp/pub/
[root@localhosttest]#
[root@localhosttest]#cd/var/ftp/pub/
[root@localhostpub]#ls-lifile
325584-rw-r--r--1rootroot0Mar613:
26file
[root@localhostpub]#
可以看到,这个文件的节点号是肯定会变的。
3. 删除对文件inode的影响
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ls-lifile
6030-rw-r--r--1rootroot0Mar613:
44file
[root@localhostboot]#
[root@localhostboot]#rm-rffile
[root@localhostboot]#
现在我们把file这个文件给删除了,其实我们只是将file这个文件的节点表给删除了,其实我们的数据都还在。
这也就是为什么当我们删除一个文件,这个文件还可以被找回来的原因。
当然如果我们在到这个分区里面写入数据,那么原来的数据就会被覆盖。
[root@localhostboot]#
[root@localhostboot]#touchfile1
[root@localhostboot]#
[root@localhostboot]#ls-lifile1
6030-rw-r--r--1rootroot0Mar613:
49file1
[root@localhostboot]#
现在我们又新建了一个文件file1,这个文件的节点号也是6030,它就已经覆盖了以前的数据的节点号。
那么以前的数据就找不回来了。
总结:
复制:
在同一个分区,节点号改变。
在不同的分区,节点号改变。
剪切:
在同一个分区,节点号不变。
在不同的分区,节点号改变。
删除:
只是删除了文件的节点表,数据没有被真正删除,只有当往这个分区在写入数据的时候,才会覆盖原来的数据。
关于硬链接和软链接
1. 硬链接(hardlinks)
硬链接文件完全等同于原文件,原文件名和连接文件名都指向相同的物理地址。
不可以跨文件系统,也不可以建立目录的硬链接。
如何创建硬链接呢
#ln文件名链接名
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ls-liinittab
6033-rw-r--r--1rootroot1666Mar614:
06inittab
[root@localhostboot]#pwd
/boot
[root@localhostboot]#lninittab/boot/grub/inittab.bak
[root@localhostboot]#
[root@localhostboot]#cd/boot/grub/
[root@localhostgrub]#
[root@localhostgrub]#ls-liinittab.bak
6033-rw-r--r--2rootroot1666Mar614:
06inittab.bak
[root@localhostgrub]#
可以看到,我们给inittab这个文件创建了一个硬链接initab.bak这个文件。
这两个文件的节点号都是一样的。
现在我们来修改原文件,
在修改之前我们来看看这个两个文件是不是一样的,使用diff工具。
[root@localhost~]#
[root@localhost~]#diff/boot/inittab/boot/grub/inittab.bak
[root@localhost~]#
OK,这两个文件的内容是一样的。
现在我们来修改原文件,
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#viminittab
[root@localhostboot]#
我已经对原文件做了修改了。
现在在来看看链接文件是否也跟着改变了
[root@localhost~]#
[root@localhost~]#diff/boot/inittab/boot/grub/inittab.bak
[root@localhost~]#
OK,这两个文件还是一样的,也就是说我们改变了原文件的内容,链接文件也是会跟着发生改变的。
当然,如果在链接文件里面添加内容,那么原文件也会跟着发生改变的。
现在如果我们将原文件个删除了,那么链接还会存在吗?
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#rm-rfinittab
[root@localhostboot]#
[root@localhostboot]#cd/boot/grub/
[root@localhostgrub]#
[root@localhostgrub]#ls|grepinittab.bak
inittab.bak
[root@localhostgrub]#
OK,可以看到,当我们删除原文件的时候,链接文件也还是存在的。
因为原文件和链接文件都有节点表,这两个节点表都是指向真正的数据区的,当我们删除原文件的时候,只是删除了原文件的节点表,而没有删除真正的数据,而我们的链接文件也是指向真正的数据区的,所以链接文件存在也是正常的。
接下来,在做一个试验。
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ls-lifstab
6034-rw-r--r--1rootroot684Mar615:
43fstab
[root@localhostboot]#
在/boot分区下面有个fstab文件,现在我们为这个文件做一个硬链接。
[root@localhost~]#
[root@localhost~]#ln/boot/fstab/tmp/
ln:
creatinghardlink`/tmp/fstab'to`/boot/fstab':
Invalidcross-devicelink
[root@localhost~]#
但是,现在系统报错了,他提示我们硬连接是不可以跨分区的。
2. 软链接(softlinks)
软链接文件相当于为原文件建立了一个快捷方式,可以跨文件系统,也可以为目录建立。
软链接和硬链接不同,软链接有自己的inode,类似windows下的快捷方式。
如何创建软链接呢?
#ln-s文件名链接名
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ls-lifstab
6034-rw-r--r--1rootroot684Mar615:
43fstab
[root@localhostboot]#
[root@localhostboot]#ln-s/boot/fstab/boot/grub/fstab.bak
[root@localhostboot]#
[root@localhostboot]#cd/boot/grub
[root@localhostgrub]#
[root@localhostgrub]#ls-lifstab.bak
22106lrwxrwxrwx1rootroot11Mar615:
56fstab.bak->/boot/fstab
[root@localhostgrub]#
现在我为/boot下面的fstab文件做了一个硬链接/boot/grub/fstab.bak文件。
当我们修改原文件里面的数据,我们链接文件也会发生改变。
修改链接文件的数据,原文件也会发生改变。
这点和硬链接是一样的。
现在我们删除原文件,链接文件还可以打开吗?
[root@localhost~]#
[root@localhost~]#rm-rf/boot/fstab
[root@localhost~]#
[root@localhost~]#cd/boot/grub
[root@localhostgrub]#
[root@localhostgrub]#ls-lifstab.bak
22106lrwxrwxrwx1rootroot11Mar615:
56fstab.bak->/boot/fstab
[root@localhostgrub]#
很显然,当我们删除原文件以后,我们的链接文件就坏掉了。
因为软连接的节点号并没有指向真正的数据,而是指向原文件,当原文件的节点表被删除了,我们的软连接也打不开了。
刚才我们的硬链接并不能够跨分区做,但是我们的软连接没有限制。
[root@localhost~]#
[root@localhost~]#cd/boot/
[root@localhostboot]#
[root@localhostboot]#ln-s/boot/fstab/tmp/fstab.bak
[root@localhostboot]#cd/tmp/
[root@localhosttmp]#ls-lifstab.bak
131180lrwxrwxrwx1rootroot11Mar616:
12fstab.bak->/boot/fstab
[root@localhosttmp]#
我们的软链接是可以跨分区的。
总结:
硬链接不可以跨分区,不可以对目录做。
但是硬链接的原文件和链接文件的节点表都指向真正的数据区。
删除原文件,链接文件也可以打开。
软链接可以跨分区,也可以对目录做。
但是软链接的链接文件的节点表是指向原文件的,当原文件删除后,链接文件就坏掉了。
关于linux系统中文件类型
Ls-l的符合文件类型
- 常规文件
d目录
l符号链接
b块设备文件
c字符特殊文件
p别命名的管道
s套接字
关于linux下面检查空闲空间
#df-h
[root@localhost~]#
[root@localhost~]#df-h
FilesystemSizeUsed Avail Use% Mountedon
/dev/sda33.9G2.3G1.5G 61% /
/dev/sda6494M11M458M3% /home
/dev/sda215G11G2.7G81% /var
/dev/sda199M21M74M22% /boot
tmpfs217M0217M0% /dev/shm
none217M104K217M1% /var/lib/xenstored
/dev/hdc2.8G2.8G0 100% /media/RHEL_5.4i386DVD
[root@localhost~]#
查看磁盘的空间用量。
#du-h
[root@localhost~]#
[root@localhost~]#du-h/tmp/
4.0K/tmp/.ICE-unix
4.0K/tmp/.font-unix
8.0K/tmp/orbit-root
4.0K/tmp/.X11-unix
8.0K/tmp/gconfd-root/lock
12K/tmp/gconfd-root
60K/tmp/
[root@localhost~]#
这条命令会显示/tmp目录下面每个文件的大小。
可以加上s参数,就会汇总的意思,只显示/tmp目录的大小。
[root@localhost~]#
[root@localhost~]#du-sh/tmp/
60K/tmp/
[root@localhost~]#
关于linux下面挂载各种设备方法
挂载(mounting):
意味着使外来的文件系统看起来如同是主目录树的一部分。
访问前,介质必须被挂载
摘除时,介质必须被卸载
1. 挂载光盘和DVD
#Mount/dev/chrom/media
Eject命令用来卸载并弹出磁盘
2. 挂载USB设备
#mount/dev/sdb1/mnt
在linux如何卸载呢?
我们使用Umount命令来卸载挂载设备,
#Umount/mnt(挂载点)
如何使用TAR工具来进行压缩打包
1. 在linux下面如何打包
#tar-cvf/tmp/etc.tar/etc
-c创建打包
-v查看过程
-f指定打包文件或设备
[root@localhost~]#
[root@localhost~]#tar-cvf/tmp/etc.tar/etc/
[root@localhost~]#
[root@localhost~]#
[root@localhost~]#cd/tmp/
[root@localhosttmp]#
[root@localhosttmp]#lletc.tar
-rw-r--r--1rootroot1095680Mar617:
44etc.tar
[root@localhosttmp]#
这个就是我们打包出来的文件etc.tar。
打包只是将这些文件打包在一起,并不压缩,也就是不会减小大小。
2. 在linux中进行压缩文件
#gzipetc.tar
[root@localhosttmp]#
[root@localhosttmp]#gzipetc.tar
[root@localhosttmp]#ll-hetc.tar.gz
-rw-r--r--1rootroot170KMar617:
44etc.tar.gz
[root@localhosttmp]#
我们就将刚才打包出来的文件给压缩了,这个文件就变成了tar.gz了,而且这个文件的大小也明显减小了。
刚才我们是使用gzip的工具来