逐渐整理,逐步贴出,也希望起到抛砖引玉的作用.
[原创]1.批量改名或拷贝文件
比如将 start*.sh文件改为stop*.sh
拷贝
先查看
ls -l start*.sh|awk '{m=$9; gsub(/start/,"stop",$9);print "cp "m " "$9}'
再运行
ls -l start*.sh|awk '{m=$9; gsub(/start/,"stop",$9);print "cp "m " "$9}'|sh
改名
先查看
ls -l start*.sh|awk '{m=$9; gsub(/start/,"stop",$9);print "mv "m " "$9}'
再运行
ls -l start*.sh|awk '{m=$9; gsub(/start/,"stop",$9);print "mv "m " "$9}'|sh
[ 本帖最后由 mxin 于 2006-6-18 12:52 编辑 ]
mxin 回复于:2006-06-18 12:35:59
[原创]2.改进grep 2048字符限制的小工具
我们查找匹配文件市常常遇到grep报行长度超过2048这样的错误,我做了这个小工具,findtxt,可查找当前目录下的匹配文件,如果需要,把注释打开,可显示匹配内容。希望对大家有所帮助。
for file in `find . ! -type d`
do
line=`sed -n /$1/p $file`
if [ "$line" != "" ]; then
echo $file
# echo $line
fi
done
[ 本帖最后由 mxin 于 2006-6-18 12:53 编辑 ]
mxin 回复于:2006-06-18 16:14:17
[原创]3.查看文件使用者的小工具
对fuser的一点改进,呵呵.
1.vi showuser 建立一个文件,内容只有一句:
find $1 -exec fuser -u {} \; 2>;&1|awk '{ if ($2 != "" print $1 $2 }'
2. chmod 755 showuser
3. cp showuser /usr/bin
4. showuser .
showuser /usr
会把当前目录下的在使用的文件的文件名,使用者的id,name显示出来.
mxin 回复于:2006-06-19 14:57:00
[原创]4.清理垃圾,可放在crontab里每天执行。
#rmlog.sh
find /tmp ! -name "*.X11*" -mtime +7 -exec rm -f {} \;
find /var/tmp -mtime +5 -exec rm -f {} \;
find /var/preserve /recycle -mtime +7 -exec rm -f {} \;
crontab
0 1 * * * /home/scripts/rmlog.sh > /tmp/rmlog.log 2>&1
[ 本帖最后由 mxin 于 2006-6-21 22:04 编辑 ]
mxin 回复于:2006-06-19 19:33:45
[原创]5.强制关闭vg(包括umount所有相关文件系统)
#varyoffvg_force.sh
if [ $# -le 0 ] ;then
echo "no para, example:varyoff_vg.sh erpapp_vg "
exit
fi
df -k|awk '{print $7 }'|grep -v Mounted >/tmp/fs_mounted.txt
for i in `lsvg -l $1 |grep -vE "N/A|vg|MOUNT"|awk '{print $7}'`
do
if [ `grep -c $i /tmp/fs_mounted.txt` -ge 1 ] ; then
echo fuser -kc $i
umount $i
fi
done
varyoffvg $1
mxin 回复于:2006-06-20 10:50:37
[原创]6.kill_fs_user.sh (停掉使用某文件系统的用户,自动判断该文件系统是否mount,避免kill掉其他用户)
if [ $# -le 0 ] ;then
echo "no para, example:kill_user.sh /applprod "
exit
fi
df -k|awk '{print $7 }'|grep -v Mounted >/tmp/du_.txt
if [ `grep -c $1 /tmp/du_.txt` -eq 1 ] ; then
echo fuser -kc $1
fi
[ 本帖最后由 mxin 于 2006-6-26 20:09 编辑 ]
花泽类 回复于:2006-06-20 11:17:26
兄弟,这个帖子不错,最近在研究shell script,很好啊,希望继续增加新的原创,另外有没有关于shell script学习的好的站点链接?
mxin 回复于:2006-06-20 19:53:59
[原创]7.相当于mirror rootvg,但当rootvg里有不想mirrror的lv或盘大小不一时比较有用。
##mkmirrorvg.sh
mklvcopy -k hd5 2 $1
mklvcopy -k hd6 2 $1
mklvcopy -k hd8 2 $1
mklvcopy -k hd4 2 $1
mklvcopy -k hd9var 2 $1
mklvcopy -k hd3 2 $1
mklvcopy -k hd1 2 $1
mklvcopy -k hd2 2 $1
mklvcopy -k hd10opt 2 $1
mklvcopy -k lg_dumplv 2 $1
bosboot -ad $1
bootlist -m normal $1
zlg88 回复于:2006-06-20 22:47:20
很不错,请继续努力。
建议做一个Shell菜单,将想要的脚本都做做菜单项。
lingam 回复于:2006-06-21 01:07:00
引用:原帖由 mxin 于 2006-6-18 11:44 发表
逐渐整理,逐步贴出,也希望起到抛砖引玉的作用.
[原创]1.批量改名或拷贝文件
比如将 start*.sh文件改为stop*.sh
拷贝
先查看
ls -l start*.sh|awk '{m=$9; gsub(/start/,"stop",$9);print "cp ...
for i in `echo start*.sh`
do
cp $i `echo $i|sed 's/start/stop/g'` #拷贝
#mv $i `echo $i|sed 's/start/stop/g'` #改名
done
lingam 回复于:2006-06-21 01:12:04
引用:原帖由 mxin 于 2006-6-19 14:57 发表
[原创]4.清理垃圾,可放在crontab里每天执行。
#rmlog.sh
find /tmp ! -name "*.X11*" -mtime +7 -exec rm -f {} \;
find /var/tmp -mtime +7 -exec rm -f {} \;
find /recycle -mtime +7 -exec rm ...
find /var/tmp/ /recyle /dir_whatever -mtime +7 -exec rm -[color=Red]r[/color]f {} \;
mxin 回复于:2006-06-21 18:40:43
[原创]8. 察看根目录各文件和子目录大小,去除文件系统统计
# du_.sh
df -k|awk '{print $7 }'|grep -v Mounted >/tmp/df_mounted.txt
cd /
for i in `ls -l|awk '{print $9}'|grep -v "\-i"`
do
if [ `grep -c $i /tmp/df_mounted.txt` -eq 0 ] ; then
du -sk $i
fi
done
养眼 回复于:2006-06-21 18:48:11
不错!谢谢你的辛苦
kaka_wang 回复于:2006-06-22 01:23:38
向楼主学习!
mxin 回复于:2006-06-22 12:08:02
引用:原帖由 lingam 于 2006-6-21 01:12 发表
find /var/tmp/ /recyle /dir_whatever -mtime +7 -exec rm -[color=Red]r[/color]f {} \;
这个恐怕不能完全简化,比如X11文件我希望不能清除等等。
mxin 回复于:2006-06-23 04:31:34
[原创]9.防止文件系统下和根目录下rm -rf * 误操作。
#deny_rmall.sh
cd /;touch ./-i;df -k|grep -v Mounted|grep -v proc|grep -v "\/tmp"|awk '{print "cp \"./-i\" " $7'}|sh
cp "/-i" /etc
cp "/-i" /dev
[ 本帖最后由 mxin 于 2006-6-23 06:56 编辑 ]
mxin 回复于:2006-06-23 19:25:03
[原创]10. 保存清理errpt,(当然可以改为其他目录 )
#errclear.sh
errpt >/home/mxin/mon/log/errpt_`date +%Y%m%d`.log
errpt -a >>/home/mxin/mon/log/errpt_`date +%Y%m%d`.log
errclear 0
mxin 回复于:2006-06-24 13:06:22
[原创]11.起大量shell脚本
#start_procs.sh
cat start_procs.list|awk '{print "sh "$1".sh"}'|sh
#start_procs.list(可追加修改)
startprocessor
ProcProcessor
/home/scripts/startArocessor
p_mj_deal_cardevent
[ 本帖最后由 mxin 于 2006-6-24 13:07 编辑 ]
mxin 回复于:2006-06-26 09:51:27
[原创]12.停大量进程
# stop_procs.sh
cat procs.list|awk '{print "stop_proc.sh "$1}'|sh
#stop_proc.sh
ps -ef|grep $1|grep -v grep|awk '{print "kill -9 "$2}'|sh
#stop_procs.list(可追加修改)
startprocessor
ProcProcessor
Jackrocessor
p_mj_deal_cardevent
amuabei 回复于:2006-06-26 10:13:49
赞!向楼主学习。
fzm 回复于:2006-06-26 13:45:13
谢谢楼主了。
mxin 回复于:2006-06-29 16:13:41
[原创]13.收集系统信息
echo --------------------------------------`hostname`-------------------------------------------
prtconf
echo -----------lsvg;lsvg `lsvg -o`
echo "-----------lsvg -l ";lsvg -l `lsvg -o`
echo "-----------lslv lv ";lsvg -l `lsvg -o`|grep -v "LV NAME"|grep -v :|awk '{print "lslv "$1}'|sh
echo -----------df;df -k;lsfs
echo -------------netstat;netstat -in;netstat -i;netstat -r
echo -------------------ps;ps -efk;ps gu
echo ------------------lscfg;lscfg -vp
echo --------------lssrc;lssrc -a
echo ------------lsslot;lsslot -c pci
echo -------------lspv;lspv
echo -------------lslpp;lslpp -l
echo -------------lsattr; lsdev -C|awk '{print "echo ---"$1";lsattr -El " $1}'|sh
echo -------------prtconf -v;prtconf -v
echo -------------errpt; errpt ;errpt -a
echo -------------major; ls -al /dev/*
echo -------------hosts file; cat /etc/hosts
if [ `ps -ef|grep cluster|grep -v grep|wc -l` -ge 1 ] ;then
echo -------------HA INFO
/usr/es/sbin/cluster/utilities/cltopinfo -c;/usr/es/sbin/cluster/utilities/cltopinfo -n;/usr/es/sbin/cluster/utilities/clshowres -n
`hostname`;/usr/es/sbin/cluster/utilities/cldisp
fi
[ 本帖最后由 mxin 于 2006-9-21 16:03 编辑 ]
mxin 回复于:2006-06-30 08:32:46
[原创]14.将多级子目录的权限放开
#chmod_dir.sh
echo for example::chmod_dir.sh rwx /home/mxin/mon
echo $1$2 >/tmp/chmod_dir.txt
cat /tmp/chmod_dir.txt|awk -F / '{print "chmod o+x /"$2";chmod o+x /"$2"/"$3";chmod o+x /"$2"/"$3"/"$4";chmod o+x /"$2"/"$3"/"$4"/"$5";chmod -R o+"$1" /"$2"/"$3"/"$4"/"$5"/"$6}'|sh
bluesq112 回复于:2006-06-30 08:51:39
收了,
谢谢啦!
Weget 回复于:2006-06-30 11:11:43
留名的哈
mxin 回复于:2006-07-03 08:05:29
[原创]15.监控oracle是否有锁。
#mon_db_lock.sh
. .profile
cd /home/mxin/mon
if [ `date +%H%M` = "0800" ]; then
echo 0 > warn_count
fi
warn_count=`cat warn_count`
sqlplus "/as sysdba" <<EOF
set feed off;
set heading off;
spool /tmp/db_lock.out1;
@mon_db_lock.sql
spool off;
exit
EOF
sleep 13
sqlplus "/as sysdba" <<EOF
set feed off;
set heading off;
spool /tmp/db_lock.out2;
@mon_db_lock.sql
spool off;
exit
EOF
sleep 27
sqlplus "/as sysdba" <<EOF
set feed off;
set heading off;
spool /tmp/db_lock.out3;
@mon_db_lock.sql
spool off;
exit
EOF
cat /tmp/db_lock.out1|grep -v SQL|grep [0-9] >/tmp/mon_db_lock.out1
cat /tmp/db_lock.out2|grep -v SQL|grep [0-9] >/tmp/mon_db_lock.out2
cat /tmp/db_lock.out3|grep -v SQL|grep [0-9] >/tmp/mon_db_lock.out3
cat /tmp/mon_db_lock.out1|grep -v SQL|grep [0-9]|awk '{print "grep \""$0"\" /tmp/mon_db_lock.out2"}'|sh >/tmp/db_lock1
if [ `cat /tmp/db_lock1|wc -l` -gt 0 ] ; then
cat /tmp/mon_db_lock.out2|grep -v SQL|grep [0-9]|awk '{print "grep \""$0"\" /tmp/mon_db_lock.out3"}'|sh >/tmp/db_lock2
if [ `cat /tmp/db_lock2|wc -l` -gt 0 ] ; then
cat /tmp/mon_db_lock.out3|grep -v SQL|grep [0-9]|awk '{print "grep \""$0"\" /tmp/mon_db_lock.out.old"}'|sh >/tmp/db_lock3
if [ `cat /tmp/db_lock3|wc -l` -gt 0 ] ; then
cat /tmp/db_lock3|awk '{print "wall db lock-------\" "$0 "\"!!" }'|sh
let warn_count=$warn_count+1
fi
fi
fi
cp /tmp/mon_db_lock.out3 /tmp/mon_db_lock.out.old
if [ $warn_count -gt 4 ] ; then
beep.sh
echo 0 > warn_count
fi
#mon_db_lock.sql
set linesize 256
col object_name format a18
col object_id format 99999999
col Locked_Mode format a15
col SERIAL# format 9999999
col session_id format 999999
col oracle_username format a15
col os_user_name format a15
col process format 9999999
SELECT substr(b.object_name,1,18) object_name,a.object_id,
decode( a.locked_mode,
0, 'None', /* Mon Lock equivalent */
1, 'Null', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Exclusive',
a.locked_mode) Locked_Mode, /* X */
session_id, SERIAL#,oracle_username, os_user_name, a.process
FROM v$LOCKED_OBJECT a, dba_OBJECTS b,v$session c
WHERE a.object_id = b.object_id and a.session_id=c.sid
/
mxin 回复于:2006-07-04 07:50:58
[原创]16.监控oracle的表空间
# mon_ts_space.sh
cd /home/oraprod
sqlplus "/as sysdba" <<EOF
set feed off;
set heading off;
spool /tmp/mon_ts_space.out;
@mon_ts_space.sql
exit
EOF
cat /tmp/mon_ts_space.out|grep -v SQL|grep [0-9]|awk -f mon_ts_space.awk
# mon_ts_space.sql
select
df.tablespace_name "Tablespace",
(df.totalspace - fs.freespace) "Used MB",
fs.freespace "Free MB",
df.totalspace "Total MB",
round(100 * (fs.freespace / df.totalspace)) "Pct. Free"
from
dba_tablespaces ts,
(select tablespace_name,
round(sum(bytes) / 1048576) TotalSpace
from dba_data_files
group by tablespace_name) df,
(select tablespace_name,
round(sum(bytes) / 1048576) FreeSpace
from dba_free_space
group by tablespace_name) fs
where
ts.tablespace_name = fs.tablespace_name
and
df.tablespace_name = fs.tablespace_name(+)
and
round(100 * (fs.freespace / df.totalspace)) <20
and df.tablespace_name not in ('APPS_UNDOTS1','TEMP');
[ 本帖最后由 mxin 于 2006-7-5 08:23 编辑 ]
sturm 回复于:2006-07-04 11:16:21
:)
sturm 回复于:2006-07-04 11:17:22
;)
sturm 回复于:2006-07-04 11:18:10
),
mxin 回复于:2006-07-05 08:24:18
[原创]17.只清除所有当前使用该vg的用户
#kill_vg_user.sh
if [ $# -le 0 ] ;then
echo "no para, example:kill_vg_user.sh erpapp_vg "
exit
fi
df -k|awk '{print $7 }'|grep -v Mounted >/tmp/fs_mounted.txt
for i in `lsvg -l $1 |grep -vE "N/A|vg|MOUNT"|awk '{print $7}'`
do
if [ `grep -c $i /tmp/fs_mounted.txt` -ge 1 ] ; then
echo fuser -kc $i
fuser -kc $i
fi
done
[ 本帖最后由 mxin 于 2006-7-5 09:01 编辑 ]
mjxyx 回复于:2006-07-05 08:48:33
UP
luck_jogger 回复于:2006-07-05 14:24:55
看了以上的贴子,自己都不好意思将自己的脚本往上粘。惭愧呀。
mxin 回复于:2006-07-07 09:14:51
[原创]18.每月月底执行的脚本
#month_lastday.sh
. .profile
TZ=TZ-24
echo `date +%d`
if [ `date +%d` = "01" ]; then
echo "ok. today is last day of this month. run it!"
#insert your shell scripts
fi
[原创]19.每月1日执行的脚本
#month_firstdy.sh
. .profile
TZ=TZ+24
echo `date +%d`
if [ `date +%d` = "02" ]; then
echo "ok. today is firstday of this month. run it!"
#insert your shell scripts
fi
[ 本帖最后由 mxin 于 2006-7-7 10:33 编辑 ]
smithy 回复于:2006-07-18 12:34:28
好,辛苦楼主,收藏
shfjaxl 回复于:2006-07-19 10:21:07
楼主太强了,--支持!
dengsimin 回复于:2006-07-25 21:04:32
真的好好哦,谢谢楼主。。。支持。。
mxin 回复于:2006-07-26 13:28:08
[原创]19.跟踪oracle export结果的脚本(放在exp脚本最后)
#exp_check.sh
if [ `tail /tmp/exp_dvlp.log|grep " success"|wc -l` -lt 1 ];then
echo "db dvlp export fail!!!" #报警
wall "db dvlp export fail!!!"
fi
prettycat2008 回复于:2006-08-17 14:06:27
好东东
xinlong101 回复于:2006-08-27 15:29:57
搂主辛苦了。希望搂主能把编写Shell的技巧与大家分享一下。
rain_vivian 回复于:2006-09-05 20:20:19
学习中...
RealRaul 回复于:2006-09-12 00:43:21
好呀!!楼主真好人也!!
qq_lindy 回复于:2006-09-17 11:17:09
辛苦啊,楼主
mxin 回复于:2006-09-21 17:34:06
20.检查系统的进程
a.check_proc.sh:
#check_proc.sh
cat check_proc.list|awk -F "," {'print "Check_proc.sh "$1" \""$2"\"" " "$3 '}|sh
b.check_proc.list:(可修改)
telnet,telnetd -a,2
xcom,xcommanager.py,1
c.Check_proc.sh:
#Check_proc.sh
export LANG=en_US
count=`ps -ef|grep "$2"|grep -v grep|wc -l`
if [ $count -lt $3 ];then
echo $1 has not be started all,the number is $count/$3!
fi
运行示例:
[test3][root][/home/mxin]>ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug 10 - 0:11 /etc/init
root 77910 1 0 Aug 10 - 5:53 /usr/sbin/syncd 60
root 102470 1 0 Aug 10 - 0:00 /usr/ccs/bin/shlap64
root 106572 1 0 Aug 10 - 0:00 /usr/lib/errdemon
root 139366 1 0 Aug 10 - 0:00 /usr/sbin/srcmstr
root 164068 139366 0 Aug 10 - 0:00 /usr/sbin/snmpd
root 184466 139366 0 Aug 10 - 4:38 /usr/sbin/aixmibd
root 246002 1 0 Aug 10 vty0 8:50 -ksh
root 409612 139366 0 Aug 10 - 0:05 sendmail: accepting connections
root 417830 139366 0 Aug 10 - 0:00 /usr/sbin/syslogd
root 421898 1 0 Aug 10 - 0:00 /usr/sbin/uprintfd
root 442602 782494 0 16:19:29 - 0:00 telnetd -a
root 446688 442602 0 16:19:29 pts/1 0:00 -ksh
root 466976 782494 0 Sep 07 - 0:00 ftpd
root 471108 139366 0 Aug 10 - 0:01 /usr/sbin/hostmibd
root 495680 1 0 Aug 10 - 0:04 /usr/sbin/cron
root 508018 139366 0 Aug 10 - 0:00 /usr/sbin/portmap
root 708686 782494 0 Sep 07 - 0:00 ftpd
root 729196 139366 0 Aug 10 - 0:04 /usr/sbin/snmpmibd
root 733290 139366 0 Aug 10 - 0:00 /usr/sbin/muxatmd
root 762026 446688 0 17:46:17 pts/1 0:00 ps -ef
root 782494 139366 0 Sep 07 - 0:00 /usr/sbin/inetd
[test3][root][/home/mxin]>check_proc.sh
telnet has not be started all,the number is 1/2!
xcom has not be started all,the number is 0/1!
[ 本帖最后由 mxin 于 2006-9-21 17:51 编辑 ]
jiafan 回复于:2006-09-24 22:17:07
thanks
zhangtao911 回复于:2006-09-26 16:56:12
请教楼主个问题啊
如何能在aix中查看虚拟内存大小,已经使用的虚拟内存大小,并算出其占用百分比???
不是内存的,是要虚拟内存的。
zhangtao911 回复于:2006-09-26 16:58:37
linux上我以解决,可是在aix上和linux差异太大。如果楼主高人知道如何写这段脚本,希望给我发个邮件
[email]zh_tao@neusoft.com[/email]
万分感激
ziyiu123 回复于:2006-09-27 13:49:16
^_^
学习。
so453 回复于:2006-09-28 16:01:48
100000000
pepehui 回复于:2006-09-29 16:42:22
:)
时速精灵 回复于:2006-09-30 00:10:12
不错,收下了
t_wen 回复于:2006-12-01 11:48:54
想编一个在AIX中只删文件,不删目录的shell,有人会吗。谢谢
nkliyong 回复于:2006-12-03 23:23:36
建议到SHELL版去学习
hello_unix 回复于:2006-12-04 14:14:23
多谢楼主
penny61 回复于:2006-12-05 14:28:31
非常有用,我现在也开始学习写一些程序了!
谢谢楼主!
zhaiph 回复于:2006-12-25 16:42:39
谢谢楼主 以后请多多赐教 楼主辛苦
mxin 回复于:2006-12-28 15:34:13
引用:原帖由 t_wen 于 2006-12-1 11:48 发表
想编一个在AIX中只删文件,不删目录的shell,有人会吗。谢谢
#ls_file.sh /tmp
find $1 ! -type d -exec ls -dl {} \; <-察看目录
#rm_file.sh /tmp
find $1 ! -type d -exec rm -rf {} \; <-清除目录下文件
|