Linux 常用命令中, 有些命令可以用于查看系统的状态, 通过了解系统当前的状态, 能够帮助我们更好地维护系统或定位问题. 本文就简单介绍一下这些命令.
前言
Linux 常用命令中, 有些命令可以用于查看系统的状态, 通过了解系统当前的状态, 能够帮助我们更好地维护系统或定位问题. 本文就简单介绍一下这些命令.
查看系统运行时间 --uptime
有时候我们想知道系统上一次复位是在什么时候或者系统已经运行了多长时间, 我们可以通过 uptime 命令获取这些信息:
uptime20:47:06 up 50 min, 1 user, load average: 0.75, 0.84, 0.93
从左往右显示的信息依次为: 当前时间, 已运行时间, 用户登录数, 1 分钟, 5 分钟和 15 分钟内系统的平均负载.
查看系统已登录用户 --who
who -ahyb tty7 2018-09-30 19:57 (:0)
通过 who 命令可以查看到哪些用户通过哪个 ip 登录到了这台主机.
查看系统版本相关信息 --uname
例如:
uname -aLinux ubuntu16.04 4.15.0-34-generic #37~16.04.1-Ubuntu SMP Tue Aug 28 10:44:06 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
从结果可以看到操作系统版本 (ubuntu16.04),CPU 类型(x86_64) 等信息
查看当前环境变量 --export
环境变量影响着程序的运行, 因此有时候需要查看当前环境的环境变量:
export
查看目录和文件占用空间 --du
du 命令直接显示当前目录下每个目录及其文件占用空间. 结合 --max-depth 参数可以指定显示的目录层级.
例如, 如果只想显示当前目录下各个目录所占总空间, 可以使用:
- du -h --max-depth=1
- 19M ./python
- 9.0M ./Git
- 321M ./hexo
- 17M ./lua
- 28K ./VIM
- 1.4M ./shell
- 81M ./Redis
- 316M ./books
- 48M ./c
- 810M .
- du -sh #仅统计当前目录总大小
- 810M
其中 - h 表示以易读的单位显示大小, 即 M,--max-depth=1 表明目录层级. 通过命令结果, 我们可以看到当前目录下各个子目录占用空间大小, 以及总空间大小.
查看各挂载点空间 --df
例如:
df -h
文件系统 容量 已用 可用 已用 % 挂载点
- udev 3.9G 0 3.9G 0% /dev
- tmpfs 786M 9.5M 776M 2% /run
- /dev/sda10 24G 9.8G 13G 45% /
- tmpfs 3.9G 43M 3.8G 2% /dev/shm
- tmpfs 5.0M 4.0K 5.0M 1% /run/lock
- tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
- /dev/sda11 454M 274M 153M 65% /boot
- /dev/sda15 55G 5.2G 47G 10% /home
- /dev/sda1 256M 31M 226M 12% /boot/efi
- /dev/sda14 4.6G 9.9M 4.4G 1% /tmp
- tmpfs 786M 60K 786M 1% /run/user/1000
从结果中, 我们可以看到各个挂载点总空间以及可用空间. 当磁盘文件占用空间较大时, 可能导致系统运行缓慢, 因此, 可根据该结果进行相应的磁盘清理.
查看内存可用情况 --free
free 命令可用于显示系统中可用的物理内存, 交换区内存以及内核使用的 buffer:
- free -h
- total used free shared buff/cache available
- Mem: 7.7G 2.3G 2.6G 268M 2.8G 4.7G
- Swap: 7.6G 0B 7.6G
从执行结果可以看到已用内存和空闲内存的情况. 同样地, 当内存不足时, 可能导致程序运行异常或系统卡顿.
查看进程的内存使用情况 --pmap
pmap 命令用于查看进程内存相关信息:
- pmap pid #pid 为进程 id, 可通过 ps 命令获取
- 6030: ./main
- 0000000000400000 4K r-x-- main
- 0000000000600000 4K r---- main
- 0000000000601000 4K rw--- main
- 00000000017d2000 132K rw--- [ anon ]
- 00007fc3843e8000 1792K r-x-- libc-2.23.so
- 00007fc3845a8000 2048K ----- libc-2.23.so
- 00007fc3847a8000 16K r---- libc-2.23.so
- 00007fc3847ac000 8K rw--- libc-2.23.so
- 00007fc3847ae000 16K rw--- [ anon ]
- 00007fc3847b2000 152K r-x-- ld-2.23.so
- 00007fc3849b9000 12K rw--- [ anon ]
- 00007fc3849d7000 4K r---- ld-2.23.so
- 00007fc3849d8000 4K rw--- ld-2.23.so
- 00007fc3849d9000 4K rw--- [ anon ]
- 00007ffcf2018000 132K rw--- [ stack ]
- 00007ffcf2175000 12K r---- [ anon ]
- 00007ffcf2178000 8K r-x-- [ anon ]
- ffffffffff600000 4K r-x-- [ anon ]
- total 4356K
我们可以根据进程各部分占用空间情况, 来不断优化我们的程序.
查看虚拟内存统计信息 --vmstat
- vmstat
- procs -----------memory---------- ---swap-- -----io---- -system-- ------CPU-----
- r b swpd free buff cache si so bi bo in cs us sy id wa st
- 1 0 0 2214960 407828 2572148 0 0 126 57 377 1006 8 2 88 2 0
vmstat 的输出值能够帮助我们了解当前系统的性能. 比如说, 如果 si(每秒从交换区写到内存的大小)和 so(每秒写入交换区的内存大小)的值经常大于 0, 说明内存可能不够用, 因此才需要用到交换空间. 再比如说, us(用户进程执行时间百分比)的值比较高时, 说明用户进程消耗的 CPU 资源较多. 而 wa(IO 等待时间百分比)值较高时, 说明 IO 等待情况严重.
查看 ip 地址 --ip
有时候使用 ifconfig 命令并不一定能够看到所有的 ip 地址, 因此可以使用:
ip addr
查看网络连接状态 --netstat
netstat 命令可以查看网络连接状态, 通常用于诊断网络相关问题. 例如查看端口是否被占用, 连接是否已经释放, 服务是否在监听等等.
查看进程间关系 --pstree
通过 pstree 命令可以看到进程间的父子关系, 它以树形结构显示这些信息:
pstree
systemd─┬─ModemManager─┬─{gdbus}
│ └─{gmain}
├─NetworkManager─┬─dhclient
│ ├─dnsmasq
│ ├─{gdbus}
│ └─{gmain}
├─accounts-daemon─┬─{gdbus}
│ └─{gmain}
├─acpid
├─atd
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord─┬─{gdbus}
│ └─{gmain}
├─cron
├─cups-browsed─┬─{gdbus}
│ └─{gmain}
├─cupsd───3*[dbus]
├─dbus-daemon
├─gnome-keyring-d─┬─{gdbus}
│ ├─{gmain}
│ └─{timer}
(仅显示部分内容)
总结
实际上, 前面所提到的很多相关命令信息都是从系统文件中获取的, 例如 / proc/meminfo 保存了内存相关信息,/proc.NET/dev 保存网络流量相关信息. 只是, 它们都是静态数值, 但是我们可以结合 watch 命令来动态地观察这些信息, 例如:
- watch -n 1 cat /proc/meminfo
- watch -n 1 cat /proc.NET/dev
上面的命令表示, 每隔一秒执行一次 cat /proc/meminfo 或 cat /proc.NET/dev, 因此我们可以看到内存信息或网卡流量信息在实时刷新.
本文仅介绍这些命令的经典使用, 更多使用可通过 man 命令查看. 通过前面这些系统自带命令, 我们可以比较方便地监控系统状态, 从而帮助我们维护系统或定位问题. 欢迎留言补充或更正.
来源: http://os.51cto.com/art/201811/586514.htm