笔记|小白笔记1(grep、if、pkill)
脚本
#!/bin/sh
t=0
while [ 1 ]
do
ps -fe|grep firefox |grep -v grep
if [ $? -ne 0 ]
then
echo "start firefox ..."
firefox &> /dev/null &
else
echo "firefox is running"
fi
sleep 30
t=$(( $t+1 ))
if [ $t -gt 360 ]
then
pkill firefox
t=0
fi
done
#####
grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep -v grep:在文档中过滤掉包含有grep字符的行
过滤多个用 grep -v "grep|tail"
if
-eq -ne -lt -nt只能用于整数,不适用于字符串,字符串等于用赋值号=
-eq //等于
-ne //不等于
-gt //大于
-lt //小于
-ge //大于等于
-le //小于等于
详细用法:
传统if 从句子——以条件表达式作为 if条件
if [ 条件表达式 ]
then
command
command
command
else
command
command
fi
- 条件表达式
1.文件表达式
if [ -f file ] 如果文件存在
if [ -d ... ] 如果目录存在
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行
2.整数变量表达式
if [ int1 -eq int2 ] 如果int1等于int2
if [ int1 -ne int2 ] 如果不等于
if [ int1 -ge int2 ] 如果>=
if [ int1 -gt int2 ] 如果>
if [ int1 -le int2 ] 如果<=
if [ int1 -lt int2 ] 如果<
3.字符串变量表达式
If [ $a = $b ] 如果string1等于string2
字符串允许使用赋值号做等号
if [ $string1 != $string2 ] 如果string1不等于string2
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空
if [ $sting ] 如果string 非空,返回0 (和-n类似)
杀死进程命令kill,pkill,killall
终止一个进程或终止一个正在运行的程序,一般是通过 kill 、killall、pkill、xkill 等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。
另外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行,也可以用这些工具来终止。为什么数据库服务器的父进程不能用这些工具杀
死呢?原因很简单,这些工具在强行终止数据库服务器时,会让数据库产生更多的文件碎片,当碎片达到一定程度的时候,数据库就有崩溃的危险。比如mysql
服务器最好是按其正常的程序关闭,而不是用pkill mysqld 或killall mysqld
这样危险的动作;当然对于占用资源过多的数据库子进程,我们应该用kill 来杀掉。
1)kill
kill的应用是和ps 或pgrep 命令结合在一起使用的;
用法:kill [信号代码] 进程ID
注:信号代码可以省略;我们常用的信号代码是 -9 ,表示强制终止;举例:
[root@localhost ~]# ps auxf |grep httpd root 4939 0.0 0.0 5160 708 pts/3 S+ 13:10 0:00 \_ grep httpd root 4830 0.1 1.3 24232 10272 ? Ss 13:02 0:00 /usr/sbin/httpd apache 4833 0.0 0.6 24364 4932 ? S 13:02 0:00 \_ /usr/sbin/httpd apache 4834 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd ... apache 4840 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd我们查看httpd 服务器的进程;您也可以用pgrep -l httpd 来查看;
我们看上面例子中的第二列,就是进程PID的列,其中4830是httpd服务器的父进程,从4833-4840的进程都是它4830的子进程;如果我们杀掉父进程4830的话,其下的子进程也会跟着死掉;
[root@localhost ~]# kill 4840 注:杀掉4840这个进程; [root@localhost ~]# ps -auxf |grep httpd 注:查看一下会有什么结果?是不是httpd服务器仍在运行? [root@localhost ~]# kill 4830 注:杀掉httpd的父进程; [root@localhost ~]# ps -aux |grep httpd 注:查看httpd的其它子进程是否存在,httpd服务器是否仍在运行?对于僵尸进程,可以用kill -9 来强制终止退出;
比如一个程序已经彻底死掉,如果kill 不加信号强度是没有办法退出,最好的办法就是加信号强度 -9 ,后面要接杀父进程;比如;
[root@localhost ~]# ps aux |grep gaim beinan 5031 9.0 2.3 104996 17484 ? S 13:23 0:01 gaim 或 [root@localhost ~]# pgrep -l gaim 5031 gaim [root@localhost ~]# kill -9 50312)killall
killall 通过程序的名字,直接杀死所有进程,咱们简单说一下就行了。
用法:killall 正在运行的程序名
killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行;
举例:
[root@localhost beinan]# pgrep -l gaim 2979 gaim [root@localhost beinan]# killall gaim3)pkill
pkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。
应用方法:#pkill 正在运行的程序名
举例:
[root@localhost beinan]# pgrep -l gaim 2979 gaim [root@localhost beinan]# pkill gaim
End、
既然没有吐槽,那就赶紧抢沙发吧!