查看硬件信息

常用工具

dmidecode

SMBIOS,System Management BIOS,是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。 DMI,Desktop Management Interface 是帮助收集电脑系统信息的管理系统,DMI 信息的收集必须在严格遵照 SMBIOS 规范的前提下进行。 SMBIOS 和 DMI 是由行业指导机构 Desktop Management Task Force (DMTF)起草的开放性的技术标准;不过 DMTF 宣布 DMI 的生命期在 2005 年结束了。

dmidecode 是系统内置的程序,可以解析计算机的 DMI 表 的内容,输出为易读的格式。该表包含了对 系统各硬件 的描述,以及其它有用的信息,如序列号、BIOS 版本号等。有了这张表,就无需打开机箱查看真正的硬件了。虽然带来的便利,但也带来了信息不可靠的风险。

DMI 表不仅描述当前系统由当些硬件组成,还会报告它有哪些升级的空间,如最快支持哪些 CPU,支持多少最大内存等。

运行 dmidecode 命令时,它会去寻找 DMI 表。首先会尝试从 sysfs 读取,如果访问失败,再尝试直接从内存读取。当它成功找到有效的 DMI 表时,它就会将其内容以一定的格式显示出来。

语法

dmidecode -t 类别

常用的类别:

1 :详细的系统数据,含主板的型号与硬件的基础数据等

4 :CPU 的相关数据,包括倍频、外频、内核数、内核绪数等

9 :系统的相关插槽格式,包括 PCI, PCI-E 等等的插槽规格说明

17:每一个内存插槽的规格,若内有内存,则列出该内存的容量与型号

lspci

查看 PCI 总线上连接的设备信息。

lspci [-vvn]

-v :显示更多信息;

-vv :比 -v 更详细信息,便于查看某一设备详细信息

-n :只显示设备的 ID,而不显示厂商名称

-s :只查看某一设备,后面接 domain:bus:device.function 格式的 ID

可以先不加参数运行 lspci,查看所有设备,以获取其 ID,以便于进一步用 ID 查看更详细信息。

$ lspci -s 02:01.0 -vv  
02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
        Subsystem: VMware PRO/1000 MT Single Port Adapter
        Physical Slot: 33
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
        Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0 (63750ns min), Cache Line Size: 64 bytes
        Interrupt: pin A routed to IRQ 19
        Region 0: Memory at fd5c0000 (64-bit, non-prefetchable) [size=128K]
        Region 2: Memory at fdff0000 (64-bit, non-prefetchable) [size=64K]
        Region 4: I/O ports at 2000 [size=64]
        [virtual] Expansion ROM at fd500000 [disabled] [size=64K]
        Capabilities: <access denied>
        Kernel driver in use: e1000
        Kernel modules: e1000

-s 后面接的 domain:bus:device.function 表示每个设备的总线、插槽和功能,其具体的对照表包含在 /usr/share/hwdata/pci.ids 文件中。该文件内容为 PCI 的标准 ID 和各厂商名称的对应表。用 lspci 命令查看信息时,其实所有的数据都来自于 /proc/bus/pci/ 目录。可以用以下方法来在线更新该数据库:

~]# update-pciids

所有硬件

$ dmidecode
Handle 0x0002, DMI type 2, 8 bytes. Base Board Information
        Manufacturer: Intel
        Product Name: C440GX+
        Version: 727281-001
        Serial Number: INCY92700942

BIOS

$ dmidecode -t bios
  ....
BIOS Information
    Vendor: American Megatrends Inc.
    Version: 4.6.5
    Release Date: 04/25/2012
    .......
    BIOS Revision: 4.6
  ....

内存

$ dmidecode -t memory
# dmidecode 2.11
SMBIOS 2.7 present.

Handle 0x0008, DMI type 16, 23 bytes
Physical Memory Array
    Location: System Board Or Motherboard
....
    Maximum Capacity: 32 GB  # 最大支持 32 GB
....

Handle 0x000A, DMI type 17, 34 bytes
....
Memory Device  # 单条内存
    Array Handle: 0x0008
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 4096 MB  # 大小为 4 G
.....

CPU

查看 CPU 架构信息

该命令会从 sysfs、/proc/cpuinfo 及相关架构函数库中读取 CPU 架构的信息。

~$ lscpu
Architecture:          i686            # cpu 架构
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian   # 小尾序
CPU(s):                4               # 总共有 4 核
On-line CPU(s) list:   0-3
Thread(s) per core:    1               # 每个 cpu 核,只能支持一个线程,即不支持超线程
Core(s) per socket:    4               # 每个 cpu,有4个核
Socket(s):             1               # 总共有1一个cpu
Vendor ID:             GenuineIntel    # cpu 产商 intel
CPU family:            6
Model:                 42
Stepping:              7
CPU MHz:               1600.000
BogoMIPS:              5986.12
Virtualization:        VT-x            # 支持 cpu 虚拟化技术
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              6144K

查看 CPU 的数量、家族、型号、频率、缓存大小等详细信息

$ cat /proc/cpuinfo

总线

PCI 设备

$ lspci
$ lspci -s 02:01.0 -vv  

先查看设备总表,再根据其 ID 查看详细信息。

USB 设备

lsusb -t

-t :用树状目录显示各 USB 端口的关系

操作系统信息

内核

查看当前内核、操作系统、架构等

uname -a

查看内核版本

uname -r

查看操作系统的位版本

uname -m

查看主机名

hostname

环境变量

查看所有环境变量

$ env

运行时间

$ uptime
 10:24:51 up  3:25,  2 users,  load average: 0.00, 0.01, 0.04

主要用于显示系统已经运行多长时间。

显示的附加内容:

  • 当前 系统时间
  • 系统 运行时长
  • 当前 登陆人数
  • 1 分钟内、5 分钟内、10 分钟内的 系统平均负载

系统负载

系统中会有一部分进程处于运行状态或不间断状态,系统平均负载(System Load Averages)用来描述这一类进程的平均数量。

  • 处于运行状态的进程要么正要使用 CPU,要么正在等待使用 CPU
  • 处于不间断状态的进程正在等待特定的 I/O 访问,如等待磁盘操作

top

实时显示进程状态及 CPU 占用率

top - 10:23:49 up  3:24,  2 users,  load average: 0.00, 0.01, 0.04
Tasks: 174 total,   1 running, 173 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999964 total,    62164 free,   661560 used,   276240 buff/cache
KiB Swap:  1048572 total,  1046476 free,     2096 used.   119716 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                         
  2473 mysql     20   0 1888520 379700  10168 S   0.3 38.0   0:31.62 mysqld                          
  5426 liloli    20   0  157712   2292   1556 R   0.3  0.2   0:00.09 top                             
     1 root      20   0  193628   6396   3632 S   0.0  0.6   0:02.65 systemd   

cat /proc/loadavg

~]$ cat /proc/loadavg
0.00 0.01 0.05 1/268 5181

内存

查看已用、可用内存

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           976M        645M         61M        5.1M        269M        117M
Swap:          1.0G        2.0M        1.0G

查看内存总量

$ grep MemTotal /proc/meminfo    
MemTotal:         999964 kB

查看可用内存总量

$ grep MemFree /proc/meminfo
MemFree:           62580 kB

查看内存使用详细信息

$ cat /proc/meminfo
MemTotal:        4020868 kB
MemFree:          230884 kB
Buffers:            7600 kB
Cached:           454772 kB
SwapCached:          836 kB
.....

系统 I/O

iostat

iostat 命令用于 监控系统 I/O 设备,生成的相关报告可用于在不同的物理磁盘间平衡 I/O。

可监视磁盘操作,给出磁盘活动统计;可以列出 CPU 使用情况等。

iostat 属于 sysstat 软件包一部分,CentOS 默认不安装该软件,使用 yum install sysstat 来安装。

语法

iostat [-c|-d] [-k|-m] [-t] [间隔秒数] [检测次数]

-c :仅显示 CPU 的状态

-d :仅显示储存设备的状态

-k :以 KB 为单位显示,默认以 block 为单位

-m :以 MB 为单位显示

-t :显示当前日期、时间

~]# iostat
Linux 3.10.0-229.el7.x86_64 (study.centos.vbird)  09/02/2015   _x86_64_    (4 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.08    0.01    0.02    0.00    0.01   99.88
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.46         5.42         3.16     973670     568007
scd0              0.00         0.00         0.00        154          0
sda               0.01         0.03         0.00       4826          0
dm-0              0.23         4.59         3.09     825092     555621

显示结果分为上下两部分,上半部为 CPU 信息,下半部为存储设备信息。

tps :平均每秒钟的传送次数

kB_read/s :开机到现在,平均每秒读取的数据量

kB_wrtn/s :开机到现在平均每秒的写入数据量

kB_read :开机到现在,读取的总数据量

kB_wrtn :开机到现在,写入的总数据量

查看 CPU 与存储设备状态

~]# iostat
Linux 3.10.0-229.el7.x86_64 (study.centos.vbird)  09/02/2015   _x86_64_    (4 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.08    0.01    0.02    0.00    0.01   99.88
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.46         5.42         3.16     973670     568007
scd0              0.00         0.00         0.00        154          0
sda               0.01         0.03         0.00       4826          0
dm-0              0.23         4.59         3.09     825092     555621

监视磁盘 I/O

可以指定监测频率、次数。

监测存储设备 vda,每 2 秒钟检测一次,共检测 3 次:

~]# iostat -d 2 3 /dev/sda
Linux 3.10.0-229.el7.x86_64 (study.centos.vbird)  09/02/2015   _x86_64_    (4 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.46         5.41         3.16     973682     568148

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               1.00         0.00         0.50          0          1

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.00         0.00         0.00          0          0

如果指定了检测次数,则第一组数据显示的为 “从开机到现在的数据”。

第二次以后所显示的数据,为两次检测之间的数据。

系统操作

关机

shutdown

shutdown 的功能:关机或重启、设置关机时间、自定义关机信息、仅发出关机警告信息。

shutdown [-krhc] [时间] [警告信息]

选项与参数:

-k 不关机,只发警告信息

-r 关闭系统服务,重启(常用)

-h 关闭系统服务,关机 (常用)

-c 取消已经在进行的 shutdown 命令

+5 指定时间后关机,默认为 1 分钟

shutdown 会以 安全 的方式关掉系统,所有已经登陆的用户都会被 通知 系统要关机,同时还会 禁止后来的人 尝试登陆系统。

正常关机流程

看谁在线
# who
看网络的连接状态
# netstat -a
看后台运行的程序
# ps -aux
通知在线用户关机的时间
# shutdown +5 "system will shutdown in 5 minutes"
使用正确的关机命令
# shutdown -h now

关机权限

本地 从终端 tty1~tty7 登陆系统时,所有用户 都有权关机。

使用 远程 工具关机只能用 root

10 分钟后关机,并发送警告消息

# shutdown -h 10 'I will shutdown after 10 mins'

立即关机

# shutdown -h now

定时关机

# shutdown -h 20:25

十分钟后关机

# shutdown -h +10

立即重启

# shutdown -r now
# reboot

30 分钟后重启,发送警告消息

shutdown -r +30 'The system will reboot'

只发警告信息

shutdown -k now 'This system will reboot'

shutdown / halt / poweroff / reboot

halt :停止 CPU,不关电源

poweroff 停止 CPU,关电源

在使用 Systemd 的系统中,shutdownhaltpoweroffreboot 均是指向 /bin/systemctl 的符号链接。

与以往 initd 系统不同,关机已经与运行级别无关,而与 target 目标有关,基本上这些命令会 isolate 特定的目标。

isolate :启动一个目标,停止其它目标。

systemctl isolate halt.target 简写为:

shutdown -H now

systemctl halt

halt

systemctl isolate reboot.target 简写为:

shutdown -r now

telinit 6

systemctl reboot

reboot

systemctl isolate poweroff.target 简写为:

shutdown -P now

telinit 0

shutdown now

systemctl poweroff

poweroff

数据同步

sync 命令用于 冲刷文件系统缓存。强制把发生更改的块保存到磁盘中,并更新超级块。

shutdown、reboot、halt 等等命令均会在关机前自动运行 sync,以保证数据不会丢失。

普通用户也可以使用 sync,只不过他所更新的数据只是 自己的那部分,而 root 可以 更新整个系统中的数据

系统时间

时区

查看当前时区与时间
$ timedatectl
      Local time: Sat 2018-07-28 13:25:33 CST
  Universal time: Sat 2018-07-28 05:25:33 UTC
        RTC time: Sat 2018-07-28 05:25:31
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
查看支持的所有时区
$ timedatectl list-timezones
......
查找时区
$ timedatectl list-timezones | grep -i shanghai
Asia/Shanghai
设置时区
~]# timedatectl set-timezone "Asia/Shanghai"

时间

Linux 系统上有两个时间,一个是 Linux 系统的时间,另一个是 BIOS 时间,真正的硬件记录的时间。

查看时间
$ date
Sat Jul 28 13:52:10 CST 2018
设置时间
~]# timedatectl set-time "2015-09-01 12:02"
# date --set "8/31/98 00:01"

--set 后面的格式为 月/日/年 时:分

把时间写入 BIOS
# hwclock -w

校时

启用网络校时
$ timedatectl set-ntp true
手动网络校时
~]# ntpdate 0.asia.pool.ntp.org
12 Apr 08:48:36 ntpdate[2129]: adjust time server 118.140.184.99 offset -0.286377 sec

~]# hwclock -w

时间的表示 与 格式转换

Linux 使用的时间格式为 Unix 时间,即 POSIX 时间,或 epoch 时间。

epoch 时间 用于描述一个 时间点,表示从 1970 年 1 月 1 日 起,至当前时刻共逝去了多少 秒钟

查看当前 epoch 秒数
$ date +%s
1532757615

+%s 为 1970/01/01 以来的累积总秒数。

计算某日的 epoch 秒数
$ echo $(date --date="2015/05/04" +%s)
查看当前 epoch 天数
$ echo $(($(date +%s)/86400+1))
17741
计算某日的 epoch 天数

假设要计算的日期为 2015/05/04

$ echo $(($(date --date="2015/05/04" +%s)/86400+1))
16559

每天的秒数 = 86400。由于 bash 仅支持整数,因此最终需要加上 1 补齐 1970/01/01 当天。

epoch 时间 转 标准格式

date -d @1190000000

Mon Sep 17 11:33:20 CST 2007

标准格式 转 epoch 时间

date +%s -d"Jan 1, 1980 00:00:01"

语系

system locale,系统语系用于控制 系统服务和用户界面的语言

在 bash 环境下,可以随时为语系变量赋予新值,来随时切换语系,这种改动仅对该 bash 有效。

语系配置文件

系统语系

系统语系的设置可以通过编辑 /etc/locale.conf 来实现,或用 localectl 命令来设置。

它会在初始化引导期间被 systemd 守护进程读取,其中的设置会被每一个服务或用户继承,除非个别的程序或用户做了修改。

locale.conf 保存了语系的环境变量,一行一个,例如:

LANG=de_DE.UTF-8
LC_MESSAGES=C

locale.conf 的修改会在下次登录时生效,要想立即生效,可以运行:

~]# LANG= source /etc/profile.d/lang.sh

这只有在 LANG 变量没设置时才会有用,而且如果在 locale.conf 中移除了某些变量,再运行这个命令的话,移除的那些变量在注销前依然存在。

用户语系

对于单独用户来说,可以编辑用户自己的配置文件 ~/.config/locale.conf 来覆盖系统语系的设置。

新建用户的默认语系:

创建并编辑 /etc/skel/.config/locale.conf 文件,系统为新用户创建家目录时会将这个文件一同复制,即为新用户生成 ~/.config/locale.conf

以上这些 locale.conf 文件的优先级定义在 /etc/profile.d/lang.sh 中.

Locale 的命名规则

语言_地区.字符集编码

如:en_US.UTF-8

zh_CN.GB2312 :zh 表示中文,CN 表示大陆地区,GB2312 表示使用的字符集为 GB2312。

常用语系变量

LC_COLLATE

定义该环境的排序和比较规则

LC_CTYPE

用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。

LC_MONETARY

货币格式

LC_NUMERIC

非货币的数字显示格式

LC_TIME

时间和日期格式

LC_MESSAGES

提示信息的语言。

LANG

以上各 LC_* 变量的 默认值,是 最低级别 的设置,如果 LC_* 没有设置,则使用该值。该值是系统安装时确定的。

LC_ALL

不是变量,是一个 ,如果该值设置了,则该值会 覆盖所有 LC_* 的设置值。注意,🚩 LANG 的值不受该宏影响。

语系变量也能像其他的环境变量一样 传递给其它程序:

~]# LANG="en_AU.UTF-8" ./my_application.sh

类似的,也可以通过 设置环境变量,让当前 shell 中运行的程序使用特定的语系:

~]# export LANG="en_AU.UTF-8"

语系变量优先级

不严格 地讲,可以简单地这样理解这些变量的优先级:

LC_ALL > LC_* > LANG

用宏 LC_ALL 设置语系时,它会覆盖所有 LC_* 的设置,此时系统忽略 LANG 的设置。如果 LC_ALLLC_* 都没有设置,LANG 这个默认值才生效。

语系设置命令

localectl 命令用于查看、修改 系统语系 和键盘布局。

locale 命令仅用于查看,可以查看当前语系或所有公共语系。

查看当前语系
~]$ localectl status
System Locale: LANG=en_US.UTF-8
   VC Keymap: us
  X11 Layout: n/a
查看可用语系
~]# localectl list-locales | grep zh_
zh_CN
zh_CN.gb2312
zh_CN.utf8
...
设置语系
~]# localectl set-locale LANG=en_GB.utf8
查看当前所有语系变量
~]# locale
LANG=zh_TW.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
.....
LC_ALL=en_US.utf8

更改图形接口语系

图形接口默认的显示语系也是 系统语系

~]# localectl set-locale LANG=en_US.utf8
~]# systemctl isolate multi-user.target
~]# systemctl isolate graphical.target

Shell 正常显示中文

要想在 Shell 中正常显示系统的中文提示信息和支持中文输入,LANGshell 的编码配置需一致,并需安装中文 locale

如:LANGshell 的编码都配置成 zh_CN.utf8,并安装有 zh_CN.utf8 这个 locale。

如果 shellLANG 配置不同,则中文显示乱码。

如果 LANG 里设置的 locale 没有安装,则不能显示系统的中文提示信息,只会显示英文提示信息。