linux 几则小技巧

删除文件中空行的几种方法
1,cat filename|tr -s ‘\n’
2,sed ‘/^$/d’ filename
3,awk ‘{if($0!=””)print}’ filename
4,用grep也可以,但是比较麻烦

用自动导入函数的方法,可以在命令行下像执行命令一样快捷,而且速度快,占用资源少.
1,建立自己的函数库
mkdir functionlib
然后将常用的脚本改成函数的语法,如:

function filename { command ; }
将filename拷贝到functionlib中,
2,修改环境文件,在/etc/profile中添加
export FPATH=$HOME/functionlib
3,重登录一下
这样的话,你就可以随时用像ls那样运行你自己的filename”命令”
而不需要用什么dot,sh,来运行你的函数/脚本啦~~
如果在脚本中运行,可以在脚本顶部用
#!/bin/sh
##
autoload filename //来自动导入函数.

filename //调用函数

以我的为例:
1,mkdir funlib
2,cat tree
function tree {
du|awk ‘{print $2, “== (“$1/2″kb)”}’|sort -f|sed -e “s,[^ /]*/\([^ /]*\) ==,\|–\1,” -e”s,[^ /]*/,| ,g”; }
把这个tree文件cp到funlib目录中,
3,把:
export FPATH=$HOME/funlib
加到/etc/profile文件中
4,运行:
. /etc/profile
就可以啦~~

使用bash定义你的快捷键

在~./inputrc中输入如下内容
Control-t:”top -i\C-m”
然后保存退出,关闭虚拟终端,
重新开启后,按Ctrl+t,看看会发生什么?呵呵,很好用吧,
可以把一些经常打的长的命令按照这样的方法输入,当然不要和别的已经定义的快捷键冲突

为普通用户分配特权

有时候我们不想让一个用户有超级用户权限,又想该用户能执行一些超级用户才能执行的命令。我们可以指定某个列入/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这台主机上运行查看路由表命令。

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

标题: 技巧:限时输入的实现

——————————————————————————–

举例:

代码:
#!/bin/ksh
stty -icanon min 0 time 100   <=限定时间为10秒
while
do
       echo “Please input:y/m/d/[ENTER]:”   <=输入字母y,m,d或者回车
       read input
       case $input in
       y)  date +%Y;break;;
       m)      date +%m;break;;
       d)      date +%d;break;;
       “”)     date +%Y/%m/%d;break;;  <=当输入为空(回车)或者10秒钟内没有输入的话,取设定的默认值.
 *)  echo “wrong!again!”;continue;;
esac
done
stty sanestty的中文文档见:
http://www.linuxsir.com/bbs/showthre…threadid=45871

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据