Linux常用命令(文件系统与磁盘相关操作)

1、基础知识

1)通常称呼一个可被挂载的数据为一个文件系统而不是一个分区。

2)操作系统的文件数据除了文件的实际内容外,通常含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(所有者、群组、时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的块,权限与属性放置到inode中,至于实际数据则放置到data block块中。另外还有一个超级块(super block)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。每个inode与block都有编号,这三个数据的意义简略说明如下:
super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。

inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。

block:实际记录文件的内容,若文件太大时,会占用多个block。

3)挂载点的意义:

每个文件系统都有独立的inode、block、super block等信息,这个文件系统要能够链接到目录树才能够被使用。将文件系统与目录树结合的操作称为挂载。挂载点一定是目录,该目录为进入该文件系统的入口。因此并不是所有文件系统都能使用,必须要“挂载”到目录树的某个目录后,才能够使用该文件系统。

 

2、查看磁盘与目录的容量

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

df [-ahikHTm] [目录或文件名]

参数:

-a:列出所有的文件系统,包括系统特有的/proc等文件系统。

-k:以KB的容量显示各文件系统。

-m:以MB的容量显示各文件系统。

-h:以人们较易阅读的GB,MB,KB等格式自行显示。

-H:以M=1000K替代M=1024K的进位方式。

-T:连同该分区的文件系统名称(例如ext3)也列出。

-i:不用硬盘容量,而以inode的数量来显示。

 

df -h

在显示的结果中要特别留意根目录的剩余容量(/dev/sda6        31G   13G   17G   44% /),因为所有的数据都是从根目录衍生出来的,因此当根目录的剩余容量为0时,系统的问题就很大了。

 

df -i

当inode使用率达到100%时,即使硬盘空间还有剩余,也无法在目录下放置新文件了。

 

评估文件系统的磁盘使用量:du(常用于评估目录所占容量)

du [-ahskm] 文件或目录名称

参数:

-a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。

-h:以人们较易读的容量格式(G/M)显示。

-s:列出总量而已,而不列出每个个别目录的占用容量。

-S:不包括子目录下的总计,与-s有点差别。

-k:以KB列出容量显示。

-m:以MB列出容量显示。

du -s、du和du -S的对比。du -s是只列总量,不列子目录;du不带参数是既列总量,也列子目录;du -S虽然列了子目录,但是统计总量的时候没有把子目录算进去。

常用du -ah,不带文件与目录参数则列出当前所在目录的文件和子目录容量。

 

3、在系统中新增一块磁盘的操作

1)对磁盘进行分区,以新建可用的分区(fdisk);

2)对该分区进行格式化(format),以创建系统可用的文件系统;

3)对新建好的文件系统进行检验(fsck);

4)在Linux系统上,需要创建挂载点(也即是目录),并将它挂载上来(mount);

 

4、查看磁盘分区:fdisk

fdisk [-l] 设备名称

参数:

-l:输出后面接的设备所有的分区内容。若仅有fdisk -l时,则系统会将整个系统内能够找到的设备的分区均列出来。

可以看到当前系统内有两块硬盘,磁盘文件名为/dev/sda和/dev/sdb,容量分别为119.2G和465.8G,如果要查看磁盘的详细内容,可以用fdisk /dev/sda命令去查看。注意/dev/sda后不要加上数字,加上数字变成该磁盘上的某一分区了,会使fdisk命令报错。

 

5、磁盘检查:fsck

fsck [-ny] 设备名称

参数:

-n:检查文件系统。

-y:自动修复检查到的有问题的扇区。

注意:

1、通常只有在root用户下且文件系统可能有问题的时候才使用这个命令,否则正常状况下使用此命令,可能会对系统造成损害。

2、被检查的分区务必不可挂载到系统上,需要在卸载状态下执行。

 

6、挂载和卸载文件系统

注意事项:

1、单一文件系统不应该被重复挂载在不同的挂载点(目录)中。

2、单一目录不应该重复挂载多个文件系统。

3、作为挂载点的目录理论上应该都是空目录。

 

挂载文件系统:mount

mount -a

mount [-l]

mount [-n] 设备文件名 挂载点

参数:

-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来。

-l:单纯输入mount会显示目前挂载的信息,加上-l可增列Label名称。

-n:在默认情况下,系统会将实际挂载的情况实时写入/etc/mtab中,以利其他程序的运行。但在某些情况下(例如单用户维护模式)为了避免问题,会刻意不写入。此时就得要使用-n这个参数了。

 

卸载文件系统:umount

umount [-fn] 设备文件名或挂载点

参数:

-f:强制卸载。可用在类似网络文件系统(NFS)无法读取到的情况下。

-n:不更新/etc/mtab的情况下卸载。

 

开机挂载配置文件/etc/fstab

系统挂载的一些限制:

1、根目录是必须挂载的,而且一定要先于其他mount point被挂载进来。

2、其他挂载点必须为已新建的目录,可任意指定,但一定要遵守必需的系统目录架构原则。

3、所有挂载点在同一时间内,只能挂载一次。

4、所有分区在同一时间内,只能挂载一次。

5、若进行卸载,必须先将工作目录移到挂载点(及其子目录)之外,否则会报文件系统被占用。

各列解释:

第一列:磁盘设备文件名或该设备的Label

第二列:挂载点(mount point)

第三列:磁盘分区的文件系统

第四列:文件系统参数

第五列:能否被dump备份命令作用。0代表不要做dump备份,1代表要每天进行dump的操作,2代表其他不定日期的dump备份操作,通常这个数值不是0就是1.

第六列:是否以fsck检验扇区。0是不要检验,1表示最早检验(一般只有根目录会设置为1),2也是要检验,不过1会比较早被检验。一般来说,根目录设置为1,其他目录设置为2.

/etc/mtab文件记录了当前系统的挂载情况,内容和mount命令显示相同。

 

7、查看文件或目录占用

通过文件(或文件系统)找出正在使用该文件的程序:fuser

fuser [-umv] file/dir

参数:

-u:除了进程的PID之外,同时列出该进程的所有者。

-m:后面接的那个文件名会主动向上提到该文件系统的最顶层,对umount不成功很有效。

-v:可以列出每个文件与程序还有命令的完整相关性。

加上-m参数后,会追溯占用/proc目录的内容(下层)和父目录(上层)的进程。所以如果只是想看某个文件或目录有没有被占用,用-uv参数即可。

 

列出被进程所打开的文件名:lsof

lsof [-u] [+d]

-u:后面接username,列出该用户相关进程所打开的文件。

+d:后面接目录,即找出某个目录下面已经被打开的文件。

lsof后面可以直接接文件或目录名找到占用该文件或目录的进程信息:

 

8、文件的压缩和解压缩

Linux的目录压缩和Windows不同,gzip、bzip2等压缩工具只能压缩文件,不能对目录进行压缩。

所以需要先把目录打包成一个包,然后才能压缩。tar命令可以将多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2的支持,将该文件同时进行压缩。

参数:

-c:新建打包文件,可搭配-v来查看过程中被打包的文件名(filename)。

-t:查看打包文件的内容含有那些文件名,重点在查看文件名。

-x:解打包或解压缩的功能,可以搭配-C(大写)在特定目录解开。

注意:-c,-t,-x不可同时出现在一串命令行中。

-j:通过bzip2的支持进行压缩/解压缩,此时文件名最好为*.tar.bz2。

-z:通过gzip的支持进行压缩/解压缩,此时文件名最好为*.tar.gz。

-v:在压缩/解压缩过程中,将正在处理的文件名显示出来。

-f filename:-f后面接要被处理的文件或目录名,建议-f单独写一个参数。

-C 目录:这个参数用在解压缩时,若要在特定目录解压缩,可以使用这个参数。

常用命令:

压缩:tar -zcv -f filename.tar.gz 要被压缩的文件或目录名称

查询:tar -ztv -f filename.tar.gz

解压:tar -zxv -f filename.tar.gz -C 欲解压缩的目录

 

9、dos与unix格式文件相互转换

dos格式文件的换行符是“^M$”,也就是CR和LF两个符号,在Linux中,只有LF($)这个换行符。这个差别对Linux影响很大。Linux下面的命令在开始执行时,他的判断依据是[Enter],而Linux的[Enter]为LF符号,由于dos的换行符是CRLF,也就是多了一个^M的符号出来,在这种情况下,如果是一个shell script的程序文件,将可能造成“程序无法执行”的情况,因为它会误判程序所执行的命令内容。

格式转换命令:

dos2unix [-kn] file [newfile]

unix2dos [-kn] file [newfile]

参数:

-k:保留该文件的mtime时间格式(不更新文件上次内容经过修订的时间)

-n:保留原本的旧文件,将转换后的内容输出到新文件,如dos2unix -n old new.

用cat -A命令可以看出结尾的特殊字符:

unix格式文件:

dos格式文件:


 

参考资料

《鸟哥的Linux私房菜基础学习篇(第三版)》