注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Linux >> Unix >> Linux正文

提高UNIX工作效率 解析有价值的命令行

文章来源:IBM 作者:佚名 更新时间:2007-6-29 【 】 【加入收藏

  在日常的办公环境中使用 UNIX? 并不一定是非常笨拙的。使用 UNIX Shell 的强大功能和可用的系统工具可以极大地提高您在办公中的工作效率。

  引言

  UNIX? 命令行的语言以功能全面而著称,通过使用各种小型工具、实用程序,并在 Shell 中将它们组合在一起执行,您可以指定许多精确的和复杂的任务。

  但是,当在办公环境中使用它们时,同样的这些工具可能成为提高您工作效率的功能强大的助手。许多 UNIX 独特的技巧可以用于提高工作效率。

  对于使用命令行来改善办公工作效率,本文给出了一些建议和技巧,包括如何查看当前系统习惯、如何计算工作花费的时间、操作日期的秘诀、使用快速而简单的方法对自己发送提醒、对重复性交互任务实现自动化的方法。

  查看日常的习惯

  使用 UNIX 命令行提高办公工作效率的第一步是,仔细地研究您当前的日常习惯。通过通常所使用的工具和应用程序以及访问和修改的文件,可以告诉您究竟是什么样日常工作占用了大量的时间,以及应该避免哪些操作。

  查看所使用的工具

  您需要查看经常使用哪些工具和应用程序。可以轻松地在 Shell 的内置 history 中查明您的日常工作习惯,它将输出在当前的和过去的会话中发送给 Shell 的输入行内容的枚举清单。有关典型的示例,请参见清单 1.

  清单 1. Shell 的内置 history 的示例输出

$ history
1 who
2 ls
3 cd /usr/local/proj
4 ls
5 cd websphere
6 ls
7 ls -l
$

  真实的历史记录通常保存在一个文件中,以便能够提供给将来的会话,例如,Korn Shell 将其命令历史记录保存在用户 home 目录的隐藏文件 .sh_history 中,而 Bash Shell 则使用 .bash_history.通常在达到一定的长度后,会对这些文件进行覆盖,但是许多 Shell 具有设置最大历史记录长度的变量,Korn 和 Bash Shell 具有 HISTSIZE 和 HISTFILESIZE 变量,您可以在自己的 Shell 启动文件中对它们进行设置。

  通过 sort 来运行 history 非常有用,可以获得最常用的命令的列表。然后,使用 awk 删除命令名称减号选项和参数,然后将经过排序的列表传递给 uniq 以得到一个枚举列表。最后,再次调用 sort 以便对列表的第一列按照相反次序进行排序(最大的在前面),这是对其自身进行枚举。清单 2 显示了实际操作的示例。

  清单 2. 根据使用频率列举 Shell 历史记录中的命令

$ history|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c|sort -r

      4 ls
      2 cd
      1 who
$

  如果历史记录文件比较大,您可以首先通过管道传输到 tail 来运行周期性的检查,例如,要检查最后的 1,000 条命令,可以尝试使用:

$ history|tail -1000|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c|sort -r

 

  查看访问或修改的文件

  可以使用相同的原则来查看访问和修改过的文件。要完成这项工作,可以使用 find 实用程序来定位和查看在某一段时间内(今天、昨天或者过去的任何日期或时间段)访问或更改过的所有文件。

  当您需要查找匹配某个范围的文件时,建立两个虚拟文件,它们的时间戳可以描述这个范围。然后,对较旧的文件使用 -newer 标志,对第二个文件使用“\! -newer”。

  例如,要在 /usr/share 目录树中查找在 2006 年 8 月经过访问的所有文件,可以尝试下面的命令:

$ touch -d "Aug 1 2006" file.start
$ touch -d "Sep 1 2006" file.end
$ find /usr/share -daystart -newer file.start \! -daystart -newer file.end

  最后,在列出目录内容时,可以按照文件的最后修改时间进行排序,这样做有时很有帮助。有些版本的 ls 工具具有 -c 选项,它可以按照文件修改的时间进行排序,最先显示最后修改的文件。与 -l(长清单)和 -t(按照修改时间排序)选项一同使用,您可以对目录清单按照最后修改文件在前的顺序排序,长清单可以显示文件的修改时间而不是缺省创建时间:

$ ls -ltc /usr/local/proj/websphere | less

  计算工作花费的时间

  使用 UNIX 提高办公工作效率的另一种有价值的方式是,计算经常执行的命令所花费的时间。然后,您可以对结果进行评估,并确定是否花费了过多的时间等待一个特定的进程结束。

  计算命令执行所花费的时间

  系统是否运行迟缓?您在 Shell 中等待了多长时间,在某个特定命令执行时,什么也做不了?完成早上的日常工作需要花费多长时间呢?

  当您使用 date、sleep 和 echo 命令来计算具体任务所花费的时间时,可以获得关于这些问题的实质性的解答。

  要完成这项工作,可以输入一行以 date 语句开头的长输入行,以便按照需要的格式(通常,小时和分钟就足够了)输出时间和日期。然后,运行该命令输入行(可能是由 Shell 指令串联起来的几行内容),最后可以使用相同的输入行再次得到日期。如果您所测试的这些命令产生了大量的输出,可以对其进行重定向,以便能够阅读到开始和停止日期。计算这两个日期的差:

$ date; system-backup > /dev/null; system-diag > /dev/null;\
> netstat > /dev/null; df > /dev/null; date

  测试您的打字速度

  您可以使用相同的方法来测试打字输入:

$ date;cat|wc -w;date

  如果您提供一个至少持续 1 分钟以上的输入示例,但最好是 3 分钟或更长的时间,那么该命令的结果将更准确。计算这两个日期之间的差(以分钟为单位),然后使用您所输入的单词数(由中间的命令输出)除以这个值,以得到平均每分钟输入的单词数。

  通过为开始和停止日期以及输出单词数的命令设置相应的变量,您可以为这项任务实现自动化。但是为了正确地完成这项任务,您必须在使用这些时间做减法计算的时候避免一个常见的错误。GNU 对 date 命令进行了扩展,即 %s 格式选项,可以用来避免这样的错误,它输出自UNIX 新纪元 以来的秒数,该时间定义为 UTC 时间 1970 年 1 月 1 日凌晨。然后,您可以单独根据秒数来计算时间。

  分配一个变量 SPEED 作为 echo 命令的输出,以便设置正确的公式通过管道传递给计算器工具,如 bc.然后,输出一个新的 echo 语言,该语句将输出关于打字速度的消息:

$ START=`date +%s`;WORDS=`cat|wc -w`; STOP=`date +%s`; SPEED=\
> `echo "$WORDS / ( ( $STOP - $START ) / 60 )"|bc`;echo \
> "You have a typing speed of $SPEED words per minute."

  您可以将它放到一个脚本中,然后更改其权限,以使得所有的用户都可以执行它,以便系统中其他的用户也可以使用它,如清单 3 所示。

  清单 3. 运行 typespeed 脚本的示例

$ typespeed
                The quick brown fox jumped over the lazy dog. The quick brown dog--
                              ...
--jumped over the lazy fox.
                ^D

You have a typing speed of 82.33333333 words per minute.
$

  

  了解日期

  date 工具可以完成更多的工作,不仅仅只是打印出当前的系统日期。您可以使用它来得到给定的日期究竟是星期几,并得到相对于当前日期的相对日期。

  了解某一天是星期几

  GNU 对 date 命令的另一个扩展是 -d 选项,当您的桌上没有日历表时(UNIX 用户不需要日历表),该选项非常有用。使用这个功能强大的选项,通过将日期作为引号括起来的参数提供,您可以快速地查明一个特定的日期究竟是星期几:

$ date -d "nov 22"

Wed Nov 22 00:00:00 EST 2006

                  $

  在本示例中,您可以看到今年的 11 月 22 日是星期三。

  所以,假设在 11 月 22 日召开一个重大的会议,您可以立即了解到这一天是星期三,而这一天您将赶到驻地办公室。

  获得相对日期

  -d 选项还可以告诉您,相对于 当前日期若干天的究竟是哪一天,从现在开始的若干天或若干星期以后,或者以前(过去)。通过将这个相对偏移使用引号括起来,作为 -d 选项的参数,就可以完成这项任务。

  例如,您需要了解两星期以后的日期。如果您处于 Shell 提示符处,那么可以迅速地得到答案:

$ date -d '2 weeks'

  关于使用该命令,还有其他一些重要的方法。使用 next 指令,您可以得到以后的星期几是哪一天:

$ date -d 'next monday'

  使用 ago 指令,您可以得到过去的日期:

$ date -d '30 days ago'

  您可以使用负数以得到相反的日期:

$ date -d 'dec 14 -2 weeks'

  这个技巧非常有用,它可以根据将来的日期为自己设置提醒,可能是在脚本或 Shell 启动文件中,如下所示:

DAY=`date -d '2 weeks' +"%b %d"`
if test "`echo $DAY`" = "Aug 16"; then echo 'Product launch is now two weeks away!'; fi

  为自己设置提醒

  您可以在系统中使用各种工具为自己设置离开的提醒,与纸制便笺相比,它们占用更少的空间,并且无论您在任何地方登录都可以看到它们。

  

  了解何时有事需要离开

  当您在系统中进行工作时,很可能会碰到其他的事情。leave 工具在 IBM AIX? 操作系统和 Berkeley Software Distribution (BSD) 系统(请参见参考资料部分)中非常常见,并且可以为您提供帮助。

  为 leave 命令指定需要离开的时间,使用 24 小时的格式:HHMM.它运行于后台,并将在给定时间之前的 5 分钟时,在终端中输出提醒您准备离开的信息。如果在离开前 1 分钟时,您依然处于登录状态,它会再次显示这个提醒消息,然后是在应该离开的时刻,并且在此之后每隔 1 分钟它都会发送提醒消息,直至您注销登录(或者终止这个 leave 进程)。清单 4 给出了一个示例。当您注销时,将终止这个 leave 进程。

  清单 4. 运行 leave 命令的示例

$ leave
When do you have to leave? 1830
Alarm set for Fri Aug  4 18:30. (pid 1735)
$ date +"Time now: %l:%M%p"
Time now: 6:20PM
$
<system bell rings>
You have to leave in 5 minutes.
$ date +"Time now: %l:%M%p"
Time now: 6:25PM
$
<system bell rings>
Just one more minute!
$ date +"Time now: %l:%M%p"
Time now: 6:29PM
$
Time to leave!
$ date +"Time now: %l:%M%p"
Time now: 6:30PM
$
<system bell rings>
Time to leave!
$ date +"Time now: %l:%M%p"
Time now: 6:31PM
$ kill 1735
$ sleep 120; date +"Time now: %l:%M%p"
Time now: 6:33PM
$

  您可以提供相对时间。如果您希望在从现在 开始的某个时间后离开,可以在时间参数前面加上 +.所以,要提醒在两小时后离开,可以输入下面的命令

$ leave +0200

  要以分钟为单位提供时间,可以让小时字段为 0.例如,如果您知道在 10 分钟之后必须离开,可以输入:

$ leave +0010

  您还可以指定离开时间作为参数,这使得 leave 成为脚本中非常有用的命令,特别是在 Shell 启动文件中。例如,如果您通常工作到下午 5 点,但是在星期 5 时必须在下午 4 点离开单位,那么您可以在 Shell 启动文件中设置一个周提醒:

if test "`date +%a`" = "Fri"; then leave 1600; fi

  您可以在启动脚本中加入一个简单的 leave 语句,不带任何参数。每次登录 Shell 时,您可以输入离开的时间,如果您按下 Enter 键,即没有指定任何值,那么 leave 将会退出,而不会设置提醒。

 

  为自己发送电子邮件提醒

  您还可以使用文本消息为自己发送提醒。建立一则提醒消息,有些时候非常有用,您将在当前登录会话或下次登录时了解到这一点。

  以前,旧的 elm 邮件代理附带一个工具,它允许您使用电子邮件发送备忘录,实际上是提醒发送者的脚本、主题和正文文本。通过基于时间的方法,使用命令行 mailx 工具向自己发送邮件,可以轻松地复制这个过程。(在一些 UNIX 系统中,使用 mail 来代替 mailx.)

  将您的电子邮件地址(或您在本地系统中的用户名,如果您在本地系统中读取邮件)作为参数提供,然后,您可以在提示的 Subject 行中输入提醒消息(如果它非常短),如清单 5 所示。如果提醒消息不适合于 Subject 行,那么可以在消息正文中输入它。单独一行 ^D,表示退出 mailx 并发送邮件。

  清单 5. 使用 mailx 命令向自己发送提醒的示例

$ mailx joe Subject: Call VP on Monday
                ^D
Cc:
Null message body; hope that's ok
$

  实现重复性交互工作的自动化

  Expect 语言(是 Tcl/Tk 的扩展,还有其他的变种可供使用)用来编写与交互式程序运行会话的脚本,而该脚本就好像是一个用户,直接与程序进行交互。

  Expect 脚本可以为您节省大量的时间,特别是当您发现自己正在进行重复性任务的时候。Expect 可以与多个程序进行交互,包括 Shell 和基于文本的 Web 浏览器,它可以启动远程会话,并通过网络进行执行。

  例如,如果您需要频繁地连接到本地内部网中的系统,以运行特定的程序,比如 test-servers 命令,您可以使用一个名为 servmaint 的 Expect 脚本实现自动化,该脚本的内容如清单 6 所示。

  清单 6. 使用 Expect 脚本实现远程系统程序执行的自动化的示例

#!/usr/bin/expect -f
spawn telnet webserv4
expect "login:"
send "joe\r"
expect "Password:"
send "secret\r"
expect "webserv4>$"
send "test-servers\r"
expect "webserv4>$"
send "bye\r"
expect eof

  现在,对于整个执行过程,不再需要运行 telnet 连接到远程系统,使用您的用户名和密码进行登录,在该系统上运行这些命令,然后注销。您只需运行清单 6 中给出的 servmaint 脚本,就可以自动完成所有的工作。当然,如果您在这种脚本中提供了密码或其他专用的信息,那么就有一个安全性因素需要考虑,至少,您应该更改该文件的权限,以确保您是唯一可以读取它的用户(除超级用户之外)。

  可以在 Expect 中对涉及到系统交互的重复性任务进行编程,它提供了分支、条件以及高级语言的所有其他特性,以便与这些程序交互的响应和方向能够完全实现自动化。

  结束语

  在办公环境中,UNIX 系统可以处理许多任务,而通常情况下,这些任务由运行其他操作系统的单独的计算机进行处理,使用 UNIX 系统中丰富的命令行工具,可以提高工作效率,而在任何其他的地方根本找不到这些工具。

  本文介绍了一些使用 UNIX 命令行工具和应用程序来提高办公工作效率的技巧和概念。您可以将这些思想应用于自己的办公环境,灵活地使用命令行工具,可以提供更多的方式以节省时间并提高工作效率。

  • 上一篇Linux:

  • 下一篇Linux:
  • 最 新 热 门
     VMware下Linux与真实主机共享上网
     Linux系统安全隐患及加强安全管理方法
     各类Unix和Linux密码丢失解决方法
     配置Linux操作系统的环境变量
     在Linux系统下刷新主板BIOS的好方法
     删除文件提示:Operation not permitted
     Linux系统下硬盘挂载详细说明
     Linux文本模式下如何发送带附件的Email
     在Linux自动生成一个保险密码的方法
     Linux商业电影动画制作软件列表
    最 新 推 荐
     在Fedora Core系统中共享Windows打印机
     不同的类UNIX操作系统密码破解方法介绍
     UNIX的分支 服务器上的FreeBSD操作系统
     UNIX操作系统的加锁解锁:等待事件及唤醒
     Solaris TELNET ftp时间超长的解决方法
     SCO UNIX到Linux操作系统的程序移植问题
     使用Unix命令行模式高效地进行文本编辑
     Solaris第一次亲密接触
     Unix学习方法-高手之路
     FreeBSD下3D功能的实现
    相 关 文 章

    各类Unix和Linux密码丢失解决方法
    Ubuntu Linux系统下TP-link无线上网方法
    Ubuntu Linux系统中如何使用Samba客户端
    Kubuntu 8.04 系统确认用KDE4取代LTS
    Ubuntu 7.10 Linux建立C与GTK的开发环境
    Ubuntu中Vsftp的配置和使用
    在Ubuntu Linux中配置虚拟主机
    Ubuntu系统下Trac+Subversion+Apache安装
    Ubuntu Linux系统配置SSH验证
    Linux下NFS文件mount超时的问题解答

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用