GNU Stow를 사용한 Dotfiles 관리 방법¶
GNU Stow는 심볼릭 링크를 생성하여 dotfiles를 효율적으로 관리할 수 있는 도구입니다. 홈 디렉토리를 깔끔하게 유지하면서 Git으로 설정 파일들을 버전 관리할 수 있습니다.
적용 범위와 안전 기준¶
- 범위: GNU Stow version, stow directory, target directory, shell expansion, filesystem와 existing symlink·file 상태를 기록합니다. 다른 symlink manager의 semantics와 혼용하지 않습니다.
- 전제: package tree와 target의 상대 경로를 먼저 계산하고 기존 dotfile, secret, generated file와 host-specific setting을 분리합니다. Git에 secret을 포함하지 않습니다.
- 사실과 추론: dry-run 결과, symlink target과 conflict message는 근거이고, “깔끔함·효율성·이식성”은 repository 구조와 host 차이에 따른 설계 판단입니다.
- 실패·완료: 기존 file 덮어쓰기, dangling/link loop, 잘못된 target, permission과 unstow 후 잔존 link를 시험합니다. link가 예상 source로 해석되고 application이 읽으며 unstow·rollback이 성공할 때 완료입니다.
Stow의 동작 원리¶
Stow는 package tree를 target tree에 대응하는 symlink로 관리합니다. default target은 실행 위치와 stow directory 해석에 따라 보통 상위 directory가 되므로 실제 dry-run 결과와 --target을 확인합니다.
stow vim을 실행하면 ~/.vimrc → ~/dotfiles/vim/.vimrc 심볼릭 링크가 생성됩니다.
설치¶
# Arch Linux
sudo pacman -S stow
# Ubuntu/Debian
sudo apt install stow
# Fedora
sudo dnf install stow
# macOS
brew install stow
기본 사용법¶
1. Dotfiles 디렉토리 구조 생성¶
2. 기존 설정 파일 이동¶
# 기존 설정 파일을 stow 구조로 이동
mv ~/.vimrc ~/dotfiles/vim/
mv ~/.bashrc ~/dotfiles/bash/
mv ~/.gitconfig ~/dotfiles/git/
mv ~/.config/nvim ~/dotfiles/nvim/.config/
3. Stow로 심볼릭 링크 생성¶
cd ~/dotfiles
# 개별 패키지 적용
stow vim
stow bash
stow git
# 여러 패키지 한 번에 적용
stow vim bash git tmux
# 모든 패키지 적용
stow */
4. 심볼릭 링크 제거¶
5. 재적용 (업데이트)¶
실전 디렉토리 구조 예제¶
~/dotfiles/
├── bash/
│ ├── .bashrc
│ └── .bash_profile
├── vim/
│ └── .vimrc
├── nvim/
│ └── .config/
│ └── nvim/
│ ├── init.vim
│ └── lua/
│ └── plugins.lua
├── tmux/
│ └── .tmux.conf
├── git/
│ ├── .gitconfig
│ └── .gitignore_global
├── zsh/
│ ├── .zshrc
│ └── .zsh_aliases
└── ssh/
└── .ssh/
└── config
Git으로 버전 관리¶
cd ~/dotfiles
git init
git add .
git commit -m "Initial dotfiles commit"
# 원격 저장소에 푸시
git remote add origin [email protected]:username/dotfiles.git
git push -u origin main
새 시스템에 dotfiles 배포¶
# 1. 저장소 클론
cd ~
git clone [email protected]:username/dotfiles.git
# 2. 기존 설정 파일 백업 (필요시)
mkdir ~/dotfiles-backup
mv ~/.bashrc ~/dotfiles-backup/
mv ~/.vimrc ~/dotfiles-backup/
# 3. Stow 적용
cd ~/dotfiles
stow */
# 또는 선택적으로
stow bash vim git tmux
고급 사용법¶
타겟 디렉토리 지정¶
시뮬레이션 모드¶
충돌 처리¶
.stow-local-ignore 파일¶
특정 파일을 스토우에서 제외:
실용적인 팁¶
1. 호스트별 설정 분리¶
~/dotfiles/
├── bash-common/
│ └── .bashrc
├── bash-work/
│ └── .bashrc_work
└── bash-personal/
└── .bashrc_personal
2. Makefile로 자동화¶
# ~/dotfiles/Makefile
.PHONY: install uninstall
install:
stow bash vim git tmux nvim
uninstall:
stow -D bash vim git tmux nvim
restow:
stow -R bash vim git tmux nvim
사용: make install
3. 설치 스크립트¶
#!/bin/bash
# ~/dotfiles/install.sh
packages=(bash vim git tmux nvim zsh)
for package in "${packages[@]}"; do
echo "Stowing $package..."
stow -R "$package"
done
echo "Dotfiles installation complete!"
주의사항¶
- 기존 파일 백업: Stow 실행 전 기존 설정 파일을 백업하세요
- 디렉토리 구조: Stow 디렉토리 내 구조가 홈 디렉토리 구조와 정확히 일치해야 합니다
- 심볼릭 링크 확인:
ls -la ~명령으로 링크가 올바르게 생성되었는지 확인하세요 - 충돌 해결: 기존 파일과 충돌 시
--adopt옵션 사용 또는 수동 제거 필요