打包压缩与搜索命令

35.tar命令 tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]” tar命令我们最常见的便是tar -czvf而其中具体含义是什么呢?来分解一下, -c 打包 -z 压缩格式 gzip .tar.gz -j 压缩格式 bzip2 .tar.bz2 -v 显示过程 -f 压缩包名称 下面用gzip方式来压缩文件: 查看压缩包格式: 接下来用bzip2方式来压缩文件: 有个错误提示? 是的这是说系统中没有安装bzip2,我们下面安装一下, 安装成功,接下来我们再执行bzip压缩文件: 此时便没有报错了,而且已经显示压缩成功,来查看下bzip2文件类型:


那么说过了zip与bzip2的压缩命令后,再来说一下解压缩命令: 提到解压缩,上手便敲出了tar zxvf命令,而其中各参数的作用你知道吗? tar -x 解压 tar -z 解压格式为gzip tar -v 解压过程 tar -f 解压包名称 -C 指定解压到的目录 -j 用bzip2压缩或解压 注意: 首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用Gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称

下面用两种解压方式分别将刚才用gzip、bzip2压缩的文件解压: 用zxvf参数将lgm.tar.gz通过-C参数解压到root目录下: 用jxvf参数将lgm.tar.bz2通过-C参数解压到root目录下:


解压命令最为常见,也最为实用,所以我们更应该注重细节,区分两种方式的不同之处。


36.grep命令 *grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]” * grep命令也是我们常见的与查询命令相关联的命令,参数:

-b 将可执行文件(binary)当作文本文件(text)来搜索 -c 仅显示找到的行数 -i 忽略大小写 -n 显示行号 -v 反向选择—仅列出没有“关键词”的行 虽然grep有很多参数,但不用担心,因为这些参数我们一般都用不到。这里提一下其中两个参数: -n参数用来显示搜索到信息的行号; -v参数用于反选信息(即没有包含关键词的所有信息行)


举个例子: 在Linux系统中,/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息:


37.find命令 find命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作” 需要提一句:在Linux系统中的一切都是文件!

而在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。 参数如下:


-name 匹配名称 -perm 匹配权限(mode为完全匹配,-mode为包含即可) -user 匹配所有者 -group 匹配所有组 -mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前) -atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前) -ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前) -nouser 匹配无所有者的文件 -nogroup 匹配无所有组的文件 -newer f1 !f2 匹配比文件f1新但比f2旧的文件 --type b/d/c/p/l/f 匹配文件类型(后面的字母参数依次表示块设备、目录、字符设备、管道、链接文件、文本文件) -size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) -prune 忽略某个目录 -exec …… {}; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)


这里需要重点讲解一下-exec参数重要的作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,它十分类似于管道符技术,并且由于find命令对参数的特殊要求,因此虽然exec是长格式形式,但依然只需要一个减号(-)

Linux系统中的配置文件会保存在/etc目录下,若想要获得该目录下所有以host开头的文件列表,如下图: 如果要在整个系统中搜索权限中包括SUID权限的所有文件(详见第5章),只需使用-4000即可:


如果在系统中找到lgm用户的所有文件,并把他们复制到/root/findlgm目录里: 要注意-exec参数的使用,-exec {} ; 其中{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“;”。