Linux文件与目录管理:压缩、重定向与管道

归档文件和压缩文件

  • 归档是把很多文件放到一个文件中,方便做备份、存储和传输

  • 采用tar – 标准的linux归档命令

  • 归档通常被压缩

  • 算法应用到压缩文件上

  • 解压恢复原始文件

  • tar 传统支持使用gzip和gunzip,或者bzip2和bunzip2的压缩方式

tar

  • 基本功能:打包和解包
  • 格式: tar [选项] 文件或者目录
  • 常用选项
    • -c:创建新的打包文件。
    • -t:列出打包文件的内容,查看已经打包了哪些文件。
    • -x:从打包文件中释放文件。
    • -f:指定打包文件名。
    • -v:详细列出 tar 处理的文件信息。
    • -z:用 gzip 来压缩/解压缩打包文件。
    • -j:用 bzip2 来压缩/解压缩打包文件。
    • -r:追加新的文档
    • -U:追加

例:

1、归档/root/abc目录,生成文件为/root/abc.tar

#tar –cvf /root/abc.tar /root/abc

#ls –l /root/abc.tar

2、查看/root/abc.tar归档文件的内容

#tar –tvf /root/abc.tar

3、将归档文件/root/abc.tar解包出来

#tar –xvf /root/abc.tar

4、将文件/root/abc/d添加到/root/abc.tar归档文件中

#touch /root/abc/d

#tar -rvf /root/abc.tar /root/abc/d

#tar –tvf /root/abc.tar

5、更新归档文件/root/abc.tar中的文件/root/abc/d

#tar –uvf /root/abc.tar /root/abc/d

#tar –tvf /root/abc.tar

注意: “-f 文件名|设备名”是一个整体, 所以 -cvf myball.tar 不能写成:-cfv myball.tar 或 -fcv myball.tar

gzip

  • Linux下常用的压缩和解压缩命令。

  • 由官方仓库的gzip软件包提供。

  • 压缩后 gzip 会在每个文件的后面添加扩展名 .gz。

  • 压缩后原文件会被自动删除。

  • 在 windows 下可以用 winzip 或 winrar或7-zip 解压。

  • 用法:gzip [选项] 文件列表

选项:

  • -d: 解开压缩文件。

  • -f: 强行压缩文件,不理会文件名称或硬链接是否存在以及该文件是否为符号链接。

  • -l: 列出压缩文件的相关信息(压缩文件的大小;未压缩文件的大小;压缩比;未 压缩文件的名字)。

  • -n: 压缩文件时,不保存原来的文件名称及时间戳(默认为保存,即-N)。

  • -r : 递归处理,将指定目录下的所有文件及子目录一同处理。

  • -t : 测试压缩文件是否正确无误。

  • -v : 显示指令执行过程。

  • -<压缩率> : 压缩率是一个介于1~9的数值,默认值为“6”,数值越大压缩率越高。

-best 参数等价于-9;–fast参数等价于-1

例:

Tar 调用gzip实例

1、将/root/abc目录压缩成/root/abc.tar.gz文件

#tar -zcvf /root/abc.tar.gz /root/abc

2、查看/root/abc.tar.gz文件

#tar -ztvf /root/abc.tar.gz

3、将压缩文件/root/abc.tar.gz解压出来

#tar -zxvf /root/abc.tar.gz

或者 压缩/root/abc.tar

#gzip /root/abc.tar

解压/root/abc.tar .gz

#gzip –d /root/abc.tar .gz

bzip2

  • Linux下常用的压缩和解压缩命令。

  • 由官方仓库的bzip2软件包提供。

  • 比gzip的压缩比更高。

  • 压缩后 bzip2 会在每个文件的后面添加扩展名 .bz2。

  • 压缩后原文件会被自动删除。

  • 在 windows 下可以用 winrar或7-zip 解压。

  • bzip2命令的格式和参数与gzip类似

例:

压缩文件filename

$ bzip2 filename

高度压缩文件 file1和file2并显示执行过程

$ bzip2 -9v file1 file2

解压filename.bz2文件

$ bzip2 -d filename.bz2

$ bunzip2 filename.bz2

zip/unzip

与windows下的 winzip兼容

由官方仓库的zip/unzip软件包提供

例如: – 压缩文件 file1为 fiel1.zip,原文件保留

$ zip file1.zip file1

– 将子目录 data1/ 下的所有文件压缩到文件 data1.zip

$ zip –r data1.zip data1

– 解压释放压缩文件 data1.zip 中的所有文件

$ unzip data1.zip

显示压缩文件的内容

不解压,显示压缩文件的内容:

1、zcat、zless

  • 对于用gzip压缩的文件,zcat,zless命令可以在不解压的情况下,直接显示文件的内容

  • zcat:直接显示压缩文件的内容

  • zless:直接逐行显示压缩文件的内容

2、bzcat、bzless

  • 对于bzip2压缩文件,bzcat,bzless命令可以在不解压的情况下,直接 显示文件的内容

  • bzcat:直接显示压缩文件的内容

  • Bzless:直接逐行显示压缩文件的内容

rar和7za

  • rar

– 由RPMForge仓库的rar软件包提供

  • 7za

http://www.7-zip.org

http://p7zip.sourceforge.net/

– 由EPEL仓库的p7zip软件包提

重定向

所谓重定向,就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输出重定向、输入重定向和错误重定向。通常情况下重定向到一个文件。

在Shell中,要实现重定向主要依靠重定向符实现,即Shell是检查命令行中有无重定向符来决定是否需要实施重定向

输入输出重定向

名称 文件描述符 含义 设备 说明
STDIN 0 标准输入 键盘 命令在执行时所要的输入通过它来取得
STDOUT 1 标准输出 显示器 命令执行后的输出结果从该端口送出
STDERR 2 标准错误 显示器 命令执行时的错误信息通过该端口送出

输入重定向中用到的符号及其作用

符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2

输出重定向中用到的符号及其作用

符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件2>&1或 命令 &>> 文件 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

例:

$ ls -l /tmp >mydir

$ ls -l /etc >>mydir

$ myprogram 2> err_file

$ myprogram &> output_and_err_file

$ find ~ -name *.mp3 > ~/cd.play.list

$ echo “Please call me : 68800000”>message

$ cat <<!>mytext

This text forms the content of the heredocument ,

which continues until the end of text delimite

Command > file

将command的标准输出定向到 file

Command >> file

将command的标准输出附加到 file

Command < file

将file作为输入发送到command

Command 2> file

将command的错误输出定向到 file

Command 2>> file

将command的错误输出附加到 file

Command &> file

将所有输出重定向到文件

管道

管道的引入

UNIX 系统的一个基本哲学是:一连串的小命令能够解决大问题。其中每个小命令都能够很好地完成一项单一的工作。现在需要有一些东 西能够将这些简单的命令连接起来,这样管道就应运而生。

许多Linux命令具有过滤特性,即一条命令通过标准输入端口接受一个 文件中的数据,命令执行后产生的结果数据又通过标准输出端口送给 后一条命令,作为该命令的输入数据。后一条命令也是通过标准输入 端口而接受输入数据。

  • 管道(使用符号“|”表示)用来连接命令

    • 命令1 | 命令2

    • 将命令1的STDOUT发送给命令2的STDIN

    • STDERR不能通过管道转发

  • 用来组合多种工具的功能

    • 命令1 | 命令2 | 命令3 |……

    • ls -C | tr 'a-z' 'A-Z‘ | wc

  • 管道线中的每一条命令都作为一个单独的进程运行,每一条命令的输出作为下一条命令的输入。

  • 由于管道线中的命令总是从左到右顺序执行的,因此管道线是单向的。

  • 注:不要误以为管道命令符只能在一个命令组合中使用一次。可以这样使用:“命令A | 命令B | 命令C”。

    曾经有位东北的同学做了一个特别贴切的类比:把管道符当做流水线作业,这跟吃顿烧烤是同一个道理,即第一个人负责切肉,第二个人负责串肉,第三个人负责烧烤,最后的处理结果交付给用户。

特点

1、任何写入到标准输出的命令都可以在管道的左侧使用。

2、任何从标准输入读取的命令都可以在管道的右侧使用。

3、可以用管道将多个命令连到一起,

例:

1、使用简单的管道

#ls /etc |more

2、使用复杂的通道

#rpm –qa |grep a |more

3、显示passwd文档中pl的用户信息,并统计有少字符/行 。

#cat /etc/passwd |grep ‘pl’ |wc –l

附加:通配符

通配符 含义
* 任意字符
? 单个任意字符
[a-z] 单个小写字母
[A-Z] 单个大写字母
[a-Z] 单个字母
[0-9] 单个数字
[[:alpha:]] 任意字母
[[:upper:]] 任意大写字母
[[:lower:]] 任意小写字母
[[:digit:]] 所有数字
[[:alnum:]] 任意字母加数字
[[:punct:]] 标点符号
  1. 通配符不一定非要放到最后面,也可以放到前面。
  2. 可用于搜索文件或代替被通配的字符。
  3. 可以与创建文件的命令相结合,创建出好多个文件。
  4. 还可以输出一些指定的信息。