就像白话,UNIX工具的领域几乎是永恒的。 新工具经常出现,而其他工具则经过了长期现代化和调整,以适应新兴的最佳实践。 某些工具是常用的。 其他的则很少使用。 一些工具是多年生的。 有时,有些会被彻底淘汰。 要流畅地讲UNIX,您必须跟上“行话”。
表1列出了先前在Speaking UNIX系列中讨论的11个重要软件包。
表1.杰出的UNIX工具
名称 | 目的 |
---|---|
西格温 | Windows®操作系统的类UNIX外壳和构建环境。 |
鱼 | 高度交互的外壳程序,具有自动扩展功能,并为命令名,选项和文件名提供彩色语法。 |
locate | 建立和搜索所有文件的数据库 |
rename | 批量重命名大量文件 |
rsync | 在本地和远程有效地同步文件和目录 |
屏幕 | 创建和管理虚拟的持久控制台 |
松鼠 | 跨平台脚本外壳 |
tac | 以相反的顺序打印输入,最后一行是第一行( tac 是cat 的反面) |
type | 显示命令是别名,可执行文件,内置的shell还是脚本 |
wget | 使用命令行下载文件 |
sh | 具有自动完成功能,高级重定向操作数和高级替换的高级Shell |
本月,让我们看一下在现有或知名度更高的UNIX软件包上进行扩展或改进的10种实用程序和应用程序。 从通用存档翻译器到高速Web服务器,该列表涉及范围很广。
在某些情况下,根据您的UNIX风格,您将必须安装新的软件包。 您可以按照指示从源进行构建,或者,如果软件包管理软件提供了等效的二进制捆绑软件,则可以节省时间和精力。 例如,如果您使用Debian风格的Linux®,则可以使用apt-get
直接安装本月提到的许多实用程序。
查找带有适当内容的命令
UNIX有太多命令,很容易忘记实用程序的名称,特别是如果您不经常使用该工具的话。 如果您发现自己想尝试重新命名时抓挠头,请运行apropos
(或等效的man -k
)。 例如,如果您要寻找一个计算器,只需键入apropos calculator
即可:
$ apropos calculator
bc (1) - An arbitrary precision calculator language
dc (1) - An arbitrary precision calculator
bc
和dc
都是命令行计算器。
每个UNIX手册页都有简短的描述,并且apropos
在描述的语料库中搜索指定关键字的实例。 关键字可以是文字,例如计算器,也可以是正则表达式,例如calc*
。 如果使用后一种形式,请确保将表达式包装在引号( ""
)中,以防止外壳程序解释特殊字符:
$ apropos "calcu*"
allcm (1) - force the most important Computer-Modern-fonts to be calculated
allec (1) - force the most important Computer-Modern-fonts to be calculated
allneeded (1) - force the calculation of all fonts now needed
bc (1) - An arbitrary precision calculator language
dc (1) - An arbitrary precision calculator
在命令行上运行计算
如上所示, dc
是每个UNIX系统上都能找到的功能强大的计算器。 如果在不带参数的情况下运行dc
,则将进入“交互”模式,您可以在其中编写和评估反向波兰表示法(RPN)表达式:
$ dc5
6
*
10
/
p
3
但是,您可以直接在命令行上完成所有工作。 指定-e
选项并提供要求值的表达式。 同样,将表达式用引号引起来,以防止shell进行插值:
$ dc -e "5 6 * 10 /"
3
使用pgrep查找进程
您搜寻过多少次使用ps aux | grep ...
ps aux | grep ...
可能无数次。 当然可以,但是有一种更有效的方法来搜索过程。 尝试pgrep
。
举例来说,此命令查找strike登录shell的所有实例,(其中strike是用户名):
$ pgrep -l -u strike zsh
10331 zsh
10966 zsh
pgrep
命令提供了用于通过用户名(显示的-u
),进程组,组等过滤进程的选项。 配套实用程序pkill
接受pgrep
所有选项,并接受信号发送给与给定条件匹配的所有进程。
例如,命令pkill -9 -u strike zsh
等效于pgrep -u strike zsh | xargs kill -9
pgrep -u strike zsh | xargs kill -9
。
使用pwgen生成安全密码
实际上,UNIX中的每个重要子系统都需要使用自己的密码。 为了发挥作用,电子邮件,远程登录和超级用户特权都需要输入密码-最好是完全不同的密码,并且每个密码都很难用自动攻击来猜测或得出。 此外,如果要开发脚本来生成帐户,则需要可靠的随机,安全密码源。
pwgen
实用程序是用于生成密码小滴的小型实用程序。 您可以将密码设置为具有纪念意义或安全性,并可以指定是否包括数字,符号,元音和大写字母。
许多UNIX系统都有pwgen
。 如果没有,则构建起来很简单:
$ # As of March 2009, the latest version is 2.06
$ wget http://voxel.dl.sourceforge.net/sourceforge/\
pwgen/pwgen-2.06.tar.gz
$ tar xzf pwgen-2.06.tar.gz
$ cd pwgen-2.06
$ ./configure && make && sudo make install
以下是一些示例用法:
- 打印易于记忆的密码集合:
$ pwgen -C ue2Ahnga Soom0Lu0 Hie8aiph gei9mooD eiXeex7N Wid4Ueng taShee3v Ja3shii8 iNg0viSh iegh5ouF ... zoo8Ahzu Iefev0ch MoVu4Pae goh1Ak6m EiJup5ei
- 生成一个安全的密码:
$ pwgen -s -1 oYvy9WWa
- 生成一个安全,无歧义或不容易混淆的字符以及至少一个非字母数字字符的安全密码:
$ ./pwgen -s -B -1 -y 7gEqT_V[
要查看所有可用选项,请键入pwgen --help
。
观看多尾文件
无论您是调试新代码的开发人员,还是监视系统的系统管理员,您通常都必须同时关注许多事情。 如果您是开发人员,则可能会看到调试日志和标准输出以查找错误。 如果您是管理员,则可能需要根据需要对活动进行干预。 通常,这两个任务都需要在屏幕上平铺许多窗口以保持警惕-可能在一个窗口中出现尾巴,在另一个窗口中出现较少的尾巴,而在另一个窗口中出现命令提示符。
如果必须一次监视多个文件,请考虑multitail
。 顾名思义,该实用程序将控制台窗口分为多个部分,每个日志文件一个部分。 更好的是, multitail
可以为众所周知的格式着色(您也可以定义自定义配色方案),并且可以将多个文件合并为一个流。
要构建multitail
,请下载源代码,将其解压缩,然后运行make
。 (发行版的通用makefile中的选项对于大多数UNIX系统而言就足够了。如果make
失败,请在最顶层目录中查找特定于您系统的makefile。)
# As this article was written, the latest version of multitail was 5.2.2
$ wget http://www.vanheusden.com/multitail/multitail-5.2.2.tgz
$ tar xzf multitail-5.2.2.tgz
$ cd multitail-5.2.2
$ make
$ sudo make install
下面是一些使用multitail
考虑:
- 要在同一窗口中查看日志文件列表,请使用文件名列表启动实用程序,如
multitail /var/log/apache2/{access,error}.log
。 - 要在同一窗口中观看一对文件并缓冲所有读取的内容,请使用
-I
选项将命名文件合并到另一个文件中,如multitail -M 0 /var/log/apache/access.log -I /var/log/apache/error.log
。 在这里,Apache错误日志和访问日志被插入。-M 0
记录所有传入的数据; 您可以随时按B键查看缓冲区。 - 您还可以混合和匹配命令和文件。 要查看日志文件并监视
ping
的输出,请尝试multitail logfile -l "ping 192.168.1.3"
。 这将在同一控制台中创建两个视图:一个视图显示logfile
的内容,而另一个视图显示ping 192.168.1.3
的当前输出。
除了命令行选项之外, multitail
还提供了一系列交互式命令来影响显示的当前状态。 例如,在显示屏上按A键添加一个新的日志文件。 B键显示保存缓冲区。 Q键退出multitail
。 有关多尾的完整命令列表,请参见手册页。
使用7zip压缩和提取几乎所有内容
仅在Windows和UNIX之间,就有数十种流行的存档格式。 例如,Windows长期以来具有.zip和.cab,而UNIX长期具有.tar,.cpio和.gzip。 UNIX及其变体还使用.rpm,.deb和.dmg。 所有这些格式通常都可以在网上找到,这使人难以置信。
要以任何特定格式保存或提取数据,可以安装一系列专用工具,也可以安装7zip
,这是一种通用压缩程序,可以压缩和提取几乎所有存档。 此外, 7zip
还提供了自己的格式,其压缩率比任何其他方案都要高,巨大的容量达到TB,并具有强大的数据加密功能。
为了构建7zip
,下载源p7zip
的端口7zip
到UNIX,从SourceForge上的项目页面(请参见相关主题 )。 解压缩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查看压缩文件
现在,每个磁盘的容量已超过TB,但是磁盘仍然可以快速填充大型数据文件,冗长的日志文件,图像以及诸如电影之类的媒体文件。 为了节省空间,可以将许多文件压缩到其原始大小的一小部分。 例如,Apache日志文件(仅是文本)可以缩小到其原始大小的十分之一。
尽管压缩可以节省磁盘空间,但可以增加工作量。 例如,如果需要分析压缩的Apache日志文件,则必须将其解压缩,处理数据,然后重新压缩。 如果您有大量的日志文件(如果保留记录以建立趋势,这是典型的做法),则开销可能会变得过大。
幸运的是, gzip
套件包含许多实用程序,可以在原位处理压缩文件。 zcat
, zgrep
, zless
和zdiff
等实用程序分别具有与cat
, grep
, less
和diff
相同的目的,但它们在压缩文件上运行。
在这里,使用gzip
压缩了两个源文件,并与zdiff
进行了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使世界和平
先前的Speaking UNIX专栏文章建议wget
直接从命令行下载文件。 wget
非常适合shell脚本,非常适合那些wget
无法访问Web浏览器的情况。 例如,如果您尝试在远程服务器上安装新软件,则wget
可以真正节省生命。
如果您喜欢wget
,那么您会喜欢cURL的。 像wget
一样,cURL可以下载文件,但是它也可以将数据发布到Web表单中,通过文件传输协议(FTP)上传文件,充当代理,设置超文本传输协议(HTTP)标头,以及很多其他功能。更多。 在许多方面,cURL是浏览器和其他客户端的命令行替代。 因此,它具有许多潜在的应用。
可使用try-and-true的./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
括在引号中,以防止外壳解释模式。 此命令将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替换为您要定义的单词。
除了其命令行个性外,所有cURL的功能都可以从一个名为libcurl的库中获得。 许多编程语言都包含libcurl的接口,以自动化任务,例如通过FTP传输文件。 例如,此PHP代码段使用libcurl将通过表单上传的文件存放到FTP服务器:
<?php
...
$ch = curl_init();
$localfile = $_FILES['upload']['tmp_name'];
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_URL,
'ftp://ftp_login:password@ftp.domain.com/'.$_FILES['upload']['name']);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
$error_no = curl_errno($ch);
curl_close ($ch);
...
?>
如果您必须自动化任何类型的Web访问,请考虑使用cURL。
SQLite:大多数情况下的数据库
UNIX提供了许多数据库,其中许多是开源的,有些是用于通用的,有些是高度专业的。 但是,大多数数据库往往是大型的独立应用程序(例如,MySQL需要单独安装,某些配置以及自己的守护程序),并且对于大多数软件来说可能过头了。 考虑一下台式机的通讯录附件:部署MySQL以保留姓名和电话号码是否合适? 可能不是。
如果应用程序打算在非常小的设备或适度的计算机上运行,该怎么办? 这种硬件可能不适合多处理,大内存占用或对物理存储的大量需求。 当然,嵌入式数据库是替代方法。 通常,嵌入式数据库打包为库,并直接链接到应用程序代码。 这种解决方案使应用程序独立于外部服务,尽管要付出一定的代价:查询通常不是用结构化查询语言(SQL)表示的。
SQLite融合了世界上最好的软件:该软件很小,您可以将其嵌入几乎任何应用程序中,并且可以使用原始SQL查询数据。 与Apple iPhone一样,PHP和Ruby on Rails使用SQLite作为默认存储引擎。
要构建SQLite,请从SQLite下载页面下载源合并(将所有源合并成一个文件),将其解压缩,然后运行./configure && make && sudo make install
。
$ # As of March 2009, the latest version was 3.6.11.
$ wget http://www.sqlite.org/sqlite-amalgamation-3.6.11.tar.gz
$ tar xzf sqlite-amalgamation-3.6.11.tar.gz
$ cd sqlite-3.6.11
$ ./configure && make
$ sudo make install
该构建产生一个库和相关的应用程序编程接口(API)头文件,以及一个名为sqlite3的独立命令行实用程序,该实用程序对于探索功能很有用。 要创建数据库,请启动带有数据库名称的sqlite3。 您甚至可以将SQL直接放在命令行上,这非常适合编写脚本:
$ sqlite3 comics.db "CREATE TABLE issues \
(issue INT PRIMARY KEY, \
title TEXT NOT_NULL)"
$ sqlite3 comics.db "INSERT INTO issues (issue, title) \
VALUES ('1', 'Amazing Adventures')"
$ sqlite3 comics.db "SELECT * FROM issues"
1|Amazing Adventures
第一个命令创建数据库(如果尚不存在)以及具有两列,发行号和标题的表。 中间命令插入一行,最后一条命令显示表的内容。
SQLite提供触发器,日志记录和序列。 SQLite也是无类型的,除非您指定类型。 例如,声明的issues
表可以在没有类型的情况下正常工作:
$ sqlite3 comics.db "create table issues (issue primary key, title)"
$ sqlite3 comics.db "INSERT INTO issues (issue, title) \
VALUES (1, 'Amazing Adventures')"
$ sqlite3 comics.db "SELECT * FROM issues"1|Amazing Adventures
缺少类型被认为是功能,而不是错误,并且具有许多应用程序。
抢购XAMPP,现成的Web堆栈
如果要将UNIX机器用作Web服务器,则有很多选择来组成Web堆栈。 当然,这里有Apache HTTP Server,MySQL,Perl,PHP,Python和Ruby on Rails,本文推荐了一些您以前可能没有听说过的组件,包括SQLite和lighttpd。
但是从头开始构建堆栈并不是每个人的功劳。 有时会配置Apache和其他软件包进行互操作,这很令人头疼,您可能不希望自己自己维护源代码,每次发行新补丁时都要重新编译。 出于这些良好的原因,您可能会选择现成的堆栈。 只需安装并开始!
XAMPP是您可以在线找到的许多预打包Web堆栈之一。 它包括Apache以及MySQL,PHP和Perl的兼容版本。 XAMPP的版本适用于Linux,Sun Solaris,Windows和Mac OSX。下载XAMPP并将其解压缩并启动:
# The latest version for Linux was 1.7
$ wget http://www.apachefriends.org/download.php?xampp-linux-1.7.tar.gz
$ sudo tar xzf xampp-linux-1.7.tar.gz -C /opt
$ sudo /opt/lampp/lampp start
Starting XAMPP 1.7...
LAMPP: Starting Apache...
LAMPP: Starting MySQL...
LAMPP started.
第二个命令提取XAMPP分发并将其直接放在/ opt中(因此需要在命令前加上sudo
。如果要将XAMPP放在其他位置,请将参数更改为-C
。最后一个命令启动Apache和MySQL,这两个命令网站服务所需的守护程序要测试安装,只需将浏览器指向http:// localhost,您应该会看到类似图1的内容 。
图1. XAMPP堆栈开始页面
![XAMPP堆栈开始页面](https://i-blog.csdnimg.cn/blog_migrate/2ef406e802cc8285be6ed483bde54d3b.png)
单击状态以查看运行情况。 XAMPP提供phpMyAdmin和webalizer来分别在服务器上创建和管理MySQL数据库并测量Web流量。
顺便说一下,XAMPP还将整个源代码提供给堆栈,因此您可以应用自定义项,也可以根据需要将其添加到堆栈中。 如果没有其他问题,如果您最终想自己解决或定制该过程,XAMPP源代码将揭示如何构建堆栈。
轻装Lighttpd服务器
XAMPP及其类似的许多软件包打包了Apache HTTP Server。 当然,Apache确实有能力-从大多数方面来看,它仍然为全球大多数站点提供支持-并且有大量扩展可用于添加批发子系统并与编程语言紧密集成。
但是Apache并不是唯一可用的Web服务器,在某些情况下,它不是可取的。 复杂的Apache实例可能需要占用大量内存,从而限制了吞吐量。 此外,与返回相比,即使是很小的Apache实例也可能过多。
“安全性,速度,合规性和灵活性”描述了lighttpd(发音为“ lighty”),它是Apache的一种小型且非常有效的替代方案。 更好的是,lighttpd配置文件不是Apache的麻烦所在。
从头开始构建lighttpd涉及更多,因为它依赖于其他库。 至少,您需要Perl兼容正则表达式(PCRE)库和Zlib压缩库的开发版本(包括头文件的版本)。 在安装了这些库(或从头开始构建了库)之后,编译lighttpd很简单:
$ # Lighttpd requires libpcre3-dev and zlib1g-dev
$ wget http://www.lighttpd.net/download/lighttpd-1.4.22.tar.gz
$ tar xzf lighttpd-1.4.22.tar.gz
$ cd lighttpd-1.4.22
$ ./configure && make && sudo make install
接下来,您必须创建一个配置。 最小的配置可能会设置文档根目录,服务器端口,一些多用途Internet邮件扩展(MIME)类型以及守护程序的默认用户和组:
server.document-root = "/var/www/lighttpd/host1"
server.groupname = "www"
server.port = 3000
server.username = "www"
mimetype.assign = (
".html" => "text/html",
".txt" => "text/plain",
".jpg" => "image/jpeg",
".png" => "image/png"
)
static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc" )
index-file.names = ( "index.html" )
假设您将文本保存到名为/opt/etc/lighttpd.conf的文件中,则可以使用lighttpd -D -f /opt/etc/lighttpd.conf
启动lighttpd。
像Apache一样,lighttpd可以服务虚拟主机。 使用条件语句仅需三行:
$HTTP["host"] == "www2.example.org" {
server.document-root = "/var/www/lighttpd/host2
}
在此,如果主机名为www2.example.org,则使用备用文档根。
Lighttpd尤其擅长管理大量并行请求。 您可以轻松地将lighttpd与Rails,PHP等混合使用。
更好,更智能,更快
另一个“讲UNIX”即将结束。 拆下那些键盘,启动Wi-Fi,然后开始下载!
翻译自: https://www.ibm.com/developerworks/aix/library/au-spunix_greattools/index.html