LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
置顶的主题 精华主题  
主题工具
旧 03-07-10, 16:38 第 31 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

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


在linux中,有一个很有趣的命令--watch,他的作用很有趣!
他作用是以全屏幕方式重复地执行指定的命令,用户可以通过他了解命令的运行情况.
如,我们要观察内存动态的变化,那么就可以:
watch free
这样就可以动态的观察内存中各个指标在指定时间内的变化啦~~,
如要观察虚拟内存的变化,也可以通过打开另外一个终端,而不耽误当前终端的操作!:
xterm -e watch -n 1 vmstat &
这样就会*出一个xterm,显示有关虚拟内存的情况.
详细解释,请:
watch --help
man watch
  KornLee 当前离线   回复时引用此帖
旧 03-07-11, 15:16 第 32 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 技巧: 用 tr 过滤文件[转贴]


了解文本实用程序

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

没有人曾说过 sed 很容易 - 它确实不容易!但通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。Jacek Artymiak 向您展示如何去做。

您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。


那么,为什么要使用 tr,而不使用 sed 呢?当然是为了使事情简单。例如,如果我们希望用字母"z"来替换出现的所有字母"a",则可以用 tr a z,这条命令毫无疑问比 sed -e s/a/z/g 简单,尤其在把它用到脚本中时,其中的引号转义很让人头痛。另外,在使用 tr 时,可以避免写那些让人讨厌的正则表达式。


使用 tr 很简单:使用前面一段中所给出的符号表示法,用一个字符去替换出现的所有另一个字符。当需要替换多个字符时,使用类似于这样的表示法:tr abc xyz,它表示用字母"x"去替换出现的所有字母"a",用字母"y"去替换所有字母"b",用字母"z"去替换所有字母"c"。这两组中所列出的字符的数目不必相等。


您也可以指定字符的范围。例如,tr a-z A-Z 将用对应的大写字母来替换所有的小写字母(例如,它将"no smoking"转换成"NO SMOKING")。当您在 vi 编辑器中想强调正在编辑的文本的某一部分时,使用这一特殊技巧非常方便。只要按一下 Escape 键,然后按 : 键,再输入 2,4!tr 'a-z' 'A-Z',最后按一下 Return 键。现在,从第 2 行到第 4 行的字母就都转换成了大写字母。


关于 tr 的其它内容
GNU 手册上提到,tr 在执行您所选择的操作时,通过将标准输入复制到标准输出,从而实现"转换、压缩和/或删除字符"。在这篇技巧文章中,您将了解到这些选项;当然也可以通过了解 tr 的手册页或信息页,学习到更多关于 tr 的内容。

打开一个新的终端窗口,输入 man tr 或 info tr - 或者打开一个新的浏览器窗口,并链接到 gnu.org 上的 tr 手册页(关于这个链接,请参阅参考资料)。



另外,当有人给您发送了一个在 Mac OS 或 DOS/Windows 机器上创建的文本文件时,您会发现 tr 非常有用。如果没有将文件保存为使用 UNIX 换行符来表示行结束这种格式,则需要将这样的文件转换成本机 UNIX 格式,否则一些命令实用程序不会正确地处理这些文件。Mac OS 的行尾以回车字符结束,许多文本处理工具将这样的文件作为一行来处理。为了纠正这个问题,可以用下列技巧:

Mac -> UNIX:tr '\r' '\n' < macfile > unixfile
UNIX -> Mac:tr '\n' '\r' < unixfile > macfile

Microsoft DOS/Windows 约定,文本的每行以回车字符并后跟换行符结束。为了纠正这个问题,可以使用下列命令:

DOS -> UNIX:tr -d '\r' < dosfile > unixfile
UNIX -> DOS:在这种情况下,需要用 awk,因为 tr 不能插入两个字符来替换一个字符。要使用的 awk 命令为 awk '{ print $0"\r" }' < unixfile > dosfile

另外,当您需要对文本文件做一些简单的整理工作(如用 tr -d '\t' 除去制表符,用 tr -s ' ' 除去多余的空格,或者用 tr -d '\n' 将分开的几行合成一行)时,会需要用 tr。同样,可以在 vi 内使用所有这些命令;只要记住:在 tr 命令前要加上您希望处理的行范围和感叹号(!),如 1,$!tr -d '\t'(美元符号表示最后一行)中所示。


有什么问题,或是有什么见解吗?我很欢迎您的来信 - 请将邮件发至 jacek@artymiak.com
  KornLee 当前离线   回复时引用此帖
旧 03-07-22, 02:54 第 33 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 技巧:删除文件中空行的几种方法


1,cat filename|tr -s '\n'
2,sed '/^$/d' filename
3,awk '{if($0!="")print}' filename
4,用grep也可以,但是比较麻烦

此帖于 03-07-22 02:59 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-07-23, 22:48 第 34 帖
哈蜜瓜
 
哈蜜瓜 的头像
 
 
资深版主  
  注册日期: Jun 2002
  我的住址: 湖南
  帖子: 2,729
  精华: 60
 

标题: 这是我刚写的XF86Config配置程序,调用xf86cfg,请大家看看有什么值得改进的?


还没系统地学过shell,水平比较菜,还请大家别见笑!如果哪里需要改进的请发短信或电子邮件:hamigua@8bb8.com,多谢!
原贴请见:http://www.linuxsir.com/bbs/showthre...threadid=53441
引用:
#!/bin/sh

# This script was heavily modified by ROBERT LANGE hamigua hamigua@8bb8.com for use with the
# You may reach http://www.linuxsir.com explore even more helps

# We are setting $HOME too /root so this will work wih the installation also.
HOME=/root

# If we aren't root, bail:
if [ "$USER" = "root" ]; then
TMP=/var/log/setup/tmp
else
echo "Only root can configure X."
exit
fi

if ps -aA | grep "X" > /dev/null ; then
dialog --title "EXIT X SERVER?" --yesno \
"You are running the X server now,but this program can't run with it. \
I shall kill your X progress,after exit X server,please run 'xf4config' program to \
reconfigure once more. Do you want to continue ?
" 8 66
if [ ! $? = 0 ]; then
exit
fi
if ps -aA | grep "gdm-binary" > /dev/null ; then
killall gdm-binary
fi
if ps -aA | grep "kdm" > /dev/null ; then
killall kdm
fi
if ps -aA | grep "xdm" > /dev/null ; then
killall xdm
fi
if ps -aA | grep "gnome-session" > /dev/null ; then
killall gnome-session
fi
if ps -aA | grep "kdeinit" > /dev/null ; then
killall kdeinit
fi
if ps -aA | grep "wmaker" > /dev/null ; then
killall wmaker
fi
if ps -aA | grep "X" > /dev/null ; then
killall X
fi
fi

# Now, this wouldn't make much sense either:
if [ ! -r /usr/X11R6/bin/XFree86 ]; then
exit
fi


dialog --title "CONFIGURE X SERVER?" --yesno \
"If you like, XFree86 can attempt to probe for your video hardware and mouse, and \
write an initial configuration file to /etc/X11/XF86Config. Would you like to do this now ? \
You can reach http://www.linuxsir.com explore even more help. \
Establish by hamigua <hamigua@8bb8.com>" 9 66
if [ ! $? = 0 ]; then
exit
fi

if [ ! -d $TMP ]; then
mkdir -p $TMP
chmod 700 $TMP
fi

# OK, we'll warn the user if there's already an existing XF86Config:
CONFIG_EXISTS=false
for xf86config in /etc/X11/XF86Config-4 /etc/XF86Config-4 /usr/X11R6/lib/X11/XF86Config-4 $HOME/XF86Config-4 ; do
if [ -r $xf86config ]; then
CONFIG_EXISTS=$xf86config
fi
done
if [ ! "$CONFIG_EXISTS" = "false" ]; then
dialog --title "FOUND EXISTING XF86Config in `dirname $CONFIG_EXISTS`" \
--msgbox "A previous X Window System configuration file has been found. \
You can now reconfigure X, replacing the file with a new version (and \
keeping a backup of the old file), or you can abort leaving the existing \
config file in place. Hit ENTER to rename the XF86Config file to \
XF86Config.backup and create a new one, or ESC to abort." 9 72
if [ ! $? = 0 ]; then
exit
fi
fi

# Have the X server create a default config file:
/usr/X11R6/bin/XFree86 -configure
if [ ! $? = 0 ]; then
# failure, bail.
exit
fi

# Move any existing config file(s) aside:
for xf86config in /etc/X11/XF86Config-4 /etc/XF86Config-4 /usr/X11R6/lib/X11/XF86Config-4 $HOME/XF86Config-4 ; do
if [ -r $xf86config ]; then
mv $xf86config ${xf86config}.backup
fi
done

mv $HOME/XF86Config.new /etc/X11/XF86Config
# Okay now we edit the little bugger to make it more usable
xf86cfg -textmode

# I know this completely hoses the indentation of the XF86Config file, but
# really don't know a good way around that. Shoulda used perl.

cat /etc/X11/XF86Config | while read LINE ; do
echo "$LINE" >> /etc/X11/XF86Config-4
if echo $LINE | grep Load | grep type1 1> /dev/null ; then
# X -configure is pretty broken... it leaves out the type1 and freetype
# modules. We'll work around this. BTW, it matters not if these appear
# multiple times, but matters A LOT if they don't appear at all.
# echo "Load \"type1\"" >> /etc/X11/XF86Config-4
echo "Load \"xtt\"" >> /etc/X11/XF86Config-4
fi
# lets add wheel mouse support won't hurt if no wheel
if echo $LINE | grep Option | grep Device | grep /dev/mouse 1> /dev/null ; then
echo "Option \"ZAxisMapping\" \"4 5\"" >> /etc/X11/XF86Config-4
fi
#All right no we add a couple more font paths and we are there
if echo $LINE | grep "/usr/X11R6/lib/X11/fonts/100dpi/" 1> /dev/null ; then
echo "FontPath \"/usr/X11R6/lib/X11/fonts/TTF/\"" >> /etc/X11/XF86Config-4
echo "FontPath \"/usr/X11R6/lib/X11/fonts/local/\"" >> /etc/X11/XF86Config-4
echo "FontPath \"/usr/share/fonts/local/\"" >> /etc/X11/XF86Config-4
fi
#now lets add some monitor stuff
if echo $LINE | grep Section |grep Monitor 1> /dev/null ; then
ddcprobe |grep "horizontal =" |sed 's%Timing ranges: horizontal =%HorizSync %' |sed 's%, vertical =% VertRefresh %' >> /etc/X11/XF86Config-4
fi

done
rm -f $HOME/XF86Config.new
rm -f /etc/X11/XF86Config
# make it so normal users can use this config file

echo "Section \"DRI\"" >> /etc/X11/XF86Config-4
echo " Mode 0666" >> /etc/X11/XF86Config-4
echo "EndSection" >> /etc/X11/XF86Config-4


dialog --title "XFree86 CONFIGURED" \
--msgbox "Your new XFree86 configuration file has been saved to /etc/X11/XF86Config-4. \
You may still need to add or adjust some values in the file to achieve the desired \
results. For complete information about \
making these adjustments, please refer to. \"man XF86Config\" I'll go on X server now." \
11 66
gdm
  哈蜜瓜 当前离线   回复时引用此帖
旧 03-07-24, 03:06 第 35 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

谢谢哈兄!不过应该帖到[精华区]也许更恰当
  KornLee 当前离线   回复时引用此帖
旧 03-07-25, 23:04 第 36 帖
777
 
777 的头像
 
 
已封禁  
  注册日期: Jun 2003
  我的住址: 中国
  帖子: 990
  精华: 6
 

标题: 回复: 技巧:像执行命令一样执行脚本


引用:
最初由 javalee 发表
用自动导入函数的方法,可以在命令行下像执行命令一样快捷,而且速度快,占用资源少.
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 //调用函数
...
看不懂 版主能举一个完整的简单的实例吗??
  777 当前离线   回复时引用此帖
旧 03-07-26, 00:58 第 37 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

很简单,你按照上述步骤就可以的呀!~O~,
以我的为例:
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
就可以啦~~

此帖于 03-07-26 01:00 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-07-26, 10:07 第 38 帖
777
 
777 的头像
 
 
已封禁  
  注册日期: Jun 2003
  我的住址: 中国
  帖子: 990
  精华: 6
 

有一点不明白 怎么要先写一个再复制到funlib目录中

直接在它那里写行吗?
  777 当前离线   回复时引用此帖
旧 03-07-26, 11:40 第 39 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

行!
  KornLee 当前离线   回复时引用此帖
旧 03-07-27, 16:13 第 40 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 技巧:如何判断输入的是字符还是数字的三个方法


1,用输入的字符串和任意一个数字进行运算,可以判断!
代码:
#!/bin/ksh # var=$(echo "$1*1"|bc) if [[ $var != 0 ]] then echo "$1 is a number" else echo "$1 is a charter" fi
2,用流编辑器sed!
代码:
if [ -n "`echo $1|sed -n '/^[0-9][0-9]*$/p'`" ] then echo "$1 is number!" else echo "$1 is not number!" fi
3,用awk来判断!
代码:
echo $1|awk '{if($0~/[^0-9]/) {print "'$1' is not number"} else{print "'$1' is number"}}'
来自:chinaunix.net
  KornLee 当前离线   回复时引用此帖
旧 03-07-28, 12:46 第 41 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

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


在~./inputrc中输入如下内容
Control-t:"top -i\C-m"
然后保存退出,关闭虚拟终端,
重新开启后,按Ctrl+t,看看会发生什么?呵呵,很好用吧,
可以把一些经常打的长的命令按照这样的方法输入,当然不要和别的已经定义的快捷键冲突
[提供:前任版主Pye兄)
  KornLee 当前离线   回复时引用此帖
旧 03-07-29, 00:02 第 42 帖
strongwilled
 
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: UESTC
  帖子: 79
  精华: 0
 

我实验了一下,好象只能按"Enter"才能继续,是不是这样?
引用:
最初由 javalee 发表
技巧ress any to continue...的实现

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

  strongwilled 当前离线   回复时引用此帖
旧 03-07-29, 03:28 第 43 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

是的!
但是我记得在 www.chinaunix.net 上有个铁子是讨论如何改变的,像用一个定义的键而不用回车符的!,你感兴趣的话可以找找
  KornLee 当前离线   回复时引用此帖
旧 03-07-31, 14:38 第 44 帖
hentala
 
 
 
注册会员  
  注册日期: Jun 2003
  我的住址: 武汉
  帖子: 27
  精华: 0
 

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


请问: javalee 斑竹,你所提供的这个命令跟输出重定向有区别吗?如果用tcpdump〉typescipt是不是同样的效果?

此帖于 03-07-31 23:51 被 hentala 编辑.
  hentala 当前离线   回复时引用此帖
旧 03-08-01, 15:15 第 45 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

一样不一样,你可以自己在命令行中敲入script,自己实践一下吧
  KornLee 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 16:52


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org