https://www.cnblogs.com/codelogs/p/16060714.html

简介#

作为一名程序员,有时需要关注自己的进程运行在什么样的软硬件环境里,比如几核cpu、固态硬盘还是机械硬盘、内核版本多少、Centos还是Ubuntu?

查看硬件信息#

Linux里面提供了一系列命令用来查看系统硬件信息,如lscpu、lsblk、lshw等,如下:

查看cpu信息#

lscpu命令可以查看cpu信息,如下:

$ lscpu
Architecture: x86_64 #指令集架构,pc一般是x86_64,手机一般是arm64
CPU op-mode(s): 32-bit, 64-bit #支持32位、64位运行模式
Byte Order: Little Endian #小端字节序
Address sizes: 39 bits physical, 48 bits virtual # 39位物理地址,48位虚拟地址
CPU(s): 8 # 8个逻辑核
On-line CPU(s) list: 0-7 # 8核都在线
Thread(s) per core: 2 # 每个核两个硬件线程(Intel超线程技术)
Core(s) per socket: 4 # 每个cpu有4个核
Socket(s): 1 # 1个cpu
Vendor ID: GenuineIntel # intel的cpu
CPU family: 6 # cpu产品系列
Model: 142 # cpu产品型号
Model name: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz # cpu产品型号
Stepping: 10 # 此型号的每10代
CPU MHz: 1991.998 # cpu主频
BogoMIPS: 3983.99
Hypervisor vendor: Microsoft # 虚拟化厂商Microsoft,因为我是在WSL中执行的lscpu
Virtualization type: full # 虚拟化类型,full表示全虚拟化
L1d cache: 128 KiB # 一级数据缓存大小
L1i cache: 128 KiB # 一级指令缓存大小
L2 cache: 1 MiB # 二级缓存大小
L3 cache: 8 MiB # 三级缓存大小

可以看到,lscpu能查看cpu的各种详细信息,这里面需要重点理解的是逻辑核与物理核的概念,如果一个机器上有2个4核8线程的CPU,那么它的逻辑核数是16,物理核数是8,而从操作系统的视角来看,它会认为当前机器有16个CPU。

另外,如果lscpu不可用,也可以使用/proc/cpuinfo查看,如下:

$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
stepping : 10
microcode : 0xffffffff
cpu MHz : 1991.998
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
...

查看磁盘信息#

使用lsblk可以很容易的看到机器上的磁盘与分区情况,如下:

$ lsblk -p
/dev/sda 8:0 0 280G 0 disk
└─/dev/sda1 8:1 0 280G 0 part /

可以看到当前机器只有一个磁盘,大小是280G,它被虚拟成了/dev/sda文件,而磁盘/dev/sda只有1个分区,它被虚拟成了/dev/sda1文件,这里又印证了Unix"一切皆文件"的设计哲学,硬盘与分区都被虚拟成了文件!

相信你也发现了一些Linux磁盘命名的规律,如果有3个磁盘,命名就是sda、sdb、sdc,如果sda有3个分区,分区名就是sda1、sda2、sda3,以此类推。

fdisk也可以用来查看磁盘信息,如下:

$ sudo fdisk -l
Disk /dev/sda: 280 GiB, 300647710720 bytes, 587202560 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd36fd4dd Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 587202559 587200512 280G 83 Linux Disk /dev/sda1: 279.102 GiB, 300646662144 bytes, 587200512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

还有一个常见场景是查看硬盘类型,比如:

  • 当前磁盘是机械硬盘还是SSD?
  • 如果是SSD的话,它是SATA SSD还是PCIe SSD

对于这3种不同类型的磁盘,它们之间的性能差异巨大,区分方法如下:

$ lsblk -o name,size,type,rota /dev/sda
NAME SIZE TYPE ROTA
sda 280G disk 1 # ROTA代表是否旋转磁盘,所以1代表机械硬盘,0代表固态硬盘
└─sda1 280G part 1 # 执行下面两条命令,就可以区分是SATA SSD还是PCIe SSD了,一般来说,PCIe SSD性能较好
$ lspci -vmm|grep -iE 'SATA|AHCI'
$ lspci -vmm|grep -iE 'PCIe|NVMe'

另外,下面这些命令也可以查看磁盘相关信息,一般需要自行安装,如下:

# 查看scsi磁盘设备
$ lsscsi
# 查看磁盘详细信息
$ sudo smartctl --info /dev/sda
$ sudo hdparm -I /dev/sda

查看网卡信息#

使用ethtool可以查看网卡的一些硬件参数,如下:

# 查看网卡参数,会输出好多看不懂的内容,应用层开发一般关注speed/duplex/link就可以了
$ sudo ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s # 网卡速率
Duplex: Full # 全双工网卡
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Link detected: yes # 网卡连了网线 # 查看网卡数据包统计信息,关注drop/error之类的指标,这代表网卡层是否有丢包或错误产生
$ sudo ethtool -S eth0 # 查看网卡RingBuffer大小
$ sudo ethtool -g eth0
# 设置网卡RingBuffer大小
$ sudo ethtool -G eth0 rx 2048 # 使eth0网卡灯闪烁,网络运维可能会经常使用这个,因为机房网线错综复杂很难分清谁是谁的
$ sudo ethtool -p eth0 # 查看网卡驱动
$ sudo ethtool -i eth0
# 查看网卡支持的特性
$ sudo ethtool -k eth0
# 查看与调整网卡队列数Combined
$ sudo ethtool -l eth0
$ sudo ethtool -L eth0 combined 8

查看其它硬件信息#

除了cpu、内存、磁盘、网卡外,机器上还有一些其它硬件,如总线、主板、usb等,开发人员一般关注较少,这里只简单介绍一下,混个眼熟即可。

# 查看usb设备
$ lsusb # 查看pci设备,一般外围设备都是通过pci总线连接进来的,所以这个命令一般可以看到很多设备,包括磁盘与网卡等
# 输出中Kernel driver in use表示设备驱动,Kernel modules表示内核模块
$ lspci -v # 通过这个命令,机器中所有的硬件信息,都能查看到
$ lshw

查看系统信息#

做为后端开发,一般我们比较关注的系统信息有内核版本、发行版、底层c库版本等等,这些在Linux下也非常容易查看,如下:

查看内核版本#

$ uname -r
5.4.0-74-generic # 通过/proc/version也能看到内核版本
$ cat /proc/version
Linux version 5.4.0-74-generic (buildd@lgw01-amd64-038) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) 83-Ubuntu SMP Sat May 8 02:35:39 UTC 2021

可以看到,当前系统Linux内核版本是5.4.0-74-generic

另外,内核从源码编译时可以配置一些选项,内核启动时也可以配置一些选项,如要检查这些选项,可如下查看:

# /boot/config-*文件保存了内核的编译配置
# 如下查看内核编译时是否开启了KPROBES(内核追踪)功能
$ cat /boot/config-`uname -r` | grep -i KPROBES
CONFIG_KPROBES=y # 查看内核启动参数
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.4.0-74-generic root=UUID=fce5376b-dcc2-4550-a72a-e7cf0f5354a4 ro find_preseed=/preseed.cfg auto noprompt priority=critical locale=en_US text nomodeset vga=792

查看发行版#

Linux和Windows不一样,Linux本身只是一个操作系统内核,它提供基础的进程调度、内存管理等功能,而我们使用的Linux,如Ubuntu、Centos,这些是Linux发行版,它们将Linux下常用的软件以及内核打包在一起,然后发行出来给大家使用,降低了Linux使用的难度。

如下,查看当前系统是哪个发行版:

# /etc目录下有各种*-release文件,这些文件里面记录着发行版的信息
$ ls /etc/*-release
/etc/centos-release /etc/os-release /etc/redhat-release /etc/system-release # 一般通过/etc/os-release就可以了,如下显示发行版是CentOS 7
$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"

查看系统启动时间#

# 查看系统启动至今的秒数
$ cat /proc/uptime|cut -d. -f1
3810068 # 通过date命令转化为启动时间点,如下:
$ date -d "`cat /proc/uptime|cut -d. -f1` seconds ago" +'%F %T'
2021-11-04 12:51:50

查看libc版本#

像Linux上的glibc,Windows上的msvc,它们都是底层c库,目前几乎是所有应用层软件的基石。

然而某些场景下,两个不同版本的c库,性能差别会非常大,因此常规性检查一下它们的版本也是非常有必要的,如下:

# ldd可直接查看glibc版本,如下显示glibc版本是2.31
$ ldd --version
ldd (Ubuntu GLIBC 2.31-0ubuntu9) 2.31 # ldd可以查看某个程序的所有动态链接库
# 因此可以通过如下方法检查java程序使用的各种底层库版本
$ ldd `which java`
linux-vdso.so.1 (0x00007ffeb11f1000)
/usr/local/lib/libjemalloc.so (0x00007fdcdd8fe000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fdcdd8cb000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdcdd8a8000) # 线程库
libjli.so => /opt/jdk-11.0.12+7/bin/../lib/jli/libjli.so (0x00007fdcdd697000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdcdd691000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdcdd49f000) # 基础c库
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdcdd2bb000) # 基础c++库
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdcdd2a0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdcdddc1000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdcdd151000)
# c库版本是2.31
$ ls -l /lib/x86_64-linux-gnu/libc.so.6
lrwxrwxrwx 1 root root 12 2020-04-15 03:26:04 /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.31.so
# c++库版本是6.0.28
$ ls -l /lib/x86_64-linux-gnu/libstdc++.so.6
lrwxrwxrwx 1 root root 19 2021-05-29 15:49:27 /lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.28
# pthread线程库版本是2.31
$ ls -l /lib/x86_64-linux-gnu/libpthread.so.0
lrwxrwxrwx 1 root root 18 2020-04-15 03:26:04 /lib/x86_64-linux-gnu/libpthread.so.0 -> libpthread-2.31.so

neofetch#

可以看到,上面那些命令查看系统信息还是比较零碎的,所以出现了一些命令,将上面的常见场景做了一些聚合,使得能快速直观的看到系统的主要信息,如neofetch命令:

$ neofetch

如上所示,neofetch会显示发行版的一个炫酷图标,上面那个像写轮眼的图标就是Ubuntu的logo。
然后会显示一些系统关键信息,如内核版本、启动时间、Shell版本、CPU/GPU/Memory等。

本系列文章索引
Linux命令拾遗-入门篇
Linux命令拾遗-文本处理篇
Linux命令拾遗-软件资源观测
Linux命令拾遗-硬件资源观测
Linux命令拾遗-剖析工具
Linux命令拾遗-动态追踪工具
Linux命令拾遗-理解系统负载
Linux命令拾遗-top中的%nice是啥
Linux命令拾遗-网络抓包工具

往期内容#

Linux命令拾遗-入门篇
原来awk真是神器啊
Linux文本命令技巧(上)
Linux文本命令技巧(下)
字符编码解惑

作者:打码日记

出处:https://www.cnblogs.com/codelogs/p/16060714.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

[转帖] Linux命令拾遗-查看系统信息的更多相关文章

  1. Linux命令----uname查看系统信息

    uname就是UNIXname的缩写 1.uname可以查询操作系统信息 [root@yuan ~]# uname Linux 2.uname -n显示系统的主机名 [root@yuan ~]# un ...

  2. 【转载】Windows系统电脑通过命令msinfo32查看系统信息

    在Windows操作系统中,可以使用msinfo32的操作命令查看操作系统相关信息,通过msinfo32命令可以查看到系统摘要,包括硬件资源.组件.软件环境等系统信息.其中系统摘要包括冲突/共享.DM ...

  3. 转载:Linux命令之查看文件占用空间大小-du,df

    转载自:<du命令>-linux命令五分钟系列之三 du(disk usage),顾名思义,查看目录/文件占用空间大小 #查看当前目录下的所有目录以及子目录的大小$ du -h $ du ...

  4. 如何使用Linux 命令more 查看文本文件

    Linux 下有很多实用工具可以让你在终端界面查看文本文件.其中一个就是 more. more 跟我之前另一篇文章里写到的工具 —— less 很相似.它们之间的主要不同点在于 more 只允许你向前 ...

  5. Linux命令文件查看过滤

    Linux命令篇 1.查看一个文件的后100行的命令: tail -n 100 Linux下查看文件前几行一般用head -n xx,查看后面几行用tail -n xx.除此之外,还有: tail - ...

  6. [转帖]Linux命令pmap

    Linux命令pmap https://www.cnblogs.com/lnlvinso/p/5272771.html jmap可以查看Java程序的堆内存使用情况,pmap可以查看Linux上运行的 ...

  7. Linux 命令 - man 查看命令的文档

    man 命令是 Linux 中最常用的命令,碰到任何让你疑惑的命令,都可以 man 一下来查看详情.不只是 shell 命令,C 语言库函数和系统调用等内容也可以通过 man 命令查看. man 命令 ...

  8. [转帖]Linux命令中特殊符号

    Linux命令中特殊符号 转自:http://blog.chinaunix.net/uid-16946891-id-5088144.html   在shell中常用的特殊符号罗列如下:# ; ;; . ...

  9. 【linux】linux命令--uptime查看机器存活多久和平均负载 解读平均负载含义

    一.uptime命令,查看机器存活时间和平均负载 键入命令: uptime 该结果和 top命令查看结果最上面一行的 是一样的显示. 返回数据介绍: #当前服务器时间: 19:56:44 #当前服务器 ...

  10. [转帖]linux命令dd

    linux命令dd   dd 是diskdump 的含义 之前学习过 总是记不住 用的还是少. http://embeddedlinux.org.cn/emb-linux/entry-level/20 ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (36)-- 算法导论5.3 6题

    六.请解释如何实现算法 PERMUTE-BY-SORTING,以处理两个或更多优先级相同的情形.也就是说,即使有两个或更多优先级相同,你的算法也应该产生一个均匀随机排列. 文心一言: 算法 PERMU ...

  2. 痞子衡嵌入式:原来i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成. 痞子衡之前写了三篇文章 <M7 FlexRAM ECC> ...

  3. .NET技术分享日活动-202104

    2021年4月27日下午,个人组织举办了山东地区的山东.NET技术分享日活动.围绕互联网技术.大数据.机器学习.业务实践等方向进行创新技术的实践分享. 本次技术分享日活动面向了山东地区广大的.NET ...

  4. MySQL进阶篇:详解存储引擎介绍和基本使用

    1. MySQL进阶篇:第一章__一.一_存储引擎介绍和基本使用 1.1 MySQL体系结构 1). 连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类 ...

  5. 一键自动修改和翻新OC源码,解决苹果审核4.3和马甲问题

    ​ ipaguard 自动修改/翻新/混淆/OC/iOS代码,自动替换类名,方法名 由来 网上有很多关于如何混淆iOS源码的方法,但是都不够智能,生成的方法类名要么千奇百怪,要么aaaabbbxxx这 ...

  6. 火山引擎A/B测试:MAB智能调优实验,企业活动效果提升新利器

      618临近,各大电商APP的预热活动已然拉开序幕.对企业而言,一场活动从策划到上线,中间经过效果验证,其业务成本很高.一个好的活动创意从策划.开发.到最终发布,至少会经历几周实践,如果中间还经历A ...

  7. JAVA性能优化- IntelliJ插件:java内存分析工具(JProfiler)

    JProfiler(Java性能分析神器) v11.1.4 下载 安装目录不要有空格 安装成功后,在 Intellij 里面选择对应的 jprofiler.exe 路径 点击下图JProfiler图标 ...

  8. Hugging News #0609: 最新代码生成模型 StarCoder+ 和 StarChat Beta 重磅发布!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  9. Hadoop面试题(一)

    1.集群的最主要瓶颈 磁盘IO 2.Hadoop运行模式 单机版.伪分布式模式.完全分布式模式 3.Hadoop生态圈的组件并做简要描述 1)Zookeeper:是一个开源的分布式应用程序协调服务,基 ...

  10. 100天搞定机器学习|Day59 主成分分析(PCA)原理及使用详解

    数学概念 方差:用来衡量随机变量与其数学期望(均值)之间的偏离程度.统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数. $$Var(X)=\frac{1}{n}\sum(x_i- ...