Linux文件系统
传统的磁盘与文件系统中,一个文件系统对应一个分区,我们可以称呼一个可被挂载的数据为一个分区
现在一个分区可以可以格式化多个文件系统,多个分区合成一个文件系统
文件系统通常会将数据存放在不同的块
- super block 记录此文件系统的整体信息,包括inode/block总量,使用量,剩余量,以及文件系统的格式与相关信息
- inode 记录文件的属性(权限),一个文件占用一个inode,同时记录此文件的数据所在的block号码
- block 实际记录文件的内容,若文件太大,会占用多个block
文件系统的简单操作
df (列出文件系统的整体磁盘使用量)
- df -h 以人们较易阅读的GB,MB,KB等格式自行显示
- df -i 不用硬盘容量,而以inode的数量来显示
du (列出目前目录下的所有文件容量,ps:显示不含文件只有目录,默认KB)
- du -a 列出所有的文件与目录容量
- du -s 列出总量,而不列出每个各别的目录占用容量
hard link(硬连接)
多个文件名对应到同一个inode号码。
使用hard link设置连接文件时,磁盘的空间与inode的数目都不会改变
如果将任何一个“文件名”删除,其实inode与block都还是存在的。此时还可以通过另一个“文件名”来读取到正确的文件数据。此外不论使用哪个“文件名”来编辑,最终的结果都会写入到相同的inode与block中,均能进行数据的修改。
hard link的限制
- 不能跨文件系统
- 不能连接到目录
symbolic link(符号连接,即快捷方式)
symbolic link就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。即在源文件上直接进行修改。
会占用inode与block
当源文件被删除之后,symbolic link的文件会“开不了”
当删除hard link和symbolic link的文件时,另外一个hard link的文件不受影响,symbolic link的源文件则被删除。
连接命令
ln [-sf] 源文件 目标文件
-s 不加任何参数进行连接,那就是hard link,-s 是symbolic link
-f 如果目标文件存在时,主动将目标文件直接删除后再创建
磁盘的挂载和卸载
- 单一文件系统不应该被重复挂载在不同的挂载点(目录)中
- 单一目录不应该重复挂载多个文件系统
- 作为挂载点的目录理论上应该都是空目录,否则挂载了新的文件系统后,原目录下的东西会自动消失,等卸载新的文件系统之后,原目录会再次显示
mount [-l]
单纯输入mount会显示目前挂载的信息,加上 -l 可增列 Label名称
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 设备文件名 挂载点
fdisk -l
找出设备文件名
mount -o remount,rw,auto/
将/重新挂载,并加入参数rw与auto
umount [-fn] 设备文件名或挂载点
需要离开该文件系统的挂载点操作
Linux系统常见的压缩命令
常见的压缩文件扩展名
*.gz
gzip程序压缩的文件
*.tar
tar程序打包的数据,并没有压缩过
*.tar.gz
tar程序打包的文件,其中经过gzip的压缩
gzip
gzip只能针对单一文件进行压缩
- 压缩
gzip 文件名
- 解压
gzip -d *.gz
使用gzip进行压缩时,在默认的状态下原本的文件会被压缩成为.gz的文件名,原文件名就不再存在
-c 将压缩的数据输出到屏幕上,可通过数据流重定向来处理 gzip -c man.config > man.config.gz
打包命令 tar
-c 新建打包文件
-t 查看打包文件的内容含有哪些文件名
-x 解打包或解压缩的功能
-j 通过bzip2的支持进行压缩和解压缩
-z 通过gzip的支持进行压缩和解压缩
-v 在压缩和解压缩的过程中,将正在处理的文件名显示出来
-f filename
-C 目录
熟记
- 压缩 tar -zcv -f filename.tar.gz 要被压缩的文件或目录名称
- 查询 tar -ztv -f filename.tar.gz
- 解压缩 tar -zxv -f filename.tar.gz -C 欲解压缩的目录
若要在在bash中输入两行,需要第一行后面加上反斜杠**\**并立刻按回车,就能够到第二行继续输入了
仅解开单一文件的方法
- 先查找shadow文件的位置
tar -ztv -f /root/etc.tar.gz | grep 'shadow'
,得到位于/etc/shadow目录下 - 将该文件打开
tar -zxv -f /root/etc.tar.gz etc/shadow
打包某目录,但不含该目录下的某些文件的做法
tar -zcv -f /root/system.tar.gz --exclude=/root/etc* /etc
仅备份比某个时刻还要新的文件
tar -zcv -f /root/system.tar.gz --newer-mtime="2008/09/29" /etc