对话 UNIX,第 7 部分: 命令行惯用语( 三 )


不要删除重复的文件
文件管理是使用 Unix 系统时非常重要的工作 。系统中包含大量的配置文件 。您可能拥有非常多的数据文件和个人文件 。您可能不时地需要删除或覆盖某个有价值的文件 。Shell 和一些文件管理实用工具可以帮助您避免灾难 。
在 Shell 提示符处输入下面的命令 。这些命令可以在 bash 中执行,但 zsh 和其他 Shell 也具有类似的选项 。
$ alias mv=mv -i
$ alias rm=rm -i
$ set -o noclobber
前两个命令分别在命令行中将 mv 替换为 mv -i、将 rm 替换为 rm -i 。交互式的模式强制您对操作进行确认 。
第三个命令在 Shell 中提供了一定的安全性 。启用了 noclobber 之后,您就不会一不小心使用 > 重定向操作符覆盖某个文件:
$ ls
secret.txt
$ cat > secret.txt
bash: secret.txt: cannot overwrite existing file
要禁用 noclobber,可以输入:seto noclobber
。您还可以在任何时候使用 >|(一个小于号加上一个竖线)重定向操作符强制进行覆盖 。
$ cat secret.txt
I love green eggs and ham.
$ echo "No more secrets" >| secret.txt
$ cat secret.txt
No more secrets
关于本地的一些秘密
如果您真的希望发现一个城市,那么您得到当地的公众聚谈之处走访一下 。下面是一些命令行的组合,相当于提供旅游资讯的 Zagat 。
mkdir -p 可以快速地创建层次结构 。使用 -p 选项后,mkdir 将为指定路径创建所有的目录和子目录:
$ mkdir -p make/many/DirectorIEs/at/once
$ ls -R
./make:
many
./make/many:
directories
./make/many/directories:
at
./make/many/directories/at:
once
./make/many/directories/at/once:
如果您需要了解下一个发薪日的时间,只需要输入 cal 。不带任何参数时,cal 将显示当前月份的日历 。cal -3 命令显示上个月、这个月和下个月的日历,而 cal 06 2009 将显示 2009 年 6 月的日历 。(我的生日是那一年的某个星期一!)
$ cal
November 2006
Su Mo Tu We Th Fr Sa
 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
$ cal 06 2009
June 2009 
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
因为 Unix 具有许多命令,所以不太可能记住所有实用工具的所有选项 。事实上,有时候甚至记不住实用工具的名称 。
在遇到困难时,可以求助于 man 。例如,要查看如何使用 man 本身,可以输入 man man 。使用 man rm 和 man mv,您还可以查看有关 rm 和 mv 的解释 。并且,如果清楚需要查找的主题,那么您可以使用 man -k 查找与该主题相关的 man 页面列表 。
$ man -k cron
cron (8) - daemon to execute scheduled commands (VixIE Cron)
crontab (1) - maintain crontab files for individual users (V3)
crontab (5) - tables for driving cron
dh_installcron (1)- install cron scripts into etc/cron.*
在本示例中,man 找出了一些实用工具的 man 页面,其中有一行描述内容中包含单词 cron 。这些 man 页面中可能解释了如何使用 cron,这是一个负责系统任务调度的守护进程 。
那么其中的数值代表什么含义呢?每个数值表示联机 Unix 手册中的一个部分 。第 1 部分保留用于 UNIX 用户可以在 Shell 中运行的所有命令 。第 5 部分描述了一些文件格式 。第 8 部分对系统管理命令进行了编目 。其他的部分描述了系统调用 (2)、库调用 (3),等等 。
正如您所看到的,大多数命令都会产生某类输出 。大多数命令行命令使用标准输出来显示结果 。但其他的一些命令则使用标准输出和标准错误,并按顺序显示处理过程和错误消息 。如果您希望忽略这类输出(这是非常有价值的,因为它通常可以干预命令行中执行的操作),那么可以将输出重定向到 UNIX bit bucket,/dev/null 。这些位只能进,不能出 。

推荐阅读