使用示例:

cd $HOME

mkdir dotfiles #这个文件夹存放你的配置文件

mv .bashrc .bash_profile dotfiles #将这两个配置文件移入dotfiles中

cd dotfiles
stow .

看看效果:

cd $HOME
ll .bashrc .bash_profile
lrwxrwxrwx orreo orreo 22 B Sun Apr 13 15:00:37 2025  .bash_profile ⇒ dotfiles/.bash_profile
lrwxrwxrwx orreo orreo 16 B Sun Apr 13 15:00:37 2025  .bashrc ⇒ dotfiles/.bashrc

迁移系统时,只需要备份dotfiles即可。
在新系统上把 dotfiles 放到 $HOME 下,然后

cd dotfiles
stow .

即可“还原”配置文件

stow . 的作用是将当前目录(.)下的软件包(指一组按照特定目录结构组织的文件)通过符号链接(symlink)的方式安装到目标目录(通常是系统的 /usr/local~/.local),从而方便管理用户或系统级的软件安装。

具体作用:

  1. 组织文件结构
    Stow 假设当前目录(比如 ./package-name)下的文件结构是目标目录(如 /usr/local)的镜像。例如:

    ./package-name/
    ├── bin/
    │   └── myapp
    ├── lib/
    │   └── libmylib.so
    └── share/
        └── doc/
            └── README

    运行 stow package-name 后,这些文件会通过符号链接映射到 /usr/local/bin/myapp/usr/local/lib/libmylib.so 等位置。

  2. 避免直接复制文件
    Stow 使用符号链接而非直接复制文件,便于后续更新或卸载(只需修改链接,无需删除实际文件)。
  3. 适用于当前目录(.
    如果直接运行 stow .,Stow 会处理当前目录下的所有子目录(每个子目录视为一个独立的软件包)。例如:

    ./
    ├── pkg1/
    ├── pkg2/
    └── pkg3/

    stow . 会同时处理 pkg1pkg2pkg3,将它们链接到目标目录。

常用选项:

示例:

# 假设当前目录是 ~/stow-packages,包含一个子目录 myapp/
cd ~/stow-packages
stow -t /usr/local .  # 将当前目录下所有包(如 myapp)链接到 /usr/local

注意事项:

了解更多:https://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html