Linux 命令 打包与压缩

来源:互联网 发布:外企 工作 知乎 编辑:程序博客网 时间:2024/05/17 07:01

【文件打包与压缩】
介绍
在学习Linux上的压缩工具之前,有必要先了解一下常见常用的压缩包文件格式。在 Windows 上最常见的不外乎这三种 .zip,.rar 后缀的压缩文件。而在 Linux 上面常见的格式除了以上三种外,还有 .gz,.xz,.bz2,.tar,.tar.gz,.tar.xz,*.tar.bz2,简单介绍如下:

 文件后缀名  说明*.zip   zip 程序打包压缩的文件*.rar   rar 程序压缩的文件*.7z    7zip 程序压缩的文件*.tar   tar 程序打包,未压缩的文件*.gz    gzip 程序(GNU zip)压缩的文件*.xz    xz 程序压缩的文件*.bz2   bzip2 程序压缩的文件*.tar.gz    tar 打包,gzip 程序压缩的文件*.tar.xz    tar 打包,xz 程序压缩的文件*.tar.bz2   tar 打包,bzip2 程序压缩的文件*.tar.7z    tar 打包,7z 程序压缩的文件

1.1 tar【重点掌握】
在 Linux 上面更常用的是 tar 工具,tar 原本只是一个打包工具,只是同时还是实现了对 7z、gzip、xz、bzip2 等工具的支持,这些压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩。

语法:tar [-zjxcvfpP] filename-z :是否同时用gzip压缩-j :是否同时用bzip2压缩-x :解包或者解压缩-t :查看tar包里面的文件-c :建立一个tar包或者压缩文件包-v :可视化-f :后面跟文件名,压缩时跟-f文件名,意思是压缩后的文件名为filename,解压时跟-f文件名,意思是解压filename。请注意,如果是多个参数组合的情况下带有-f,请把f写到最后面。-p :使用原文件的属性,压缩前什么属性压缩后还什么属性。(不常用)-P :可以使用绝对路径。(不常用)【实例:】将桌面上的zhiyou打成rar的包tar -cvf zhiyou.rar zhiyou将zhiyou删除,解压缩rartar -xvf zhiyou.rar将桌面上的zhiyou打成tar的包,并进行压缩tar -cvf zhiyou.tar.gz zhiyou将zhiyou删除,解压缩rartar -xvf zhiyou.tar.gz

1.2 gzip
[注:gzip只能压缩文件,不能压缩目录]
语法:gzip [-d#] filename 其中#为1-9的数字
-d :解压缩时使用
-# :压缩等级,1压缩最差,9压缩最好,6为默认

[实例:]压缩aa.txt文件:gzip aa.txt    (压缩之后,变成了aa.txt.gz)解压缩gzip -d aa.txt.gz

1.3 bzip2
语法:bzip2 [-dz] filename
-d :解压缩
-z :压缩

压缩:bzip2 -z aa.txt   (压缩之后,变成了aa.txt.bz2)解压缩:bzip2 -d aa.txt.bz2

【管道命令】
管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。

管道又分为匿名管道和具名管道。我们在使用一些过滤程序时经常会用到的就是匿名管道,在命令行中由|分隔符表示。具名管道简单的说就是有名字的管道,通常只会在源程序中用到具名管道。[实例:]通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入:ls -al /etc | less

相关命令
2.1 cat 打印某一行中的某个字段
语法:cut -d ‘分割字符’ -f fields
cut -c 字符范围

-d : 后面接分隔符,与-f一起使用;-f : 依据-d的分隔符将一段信息切割成为数段,用-f取出第几段的意思;-c : 以字符(characters)的单位取出固定字符区间;[实例:]打印出/etc/passwd中用户名和用户家目录cut /etc/passwd -d ':' -f 1,6打印出文件权限,文件所属用户,文件名ls -l |cut -d  ' ' -f 1,3,12打印/etc/passwd文件中每一行的前N个字符:# 前五个(包含第五个)$ cut /etc/passwd -c -5# 前五个之后的(包含第五个)$ cut /etc/passwd -c 5-# 第五个$ cut /etc/passwd -c 5# 2到5之间的(包含第五个)$ cut /etc/passwd -c 2-5

2.2 grep分析一行数据,如果有匹配的,就显示出来
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
语法:grep [-acinv] [–color=auto] ‘查找字符串’ filename

-a : 将binary文件以text文件的方式查找数据;-c : 计算找到’查找字符串‘的次数;-i : 忽略大小写的不同;-n : 带行号;-v : 反向选择,显示没有‘查找字符串’的行;--color=auto : 可以将找到查找的关键字部分加上颜色显示-r 参数表示递归搜索子目录中的文件[实例:]将/etc/passwd,有出现 root 的行取出来:grep root /etc/passwd将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号:grep -n root /etc/passwd将/etc/passwd,将没有出现 root 和nologin的行取出来:grep -v root /etc/passwd | grep -v nologin搜索/home/smile目录下所有包含"zhiyou"的所有文本文件,并显示出现在文本中的行号:grep -rn "zhiyou" /home/smile

2.3 wc命令
wc 命令是一个统计的工具,主要用来显示文件所包含的行、字和字节数。
wc 命令是 word count 的缩写。
语法:wc [-lwm] 文件
-l : 统计行数
-w : 统计字数(英文单字,由空白、跳格或换行字符分隔的字符串)
-m : 统计字符数,这个标志不能与 -c 标志一起使用
-c : 统计字节数

[实例:]统计a.txt文件行数:wc -l a.txt统计文件的字符数,只打印数字,不打印文件名:cat a.txt | wc -m统计/bin 目录下的命令个数,可以使用如下命令:ls /bin | wc -l

【正则表达式】
它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,抑或查询某个日志文件分析其内容,都会用到正则表达式。

正则表达式元字符由以下字符组成:^ $ . [ ] { } - ? * + ( ) | \正在表达式  描述               ^    匹配行的开始$    匹配行尾的文本.    匹配除换行符以外的任意字符[]    匹配包含在[字符]之中的任意一个字符[^]   匹配除了[^字符]之外的任意一个字符[-]   匹配[]指定范围内的任意一个字符{n}   匹配之前的项n次{n,}  之前的项至少匹配n次{n,m} 指定之前的项需要匹配的最小和最大次数?    匹配之前的项零次或一次*    匹配之前的项零次或更多次+    匹配之前的项一次或更多次()    创建一个用于匹配的子串|     匹配|两边的任意一项\     将上面特殊字符进行转义\w    匹配字母或数字或下划线或汉字\s   匹配任意的空白符\d   匹配数字\b   匹配单词的开始或结束\W   匹配任意不是字母,数字,下划线,汉字的字符\S   匹配任意不是空白符的字符\D   匹配任意非数字的字符\B   匹配不是单词开头或结束的位置示例:^zhiyou 匹配以zhiyou开始的行$zhiyou 匹配以zhiyou结尾的行a.c   匹配abc、aac...但不匹配abbcab[cd] 匹配abc或abd1[^01] 匹配12、13,但不匹配10、11[1-5] 匹配1-5之间的任意一个数字[0-9]{2} 匹配任意一个两位数[0-9]{2,} 匹配任意一个两位或更多位数字[0-9]{2,5} 匹配从两位数到五位数之间的任意一个数字zhiy?ou   匹配zhiyou 或 zhiouzhiy*ou   匹配zhiou、zhiyou、zhiyyouzhiy+ou   匹配zhiyou 、zhiyyou、zhiyyyyouma(in)?  匹配 ma或main1(2|3)   匹配12或13a\+b     匹配a+b[实例:]列出/etc/passwd中带有zy的行grep 'z.*y' /etc/passwd利用 Linux 系统自带的字典查找一个五个字母的单词,第三个字母为 j,最后一个字母为 r ,/usr/share/dict 目录下存放字典文件:grep '^..j.r$' /usr/share/dict/linux.words验证固定电话,打印符合条件的电话,固定电话格式基本都是带有 0 的区号+连接符“-”+电话号码,另外还有可能有分机号,区号有 3 位、4 位,电话号码有 7 位和 8 位的:grep -E "^0[0-9]{2,3}-[0-9]{7,8}(-[0-9]{3,4})?$" telphone.txt