程序
在linux系统中,触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个ID,成为PID,同时依据启发这个程序的用户与相关属性,给予这个PID一组有效的全线设定。从此以后,这个PID能够在系统上面进行的动作,就与这个PID的权限相关。这个程序是指内存中的进程(process)。
不同的用户运行同一个程序( program),因为所在的组合权限不同啦,所以当系统生成一个PID在进程中时,同样会绑定该权限。 例如 运行 /bin/bash 如果是root用户,那么可能系统分配的PID号码是 1234, 绑定了root的权限, 如果是kevin运行,可能分配的PID号为 2234,绑定的是 kevin这个用户的权限
PID PPID
子程序 父程序
常驻在内存中的进程就是 服务( daemon )
在linux 执行一个指令时,系统会将相关权限,属性,程序代码与数据等均加载内容中,并给予了这个单元一个程序标识符 PID,最终该指令可以进行的任务则与这个PID的权限有关。
1. 工作管理 ( Job control )
注意, 这里的工作管理只是针对你这个终端(shell)而言的,换句话说,如果你退出了,那么在背景下的工作也就没有了。工作管理: 是指在bash环境下, 类似windows一样, 可以多个任务同时进行, 比如一边搜索资料, 一边编译, 一边进行vi编辑. 但是我们无法由 tty1的环境去管理tty2的bash
- 这些工作所触发的程序必须来自于你shell的子程序(只管理自己的bash )
- 前景 : 你可以控制与下达指令的这个环境称为前景的工作 ( foreground )
- 背景 : 可以自行运做的工作, 你无法使用 ctrl + c 终止他, 可使用 bg/fg 呼叫该工作
- 背景中 执行 的程序不能等待 terminal / shell 的输入
如何实现 工作管理
- & , 指令后边直接加 & , 则此指令被放在背景执行. 此时, bash 会给予这个指令一个 job number , 和一个 PID , 当指令执行完成时, 系统会给予提示.
- ctrl + z : 将目前内容暂停, 放到背景, 例如你在使用vi 编辑一个文档, 你想查看某个文件, 此时不需要关闭vi , 使用 ctrl + z 就可以将 vi 放到背景暂停, 注意此处是暂停而不是执行, 然后使用 fg 可以返回. ( fg / bg ).
- jobs [ -lrs ] : 查看job情况, -l : 除了列出 job number 与指令串之外, 同时列出 PID 的号码 -r 仅列出正在背景run的工作, -s 仅列出正在背景当中暂停( stop ) 的工作. 显示内容 [1] + pid 号 stopped , 其中1是 job number, + 号为预设从背景到前景的工作,一般为 - 减号
- fg %jobnumber : 将工作拿到前台. ( 此处的 % 可有可无 )
- bg %jobnumber : 将工作放到背景.
- kill : kill -l 显示目前可以使用的singal号码, kill -singal %jobnumber ( 其中的 singal 是指 kill 的类别 ) 常用single 1,9,15常用.(1代表重新读取,9代表立刻强制删除,15代表以正常的方式终止一项工作) kill -9 %1
- 工作丢到背景中,并不是真正放到系统的背景去, 还是与终端机的bash有关,也就是说, 你把工作丢到背景, 而你的终端机此时吊线, 那么在“背景”下的工作也会停止,因为他运行的环境已经不存在了. at 是真正放到系统背景中的, 而与终端机无关. nohup : 这个指令是指你在脱机或者是注销系统后, 还要继续工作的 语法 : nohup 指令 [ & ] 例如 : nohup ./sleep500.sh & ( 自己编辑的 shell 脚本,如果不使用 & 表示在前景内执行 ) .
2. 进程管理
- ps : 一个时间点查看进程命令 ps aux ( 观察所有进程 ) = ps -ef 也是观看所有进程的命令, ps -lA ( 观察所有系统进程 ) ps axjf = ps -ejH ( 连同部分程序树状态 )
- -A 所有process全部显示 = ie
- -a 不与 terminal(终端机) 有关的所有 process
- -u 有效使用者 ( effective user ) 相关的 process
- x 通常与 a 一起使用,列出完整信息
- l 输出格式, 较长, 较详细的将该 PID 的信息列出 ( 其中 F 代表进程标志, 4表示root, 1表示子进程, S 代表进程状态 STAT, R代表运行, S代表sleep,D代表不可被唤醒的睡眠状态,例如打印机等等,T停止状态(stop), Z僵尸状态,程序已经终止但却无法被移除至内存外. 僵尸程序要追根
- j 工作的格式
- -f 做一个完整的输出
- ps -l 尽观察自己的进程
- ps aux 观察系统所有的程序数据
- ps -lA 也是观察系统所有的程序数据
- ps axjf 联通部分程序树状态
- 比较常用的是 ps -l 查看自己的进程, ps aux 全部查看 , ps axjf 树状图
- 个人觉得比较常用, ps -ef 查看所有进程, ps -l 查看自己进程, ps axjf 查看树状态
- top : 可以持续侦测程序运作的状态 top [ -d 数字 ] | top [ -bnp ] -d 后接秒数(这个描述是指间隔) , -b 以批次的方式执行 top . -n 与-b搭配, 需要进行几次 top -p 指定pid , top 之后会进入"top"状态, 可以使用 M 进行内存使用率排序, 若要回复默认排序 P , q 离开 top
- pstree [-A|U] [-up]
- -A 各个程序树之间的链接方式 ASC||
- -U 各个程序树之间以万国码的字符来链接,在某些终端接口下可能有错误
- -p 同时列出 PID
- -u 同时列出所属账号
- kill 中比较常用的single , 1 SIGHUP 类似重起 , 2 SIGINT 类似 ctrl + c , 9 SIGKILL 强制中断 , 15 SIGTERM 以正常方式结束 , 17 SIGSTOP 相当于 ctrl + z
- kill 后接 % 符号与直接 接数字不同, %符号指工作号 , 数字指PID
- killall [ -iIe ] [ command name ] killall -i -9 httpd , killall -i -9 bash ( killall 可以将相关的所有进程一次性全部删除 )
- nice [ -n 数字] command 调整指令的优先级, 这并不是真正的调整, 而是虚拟的, 只能大概调整. ( renice 已存在程序的 nice 重新调整 ) , nice值可以影响 pri , pri就是执行的顺序的权限,值越小越好,nice值的范围是 -20 ~ 19 , root 可随意调整自己或他人的 nice值,当然范围也是在 -20 ~ 19 ,普通用户只能调整自己的nice值, 调整nice值有两种情况,1是运行时,直接指定nice值,nice [-n 数字] command , 另外一种就是已经存在了nice值,改变它, renice [number] PID , 这个number就是nice值
- free 观察内存情况 free [ -b|-k|-m|-g][-t]
- -b , -m , -k 分别以 bytes , m(mbytes) , k(kbytes)
- -t 输出的最终结果, 显示物理内存与 swap的总量
- uname 查阅系统与核心相关信息 uname [ -asrmpi ]
- -a : 所有系统信息
- -s : 系统核心名称
- -r : 核心版本
- -m : 系统硬件名称
- -p : cpu的类型
- -i 硬件平台
- uptime : 观察系统启动时间与工作负荷
- netstat : 追踪网络或插槽文件 - [atunlp] 可以用在网络监控方面
- -a : 所有联机, 监听, socket数据都列出来
- -t : 列出 tcp 网络封包数据
- -u : 列出 udp网络封包数据
- -n : port number 显示
- -l : 列出目前正在网络监听( listen ) 的服务
- -p : 列出该网络服务的程序PID
- netstat -tlnp 比较常用
- dmesg : 分析核心产生的讯息
- vmstat : 侦察系统资源变化 cpu / 内存 / 磁盘输入输出状态 , 如果你想了解那个环节最有问题,可以使用这个命令来进行分析
- -a 使用 inactive/active 取代 buffer/cache
- -f 将开机到目前为止,系统复制的程序数
- -s 将开机到目前为止,导致内存变化的说明
- -S 后面接单位数,例如 M
- -d 列出磁盘的读写总量
- -p 后面列出分割槽,可现实该分割槽读写总量统计表
3 特殊的档案与进程
- /proc : 目前主机上面的各个程序的PID都是以目录的型态存在于 /proc 当中. ( 是在内存当中 )
- fuser : 命令用来查看某个档案或者是文件夹由哪个用户在使用. fuser -uv /u01 , fuser -uv /proc
- -u : 除了程序的PID之外,列出该程序的拥有者
- -m : 后面接的档名会主动的上提到该文件系统的最顶层
- -v : 可以列出每个档案与程序还有指令的完整相关性
- -k : 找出使用该档案/目录的PID,并试图以 SIGKILL 这个讯号给予该PID
- -i : 必须与 -k 配合,在删除PID之前会先询问使用者意愿
- 显示内容中的 ACCSS项目
- C 在当前目录下
- e 可被处罚执行状态
- f 被开启的档案
- r 代表顶层目录
- F 该档案被开启了,不过在等待回应中
- m 可能为分享的动态函式库
- lsof : 列出被进程所开启的档案文件名 lsof -u root -a -U , lsof +d /dev
- -a 多项数据需要 同时成立 才显示结果
- -U 仅列出 unix like 系统的 socket 文件类型
- -u 后面接 username, 列出该用户相关程序所开启的档案
- +d 后面接目录,即找出某个目录底下已经被开启的档案
- pidof : 找出某支正在执行的程序的PID pidof [-sx] program_name 例如 pidof init syslogd
- -s 仅列出一个PID而不列出所有的PID
- -x 同时理出该 program name 可能的 PPID 那个程序的 PID
4 SELinux 进程,档案,网络等细部权限设定依据的一个核心模块
- selinux : 提供了一些预设的政策, 并且在该政策内提供多个规则, 你可以选择是否启用该控制规则 ( selinux 主要是控制进程是否有权限访问目录)
- 政策 : targeted 针对网络服务限制较多, strict 完整的 SELinux 权限, 限制方面较为严格 . ( 建议使用 targeted 政策 )
- 安全性文本 : 进程 -> SELinux( 确认政策) -> 安全性文本比较 -> 存取档案 , / 目录下输入 ls -Z 可以看到相关的安全性文本, 主要用冒号分为三个字段, Identify:role:type其中 :
- identify : root , system_u 进程 , user_u 一般帐号身份
- role : object_r 档案或目录资源, system_u 进程资源
- type : 最重要,
- selinux : 模式, 启动, 关闭 : selinux 分为3种模式 : enforcing 强制模式, permissive : 宽容模式( 仅有警告) , disabled : 关闭模式 , getenforce可以查看当前模式
- sestatus [-vb] : 列出目前的 SELinux 使用哪个政策
- vi /etc/selinux/config ( 配置SELinux档案 ) 启动, 关闭, 修改 等等都只要直接修改这个档案即可.