[TOC]
0x00 前言简述
描述: 本章主要针对于Linux操作系统中利用以下命令对各个硬件资源信息查看与管理;
主要设备&对应文件:
- 1.CPU: /proc/cpuinfo
- 2.Memery: /proc/meminfo
- 3.Net: /proc/net
0x01 proc 工具 - Linux 内存文件系统
1.CPU
/proc/cpuinfo 文件信息:
代码语言:javascript复制processor : 0 #核数
vendor_id : GenuineIntel #供应商
cpu family : 6 #CPU代数
model : 60
model name : Intel(R) Xeon(R) CPU E3-1271 v3 @ 3.60GHz
stepping : 3
microcode : 0x1c
cpu MHz : 3591.683
cache size : 8192 KB
physical id : 0 #查看 CPU 个数
siblings : 1 #逻辑核数
core id : 0
cpu cores : 1 #物理核数
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm epb fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt dtherm ida arat pln pts
bogomips : 7183.36
clflush size : 64
cache_alignment : 64
address sizes : 42 bits physical, 48 bits virtual
power management:
2.Memery
/proc/meminfo 文件内容:
代码语言:javascript复制MemTotal: 3879924 kB
MemFree: 2085680 kB
MemAvailable: 3015780 kB
Buffers: 2092 kB #表示块设备(block device)所占用的缓存页
#包括:直接读写块设备、以及文件系统元数据(metadata)比如SuperBlock所使用的缓存页;
Cached: 929988 kB #表示普通文件数据所占用的缓存页
SwapCached: 0 kB
Active: 902460 kB
Inactive: 413056 kB
Active(anon): 418064 kB
Inactive(anon): 40408 kB
Active(file): 484396 kB
Inactive(file): 372648 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 383472 kB
Mapped: 36184 kB
Shmem: 75036 kB
Slab: 387804 kB
SReclaimable: 362280 kB
SUnreclaim: 25524 kB
KernelStack: 2480 kB
PageTables: 19176 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1939960 kB
Committed_AS: 936900 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 13896 kB
VmallocChunk: 34359720444 kB
HardwareCorrupted: 0 kB
AnonHugePages: 243712 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 96112 kB
DirectMap2M: 4098048 kB
DirectMap1G: 2097152 kB
3.Net
/proc/net 目录信息:
代码语言:javascript复制anycast6
arp
connector
dev
dev_mcast
dev_snmp6 # 文件夹
fib_trie
fib_triestat
icmp
if_inet6
igmp
igmp6
ip6_flowlabel
ip6_mr_cache
ip6_mr_vif
ip_mr_cache
ip_mr_vif
ip_tables_matches
ip_tables_names
ip_tables_targets
ipv6_route
mcfilter
mcfilter6
netfilter # 文件夹
netlink
netstat
packet
protocols
psched
ptype
raw
raw6
route
rt6_stats
rt_acct
rt_cache
snmp
snmp6
sockstat
sockstat6
softnet_stat
stat #文件夹
tcp
tcp6
udp
udp6
udplite
udplite6
unix
wireless
xfrm_stat
arp 相关 - 显示查看系统 arp 缓存的映射表
/proc/net/arp 文件内容:
代码语言:javascript复制$cat /proc/net/arp
IP address HW type Flags HW address Mask Device
172.31.0.18 0x1 0x2 fa:16:3e:21:ca:aa * eth0
172.31.0.10 0x1 0x2 fa:16:3e:d3:ff:69 * eth0
172.31.0.5 0x1 0x2 fa:16:3e:f5:58:98 * eth0
172.31.0.3 0x1 0x2 fa:16:3e:df:28:28 * eth0
172.31.0.1 0x1 0x2 fa:16:3e:04:62:da * eth0
172.31.0.6 0x1 0x2 fa:16:3e:d5:1f:24 * eth0
172.31.0.4 0x1 0x2 fa:16:3e:d8:48:ca * eth0
172.31.0.2 0x1 0x2 fa:16:3e:ff:d7:b4 * eth0
route 相关 - 出系统的路由表信息
/proc/net/fib_trie 文件内容:
代码语言:javascript复制cat /proc/net/fib_trie # 以树级结构列出系统的路由表信息
# Main:
# -- 0.0.0.0/0 3 0 5
# |-- 0.0.0.0
# /0 universe UNICAST
# -- 127.0.0.0/8 2 0 2
# -- 127.0.0.0/31 1 0 0
# |-- 127.0.0.0
# /32 link BROADCAST
# /8 host LOCAL
# |-- 127.0.0.1
# /32 host LOCAL
# |-- 127.255.255.255
# /32 link BROADCAST
# -- 168.0.0.0/5 2 0 2
# -- 169.254.0.0/16 2 0 2
# |-- 169.254.0.0
# /16 link UNICAST
# |-- 169.254.169.254
# /32 universe UNICAST
# -- 172.31.0.0/24 2 0 2
# -- 172.31.0.0/27 2 0 2
# |-- 172.31.0.0
# /32 link BROADCAST
# /24 link UNICAST
# |-- 172.31.0.25
# /32 host LOCAL
# |-- 172.31.0.255
# /32 link BROADCAST
iptables 相关
/proc/net/nf_conntrack
文件:在老版本的 Linux 内核中叫 ip_conntrack
他是一个内核模块,用于跟踪一个连接的状态的。连接状态跟踪可以供其他模块使用最常见的两个使用场景是 iptables 的 nat 的 state 模块
iptables 的 nat 通过规则来修改目的/源地址,但光修改地址不行我们还需要能让回来的包能路由到最初的来源主机,此时就需要借助 nf_conntrack 来找到原来那个连接的记录
才行;而 state 模块则是直接使用 nf_conntrack 里记录的连接的状态来匹配用户定义的相关规则;
# 例如:下面这条 INPUT 规则用于放行 80 端口上的状态为 NEW 的连接上的包(CentOS7.x以下)。
$ cat /proc/net/nf_conntrack | head -n 4
ipv4 2 tcp 6 102 SYN_SENT src=10.20.172.211 dst=10.10.107.214 sport=42562 dport=179 [UNREPLIED] src=10.10.107.214 dst=10.20.172.211 sport=179 dport=42562 mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 tcp 6 79 SYN_SENT src=10.20.172.211 dst=10.10.107.214 sport=60579 dport=179 [UNREPLIED] src=10.10.107.214 dst=10.20.172.211 sport=179 dport=60579 mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 tcp 6 86366 ESTABLISHED src=10.20.172.211 dst=10.10.107.121 sport=58589 dport=179 src=10.10.107.121 dst=10.20.172.211 sport=179 dport=58589 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 tcp 6 62 SYN_SENT src=10.20.172.211 dst=10.10.107.214 sport=37531 dport=179 [UNREPLIED] src=10.10.107.214 dst=10.20.172.211 sport=179 dport=37531 mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2