Linux中与进程相关的命令
执行一个程序或者命令就可以启动一个进程,进程启动时,操作系统就为其分配系统内唯一的进程ID(PID)
ps(process status):将某个时间点的程序运作情况截取下来
选项和参数
1. a:(all)(和输入终端(terminal) 关联的所有 process,通常与x一起使用,用与列出完整信息。
2. x: 后台进程,通常与a这个参数一起使用,可以列出较为完整的信息
3. u:有效使用者(effective user)相关的process
常用组合:
1. ps aux 观察系统所有的程序数据(常用),有的人也常这样写ps -aux,效果差不多。
2. ps axjf 可以用类似与树状的形式显示。
小提示:参数不用背,可以通过man ps 获者使用Linux命令大全查看
通过一下命令可以查看一个进程的id
1.pidof init 显示init进程的id号
2.ps a 显示所有的进程信息,如下:
PID TTY STAT TIME COMMAND
1303 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2
1305 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3
1307 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4
1312 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5
1316 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6
1394 tty1 Ss+ 0:00 -bash
2130 pts/1 Ss 0:00 -bash
2330 pts/1 R+ 0:00 ps a
3.ps aux|grep bash 显示进程名为bash的相关信息,如下:
root 1394 0.0 0.1 108332 1680 tty1 Ss+ 08:39 0:00 -bash
root 2130 0.0 0.1 108336 1724 pts/1 Ss 14:43 0:00 -bash
root 2335 0.0 0.0 103248 808 pts/1 D+ 19:11 0:00 grep bash
4.su - 用户名,该命令是切换用户的命令,例如:su - tom 切换到tom用户下,然后再次执行3的命令可以看到,如下:
root 1394 0.0 0.1 108332 1680 tty1 Ss+ 08:39 0:00 -bash
root 2130 0.0 0.1 108336 1728 pts/1 Ss 14:43 0:00 -bash
tom 2337 0.1 0.1 108336 1780 pts/1 S 19:16 0:00 bash
tom 2351 0.0 0.0 103256 836 pts/1 S+ 19:16 0:00 grep bash
注意:不同用户执行相同程序,注意其权限的不同
5.ps -l(注意:ps后面跟的是一个字母,不是数字1),该命令是仅查看自己的bash相关的进程,如下:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1926 1922 2 80 0 - 27084 wait pts/1 00:00:00 bash
4 R 0 1945 1926 0 80 0 - 27034 - pts/1 00:00:00 ps
6.ps aux 显示系统所有程序,由于比较多在这里作者就不一一列举了。而是使用ps aux | head -4 该命令可以显示系统程序前4行,如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19356 1532 ? Ss 09:07 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 09:07 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:07 0:00 [migration/0]
其中
USER:该process属于那个使用者
PID:该process的程序标识符
%CPU:该process使用掉的CPU资源百分比
%MEM:该process所占用的物理内存百分比
VSZ:该process使用掉的虚拟内存量(Kbytes)
RSS:该process占用的物理内存量(Kbytes)
TTY:该process是在哪个终端机上运作的,若与终端机无关则显示问号(?)另外,tty1~tty6是本机上面的登入者程序,若为pts/0~pts/6等等其他的,则表示为由网络连接进主机的程序(pts表示虚拟终端,例如pts/1 pts/2等)
STAT:该进程目前的状态,状态显示与ps -l的S旗标相同(R/S/D/T/Z)
START:该process被触发启动的时间
COMMAND:该程序的实际命令为何?
7.Linux进程状态:
(1) D 不可中断Uninterruptible(usually IO)
(2) R 正在运行,或者在队列中的进程
(3) S 处于休眠状态
(4) T 停止或被追踪
(5) Z 僵尸进程
(6) W 进入内存交换(从内核2.6开始无效)
(7) X 死掉的进程
(8) < 高优先级
(9) N 低优先级
(10) s 包含子进程
(11) + 位于后台的进程组
8.ps是截取一个时间点的进程状态,而top则可以持续观察进程的运行状态,如下:
top - 04:37:32 up 19:29, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 78 total, 1 running, 77 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1012352k total, 212496k used, 799856k free, 40604k buffers
Swap: 2097144k total, 0k used, 2097144k free, 55720k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19356 1532 1228 S 0.0 0.2 0:01.12 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.17 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 0:32.09 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
当然在top命令后面也可以使用一些参数:
-d:后面可以接秒数,就是整个程序画面更新的秒数,默认是5秒
-b:以批次的方式执行top,还有更多的参数可以使用,通常会搭配数据流重导向来将批次的结果输出成为档案
-n:(Number)与-b搭配,意义是需要进行几次的top的输出结果
-p:指定某些个PID来进行观察检测而已
例如:
top -d 2 每隔两秒更新一次
top -b
top -b -n 2 以批次的方式进行两次top结果的输出
top -b -n 5 > a.log 以批次的方式进行五次top结果的输出(输出到a.log这个文件中)
cat a.log(cat 仅用于查看,不具备编辑功能,vim是可以编辑内容的,vim是vi编译器的升级版,可以理解为是一个强大的三方插件)
在top执行过程当中可以使用的按键指令:
(1) ?:显示在top当中可以键入的按键指令
(2) P:以CPU的使用资源排序显示
(3) M:以Memory的使用资源排序显示
(4) N:以PID来排序
(5) T:由该Process使用的CPU时间累积(TIME+)排序
(6) k:给予某个PID后kill该进程(内核2.6后失效)
(7) q:离开top软件的按键
通过使用top -d 2 动态查看进程,显示如下:
top - 05:06:55 up 13 min, 1 user, load average: 0.00, 0.06, 0.10
Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.0%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 1012352k total, 299596k used, 712756k free, 19276k buffers
Swap: 2031608k total, 0k used, 2031608k free, 108536k cached
第一行显示的信息:目前的时间,开机到目前为止所经过的时间 up 13min,已经登入系统的用户人数 1 user,系统在 1, 5, 15 分钟的平均工作负载
显示的是目前进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie)
第三行显示CPU的整体负载
第四行和第五行表示目前的物理内存与虚拟内存使用情况
每个process使用的资源情况 PID:每个process的ID;USER:该process所属的使用者;PR:Priority(优先级)的简写,程序的优先执行顺序,越小越早被执行;NI:Nice的简写,与Priority有关,也是越小越早被执行;%CPU:CPU的使用率;%MEM:内存的使用率;TIME+:CPU使用时间的累加;COMMAND:进程名称。
注意:top默认使用CPU使用率(%CPU)作为排序的重点,如果想要使用内存使用率排序,则可以按下M,若要恢复则按下P即可
9.通过pstree查看进程树,效果如下:
init─┬─abrtd
├─acpid
├─atd
├─auditd───{auditd}
├─crond
├─cupsd
├─dbus-daemon───{dbus-daemon}
├─hald─┬─hald-runner─┬─hald-addon-acpi
│ │ └─hald-addon-inpu
│ └─{hald}
├─master─┬─pickup
│ └─qmgr
├─6*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
pstree后面还可以使用下面的参数:
-a 显示命令行参数
-A 使用 ASCII 画线符
-c 不压缩雷同的子树
-h 高亮显示当前进程及其祖先
-H 进程号 高亮显示 "进程号" 指定的进程当及其祖先
-G 使用 VT100 划线符
-l 不截断长行
-n 输出按进程号排序
-p 显示进程号;隐含 -c
-u 显示用户名变换(属于root的程序不会显示)
-U 使用 UTF-8 (Unicode) 划线符
-V 显示版本信息
-Z 显示 SELinux 安全环境
10.查看其中某个进程 ps aux | grep sshd 结果如下:
root 1157 0.0 0.1 66604 1188 ? Ss Jan13 0:00 /usr/sbin/sshd
root 2632 0.0 0.3 100348 4020 ? Ss 06:35 0:00 sshd: root@pts/0
root 3017 0.0 0.0 103256 808 pts/0 R+ 14:24 0:00 grep sshd
11.重新加载并启动 kill -1 1157
12.通过ps aux | grep sshd 发现重启后的进程的PID发生了改变
13.观察内存(Memory)的使用情况:free 结果如下:
total used free shared buffers cached
Mem: 1012352 222128 790224 0 47660 57792
-/+ buffers/cache: 116676 895676
Swap: 2097144 0 2097144
注意:直接使用free时,显示的单位是bytes,我们可以使用b(bytes),k(Kbytes),m(Mbytes),g(Gbytes)来定义显示单位,对应参数分别是 -b,-k,-m,-g。
free -t:在输出的最终结果时,显示物理内存与swap的总量
free命令显示选项解析:
Mem一行显示的是物理内存的量
Swap,虚拟内存的量
total是总量,used是已被使用的量,free则是剩余可用的量
shared,共享内存
buffers,将写磁盘的内容
cached,已写磁盘或者已从磁盘读出的内容
14.查阅系统与内核的相关信息:uname 结果如下
Linux 如果单单使用uname命令,输出结果就是你当前的系统名,在这里我的是Linux
当然也可以使用一些选项或者参数:
-a:显示所有系统相关的信息,包括以下的数据都会被列出来
-s:系统内核名称
-r:内核版本
-m:本系统的硬件名称,例如 i686或者x86_64等
-p:CPU的类型,与-m类似,显示的是CPU的类型
-i:硬件的平台(ix86)
15.观察系统启动时间与工作负载:uptime 结果如下
15:14:15 up 1 day, 6:06, 1 user, load average: 0.00, 0.00, 0.00
显示目前系统当前时间,已经开机多长时间,用户数,以及1,5,15分钟的平均负载
16.网络监控:netstat 结果如下
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.253.131:ssh 192.168.253.1:50416 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 9108 @/org/kernel/udev/udevd
unix 2 [ ] DGRAM 11844 @/org/freedesktop/hal/udev_event
unix 9 [ ] DGRAM 11449 /dev/log
unix 2 [ ] DGRAM 21276
unix 2 [ ] DGRAM 18749
unix 2 [ ] DGRAM 12552
unix 2 [ ] DGRAM 12524
unix 2 [ ] DGRAM 12475
unix 3 [ ] STREAM CONNECTED 12452
unix 3 [ ] STREAM CONNECTED 12451
netstat命令后面也可以跟参数,参数有:
-a:将目前系统上所有的已经连接,监听,Socket数据都列出来
-t:列出TCP网络包的信息
-u:列出UDP网络包的信息
-n:以端口(prot number)方式来显示(不以程序的服务名称)
-l:列出目前正在监听(listen)的服务
-p:列出该网络服务的进程ID(PID)
netstat常用的命令:
netstat -atp 所有TCP协议的链接,并输出PID号
netstat -antp 还有 netstat -lntp
netstat命令选项显示解析
Proto :网络的封包协议,主要分为TCP与UDP封包;
Recv-Q:接收消息缓存区,远端进程发送而来,尚未被当前进程处理的信息数,单位:字节;
Send-Q:发送消息缓存区,向远端进程发送,尚未被其接收的消息数,单位:字节;
Local Address:本端网络地址(IP:port);
Foreign Address:与当前进程进行通信的远程进程的网络地址(IP:port)(远程通信主机);
State :网络连接状态,主要有建立(ESTABLISED)及监听(LISTEN);
PID/Program name:显示 此服务的PID号码以及程序的命令名称,目前系统上已在监听的网络链接以及PID
补充:防火墙的启动,状态查看,关闭!!
service iptables start 开启防火墙的命令
service iptables status 查看防火墙的状态信息
service iptables stop 关闭防火墙的命令
service iptables restart 重启防火墙的命令
以上状态的修改,在服务器重启前生效。
如果想要永久关闭可以使用: chkconfig iptables off
永久开启使用:chkconfig iptables on
这两个命令执行完,需要重启服务器才能生效
17.侦测系统资源变化,CPU/内存/磁盘输入输出状态:vmstat
动态的了解一下系统资源的运作,CPU/内存/磁盘输入输出状态
选项与参数:
-a :使用 inactive/active(活跃与否)取代 buffer/cache 的内存输出信息;
-f :开机到目前为止,系统复制 (fork)的进程数;
-s :将一些事件 (开机至目前为止)导致的内存变化情况列表说明;
-S :后面可以接单位,让显示的数据有单位。例如K/M 取代bytes 的容量 ;
-d :列出磁盘的读写总量统计表
-p :后面列出磁盘分区,可显示该磁盘分区的读写总量统计
例如:vmstat 1 4 统计CPU状态,每秒一次,共计四次,结果如下
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 858912 9532 45656 0 0 233 8 72 85 1 3 94 2 0
0 0 0 858896 9532 45668 0 0 0 0 11 10 0 0 100 0 0
0 0 0 858896 9532 45668 0 0 0 0 15 16 0 0 100 0 0
0 0 0 858896 9532 45668 0 0 0 0 13 12 0 0 100 0 0
vmstat命令选项解析
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;
st:被虚拟机(virtual machine)所盗用的CPU(2.6.11 以后才支持)
18.Linux的任务管理
前台:可以控制与执行命令的bash环境称为前台进程
后台:在操作系统中自行运行,你无法使用ctrl键+c终止,可以使用bg/fg命令操作的任务;可以通过jobs命令查看后台执行的任务(非系统进程)
-可以通过ctrl键+z将前台执行的任务放置到后台
在当前bash执行多个任务
比如:cp file1 file2 &
重点在以上的这个“&”符号,他表示将file1这个文件复制为file2,同时将这个拷贝进程放到后台执行。
也就是说执行这一个命令之后,在这一个终端仍然可以做其他的工作。拷贝任务执行完成后,系统将会在终端显示完成的消息。
举例来说,我们在登录bash后,想要一边复制文件、一边进行编译。那么就需要任务管理 。
注意:Ctrl+z和&的区别
Ctrl+z将前台程序放置到后台——状态为暂停。
在执行的命令后面追加"&"——状态为后台运行。
jobs 该命令用来查看当前工作状态,还可以使用相关参数
-l :除了列出 job number与指令串之外,同时列出PID 的号码;
-r :仅列出正在后台 run 的任务;
-s :仅列出正在后台暂停 (stop) 的任务。
19.Vim命令介绍
vim是一个类似vi的文本编辑器,不过在vi的基础上增加了很多新特性,vim被公认为类vi编辑器中最好用的一个。
vim是vi发展出来的一个文本编辑器。编译及错误跳转等方便编程的功能丰富,在实际工作中被广泛使用。
和Emacs并列称为类Unix系统用户最喜爱的编辑器。
为什么要使用Vim呢?
所有的Linux系统都会内建vi文本编辑器,其他的文本编辑器则不一定存在。
很多软件的编辑接口都会主动调用vi,例如visudo、crontab等
vim可视为vi的高级版本。
vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序开发。
20.vim的三种模式
(1) 一般模式
以vim打开一个文件就直接进入一般模式(默认模式)
可以使用上下左右移动光标来移动,也可以使用删除字符或删除整行来处理文件内容, 也可以使用复制、粘贴来处理文件数据。但无法任意编辑文件内容。比如说:我想写一 个123。
(2) 编辑模式
在一般模式中可以删除、复制、粘贴等,按下i、I、o、O、a、A、r(快速替换)、R等 任何一个字母后进入编辑模式。并在左下方出现INSERT或REPLACE。
该模式下可以输入文件内容。
按下<Esc>返回一般模式。
(3) 命令模式
在一般模式当中,输入:/?三个字符中的任何一个按钮,就可以将光标移动到最下面那 一行。
在这个模式当中,可以提供查询、替换等功能。同时存盘(保存)、离开vi、显示行号 等等命令都是在此模式进行。
vim快捷键的使用:
(1) 一般模式快捷键的使用
h或 光标左移一个字符。如果是20h,表示左移20个字符。
j或 光标下移一个字符 同上
k或 光标上移一个字符 同上
l或 光标右移一个字符 同上
[Ctrl]+[f]屏幕向下移动一页 Page Down
[Ctrl]+[b]屏幕向上移动一页 Page Up
0或[Home]移动到此行最前面字符处
$或[End]移到光标所在行的行尾
H 光标移到当前屏幕最上方行的第一个字符
M光标移到当前屏幕中间行的第一个字符
L光标移动到当前屏幕最下方行第一个字符
G移到此文件最后一行
nG移到第n行
gg相当于1G,即移到第一行
n[Enter]光标下移n行
/word向下查找单词“word”
?word向上查找单词“word”
n表示重复前一个查找操作
N与n相反(反向查找)
: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同上,在替换前确认是否替换。只能单行确认,需要逐步确认。
x向后删除一个字符
nx向后删除n个字符(n为数字)
X向前删除一个字符
dd删除光标所在行
ndd删除光标所在行以下n行(n为数字,包含当前行在内)
d1G删除光标所在行到第一行所有数据(包括所在的行)
dG删除光标所在行到最后一行
d$或d end删除光标所在处到同行最后一个字符
d0或d home删除光标所在处到同行第一个字符。
yy复制光标所在行
nyy复制光标所在向下n行(n为数字)
y1G复制光标所在行到第一行所有数据
yG复制光标所在行到最后一行所有数据
y$复制光标所在处到同行最后一个字符
y0复制光标所在处到同行第一个字符
p将已复制的数据粘贴到光标所在下一行
P将已复制的数据粘贴到光标所在上一行
u复原前一个操作(类似于windows中的ctrl+z)
(2).编辑模式快捷键
一般模式->编辑模式的转换
i从光标所在处插入
I从所在行第一个非空白字符处插入
a从光标所在下一个字符处插入
A从光标所在行最后一个字符处插入
o在光标所在处下一行插入新的一行
O在光标所在处上一行插入新的一行
r替换光标所在处字符一次
R一直替换光标所在处文字直到按下Esc
(3).命令模式快捷键
:w [filename]另存为filename
:r [filename] 读取filename指定文件中的内容到光标所在的行。
:n1,n2 w [filename] 将n1到n2行另存为filename
:! command 临时切换到命令行模式下执行command命令。
例如 “:!find / -name Helllo.java”即可在vim当中查看/home下面以ls输出的文件信息。
:wq 保存后离开
:q 不保存离开(未改可以离开,如果修改了需要q!强制离开)
:q! 不保存离开
:set nu 显示行号
:set nonu 取消显示行号
执行一个程序或者命令就可以启动一个进程,进程启动时,操作系统就为其分配系统内唯一的进程ID(PID)
ps(process status):将某个时间点的程序运作情况截取下来
选项和参数
1. a:(all)(和输入终端(terminal) 关联的所有 process,通常与x一起使用,用与列出完整信息。
2. x: 后台进程,通常与a这个参数一起使用,可以列出较为完整的信息
3. u:有效使用者(effective user)相关的process
常用组合:
1. ps aux 观察系统所有的程序数据(常用),有的人也常这样写ps -aux,效果差不多。
2. ps axjf 可以用类似与树状的形式显示。
小提示:参数不用背,可以通过man ps 获者使用Linux命令大全查看
通过一下命令可以查看一个进程的id
1.pidof init 显示init进程的id号
2.ps a 显示所有的进程信息,如下:
PID TTY STAT TIME COMMAND
1303 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2
1305 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3
1307 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4
1312 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5
1316 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6
1394 tty1 Ss+ 0:00 -bash
2130 pts/1 Ss 0:00 -bash
2330 pts/1 R+ 0:00 ps a
3.ps aux|grep bash 显示进程名为bash的相关信息,如下:
root 1394 0.0 0.1 108332 1680 tty1 Ss+ 08:39 0:00 -bash
root 2130 0.0 0.1 108336 1724 pts/1 Ss 14:43 0:00 -bash
root 2335 0.0 0.0 103248 808 pts/1 D+ 19:11 0:00 grep bash
4.su - 用户名,该命令是切换用户的命令,例如:su - tom 切换到tom用户下,然后再次执行3的命令可以看到,如下:
root 1394 0.0 0.1 108332 1680 tty1 Ss+ 08:39 0:00 -bash
root 2130 0.0 0.1 108336 1728 pts/1 Ss 14:43 0:00 -bash
tom 2337 0.1 0.1 108336 1780 pts/1 S 19:16 0:00 bash
tom 2351 0.0 0.0 103256 836 pts/1 S+ 19:16 0:00 grep bash
注意:不同用户执行相同程序,注意其权限的不同
5.ps -l(注意:ps后面跟的是一个字母,不是数字1),该命令是仅查看自己的bash相关的进程,如下:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1926 1922 2 80 0 - 27084 wait pts/1 00:00:00 bash
4 R 0 1945 1926 0 80 0 - 27034 - pts/1 00:00:00 ps
6.ps aux 显示系统所有程序,由于比较多在这里作者就不一一列举了。而是使用ps aux | head -4 该命令可以显示系统程序前4行,如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19356 1532 ? Ss 09:07 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 09:07 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:07 0:00 [migration/0]
其中
USER:该process属于那个使用者
PID:该process的程序标识符
%CPU:该process使用掉的CPU资源百分比
%MEM:该process所占用的物理内存百分比
VSZ:该process使用掉的虚拟内存量(Kbytes)
RSS:该process占用的物理内存量(Kbytes)
TTY:该process是在哪个终端机上运作的,若与终端机无关则显示问号(?)另外,tty1~tty6是本机上面的登入者程序,若为pts/0~pts/6等等其他的,则表示为由网络连接进主机的程序(pts表示虚拟终端,例如pts/1 pts/2等)
STAT:该进程目前的状态,状态显示与ps -l的S旗标相同(R/S/D/T/Z)
START:该process被触发启动的时间
COMMAND:该程序的实际命令为何?
7.Linux进程状态:
(1) D 不可中断Uninterruptible(usually IO)
(2) R 正在运行,或者在队列中的进程
(3) S 处于休眠状态
(4) T 停止或被追踪
(5) Z 僵尸进程
(6) W 进入内存交换(从内核2.6开始无效)
(7) X 死掉的进程
(8) < 高优先级
(9) N 低优先级
(10) s 包含子进程
(11) + 位于后台的进程组
8.ps是截取一个时间点的进程状态,而top则可以持续观察进程的运行状态,如下:
top - 04:37:32 up 19:29, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 78 total, 1 running, 77 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1012352k total, 212496k used, 799856k free, 40604k buffers
Swap: 2097144k total, 0k used, 2097144k free, 55720k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19356 1532 1228 S 0.0 0.2 0:01.12 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.17 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 0:32.09 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
当然在top命令后面也可以使用一些参数:
-d:后面可以接秒数,就是整个程序画面更新的秒数,默认是5秒
-b:以批次的方式执行top,还有更多的参数可以使用,通常会搭配数据流重导向来将批次的结果输出成为档案
-n:(Number)与-b搭配,意义是需要进行几次的top的输出结果
-p:指定某些个PID来进行观察检测而已
例如:
top -d 2 每隔两秒更新一次
top -b
top -b -n 2 以批次的方式进行两次top结果的输出
top -b -n 5 > a.log 以批次的方式进行五次top结果的输出(输出到a.log这个文件中)
cat a.log(cat 仅用于查看,不具备编辑功能,vim是可以编辑内容的,vim是vi编译器的升级版,可以理解为是一个强大的三方插件)
在top执行过程当中可以使用的按键指令:
(1) ?:显示在top当中可以键入的按键指令
(2) P:以CPU的使用资源排序显示
(3) M:以Memory的使用资源排序显示
(4) N:以PID来排序
(5) T:由该Process使用的CPU时间累积(TIME+)排序
(6) k:给予某个PID后kill该进程(内核2.6后失效)
(7) q:离开top软件的按键
通过使用top -d 2 动态查看进程,显示如下:
top - 05:06:55 up 13 min, 1 user, load average: 0.00, 0.06, 0.10
Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.0%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 1012352k total, 299596k used, 712756k free, 19276k buffers
Swap: 2031608k total, 0k used, 2031608k free, 108536k cached
第一行显示的信息:目前的时间,开机到目前为止所经过的时间 up 13min,已经登入系统的用户人数 1 user,系统在 1, 5, 15 分钟的平均工作负载
显示的是目前进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie)
第三行显示CPU的整体负载
第四行和第五行表示目前的物理内存与虚拟内存使用情况
每个process使用的资源情况 PID:每个process的ID;USER:该process所属的使用者;PR:Priority(优先级)的简写,程序的优先执行顺序,越小越早被执行;NI:Nice的简写,与Priority有关,也是越小越早被执行;%CPU:CPU的使用率;%MEM:内存的使用率;TIME+:CPU使用时间的累加;COMMAND:进程名称。
注意:top默认使用CPU使用率(%CPU)作为排序的重点,如果想要使用内存使用率排序,则可以按下M,若要恢复则按下P即可
9.通过pstree查看进程树,效果如下:
init─┬─abrtd
├─acpid
├─atd
├─auditd───{auditd}
├─crond
├─cupsd
├─dbus-daemon───{dbus-daemon}
├─hald─┬─hald-runner─┬─hald-addon-acpi
│ │ └─hald-addon-inpu
│ └─{hald}
├─master─┬─pickup
│ └─qmgr
├─6*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
pstree后面还可以使用下面的参数:
-a 显示命令行参数
-A 使用 ASCII 画线符
-c 不压缩雷同的子树
-h 高亮显示当前进程及其祖先
-H 进程号 高亮显示 "进程号" 指定的进程当及其祖先
-G 使用 VT100 划线符
-l 不截断长行
-n 输出按进程号排序
-p 显示进程号;隐含 -c
-u 显示用户名变换(属于root的程序不会显示)
-U 使用 UTF-8 (Unicode) 划线符
-V 显示版本信息
-Z 显示 SELinux 安全环境
10.查看其中某个进程 ps aux | grep sshd 结果如下:
root 1157 0.0 0.1 66604 1188 ? Ss Jan13 0:00 /usr/sbin/sshd
root 2632 0.0 0.3 100348 4020 ? Ss 06:35 0:00 sshd: root@pts/0
root 3017 0.0 0.0 103256 808 pts/0 R+ 14:24 0:00 grep sshd
11.重新加载并启动 kill -1 1157
12.通过ps aux | grep sshd 发现重启后的进程的PID发生了改变
13.观察内存(Memory)的使用情况:free 结果如下:
total used free shared buffers cached
Mem: 1012352 222128 790224 0 47660 57792
-/+ buffers/cache: 116676 895676
Swap: 2097144 0 2097144
注意:直接使用free时,显示的单位是bytes,我们可以使用b(bytes),k(Kbytes),m(Mbytes),g(Gbytes)来定义显示单位,对应参数分别是 -b,-k,-m,-g。
free -t:在输出的最终结果时,显示物理内存与swap的总量
free命令显示选项解析:
Mem一行显示的是物理内存的量
Swap,虚拟内存的量
total是总量,used是已被使用的量,free则是剩余可用的量
shared,共享内存
buffers,将写磁盘的内容
cached,已写磁盘或者已从磁盘读出的内容
14.查阅系统与内核的相关信息:uname 结果如下
Linux 如果单单使用uname命令,输出结果就是你当前的系统名,在这里我的是Linux
当然也可以使用一些选项或者参数:
-a:显示所有系统相关的信息,包括以下的数据都会被列出来
-s:系统内核名称
-r:内核版本
-m:本系统的硬件名称,例如 i686或者x86_64等
-p:CPU的类型,与-m类似,显示的是CPU的类型
-i:硬件的平台(ix86)
15.观察系统启动时间与工作负载:uptime 结果如下
15:14:15 up 1 day, 6:06, 1 user, load average: 0.00, 0.00, 0.00
显示目前系统当前时间,已经开机多长时间,用户数,以及1,5,15分钟的平均负载
16.网络监控:netstat 结果如下
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.253.131:ssh 192.168.253.1:50416 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 9108 @/org/kernel/udev/udevd
unix 2 [ ] DGRAM 11844 @/org/freedesktop/hal/udev_event
unix 9 [ ] DGRAM 11449 /dev/log
unix 2 [ ] DGRAM 21276
unix 2 [ ] DGRAM 18749
unix 2 [ ] DGRAM 12552
unix 2 [ ] DGRAM 12524
unix 2 [ ] DGRAM 12475
unix 3 [ ] STREAM CONNECTED 12452
unix 3 [ ] STREAM CONNECTED 12451
netstat命令后面也可以跟参数,参数有:
-a:将目前系统上所有的已经连接,监听,Socket数据都列出来
-t:列出TCP网络包的信息
-u:列出UDP网络包的信息
-n:以端口(prot number)方式来显示(不以程序的服务名称)
-l:列出目前正在监听(listen)的服务
-p:列出该网络服务的进程ID(PID)
netstat常用的命令:
netstat -atp 所有TCP协议的链接,并输出PID号
netstat -antp 还有 netstat -lntp
netstat命令选项显示解析
Proto :网络的封包协议,主要分为TCP与UDP封包;
Recv-Q:接收消息缓存区,远端进程发送而来,尚未被当前进程处理的信息数,单位:字节;
Send-Q:发送消息缓存区,向远端进程发送,尚未被其接收的消息数,单位:字节;
Local Address:本端网络地址(IP:port);
Foreign Address:与当前进程进行通信的远程进程的网络地址(IP:port)(远程通信主机);
State :网络连接状态,主要有建立(ESTABLISED)及监听(LISTEN);
PID/Program name:显示 此服务的PID号码以及程序的命令名称,目前系统上已在监听的网络链接以及PID
补充:防火墙的启动,状态查看,关闭!!
service iptables start 开启防火墙的命令
service iptables status 查看防火墙的状态信息
service iptables stop 关闭防火墙的命令
service iptables restart 重启防火墙的命令
以上状态的修改,在服务器重启前生效。
如果想要永久关闭可以使用: chkconfig iptables off
永久开启使用:chkconfig iptables on
这两个命令执行完,需要重启服务器才能生效
17.侦测系统资源变化,CPU/内存/磁盘输入输出状态:vmstat
动态的了解一下系统资源的运作,CPU/内存/磁盘输入输出状态
选项与参数:
-a :使用 inactive/active(活跃与否)取代 buffer/cache 的内存输出信息;
-f :开机到目前为止,系统复制 (fork)的进程数;
-s :将一些事件 (开机至目前为止)导致的内存变化情况列表说明;
-S :后面可以接单位,让显示的数据有单位。例如K/M 取代bytes 的容量 ;
-d :列出磁盘的读写总量统计表
-p :后面列出磁盘分区,可显示该磁盘分区的读写总量统计
例如:vmstat 1 4 统计CPU状态,每秒一次,共计四次,结果如下
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 858912 9532 45656 0 0 233 8 72 85 1 3 94 2 0
0 0 0 858896 9532 45668 0 0 0 0 11 10 0 0 100 0 0
0 0 0 858896 9532 45668 0 0 0 0 15 16 0 0 100 0 0
0 0 0 858896 9532 45668 0 0 0 0 13 12 0 0 100 0 0
vmstat命令选项解析
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;
st:被虚拟机(virtual machine)所盗用的CPU(2.6.11 以后才支持)
18.Linux的任务管理
前台:可以控制与执行命令的bash环境称为前台进程
后台:在操作系统中自行运行,你无法使用ctrl键+c终止,可以使用bg/fg命令操作的任务;可以通过jobs命令查看后台执行的任务(非系统进程)
-可以通过ctrl键+z将前台执行的任务放置到后台
在当前bash执行多个任务
比如:cp file1 file2 &
重点在以上的这个“&”符号,他表示将file1这个文件复制为file2,同时将这个拷贝进程放到后台执行。
也就是说执行这一个命令之后,在这一个终端仍然可以做其他的工作。拷贝任务执行完成后,系统将会在终端显示完成的消息。
举例来说,我们在登录bash后,想要一边复制文件、一边进行编译。那么就需要任务管理 。
注意:Ctrl+z和&的区别
Ctrl+z将前台程序放置到后台——状态为暂停。
在执行的命令后面追加"&"——状态为后台运行。
jobs 该命令用来查看当前工作状态,还可以使用相关参数
-l :除了列出 job number与指令串之外,同时列出PID 的号码;
-r :仅列出正在后台 run 的任务;
-s :仅列出正在后台暂停 (stop) 的任务。
19.Vim命令介绍
vim是一个类似vi的文本编辑器,不过在vi的基础上增加了很多新特性,vim被公认为类vi编辑器中最好用的一个。
vim是vi发展出来的一个文本编辑器。编译及错误跳转等方便编程的功能丰富,在实际工作中被广泛使用。
和Emacs并列称为类Unix系统用户最喜爱的编辑器。
为什么要使用Vim呢?
所有的Linux系统都会内建vi文本编辑器,其他的文本编辑器则不一定存在。
很多软件的编辑接口都会主动调用vi,例如visudo、crontab等
vim可视为vi的高级版本。
vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序开发。
20.vim的三种模式
(1) 一般模式
以vim打开一个文件就直接进入一般模式(默认模式)
可以使用上下左右移动光标来移动,也可以使用删除字符或删除整行来处理文件内容, 也可以使用复制、粘贴来处理文件数据。但无法任意编辑文件内容。比如说:我想写一 个123。
(2) 编辑模式
在一般模式中可以删除、复制、粘贴等,按下i、I、o、O、a、A、r(快速替换)、R等 任何一个字母后进入编辑模式。并在左下方出现INSERT或REPLACE。
该模式下可以输入文件内容。
按下<Esc>返回一般模式。
(3) 命令模式
在一般模式当中,输入:/?三个字符中的任何一个按钮,就可以将光标移动到最下面那 一行。
在这个模式当中,可以提供查询、替换等功能。同时存盘(保存)、离开vi、显示行号 等等命令都是在此模式进行。
vim快捷键的使用:
(1) 一般模式快捷键的使用
h或 光标左移一个字符。如果是20h,表示左移20个字符。
j或 光标下移一个字符 同上
k或 光标上移一个字符 同上
l或 光标右移一个字符 同上
[Ctrl]+[f]屏幕向下移动一页 Page Down
[Ctrl]+[b]屏幕向上移动一页 Page Up
0或[Home]移动到此行最前面字符处
$或[End]移到光标所在行的行尾
H 光标移到当前屏幕最上方行的第一个字符
M光标移到当前屏幕中间行的第一个字符
L光标移动到当前屏幕最下方行第一个字符
G移到此文件最后一行
nG移到第n行
gg相当于1G,即移到第一行
n[Enter]光标下移n行
/word向下查找单词“word”
?word向上查找单词“word”
n表示重复前一个查找操作
N与n相反(反向查找)
: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同上,在替换前确认是否替换。只能单行确认,需要逐步确认。
x向后删除一个字符
nx向后删除n个字符(n为数字)
X向前删除一个字符
dd删除光标所在行
ndd删除光标所在行以下n行(n为数字,包含当前行在内)
d1G删除光标所在行到第一行所有数据(包括所在的行)
dG删除光标所在行到最后一行
d$或d end删除光标所在处到同行最后一个字符
d0或d home删除光标所在处到同行第一个字符。
yy复制光标所在行
nyy复制光标所在向下n行(n为数字)
y1G复制光标所在行到第一行所有数据
yG复制光标所在行到最后一行所有数据
y$复制光标所在处到同行最后一个字符
y0复制光标所在处到同行第一个字符
p将已复制的数据粘贴到光标所在下一行
P将已复制的数据粘贴到光标所在上一行
u复原前一个操作(类似于windows中的ctrl+z)
(2).编辑模式快捷键
一般模式->编辑模式的转换
i从光标所在处插入
I从所在行第一个非空白字符处插入
a从光标所在下一个字符处插入
A从光标所在行最后一个字符处插入
o在光标所在处下一行插入新的一行
O在光标所在处上一行插入新的一行
r替换光标所在处字符一次
R一直替换光标所在处文字直到按下Esc
(3).命令模式快捷键
:w [filename]另存为filename
:r [filename] 读取filename指定文件中的内容到光标所在的行。
:n1,n2 w [filename] 将n1到n2行另存为filename
:! command 临时切换到命令行模式下执行command命令。
例如 “:!find / -name Helllo.java”即可在vim当中查看/home下面以ls输出的文件信息。
:wq 保存后离开
:q 不保存离开(未改可以离开,如果修改了需要q!强制离开)
:q! 不保存离开
:set nu 显示行号
:set nonu 取消显示行号