uname(UNIX name)命令用于显示系统信息,包括内核版本、主机名、硬件架构、操作系统名称等。它是系统管理员和开发人员了解系统基本信息的常用工具。
uname [选项]
| 选项 | 说明 |
|---|---|
-a 或 --all |
显示所有信息(等价于 -snrvm) |
-s 或 --kernel-name |
显示内核名称 |
-n 或 --nodename |
显示网络节点主机名 |
-r 或 --kernel-release |
显示内核发布版本 |
-v 或 --kernel-version |
显示内核版本 |
-m 或 --machine |
显示机器硬件名称 |
-p 或 --processor |
显示处理器类型 |
-i 或 --hardware-platform |
显示硬件平台 |
-o 或 --operating-system |
显示操作系统名称 |
--help |
显示帮助信息 |
--version |
显示命令版本信息 |
uname -a
输出示例:
Linux ubuntu-server 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# 显示内核名称
uname -s
# 输出: Linux
# 显示主机名
uname -n
# 输出: ubuntu-server
# 显示内核版本
uname -r
# 输出: 5.4.0-42-generic
# 显示硬件架构
uname -m
# 输出: x86_64
# 显示操作系统
uname -o
# 输出: GNU/Linux
# 显示内核名称和版本
uname -sr
# 输出: Linux 5.4.0-42-generic
# 显示主机名和硬件架构
uname -nm
# 输出: ubuntu-server x86_64
# 显示内核信息和操作系统
uname -srvmo
# 输出: Linux 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 GNU/Linux
| 架构标识 | 说明 | 常见设备 |
|---|---|---|
x86_64 或 amd64 |
64位x86架构 | 现代PC、服务器 |
i386、i686 |
32位x86架构 | 旧PC、部分嵌入式设备 |
arm、armv7l |
32位ARM架构 | 树莓派3、移动设备 |
aarch64、arm64 |
64位ARM架构 | 树莓派4、苹果M1、现代移动设备 |
ppc64le |
64位PowerPC小端架构 | IBM Power服务器 |
s390x |
64位IBM Z架构 | IBM大型机 |
mips、mips64 |
MIPS架构 | 路由器、嵌入式设备 |
#!/bin/bash
# 检查系统架构的脚本
ARCH=$(uname -m)
case $ARCH in
x86_64)
echo "64位 x86 架构"
;;
i386|i686)
echo "32位 x86 架构"
;;
armv7l|arm)
echo "32位 ARM 架构"
;;
aarch64|arm64)
echo "64位 ARM 架构"
;;
*)
echo "其他架构: $ARCH"
;;
esac
echo "详细信息: $(uname -a)"
#!/bin/bash
# 根据系统架构下载合适的软件包
ARCH=$(uname -m)
echo "检测系统架构..."
case $ARCH in
x86_64)
DOWNLOAD_URL="https://example.com/software/amd64.tar.gz"
;;
aarch64)
DOWNLOAD_URL="https://example.com/software/arm64.tar.gz"
;;
armv7l)
DOWNLOAD_URL="https://example.com/software/armhf.tar.gz"
;;
*)
echo "不支持的架构: $ARCH"
exit 1
;;
esac
echo "下载适用于 $ARCH 的软件包..."
wget "$DOWNLOAD_URL" -O software.tar.gz
#!/bin/bash
# 收集系统信息的脚本
INFO_FILE="/tmp/system-info-$(date +%Y%m%d).txt"
echo "=== 系统信息报告 ===" > $INFO_FILE
echo "生成时间: $(date)" >> $INFO_FILE
echo "==============================" >> $INFO_FILE
echo -e "\n1. 系统基本信息:" >> $INFO_FILE
echo "内核名称: $(uname -s)" >> $INFO_FILE
echo "主机名: $(uname -n)" >> $INFO_FILE
echo "内核版本: $(uname -r)" >> $INFO_FILE
echo "内核发布时间: $(uname -v)" >> $INFO_FILE
echo "硬件架构: $(uname -m)" >> $INFO_FILE
echo "处理器类型: $(uname -p)" >> $INFO_FILE
echo "操作系统: $(uname -o)" >> $INFO_FILE
echo -e "\n2. 完整uname信息:" >> $INFO_FILE
uname -a >> $INFO_FILE
echo -e "\n3. 其他系统信息:" >> $INFO_FILE
echo "发行版信息:" >> $INFO_FILE
lsb_release -a 2>/dev/null || cat /etc/*release 2>/dev/null | head -5 >> $INFO_FILE
echo -e "\n4. CPU信息:" >> $INFO_FILE
lscpu | head -10 >> $INFO_FILE
echo "报告已保存到: $INFO_FILE"
#!/bin/bash
# 检查内核版本并提示更新
CURRENT_KERNEL=$(uname -r)
MIN_KERNEL_VERSION="5.4.0"
echo "当前内核版本: $CURRENT_KERNEL"
echo "建议最低版本: $MIN_KERNEL_VERSION"
# 简单的版本比较
compare_versions() {
printf '%s\n%s\n' "$1" "$2" | sort -V | head -1
}
LOWER_VERSION=$(compare_versions "$CURRENT_KERNEL" "$MIN_KERNEL_VERSION")
if [ "$LOWER_VERSION" = "$CURRENT_KERNEL" ]; then
echo "⚠️ 警告: 内核版本较低,建议更新"
# 检查是否有可用的更新
if command -v apt-get &> /dev/null; then
echo "检查Ubuntu/Debian内核更新..."
apt list --upgradable 2>/dev/null | grep linux-image
elif command -v yum &> /dev/null; then
echo "检查RHEL/CentOS内核更新..."
yum check-update kernel 2>/dev/null
fi
else
echo "✅ 内核版本符合要求"
fi
Linux内核版本号通常遵循以下格式:
主版本号.次版本号.修订版本号-补丁版本号
例如:5.4.0-42-generic
# 查看/proc/version文件
cat /proc/version
# 输出: Linux version 5.4.0-42-generic (buildd@lgw01-amd64-031) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020
# 查看内核配置
uname -v
# 或查看更详细的信息
cat /proc/sys/kernel/version
| 命令 | 功能 | 特点 | 适用场景 |
|---|---|---|---|
uname |
显示内核和系统基本信息 | 快速、简单、标准 | 查看系统架构、内核版本 |
hostname |
显示或设置主机名 | 专门处理主机名 | 主机名管理 |
lsb_release |
显示发行版信息 | 提供发行版详细信息 | 查看Linux发行版 |
cat /etc/*release |
查看发行版信息文件 | 原始文件信息 | 各种发行版兼容 |
arch |
显示机器硬件架构 | 等同于uname -m | 快速查看架构 |
lscpu |
显示CPU详细信息 | 详细的CPU信息 | CPU架构和特性 |
dmesg | grep Linux |
查看启动时的内核信息 | 显示启动日志中的内核信息 | 调试内核启动问题 |
# uname - 系统基本信息
$ uname -a
Linux ubuntu-server 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# hostname - 主机名
$ hostname
ubuntu-server
# lsb_release - 发行版信息
$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
# arch - 架构信息
$ arch
x86_64
# lscpu - CPU详细信息(部分输出)
$ lscpu | head -10
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
# 安装coreutils包(通常已预装)
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install coreutils
# CentOS/RHEL
sudo yum install coreutils
# 检查命令位置
which uname
# 通常位于: /usr/bin/uname
# 检查多个架构信息命令
uname -m
arch
# 检查内核是否运行在兼容模式
cat /proc/cpuinfo | grep flags | grep lm # lm标志表示64位支持
# 检查当前运行的内核架构
getconf LONG_BIT # 显示系统位数(32或64)
# 检查是否在容器中运行
if [ -f /.dockerenv ] || grep -q docker /proc/1/cgroup 2>/dev/null; then
echo "在Docker容器中运行"
fi
# 检查多个内核信息源
uname -r
cat /proc/version
rpm -q kernel 2>/dev/null || dpkg -l | grep linux-image 2>/dev/null
# 检查已安装的内核
ls /boot/vmlinuz*
# 查看启动参数
cat /proc/cmdline
# 检查内核模块目录
ls -la /lib/modules/
/usr/bin/uname避免路径问题#!/bin/bash
# 在脚本中正确使用uname的示例
# 检查uname命令是否存在
if ! command -v uname &> /dev/null; then
echo "错误: uname命令未找到"
exit 1
fi
# 缓存系统信息
SYSTEM_KERNEL=$(uname -s)
SYSTEM_ARCH=$(uname -m)
SYSTEM_HOSTNAME=$(uname -n)
echo "系统信息:"
echo "内核: $SYSTEM_KERNEL"
echo "架构: $SYSTEM_ARCH"
echo "主机名: $SYSTEM_HOSTNAME"
# 根据架构执行不同操作
case $SYSTEM_ARCH in
x86_64)
echo "这是64位系统"
BINARY_PATH="/usr/local/bin/x86_64/app"
;;
aarch64)
echo "这是ARM64系统"
BINARY_PATH="/usr/local/bin/aarch64/app"
;;
*)
echo "不支持的架构: $SYSTEM_ARCH"
exit 1
;;
esac
# 使用缓存的信息
if [ -f "$BINARY_PATH" ]; then
echo "启动应用程序..."
"$BINARY_PATH"
else
echo "应用程序不存在: $BINARY_PATH"
fi
#!/bin/bash
# 根据系统架构自动部署对应版本的软件
# 获取系统信息
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
KERNEL=$(uname -r)
echo "检测到系统: $OS $ARCH (内核: $KERNEL)"
# 根据架构选择部署包
case $ARCH in
x86_64)
PKG_ARCH="amd64"
;;
aarch64)
PKG_ARCH="arm64"
;;
armv7l)
PKG_ARCH="armhf"
;;
*)
echo "不支持的架构: $ARCH"
exit 1
;;
esac
# 下载对应的软件包
PACKAGE_URL="https://downloads.example.com/software/${OS}/${PKG_ARCH}/app-v1.0.0.tar.gz"
echo "下载: $PACKAGE_URL"
wget -q "$PACKAGE_URL" -O /tmp/app.tar.gz
# 解压并安装
tar -xzf /tmp/app.tar.gz -C /opt/
echo "软件已安装到 /opt/app/"
#!/bin/bash
# 生成系统状态报告
REPORT_FILE="/var/log/system-report-$(date +%Y%m%d).json"
# 生成JSON格式的报告
cat > $REPORT_FILE << EOF
{
"timestamp": "$(date -Iseconds)",
"system": {
"kernel_name": "$(uname -s)",
"hostname": "$(uname -n)",
"kernel_release": "$(uname -r)",
"kernel_version": "$(uname -v)",
"machine": "$(uname -m)",
"processor": "$(uname -p)",
"operating_system": "$(uname -o)"
},
"uptime": "$(uptime -p)",
"load_average": "$(uptime | awk -F'load average:' '{print $2}')",
"memory": {
"total": "$(free -h | awk 'NR==2{print $2}')",
"used": "$(free -h | awk 'NR==2{print $3}')"
}
}
EOF
echo "系统报告已生成: $REPORT_FILE"
#!/bin/bash
# 检测运行环境:物理机、虚拟机还是容器
echo "环境检测:"
# 检查是否是容器
if [ -f /.dockerenv ] || grep -q docker /proc/1/cgroup 2>/dev/null; then
echo "环境: Docker容器"
elif [ -f /run/.containerenv ] || grep -q kubepods /proc/1/cgroup 2>/dev/null; then
echo "环境: Kubernetes容器"
elif [ -d /proc/vz ] && [ -d /proc/bc ]; then
echo "环境: OpenVZ容器"
elif [ -f /proc/xen/capabilities ]; then
echo "环境: Xen虚拟机"
elif dmesg | grep -q "Hypervisor detected"; then
echo "环境: 虚拟机"
else
echo "环境: 物理机"
fi
# 显示详细信息
echo "系统信息: $(uname -a)"
echo "内核版本: $(uname -r)"
echo "架构: $(uname -m)"
uname -srm 快速获取系统概要信息$(uname -m) 和条件判断实现跨平台脚本uname -o 检测操作系统类型uname -r | cut -d. -f1-2 获取主次版本号