Tag: Shell Script
在写 Shell Script 时, 可以用变量 $1, $2, $3…… 很方便读取使用者输入的参数, 以下提供两个检查使用者是否有输入参数的方法。 1. $# $# 变量储存了使用者输入的参数数量, 如果 $# 是 0, 便表示使用者没有输入参数, 而这个变量也可以用作检查使用者输入了多少个参数, 具体写法如下: 2. $1 另一种做法是检查 $1 变量, $1 是使用者输入的第一个参数, 如果 …
rsync 是一套 Linux 下的同步备份工具, 对日常备份十分有用。如果是从远端主机进行备份, 而且备份的档案容量很大, 有可能会将主机的频宽全部吃掉, 那便会在备份时影响主机的正常使用。 rsync 内建已经支援限速的功能, 只要使用 –bwlimit 参数, 便可以限制传送档案时硬盘的 I/O 速度, 从而达到限速的效果。即使是本机备份, –bwlimit 也可以避免备份时系统的负载过高。 例如将 I/O 限制为 1000 KBytes, 语法是这样: 备份到逹端主机的做法相同, 只要加上 –bwlimit=速度 便可以:
当系统的 Load Average 很高时, 可能面临当机的风险, 遇到这个问题可以用 Shell Script 定时检查系统的 Load Average, 当发现 Load Average 到达某一个设定好的数值时, 便自动执行一些指令, 例如重启服务, kill process 或向系统管理员发出电邮通知等。 以下 Shell Script 会透过定时读取 /proc/loadavg 的数值, 当发现 Load Average …
如果主机出现问题时, 可能负载过高或者服务当掉, 最理想的做法还是要找出原因, 很多时只要修改一些设定便可以。 早前遇到一位客户, 他安装在 VPS 的 Apache 会无故当掉, 间隔由几小时到一天不等, 检查后 Load Average 一点也不高, 当掉后只要重新启动 Apache 便没问题, 初部估计可能是 mpm_prefork 的设定问题。 由于修改后要观察一段时间, 这段时间 Apache 也可能当掉, 便写了这支 Shell Script, 会自动检查 …
Shell Script 要读取网页内容,并将输出结果储存到变量,可以用一些在 CLI 下执行的文字浏览器,由于很多系统都有安装 wget 及 curl, 以下文章会介绍使用 wget 及 curl 这两种方法完成。 如果系统并未安装 wget 及 curl,可以用以下指令安装,如果已经安装了,则不用安装: RHEL, CentOS # yum install curl wget Debian, Ubuntu $ sudo apt-get …
在 Shell Script 要检查某一个 Process 是否正在执行, 可以用 pgrep 完成。pgrep 可以根据 Process 名称, 返回所有名称相符及正在执行的 process 的 process id 的工具, 例如要查询 MySQL 的 process id 可以用以下指令: $ pgrep mysql 1784 2144 …
在 Unix Like 环境下用 crontab 排程执行指令或 Shell Script 时, 很多时最后都会加上 “> /dev/null 2>&1”, 例如: * * * * * /path/to/my-script.sh > /dev/null 2>&1 以下是对 “> /dev/null 2>&1” 分拆的解释: >: …
在 Shell Script 想检查系统帐号是否存在, 可以用 grep 搜索 /etc/passwd 的内容达成, 指令是这样: 以上指令会检查 /etc/passwd 档案内, 是否有 “useraccount” 这个帐号存在, 其中 “^” 表示指定前面没有任何字符, 而 “:” 则是在 /etc/passwd 用作分开每个字段的分隔字符。 上面指令执行后, 如果帐号不存在, 不会回传任何内容, 如果帐号存在, 则会回传在 …
要检查密码的强度, 单纯以密码长度及是否包含英文字母, 数字并不足够, 例如 “abcd1234” 便是 8 个位, 包含字母及数字的密码, 但这个密码很简单。cracklib 就是一套检查密码强度的工具, 以下是 cracklib 的安装及使用方法。 在 Redhat 及 Debian 系列的发行版, 安装 cracklib 都很方便: RHEL / CentOS / Fedora: # yum …
sed 除了可以对档案内的 keyword 做 search & replace 外, 也可以将包含有 keyword 的整行删除, 语法是: 以上指令会对 filename 逐行搜索, 并将有 “keyword” 的整行删除。 另一个情况是想将两个 keywords 中间的整行资料删除, 语法可以改成这样: 以上指令会在 filename 内, 将有 “keyword-1” 及 “keyword-2” …