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等信息,这个文件系统要能够链接到目录树才能够被使用。将文件系统与目录树结合的操作称为挂载。挂载点一定是目录,该目录为进入该文件系统的入口。因此并不是所有文件系统都能使用,必须要“挂载”到目录树的某个目录后,才能够使用该文件系统。
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 [-ahskm] 文件或目录名称
参数:
-a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。
-h:以人们较易读的容量格式(G/M)显示。
-s:列出总量而已,而不列出每个个别目录的占用容量。
-S:不包括子目录下的总计,与-s有点差别。
-k:以KB列出容量显示。
-m:以MB列出容量显示。
du -s、du和du -S的对比。du -s是只列总量,不列子目录;du不带参数是既列总量,也列子目录;du -S虽然列了子目录,但是统计总量的时候没有把子目录算进去。
常用du -ah,不带文件与目录参数则列出当前所在目录的文件和子目录容量。
1)对磁盘进行分区,以新建可用的分区(fdisk);
2)对该分区进行格式化(format),以创建系统可用的文件系统;
3)对新建好的文件系统进行检验(fsck);
4)在Linux系统上,需要创建挂载点(也即是目录),并将它挂载上来(mount);
fdisk [-l] 设备名称
参数:
-l:输出后面接的设备所有的分区内容。若仅有fdisk -l时,则系统会将整个系统内能够找到的设备的分区均列出来。
可以看到当前系统内有两块硬盘,磁盘文件名为/dev/sda和/dev/sdb,容量分别为119.2G和465.8G,如果要查看磁盘的详细内容,可以用fdisk /dev/sda命令去查看。注意/dev/sda后不要加上数字,加上数字变成该磁盘上的某一分区了,会使fdisk命令报错。
fsck [-ny] 设备名称
参数:
-n:检查文件系统。
-y:自动修复检查到的有问题的扇区。
注意:
1、通常只有在root用户下且文件系统可能有问题的时候才使用这个命令,否则正常状况下使用此命令,可能会对系统造成损害。
2、被检查的分区务必不可挂载到系统上,需要在卸载状态下执行。
注意事项:
1、单一文件系统不应该被重复挂载在不同的挂载点(目录)中。
2、单一目录不应该重复挂载多个文件系统。
3、作为挂载点的目录理论上应该都是空目录。
mount -a
mount [-l]
mount [-n] 设备文件名 挂载点
参数:
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来。
-l:单纯输入mount会显示目前挂载的信息,加上-l可增列Label名称。
-n:在默认情况下,系统会将实际挂载的情况实时写入/etc/mtab中,以利其他程序的运行。但在某些情况下(例如单用户维护模式)为了避免问题,会刻意不写入。此时就得要使用-n这个参数了。
umount [-fn] 设备文件名或挂载点
参数:
-f:强制卸载。可用在类似网络文件系统(NFS)无法读取到的情况下。
-n:不更新/etc/mtab的情况下卸载。
系统挂载的一些限制:
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命令显示相同。
fuser [-umv] file/dir
参数:
-u:除了进程的PID之外,同时列出该进程的所有者。
-m:后面接的那个文件名会主动向上提到该文件系统的最顶层,对umount不成功很有效。
-v:可以列出每个文件与程序还有命令的完整相关性。
加上-m参数后,会追溯占用/proc目录的内容(下层)和父目录(上层)的进程。所以如果只是想看某个文件或目录有没有被占用,用-uv参数即可。
lsof [-u] [+d]
-u:后面接username,列出该用户相关进程所打开的文件。
+d:后面接目录,即找出某个目录下面已经被打开的文件。
lsof后面可以直接接文件或目录名找到占用该文件或目录的进程信息:
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 欲解压缩的目录
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私房菜基础学习篇(第三版)》