前言在Linux常用命令中,有一些命令可以用来查看系统的状态。了解系统的当前状态可以帮助我们更好地维护系统或定位问题。本文简要介绍这些命令。查看系统运行时间--uptime有时候我们想知道系统最后一次重启是什么时候,或者系统已经运行了多长时间。我们可以通过uptime命令获取这些信息:uptime20:47:06up50min,1user,loadaverage:0.75,0.84,0.93显示的信息从左到右分别是:当前时间,运行时间,用户登录数,服务器平均负载系统在1分钟、5分钟和15分钟内完成。查看系统登录用户--whowho-ahybtty72018-09-3019:57(:0)通过who命令可以查看哪些用户通过哪个ip登录了本主机。查看系统版本相关信息--uname例如:uname-aLinuxubuntu16.044.15.0-34-generic#37~16.04.1-UbuntuSMPTueAug2810:44:06UTC2018x86_64x86_64x86_64GNU/Linux从结果中可以看到操作系统版本(ubuntu16.04)、CPUType(x86_64)等信息查看当前环境变量--export环境变量影响程序的运行,所以有时候需要查看当前环境的环境变量:export查看占用的空间目录和文件——dudu命令直接显示当前目录下的各个文件目录及其文件占用空间。结合--max-depth参数,可以指定显示的目录层次结构。比如只想显示当前目录下各个目录占用的总空间,可以使用:du-h--max-depth=119M./python9.0M./git321M./hexo17M./lua28K。/vim1.4M./shell81M./redis316M./books48M./c810M.du-sh#只统计当前目录总大小810M其中-h表示以易读单位显示大小,即M,--max-depth=1表示目录级别。通过命令结果,我们可以看到当前目录下各个子目录占用的空间,以及总空间。查看每个挂载点的空间--df例子:df-h文件系统容量已用和可用%挂载点udev3.9G03.9G0%/devtmpfs786M9.5M776M2%/run/dev/sda1024G9.8G13G45%/tmpfs3.9G43M3.8G2%/dev/shmtmpfs5.0M4.0K5.0M1%/run/locktmpfs3.9G03.9G0%/sys/fs/cgroup/dev/sda11454M274M153M65%/boot/dev/sda1555G5.2G47G10%/home/dev/sda1256M31%226M/boot/efi/dev/sda144.6G9.9M4.4G1%/tmptmpfs786M60K786M1%/run/user/1000从结果中我们可以看到每个挂载点的总空间和可用空间。当磁盘文件占用较大空间时,可能会导致系统运行缓慢。因此,可以根据结果进行相应的磁盘清理。查看内存可用性--freefree命令可以用来显示系统中可用的物理内存,交换区内存和内核使用的缓冲区:free-htotalusedfreesharedbuff/cacheavailableMem:7.7G2.3G2.6G268M2.8G4.7GSwap:7.6G0B7.6G从执行结果可以看到已用内存和空闲内存的情况。同样,当内存不足时,也可能导致程序运行异常或系统卡死。查看进程内存使用情况--pmappmap命令用于查看进程内存的相关信息:pmappid#pid为进程id,可以通过ps命令6030:./main00000000004000004Kr-x--main00000000006000004Kr获取----main00000000006010004Krw---main00000000017d20000132K--[anon]00007fc3843e80001792Kr-x--libc-2.23.so00007fc3845a80002048K-----libc-2.23.so00007fc3847a800016Kr----libc-2.23.so00007fc3847ac0008Krw---libc-2.23.so00007fc3847ae00016Krw---[anon]00007fc3847b2000152Kr-x--ld-2.23.so00007fc3849b900012Krw---[anon]00007fc3849d70004Kr----ld-2.23.so00007fc3849d80004Krw---ld-2.23.so00007fc3849d90004Krw---[anon]00007ffcf2018000132Krw---[stack]00007ffcf217500012Kr----[anon]00007ffcf21780008Kr-x--[anon]ffffffffff6000004Kr-x--[anon]total4356K我们可以根据进程各部分占用的空间不断优化我们的程序。查看虚拟内存统计--vmstatvmstatprocs------------memory------------swap--------io-----system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast1002214960407828257214800126573771006828820vmstat的输出值可以帮助我们了解当前系统的性能。例如,如果si(每秒从swap区写入内存的大小)和so(每秒写入swap区的内存大小)的值经常大于0,则说明内存可能还不够,所以需要交换空间。再比如,当us(用户进程执行时间的百分比)的值比较高的时候,说明用户进程消耗的CPU资源比较多。当wa(IO等待时间百分比)的值很高时,说明IO等待情况严重。查看ip地址--ip有时使用ifconfig命令可能无法看到所有的ip地址,所以可以使用:ipaddr查看网络连接状态--netstatnetstat命令可以查看网络连接状态,即通常用于诊断与网络相关的问题。比如查看端口是否被占用,连接是否已经释放,服务是否在监听等等。查看进程间关系--pstree可以通过pstree命令查看进程间的父子关系,以树状结构显示这些信息:pstreesystemd─┬─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-n1cat/proc/meminfowatch-n1cat/proc/net/dev上面的命令表示cat每秒钟执行一次/proc/meminfo或cat/proc/net/dev,这样我们可以看到实时刷新的内存信息或网卡流量信息。本文只介绍这些命令的经典用法,更多用法可以通过man命令查看。通过这些系统的上述命令,我们可以更方便的监控系统状态,帮助我们维护系统或定位问题。欢迎留言补充或指正。作者介绍Watchman:一个文采不错,技术不错的开发者。将Linux/C/C++/算法/工具等原创技术文章和学习资源分享到我的个人公众号[编程珠玑],期待一起交流学习!
