Linux磁盘与文件管理系统

Linux文件系统

传统的磁盘与文件系统中,一个文件系统对应一个分区,我们可以称呼一个可被挂载的数据为一个分区

现在一个分区可以可以格式化多个文件系统,多个分区合成一个文件系统

文件系统通常会将数据存放在不同的块

  1. super block 记录此文件系统的整体信息,包括inode/block总量,使用量,剩余量,以及文件系统的格式与相关信息
  2. inode 记录文件的属性(权限),一个文件占用一个inode,同时记录此文件的数据所在的block号码
  3. block 实际记录文件的内容,若文件太大,会占用多个block

文件系统的简单操作

df (列出文件系统的整体磁盘使用量)

  1. df -h 以人们较易阅读的GB,MB,KB等格式自行显示
  2. df -i 不用硬盘容量,而以inode的数量来显示

du (列出目前目录下的所有文件容量,ps:显示不含文件只有目录,默认KB)

  1. du -a 列出所有的文件与目录容量
  2. du -s 列出总量,而不列出每个各别的目录占用容量

多个文件名对应到同一个inode号码。

使用hard link设置连接文件时,磁盘的空间与inode的数目都不会改变

如果将任何一个“文件名”删除,其实inode与block都还是存在的。此时还可以通过另一个“文件名”来读取到正确的文件数据。此外不论使用哪个“文件名”来编辑,最终的结果都会写入到相同的inode与block中,均能进行数据的修改。

hard link的限制

  1. 不能跨文件系统
  2. 不能连接到目录

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只能针对单一文件进行压缩

  1. 压缩 gzip 文件名
  2. 解压 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中输入两行,需要第一行后面加上反斜杠**\**并立刻按回车,就能够到第二行继续输入了

仅解开单一文件的方法

  1. 先查找shadow文件的位置 tar -ztv -f /root/etc.tar.gz | grep 'shadow',得到位于/etc/shadow目录下
  2. 将该文件打开 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

Share