Jade Dungeon

Linux压缩与散列

散列

echo "yangpan220" | md5sum

注意上面的echo会自动加上一个回车。可以用-n去掉:

echo -n 'yangpan220' | md5sum

rar

unrar e file.rar                # 解压rar

tar

磁带归档(Tape Archive),对创建一些文件的的归档和它们的解压很有用。

root@tecmint:~# tar -zxvf abc.tar.gz 
root@tecmint:~# tar -jxvf abc.tar.bz2 
root@tecmint:~# tar -cvf archieve.tar.gz(.bz2) /path/to/folder/abc
  1. c – create a archive file.
  2. x – extract a archive file.
  3. v – show the progress of archive file.
  4. f – filename of archive file.
  5. t – viewing content of archive file.
  6. j – filter archive through bzip2.
  7. z – filter archive through gzip.
  8. r – append or update files or directories to existing archive file.
  9. W – Verify a archive file.
  10. wildcards – Specify patters in unix tar command.

创建归档

tar cvf archive.tar file1 file2 file3
  1. c – Creates a new .tar archive file.
  2. v – Verbosely show the .tar file progress.
  3. f – File name type of the archive file.

创建.tar.gzz代表了.tar.gz使用gzip压缩。

tar cvzf MyImages-14-09-12.tar.gz /home/MyImages
# OR
tar cvzf MyImages-14-09-12.tgz    /home/MyImages

创建tar.bz2j代表了.tar.bz2使用bzip压缩,它压缩的更好但是也更慢。

tar cvfj Phpfiles-org.tar.bz2 /home/php
# OR
tar cvfj Phpfiles-org.tar.tbz /home/php
# OR 
tar cvfj Phpfiles-org.tar.tb2 /home/php

列出归档文件内容

t列出文件:

tar tvf archive.tar
tar tvf Phpfiles-org.tar.bz2
tar tvf staging.tecmint.com.tar.gz

从归档中取出文件

x解压:

tar xvf archive.tar
tar xvf thumbnails-14-09-12.tar.gz # gz 也一样
tar xvf videos-14-09-12.tar.bz2    # bz2也一样

# `-C`解压到指定目录
tar -xvf public_html-14-09-12.tar -C /home/public_html/videos/

只提取单个文件:

tar  -xvf cleanfiles.sh.tar    cleanfiles.sh
tar -zxvf tecmintbackup.tar.gz tecmintbackup.xml
tar -jxvf Phpfiles-org.tar.bz2 home/php/index.php
# OR
tar --extract --file=cleanfiles.sh.tar    cleanfiles.sh
tar --extract --file=tecmintbackup.tar.gz tecmintbackup.xml
tar --extract --file=Phpfiles-org.tar.bz2 /home/php/index.php

提取多个文件:

tar  -xvf tecmint-14-09-12.tar     "file 1" "file 2" 
tar -zxvf MyImages-14-09-12.tar.gz "file 1" "file 2" 
tar -jxvf Phpfiles-org.tar.bz2     "file 1" "file 2"

通过--wildcards提取指定模式的文件:

tar  xvf archive.tar          --wildcards '*.c' 
tar  xvf Phpfiles-org.tar     --wildcards '*.php'
tar zxvf Phpfiles-org.tar.gz  --wildcards '*.php'
tar jxvf Phpfiles-org.tar.bz2 --wildcards '*.php'

添加文件到归档中

r(append)添加文件到归档中:

tar -rvf tecmint-14-09-12.tar xyz.txt
tar -rvf tecmint-14-09-12.tar php

但是 不能 添加文件到压纹文件.tar.gz.tar.bz2,会 报错

$ tar -rvf MyImages-14-09-12.tar.gz xyz.txt
tar: This does not look like a tar archive
tar: Skipping to next header
xyz.txt
tar: Error exit delayed from previous errors

对归档中的文件进行更新

假如归档的newfile.c要比先前已经归档的新,则添加更新的newfile.c到归档里面

tar uvf archive.tar newfile.c

从归档中删除文件

tar --delete -f archive.tar file1.c

验证归档压缩文件

W(verify)验证归档文件(.tar.tar.gz.tar.bz2)完整性:

tar tvfW tecmint-14-09-12.tar

检查归档大小,以KB为单位:

$ tar -czf - tecmint-14-09-12.tar     | wc -c
12820480

$ tar -czf - MyImages-14-09-12.tar.gz | wc -c
112640

$ tar -czf - Phpfiles-org.tar.bz2     | wc -c
20480

把归档文件分成多个部分

分割文件只能作为于一个文件,如果有多个文件的话要先压成一个。

先压缩文件:

tar -zcvf hello.tar.gz hello

压缩文件太大了要分分割:

split -b 100M -d -a 1 hello.tar.gz hello.tar.gz.

命令对文件进行分割。其中:

  • -b--bytes=SIZE:指定每个分割文件的大小,单位有KMGP
  • -d--numeric-suffixes:指定分割文件的后缀为数字
  • -a--suffix-length=N:指定分割文件数字后缀的长度,如果是1,后缀为0,1,2…;如果是2,则为00,01,02…默认是2
  • -C--line-bytes=SIZE:指定每行最大的字节数
  • -l--lines=NUMBER:指定每个文件最大的行数

解压时先拼成一个:

cat hello.tar.gz.* > hello.tar.gz
tar -xvf hello.tar.gz

也可以直接用管道:

cat hello.tar.gz.* | tar -zxv

gzip

压缩文件

每个文件将被单独压缩

gzip file(s)

通常在压缩完成后,它会将原来的文件删除。我们可以使用-c选项来保留原来的文件:

gzip -c file > file.gz

将一组文件压缩到一个单独的文件中:

cat file1 file2 file3 | gzip > archieve.gz

-i检查压缩比

gzip -l archieve.gz

解压文件

gunzip -c archieve.gz

bzip2

压缩文件

一般情况下,针对压缩而言,Bzip2 不用什么选项,将被压缩的文件被传递为它的参数。 每个文件被单独压缩,且压缩文件以 ‘bz2′ 为后缀名。

bzip2 file1 file2 file3

使用-k选项可以使得在压缩或解压缩之后保留原有的文件:

bzip2 -k fil1 file2 file3

解压

-d选项被用来解压缩:

bzip2 -d file1.bz2

7z

里包含 3 个二进制文件: 7z, 7za 和 7zr,区别可参考: p7zip.wiki

创建归档

7zr a archive-name.7z file-name(s) / directory-name(s)

列出归档包含文件

7zr l archive-name.7z

提取归档文件

7zr e archive-name.7z

更新归档文件

7zr u archive-name.7z new-file

从归档文件中删除文件

7zr d archive-name.7z file-to-be-deleted

zip

zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。

压缩

我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip

zip -r yasuo.zip abc.txt dir1

解压

我下载了一个yasuo.zip文件,想解压缩:

unzip yasuo.zip

编码问题

如果中文有乱码,注意编码:

unzip -O CP936 xxx.zip # 用GBK, GB18030也可以

但是,有些发行版所带的 unzip 没有这个参数,比如 ArchLinux 就需要安装 unzip-iconv。

我当前目录下有abc1.zipabc2.zipabc3.zip,我想一起解压缩它们:

unzip abc\?.zip
  • ?表示一个字符
  • *表示任意多个字符。

查看内容

我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:

unzip -v large.zip

验证文件

我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了:

unzip -t large.zip

我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是 歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

unzip -j music.zip

暴力破解密码

sudo apt-get install fcrackzip 
fcrackzip -v -b -u -c a -p aaaaa test.zip 
  • -v就是可以看到更多的信息
  • -b暴力破解
  • -u用zip去尝试
  • -c指定字符 a 就是说明密码是由小写字母组成的
  • -p弄一个初始化的密码 aaaaaa 如果是纯数字000000 当然这里的长度都是6