stow 的妙用

645 阅读2分钟

GNU Stow 主要用来管理以 makefile 方式安装的程序。

原理是安装时指定 prefix 到用户管理的文件夹,stow 可以帮忙在真正的 sysroot 下建立符号链接,需要删除程序的时候就不会删错删漏了。

使用 GNU Stow 管理安装

MacOS 下安装:

brew install stow

Ubuntu 下安装:

sudo apt install stow

建立 stow 文件夹

mkdir /usr/local/stow

安装程序时:

./configure --prefix=/usr/local/stow/ruby
make
sudo make install

安装后执行映射,创建软链接:

cd /usr/local/stow
sudo stow ruby

需要卸载程序时:

cd /usr/local/stow
sudo stow --delete ruby
rm -rf ruby
使用 GNU Stow 管理linux 配置文件

例如,假设您要管理 Bash,VIM 和 Uzbl 的配置。Bash 在顶级目录中有几个文件; VIM通 常在顶级和 .vim 目录中有 .vimrc 文件; 和 Uzbl${XDG_CONFIG_HOME}/uzbl 和中有文件 ${XDG_DATA_HOME}/uzbl 。因此,您的主目录如下所示:

home/
    brandon/
        .config/
            uzbl/
                [...some files]
        .local/
            share/
                uzbl/
                    [...some files]
        .vim/
            [...some files]
        .bashrc
        .bash_profile
        .bash_logout
        .vimrc

然后,您将创建一个 dotfiles 子目录并将所有文件移动到那里:

home/
    /brandon/
        .config/
        .local/
            .share/
        dotfiles/
            bash/
                .bashrc
                .bash_profile
                .bash_logout
            uzbl/
                .config/
                    uzbl/
                        [...some files]
                .local/
                    share/
                        uzbl/
                            [...some files]
            vim/
                .vim/
                    [...some files]
                .vimrc

然后,执行以下命令:

$ cd ~/dotfiles
$ stow bash
$ stow uzbl
$ stow vim
解释:

stow 默认会在当前目录的上一级目录创建软链接,比如当前目录是 ~/dotfiles,当我们执行 stow bash 时,stow 会在创建 ~/ 目录中,为 ~/dotfiles/bash/ 中的所有文件创建软链接。如果我们不想在当前目录的上一级目录创建软链接,那么我们可以用 -t 或 --target= 来制定一个目标目录,比如:

stow -t $HOME/.config nvim
stow --target=$HOME/.config/ nvim

stow 文件冲突的问题

欲 stow 的文件目前已经存在于 target 中时,stow 会失败,此时: 使用 --override=.* 可以将强制覆盖其他 stow 包创建的符号链接 提示 "existing target is neither a link nor a directory",因为冲突的目标文件不是符号链接,只能手动删除,或者如果希望自动备份到 stow 包中(就是源)可以使用 --adopt 选项

参考来源:

brandon.invergo.net/news/2012-0… wiki.noodlefighter.com/计算机/linux/t… farseerfc.me/zhs/using-g…

全文完!

如果你喜欢我的文章,欢迎关注我的微信公众号 deliverit.