cat > /tmp/get_os_info.sh <<"EOF"#!/bin/bashexport LANG=en_US.UTF-8# 如果 cat /proc/1/cgroup | grep docker | wc -l 大于0 或 systemd-detect-virt 返回 docker,則為 docker容器,# 如果 virt-what 返回 kvm或vmware或hyperv或xen、xen-hvm、lxc 或 systemd-detect-virt 返回 vmware、kvm 則為虛擬機# 如果 cat /sys/class/dmi/id/product_name 返回 Bochs 、OpenStack Nova則為虛擬機 若返回Alibaba Cloud ECS,則代表阿里云主機# 如果 systemd-detect-virt 返回 none 則表示物理機# 判斷當前主機類型if [ "$(cat /proc/1/cgroup | grep -c docker)" -gt 0 ] || systemd-detect-virt | grep -q docker; thenhost_type="Docker容器"elif [[ -f /sys/class/dmi/id/product_name && $(cat /sys/class/dmi/id/product_name) == "Alibaba Cloud ECS" ]]; thenhost_type="阿里云主機"elif [[ $(virt-what) =~ (kvm|vmware|hyperv|xen|xen-hvm|lxc) ]] || [[ $(systemd-detect-virt) =~ (vmware|kvm) ]]; thenhost_type="虛擬機"elif [[ $(cat /sys/class/dmi/id/product_name) =~ (Bochs|OpenStack Nova) ]]; thenhost_type="虛擬機"elsehost_type="物理機"fiecho "- **當前主機類型**: $host_type"# 獲取并顯示系統制造商、產品名稱和版本echo " - 當前主機系統硬件信息:"dmidecode -t 1 | awk -F: '/Manufacturer/{printf " - 制造商: %s\n", $2}/Product Name/{printf " - 產品名稱: %s\n", $2}'# 獲取操作系統信息os_info=$(cat /etc/os-release | grep 'PRETTY_NAME' | cut -d '"' -f 2)# 如果操作系統是 CentOS Linux 7 (Core),查詢 /etc/redhat-releaseif [[ "$os_info" == "CentOS Linux 7 (Core)" ]]; thenos_info=$(cat /etc/redhat-release)fiecho "- **操作系統信息**: $os_info"# 顯示當前內核版本kernel_version=$(uname -r)echo "- **內核版本**: $kernel_version"echo "- **硬件配置**:"# 獲取CPU信息cpu_model=$(lscpu | grep "Model name" | awk -F: '{print $2}' | xargs)cpu_cores=$(lscpu | grep "^CPU(s):" | awk '{print $2}')# 獲取每核的線程數threads_per_core=$(lscpu | grep -i "Thread(s) per core" | awk '{print $4}')# 如果每核線程數大于1,則說明開啟了超線程if [[ $threads_per_core -gt 1 ]]; thenHyperThreading="超線程已開啟 (每核線程數: $threads_per_core)"elseHyperThreading="超線程未開啟 (每核線程數: $threads_per_core)"fiecho " - **CPU**: $cpu_model ,**共 $cpu_cores 核** ,$HyperThreading "# 獲取內存信息memory=$(free -h | awk '/^Mem:/{print $2}')echo " - **內存**: $memory"# 磁盤類型# 虛擬化平臺(如 VMware、KVM、Hyper-V 等)可能會將虛擬硬盤映射為虛擬的 HDD 類型,即使宿主機的物理硬盤是 SSD。# # 使用dd測試,若超過500MB/s,則肯定是SSD盤,有的盤差點在300MB/s,完成時間在15秒以下# mkidr -p /data/# dd if=/dev/zero of=/data/testssd bs=1M count=5000 oflag=direct# dd if=/data/testssd of=/dev/null bs=1M count=5000 iflag=direct# rm -rf /data/testssd# # 如果 TRAN 列顯示為 sata,則硬盤是 SATA 接口。# 如果 TRAN 列顯示為 pcie 或 nvme,則硬盤是 NVMe 接口。# 如果 TRAN 列顯示為 fc,則表示該硬盤使用的是 Fibre Channel 接口。# 獲取指定磁盤信息echo " - **磁盤**: $disk_info"# lsblk -d -o NAME,ROTA,TRAN,SIZE | grep -E '^(sd|vd)' | awk '{print " -", $1,$2,$3,$4, ($2 == 1 ? "HDD機械硬盤" : "SSD固態硬盤")}'lsblk -d -o NAME,ROTA,TRAN,SIZE | grep -E '^(sd|vd)' | awk -v host_type="$host_type" '{ if (host_type == "物理機") {print " -", $1, $2, $3, $4, ($2 == 0 ? "SSD固態硬盤" : "HDD機械硬盤")} else {print " -", $1, $2, $3, $4, ($2 == 0 ? "SSD固態硬盤" : "疑似HDD機械硬盤,還需測試IO或咨詢主機管理員")}}'echo ' ```'if command -v lshw &> /dev/null; thenlshw -short | grep disk | grep -v "cdrom" | awk '{$1=""; print " "$0}'
filsscsi | grep -v "cd/dvd" | grep "disk" | awk '{$1=""; print " "$0}'echo ' ```'# 顯示文件系統類型
echo "- **文件系統**:"
# df -Th 2>/dev/null | grep -v "loop" | grep -v "tmpfs" | awk '{print " -", $1, "->", $2}'
echo ' ```'
df -Th 2>/dev/null | grep -v "loop" | grep -v "tmpfs" | grep -v "iso" | grep -v "/var/lib/docker/overlay2" | grep -v "/boot" | awk '{print " "$0}'
echo ' ```'# 1. 對閃存(SSD)等存儲介質,優先使用noop或none調度算法
# 2. 對IO壓力比較重且非SSD存儲設備,且功能比較單一的場景,例如數據庫服務器,使用deadline或mq-deadline調度算法# for dev in $(lsblk -dno NAME | grep -E '^(sd|vd)'); do echo "$dev: $(cat /sys/block/$dev/queue/scheduler)"; done
# echo noop | sudo tee /sys/block/sda/queue/scheduler
# for dev in $(lsblk -dno NAME | grep -E '^(sd|vd)'); do echo "echo noop | sudo tee /sys/block/$dev/queue/scheduler"; done# 獲取I/O調度器信息
echo "- **I/O 調度器**:"
for dev in $(lsblk -dno NAME | grep -E '^(sd|vd)'); do# 提取中括號中的當前調度器scheduler=$(cat /sys/block/$dev/queue/scheduler 2>/dev/null | grep -o '\[[^]]*\]' | tr -d '[]')echo " - $dev: $scheduler"
done# 查看時區
timezone=$(timedatectl | grep "Time zone:" | awk '{print $3,$4,$5}')
echo "- **當前主機時區信息**:$(echo $timezone)"# 查看IP地址
ip_add=`hostname -I`
hostname1=`hostname`
sysuptime=`uptime -s`
echo "- **當前主機IP地址**:$ip_add"
echo "- **當前主機的主機名**:$hostname1"
echo "- **系統啟動時間**:$sysuptime"# 查看網卡信息
echo "- **主機網卡信息**:"
echo '```'
# 表頭
printf "%-20s %-10s %-10s %-18s %-18s %-18s %-10s %-10s %-10s %-10s %-8s %-10s\n" "Interface" "Type" "Type2" "MAC_Address" "IP_Address" "Gateway" "State" "RX" "TX" "Port_Type" "MTU" "General_State"
echo "-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------"for interface in $(ls /sys/class/net/)
doif [ ! -d "/sys/class/net/$interface" ]; thencontinuefi# 基礎信息mac=$(cat /sys/class/net/$interface/address 2>/dev/null || echo "N/A")ip=$(ip -4 addr show $interface | grep -oP '(?<=inet\s)\d+(\.\d+){3}' || echo "N/A")state=$(ip link show $interface | grep -oP '(?<=state\s)\w+' || echo "UNKNOWN")rx_bytes=$(cat /sys/class/net/$interface/statistics/rx_bytes 2>/dev/null || echo "0")tx_bytes=$(cat /sys/class/net/$interface/statistics/tx_bytes 2>/dev/null || echo "0")# 轉換 RX 和 TXif (( rx_bytes >= 1024**4 )); thenrx=$(awk "BEGIN {printf \"%.2f TB\", $rx_bytes / (1024^4)}")elif (( rx_bytes >= 1024**3 )); thenrx=$(awk "BEGIN {printf \"%.2f GB\", $rx_bytes / (1024^3)}")elserx=$(awk "BEGIN {printf \"%.2f MB\", $rx_bytes / (1024^2)}")fiif (( tx_bytes >= 1024**4 )); thentx=$(awk "BEGIN {printf \"%.2f TB\", $tx_bytes / (1024^4)}")elif (( tx_bytes >= 1024**3 )); thentx=$(awk "BEGIN {printf \"%.2f GB\", $tx_bytes / (1024^3)}")elsetx=$(awk "BEGIN {printf \"%.2f MB\", $tx_bytes / (1024^2)}")fitype="Virtual"[ -e "/sys/class/net/$interface/device" ] && type="Physical"mtu=$(cat /sys/class/net/$interface/mtu 2>/dev/null || echo "N/A")# 獲取 GENERAL.TYPE 信息general_type=$(nmcli device show $interface | grep -i "GENERAL.TYPE" | awk '{print $2}' || echo "N/A")# 獲取 GENERAL.STATE 信息general_state=$(nmcli device show $interface | grep -i "GENERAL.STATE" | awk '{print $2,$3,$4,$5}' || echo "N/A")# 獲取網關地址gateway=$(nmcli device show $interface | grep -i "IP4.GATEWAY" | awk '{print $2}' || echo "N/A")# 判斷光口或電口port_type="Unknown"if command -v ethtool >/dev/null; thenport=$(ethtool $interface 2>/dev/null | grep "Port" | awk '{print $2}')case "$port" inFIBRE) port_type="Optical" ;;TP) port_type="Electrical" ;;esacfi# 打印結果printf "%-20s %-10s %-10s %-18s %-18s %-18s %-10s %-10s %-10s %-10s %-8s %-10s\n" "$interface" "$type" "$general_type" "$mac" "$ip" "$gateway" "$state" "$rx" "$tx" "$port_type" "$mtu" "$general_state"
done
echo '```'EOF
-------------------------
chmod +x /tmp/get_os_info.sh
sleep 1
sh /tmp/get_os_info.sh
--------
sh /tmp/get_os_info.sh
- **當前主機類型**: 虛擬機
- 當前主機系統硬件信息:
- 制造商: VMware, Inc.
- 產品名稱: VMware Virtual Platform
- **操作系統信息**: Oracle Linux Server 7.9
- **內核版本**: 5.4.17-2011.6.2.el7uek.x86_64
- **硬件配置**:
- **CPU**: 13th Gen Intel(R) Core(TM) i7-1365U ,**共 2 核** ,超線程未開啟 (每核線程數: 1)
- **內存**: 6.3G
- **磁盤**:
- sdb 1 spi 10G 疑似HDD機械硬盤,還需測試IO或咨詢主機管理員
- sdc 1 spi 50G 疑似HDD機械硬盤,還需測試IO或咨詢主機管理員
- sda 1 spi 50G 疑似HDD機械硬盤,還需測試IO或咨詢主機管理員
```
/dev/sda disk 53GB VMware Virtual S
/dev/sdb disk 10GB VMware Virtual S
/dev/sdc disk 53GB VMware Virtual S
disk VMware, VMware Virtual S 1.0 /dev/sda
disk VMware, VMware Virtual S 1.0 /dev/sdb
disk VMware, VMware Virtual S 1.0 /dev/sdc
```
- **文件系統**:
```
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/ol-root xfs 47G 42G 5.0G 90% /
```
- **I/O 調度器**:
- sdb: mq-deadline
- sdc: mq-deadline
- sda: mq-deadline
- **當前主機時區信息**:America/New_York (EST, -0500)
- **當前主機IP地址**:192.168.1.120 10.10.1.23
- **當前主機的主機名**:rac3
- **系統啟動時間**:2025-01-07 03:05:15
- **主機網卡信息**:
```
Interface Type Type2 MAC_Address IP_Address Gateway State RX TX Port_Type MTU General_State
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Error: NetworkManager is not running.
Error: NetworkManager is not running.
Error: NetworkManager is not running.
ens33 Physical 00:0c:29:b9:30:1f 192.168.1.120 UP 0.06 MB 0.15 MB Unknown 1500
Error: NetworkManager is not running.
Error: NetworkManager is not running.
Error: NetworkManager is not running.
ens38 Physical 00:0c:29:b9:30:29 10.10.1.23 UP 0.00 MB 0.02 MB Unknown 1500
Error: NetworkManager is not running.
Error: NetworkManager is not running.
Error: NetworkManager is not running.
lo Virtual 00:00:00:00:00:00 127.0.0.1 UNKNOWN 0.04 MB 0.04 MB Unknown 65536
```
----------------
sh get_os_info.sh
- **當前主機類型**: 物理機
- 當前主機系統硬件信息:
- 制造商: HPE
- 產品名稱: ProLiant DL380 Gen10
- **操作系統信息**: Red Hat Enterprise Linux 8.8 (Ootpa)
- **內核版本**: 4.18.0-477.27.1.el8_8.x86_64
- **硬件配置**:
- **CPU**: Intel(R) Xeon(R) Gold 6258R CPU @ 2.70GHz Intel(R) Xeon(R) Gold 6258R CPU @ 2.70GHz ,**共 48 核** ,超線程已開啟 (每核線程數: 2)
- **內存**: 2.0Ti
- **磁盤**:
- sda 0 sas 447.1G SSD固態硬盤
- sdb 1 fc 2T HDD機械硬盤
- sdc 1 fc 30G HDD機械硬盤
- sdd 1 fc 30G HDD機械硬盤
- sde 1 fc 30G HDD機械硬盤
- sdf 1 fc 2T HDD機械硬盤
- sdg 1 fc 2T HDD機械硬盤
- sdh 1 fc 2T HDD機械硬盤
- sdi 1 fc 2T HDD機械硬盤
- sdj 1 fc 2T HDD機械硬盤
- sdk 1 fc 2T HDD機械硬盤
- sdl 1 fc 2T HDD機械硬盤
- sdm 1 fc 2T HDD機械硬盤
- sdn 1 fc 2T HDD機械硬盤
- sdo 1 fc 500G HDD機械硬盤
- sdp 1 fc 500G HDD機械硬盤
- sdq 1 fc 2T HDD機械硬盤
- sdr 1 fc 2T HDD機械硬盤
- sds 1 fc 2T HDD機械硬盤
- sdt 1 fc 2T HDD機械硬盤
- sdu 1 fc 2T HDD機械硬盤
- sdv 1 fc 2T HDD機械硬盤
- sdw 1 fc 2T HDD機械硬盤
- sdx 1 fc 2T HDD機械硬盤
- sdy 1 fc 2T HDD機械硬盤
- sdz 1 fc 2T HDD機械硬盤
- sdaa 1 fc 2T HDD機械硬盤
- sdab 1 fc 2T HDD機械硬盤
- sdac 1 fc 2T HDD機械硬盤
- sdad 1 fc 2T HDD機械硬盤
- sdae 1 fc 2T HDD機械硬盤
- sdaf 1 fc 2T HDD機械硬盤
- sdag 1 fc 2T HDD機械硬盤
- sdah 1 fc 2T HDD機械硬盤
- sdai 1 fc 2T HDD機械硬盤
- sdaj 1 fc 2T HDD機械硬盤
- sdak 1 fc 2T HDD機械硬盤
- sdal 1 fc 2T HDD機械硬盤
- sdam 1 fc 2T HDD機械硬盤
- sdan 1 fc 2T HDD機械硬盤
- sdao 1 fc 2T HDD機械硬盤
- sdap 1 fc 2T HDD機械硬盤
- sdaq 1 fc 2T HDD機械硬盤
- sdar 1 fc 2T HDD機械硬盤
- sdas 1 fc 2T HDD機械硬盤
- sdat 1 fc 2T HDD機械硬盤
- sdau 1 fc 2T HDD機械硬盤
- sdav 1 fc 2T HDD機械硬盤
- sdaw 1 fc 2T HDD機械硬盤
- sdax 1 fc 2T HDD機械硬盤
- sday 1 fc 2T HDD機械硬盤
- sdaz 1 fc 2T HDD機械硬盤
- sdba 1 fc 2T HDD機械硬盤
- sdbb 1 fc 2T HDD機械硬盤
- sdbc 1 fc 2T HDD機械硬盤
- sdbd 1 fc 2T HDD機械硬盤
- sdbe 1 fc 2T HDD機械硬盤
- sdbf 1 fc 2T HDD機械硬盤
- sdbg 1 fc 2T HDD機械硬盤
- sdbh 1 fc 2T HDD機械硬盤
- sdbi 1 fc 2T HDD機械硬盤
- sdbj 1 fc 2T HDD機械硬盤
- sdbk 1 fc 2T HDD機械硬盤
- sdbl 1 fc 2T HDD機械硬盤
- sdbm 1 fc 2T HDD機械硬盤
- sdbn 1 fc 2T HDD機械硬盤
- sdbo 1 fc 2T HDD機械硬盤
- sdbp 1 fc 2T HDD機械硬盤
- sdbq 1 fc 2T HDD機械硬盤
- sdbr 1 fc 2T HDD機械硬盤
- sdbs 1 fc 2T HDD機械硬盤
- sdbt 1 fc 2T HDD機械硬盤
- sdbu 1 fc 2T HDD機械硬盤
- sdbv 1 fc 2T HDD機械硬盤
- sdbw 1 fc 2T HDD機械硬盤
- sdbx 1 fc 2T HDD機械硬盤
- sdby 1 fc 2T HDD機械硬盤
- sdbz 1 fc 2T HDD機械硬盤
- sdca 1 fc 2T HDD機械硬盤
- sdcb 1 fc 2T HDD機械硬盤
- sdcc 1 fc 2T HDD機械硬盤
- sdcd 1 fc 2T HDD機械硬盤
- sdce 1 fc 2T HDD機械硬盤
- sdcf 1 fc 2T HDD機械硬盤
- sdcg 1 fc 2T HDD機械硬盤
- sdch 1 fc 2T HDD機械硬盤
- sdci 1 fc 2T HDD機械硬盤
- sdcj 1 fc 2T HDD機械硬盤
- sdck 1 fc 2T HDD機械硬盤
- sdcl 1 fc 2T HDD機械硬盤
- sdcm 1 fc 2T HDD機械硬盤
- sdcn 1 fc 2T HDD機械硬盤
- sdco 1 fc 2T HDD機械硬盤
- sdcp 1 fc 2T HDD機械硬盤
- sdcq 1 fc 2T HDD機械硬盤
- sdcr 1 fc 2T HDD機械硬盤
- sdcs 1 fc 2T HDD機械硬盤
- sdct 1 fc 2T HDD機械硬盤
- sdcu 1 fc 2T HDD機械硬盤
- sdcv 1 fc 2T HDD機械硬盤
- sdcw 1 fc 2T HDD機械硬盤
- sdcx 1 fc 2T HDD機械硬盤
- sdcy 1 fc 2T HDD機械硬盤
- sdcz 1 fc 2T HDD機械硬盤
- sdda 1 fc 2T HDD機械硬盤
- sddb 1 fc 2T HDD機械硬盤
- sddc 1 fc 2T HDD機械硬盤
- sddd 1 fc 2T HDD機械硬盤
- sdde 1 fc 2T HDD機械硬盤
- sddf 1 fc 2T HDD機械硬盤
- sddg 1 fc 2T HDD機械硬盤
- sddh 1 fc 2T HDD機械硬盤
- sddi 1 fc 2T HDD機械硬盤
- sddj 1 fc 2T HDD機械硬盤
- sddk 1 fc 2T HDD機械硬盤
- sddl 1 fc 2T HDD機械硬盤
- sddm 1 fc 2T HDD機械硬盤
- sddn 1 fc 2T HDD機械硬盤
- sddo 1 fc 2T HDD機械硬盤
- sddp 1 fc 2T HDD機械硬盤
- sddq 1 fc 2T HDD機械硬盤
- sddr 1 fc 2T HDD機械硬盤
- sdds 1 fc 2T HDD機械硬盤
- sddt 1