shell脚本的一个好的帮助信息

Shell脚本好的帮助信息的例子 一个好的脚本,必须有好的帮助信息 给一个比较简洁的例子 #!/bin/bash ### ### my-script — does one thing well ### ### Usage: ### my-script <input> <output> ### ### Options: ### <input> Input file to read. ### <output> Output file to write. Use '-' for stdout. ### -h Show this message. help() { awk -F'### ' '/^###/ { print $2 }' "$0" } if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then help exit 1 fi echo Hello World 以前丑陋的用法真是没法看!!! ...

2023年12月28日 · 1 分钟 · 76 字 · 八戒

Nodejs禁止后台偷偷升级

Nodejs禁止后台偷偷升级 去到172.18.31.2上,会看到很多node进程 有病噻,系统都没有运行node程序。唯一的程序是nci-ansible-ui-quick-setup,在/export/server下,还没有运行,升级个茄子噻。 全杀掉,然后全局禁止升级即可 npm config set update-notifier false --global 第一次运行会有个提示,再运行就没有了。

2023年12月28日 · 1 分钟 · 11 字 · 八戒

Tomcat配置不当导致文件泄露

Tomcat配置不当导致文件泄露 说明:Tomcat由于配置不当会导致tomcat/conf log webapps work temp bin lib等信息暴露在游览器中 例如: http://192.168.89.38:8080/conf/catalina.policy http://192.168.89.38:8080/conf/catalina.properties http://192.168.89.38:8080/conf/context.xml http://192.168.89.38:8080/conf/logging.properties http://192.168.89.38:8080/conf/server.xml http://192.168.89.38:8080/conf/tomcat-users.xml http://192.168.89.38:8080/conf/web.xml 修复方法: 将 /export/servers/tomcat 下的 server.xml <Host name="localhost" appBase="" 改成 <Host name="localhost" appBase="webapps" appBase千万不能为空 修改完后重启生效

2023年12月28日 · 1 分钟 · 30 字 · 八戒

用fail2ban简简单单封掉ssh端口的试探

用fail2ban简简单单封掉ssh端口的试探 有人不停试探登录22端口的openssh服务,ip量很大的话,比如1000多ip论番来,会导致服务的Loadavg升高到7左右,系统进程内ssh达到1000多,很困扰 如果改掉sshd的缺省端口22,那么scp以及sftp的时候会带来很大麻烦 这种情况就装个fail2ban就好,注意,Centos 7现在用的是fiewalld,所以fail2ban可以用ufw或者iptables,建议用iptables,比较容易看 #安装 yum install -y epel-release yum install -y fail2ban 最主要的就是修改/etc/fail2ban/jail.conf #vi /etc/fail2ban/jail.conf ...... [sshd-iptalbes] enabled = true filter = sshd port = 22 action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/secure maxretry = 3 bantime = 86400 ...... 注意上面用的是iptables,三次尝试失败就ban一天。

2023年12月28日 · 1 分钟 · 44 字 · 八戒

用logrotate解决catalinna.out过大的问题

用logrotate解决catalinna.out过大的问题 我们的tomcat的catalina.out基本运行一段时间后会出现文件过大的问题,处理一下。 前提是/export/servers/tomcat/下需要建立个软链接tomcat,指向现在正在用的tomcat版本 然后就可以用logrotate来解决catalina.out的日志轮转问题。这种方式比较简单。在/etc/logrotate.d/目录下新建一个名为tomcat的文件, cat >/etc/logrotate.d/tomcat <<EOF /export/servers/tomcat/tomcat/logs/catalina.out{ copytruncate daily rotate 7 missingok compress } EOF 以上的配置说明: /export/servers/tomcat/tomcat/logs/catalina.out{ # 要轮转的文件 copytruncate # 创建新的catalina.out副本后,truncate源catalina.out文件,会丢数据!!! daily # 每天进行catalina.out文件的轮转 rotate 7 # 至多保留7个副本 missingok # 如果要轮转的文件丢失了,继续轮转而不报错 compress # 使用压缩的方式(非常有用,节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右) } 可以手工强制执行logrotate程序。在命令行运行:

2023年12月28日 · 1 分钟 · 38 字 · 八戒

Rsync的日常使用方法

Rsync的基本参数 -a : 归档模式,递归拷贝,带属性。 -u : 同步时目标目录中如果某文件比源中文件时间要新,则保留不动。 -v : 详细显示信息 -z : 压缩 -h : 显示友好信息 -P : 显示传输进度百分比 -R : 使用相对路径,会保留源目录的目录结构。 -e : 使用ssh来传输 源如果没有/,代表连同目录以及目录下的文件,统统拷贝到目的去 源如果最后带/,意思是/*,代表只拷贝目录下的文件,不包括目录本身 如果参数中带-R,那无论源后面有无/,都按原有目录状态拷过去 -R 使用相对路径,会保留源目录的目录结构。 如rsync -av /foo/bar/baz.c remote::/tmp/,会将baz.c传到/tmp下, 而使用了-R,则在/tmp下的文件结构将会是foo/bar/baz.c。 下面两种用法一样: rsync -auvPR --exclude 'upload' new 172.18.34.38::new/ rsync -auvPR --exclude 'upload' ./new 172.18.34.38::new/ 大规模传输细小文件的方法: find ./new -mindepth 6 -maxdepth 6 -type d -print0 | xargs -P 30 -n 60 -I % -0 rsync -auvPR % 172.18.34.38::new/ -print0 -0 find命令有一个特别的参数-print0,指定输出的文件列表以null分隔。然后,xargs命令的-0参数表示用null当作分隔符。 -I -I指定每一项命令行参数的替代字符串。 ...

2023年12月28日 · 1 分钟 · 92 字 · 八戒

Megacli用来重建不知道正确槽位的Raid

192.168.85.7上面有两个Raid 一个Raid1, 500G,应该是两块盘,现在丢了一块,正确的槽位不知道是哪一个 另一个是Raid0,4TB,运行正常 现在在一个新槽位上插了一块硬盘,但是槽位不对,没有自动rebuild,状态是unconfiged good. 首先查一下丢失的盘 /opt/MegaRAID/MegaCli/MegaCli64 -Pdgetmissing -a0 得到参数Array 0,Row 1 首先进行替换,新盘的id是32:2,替换掉Array0 Row1的盘 /opt/MegaRAID/MegaCli/MegaCli64 -PdReplaceMissing -PhysDrv [32:2] -Array0 -row1 -a0 然后强制这块新盘开始重建 /opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -Start -PhysDrv [32:2] -a0 随时查看一下进度 /opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -ShowProg -PhysDrv [32:2] -a0 上面已经走了5%了,走完就ok了。

2023年12月27日 · 1 分钟 · 37 字 · 八戒

Linux下定期检查物理机磁盘的脚本

适用于所有MegaCli的机器。无论dell、浪潮还是H3C。 必须每天上午、下午各检查一下所有物理机的磁盘啊,有问题及时处理。 172.18.31.2 /usr/local/bin/check_disk.sh 脚本: L1到L5,是5个机柜,从上到下是172.18.x.x的ip分布 #!/bin/bash L1=(30.1 30.2 30.3 30.4 30.5 30.6 30.7 30.8 30.9 30.10 30.11 30.12 30.13 30.14 30.15 30.16 20.25 30.18) L2=(30.19 20.23 20.24 20.30 20.31 20.9 20.10 20.37 20.38 20.39 30.29 30.30 20.16 20.17 30.33 30.34 30.35 30.36) L3=(30.37 20.44 20.45 22.200 30.41 30.42 30.43 30.44 30.45 30.46 30.47 22.201 30.49 30.50 20.51 20.52 20.58 20.59) L4=(20.65 20.66 30.57 30.58 30.59 30.60 20.1 20.2 30.63 30.64 30.65 30.66 30.67 30.68 30.69 30.70 30.71 30.72) L5=(30.73 30.74 30.75 30.76) > /tmp/idrac.txt > /tmp/idracout.txt for i in L1 L2 L3 L4 L5 do var=$i[@] for j in ${!var} do echo "Scan $i 172.18.$j......" >> /tmp/idrac.txt sshpass -p "xxxxxxxx" ssh -oStrictHostKeyChecking=no root@172.18.$j /opt/MegaRAID/MegaCli/MegaCli64 -PDList -a0|grep "S.M.A.R.T" >> /tmp/idrac.txt done done lines=($(grep -n "Yes" /tmp/idrac.txt | cut -f1 -d:)) if [ ${#lines[@]} -eq 0 ]; then exit 1 else for findline in ${lines[@]} do array=($(grep -n "\.\.\.\.\.\." /tmp/idrac.txt |cut -f1 -d:)) newarray=(${array[*]} ${findline}) sortarray=($(echo ${newarray[@]} | tr ' ' '\n'|sort -n)) for((i=0;i<${#sortarray[*]};i++)) do if [ ${sortarray[$i]} -eq $findline ];then beginline=${sortarray[(($i-1))]} endline=${sortarray[(($i+1))]} if [ "$endline" == "" ];then endline="$" else endline=$(($endline-1)) fi break fi done sed -n "$beginline,$endline p" /tmp/idrac.txt >> /tmp/idracout.txt done /usr/local/bin/mailsend -to "zhangranrui@ddky.com" -from monit@ddky.com -ssl -port 465 -auth -auth-plan -smtp smtp.exmail.qq.com -sub "IDC机器硬件故障" -v -user "monit@ddky.com" -pass "xxxxxxxx" -cs "gb2312" -enc-type "base64" -M "$(cat /tmp/idracout.txt)" fi

2023年12月27日 · 2 分钟 · 220 字 · 八戒

Linux下bond和br建立vlan的方法

我们的宿主机上做了4网卡bonding,然后需要上升到br,两个网卡都需要做上vlan。 比如172.18.30.1,想在上面增加一个VLAN段202,然后在上面生产一台虚机172.18.19.2 就需要增加一个bond0.202以及br0.202 做法如下: cd /etc/sysconfig/network-scripts cp ifcfg-bond0.199 ifcfg-bond0.202 vi ifcfg-bond0.202 DEVICE=bond0.202 ONBOOT=yes USERCTL=no BRIDGE=br0.202 VLAN=yes cp ifcfg-br0.199 ifcfg-br0.199 vi ifcfg-br0.202 DEVICE=br0.202 BOOTPROTO=static ONBOOT=yes TYPE=Bridge 然后启动这两个网卡,启动顺序很重要!!! ifup bond0.202 ifup br0.202 注意,执行完以后务必检查一下两个网卡是否UP 然后产虚机就好 ./vm.sh create -b br0.202 -c 4 -m 4096 -d 40 -i 172.18.19.2 -k 255.255.255.0 -g 172.18.19.254 -q 172.18.30.1 -r 172.18.30.2 ucarp-18-19-2

2023年12月27日 · 1 分钟 · 53 字 · 八戒

Linux下ECMP等价路由的建立

我们有两个出口,一个从无锡出,一个从世纪互联出 这台机器的em1接世纪互联,em2接无锡尚航,两个网关,有ipv6和ipv4 ISP 1: Gateways: 172.16.9.254 2001:db8:a::1 Interface: em1 ISP 2: Gateways: 172.18.9.254 2001:db8:b::1 Interface: em2 那么这台机器的ECMP等价路由这么做: ip route replace default proto static scope global \ nexthop dev em1 via 172.16.9.254 weight 1 \ nexthop dev em2 via 172.18.9.254 weight 1 ip -6 route replace default proto static scope global \ nexthop dev em1 via 2001:db8:a::1 weight 1 \ nexthop dev em2 via 2001:db8:b::1 weight 1 这两条命令需要放到 /etc/rc.d/rc.locl 或者ifup里面去 ...

2023年12月27日 · 1 分钟 · 70 字 · 八戒