Linux入门进阶第四天(下)——程序管理(补充内容)
1.PID
触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限设置。
同一个程序不同使用者得到的PID是不同的:
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 都可以查询到!主要的讯号代号与名称对应及内容是:
根据以上的信号,就可以进行程序的管理了!(比较重要的是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.html
http://blog.csdn.net/myarrow/article/details/9856095
转载于:https://www.cnblogs.com/jiangbei/p/8075602.html
Linux入门进阶第四天(下)——程序管理(补充内容)相关推荐
- linux系统export,Linux入门进阶 - 如何在Linux中使用export命令
原标题:Linux入门进阶 - 如何在Linux中使用export命令 来自: Linux迷 链接:https://www.linuxmi.com/linux-export.html Linux ex ...
- linux 网站访问密码,Linux入门教程:如何在nginx下实现访问web网站密码认证保护的功能,nginxweb以便拒绝那些不速之客...
Linux入门教程:如何在nginx下实现访问web网站密码认证保护的功能,nginxweb以便拒绝那些不速之客 在某些特定的环境下,我们希望nginx下的web站点在访问时需要用户输入账户密码才能访 ...
- Linux入门进阶 - 如何在Linux中使用export命令
Linux export命令会标记哪些值需要传递给一组子进程.这是bash shell提供的一个简单但有用的特性.它允许管理员在不中断当前会话的情况下传递环境的配置参数.这就是为什么在终端会话重新启动 ...
- Linux入门学习(四)—— 什么链接文件?软链接文件和硬链接文件有什么区别以及特点?
引言:上期回顾(想要学习的童鞋可以点击看看) 前几章我们所说的命令都是针对文件和文件夹,和一些常用操作.今天我们来学习特殊一点的文件"链接文件",这一章节会告诉大家什么是链接文件, ...
- 【Linux入门连载一】[Win10下安装Linux虚拟机]VMWare15运行CentOS7(亲测有效)
写在前面:本文根据狂神的Linux视频完成而来 笔者之前安装的双系统,用的是Ubuntu.现在安装的是虚拟机,用的是CentOS. 主要目的是学习Linux系统的基本知识.而本文呢,主要记录自己安装软 ...
- Linux入门学习(四)
VIM 在vim异常退出时,系统中会在所编辑的文件目录中生成.file.swp,vim再次编辑此文件时会出现相应提示 按 "o":open(打开) 按 "e": ...
- SAP入门技术分享四:模块化程序
模块化程序 1.子程序概要 2.子程序定义 3.子程序参数 (1)传递参数的方法 (2)定义参数类型 (3)参数与结构体 (4)参数与内表 4.调用子程序 (1)调用程序内部子程序 (2)调用程序外部 ...
- 蓝桥云课linux入门3:用户及文件权限管理
内容转自蓝桥云课 目录 1.内容 2.Linux用户管理 2.1查看用户 2.2创建用户 2.3用户组 将其它用户加入 sudo 用户组 2.4删除用户和用户组 3.Linux文件权限 3.1查看文件 ...
- linux c语言 cmos,c语言编写程序读写CMOS内容
; 郑重声明:本程序读出并以十六进制形式显示CMOS中的前64个基本信息,然后清零. ; 因此,不会设置CMOS参数者,请不要编译.运行本程序.若因此而造成的任何损失, ; 责任自负.特此声明. ; ...
最新文章
- R语言plot函数散点图、密度图实战
- 征文 | 第一届全国计算社会科学高端论坛
- CSS画基本图形——圆
- python刷新显示_Python在同一位置刷新显示进度信息
- 如何正确认识大数据分析
- 智能优化算法:细菌觅食优化算法 - 附代码
- 机器学习十大算法简介
- 海阔天空 在勇敢以后 --我的求职路
- Mybatis事务管理SqlSession
- sqlserver还原数据库时失败因为 当前没有数据库备份
- 关于电脑端微信小程序不能启动解决
- 高中数学学习技巧,这几步你都做到了吗?
- Android USB tethering相关代码
- mysql建表是要注意什么问题_MySQL建表注意事项
- 原生小程序转Taro开发
- 立创eda学习笔记十四:pcb板画布设置
- 思维导图的分类 利用思维导图绘制学习知识方法介绍
- python标签打印_Python 实现自动完成A4标签排版打印功能
- vs2013 与mysql的连接数据库_VS2013连接Mysql数据库的设置以及常见问题
- 机器学习(四)SVM之根据相关数据预测交通流量
热门文章
- 深入浅出Redis-redis哨兵集群
- 计算机系统是如何实现控制外接设备,计算机I/O接口与系统的连接
- securefx 堡垒机_在有跳板机的情况下,SecureCRT自动连接到目标服务器
- LINE_AA未定义标识符
- 雪碧图 sprite
- ROS机器人从零开始——ROS的认识与理解
- OpenSSL1.1.1没有libeay.dll和ssleay.dll
- 自动量程万用表的实现原理_钳形表和万用表哪个测量更准?老司机深入讲解两者有何不同之处...
- html 有些图片被uc浏览器屏蔽的问题
- 机器学习四大基本模型:回归、分类、聚类、降维