系统相关
free:显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
free [-bkmhotV][-s <间隔秒数>]
1.
total 列显⽰系统总的可⽤物理内存和交换空间⼤⼩。
used 列显⽰已经被使⽤的物理内存和交换空间。
free 列显⽰还有多少物理内存和交换空间可⽤使⽤。
shared 列显⽰被共享使⽤的物理内存⼤⼩(进程间的共享内存)。
buff/cache 列显⽰被磁盘缓存使⽤的物理内存⼤⼩(buffer 表⽰写缓冲 cache 表⽰读缓冲)。
available 列显⽰还可以被应⽤程序使⽤的物理内存⼤⼩。
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位如下:
B = bytes
K = kilos
M = megas
G = gigas
T = teras
-t 显示内存总和列。
-V 显示版本信息。
-o 不显示缓冲区调节列。
-s<间隔秒数>持续观察内存使用状况。
附:
1.当应⽤程序需要内存时,如果没有⾜够的 free 内存可以⽤,内核就会从 buffer 和 cache 中回收内存来满⾜应⽤程序的请求。所以从应⽤程序的⻆度来说,available = free + buffer + cache。请注意,这只是⼀个很理想的计算⽅式,实际中的数据往往有较⼤的误差。
2.swap space 是磁盘上的⼀块区域,可以是⼀个分区,也可以是⼀个⽂件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,⽽当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换⼊。交换空间可以在⼀定程度上缓解内存不⾜的情况, 但是它需要读写磁盘数据,所以性能不是很⾼。
top:可以动态的查看系统当前正在运行的进程情况、内存情况、CPU 使用情况,被广泛用于监视服务器的负载。
输出内容:
1.
Tasks:显示进程的情况,总共有多少个进程、有多少个进程正在处理(running)、有多少个进程处于 sleeping 状态、有多少个进程处于 stopped 状态、有多少个进程处于 zombie 状态。
%Cpu(s):当前的 CPU 状态。
KiB Mem/KiB Swap:当前的内存状态。
之后的内容:
PID:进程的唯⼀标识符
USER:进程所有者的实际⽤⼾名
PR:进程的调度优先级。这个字段的⼀些值是 'rt'。这意味这这些进程运⾏在实时态。
NI:进程的 nice 值(优先级)。越⼩的值意味着越⾼的优先级。
VIRT:进程使⽤的虚拟内存
RES:驻留内存⼤⼩。驻留内存是任务使⽤的⾮交换物理内存⼤⼩。
SHR:SHR 是进程使⽤的共享内存。
S:进程的状态。D-不可中断的睡眠态、R-运行态、S-睡眠态、T-被跟踪或已停止、Z-僵尸态、I-空闲状态。
%CPU:自从上一次更新到现在进程所使用的 CPU 时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部 CPU 时间,精确到百分之一。
COMMAND:运行进程所使用的命令。
其他:还有许多在默认情况下不会显⽰的输出,它们可以显⽰进程的⻚错误、有效组和组ID和其他更多的信息。
2.top 是一个交互式的命令,可以在界面上继续用键盘输入指令执行对应的操作。
回⻋/空格:top 命令默认在⼀个特定间隔(3秒)后刷新显⽰。要⼿动刷新,⽤⼾可以输⼊回⻋或者空格。
d/s:当按下 'd' 或 's' 时,你将被提⽰输⼊⼀个值(以秒为单位),它会以设置的值作为刷新间隔。如果你这⾥ 输⼊了 1,top 将会每秒刷新。
k:用于发送信号给进程(通常是结束进程)。
R:切换反向/常规排序。
V:切换成树视图。
e:切换显示的单位,依次以 k、m、g、t、p。
B:⼀些重要信息会以加粗字体显⽰,可以切换粗体显示。
uname:输出一组系统信息。如果不跟随选项,则视为只附加-s 选项。
uname [选项]
-a:以如下次序输出所有信息。其中若 -p 和 -i 的探测结果不可知则被省略
-s:输出内核名称
-n:输出网络节点上的主机名
-r:输出内核发行号
-v:输出内核版本
-m:输出主机的硬件架构名称
-p:输出处理器类型或"unknown"
-i:输出硬件平台或"unknown"
-o:输出操作系统名称
--help:显示此帮助信息并退出
--version:显示版本信息并退出
进程相关
ps:用于报告当前系统的进程状态。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。但是这种只会显示输入这个命令时那一刻系统中进程的状态。
ps 命令支持三种使用的语法格式:1.UNIX 风格,选项可以组合在一起,选项前必须有“-”连字符;2.BSD 风格,选项可以组合在一起,选项前不能有“-”连字符;3.GNU 风格的长选项,选项前有两个“-”连字符。这几种风格可以混用,但是可能会发生冲突。
输出内容:
USER:运行该过程的用户
PID:进程的 ID
PPID:父进程的 ID
%CPU:进程 cpu 利用率
%MEM:进程驻留集大小占计算机物理内存的百分比
VSZ:进程的虚拟内存大小 KiB
RSS:进程正在使用的物理内存的大
PRI:这个是 Priority (优先执行序) 的缩写
NI:这个是 Nice 值
ADDR:这个是 kernel function,指出该程序在内存的哪个部分。如果是个
running的程序,一般就是 "-"
TTY:登入者的终端机位置
TIME:使用掉的 CPU 时间
CMD:所下达的指令为何,假如是 [] 括起来的,那么是内核线程
STAT:代表这个进程的状态。D-不可中断;R-运行;S-中断;T-停止;Z-僵死。可能
还会有以下这些后缀,<-优先级高的进程;N-优先级较低的进程;L-有些页被
锁进内存;s-进程的领导者(在它之下有子进程);l-多进程的(使用
CLONE_THREAD,类似 NPTL pthreads);+-位于后台的进程组。
ps 没有属性参数的时候,显示的是同一终端下 terminal 所有的进程
T:显示同一终端下 terminal 下的所有进程,但是输出信息更丰富点
a:显示现行所有终端下的所有程序,包括其他用户的程序
-A:显示所有用户的所有进程,包括没有控制终端的进程,结果按照进程 id 排序
-e:等于 -A
-a:显示所有用户进程,不包括没有控制终端的进程
-u:显示本用户下所有进程,不包括没有控制终端的进程
-u [用户名]:显示指定用户名下的所有进程,
x:通常与 a 这个参数一起使用,可列出完整信息
-l:较长、较详细的将该 PID 的信息列出
j:工作的格式
-f:有一个更为完整的输出
# 查阅只与 bash 相关的程序
ps -l
# 列出目前系统所有的进程数据
ps aux
# 同 aux,列出目前系统所有的进程数据
ps -elf
pstree:清晰明了的用树形图显示所有进程的层次关系。
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-n:用程序识别码排序。预设是以程序名称来排序;
-p:显示程序识别码,后面还可以跟 PID,只查看指定 PID 的情况;
-u:显示用户名称;
# 只查看 PID 为 1145 的进程的层次关系
pstree -p 1145
kill:发送信号到指定进程
kill [-l|信号参数] [信号名称|编号|进程PID]
-l:后面加信号名称(可以只取 SIG 之后的名称)则显示该信号对应的编号。后面加编号,则显示对应的信号名称。啥都不加则显示全部
-信号参数:后头跟进程 PID。信号参数表示你要给指定进程发送的信号,可以使用名称,如 -SIGKILL(-KILL),也可以使用 -9。可以不指定信号参数,那么默认发送的是编号为 15 的 SIGTERM 信号。
1.用 kill 向进程发送信号时,必须是这些进程的主人。如果试图给一个没有权限或者不存在的进程发送信号,就会得到一个错误信息。
2.只有编号为 9 的信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。
3.init 进程不可杀死
4.常用的信号
SIGHUP 1 终端断线
SIGINT 2 中断(同 Ctrl + C)
SIGQUIT 3 退出(同 Ctrl + \)
SIGKILL 9 强制终止
SIGTERM 15 终止
SIGCONT 18 继续(与STOP相反, fg/bg命令)
SIGSTOP 19 暂停(同 Ctrl + Z)
# 查看编号为 9 的信号名称
kill -l 9
# 查看信号名为 SIGKILL 的编号
kill -l SIGKILL
# 向 PID 为 31801 的进程发送 SIGTERM 信号
kill 31801
# 向 PID 为 31801 的进程发送 SIGKILL 信号
kill -9 31801
磁盘相关
du:显示指定的目录或文件所占用的磁盘空间。
du [-abch] [路径|文件]
-a:显示指定目录下所有单独的文件大小,后面不加文件或者目录路径则表示本目录
-b:比 byte 为单位显示
-c:显示单独的目录或者文件的大小,同时也显示所有目录或文件的总和情况
-h:以K,M,G为单位显示,提高信息的可读性(方便人的阅读)
# 不加参数则显示当前目录下所有的子目录大小,下面显示的都是目录
$ du
4 ./load/test
904 ./load
32 ./staticlink
8 ./dynamic
12 ./stack
60 ./sotest
24 ./elf
924 ./compile
1972 .
df:显⽰⽬前在 Linux 系统上的⽂件系统的磁盘使⽤情况统计
df [-hTtx]
不加参数:显⽰整个磁盘空间中⽂件系统的使⽤情况
-h:以⼈类友好格式显⽰⽂件系统硬盘空间使⽤情况,这样就会在显⽰合适的单位,⽐如 K M G
-T:显⽰⽂件系统类型
-t:后头跟文件系统名,仅列出指定的⽂件系统,如 -t ext4 则列出 ext4 系统的⽂件系统
-x:后头跟文件系统名,表示除指定之外的文件系统都列出来,比如 —x ext4 则列出了除 ext4 类型以外的全部⽂件系统
df (不加参数)显示的内容:
Filesystem:Linux 系统中的⽂件系统(不是文件系统类型)
1K-blocks:⽂件系统的⼤⼩,以 1K ⼤⼩为单位,表示有多少 1K 的块
Used:以 1K ⼤⼩为单位,表⽰已使⽤的块数量
Available:以 1K ⼤⼩为单位,表⽰可⽤的块数量
Use%:⽂件系统中已使⽤的百分⽐
Mounted on:已挂载⽂件系统的挂载点
网络相关
netstat:显⽰⽹络状态
netstat [参数]
-a:显⽰所有 socket
-l:显⽰所有处于监听状态的 socket
-t:显⽰所有使⽤ tcp 协议的 socket
-u:显⽰ UDP 传输协议的连线状况
-x:显示所有监听 UNIX 端口的连线状况
-s:显⽰所有⽹络协议的统计信息
# 显示所有 tcp 端口
netstat -at
# 显示所有处于监听状态的 tcp 端口
netstat -lt
ifconfig:用于显示或设置网络设备
ifconfig [网络设备][down up][add<地址>][del<地址>][hw<网络设备类型><硬件地址>][mtu<字节>][IP地址][netmask<子网掩码>][broadcast<广播地址>]
down:关闭指定的网络设备
up:启动指定的网络设备
add<地址>:设置网络设备 IPv6 的 IP 地址
del<地址>:删除网络设备 IPv6 的 IP 地址
hw<网络设备类型><硬件地址>:设置网络设备的类型与硬件MAC地址
mtu<字节>:设置网络设备的MTU。
netmask<子网掩码>:设置网络设备的子网掩码。
[IP地址]:指定网络设备的IP地址
# 启动/关闭 eth0 网卡
ifconfig eth0 down
ifconfig eth0 up
# 为网卡 eth0 添加 IPV6 地址
ifconfig eth0 add 33ffe:3240:800:1005::2/ 64
# 修改 eth0 的 MAC 地址
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
# 给 eth0 配置 IP 地址
ifconfig eth0 192.168.1.56
# 给 eth0 网卡配置 IP 地址,并加上子掩码
ifconfig eth0 192.168.1.56 netmask 255.255.255.0
# 给 eth0 网卡配置 IP 地址,加上子掩码,加上个广播地址
ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
# 设置能通过的最大数据包大小为 1500 bytes
ifconfig eth0 mtu 1500
# 启动和关闭 eth0 的 ARP 协议
ifconfig eth0 arp # 打开
ifconfig eth0 -arp # 关闭
安装相关
rpm命令:
rpm -ivh filename # filename为完整的rpm软件包的文件名
rpm -q packagename # packagename为linux系统已经安装的软件包名称,不包括版本号
rpm -qa #查看当前Llinux系统已经安装的rpm格式的软件包的列表
rpm -qa | grep -I libjpeg #命令后面跟grep可以查询是否安装了包含特有字符串的软件包名称,-i表示忽略大小写
rpm -qi packagename #查询软件包的详细信息,显示结果包括该软件的名称,版本,编译时间,安装时间,以及该tree软件简要的功能描述等等
rpm -ql packagename #查询某个已经安装的rpm软件包向Linux文件系统安装复制的文件列表信息
rpm -qf filename #查询文件系统中的某个文件属于哪个rpm软件包
rpm -e packname #卸载rpm包
rpm -Uvh filename #升级rpm包
yum命令:
yum install packagename #安装软件包
yum erase/remove packagename #卸载软件包
yum grouplist #列出可使用的软件组列表
yum groupinfo 软件组名 #列出指定软件组的信息软件信息
yum groupinstall 软件组名 #安装指定的软件组
yum groupmove 软件组名 #卸载指定的软件组
tatball源代码软件包的安装步骤:
step1:根据LinuxFHS,用户自己安装的软件包建议保存在/usr/local目录。取得tarball包之后,建议把tarball包保存在/usr/local/src目录
step2:切换都/usr/local/src目录,使用tar命令进行解压。
step3:切换到解压后的源代码目录(通常为/usr/local/src/“软件名+版本号”)
step4:执行检测配置脚本configure
step5:执行make命令,这一步的make命令编译软件,生成该软件的二进制可执行程序及其函数库。假如出现错误,那么执行make clean命令清除前一次编译的目标文件
step6:执行make install安装软件
src.rpm源码软件包的安装步骤:
step1:src.rpm包的安装需要建立一个专门的用户账号,以及用户组账号
step2:把src.rpm包复制到Linux的/root目录,执行rpm 安装
step3:进入到/root/rpmbuild/SPECS目录,执行rpmbuild -ba 软件名.spec。最后在
/root/rpmbuild/RPMS/i686(i686只是一个例子)找到编译生成的rpm软件包。