根据您使用的 UNIX 风格不同,有时候必须安装新的软件包。可以从源代码构建它们,如果包管理软件提供等效的二进制包,也可以直接安装,这会节省时间和精力。例如,如果使用 Debian 风格的 Linux®,那么可以使用 apt-get 直接安装本期讨论的许多实用程序。
用 apropos 寻找命令
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 在描述中搜索指定的关键字。关键字可以是字面值(比如 calculator),也可以是正则表达式(比如 calc*)。如果使用后一种形式,那么一定要把表达式放在引号("")中,以防止 shell 解释特殊字符:
$ 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,就会进入交互模式,可以编写和运算 Reverse Polish Notation (RPN) 表达式:
$ dc 5 6 * 10 / p 3 |
但是,可以在命令行上做所有这些工作。指定 -e 选项并提供要运算的表达式。同样,要把表达式放在引号中,以防止 shell 解释它:
$ dc -e "5 6 * 10 /"
3
|
用 pgrep 寻找进程
您可能无数次使用 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 等效。
用 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 查看许多文件
无论您是调试新代码的开发人员,还是监视系统的系统管理员,都常常需要同时查看许多东西。如果您是开发人员,为了寻找 bug,可能要查看调试日志和 stdout;如果您是管理员,可能要根据需要调整策略活动。这些任务常常需要在屏幕上显示许多窗口;例如,在一个窗口中执行 tail,在另一个窗口中执行 less,在第三个窗口中显示命令提示。
如果必须同时监视多个文件,那么可以考虑使用 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。命令的完整列表见 multitail 的手册页。