对话 UNIX 适用于任何 UNIX 系统的 10 个出色的工具.docx
- 文档编号:12156987
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:18
- 大小:76.39KB
对话 UNIX 适用于任何 UNIX 系统的 10 个出色的工具.docx
《对话 UNIX 适用于任何 UNIX 系统的 10 个出色的工具.docx》由会员分享,可在线阅读,更多相关《对话 UNIX 适用于任何 UNIX 系统的 10 个出色的工具.docx(18页珍藏版)》请在冰点文库上搜索。
对话UNIX适用于任何UNIX系统的10个出色的工具
UNIX®工具一直在变化。
本文介绍10个有用的工具,其中一些是您以前可能不太关注的工具,一些是新工具。
与日常用语一样,UNIX工具一直在变化。
经常会出现新工具,同时老工具常常会改进以适应新的最佳实践。
一些工具非常常用,其他工具不太常用。
一些工具经久不衰,有些工具完全过时了。
为了顺畅地操作UNIX,您必须了解最新的“行话”。
表1 列出了 对话UNIX 系列中以前讨论过的11个重要的软件包。
表1.重要的UNIX工具
名称
用途
Cygwin
一种适用于Windows®操作系统的与UNIX相似的shell和构建环境
fish
一种交互性很强的shell,具有针对命令名、选项和文件名的自动展开和语法彩色标记功能
locate
构建并搜索所有文件的数据库
rename
对大型文件集合进行批量重命名
rsync
高效地本地或远程同步文件和目录
Screen
创建和管理虚拟的持久的控制台
Squirrel
一种跨平台的脚本编程shell
tac
以相反的次序输出输入,首先输出最后一行(tac 的作用与 cat 相反)
type
判断一个命令是别名、可执行程序、内置的shell还是脚本
wget
使用命令行下载文件
zsh
一种高级的shell,提供自动补全、高级的操作数重定向和高级替换
在这一期中,我们讨论另外10个实用程序和应用程序,它们可以扩展或改进现有的更著名的UNIX包。
它们涉及从通用存档转换器到高速Web浏览器的多个领域。
根据您使用的UNIX风格不同,有时候必须安装新的软件包。
可以从源代码构建它们,如果包管理软件提供等效的二进制包,也可以直接安装,这会节省时间和精力。
例如,如果使用Debian风格的Linux®,那么可以使用 apt-get 直接安装本期讨论的许多实用程序。
用apropos寻找命令
UNIX的命令太多了,所以很容易忘记某个实用程序的名称;对于不常使用的工具,尤其可能出现这种情况。
如果您正在努力回想一个命令名,那么试试 apropos(或等效的 man-k)。
例如,如果您要找一个计算器,那么只需运行 aproposcalculator:
$aproposcalculator
bc
(1)-Anarbitraryprecisioncalculatorlanguage
dc
(1)-Anarbitraryprecisioncalculator
bc 和 dc 都是命令行计算器。
每个UNIX手册页都有简短的描述,apropos 在描述中搜索指定的关键字。
关键字可以是字面值(比如 calculator),也可以是正则表达式(比如 calc*)。
如果使用后一种形式,那么一定要把表达式放在引号("")中,以防止shell解释特殊字符:
$apropos"calcu*"
allcm
(1)-forcethemostimportantComputer-Modern-fontstobecalculated
allec
(1)-forcethemostimportantComputer-Modern-fontstobecalculated
allneeded
(1)-forcethecalculationofallfontsnowneeded
bc
(1)-Anarbitraryprecisioncalculatorlanguage
dc
(1)-Anarbitraryprecisioncalculator
回页首
在命令行上运行计算
如上所示,dc 是在每个UNIX系统上都可以找到的计算器。
如果不带参数运行 dc,就会进入交互模式,可以编写和运算ReversePolishNotation(RPN)表达式:
$dc5
6
*
10
/
p
3
但是,可以在命令行上做所有这些工作。
指定 -e 选项并提供要运算的表达式。
同样,要把表达式放在引号中,以防止shell解释它:
$dc-e"56*10/"
3
回页首
用pgrep寻找进程
您可能无数次使用 psaux|grep... 寻找进程。
这当然是有效的,但是有一种更高效的搜索进程的方法。
请试试 pgrep。
例如,以下命令寻找 strike 的所有登录shell(其中的 strike 是用户名):
$pgrep-l-ustrikezsh
10331zsh
10966zsh
pgrep 命令提供筛选选项,允许按用户名(上面给出的 -u)、进程组、组等筛选进程。
配套的实用程序 pkill 接受 pgrep 的所有选项和一个信号,它把这个信号发送给与给定的条件匹配的所有进程。
例如,命令 pkill-9-ustrikezsh 与 pgrep-ustrikezsh|xargskill-9 等效。
回页首
用pwgen生成安全密码
UNIX中每个重要的子系统都需要自己的密码。
电子邮件、远程登录和超级用户特权都需要密码,这些密码最好各不相同而且难以通过自动化攻击猜测或推断出来。
另外,如果希望开发生成账户的脚本,就需要一个可靠的随机安全密码来源。
pwgen 实用程序是一个用来生成密码的小程序。
可以把密码设定为更容易记忆的或更安全的,还可以指定密码是否包含数字、符号、元音和大写字母。
许多UNIX系统都有 pwgen。
如果没有,也很容易构建它:
$#AsofMarch2009,thelatestversionis2.06
$wget
pwgen/pwgen-2.06.tar.gz
$tarxzfpwgen-2.06.tar.gz
$cdpwgen-2.06
$./configure&&make&&sudomakeinstall
下面是一些使用示例:
∙输出容易记忆的密码集合:
∙$pwgen-C
∙ue2AhngaSoom0Lu0Hie8aiphgei9mooDeiXeex7N
∙Wid4UengtaShee3vJa3shii8iNg0viShiegh5ouF
∙...
zoo8AhzuIefev0chMoVu4Paegoh1Ak6mEiJup5ei
∙生成一个安全的密码:
∙$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)。
#Asthisarticlewaswritten,thelatestversionofmultitailwas5.2.2
$wget
$tarxzfmultitail-5.2.2.tgz
$cdmultitail-5.2.2
$make
$sudomakeinstall
下面是 multitail 的一些使用示例:
∙为了在同一窗口中查看多个日志文件,用一个文件名列表启动这个实用程序,比如 multitail/var/log/apache2/{access,error}.log。
∙为了在同一窗口中查看两个文件并缓冲读取的所有信息,使用 -I 选项把指定的文件与另一个文件合并,比如 multitail-M0/var/log/apache/access.log-I/var/log/apache/error.log。
在这里,把Apache错误日志和访问日志合并在一起。
-M0 记录输入的所有数据;在任何时候,按B键即可看到缓冲区。
∙还可以组合命令和文件。
例如,为了查看一个日志文件并监视 ping 的输出,可以使用 multitaillogfile-l"ping192.168.1.3"。
这会在同一控制台中创建两个视图:
一个视图显示 logfile 的内容,另一个视图显示 ping192.168.1.3 的输出。
除了命令行选项之外,multitail 还提供一组交互式命令,它们影响显示的当前状态。
例如,在显示中按A键可以添加新的日志文件。
按B键显示保存的缓冲区。
按Q键退出 multitail。
命令的完整列表见multitail的手册页。
回页首
用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
p7zip_4.65_src_all.tar.bz2
$tarxjfp7zip_4.65_src_all.tar.bz2
$cdp7zip_4.65
$make
$sudomakeinstall
构建过程会生成并安装实用程序 7za。
输入不带参数的 7za,即可看到可用命令和选项的列表。
与 tar 相似,每个命令都是一个字母,比如 a在存档中添加文件,x 提取文件。
为了试试这个实用程序,以多种格式创建 p7zip 源代码的存档,然后用 7za 解压每个存档:
$zip-rp7.zipp7zip_4.65
$7za-ozipxp7.zip
$tarcvfp7.tarp7zip_4.65
$7za-otarxp7.tar
$bzip2p7.tar
$7za-soxp7.tar.bz2|tartf-
从上到下,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 进行比较:
$catold
This
is
Monday.
$catnew
This
is
Tuesday.
$gzipoldnew
$zdiff-cold.gznew.gz
***-2009-03-3022:
26:
34.518217647+0000
---/tmp/new.108742009-03-3022:
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页面表单提交数据、通过FileTransferProtocol(FTP)上传文件、作为代理、设置HypertextTransferProtocol(HTTP)头等等。
cURL在许多方面可以作为浏览器和其他客户机的命令行替代品。
因此,它有许多潜在的应用。
通过常用的 ./configure&&make&&sudomakeinstall 过程构建cURL实用程序。
下载、解压并处理:
$wgethttp:
//curl.haxx.se/download/curl-7.19.4.tar.gz
$tarxzfcurl-7.19.4.tar.gz
$cdcurl-7.19.4
$./configure&&make&&sudomakeinstall
cURL实用程序有很多选项,最好通读它的手册页。
下面是一些常见的cURL用法:
∙为了下载一个文件(比如cURLtarball本身),使用:
$curl-ocurl.tgzhttp:
//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个文件。
∙$curlhttp:
//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:
//
在这里,把 img[1-1000].png 放在引号中,以避免shell解释它。
这个命令把img1.png到img1000.png上传到指定的服务器和路径。
∙甚至可以用cURL在词典中查找单词:
∙$curldict:
//dict.org/d:
stalwart
∙220miranda.orgdictd1.9.15/rfonLinux2.6.26-bpo.1-686
∙
∙250ok
∙1501definitionsretrieved
∙151"Stalwart"gcide"TheCollaborativeInternationalDictionaryofEnglishv.0.48"
∙Stalwart\Stal"wart\(st[o^]l"w[~e]rtorst[add]l"-;277),
∙Stalworth\Stal"worth\(-w[~e]rth),a.[OE.stalworth,AS.
∙staelwyr[eth]serviceable,probablyoriginally,goodat
∙stealing,orworthstealingortaking,andafterwards
∙extendedtoothercausesofestimation.See{Steal},v.t.,
∙{Worth},a.]
∙Brave;bold;strong;redoubted;daring;vehement;violent."A
∙stalwarttillerofthesoil."--Prof.Wilson.
∙[1913Webster]
∙
∙Fairmanhewasandwise,stalworthandbold.--R.of
∙Brunne.
∙[1913Webster]
∙
∙Note:
Stalworthisnowdisused,orbutlittleused,stalwart
∙havingtakenitsplace.
∙[1913Webster]
∙.
∙250ok[d/m/c=1/0/20;0.000r0.000u0.000s]
221bye[d/m/c=0/0/0;0.000r0.000u0.000s]
把单词 stalwart 替换为您要查找的单词。
除了通过命令行使用之外,还可以通过 libcurl 库使用cURL的所有功能。
许多编程语言包含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@
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来存储姓名和电话号码吗?
可能不适合。
另外,如果应用程序要在非常小的设备或能力很有限的计算机上运行,那么应该怎么办?
这类硬件可能不支持多处理、大量内存占用或对物理存储的大量需求。
显然,可以使用嵌入式数据库。
通常情况下,嵌入式数据库打包为库,与应用程序代码直接链接。
这种解决方案让应用程序独立于外部服务,但是也要付出一定的代价:
通常不能用StructuredQueryLanguage(SQL)表达查询。
SQLite结合了这两方面的优势:
这个软件很小,可以把它嵌入任何应用程序,同时可以用SQL查询数据。
PHP和RubyonRails使用SQLite作为默认的存储引擎,AppleiPhone也是如此。
为了构建SQLite,需要从SQLite下载页面下载源代码集(由所有源代码组成的单一文件)、解压它并运行 ./configure&&make&&sudomakeinstall。
$#AsofMarch2009,thelatestversionwas3.6.11.
$wgethttp:
//www.sqlite.org/sqlite-amalgamation-3.6.11.tar.gz
$tarxzfsqlite-amalgamation-3.6.11.tar.gz
$cdsqlite-3.6.11
$./configure&&make
$sudomakeinstall
构建过程生成一个库和相关联的应用程序编程接口(API)头文件,以及一个单独的命令行实用程序 sqlite3,它有助于研究特性。
用数据库名启动sqlite3即可创建数据库。
甚至可以在命令行上直接放上SQL,这对于脚本编程非常有意义:
$sqlite3comics.db"CREATETABLEissues\
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对话 UNIX 适用于任何 系统的 10 个出色的工具 适用于 任何 系统 出色 工具