Bash Pocket Reference - History

1979 年 随Unix V7 发布的 Bourne Shell变成了shell 脚本的标准, 如今许多商用 Unix 上还可以发现 /bin/sh.

因为 Berkeley C shell (csh) 提供了更多用于交互的特性, 如 command history, job control, 很长一段时间, Unix 上Bourne shell 都用作编程, Berkeley C shell 用作交互;
贝尔实验室的 David Korn 不断的给 Bourne Shell 提供增强的特性, 最后超过了 Bourne Shell 和 Berkeley C shell, 并且兼容前二者;
如今 POSIX 定义的 标准Shell 基于 Bourne Shell, 并且从 Korn Shell 中提取一部分特性;

The Free Software Foundation, in keeping with its goal to produce a complete Unix work-alike system, developed a clone of the Bourne shell, written from scratch, named “Bash,” the Bourne-Again SHell. Over time, Bash has become a POSIX-compliant version of the shell with many additional features overlapping those of the Korn shell, but Bash is not an exact Korn shell clone. Today, Bash is arguably the most widely used Bourne-derived shell.

负载高, 就自动重启

家里的路由器上 host blog, 有时候很不稳定, 比如说如果路由器上同时开bt 下载, 它的负载有可能会高, 有时候运行时间长了, nginx 或者 fastcgi 会使 CPU 飙升到100%.

为了保证 Blog 的稳定性, 首先在 dnsPod 上面做了 D监控, 一旦无法访问, 就微信/邮件通知. 另外路由器上每天凌晨会自动定时重启. 有时候重启真是灵丹妙药.

最近发现有时候 nginx 或者 fastcgi 进程有时候会使CPU 飙升, 导致 Blog 不能访问. 不过这些时候, 内部上网总是能保证的.

怎么解决这种偶尔的负载过高呢, 可以通过监控负载过高, 进行重启的方式进行. 于是有了下面的检测并重启的脚本.
[这里重启的是 host 这个blog 的路由器, 不是其它server 哦]

load=$(uptime | awk '{print $8}' | awk -F '.' '{print $1}')
if [ 1 -eq $load ];then
     echo 'I am going to restart'
     reboot
fi

其实这个 shell 脚本很简单, 取 uptime 命令输出的 15 分钟的CPU 负载, 一旦发现大于1, 就重启.

但是为了写这个脚本, 却经历坎坷. 其中遇到的困难有:

  1. 这个负载值是一个有 2 位小数的浮点数, 一开始想用 shell 脚本的 if 去对比, 发现根本不能比, shell 脚本不支持浮点数对比;
  2. 另外 if 那个数字的对比, 方括号和中间的数字之间必须有空格, 否则报错. [空格1 -eq $load空格].

这里为了使用整形对比, 还特地截取了其中的整形部分.

windows 端口占用

之前曾发现过windows上 skype 偷偷占用8080端口, 导致本地tomcat 无法启动的问题, 今天竟然发现即使eclipse关掉之后, 竟然后台还有一个进程, 名字叫 javaw.exe, 同时它还绑定了8080端口.
怎么在windows 上找到这个进程并且杀死它?

  1. 通过端口找到进程ID

    netstat -aon | findstr "8080"

  2. 通过进程ID 找到进程名字

    tasklist | findstr "14869"

然后任务管理器杀死它

eclipse tomcat 启动 timeout issue

今天启动tomcat 的时候, 遭遇如下错误:

Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.

解决:
双击 server, 弹出 server 编辑器, 修改 timeout 数值.

状况:
serverTimeout1.png
解决:
serverTimeout2.png

html 页面内容不能选中, 不能复制

今天查看一朋友所在公司官方主页的联系我们页面, 发现竟然这个页面的内容竟然不能copy.
百度了一下, 竟然是有这么一段代码:

<body oncontextmenu="return false" ondragstart="return false" onselectstart="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false">

里面的内容大概就是不准复制, 不准copy, 不能拖拉...

不过这个页面适得其反, 不能copy, 人家连你那么长的地址都要自己敲出来, 不能copy 真还是麻烦.