Linux基础命令2
1.top命令
top
可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理
第一行:
top - 15:13:33 up 4 min, 1 user, load average: 0.12, 0.17, 0.08
内容 | 含义 |
---|---|
15:13:33 | 表示当前时间 |
up 4min | 系统运行时间 格式为时:分 |
1 user | 当前登录用户数 |
load average:0.00,0.00,0.00 | 系统负载,即任务队列的平均长度。三个数值分别是 1分钟,5分钟,15分钟前到现在的平均值 |
第二行:
任务:299 total, 1 running, 298 sleeping, 0 stopped, 0 zombie
第三行:
%Cpu(s): 0.3 us, 0.8 sy, 0.0 ni, 98.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
二三行为进程和CPU的信息,当有多个CPU时,这些内容可能会超过两行,其参数如下:
内容 | 含义 |
---|---|
299 total | 进程总数 |
1 running | 正在运行的进程数 |
298 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
0.3 us | 用户空间占用CPU百分比 |
0.8 sy | 内核空间占用CPU百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
98.9 id | 空闲 CPU百分比 |
0.0 wa | 等待输入输出的CPU时间百分比 |
0.0 hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.0 si | 软中断(Software Interrupts)占用CPU的百分比 |
第四行:
MiB Mem : 3888.4 total, 2367.7 free, 1170.4 used, 581.4 buff/cache
第五行:
MiB Swap: 975.0 total, 975.0 free, 0.0 used, 2718.0 avail Mem
这两行代表内存信息,参数如下:
内容 | 含义 |
---|---|
KiB Mem:3888.4 total | 物理内存总量 |
2367.7 free | 空闲内存总量 |
1170.4 used | 使用的物理内存总量 |
581.4 buff/cache | 用作内核缓存的内存量 |
MiB Swap: 975.0 total | 交互区总量 |
975.0 free | 空闲交互区总量 |
0.0 used | 使用的交互区总量 |
2718.0 avail Mem | 代表可用于进程下一次分配的物理内存数量 |
第六行:
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
第六行为进程信息:
内容 | 含义 |
---|---|
PID | 进程id |
USER | 进程所有者的用户名 |
PR | 优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态。D=不可中断的睡眠状态;R=运行;S=睡眠;T=跟踪/停止;Z=僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 命令名/命令行 |
2.w命令
w
命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可以指定用户名称,仅显示某位用户的相关信息。
w
3.last命令
last
命令用于显示用户最近登录信息。单独执行last命令,它会读取 /var/log/wtmp
的文件,并把该文件的内容记录的登入系统的用户名单全部显示出来。
用法:
last [选项]
4.ps命令
ps
命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束。
用法:
ps [选项]
参数:
-A:显示所有进程(同-e)
-a:显示当前终端的所有进程
-u:显示进程的用户信息
-o:以用户自定义形式显示进程信息
-f:显示程序间的关系
-x:显示所有程序,不以终端按及来区分
-aux:显示所有包含其他使用者的行程
内容 | 含义 |
---|---|
USER | 执行拥有者 |
PID | 进程ID |
%CPU | CPU使用率 |
%MEM | 内存使用率 |
VSZ | 进程使用的虚拟内存大小,以k为单位 |
RSS | 驻留空间的大小。显示当前常驻内存的程序的k字节数 |
TTY | 终端的号码 |
STAT | 进程状态 |
START | 进程开始时间 |
TIME | 执行时间 |
COMMAND | 所执行的进程名称 |
STAT进程包括下面的状态:
D:不可中断 Uninterruptible sleep(usually IO)
R:正在运行,或在队列中的进程
S:处于休眠状态T停止或被追踪
Z:僵尸进程
W:进入内存交换(从内核2.6开始无效)
X:死掉的进程
<:高优先级
N:低优先级L有些页被锁进内存
s:包含子进程
+:位于后台的进程组
l:多线程,克隆线程
5.netstat命令
netstat
命令用来打印Linux中网络系统的相关状态信息,可以让你得知整个Linux系统的网络情况。
用法:
netstat [选项]
参数:
-a或--all:显示所有连接中的Socket
-l或--listening:显示监控中的服务器的Socket
-n或--numeric:直接使用ip地址,而不通过域名服务器
-t或--tcp:显示TCP传输协议的连线状况
-p或--programs:显示正在使用Socket的程序识别码和程序名称
比如:
netstat -an
netstat -anltp
Proto | Recv-Q | Send-Q | Local Address | Foreign Address | State | PID/Program name |
---|---|---|---|---|---|---|
协议 | 网络接收队列 | 网络发送队列 | 本地地址 | 外部地址 | 端口状态 | 进程ID/程序名 |
协议:主要有tcp协议于udp协议,网络协议是通信计算机双方必须共同遵守的一组约定
Recv-Q:表示网络接收队列,表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走。如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击
Send-Q:表示网络发送队列,对方没有受到的数据或者说没有Ack的,还是本地缓冲区。如果发送队列Send-Q不能很快清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
本地地址与外部地址,分别以本地ip+端口,外部ip+端口的形式表达
端口(port),是一个很重要的东西,它是设备与外界通讯的窗口,一个IP可以有65535(2^16)个端口,在计算机上,每个服务都会启用一个端口。
state(当前端口状态)有以下几种状态:
端口状态 | 意义 |
---|---|
LISTEN | 侦听来自远方的TCP端口的连接请求 |
SYN-SENT | 在发送连接请求后等待匹配的连接请求 |
SYN-RECEIVED | 在收到和发送一个连接请求后等待对方连接请求的确认 |
ESTABLISHED | 代表一个打开的连接 |
FIN-WAIT-1 | 等待远程TCP连接中断请求,或先前的连接中断请求的确认 |
FIN-WAIT-2 | 从远程TCP等待连接中断请求 |
CLOSE-WAIT | 等待从本地用户发来的连接中断请求 |
CLOSING | 等待远程TCP对连接中断的确认 |
LAST-ACK | 等待原来的发向远程TCP的连接中断请求的确认 |
TIME-WAIT | 等待足够的时间以确保远程TCP接收到连接中断请求的确认 |
CLOSED | 没有任何连接状态 |
6.lsof命令
lsof
命令用于查看你打开文件的进程,进程打开的文件,进程打开的端口(tcp、udp)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
在Linux环境下,任何事务都以文件形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议(TCP),用户数据报协议(UDP)套接字等,系统在后台都会为该应用程序分配一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通信接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过slof工具能够查看这个列表对系统监测以及排错是很有帮助的。
6.1lsof命令使用
如果输入 lsof
命令提示:未找到命令。那么我们需要进行安装。安装命令为 yum -y install lsof
我的是已经安装好的,直接执行lsof命令。
内容 | 含义 |
---|---|
COMMAND | 进程的名称 |
PID TID TASKCMD | 进程ID |
USER | 进程所有用户 |
FD | 文件描述符,应用程序通过文件描述符识别该文件 |
TYPE | 文件类型 |
DEVICE | 指定磁盘的名称 |
SIZE/OFF | 文件的大小 |
NODE | 索引节点(文件在磁盘上的标识) |
常用命令如下:
lsof text.txt #查看哪些进程打开了text.txt文件
lsof -c sshd #查看sshd服务所打开的文件
lsof -i :xx #查看xx端口有哪些进程在访问
lsof -p xxxx #查看xxxx进程号所打开的文件
lsof -u 0 #查看uid为0的用户打开的文件
lsof|grep /var/log/ #查看/var/log/下的文件被哪些进程打开
6.2利用lsof命令恢复已删除的文件
需要恢复已删除的文件前提条件是还有进程打开这个文件,比如遭受到黑客入侵往往总是会删除一些日志、木马文件等,假设我们ssh的登录日志被删除了,我们使用 lsof
查看,可以看到最后面有(deleted)这个状态。
lsof|grep /var/log/messages这里pid对应的是861,所以我们需要查看861进程打开的文件描述
cd /proc/861/fd
cp 5 /var/log/messages #拷贝这个文件
这样就可以达到文件恢复的效果了
7.kill命令
kill
命令用于结束进程
用法:
kill [选项] pid
kill -9 xxxx #彻底杀死进程号为xxxx的进程
8.which命令
which用于查找并显示给定命令的绝对路径,可以看到某个系统命令是否存在
用法:
which [命令]
比如:
which cd
9.rpm -Va 检查文件完整性
这个命令只在CentOS上才有,由于Linux里都是文件的特性,这就可能导致某命令被黑客替换修改,假设我们的Linux系统有命令被黑客攻击并替换,我们应该如果处理
当我们发现命令不可用或感觉到不对劲时,我们可以查找被修改的命令:
rpm -Va
而后将命令文件重新替换就好了
rpm -V用来检查已安装rpm包的完整性。就是指安装rpm包产生的所有文件和原始rpm包中的信息是否一致。如果完全一致,则不做任何输出,只有发现有不正确的文件时才会输出。
10.xargs命令
xargs
是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs
能够处理管道或者 stdin
并将其转换成特定命令的命令参数。xargs
也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs
的默认命令是 echo
,空格是默认定界符。这意味着通过管道传递给 xargs
的输入将会包含换行和空白,不过通过 xargs
的处理,换行和空白将被空格取代。eargs
是构建单行命令的重要组件之一。
简单点说,就是可以通过 xargs
完成对多个命令的拼接,可以让Linux指令变得很灵活
讲一个简单的例子,将文本内容排序输出,每行三个字段:
也可以完成多个文件的连续输出:
在实际应用中场景会更复杂,比如查看大量的ip位于国内还是国外,或者说一些更复杂的场景,通过写shell脚本,再用 xargs
连接多个命令,可以快速处理大量的数据,因此提高我们的工作效率。