引言
这篇文章前半部分实例演示Linux系统服务管理相关命令,介绍系统服务的预设启动脚本放置的位置,以及如何启动和停止某个特定服务;后半部分会实例演示几个常用的用来管理系统进程的命令。
文章目录
- 0×1.Linux系统服务管理
a.系统服务预设启动脚本保存位置
b.如何启动或停止服务
c.ubuntu如何创建自启动脚本
- 0×2.Linux系统进程管理
a.使用ps输出系统进程
b.使用kill命令终止进程
c.使用top命令动态监控进程
0×1.Linux系统服务管理
a.系统服务预设启动脚本保存位置
在Linux服务器系列发行版CentOS中,系统的服务预设启动脚本以及一些第三方程序的服务预设启动脚本都是保存在"/etc/rc.d/init.d"中的;另外,"/etc/init.d"中的文件和"/etc/rc.d/init.d"中的文件相同,因为前者只是后者的软连接(ln)文件;
#可以看到"/etc/init.d"实际上只是"/etc/rc.d/init.d"的连接文件
qing@qingsword.com:~$ ls -ld /etc/init.d
lrwxrwxrwx. 1 root root 11 Aug 8 23:52 init.d -> rc.d/init.d
#系统在启动时会调用这个文件夹下的一些服务的启动脚本来完成对应服务的启动
b.如何启动或停止服务
对服务的启动和停止操作需要root权限(或sudo),有两种方法可以启动或停止某服务,这里用"bluetooth"服务为例,来看下面几个操作实例:
#方法一:
#查询服务当前状态
qing@qingsword.com~:$ sudo service bluetooth status
bluetooth stop/waiting (未启动)
#启动服务
qing@qingsword.com~:$ sudo service bluetooth start
bluetooth start/running, process 6437
#停止服务
qing@qingsword.com~:$ sudo service bluetooth stop
bluetooth stop/waiting
#方法二:
#查询服务当前状态
qing@qingsword.com:~$ sudo /etc/init.d/bluetooth status
* bluetooth is not running
#启动服务
qing@qingsword.com:~$ sudo /etc/init.d/bluetooth start
* Starting bluetooth [ OK ]
#停止服务
qing@qingsword.com:~$ sudo /etc/init.d/bluetooth stop
* Stopping bluetooth [ OK ]
c.ubuntu如何创建自启动脚本
在Ubuntu中,系统的启动脚本同样是保存在"/etc/init.d"目录中,所不同的是,这个目录是真实目录,而非软连接,Ubuntu将要启动的脚本连接文件放置在"/etc/rc[0~6+S].d"这几个目录中(rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rcS.d/ ),不同的目录代表了不同的运行等级;如果进入其中之一就会发现,他们下面创建了软连接指向"/etc/init.d"目录中的启动脚本,我们默认进入哪个启动等级环境,就会在启动时运行对应等级那个文件夹中的S开头的脚本:
#查看当前启动级别,Ubuntu默认启动级别是5
qing@qingsword.com:~$ runlevel
N 5
#查看对应启动级别自启动的脚本文件夹中的内容
qing@qingsword.com:~$ ls -l /etc/rc5.d/
lrwxrwxrwx 1 root root 20 1月 30 2015 S20kerneloops -> ../init.d/kerneloops
...
lrwxrwxrwx 1 root root 15 1月 30 2015 S50saned -> ../init.d/saned
lrwxrwxrwx 1 root root 19 1月 30 2015 S70dns-clean -> ../init.d/dns-clean
...
lrwxrwxrwx 1 root root 18 1月 30 2015 S99rc.local -> ../init.d/rc.local
文件名以S或者K开头,S开头表示是系统随机启动的脚本,K开头是不随机启动的脚本,随后的数字表示启动的顺序,数字越小的越早被启动;这样设计的好处是,当一些程序的启动依赖另外一些程序的时候,让被依赖的程序先启动只需要将这个数字设置小一点就可以了(比如S20的启动要优先与S30)。
了解这些基础知识后,如果现在我想将"/etc/init.d/bluetooth"这个蓝牙启动脚本,加入当前运行等级(5)的开机自启动,思路就已经很清晰了:
#只需要在/etc/rc5.d目录下创建一个软连接指向蓝牙的启动脚本即可,S代表随机启动,99代表启动优先级最低
qing@qingsword.com:~$ sudo ln -s /etc/init.d/bluetooth /etc/rc5.d/S99bluetooth
下面是创建自定义启动脚本的流程示例:
#1.使用root权限创建一个启动脚本文件放置在"/etc/init.d"文件夹下
qing@qingsword.com:~$ sudo vim /etc/init.d/clearfolder
#2.在这个文件中输入你想要执行的命令内容保存,本例让这个脚本启动的时候清空"/home/qing/test/"文件夹中的所有内容
#!/bin/bash
rm -rf /home/qing/test/*
#3.给脚本添加可执行权限
qing@qingsword.com:~$ sudo chmod 700 /etc/init.d/clearfolder
#4.查看登陆环境默认运行等级,并在对应等级的启动目录中创建启动软连接指向刚才创建的脚本文件
qing@qingsword.com:~$ runlevel
N 5
qing@qingsword.com:~$ sudo ln -s /etc/init.d/clearfolder /etc/rc5.d/S99clearfolder
#5.每次启动,都会自动删除目录"/home/qing/test/"中的所有文件,直到将这个启动软连接删除
0×2.Linux系统进程管理
a.使用ps输出系统进程
终端中使用"ps"命令可以输出当前系统正在运行的进程,ps有下面几个常用参数:
l 长格式输出
u 按用户名和启动时间的顺序来显示进程
f 树形显示(父进程和子进程一目了然,想要完全终止某个进程,需要kill这个进程的父进程,仅仅是结束子进程父进程可能重新创建此子进程)
a 显示所有用户的所有进程(包括其他用户)
x 显示无控制终端的进程
这里还是用"bluetooth"这个服务来演示,首先按照上面一小节的方法启动它,然后显示其进程信息:
qing@qingsword.com:~$ sudo service bluetooth start
#"grep"是一个筛选命令,这里可以简单的理解成"仅显示包含bluetooth的进程",输出中PID=8417的进程是"grep"筛选命令的进程,PID=6722是"bluetooth"服务的主进程。
qing@qingsword.com:~$ ps -auxf | grep bluetooth
qing 8417 0.0 0.0 S+ 18:39 0:00 | \_ grep --color=auto bluetooth
root 6722 0.0 0.0 Ss 16:59 0:00 /usr/sbin/bluetoothd
/*
* 这里介绍一下上面的输出中几个字段的含义:
*
* USER 进程的属主
* PID 进程ID
* %CPU 进程占用CPU
* %MEM 进程占用内存
*
* STAT 进程状态,有下面几种状态:
* D 不间断的睡眠
* R 正在运行中
* S 休眠中
* T 停止或被追踪
* X 死掉的进程
* Z 僵尸进程(子进程将要退出还没有完全退出时,父进程收集并释放其占用的资源,这个短暂的状态称为僵尸状态)
* s(小写) 进程的领导者(在它下面有子进程)
* < 优先级高的进程
* N 优先级低的进程
* L 有些页被锁进内存
* + 后台进程组
* l 多线程
*
* START 进程启动时间
* TIME 进程消耗CPU时间
* COMMAND 命令的名称和参数
*/
#将系统中全部的进程输出到文件"testfile"中
qing@qingsword.com:~$ ps auxf > testfile
b.使用kill命令终止进程
使用ps查看到"bluetooth"的进程后,可以使用kill命令来终止这个进程:
#kill后面写要结束的进程的PID号,参数"-9"强制执行
qing@qingsword.com~:$ sudo kill -9 6722
#pkill命令能根据进程名称来结束进程,下面这条命令和上面kill的效果相同
qing@qingsword.com~:$ sudo pkill bluetoothd
c.使用top命令动态监控进程
在终端下输入"top"回车,即可打开top动态进程监控,默认的刷新时间是3秒,它的显示类似windows的任务管理器,下面是top中常用的几个指令:
使用"shift+>"和"shift+<"来改变进程的排序;
s 设置进程刷新时间间隔,单位秒,按空格可以立即刷新列表;
k 输入PID即可杀死进程;
M 按照内存占用由大到小排列;
P 按照CPU占用由大到小;
q 退出top;
h help命令提示;