使用示例:
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
),从而方便管理用户或系统级的软件安装。
具体作用:
组织文件结构:
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
等位置。- 避免直接复制文件:
Stow 使用符号链接而非直接复制文件,便于后续更新或卸载(只需修改链接,无需删除实际文件)。 适用于当前目录(
.
):
如果直接运行stow .
,Stow 会处理当前目录下的所有子目录(每个子目录视为一个独立的软件包)。例如:./ ├── pkg1/ ├── pkg2/ └── pkg3/
stow .
会同时处理pkg1
、pkg2
、pkg3
,将它们链接到目标目录。
常用选项:
-d DIR
:指定 Stow 的根目录(默认为当前目录)。-t TARGET
:指定目标目录(默认为上级目录,比如/usr/local
或~/.local
)。-n
:模拟运行(不实际操作,仅显示将要执行的动作)。-v
: verbose 模式(显示详细操作)。
示例:
# 假设当前目录是 ~/stow-packages,包含一个子目录 myapp/
cd ~/stow-packages
stow -t /usr/local . # 将当前目录下所有包(如 myapp)链接到 /usr/local
注意事项:
- 需要确保目标目录(如
/usr/local
)有写入权限。 - 卸载时用
stow -D .
删除所有符号链接。 - 如果文件冲突(目标路径已存在非链接文件),Stow 会报错,需通过
--override
或手动解决冲突。
了解更多:https://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html