LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: KornLee

【shell技巧交流区】:[把你的shell技巧贴出来,让我们分享]

[复制链接]
 楼主| 发表于 2003-7-28 12:46:51 | 显示全部楼层

技巧:使用bash定义你的快捷键

在~./inputrc中输入如下内容
Control-t:"top -i\C-m"
然后保存退出,关闭虚拟终端,
重新开启后,按Ctrl+t,看看会发生什么?呵呵,很好用吧,
可以把一些经常打的长的命令按照这样的方法输入,当然不要和别的已经定义的快捷键冲突;)
[提供:前任版主Pye兄)
发表于 2003-7-29 00:02:16 | 显示全部楼层
我实验了一下,好象只能按"Enter"才能继续,是不是这样?
最初由 javalee 发表
技巧:press any to continue...的实现

read命令常用于接受用户的输入动作.他的一个妙用就是可以在脚本中实现pause的效果,如:
...
echo -n "ress any to continue ..."
read
....

  
 楼主| 发表于 2003-7-29 03:28:40 | 显示全部楼层
是的!
但是我记得在 www.chinaunix.net 上有个铁子是讨论如何改变的,像用一个定义的键而不用回车符的!,你感兴趣的话可以找找
发表于 2003-7-31 14:38:09 | 显示全部楼层

回复::技巧:使用script命令捕获终端屏幕

请问: javalee 斑竹,你所提供的这个命令跟输出重定向有区别吗?如果用tcpdump〉typescipt是不是同样的效果?
 楼主| 发表于 2003-8-1 15:15:28 | 显示全部楼层
一样不一样,你可以自己在命令行中敲入script,自己实践一下吧;)
 楼主| 发表于 2003-8-2 19:03:17 | 显示全部楼层

技巧:用 uniq 除去重复行[转]

作者:Jacek Artymiak(jacek@artymiak.com)自由作家和顾问        2003 年 7 月

重复行通常不会造成问题,但是有时候它们的确会引起问题。此时,不必花上一个下午的时间来为它们编制过滤器,uniq 命令便是唾手可得的好工具。了解一下它是如何节省您的时间和精力的。

进行排序之后,您会发现有些行是重复的。有时候该重复信息是不需要的,可以将它除去以节省磁盘空间。不必对文本行进行排序,但是您应当记住 uniq 在读取行时会对它们进行比较并将只除去两个或更多的连续行。下面的示例说明了它实际上是如何工作的:

清单 1. 用 uniq 除去重复行

$ cat happybirthday.txt

Happy Birthday to You!

Happy Birthday to You!

Happy Birthday Dear Tux!

Happy Birthday to You!


$ sort happybirthday.txt

Happy Birthday Dear Tux!

Happy Birthday to You!

Happy Birthday to You!

Happy Birthday to You!


$ sort happybirthday.txt | uniq

Happy Birthday Dear Tux!

Happy Birthday to You!

警告:请不要使用 uniq 或任何其它工具从包含财务或其它重要数据的文件中除去重复行。在这种情况下,重复行几乎总是表示同一金额的另一个交易,将它除去会给会计部造成许多困难。千万别这么干!

有关 uniq 的更多信息
本系列文章介绍了文本实用程序,它对在手册页和信息页找到的信息作了补充。如果您打开新的终端窗口并输入 man uniq 或 info uniq,或者打开新的浏览器窗口并查看位于 gnu.org 的 uniq 手册页,那么就可以了解更多的相关信息。

如果您希望您的工作轻松点,比如只显示唯一的或重复的行,那么该怎么办呢?您可以用 -u(唯一)和 -d(重复)选项来做到这一点,例如:

清单 2. 使用 -u 和 -d 选项

$ sort happybirthday.txt | uniq -u

Happy Birthday Dear Tux!


$ sort happybirthday.txt | uniq -d

Happy Birthday to You!



您还可以用 -c 选项从 uniq 中获取一些统计信息:

清单 3. 使用 -c 选项

$ sort happybirthday.txt | uniq -uc

      1 Happy Birthday Dear Tux!


$ sort happybirthday.txt | uniq -dc

      3 Happy Birthday to You!



就算 uniq 对完整的行进行比较,它仍然会很有用,但是那并非该命令的全部功能。特别方便的是:使用 -f 选项,后面跟着要跳过的字段数,它能够跳过给定数目的字段。当您查看系统日志时这非常有用。通常,某些项要被复制许多次,这使得查看日志很难。使用简单的 uniq 无法完成任务,因为每一项都以不同的时间戳记开头。但是如果您告诉它跳过所有的时间字段,您的日志一下子就会变得更加便于管理。试一试 uniq -f 3 /var/log/messages,亲眼看看。

还有另一个选项 -s,它的功能就像 -f 一样,但是跳过给定数目的字符。您可以一起使用 -f 和 -s。uniq 先跳过字段,再跳过字符。如果您只想使用一些预先设置的字符进行比较,那么该怎么办呢?试试看 -w 选项。

有什么问题或意见吗?我非常乐意收到您的来信 - 请发送邮件到 jacek@artymiak.com
 楼主| 发表于 2003-8-21 13:18:10 | 显示全部楼层

技巧:为普通用户分配特权

有时候我们不想让一个用户有超级用户权限,又想该用户能执行一些超级用户才能执行的命令。我们可以指定某个列入/etc/sudoers文件的普通用户可以利用sudo来执行一些只有超级用户才能执行的命令。
  /etc/sudoers的配置规则如下:
  Host_Alias:用来创建主机别名[可选],列表中的主机必须用逗号隔开,如果要设置多个别名,可以用冒号隔开,保留关键字ALL代表所有主机。例如:
Host_Alias bluesun=grind,glass
  这里用别名bluesun来统称grind和glass两台机器,grind和glass分别是这两台机器的机器名。
  User_Alias:用来创建用户别名[可选],列表中的用户名必须以逗号隔开。其格式同主机别名,保留关键字ALL代表所有命令。
  Cmnd_alias:用来创建命令别名[可选],列表中的命令必须用逗号隔开,如果要定义一个命令无效,可以在该命令前加!号。
  用户命令使用列表:用户命令使用语法如下:
Username host= [Run User's Name ] CommandList
  Username指定一个真正的用户名或定义过的别名,host制定一个真正的主机名或者定义过的主机别名。CommandList可以是以逗号分隔的命令列表,也可以是一个已经定义过的别名。一般情况下,sudo执行的所有命令都是以root身份执行。但是一些特别的程序,比如一些需要安全性比较高的程序不能用root身份执行的,可以指定用"Run User's Name"指向的用户名来执行。例如:
grind glass=/sbin/route
  这一句说明用户grind可以在glass这台主机上运行查看路由表命令。
from: www.linuxaid.com.cn
发表于 2003-8-24 13:54:36 | 显示全部楼层

回复: 技巧:妙用watch命令实时观察内存变化

最初由 javalee 发表
在linux中,有一个很有趣的命令--watch,他的作用很有趣!
他作用是以全屏幕方式重复地执行指定的命令,用户可以通过他了解命令的运行情况.
如,我们要观察内存动态的变化,那么就可以:
watch free
这样就可以动态的观察内存中各个指标在指定时间内的变化啦~~,
如要观察虚拟内存的变化,也可以通过打开另外一个终端,而不耽误当前终端的操作!:
xterm -e watch -n 1 vmstat &
这样就会弹出一个xterm,显示有关虚拟内存的情况.
详细解释,请:
watch --help
man watch

得到启发:
xterm -e command &
打开另一个终端执行command
 楼主| 发表于 2003-9-14 00:21:45 | 显示全部楼层

技巧:限时输入的实现

举例:
  1. #!/bin/ksh
  2. stty -icanon min 0 time 100   <=限定时间为10秒
  3. while
  4. do
  5.         echo "Please input:y/m/d/[ENTER]:"   <=输入字母y,m,d或者回车
  6.         read input
  7.         case $input in
  8.         y)        date +%Y;break;;
  9.         m)      date +%m;break;;
  10.         d)      date +%d;break;;
  11.         "")     date +%Y/%m/%d;break;;  <=当输入为空(回车)或者10秒钟内没有输入的话,取设定的默认值.
  12.         *)        echo "wrong!again!";continue;;
  13. esac
  14. done
  15. stty sane
复制代码
stty的中文文档见:
http://www.linuxsir.cn/bbs/showthread.php?threadid=45871
 楼主| 发表于 2003-9-16 01:49:29 | 显示全部楼层
转自:水木清华
著名的 rot13 密码, 通过把字母移动13个位置实现对文本的加密
tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" < message > newmessage
然后可以用同样的命令进行解密
tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" < newmessage > message
例如:
文件myfile:
ksh
The "Korn" shell, written by David Korn of AT&T Bell Labs (now Lucent). Written as a major upgrade to "sh", it is compatible with it, but has many more internal commands for the most frequently used functions. It also incorporates most of the same features from tcsh which enhance interactive use (command line history recall etc.). This shell is now available on most systems. It was slow
to gain acceptance because earlier versions were encumbered by AT&T licensing.
加密:
  1. [/home/javalee/myshell]cat myfile|tr [a-m][n-z][A-M][N-Z] [n-z][a-m][N-Z][A-M]>newfile
复制代码
[/home/javalee/myshell]cat newfile
xfu
Gur "Xbea" furyy, jevggra ol Qnivq Xbea bs NG&G Oryy Ynof (abj Yhprag). Jevggra nf n znwbe hctenqr gb "fu", vg vf pbzcngvoyr jvgu vg, ohg unf znal zber vagreany pbzznaqf sbe gur zbfg serdhragyl hfrq shapgvbaf. Vg nyfb vapbecbengrf zbfg bs gur fnzr srngherf sebz gpfu juvpu raunapr vagrenpgvir hfr (pbzznaq yvar uvfgbel erpnyy rgp.). Guvf furyy vf abj ninvynoyr ba zbfg flfgrzf. Vg jnf fybj
gb tnva npprcgnapr orpnhfr rneyvre irefvbaf jrer raphzorerq ol NG&G yvprafvat.
加密后的文件是无法阅读的!
解密:
  1. [/home/javalee/myshell]cat newfile|tr [a-m][n-z][A-M][N-Z] [n-z][a-m][N-Z][A-M]>myfile
复制代码
结果略,跟原来的myfile一模一样啦~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表