Linux高手的 20 个习惯(3)

2019-06-02 14:25

如果您为一系列命令使用相同的文件名,会发生什么情况?当然,有一种快捷方式可以快速获得您上次使用的文件名。如清单 2所示, !$命令返回前一个命令使用的文件名。 从文件 this-is-a-long-lunch-menu-file.txt中搜索单词 pickles 的出现位置。搜索结束后,使用 vi 命令来编辑 this-is-a-long-lunch-menu-file.txt 文件,而不需要重新键入文件名。您使用感叹号(!)来访问历史,然后使用美元符号($)返回前一命令的最后字段。 如果您反复用到长文件名,那么这是一个非常好的工具。

清单2.使用!$获得前一个命令使用的文件名 $ grep picklesthis-is-a-long-lunch-menu-file.txt pastrami on rye with pickles and onions $ vi !$

13. 重用以前的参数

!$命令返回某个命令使用的上一个文件名参数 。但如果某个命令使用多个文件名,而您只希望重用其中一个文件名,该如何做?!:1 操作符返回某个命令使用的第一个文件名 。清单 3中的示例显示可以如何将此操作符与 !$运算符组合使用。在第一个命令中,将一个文件重新命名为更有意义的名称,但为了保持原始文件名可用,创建了一个符号链接。重新命名文件 kxp12.c 以提高可读性,然后使用 link 命令来创建到原始文件名的符号链接,以防在其他位置使用该文件名。!$操作符返回file_system_access.c文件名,而!:1操作符返回kxp12.c文件名,该文件名是上个命令的第一个文件名。

清单3.组合使用!$和!:1

$ mv kxp12.c file_system_access.c $ ln –s !$ !:1

14. 使用pushd和popd管理目录导航

UNIX支持各种目录导航工具。 最喜欢的两款提高工作效率的工具是 pushd和 popd 。您当然了解 cd 命令用于更改您的当前目录。如果您要在多个目录中导航,但希望能够快速返回某个位置,该如何做? pushd 和 popd 命令创建一个虚拟目录堆栈, pushd 命令用来更改您的当前目录并将其存储在堆栈中,而 popd 命令用来从堆栈的顶部移除目录并使您返回该位置。您可以使用 dirs 命令来显示当前目录堆栈,而不会压入或弹出新目录。清单 4显示如何使用pushd 和 popd 命令在目录树中快速导航。

清单4.使用pushd和popd在目录树中导航 $ pushd . ~ ~ $ pushd /etc

/etc ~ ~ $ pushd /var /var /etc ~ ~

$ pushd /usr/local/bin /usr/local/bin /var /etc ~ ~ $ dirs

/usr/local/bin /var /etc ~ ~ $ popd /var /etc ~ ~ $ popd /etc ~ ~ $ popd ~ ~ $ popd

pushd和popd命令还支持使用参数处理目录堆栈。使用+n或-n参数,其中n是一个数字,您可以向左或向右移动堆栈, 如清单 5所示。

清单5.旋转目录堆栈 $ dirs

/usr/local/bin /var /etc ~ ~ $ pushd +1

/var /etc ~ ~ /usr/local/bin $ pushd -1

~ /usr/local/bin /var /etc ~

15. 查找大型文件

是否需要找出您的所有空闲磁盘空间被什么占用了?您可以使用以下几个工具来管理您的存储设备。如清单 6所示, df命令为您显示每个可用卷上已使用的块的总数,以及空闲空间的百分比。

清单6.确定卷的使用情况 $ df

Filesystem 512-blocks Used Available Capacity Mounted on /dev/disk0s2 311909984 267275264 44122720 86% / devfs 224 224 0 100% /dev fdesc 2 2 0 100% /dev

map -hosts 0 0 0 100% /net map auto_home 0 0 0 100% /home

是否希望查找大型文件?使用 find命令时附带 -size 参数。 清单 7显示了如何使用 find 命令来查找大于10MB 的文件。请注意, -size 参数以 KB 为单位计量大小。

清单7.查找大于10MB的所有文件

$ find / -size +10000k –xdev –exec ls –lh {}/;

16. 不使用编辑器创建临时文件

以下是一个简单示例:您需要快速创建一个简单临时文件,但不希望启动您的编辑器。使用带有>文件重定向操作符的cat命令 。如清单 8所示,使用不带文件名的 cat 命令只回显向标准输入键入的任何内容; > 重定向将该输入捕获到指定的文件中。请注意,您在结束键入时必须提供文件结束字符,通常为 Ctrl-D 。

清单8.快速创建临时文件 $ cat > my_temp_file.txt This is my temp file text ^D

$ cat my_temp_file.txt This is my temp file text

需要执行相同操作,但是附加到现有文件而不是创建新文件。如清单 9所示,改用 >> 操作符。>> 文件重定向操作符向现有文件附加内容。

清单9.快速向文件附加内容 $ cat >> my_temp_file.txt More text ^D

$ cat my_temp_file.txt This is my temp file text More text

17. 使用curl命令行实用工具

curl 命令使您可以使用 HTTP、 HTTPS 、 FTP 、 FTPS 、 Gopher 、 DICT 、TELNET 、 LDAP 或 FILE协议从服务器检索数据。如清单 10所示,我可以使用 curl 命

令从美国国家气象局了解我所在位置(纽约州布法罗市)的当前天气状况。当与grep 命令组合使用时,我可以检索布法罗市的天气状况。使用 -s 命令行选项来禁止 curl处理输出。

清单10.使用curl检索当前天气状况

$ curl –shttp://www.srh.noaa.gov/data/ALY/RWRALY | grep BUFFALO BUFFALO MOSUNNY 43 22 43NE13 30.10R

如 清单 11所示,您也可以使用curl命令来下载HTTP托管的文件 。使用 -o参数来指定保存输出的位置。

清单11.使用curl下载HTTP承载的文件

$ curl -o archive.tar http://www.somesite.com/archive.tar

这实际上只是您使用 curl命令可以完成的操作的提示。您只需在命令提示符处键入 man curl 显示 curl 命令的完整使用信息,就可以开始了解更多内容。 18. 最有效地利用正则表达式

大量UNIX命令使用正则表达式作为参数 。从技术角度而言,正则表达式 是表示某种模式的字符串(也就是说,由字母、数字和符号组成的字符序列),用于定义零或更长的字符串。正则表达式使用元字符(例如,星号 [*]和问号 [?] )来匹配其他字符串的部分或全部内容。正则表达式不一定包含通配符,但通配符可以使正则表达式在搜索模式和处理文件时发挥更大的作用。表 1显示了一些基本正则表达式序列。

表1.正则表达式序列

序列 说明 脱字符 ( ^ ) 匹配出现在行首的表达式,例如 ^A 美元符号

匹配出现在行末的表达式,例如 A$

( $ )

反斜杠 ( / ) 取消下一个字符的特殊含义,例如 /^ 方括号 ( [] ) 匹配括起来的任一字符,例如 [aeiou](使用连字符 [ - ] 表示范围,例如 [0-9])。 [^ ] 匹配除括起来字符以外的任一字符,例如 [^0-9] 句点 ( . ) 匹配除行尾之外的任意单个字符 星号 ( * ) 匹配零个或多个前驱字符或表达式 /{x,y/} 匹配出现过 x 到 y 个和前面相同的内容 /{x/} 精确匹配出现过 x 个和前面相同的内容 /{x,/} 匹配出现过 x 个或更多和前面相同的内容

清单 12显示了与grep命令一起使用的一些基本正则表达式。

清单12.使用正则表达式和grep

$ # Lists your mail

$ grep '^From: ' /usr/mail/$USER $ # Any line with at least one letter $ grep '[a-zA-Z]' search-file.txt $ # Anything not a letter or number $ grep '[^a-zA-Z0-9] search-file.txt

$ # Find phone numbers in the form 999-9999 $ grep '[0-9]/{3/}-[0-9]/{4/}' search-file.txt $ # Find lines with exactly one character $ grep '^.$' search-file.txt

$ # Findany line that starts with a period \$ grep '^/.' search-file.txt

$ # Find lines that start with a \$ grep '^/.[a-z][a-z]' search-file.txt

有关命令行正则表达式的深入描述,阅读 developerWorks文章― 对话 UNIX,第 9部分:正则表达式。‖ 19. 确定当前用户

有时,您可能希望确定某个特定用户是否运行过您的管理脚本。为找出答案,您可以使用whoami命令来返回当前用户的名称。 清单 13显示了独自运行的 whoami 命令; 清单 14显示了使用 whoami 确保当前用户不是根用户的Bash 脚本的摘录。

清单13.从命令行使用whoami $ whoami John

清单14.在脚本中使用whoami if [ $(whoami) = \then

echo\ exit 1 fi

20. 使用awk处理数据

awk 命令似乎始终处在 Perl的阴影下,但它对于简单、基于命令行的数据处理来说是一个快速、实用的工具。清单 15显示了如何开始使用 awk 命令。若要获取文件中每行文本的长度,请使用 length() 函数。若要查看字符串ing 是否出现在文件文本中,请使用

index() 函数,该函数返回 ing 首次出现的位置,这样您就可以使用它来进行进一步的字符串处理。若要tokenize (也就是说,将一行拆分为单词长度的片段)某个字符串,请使用 split() 函数。

清单15.基本awk处理 $ cat text

testing the awk command $ awk '{ i = length($0); print i }' text 23

$ awk '{ i = index($0,‖ing‖); print i}' text 5

$ awk 'BEGIN { i = 1 } { n = split($0,a,\testing the awk command

打印文本文件中的指定字段是一项简单的 awk任务。在 清单 16中, sales 文件包含每个销售人员的姓名,后跟每月销售数字。您可以使用 awk 命令来快速获得每个月的销售总额。缺省情况下, awk 将每个以逗号分隔的值视为不同的字段。您使用 $n 操作符来访问每个字段。

清单16.使用awk对数据进行汇总 $cat sales Gene,12,23,7 Dawn,10,25,15 Renee,15,13,18 David,8,21,17

$ awk -F, '{print $1,$2+$3+$4}' sales Gene 42 Dawn 50 Renee 46 David 46

成为命令行高手需要进行一些实践。按照相同的方式处理问题很简单,因为您已经习惯了。扩展您的命令行资源可以显著提高您的工作效率,并促使您朝着 UNIX命令行高手的方向前进!


Linux高手的 20 个习惯(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:继续教育试题标准答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: