5.4 与文件系统管理相关的其他命令
5.4.1 确定文件类型(file)
1.功能与用法
file命令用于确定文件的类型,其用法为:
file[-bciknsvzL][-f namefile][-m magicfiles]file … file -C [-m magicfiles]
2.参数说明
file命令的部分参数如表5-15所示。
表5-15 file命令的部分参数
3.示例
#file/bin/bash /etc/inittab /lib/libc.* #确定文件类型 #file-s/dev/sda1 #确定特别文件及其上的文件系统类型
5.4.2 文件查找命令(find)
1.功能与用法
find命令用于文件的查找,从而确定文件在指定文件系统中的位置,其用法为:
find [path ...] [expression] ...
find命令在文件查找过程中,有很多参数(见表5-16)供参考。在find命令的所有参数中,位于命令名后,第一个选项前的参数为查找位置,若无则默认为当前目录。如果也没有指定参数或查找指标,则默认为-print。
表5-16 组成find expression的部分参数
2.参数说明
find命令功能强大,有很多用于搜索和查找的指标,这些指标就是用法中的expression。expression由操作符连接参数、判断和动作组成。组成find expression的部分参数如表5-16所示。
find命令的功能是用于文件的查找与定位的,但并不仅限于此,可利用它与其他命令配合工作可完成较复杂的任务。
3.示例
(1)在目录/tmp和/home下查找24h内没有更改的文件:
# find /tmp /home -mtime -1-print
(2)在/home下查找属于用户gjshao的C语言程序:
# find /home -user gjshao -name "*.c" -print
(3)将当前目录内所有*.c和*.h的文件打成tar包/tmp/mych.tar:
#tar cvf/tmp/mych.tar`find .-name"*.[ch]"-type f-print`
(4)在/home下查找所有权限为0644,用户主为test的文件:
# find /home -perm 0644-user test -print
5.4.3 文件复制命令(dd)
1.功能与用法
文件的复制可由cp命令来实现,它用于文件或目录的复制是非常有效的,但对设备文件的复制,或创建一个占有连续空间的文件来说最好还是使用dd命令。dd命令的功能是复制指定的输入文件到指定的输出文件,默认时使用标准I/O。dd工作时可对文件内容按要求进行转换;还可以从输入文件中有选择的读取,有选择的输出;也可根据不同的设备使用不同大小的I/O块,非常高效、方便。dd命令的用法为:
dd[opts=value] …
2.参数说明
dd命令的常用参数如表5-17所示。
表5-17 dd命令的常用参数
3.示例
(1)构造软盘映像文件:
#dd if=/dev/fd0 of=/tmp/fd_img bs=36b #设I/O块为36b,映像文件为/tmp/fd_img #cp/dev/fd0/tmp/fd_img #也可使用cp命令,用户可以比较两个命令的执行速度
(2)介质复制、复制软盘或U盘等,可以使用临时文件,按以下方法进行:
#dd if=/dev/fd0 of=/tmp/mytmpf bs=36k #构造映像文件,交换磁盘 #dd if=/tmp/mytmpf of=/dev/fd0 bs=36k #输出映像文件 #rm-f/tmp/mytmpf #删除临时文件
(3)将第一个SCSI硬盘的主引导扇区复制到文件MBR.sda:
#硬盘的设备文件为/dev/sda,主引导扇区位于物理第一扇区 # dd if=/dev/sda of=MBR.sda bs=1b count=1
(4)将file1转换成大写后写入文件file2:
# dd if=file1 of=file2 conv=ucase
5.4.4 链接管理命令(ln)
1.功能与用法
ln命令的功能是链接管理,可用于创建文件的硬链接和符号链接。其用法为:
ln [options] target [linkname] ln[options]target … dir ln [options] -t dir target
第一种形式用于创建一个指向target的链接linkname,或在当前目录创建一个指向target的同名链接。第二种和第三种形式用于在目录dir内创建target的同名链接。
2.参数说明
ln命令的部分参数如表5-18所示。
表5-18 ln命令的部分参数
在创建符号链接时,目标文件可以不存在。但创建硬链接时,因为多个文件可共用一个文件体,使用同一个i节点,所以在创建之前被链接的文件必须事先存在。对于目录来说,只能创建符号链接而不能创建硬链接。
3.示例
#ln-s/tmp/myf my_link #在当前目录内建立/tmp/myf的符号链接my_link #ln/bin/ls/usr/bin/l #在目录/usr/bin内为/bin/ls创建一个硬链接l
5.4.5 特别文件创建(mknod)
1.功能与用法
用户可以通过文件和目录管理办法来创建普通文件或目录,但是不能用此办法创建设备文件,这是因为设备文件不仅要有一个名字,更重要的是,要通过文件名建立设备与其在内核的驱动程序的联系。创建设备文件的命令是mknod,它的用法为:
mknod [-m,--mode=MOD] name type [major minor]
name为要创建的设备文件名;type为设备类型标志,常用的有b(块设备)、c(字符设备)和p(管道设备);major和minor分别为主、次设备号。
用户还可以在创建设备文件时,通过-m perm或--mode=perm为设备文件设置访问权限。当然也可在创建之后,使用chmod来修改文件权限。
当用户为某新设备开发了设备驱动程序后,需要用mknod命令为设备创建一个文件名,以建立设备文件名与设备驱动程序的联系。如果因误操作删掉了某个设备文件,也要参照它原来在系统中的情况,使用mknod命令重建它。
设备文件一般放在系统的设备目录/dev内,但是,若用户创建的是自己的私用设备,如命名管道,则可以放在自己认为方便的地方。
2.示例
1)创建一个名字为my_FIFO的命名管道
#mknod my_FIFO p #创建命名管道my_FIFO。说明:创建管道时不需要主、次设备号
2)在/dev目录下创建名为my_device的字符设备文件,主、次设备号分别为100和0
# mknod /dev/my_device c 100 0
5.4.6 磁盘空间和文件系统的使用情况统计(df)
1.功能与用法
df命令的功能是按指定格式显示系统中已安装文件系统的使用情况。其用法为:
df [ options ] [ filesystem ]
若不指定文件系统,则显示系统所有已安装的文件系统的使用情况。
2.参数说明
df命令的常用参数如表5-19所示。
表5-19 df命令的常用参数
UNIX/Linux的文件系统的组成部分都包括i节点区和数据区两大部分,在对文件系统初始化时,两者的比例是合适的,但对文件系统使用的极端情况(若存放的全是大文件或全是小文件)却可能导致i节点区和数据区“比例失调”。若全是大文件,则可能首先导致数据区满,若全是小文件却可能首先导致i节点区满。使用df命令可以分别监控两者或整个文件系统空间的使用情况,以便对即将满或达到临界值的文件系统管理提出合理的建议。
3.示例
#df-v #显示文件系统的使用情况 #df-i #显示系统i节点的使用情况
5.4.7 目录使用磁盘空间情况统计(du)
1.功能与用法
du命令的功能是按指定单位统计文件或目录的大小。其用法为:
du [options][names]
若不指定names,则使用当前目录。
2.参数说明
du命令的常用参数如表5-20所示。
表5-20 du命令的常用参数
3.示例
#统计用户zhangsan家目录的大小
#du-h/home/zhangsan #列出每个子目录的大小 #du-hs/home/zhangsan #列出整个目录的大小 #统计/home内每个用户目录使用磁盘空间的情况: #cd/home;du-s`ls` #ls用于列出目录的内容,其输出作为du的输入
Linux还提供磁盘配额功能,用于用户的磁盘空间管理与限制,本书没有介绍,但是仍可以通过du来报告每个用户的磁盘使用情况。
5.4.8 数据备份与文件归档管理(tar、cpio)
1.数据备份及任务
系统管理员的一个重要任务就是要确保系统信息的完整性,要做到这一点就必须对系统中的数据进行经常性备份,万一系统故障或系统中的数据出现问题,可以从备份数据中恢复。由此可见,数据备份是保证数据完整的有效办法。
数据备份可分为系统数据备份、用户数据备份和业务数据备份等。
备份数据或系统有多种方式,如完整备份、增量备份和日志备份等。
(1)完整备份就是将所需备份的信息全部备份到存储介质,这种办法比较安全,因为每次都有完整的信息,但是对于日常性备份工作来说,可能会需要大量的存储介质。完整备份恢复时将覆盖原有的数据。
(2)增量备份是指在某次完整备份的基础上,在以后一个指定时间段内只备份变化部分或新增文件。若某个时间系统数据出现问题了,可以在完整备份的基础上,通过增加备份的数据来恢复数据。增量备份方案不能单独实施,它必须配合完整备份才能保证数据的完整性。并且,在使用增量备份时,完整备份的时间间隔不能太长。
(3)日志备份也是在完整备份的基础上进行的,它很像增量备份,但又不同于增量备份。人们每日的工作都像记账一样,都是在上一笔账的基础上记下一笔,是笔笔相关的流水账。计算机系统的数据变化也是这样,有先后时间和事件上的连续性,所以备份时只需在某个完整备份的基础上,记录从那时起以后所发生的事情就可以了。一旦在某个时刻发生事故,可以在完整备份的基础,根据日志流水逐步重演历史事件,以恢复数据。这也是日志文件系统的设计思路。
数据备份要做到经常化、制度化,备份数据要异地存放。至于采取何种备份方式,要根据实际需要或规章制度等来决定。但是,为了保证数据的完整性,一个必须坚持的原则是必须保证备份数据的足够性和有效性。所谓足够性,是指在系统或数据出现故障时,所备份的数据一定足够多、足够及时,能完整地恢复所需数据。所谓有效性,指的是备份数据的正确性和可用性,不要出现按规定备份了数据,但恢复数据时却出现备份数据错误或存储介质受损等问题,要经常检查备份数据的有效性。
数据备份可以使用多种不同的存储介质,如硬盘、软件、光盘和磁带等,要根据实际需要进行选择。备份的工具在不同系统中也不尽相同,因系统而异。
在UNIX/Linux系统中用于备份的工具有tar、cpio、dump和rsync等,这里只介绍tar和cpio。
2.磁盘文件归档管理命令(tar)
1)功能与用法
tar命令的功能是对指定的文件进行归档或从归档文件中取出或恢复指定数据。这里的归档文件(或叫档案文件)指的是通常意义上的tar包(tarball)文件或设备文件。归档或备份过程就是使用tar命令构造tarball的过程。被归档的数据可以是文件,也可以是目录。在归档或恢复过程中,还可以通过Z、z或j参数进行压缩和解压缩。
归档文件可以是设备文件,如磁带、软盘、硬盘分区等,也可以是普通文件。需要说明的是,当归档文件是设备文件时,tar将以裸方式使用它,设备上原来的内容将被覆盖。
不同版本的UNIX/Linux系统中,tar命令的用法和参数可能存在细微差别。tar的用法可以写为以下形式:
tar [ keys ] [ files ]
2)参数说明
tar命令的参数较多,但归纳起来可分为两类,一类是功能参数,另一类是修饰参数。功能参数(如表5-21所示)决定tar命令的行为,而修饰参数(如表5-22所示)则是对功能参数的辅助和修饰。与其他命令不同的是,参数前的“-”是可选的。
表5-21 tar命令的功能参数
表5-22 tar命令的部分修饰参数
3)示例
(1)使用普通文件作为归档文件:
#tar cvf/tmp/mytar[t-z]* #创建tar包文档/tmp/mytar #tar tvf/tmp/mytar #显示tar包文档/tmp/mytar的目录 #tar xf/tmp/mytar #从归档文件/tmp/mytar中提取所有文件
(2)使用软盘备份:
#tar cvf/dev/fd0 mydata hisdata #将mydata hisdata归档到软盘上 #tar rvf/dev/fd0/home/gjshao/*.c #再向软盘上追加/home/gjshao/*.c #tar xvf/dev/fd0 mydata #从软盘上恢复或提出数据mydata
(3)构造和使用压缩tarball:
#tar cvfz/tmp/mytar.tgz mydir yourdir hisfile #创建tgz格式压缩包 #tar xvfz/tmp/mytar.tgz mydir #从压缩文档中提取数据mydir #tar xvfz/tmp/mytar.tgz #从压缩文档中提取文件所有数据
(4)构造和使用bzip2压缩tar包:
#tar cvfj/tmp/lisi.tbz2/home/lisi/data #创建bzip2压缩tar包
#tar tvfj/tmp/lisi.tbz2 #查看包中内容
(5)使用磁带机进行数据备份:
#使用磁带机/dev/st0对目录/data内的数据文件进行完整备份 # tar cvf /tmp/st0 /data #使用磁带机/dev/st0对目录/data中的两天内修改过的数据文件进行增量备份 #find/data-mtime 2-print>/tmp/tar_list #首先得到文件列表 #tar rvf/dev/st0-T/dev/tar_list #增量备份(追加方式) #增量备份过程可以统一为 #find/data-mtime 2-print|tar rvf/dev/st0-T- #-表示标准输入
说明:在备份过程中,当磁盘或磁带满时,备份文件被分隔成多个卷,此时tar将提示用户更换新盘或带,在更换时一定要记住介质的先后顺序并做好标记,以便在以后恢复时按顺序使用。
3.文件系统备份与复制命令(cpio)
1)功能与用法
cpio命令是UNIX/Linux支持的另一类备份工具。和tar一样,它的功能也是对指定的文件进行归档,形成归档文件。归档文件可以是设备文件,也可以是普通文件。若归档文件是设备文件,cpio也将以裸方式使用它,设备上原来的内容将被覆盖。cpio所使用的档案格式与tar格式不同,两者不能交换使用。
cpio命令有三种工作模式,即归档模式(copy-out)、提取模式(copy-in)和直接复制模式(copy-pass)。
当以归档模式工作时,它从标准输入读取每行一个的文件名列表,然后根据文件名从系统中读取文件内容,并把它们连同文件内容输出到标准输出上。因此,当使用该模式时,常采用I/O重定向的办法来进行,即将输入重定向,为cpio提供要备份的文件名列表,将输出重定向,并将备份结果保存到指定文件中。使用这种模式的典型做法是使用(带有参数-depth的)find命令来为cpio构造文件名列表,这样做可以绕过目录权限处理其中的文件,从而可以极小化所遇到的不可读、不可搜索目录而带来的权限问题。
当以提取模式工作时,它将从标准输入上读取归档文件,命令行上的所有非参数、非选项内容都将视为归档文件名。它既可提取档案内的文件内容,也可列出文件名目录。
在直接复制模式下,它按照归档和提取方式将指定文件或目录从一个位置复制到另一个位置,而并不真正地使用归档文件。
cpio命令的基本用法如下:
cpio-o[-aBuvⅤ] [-c][-O archive][<filelist][>archive] cpio -i [-ABcdfkqrtuv] [-I archive ] [patterns] [ < archive ] cpio-p[-adruv] dir<filelist
2)参数说明
cpio命令的参数也分为功能参数和修饰参数,分别如表5-23和表5-24所示。
表5-23 cpio命令的功能参数
表5-24 cpio命令的部分修饰参数
3)示例
#ls*.txt|cpio-ov>/dev/fd0 #将当前目录下的所有*.txt文件归档到软盘 #cpio-itv</dev/fd0 #列出归档文件/dev/fd0中的内容 #cpio-ir ”*.txt” <myarchv #从归档文件myarchv中提取文件,并采用交互方式 #find.-print|cpio-ov-O/dev/st0 #将当前目录中所有文件归档到磁带/dev/st0 #cpio-itv-I/dev/st0 #查到磁带/dev/st0上的归档目录
5.4.9 文件的压缩与解压缩
UNIX/Linux支持多种压缩格式,支持的压缩格式有.Z、.z、.zip、.gz和.bz2等,Windows等操作系统也可支持这些压缩格式。
1.zip和unzip
1)功能
以.zip格式打包压缩或解压缩文件。zip用于打包压缩,unzip用于解压缩。
2)用法
zip zipfile file1 file2 … unzip zipfile file1 file2 …
zip和unzip有很多参数,以上是其基本用法,详细参数请参阅在线手册。3)示例
(1)数据压缩与恢复:
#zip myzipfile file1 file2 #压缩file1、file2,生成或加入myzipfile.zip #unzip myzipfile[.zip] #解压缩myzipfile中的所有文件 #unzip myzipfile[.zip]file2 #解压缩myzipfile中的file2文件
(2)数据打包压缩:
#tar cf-.|zip mytar- #将当前目录内的文件打成压缩tar包mytar #unzip-p mytar|tar xvf- #压缩包数据恢复。参数-p将文件解压缩到标准输出 #unzip mytar; tar xvf mytar #先解压缩,后提取数据
2.gzip/gunzip/zcat
1)功能
以.gz格式压缩或解压缩文件。gzip用于压缩文件,gunzip用于解压缩文件,zcat用于显示或阅读压缩文件的内容。
2)用法
gzip [-acdfhlLnNrtvⅤ19][-S suffix][name … ] gunzip[-acfhlLnNrtvⅤ][-S suffix][name … ] zcat[-fhLⅤ][name … ]
默认情况下,gzip在压缩文件内保存被压缩文件的原名和时间戳,以备解压缩恢复时使用。gzip每次只能压缩一个文件,若要打包可与tar等命令配合使用。
gunzip从命令行得到被压缩的文件名,进行解压缩。gunzip能识别扩展名为.gz、-gz、.z、-z、_z和.Z等由gzip、zip、pack和compress压缩的文件,也能识别.tgz(.tar.gz)和.taz(.tar.Z)等由tar包压缩的文件。zcat等同于gunzip -c,用于阅读压缩文件。
3)gzip命令的部分参数如表5-25所示。
表5-25 gzip命令的部分参数
4)gzip的应用
(1)文件压缩:
#gzip myf #将myf压缩后生成myf.gz,并删除myf #gunzip myf[.gz] #解压缩myf.gz,生成myf,并删除myf.gz
(2)使用tarball:
#tar cvfz mytar.tgz files dirs #将files和dirs打包压缩生成mytar.tgz #tar tvfz mytar.tgz #查看tar包mytar.tgz的内容 #tar xvfz myatr.tgz[files dirs] #从mytar.tgz包提取文件
3.bzip2/bunzip2
bzip2是一个新型压缩工具,比gzip等有更高的压缩率。
1)功能
压缩、解压缩文件。
2)用法
bzip2[-cdfkqstvzⅤL123456789][file … ] bunzip2[fkvsⅤL][file … ] bzcat[-s][file … ]
3)bzip2命令的部分参数如表5-26所示。
表5-26 bzip2命令部分参数
bzip2从命令行得到要压缩的文件名,若不指定,则从标准输入读文件,并将压缩结果显示在标准输出上。文件压缩后,文件名后增加了.bz2,默认情况下要删除原文件,若要保持原文件,可使用-k参数。与gzip一样,bzip2每次只能压缩一个文件,若要打包,可与tar或cpio命令配合使用。
bunzip2或bzip2-d用于解压缩由bzip2压缩的文件。在解压缩过程中,解压缩程序将判断文件的扩展名,并将它转换为相应的类型(参见表5-27)。
表5-27 bunzip2解压缩过程文件类型转换表
4)示例
(1)文件压缩与解压缩:
#bzip2 myfile #使用bzip2压缩文件myfile,设myfile是文本文件 #bunzip2 myfile.bz2 #解压缩myfile.bz2 #bzip2-d myfile.bz2 #同上 #bzcat myfile.bz2 #显示或阅读压缩文件
(2)文件的打包与压缩。bzip2格式的文件不能像gzip那样能直接与tar配合使用。由于在UNIX/Linux系统下一般的打包程序是tar或cpio,在这种方式下打包的压缩可以分别采用管道的方式进行。
① 打包压缩:
#tar cvf tarball.tar files dirs #打包 #bzip2 tarball.tar #压缩,注意扩展名 #tar cvf-files dirs|bzip2>tarball.tbz2 #打包和压缩过程可统一为此
或 #tar cvfj tarball.tbz2 files dirs
② 解压缩与提取tarball文件:
#bunzip2 tarball.tbz2 #先解压tarball.tbz2 #tar xvf tarball.tar #再提取包中所有文件,或将解压缩和展开过程统一为: #bzcat tarball.tbz2 | tar xvf -
或 #tar xvfj tarball.tbz2