当一个文件中的文件数过多,在执行rm * 删除的时候会提示:
ksh: /user/bin/rm: 0403-027 The Parameter list is too long.
这个错误的根本原因是因为 /usr/include/limits.h 定义系统核心 LINE_BUFSZ 限制.
如果有大量文件数需要删除,
可以考虑用 xargs 的 -n 参数进行批量删除.参考如下示例:
find /backup/ -ctime 1 -print | xargs -n 10 rm -rf {} \;
find ./ -ctime 1 -exec rm -rf {} \;
-atime 1 (1天前被accessed)
-ctime 1 (1天前被changed)
6.每隔1秒显示AIX的剩余内存
#!/usr/bin/ksh
while [ 1 -eq 1 ]
do
x=`svmon -G | grep memory | awk '{print $4}'`
y=`expr $x \* 4 \/ 1024`
echo '剩余'$y'M'
echo `date +%T'
sleep 1
done
7.通过进程名来kill进程
这样的命令当然也是有的
#pkill 进程名
#killall 进程名
来完成这个kill的任务
8.Shell脚本实现统计进程的CPU占用率
#!/bin/sh
pid=`ps -e|egrep "\b$1$" | awk '{print $1}'`#获取进程id
echo $pid
cpu=`top -n 1 -p $pid|tail -2|head -1|awk '{ssd=NF-4} {print $ssd}'`
#获取进程cpu占用
#echo $cpu
declare -i cpuall=0
declare -i time=0
while [ 1 ]
do
cpu=`top -n 1 -p $pid|tail -2|head -1|awk '{ssd=NF-4} {print $ssd}'`
cpuall=cpuall+cpu
time=time+1
average=`echo "scale=3;$cpuall/$time" |bc -l`
#declare -i average=$cpuall/$time
echo $average
sleep 1
done
运行:
$./this.sh process
9.查看AIX操作系统版本
oslevel -s
10.获取之前某天时间脚本
linux平台上:mydate=`date -1d +%Y%m%d`
unix平台上:mydate=`TZ=GMT+16;export TZ;date +%Y%m%d`
echo ${mydate}
11.aix上ftp获取文件脚本
getfile()
{
ftp -niv 127.0.0.1 <user ftppub ftppub
cd $1
lcd $HOME/spool/$filedate
bin
prompt
mget $2
bye
!
}
12.设置输入模式
set -o vi 表示编辑命令行用 vi 模式,默认状态是 vi 的 编辑状态,可以输入、修改,用 ESC 退出编辑状态后,可以用 h,l 来前进后退, j,k 来翻看历史命令,^光标到行首,$光标至行尾,dd 删除该行...等等,和 vi 的用法是一样的。习惯用 vi 的人可以用 set -o vi 这种模式加快命令行编辑。
此外,还有 set -o emacs,表示编辑命令行用 emacs 模式,不分编辑状态和控制状态。 可以直接输入,也可以用 [CTRL]-a 至行首,[CTRL]-e 至行尾,[CTRL]-k 删除光标处到末尾...等等,这和 emacs 的编辑方式是一样的。这是默认模式,也是最常见和大多数人习惯的方式。
13.查看文件中以'|'分隔的第二列出现重复的值
awk -F"[/|]+" '{print $2}' tbl_map.dat | sort | uniq -c
14.统计文本中所有行数值相加
#!/usr/bin/ksh
count=0
num=0
for n in `cat /app/bcmsfile/tmp/1`
do
count=`expr $count + $n`
num=`expr $num + 1`
echo $num
done
x=`expr $count \/ $num`
echo '平均值=' $x
15.SHELL如何实现判断FTP GET到的文件与源端大小是否一致
putfile()
{
ftp -niv 127.0.0.1 <ftp.log
user ftppub ftppub
cd ${LDIR}
lcd ${LDIR}
bin
mput *
ls -l
bye
!
}
for file in `ls ${LDIR}`
do
size_l=`ls -e ${LDIR}/$file | awk {'print $5'}`
size_f=`grep $file ftp.log | awk {'print $5'}`
if [ ${size_l} -eq ${size_f} ];then
echo "${file}: sizes ${size_l} ok"
else
echo "${file}: sizes ${size_l} ${size_f} not equal"
fi
done
16.修改文件访问时间
touch -a -m MMDDHHMM[YY] FILENAME
17.通过进程查找对应的程序
ps -ef 进程名
cd /proc/进程ID
$ ls -l /proc/18283
lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 cwd -> /v8t/qhkf/risk_b/kssmdb
-r-------- 1 qhkf qhkf 0 01-06 11:14 environ
lrwxrwxrwx 1 qhkf qhkf 0 01-06 11:14 exe -> /v8t/qhkf/risk_b/kssmdb/A