Linux入门进阶第四天(下)——程序管理(补充内容)
2017-12-20 20:06
537 查看
1.PID
触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置。
同一个程序不同使用者得到的PID是不同的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/4cabdd3a9b10fef7d5b0b0f93f4194c7.png)
2.切换登录窗口可以使用alt+F1~F7进行切换
3.将指令丢到背景中“执行”的 &
4.将“目前”的工作丢到背景中“暂停”:[ctrl]-z
5.观察目前的背景工作状态: jobs
6.将背景工作拿到前景来处理:fg
7.让工作在背景下的状态变成运行中: bg
8.管理背景当中的工作: kill
更多请参见手册介绍:http://linux.51yip.com/search/ps
示例:
相关输出栏位介绍:
2.top——top:动态观察程序的变化
列名解释:
3.pstree——以树状图的方式展现进程之间的派生关系,显示效果比较直观。
4.程序的管理(开关等)
要给予某个已经存在背景中的工作某些动作时,是直接给予一个讯号给该工作号码即可。那么到底有多少 signal 呢? 你可以使用 kill -l(小写的 L ) 或者是 man 7 signal 都可以查询到!主要的讯号代号与名称对应及内容是:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/06e2f19026d6c51b6e644c9f7db34001.png)
根据以上的信号,就可以进行程序的管理了!(比较重要的是1,9,15)
kill 可以帮我们将这个 signal 传送给某个工作 (%jobnumber) 或者是某个 PID (直接输入数字)
由于 kill 后面必须要加上 PID (或者是 job number),所以,通常 kill 都会配合 ps, pstree,直接通过kaiiall可以给程序名称传送讯号!
5.free :观察内存使用情况
更多参数选项,参考:http://man.linuxde.net/free
6.uname:查阅系统与核心相关信息
7.uptime:观察系统启动时间与工作负载
这个 uptime 可以显示出 top 画面的最上面一行!
8.netstat :追踪网络或插槽档——侦听端口情况
9.dmesg :分析核心产生的讯息
10.vmstat :侦测系统资源变化
device is busy的处理:找出正在使用该文件的程序——fuser
acess列的补充说明:
1.lsof :列出被程序所打开的文件文件名
2.pidof :找出某支正在执行的程序的 PID
http://blog.csdn.net/myarrow/article/details/9856095
触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置。
同一个程序不同使用者得到的PID是不同的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/4cabdd3a9b10fef7d5b0b0f93f4194c7.png)
2.切换登录窗口可以使用alt+F1~F7进行切换
3.将指令丢到背景中“执行”的 &
4.将“目前”的工作丢到背景中“暂停”:[ctrl]-z
5.观察目前的背景工作状态: jobs
6.将背景工作拿到前景来处理:fg
[root@study ~]# fg %jobnumber 选项与参数: %jobnumber :jobnumber 为工作号码(数字)。注意,那个 % 是可有可无的! 范例一:先以 jobs 观察工作,再将工作取出: [root@study ~]# jobs -l [1]- 14566 Stopped vim ~/.bashrc [2]+ 14567 Stopped find / -print [root@study ~]# fg <==默认取出那个 + 的工作,亦即 [2]。立即按下[ctrl]-z [root@study ~]# fg %1 <==直接规定取出的那个工作号码!再按下[ctrl]-z [root@study ~]# jobs -l [1]+ 14566 Stopped vim ~/.bashrc [2]- 14567 Stopped find / -print
7.让工作在背景下的状态变成运行中: bg
8.管理背景当中的工作: kill
[root@study ~]# kill -signal %jobnumber [root@study ~]# kill -l 选项与参数: -l :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些? signal :代表给予后面接的那个工作什么样的指示啰!用 man 7 signal 可知: -1 :重新读取一次参数的配置文件 (类似 reload); -2 :代表与由键盘输入 [ctrl]-c 同样的动作; -9 :立刻强制删除一个工作; -15:以正常的程序方式终止一项工作。与 -9 是不一样的。 范例一:找出目前的 bash 环境下的背景工作,并将该工作“强制删除”。 [root@study ~]# jobs [1]+ Stopped vim ~/.bashrc [2] Stopped find / -print [root@study ~]# kill -9 %2; jobs [1]+ Stopped vim ~/.bashrc [2] Killed find / -print # 再过几秒你再下达 jobs 一次,就会发现 2 号工作不见了!因为被移除了! 范例二:找出目前的 bash 环境下的背景工作,并将该工作“正常终止”掉。 [root@study ~]# jobs [1]+ Stopped vim ~/.bashrc [root@study ~]# kill -SIGTERM %1 # -SIGTERM 与 -15 是一样的!您可以使用 kill -l 来查阅! # 不过在这个案例中, vim 的工作无法被结束喔!因为他无法通过 kill 正常终止的意思!
程序的观察
1.ps :将某个时间点的程序运行情况撷取下来[root@study ~]# ps aux <==观察系统所有的程序数据 [root@study ~]# ps -lA <==也是能够观察所有系统的数据 [root@study ~]# ps axjf <==连同部分程序树状态 选项与参数: -A :所有的 process 均显示出来,与 -e 具有同样的效用; -a :不与 terminal 有关的所有 process ; -u :有效使用者 (effective user) 相关的 process ; x :通常与 a 这个参数一起使用,可列出较完整信息。 输出格式规划: l :较长、较详细的将该 PID 的的信息列出; j :工作的格式 (jobs format) -f :做一个更为完整的输出。
更多请参见手册介绍:http://linux.51yip.com/search/ps
通常鸟哥都会建议你,直接背两个比较不同的选项, 一个是只能查阅自己 bash 程序的“ ps -l ”一个则是可以查阅所有系统运行的程序“ ps aux ”!注意,你没看错,是“ ps aux ”没有那 个减号 (-) !
示例:
[root@localhost ~]# ps -ef #显示所有进程的UID,PPIP,C与STIME栏位 UID PID PPID C STIME TTY TIME CMD root 1 0 0 18:24 ? 00:00:00 init [3] root 2 1 0 18:24 ? 00:00:00 [migration/0] root 3 1 0 18:24 ? 00:00:00 [ksoftirqd/0] root 4 1 0 18:24 ? 00:00:00 [watchdog/0] root 5 1 0 18:24 ? 00:00:00 [migration/1]
相关输出栏位介绍:
F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有: 若为 4 表示此程序的权限为 root ; 若为 1 则表示此子程序仅进行复制(fork)而没有实际执行(exec)。 S:代表这个程序的状态 (STAT),主要的状态有: R (Running):该程序正在运行中; S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。 D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印) T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态; Z (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。 UID/PID/PPID:代表“此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号 码” C:代表 CPU 使用率,单位为百分比; PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所执行的优先顺序,数值越小代表该 程序越快被 CPU 执行。详细的 PRI 与 NI 将在下一小节说明。 ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪 个部分,如果是个 running 的程序,一般就会显示“ - ” / SZ 代表此程序用掉多少内存 / WCHAN 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。 TTY:登陆者的终端机位置,若为远端登陆则使用动态终端接口 (pts/n); TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时 间; CMD:就是 command 的缩写,造成此程序的触发程序之指令为何。
2.top——top:动态观察程序的变化
top 这个程序可以持续 的监测整个系统的程序工作状态。 在默认的情况下,每次更新程序资源的时间为 5 秒,不 过,可以使用 -d 来进行修改。
列名解释:
序号 列名 含义 a PID 进程id b PPID 父进程id c RUSER Real user name d UID 进程所有者的用户id e USER 进程所有者的用户名 f GROUP 进程所有者的组名 g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? h PR 优先级 i NI nice值。负值表示高优先级,正值表示低优先级 j P 最后使用的CPU,仅在多CPU环境下有意义 k %CPU 上次更新到现在的CPU时间占用百分比 l TIME 进程使用的CPU时间总计,单位秒 m TIME+ 进程使用的CPU时间总计,单位1/100秒 n %MEM 进程使用的物理内存百分比 o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA r CODE 可执行代码占用的物理内存大小,单位kb s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb t SHR 共享内存大小,单位kb u nFLT 页面错误次数 v nDRT 最后一次写入到现在,被修改过的页面数。 w S 进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 x COMMAND 命令名/命令行 y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 z Flags 任务标志,参考 sched.h 默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容
3.pstree——以树状图的方式展现进程之间的派生关系,显示效果比较直观。
4.程序的管理(开关等)
要给予某个已经存在背景中的工作某些动作时,是直接给予一个讯号给该工作号码即可。那么到底有多少 signal 呢? 你可以使用 kill -l(小写的 L ) 或者是 man 7 signal 都可以查询到!主要的讯号代号与名称对应及内容是:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/06e2f19026d6c51b6e644c9f7db34001.png)
根据以上的信号,就可以进行程序的管理了!(比较重要的是1,9,15)
kill -signal PID
kill 可以帮我们将这个 signal 传送给某个工作 (%jobnumber) 或者是某个 PID (直接输入数字)
killall -signal 指令名称
由于 kill 后面必须要加上 PID (或者是 job number),所以,通常 kill 都会配合 ps, pstree,直接通过kaiiall可以给程序名称传送讯号!
[root@study ~]# killall [-iIe] [command name] 选项与参数: -i :interactive 的意思,互动式的,若需要删除时,会出现提示字符给使用者; -e :exact 的意思,表示“后面接的 command name 要一致”,但整个完整的指令 不能超过 15 个字符。 -I :指令名称(可能含参数)忽略大小写。 范例一:给予 rsyslogd 这个指令启动的 PID 一个 SIGHUP 的讯号 [root@study ~]# killall -1 rsyslogd # 如果用 ps aux 仔细看一下,若包含所有参数,则 /usr/sbin/rsyslogd -n 才是最完整的! 范例二:强制终止所有以 httpd 启动的程序 (其实并没有此程序在系统内) [root@study ~]# killall -9 httpd 范例三:依次询问每个 bash 程序是否需要被终止运行! [root@study ~]# killall -i -9 bash Signal bash(13888) ? (y/N) n <==这个不杀! Signal bash(13928) ? (y/N) n <==这个不杀! Signal bash(13970) ? (y/N) n <==这个不杀! Signal bash(14836) ? (y/N) y <==这个杀掉! # 具有互动的功能!可以询问你是否要删除 bash 这个程序。要注意,若没有 -i 的参数, # 所有的 bash 都会被这个 root 给杀掉!包括 root 自己的 bash 喔! ^_^
5.free :观察内存使用情况
更多参数选项,参考:http://man.linuxde.net/free
6.uname:查阅系统与核心相关信息
[root@study ~]# uname [-asrmpi] 选项与参数: -a :所有系统相关的信息,包括下面的数据都会被列出来; -s :系统核心名称 -r :核心的版本 -m :本系统的硬件名称,例如 i686 或 x86_64 等; -p :CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型! -i :硬件的平台 (ix86) 范例一:输出系统的基本信息 [root@study ~]# uname -a Linux study.centos.vbird 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
7.uptime:观察系统启动时间与工作负载
这个 uptime 可以显示出 top 画面的最上面一行!
8.netstat :追踪网络或插槽档——侦听端口情况
[root@study ~]# netstat -[atunlp] 选项与参数: -a :将目前系统上所有的连线、监听、Socket 数据都列出来 -t :列出 tcp 网络封包的数据 -u :列出 udp 网络封包的数据 -n :不以程序的服务名称,以埠号 (port number) 来显示; -l :列出目前正在网络监听 (listen) 的服务; -p :列出该网络服务的程序 PID
# netstat -lntp #查看监听(Listen)的端口 # netstat -antp #查看所有建立的TCP连接
9.dmesg :分析核心产生的讯息
范例一:输出所有的核心开机时的信息 [root@study ~]# dmesg | more 范例二:搜寻开机的时候,硬盘的相关信息为何? [root@study ~]# dmesg | grep -i vda [ 0.758551] vda: vda1 vda2 vda3 vda4 vda5 vda6 vda7 vda8 vda9 [ 3.964134] XFS (vda2): Mounting V4 Filesystem ....(下面省略)....
10.vmstat :侦测系统资源变化
特殊权限说明
之前提到的SUID等特殊权限:SUID 权限仅对二进制程序(binary program)有效; 执行者对于该程序需要具有 x 的可执行权限; 本权限仅在执行该程序的过程中有效 (run-time); 执行者将具有该程序拥有者 (owner) 的权限。
device is busy的处理:找出正在使用该文件的程序——fuser
[root@study ~]# fuser [-umv] [-k [i] [-signal]] file/dir 选项与参数: -u :除了程序的 PID 之外,同时列出该程序的拥有者; -m :后面接的那个文件名会主动的上提到该文件系统的最顶层,对 umount 不成功很有效! -v :可以列出每个文件与程序还有指令的完整相关性! -k :找出使用该文件/目录的 PID ,并试图以 SIGKILL 这个讯号给予该 PID; -i :必须与 -k 配合,在删除 PID 之前会先询问使用者意愿! -signal:例如 -1 -15 等等,若不加的话,默认是 SIGKILL (-9) 啰! 范例一:找出目前所在目录的使用 PID/所属帐号/权限 为何? [root@study ~]# fuser -uv . USER PID ACCESS COMMAND /root: root 13888 ..c.. (root)bash root 31743 ..c.. (root)bash
acess列的补充说明:
c :此程序在当前的目录下(非次目录); e :可被触发为执行状态; f :是一个被打开的文件; r :代表顶层目录 (root directory); F :该文件被打开了,不过在等待回应中; m :可能为分享的动态函数库;
1.lsof :列出被程序所打开的文件文件名
[root@study ~]# lsof [-aUu] [+d] 选项与参数: -a :多项数据需要“同时成立”才显示出结果时! -U :仅列出 Unix like 系统的 socket 文件类型; -u :后面接 username,列出该使用者相关程序所打开的文件; +d :后面接目录,亦即找出某个目录下面已经被打开的文件! 范例一:列出目前系统上面所有已经被打开的文件与设备: [root@study ~]# lsof COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,0 4096 128 / systemd 1 root rtd DIR 253,0 4096 128 / systemd 1 root txt REG 253,0 1230920 967763 /usr/lib/systemd/systemd ....(下面省略).... # 注意到了吗?是的,在默认的情况下, lsof 会将目前系统上面已经打开的 # 文件全部列出来~所以,画面多的吓人啊!您可以注意到,第一个文件 systemd 执行的 # 地方就在根目录,而根目录,嘿嘿!所在的 inode 也有显示出来喔! 范例二:仅列出关于 root 的所有程序打开的 socket 文件 [root@study ~]# lsof -u root -a -U COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 3u unix 0xffff8800b7756580 0t0 13715 socket systemd 1 root 7u unix 0xffff8800b7755a40 0t0 1902 @/org/freedesktop/systemd1/notify systemd 1 root 9u unix 0xffff8800b7756d00 0t0 1903 /run/systemd/private .....(中间省略)..... Xorg 4496 root 1u unix 0xffff8800ab107480 0t0 25981 @/tmp/.X11-unix/X0 Xorg 4496 root 3u unix 0xffff8800ab107840 0t0 25982 /tmp/.X11-unix/X0 Xorg 4496 root 16u unix 0xffff8800b7754f00 0t0 25174 @/tmp/.X11-unix/X0 .....(下面省略)..... # 注意到那个 -a 吧!如果你分别输入 lsof -u root 及 lsof -U ,会有啥信息? # 使用 lsof -u root -U 及 lsof -u root -a -U ,呵呵!都不同啦! # -a 的用途就是在解决同时需要两个项目都成立时啊! ^_^ 范例三:请列出目前系统上面所有的被启动的周边设备 [root@study ~]# lsof +d /dev COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 0u CHR 1,3 0t0 1028 /dev/null systemd 1 root 1u CHR 1,3 0t0 1028 /dev/null # 看吧!因为设备都在 /dev 里面嘛!所以啰,使用搜寻目录即可啊! 范例四:秀出属于 root 的 bash 这支程序所打开的文件 [root@study ~]# lsof -u root | grep bash ksmtuned 781 root txt REG 253,0 960384 33867220 /usr/bin/bash bash 13888 root cwd DIR 253,0 4096 50331777 /root bash 13888 root rtd DIR 253,0 4096 128 / bash 13888 root txt REG 253,0 960384 33867220 /usr/bin/bash bash 13888 root mem REG 253,0 106065056 17331169 /usr/lib/locale/locale-archive ....(下面省略)....
2.pidof :找出某支正在执行的程序的 PID
[root@study ~]# pidof [-sx] program_name 选项与参数: -s :仅列出一个 PID 而不列出所有的 PID -x :同时列出该 program name 可能的 PPID 那个程序的 PID 范例一:列出目前系统上面 systemd 以及 rsyslogd 这两个程序的 PID [root@study ~]# pidof systemd rsyslogd 1 742 # 理论上,应该会有两个 PID 才对。上面的显示也是出现了两个 PID 喔。 # 分别是 systemd 及 rsyslogd 这两支程序的 PID 啦。
SELinux初探
参考:http://www.toxingwang.com/management/security/1011.htmlhttp://blog.csdn.net/myarrow/article/details/9856095
相关文章推荐
- Linux入门第一天——环境搭建补充内容(xshell与虚拟机等操作)
- Linux入门进阶第四天——服务管理
- Linux入门进阶第三天——软件安装管理(下)
- java程序员菜鸟进阶(十三)linux基础入门(一)vmvare下安装linux RedHat图解(超详细篇)
- Linux运维高薪入门及进阶全新经典视频-老男孩Linux(免费)
- 【转】linux入门内容
- Linux运维高薪入门及进阶全新经典视频-老男孩Linux第一部(下)
- Linux学习笔记—补充内容
- java程序员菜鸟进阶(十五)linux基础入门(三)linux用户和组管理
- 七天LLVM零基础入门(Linux版本)------第四天
- Java进阶学习第四天——DOM入门
- 嵌入式linux入门学习内容指南
- java程序员菜鸟进阶(十六)linux基础入门(四)linux下VIM文本编辑器使用
- Linux入门进阶第一天——vim文本编辑器
- 嵌入式linux入门学习内容指南
- Linux入门进阶第六天——登录文件、开机与模块管理
- Linux 入门之文本内容编辑vim编辑器 基本操作
- 三天半看完 C++(前置准备:Java、Python、JavaScript入门、Kotlin、PHP、Laravel、Linux、Nginx、ES5进阶、Gradle、Groovy)
- java程序员菜鸟进阶(十七)linux基础入门(五)linux文件/目录的权限和归属管理
- 专题:Linux从入门到高手技术进阶路线图