2009年5月4日星期一

Unix.Power.Tools: 39 - 53

跑1次看执行时间:time program xxx yyy zzz
跑5次看平均时间:runtime –5 program xxx yyy zzz
一些时间参数:
  • 用户态 CPU 时间:执行库函数,但不包括其中的系统调用。
  • 系统态 CPU 时间:系统调用及程序管理函数。
  • 系统 I/O 时间
  • 网络 时间
  • 其他程序运行时间
  • 虚拟内存效率
查看系统负载:uptime
进程优先级:
  • nice +n command 高优先级
  • nice –n command 低优先级
  • renice 重调优先级
40. Delayed Execution

at 指定时间执行某项任务
atq / at -l 查看任务队列
atrm 删除某个任务
cron 周期性的重复执行某项任务。
编辑cron任务列表:
$ crontab −l > mycron
$ vi mycron
$ crontab mycron 
 
41. Terminal and Serial Line Settings
 
teletypes 缩写为 ttys,串口通信。
UNIX系统假设所有的teletypes是全双工的,且使用remote echo。即,系统可以与teletype双向同时通信,且除非用户要求teletype才会打印出用户输入的内容。
终端模式:
  • raw:不处理输入输出字符,直接传给程序
  • cooked:内核对输入输出字符做转换
  • cbreak:有些控制字符(如中断、退出、挂起等)被解释,其他字符不动
System V 对每个选项进行单独的控制
虚拟终端接口 pseudo teletypes / ptys
POSIX定义标准接口,both at the UNIX kernel level and for the stty command
RTS/CTS 流控制
查看终端配置 stty -a
expand 将tab置换为空格
termcap & terminfo

42. Problems with Terminals & 43. Printing 

查看 term 行、列数:stty size
pr 整理输出格式
lpr 打印
troff / TeX / Scribe
ps 相关程序

44. Shell Programming for the Uninitiated 

cat / cut / sort / grep / sed / awk
$? 返回程序执行状态

脚本中的 "$@" 会将命令行参数都加上 "" 。
$# 指命令行参数个数
shift 移出一个命令行参数
getopt 解析命令行参数
source scriptfile 在当前shell读入脚本,而非新建一个子shell

45. Shell Programming for the Initiated


#无限循环,
while :
do
  commands
done


m >& n 使m指向与n相同的位置

command 3>&2 2>&1 1>&3 交换STDOUT及STDERR,解释见图 45.3 - 45.6

m <& - 关闭输入文件描述符m

m >& - 关闭输出文件描述符m

<&- 关闭stdin

>&- 关闭sdtout

sh < file 读入file文件内容,然后返回

sh file 执行file文件中的指令

数学表达式:i=`expr "$i" + 1`

正则匹配结束位置:

$ part="resistor 321−1234−00"  name="Ellen Smith"
$ expr "$part" : '[a−z ]*[0−9]'
10
$ len=`expr "$name" : '[a−zA−Z]*'`
$ echo first name has $len characters
first name has 5 characters

解析字符串:

last=`expr "$*" : '.* \(.*\)'` # LAST ARGUMENT
first=`expr "$*" : '\(.*\) .*'` # ALL BUT LAST ARGUMENT

取第三栏:

string="this:is:just:a:dummy:string"
field3_awk=`echo "$string" | awk −F: '{print $3}'`
field3_cut=`echo "$string" | cut −d: −f3`

删掉0-25列:

echo "The answer is `echo \"$text\" | awk '{print substr($0,25)}'`"
echo "The answer is `echo \"$text\" | cut −c25−`"

多层子命令:

$ echo "Next year will be 19$(expr $(date +%y) + 1)."
Next year will be 1997.
 

chapter 46 - 53

#查找某程序的可执行文件,源码,手册页
#有-b(可执行文件), -s(源码), -m(手册页)等单独对应的选项
$ whereis more
more: /bin/more /usr/share/man/man1/more.1.gz /usr/share/man/man1/more.1p.gz

#某个指令对应的具体程序
$ which more /bin/more

segmentation fault (core dumped):程序试图读或写某个未分配给它的内存地址,可能是指向非法地址或不止一个进程同时访问等等。

格式化时间输出:
$ date +'Today is %Y-%m-%d.'
Today is 2009-05-09.
 
新建一个文件100k-file,共12800行,每行内容均为"1234567":
   yes 1234567 | head -12800 > 100k-file
 

 


 


 

没有评论:

发表评论