进程
什么是进程
- 概念:是程序的具体实现,执行过程
- 临时进程:当一个命令运行成功是,会为其创建一个PID来使用,当命令运行结束时,该PID(进程ID)结束.
- 持续进程:当用户/系统运行了某一个程序时,如果用户/系统不终止的情况下,该进程一直存在,这样的进程称之为持续进程。
程序被加载到内存的过程
- 用户执行程序,将程序预加载到内存中,为其分配一个临时的PID,接着去检查执行者是否拥有执行权限,如果没有,释放PID,终止/放弃执行;如果有权限,那么开始加载程序运行时的相关数据,资料,当执行师,临时的PID才会被确认。
进程查看
- ps -aux: 通过此命令可以查看当前系统上所有进程,截取当前系统上所有进程的状态。ps(Process status)
- 选项
- a : 和终端关联的所有process,通常与x一起使用,累出完整信息。
- x : 显示后台进程
- u : 显示进程属于哪个用户
- l :只查看和自己相关的进程
- 通常直接使用ps -aux直接运行
- 只查看与当前终端相关的自己的进程
- ps axjf 以类似树状显示进程状态
- 进程的相关信息
- USER: 该process属于哪个使用者
- PID: 该process的程序标识符
- %CPU: 该process所使用掉的CPU资源百分比
- %MEM:该process所占用的物理内存百分比
- VSZ: 该process使用掉的虚拟内存量
- RSS: 该process占用的物理内存量
- TTY: 该process哪个终端运行。 ?表示与终端没有关系。tty1-tty6是本机上面的登入者,pts/0表示远程主机
- STAT: 该进程目前的状态(R/S/D/T/Z)
- START: 该process被触发的时间
- TIME: 该process实际使用CPU运作的时间,累加
- COMMAND: 该程序的实际命令为何?或理解为该进程是哪一个程序/命令启动的
进程的状态
- D 不可中断
- R 正在运行,或在队列中的进程处于休眠状态
- S 处于休眠状态
- T 停止或被追踪
- Z 僵尸进程
- W 进入内存交换(从内核2.6开始无效)
- X 死掉的进程
- < 高优先级
- N 第优先级
- s 包含子进程
- + 位于后台的进程组
什么是僵尸进程
- 该进程已经执行/运行结束或死掉,但父进程没来得及把他给结束掉,就造成僵尸进程的出现。
pstree
- 以树状的心事直接展示进程状态,比ps axjf更为直观
- A: 以ASCII码的状态显示
- U: 以UTF-8的状态显示
- u: 每个进程的所属用户
- p: 进程的PID
- 与当前用户相关的进程不会显示用户名
top : 动态查看进程的状态,默认刷新频率为3秒
- -d 可以设置top的刷新秒数
- -b 让top以批次运行,通常配合数量重导向来使用
- -n 设置执行的批次数量
- -p 指定PID来运行
top -d 1 -b -n 3 > top.log
表示top以每秒更新一次的频率来执行3次,并输出到top。log文件中,top在运行时,默认按照cpu的使用率来排序,可以通过按键来更换排序方式- ? 显示在top当中可以输入的按键指令
- p 以cpu的使用资源排序显示
- M 以MEmory的使用资源排序显示
- N 以PID来排序
- T 由该Process使用的CPU时间积累(TIME+)排序
- k 给予某个PID后kill该进程(内核2.6后失效)
- q 离开top软件的按键
- PR Pririty的简写,程序的优先执行顺序,月销月早被执行
- NI Nice的简写,与Priority(优先级)有关,也是越小,越早被执行
进程的管理
- kill 单个进程的管理方式
- -1对于守护线程来说相当于重启读取参数配置,宠幸启动,如果是非守护线程还是会终止。
- -2 等同键盘的Ctrl+C的组合键操作
- -9 相当于windows的任务管理器中的强制结束进程一样。
- -15 以正常的方式结束/停止程序的运行。
killall:多进程管理方式
- 选项和kill是一样的。
系统资源监控
内存监控
- -b bytes
- -m Mbytes
- -k Mbytes
- -g Kbytes
- -t 显示物理内存和swap的总量
- Mem 显示的是物理内存的量
- Swap 虚拟内存的量
- total 虚拟内存的量
- shared 共享内存
- buffers 将要/(未来)写磁盘的内容
- cached 以写磁盘或者以从磁盘读出的内容
系统核心相关信息
- uname
- -a 所有系统先关的信息,包括以下的数据都会瘪列出来。
- -s 系统内核名称
- -r 内核版本
- -m 查看系统的版本,指的是32位或是64位
- -p CPU的类型,与 -m类似,显示的是CPU的类型
- -i 硬件的平台(ix86)
- n 查看主机名
观察系统启动时间与工作负载
- uptime
- 直接运行即可,显示的信息与top的第一行内容一致。
网络监控
- netstat
- -a 将目前系统上所有的已经连接、监听、Socket数据都累出来
- -t 列出tcp网络包的信息
- -u 列出udp网络包信息
- -n 以端口(port number)方式来显示(不以程序的服务名称)
- -l 列出目前正在监听的服务
- -p 列出该网络服务的进程id(PID)
- 常用组合:
- netstat -intp 查看当前网络中的监听的tcp包,并显示端口号、PID和程序名
- netstat -anp 查看当前网络中的素有连接,并显示端口号,PID和程序名
- netstat -ntp 查看当前网络中的TCP包并显示多扣号,PID和程序名
- netstat -au 如果是查看UDP包的时候,需要在前面加入一个a来使用
netstat命令选项显示解析:
- Proto 网络的封包协议,主要为TCP与UDP封包
- Recv-Q 接收消息缓存区,远端程序发送而来,尚未被当前进程处理的信息数,单位:字节
- Send-Q 发送消息缓存区,向远端进程发送,尚未被器接收的消息数,单位:字节
- Local Address 本地地址和端口号(IP:port)
- Foreign Address 进程通信的远程程序的网络地址(IP:port)(远程通信主机);
- State 网络连接状态,主要由建立(ESTABLISED)即监听(LISTEN)
- PID/program name 显示此服务的PID号码以及程序的命令名称
防火墙的状态变更
- 开启防火墙
- service iptables start
- /etc/init.d/iptables start
- 关闭防火墙
- service iptables stop
- /etc/init.d/iptables stop
- 重启防火墙
- service iptables restart
- /etc/init.d/iptables restart
- 查看防火墙
- service iptables status
- /etc/init.d/iptables status
- 永久修改防火墙的状态(需要重启服务器后才能生效)
- 开启防火墙 chkconfig iptables on
- 关闭防火墙 chkconfig iptables off
- 如果想要实现不重启就永久修改防火墙的状态的需要执行以下两句命令
- service iptables stop
- chkconfig iptalbes off
侦测系统资源变化
- 动态的查看内存,cpu,硬盘的状态
- -a 使用inactive/active(活跃与否)取代buffer/cache的内存输出信息。
- -f 开机到目前为止,系统复制(fork)的进程数
- -s 将一些事情(开机至目前为止)导致的内存变化情况列表说明
- -S 后面可以接单位,让现实的数据有单位。例如K/M取代bytes的单位。
- -d 列出磁盘的读写总量统计表
- -p 后面列出磁盘分区,可现实该磁盘分区的读写总量统计
- 案例:
vmstat 1 4
打印系统状态,每秒一次,共四次 - 查询结果解析
- procs(进程字段)
- r:等待运行的进程数量
- b: 不可被唤醒的进程数量
- 这两个项目越多,代表系统月忙碌(因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒)
- memory(内存字段)
- swpd: 虚拟内存被使用的容量
- free:未被使用的内存容量
- buff/cache: 用户缓存的内存
- swap(交换分区字段)
- si: 每秒从交换分区写到内存的数据量大小,由磁盘-> 内存
- so: 每秒写入交换分区的内存数据量大小,由内存 -> 磁盘
- 如果si/so的数值太大,表示内存的数据常常得在磁盘与主内存器之间传来传去,系统效能会很差
- io(磁盘读写字段)
- bi: 从快设备读入数据的总量(读磁盘)(每秒kb)
- bo:从快设备写入数据的总量(写磁盘)(每秒kb)
- 如果这部分的值越高,代表系统的I/O非常忙碌
- system(系统字段)
- in: 每秒被终端的进程次数
- cs: 每秒中进程的时间切换次数
- 者两个数值越大,代表系统与接口设备的通信非常频繁
- CPU(cpu字段)
- us(user)非内核态的(用户进程)CPU使用情况
- sy(system) 内核态所使用(系统进程的cpu)情况
- id(idle)闲置的CPU情况
- wa: (wait)等待I/O所耗费的CPU
- procs(进程字段)
任务管理
- 前台:交互式,展示给用户看的,可以控制与执行命令dbash环境成为前台进程
- 后台:非交互式,在操作系统中自行运行,你无法使用[Ctrl]+c终止,可使用bg或fg命令操作的任务
- 可以通过jobs命令查看后台执行的任务(非系统进程)
- Linux系统中,我们可以通过Ctrl+z命令来将前台的任务扔到后台暂停运行,可以通过在命令的最后加上一个&符号来将任务放到后台运行
- ctrl+z 防止后台暂停任务
- & 繁殖后台运行任务,不可以给交互式的软件使用
jobs
- 此命令可以用来查看后台的任务
- -r 仅查看后台运行的任务
- -s 仅查看后台暂停的任务
- -l 列出后台任务的进程ID
fg 调后台任务到前台
- 可以把后台(暂停/运行)的任务调到前台来
- fg + jobNumber # jbnumber可以不写,如果不写,默认调+号的任务。+号的任务是最后一次放至后台的任务
修改后台暂停任务的状态为运行
- 可以把后台在那天的任务状态修改问运行状态。但是不能修改防止后台的交互式任务
- 默认调用的规则和fg是一样的
- 即使是给防止后台的交互式任务执行bg,虽然会显示给该任务加上一个&符号,但是该任务在后台如意烫染是处于暂停的状态。
- 向C这样的命令,本身就不属于交互式的任务,在后台是可以通过bg开改变状态的
终止后台的jobs
- 通常情况其实不需要终止后台的任务,除非特殊情况下
- 可以通过jobs -l来查看任务的PID,然后通过kill命令加上信号量来终止后台的任务。
vim
-
vim的三个模式
-
一般模式(默认模式)
-
该模式下可以使用快捷键快速地对文件内容进行操作,可以快速的定位光标位置。但是该模式不允许做精准的编辑。
-
通常情况下使用vim/vi打开一个文件的时候就已经进入了该模式
-
如果是在编辑模式或命令模式时,可以通过键盘的ESC键回到编辑模式
-
快捷键
- h 光标左移一个字符,如果是20h,表示左移20个字符
- j 下移一个字符
- k 上移一个字符
- l 右移一个字符
- Ctrl + f 屏幕向上移动一页
- Ctrl + b 屏幕向上移动一页
- 0 或home移动到此行最前面字符出
- $ 或end移动到光标所在行的行尾
- H 光标移动到当前屏幕的最上方第一个字符
- M 光标移动到当前屏幕中间的第一个字符
- L 光标移动到当前屏幕最下方第一个字符
- G 移动到此文件最后一行
- nG 移动到第N行
- gg相当于1G,即移动到第一行
- n + enter 光标下移n行
- /word向下查钊单词“word”
- ?word下上查找单词“word”
- n 表示重复前一个查找动作
- N与n相反
- yy 复制光标所在行
- nyy 复制光标所在向下n行(n为数字)
- y1G 复制光标所在行到第一行所有数据
- yG 复制光标所在行到最后一行所有数据
- y$ 复制光标所在处到同行最后一个字符
- y0 复制光标所在处到同行最后一个字符
- p 将已复制的数据粘贴到光标所在下一行
- P 将已复制的数据粘贴到光标所在上一行
- u 复原前一个操作(类似于windows中的ctrl+z)!!!
- dd 删除光标所在行(!!!)
- ndd 删除光标所在行以下n行(n为数字,包含当前行在内)
- d1G 删除光标所在行到第一行所有数据(包括所在的行)
- dG 删除光标所在行到最后一行(!!)
- d$或d end删除光标所在处到同行最后一个字符(!!)
- d0 或d home 删除光标所在处到同行第一个字符。(!!)
-
编辑模式:
- 在该模式下,不能使用快捷键,但是可以进行文件内容的精准编辑,例如增加一个字符。
- 在一般模式下,按下键盘的i、o、a(大小写等均可)即可进入"插入模式",
- 按r可以进入单次替换,R可以替换模式。
- i从光标所在处插入(!!!)
- 快捷键
- I从所在行第一个非空白字符处插入(!!)
- a从光标所在下一个字符处插入
- A从光标所在行最后一个字符处插入(!!)
- o在光标所在处下一行插入新的一行(!!)
- O在光标所在处上一行插入新的一行(!!)
- r替换光标所在处字符一次
- R一直替换光标所在处文字直到按下Esc(!!!)如何进
-
命令模式:
-
在该模式下,可以进行数据的保存,退出,强制保存,强制退出,查找,替换,读取,另存为,也可以设置行号,甚至可以在该模式下执行其他的命令,例如 ifconfig
-
在一般模式下输入": / ?"这三个符号的任意符号即可进入命令模式。
-
快捷键
- s/word1/word2/g 在当前行将word1替换成word2(!!)
- %s/word1/word2/g 在当前文件将word1替换成word2(!!)
- n1,n2s/word1/word2/g在n1到n2行查找word1替换成word2 (n1、n2为数字)
- 1,$ s/word1/word2/g从第一行到最后一行查找word1替换成word2
- %s/word1/word2/gc同上,在替换前确认是否替换。(!!!)只能单行确认,需要逐行确认。
- y表示yes,n表示no,a表示all(限光标当前到最后一行),q表示quit,l表示替换后移动光标到 (y/n/a/q/l/E/Y)?
行首,E(Ctrl+E)表示向下翻,y(Ctrl+Y)表示向上翻。