[Linux Shell学习系列四]Shell命令进阶-文件处理和归档
D10
1. paste命令
paste命令用于合并文件的行。可以合并一个或多个文件中的行。
语法:paste [OPTION]... [FILE]...
$ cat a.txt #源文件1 Linux Unix Windows $ cat b.txt #源文件2 Dell IBM HP $ cat c.txt #源文件3 1 2 3 $ paste a.txt b.txt #默认将各文件中的各行以制表符作为分隔符合并并输出 Linux Dell Unix IBM Windows HP $ paste a.txt b.txt c.txt #可以合并多个文件 Linux Dell 1 Unix IBM 2 Windows HP 3 $ paste -d'|' a.txt b.txt #使用-d选项,指定合并时使用的分隔符 Linux|Dell Unix|IBM Windows|HP $ paste -d',:' a.txt b.txt c.txt #使用-d选项,多个文件合并,可以指定多个分隔符 Linux,Dell:1 Unix,IBM:2 Windows,HP:3 $ paste -s a.txt b.txt #使用-s选项,可以顺序的将每个文件中的所有内容合并为一行 Linux Unix Windows Dell IBM HP $ paste -d, -s a.txt #使用-s和-d选项,指定合并行的分隔符 Linux,Unix,Windows $ paste - - < a.txt #将文件的内容从一列转为两列 Linux Unix Windows $ paste -d : - - < a.txt #将文件的内容从一列转为两列,并使用分隔符 Linux:Unix Windows: $ paste - - - < a.txt #将文件的内容从一列转为三列 Linux Unix Windows
2. dd命令
dd命令可以通过可能的转换格式赋值指定的输入文件到指定的输出,可以指定输入和输出的块大小(默认字节),以处理原始物理数据的读写。功能很强大。
语法:dd if=<inputfile> of=<outputfile> [bs=<n>] [count=<n>]
# dd if=/dev/sda of=/dev/sdb #复制一个磁盘/dev/sda的数据到另一个磁盘/dev/sdb # dd if=/dev/dvd of=dvd.iso #复制一个DVD光盘的数据到一个iso文件 # dd if=/dev/zero of=/dev/sda2 #擦除一个分区/dev/sda2的数据,/dev/zero是一个特殊文件,从中读取的内容都是空字符,它的一个典型用途就是提供用于初始化数据存储器的字符流 # dd if=/dev/zero of=/tmp/outfile bs=1024 count=1024 #创建一个1MB大小的文件,并且块大小为1024个字节 # dd if=/dev/sda of=/home/user1/MBR.image bs=512 count=1 #备份磁盘的主引导分区 #下面命令的组合可以用于设备的标准测试,并分析其在块大小为1024字节时的顺序读写的性能 # dd if=/dev/zero bs=1024 count=1000000 of=/home/user1/1Gb.file # dd if=/home/user1/1Gb.file of=/dev/null bs=64k #/dev/null是一个特殊文件,可以接受所有向它写入的数据,但读不出任何数据。所有想过滤掉的输出数据都可以重定向到这个文件
注:上述命令没有尝试
3. gzip、bzip2命令
gzip命令用于压缩文件,以减少文件的大小,便于传输,也可以用于解压缩文件。文件压缩所能减少的大小依赖于文件内容,如果是文本文件,用gzip压缩约减少60%~70%。
$ ls #查看目录下的文件 a.txt b.txt c.txt $ gzip a.txt #压缩指定的问题,生成默认以.gz结尾的文件并删除原始文件 $ ls #查看 a.txt.gz b.txt c.txt $ gzip -d a.txt.gz #使用-d选项解压缩指定的文件 $ ls a.txt b.txt c.txt $ gzip -c a.txt > a.txt.gz #使用-c选项,将压缩内容输出到标准输出,可使用重定向将输出内容写入到指定的文件,从而保留原始文件 $ ls a.txt a.txt.gz b.txt c.txt $ gzip -r . #使用-r选项,递归地压缩指定目录下的文件 gzip: ./a.txt.gz already exists; do you wish to overwrite (y or n)? y $ ls a.txt.gz b.txt.gz c.txt.gz $ gzip -rd . -h #使用-r和-d选项,递归地解压缩指定目录下的文件 $ ls a.txt b.txt c.txt $ gzip -1 a.txt #使用-#选项(#代表数字1~9),可指定gzip的压缩级别,-1表示最快速度但压缩率较低,-9表示最慢压缩速度但压缩率最好。默认级别是-6
bzip2命令也用于压缩和解压缩文件。与gzip相比,bzip2具有更好的压缩率,但速度稍慢。
$ ls #查看目录下的文件 a.txt b.txt c.txt $ bzip2 a.txt #压缩指定文件,生成一个默认以.bz2结尾的文件,并删除原始文件 $ ls a.txt.bz2 b.txt c.txt $ bzip2 -d a.txt.bz2 #解压缩指定文件 $ ls a.txt b.txt c.txt $ bzip2 -k a.txt #使用-k选项,压缩文件并保留原始文件 $ ls a.txt a.txt.bz2 b.txt c.txt $ bzip2 -df a.txt.bz2 #使用-f选项,覆盖已经存在的文件 $ ls a.txt b.txt c.txt $ bzip2 -6 a.txt #使用-#选项(#代表1~9)指定压缩级别,默认采用-9
4. gunzip、bunzip2命令
gunzip命令与gzip命令相对应,用于解压缩由gzip命令压缩的文件。作用与gzip -d选项相同。
$ ls #查看目录 a.txt.gz b.txt c.txt $ gunzip a.txt.gz #解压缩指定文件 $ ls a.txt b.txt c.txt $ gunzip -c a.txt.gz > a.txt #使用-c选项,将解压后的内容重定向到一个文件,以保留原始压缩文件 $ ls a.txt a.txt.gz b.txt c.txt
bunzip2命令与bzip2命令相对应,用于解压缩由bzip2命令压缩的文件。起作用与bzip2 -d选项相同。
$ ls #查看目录 a.txt.bz2 b.txt c.txt $ bunzip2 a.txt.bz2 #解压缩指定文件 $ ls a.txt b.txt c.txt $ bunzip2 -k a.txt.bz2 #使用-k选项,解压缩文件并保留原始文件 $ ls a.txt a.txt.bz2 b.txt c.txt
5. tar命令
tar命令是Linux系统中主要的归档工具。使用tar命令归档后生成的文件被称作tar包。
语法:tar [OPTION]... [FILE]...
$ tar -cvf test.tar test/ #创建一个未经压缩的tar包,-c:创建一个新的归档,-v:冗长地列出被处理的文件,-f:指定归档文件的名称 test/ test/a.txt test/b.txt test/c.txt $ ls test test.tar $ tar -czvf test.tar.gz test/ #结合-z选项,将归档后的文件使用gzip压缩 test/ test/a.txt test/b.txt test/c.txt $ ls test test.tar test.tar.gz $ tar -cjvf test.tar.bz2 test/ #结合-j选项,将归档后的文件使用bzip2压缩 test/ test/a.txt test/b.txt test/c.txt $ ls test test.tar test.tar.bz2 test.tar.gz $ tar -xvf test.tar #使用-xvf选项,解压缩一个归档文件 test/ test/a.txt test/b.txt test/c.txt $ tar -xvf test.tar test/a.txt #使用-xvf选项,从tar包中提取指定的文件或目录 test/a.txt $ ls test test.tar test.tar.bz2 test.tar.gz $ ls test a.txt #注意只提取出指定的文件 $ tar -xvf test.tar --wildcards '*.txt' #使用--wildcards配合-xvf选项,可以提取匹配指定模式的一组文件或目录 test/a.txt test/b.txt test/c.txt $ ls #查看目录 test.tar test.tar.bz2 test.tar.gz $ tar -xzvf test.tar.gz #结合-z选项,解压缩使用gzip压缩的tar包 test/ test/a.txt test/b.txt test/c.txt $ ls test a.txt b.txt c.txt $ tar -xzvf test.tar.gz test/a.txt #结合-z选项,从gzip压缩的tar包中提取指定文件或目录 test/a.txt $ ls test a.txt $ tar -xjvf test.tar.bz2 #结合-j选项,解压缩使用bzip2压缩的tar包 test/ test/a.txt test/b.txt test/c.txt $ ls test a.txt b.txt c.txt $ tar -xjvf test.tar.bz2 test/a.txt #结合-j选项,从bzip2压缩的tar包中提取指定文件或目录 test/a.txt $ ls test a.txt $ tar -tvf test.tar #使用-tvf选项,在不解包的情况下列出tar包文件中的内容 drwxrwxr-x user1/user1 0 2020-05-15 10:21 test/ -rw-rw-r-- user1/user1 19 2020-05-15 10:15 test/a.txt -rw-rw-r-- user1/user1 12 2020-05-15 09:36 test/b.txt -rw-rw-r-- user1/user1 6 2020-05-15 09:36 test/c.txt $ tar -tzvf test.tar.gz #使用-tvf选项结合-z选项,在不解包的情况下列出gzip压缩的tar包文件中的内容 drwxrwxr-x user1/user1 0 2020-05-15 10:21 test/ -rw-rw-r-- user1/user1 19 2020-05-15 10:15 test/a.txt -rw-rw-r-- user1/user1 12 2020-05-15 09:36 test/b.txt -rw-rw-r-- user1/user1 6 2020-05-15 09:36 test/c.txt $ tar -tjvf test.tar.bz2 #使用-tvf选项结合-j选项,在不解包的情况下列出bzip2压缩的tar包文件中的内容 drwxrwxr-x user1/user1 0 2020-05-15 10:21 test/ -rw-rw-r-- user1/user1 19 2020-05-15 10:15 test/a.txt -rw-rw-r-- user1/user1 12 2020-05-15 09:36 test/b.txt -rw-rw-r-- user1/user1 6 2020-05-15 09:36 test/c.txt $ tar -rvf test.tar d.txt #使用-rvf选项,可以添加文件或目录到一个已存在的tar包 d.txt $ tar -tvf test.tar drwxrwxr-x user1/user1 0 2020-05-15 10:21 test/ -rw-rw-r-- user1/user1 19 2020-05-15 10:15 test/a.txt -rw-rw-r-- user1/user1 12 2020-05-15 09:36 test/b.txt -rw-rw-r-- user1/user1 6 2020-05-15 09:36 test/c.txt -rw-rw-r-- user1/user1 14 2020-05-15 10:36 d.txt #注意不能将-r与-z、-j一同使用,即不能将文件或目录添加到一个压缩过的tar包,错误如: $ tar -rzvf test.tar.gz d.txt tar: Cannot update compressed archives Try `tar --help' or `tar --usage' for more information. $ tar -cWvf test.tar test #使用-W选项,核实tar包的内容,注意不能使用-W核实压缩过的tar包的内容 test/ test/a.txt test/b.txt test/c.txt Verify test/ Verify test/a.txt Verify test/b.txt Verify test/c.txt $ tar -tWvf test.tar #可核实tar包文件中的内容与文件系统中的内容是否存在差异 #注:该命令执行错误如下,未解决 tar: This does not look like a tar archive tar: Skipping to next header Verify -rw-rw-r-- user1/user1 6 2020-05-15 09:36 test/c.txt tar: Exiting with failure status due to previous errors $ tar -dvf test.tar #使用-d选项也可以比较tar包中的内容与文件系统中的内容的差异,但不具有核实功能 test/ test/a.txt test/b.txt test/c.txt $ tar -dvf test.tar.gz #使用-d选项也可以比较压缩后的tar包中的内容与文件系统中的内容的差异,但不具有核实功能 test/ test/a.txt test/a.txt: Mod time differs #此处发现更新时间有差异 test/b.txt test/c.txt
本节结束
欢迎大家评论交流,发现博文中存在的问题一定要留言哦

浙公网安备 33010602011771号