温馨提示×

如何用rust写linux程序

小樊
44
2026-09-25 10:04:54
栏目: 编程语言

用 Rust 写 Linux 程序,本质上就是在 Linux 环境下用 Rust 编写原生应用,可以覆盖从命令行工具、系统服务到底层系统编程的各种场景。下面我按“从入门到进阶”的方式给你一个清晰路线。


一、基础准备

1. 安装 Rust

在 Linux 上推荐使用官方工具:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后:

source $HOME/.cargo/env
rustc --version
cargo --version

2. 创建第一个 Linux 程序

cargo new hello_linux
cd hello_linux
cargo run

src/main.rs:

fn main() {
    println!("Hello, Linux!");
}

✅ 这已经是一个 Linux 原生可执行程序。


二、常见 Linux 程序类型

1️⃣ 命令行工具(CLI)

Rust 非常适合写 CLI。

示例:读取命令行参数

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    println!("参数: {:?}", args);
}

推荐库

  • clap:强大的命令行参数解析
  • anyhow / thiserror:错误处理
[dependencies]
clap = { version = "4", features = ["derive"] }

2️⃣ 文件与进程操作

读取文件

use std::fs;

fn main() {
    let content = fs::read_to_string("/etc/os-release").unwrap();
    println!("{}", content);
}

执行系统命令

use std::process::Command;

fn main() {
    let output = Command::new("ls")
        .arg("-l")
        .output()
        .unwrap();

    println!("{}", String::from_utf8_lossy(&output.stdout));
}

3️⃣ 系统编程(类 C 风格)

Rust 可以直接调用 Linux 系统调用。

使用 libc

[dependencies]
libc = "0.2"
use libc::{fork, getpid};

fn main() {
    unsafe {
        let pid = fork();
        if pid == 0 {
            println!("子进程 PID: {}", getpid());
        } else {
            println!("父进程 PID: {}", getpid());
        }
    }
}

⚠️ unsafe 是必须的,因为系统调用不安全。


4️⃣ 守护进程 / 系统服务

简单 daemon 思路

  • fork
  • setsid
  • 重定向标准输入输出
  • 使用 systemd

systemd 服务示例

/etc/systemd/system/myapp.service

[Unit]
Description=My Rust App

[Service]
ExecStart=/usr/local/bin/myapp
Restart=always

[Install]
WantedBy=multi-user.target

5️⃣ 网络服务(Linux 服务器程序)

TCP 服务

use std::net::TcpListener;

fn main() {
    let listener = TcpListener::bind("0.0.0.0:8080").unwrap();
    for stream in listener.incoming() {
        println!("新连接: {:?}", stream);
    }
}

常用库:

  • tokio(异步)
  • axum / actix-web(Web 服务)

三、编译为 Linux 原生二进制

cargo build --release

产物:

target/release/hello_linux

✅ 无运行时依赖(除了 libc)

可静态编译(musl):

rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl

四、Linux 特有能力

1️⃣ 信号(SIGTERM / SIGINT)

ctrlc = "3"

或自己用 libc::signal

2️⃣ 权限 / 用户

  • getuid
  • setuid
  • capabilities

3️⃣ 文件系统监控

  • inotify
  • notify crate

五、推荐学习路线

  1. ✅ Rust 基础(ownership / borrow)
  2. ✅ 标准库(fs / process / net)
  3. ✅ clap + anyhow 写 CLI
  4. ✅ libc / nix 做系统编程
  5. ✅ systemd 部署
  6. ✅ tokio 写高性能服务

六、适合 Rust 的 Linux 项目方向

  • 运维工具(替代 shell / Python)
  • 安全工具
  • 容器 / 虚拟化组件
  • 高性能网络服务
  • 嵌入式 Linux

如果你愿意,可以告诉我:

  • 你是 新手 / 有 C 经验 / 有 Python 经验
  • 想写 CLI / 守护进程 / 网络服务 / 内核相关

我可以直接给你一个可运行的完整示例工程。

0 踩