Rust系统信息工具库uu_uname的使用,uu_uname提供跨平台获取系统名称、版本和硬件信息的命令行工具

Rust系统信息工具库uu_uname的使用

uu_uname是uutils coreutils项目的一部分,提供了一个跨平台的命令行工具,用于获取系统名称、版本和硬件信息。

uutils logo

安装

作为命令行工具安装

cargo install uu_uname

运行上述命令将全局安装uname二进制文件。

作为库安装

在项目目录中运行以下Cargo命令:

cargo add uu_uname

或者在Cargo.toml中添加:

uu_uname = "0.1.0"

基本使用示例

以下是一个使用uu_uname获取系统信息的完整示例:

use uu_uname::Uname;

fn main() {
    // 创建Uname实例
    let uname = Uname::new();
    
    // 获取系统名称
    println!("系统名称: {}", uname.system_name().unwrap_or("未知".to_string()));
    
    // 获取节点名称
    println!("节点名称: {}", uname.node_name().unwrap_or("未知".to_string()));
    
    // 获取系统版本
    println!("系统版本: {}", uname.version().unwrap_or("未知".to_string()));
    
    // 获取系统发行版
    println!("发行版: {}", uname.release().unwrap_or("未知".to_string()));
    
    // 获取机器硬件名称
    println!("硬件名称: {}", uname.machine().unwrap_or("未知".to_string()));
    
    // 获取所有信息
    match uname.all() {
        Ok(info) => {
            println!("\n完整系统信息:");
            println!("系统名称: {}", info.system_name);
            println!("节点名称: {}", info.node_name);
            println!("版本: {}", info.version);
            println!("发行版: {}", info.release);
            println!("硬件: {}", info.machine);
            println!("处理器: {}", info.processor.unwrap_or("未知".to_string()));
        }
        Err(e) => eprintln!("获取系统信息失败: {}", e),
    }
}

完整示例demo

以下是一个更完整的示例,展示了如何格式化输出和错误处理:

use uu_uname::Uname;
use std::process;

fn main() {
    // 创建Uname实例
    let uname = match Uname::new() {
        Ok(u) => u,
        Err(e) => {
            eprintln!("初始化失败: {}", e);
            process::exit(1);
        }
    };

    // 打印系统信息标题
    println!("{:=^50}", " 系统信息 ");

    // 打印各项信息
    print_info("系统名称", uname.system_name());
    print_info("节点名称", uname.node_name());
    print_info("系统版本", uname.version());
    print_info("发行版本", uname.release());
    print_info("硬件架构", uname.machine());

    // 获取所有信息
    match uname.all() {
        Ok(info) => {
            println!("\n{:=^50}", " 完整系统信息 ");
            println!("{:<15}: {}", "系统名称", info.system_name);
            println!("{:<15}: {}", "节点名称", info.node_name);
            println!("{:<15}: {}", "系统版本", info.version);
            println!("{:<15}: {}", "发行版本", info.release);
            println!("{:<15}: {}", "硬件架构", info.machine);
            println!("{:<15}: {}", "处理器", info.processor.unwrap_or("未知".to_string()));
        }
        Err(e) => {
            eprintln!("获取完整信息失败: {}", e);
        }
    }
}

// 辅助函数:打印单条信息
fn print_info(label: &str, result: Result<String, std::io::Error>) {
    match result {
        Ok(value) => println!("{:<15}: {}", label, value),
        Err(e) => println!("{:<15}: 获取失败 ({})", label, e),
    }
}

项目信息

uu_uname是uutils coreutils项目的一部分,该项目是GNU coreutils在Rust中的跨平台重新实现。


1 回复

Rust系统信息工具库uu_uname使用指南

uu_uname是一个跨平台的Rust库和命令行工具,用于获取系统名称、版本和硬件信息,类似于Unix系统中的uname命令。

功能特性

  • 跨平台支持(Linux, macOS, Windows等)
  • 获取系统内核名称
  • 获取系统主机名
  • 获取内核版本
  • 获取系统架构信息
  • 提供命令行工具和库两种使用方式

安装方法

作为命令行工具安装

cargo install uu_uname

作为库添加到项目

Cargo.toml中添加依赖:

[dependencies]
uu_uname = "0.0.4"  # 请使用最新版本

命令行使用

基本用法:

uu_uname [选项]

常用选项:

  • -a, --all:显示所有信息
  • -s, --kernel-name:显示内核名称
  • -n, --nodename:显示网络节点主机名
  • -r, --kernel-release:显示内核版本
  • -v, --kernel-version:显示内核版本详细信息
  • -m, --machine:显示机器硬件名称
  • -p, --processor:显示处理器类型
  • -i, --hardware-platform:显示硬件平台
  • -o, --operating-system:显示操作系统名称

示例:

# 显示所有信息
uu_uname -a

# 只显示内核名称和版本
uu_uname -s -r

# 显示机器硬件名称
uu_uname -m

作为库使用示例

use uu_uname::Uname;

fn main() {
    // 获取系统信息
    let info = Uname::new().unwrap();
    
    // 打印所有信息
    println!("System information:");
    println!("Kernel name: {}", info.kernel_name());
    println!("Hostname: {}", info.nodename());
    println!("Kernel release: {}", info.kernel_release());
    println!("Kernel version: {}", info.kernel_version());
    println!("Machine: {}", info.machine());
    println!("Operating system: {}", info.operating_system());
    
    // 也可以直接格式化输出
    println!("\nFormatted output:");
    println!("{}", info);
}

高级用法

自定义输出格式

use uu_uname::{Uname, Format};

fn main() {
    let info = Uname::new().unwrap();
    
    // 创建自定义格式
    let format = Format {
        kernel_name: true,
        nodename: true,
        kernel_release: false,
        kernel_version: false,
        machine: true,
        operating_system: true,
        all: false,
    };
    
    // 按自定义格式输出
    println!("Custom output: {}", info.format(format));
}

错误处理

use uu_uname::Uname;

fn main() {
    match Uname::new() {
        Ok(info) => {
            println!("System info: {}", info);
        },
        Err(e) => {
            eprintln!("Failed to get system information: {}", e);
        }
    }
}

跨平台注意事项

不同平台返回的信息可能有所差异:

  • Linux系统通常能提供所有信息
  • macOS可能缺少部分字段
  • Windows系统返回的信息格式与其他平台不同

完整示例demo

下面是一个完整的示例程序,展示了如何使用uu_uname库获取系统信息并进行格式化输出:

use uu_uname::{Uname, Format};

fn main() {
    // 获取系统信息并进行错误处理
    match Uname::new() {
        Ok(info) => {
            // 示例1:基本用法 - 打印所有系统信息
            println!("=== 基本系统信息 ===");
            println!("操作系统: {}", info.operating_system());
            println!("内核名称: {}", info.kernel_name());
            println!("主机名: {}", info.nodename());
            println!("内核版本: {}", info.kernel_release());
            println!("机器架构: {}", info.machine());
            
            // 示例2:直接格式化输出
            println!("\n=== 格式化输出 ===");
            println!("{}", info);
            
            // 示例3:自定义输出格式
            println!("\n=== 自定义输出 ===");
            let custom_format = Format {
                kernel_name: true,
                nodename: false,  // 不显示主机名
                kernel_release: true,
                kernel_version: false,
                machine: true,
                operating_system: false,
                all: false,
            };
            println!("精简信息: {}", info.format(custom_format));
            
            // 示例4:模拟uname -a的输出
            println!("\n=== 完整信息(uname -a样式) ===");
            let full_format = Format {
                all: true,  // 显示所有可用信息
                ..Default::default()
            };
            println!("{}", info.format(full_format));
        },
        Err(e) => {
            eprintln!("错误: 无法获取系统信息 - {}", e);
            std::process::exit(1);
        }
    }
}

总结

uu_uname是一个简单易用的系统信息工具,无论是作为命令行工具快速查看系统信息,还是作为库集成到Rust项目中,都能提供良好的跨平台支持。

回到顶部