Linux文件与目录管理:压缩、重定向与管道
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://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:]] | 标点符号 |
- 通配符不一定非要放到最后面,也可以放到前面。
- 可用于搜索文件或代替被通配的字符。
- 可以与创建文件的命令相结合,创建出好多个文件。
- 还可以输出一些指定的信息。