用 7zip 压缩和解压几乎任何格式
Windows 和 UNIX 各有多种流行的存档格式。Windows 常常使用 .zip 和 .cab 格式,UNIX 有 .tar、.cpio 和 .gzip 格式。UNIX 及其变体还使用 .rpm、.deb 和 .dmg。这些格式在网上都很常见,局面比较混乱。
为了以任意格式保存或解压数据,可以安装一大堆专用的实用程序,也可以安装 7zip。它是一种通用的转换器,可以压缩和解压任何存档。另外,7zip 还提供自己的格式,这种格式的压缩率比任何其他方案都高,容量限制达到 TB 级,支持强大的数据加密。
为了构建 7zip,需要从 SourceForge 上的项目页面下载 p7zip(7zip 的 UNIX 版本)的源代码(见 参考资料)。解压 tarball,进入源代码目录,运行 make。(与 multitail 相似,通用的 makefile 应该足够了;如果构建不成功,应该选择提供的专用 makefile 之一)。
$ wget http://voxel.dl.sourceforge.net/sourceforge/p7zip/\ p7zip_4.65_src_all.tar.bz2 $ tar xjf p7zip_4.65_src_all.tar.bz2 $ cd p7zip_4.65 $ make $ sudo make install |
构建过程会生成并安装实用程序 7za。输入不带参数的 7za,即可看到可用命令和选项的列表。与 tar 相似,每个命令都是一个字母,比如 a 在存档中添加文件,x 提取文件。
为了试试这个实用程序,以多种格式创建 p7zip 源代码的存档,然后用 7za 解压每个存档:
$ zip -r p7.zip p7zip_4.65 $ 7za -ozip x p7.zip $ tar cvf p7.tar p7zip_4.65 $ 7za -otar x p7.tar $ bzip2 p7.tar $ 7za -so x p7.tar.bz2 | tar tf - |
从上到下,7za 依次解压 .zip、.tar 和 .bz2 存档。在最后一个命令中,7za 解压 .bz2 存档并把输出写到 stdout,在这里 tar 解压文件并编制目录。与 tar 相似,7za 可以作为管道(|)的源或目的地,因此很容易与其他实用程序组合在一起。
用 zcat 查看压缩的文件
单个磁盘的容量现在已经超过了 1TB,但是大型数据文件、日志文件、图像以及电影等媒体文件很快就把磁盘装满了。为了节省空间,可以把许多文件压缩到原大小的几分之一。例如,Apache 日志文件(是简单的文本)可以压缩到原大小的十分之一。
尽管压缩可以节省磁盘空间,但是也会增加工作量。例如,如果需要分析压缩的 Apache 日志文件,就必须解压它,处理数据,然后重新压缩它。如果有大量日志文件(如果保留分析趋势所需的记录,这种情况很常见),那么开销会非常大。
幸运的是,gzip 套件包含许多可以 “在原地” 处理压缩文件的实用程序。zcat、zgrep、zless、zdiff 等实用程序的作用分别与 cat、grep、less 和 diff 相同,但是它们操作压缩的文件。
下面,用 gzip 压缩两个源代码文件并用 zdiff 进行比较:
$ cat old This is Monday. $ cat new This is Tuesday. $ gzip old new $ zdiff -c old.gz new.gz *** - 2009-03-30 22:26:34.518217647 +0000 --- /tmp/new.10874 2009-03-30 22:26:34.000000000 +0000 *************** *** 1,3 **** This is ! Monday. --- 1,3 ---- This is ! Tuesday. |
用 cURL 在 Internet 上做各种事情
以前的一期 “对话 UNIX” 推荐使用 wget 从命令行直接下载文件。在无法使用 Web 浏览器的情况下,在 shell 脚本中使用 wget 是非常合适的。例如,如果要在远程服务器上安装新软件,wget 确实可以节省时间。
如果您喜欢 wget,也一定会喜欢 cURL。与 wget 一样,cURL 可以下载文件,但是它还可以向 Web 页面表单提交数据、通过 File Transfer Protocol (FTP) 上传文件、作为代理、设置 Hypertext Transfer Protocol (HTTP) 头等等。cURL 在许多方面可以作为浏览器和其他客户机的命令行替代品。因此,它有许多潜在的应用。
通过常用的 ./configure && make && sudo make install 过程构建 cURL 实用程序。下载、解压并处理:
$ wget http://curl.haxx.se/download/curl-7.19.4.tar.gz $ tar xzf curl-7.19.4.tar.gz $ cd curl-7.19.4 $ ./configure && make && sudo make install |
cURL 实用程序有很多选项,最好通读它的手册页。下面是一些常见的 cURL 用法:
- 为了下载一个文件(比如 cURL tarball 本身),使用:
$ curl -o curl.tgz http://curl.haxx.se/download/curl-7.19.4.tar.gz
与 wget 不同,cURL 把它下载的东西发送到 stdout。使用 -o 选项把下载的东西保存到指定的文件。
- 为了下载大量文件,可以提供序列、集或同时提供这两者。序列 是放在方括号([])中的一个数字范围;集 是放在花括号({})中的逗号分隔的列表。例如,下面的命令从目录 archive1996/vol1 到 archive1999/vol4(含)下载名为 parta.html、partb.html 和 partc.html 的所有文件,共有 48 个文件。
$ curl http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html \ -o "archive#1_vol#2_part#3.html"
在指定序列或集时,可以提供 -o 选项和一个模板,模板中的 #1 替换为第一个序列或集的当前值,#2 是第二个序列或集的占位符,以此类推。另外,还可以提供 -O 选项以保持每个文件名不变。
- 为了把一组图像上传到服务器,可以使用 -T 选项:
$ curl -T "img[1-1000].png" ftp://ftp.example.com/upload/
在这里,把 img[1-1000].png 放在引号中,以避免 shell 解释它。这个命令把 img1.png 到 img1000.png 上传到指定的服务器和路径。
- 甚至可以用 cURL 在词典中查找单词:
$ curl dict://dict.org/d:stalwart 220 miranda.org dictd 1.9.15/rf on Linux 2.6.26-bpo.1-686 <auth.mime> <400549.18119.1238445667@miranda.org> 250 ok 150 1 definitions retrieved 151 "Stalwart" gcide "The Collaborative International Dictionary of English v.0.48" Stalwart \Stal"wart\ (st[o^]l"w[~e]rt or st[add]l"-; 277), Stalworth \Stal"worth\ (-w[~e]rth), a. [OE. stalworth, AS. staelwyr[eth] serviceable, probably originally, good at stealing, or worth stealing or taking, and afterwards extended to other causes of estimation. See {Steal}, v. t., {Worth}, a.] Brave; bold; strong; redoubted; daring; vehement; violent. "A stalwart tiller of the soil." --Prof. Wilson. [1913 Webster] Fair man he was and wise, stalworth and bold. --R. of Brunne. [1913 Webster] Note: Stalworth is now disused, or but little used, stalwart having taken its place. [1913 Webster] . 250 ok [d/m/c = 1/0/20; 0.000r 0.000u 0.000s] 221 bye [d/m/c = 0/0/0; 0.000r 0.000u 0.000s]
把单词 stalwart 替换为您要查找的单词。
除了通过命令行使用之外,还可以通过 libcurl 库使用 cURL 的所有功能。许多编程语言包含 libcurl 的接口,可以自动执行通过 FTP 传输文件等任务。例如,下面的 PHP 片段使用 libcurl 把通过表单上传的文件存放到 FTP 服务器上: