Stow ve Symlink ile Konfigurasyon Yönetimi
Stow ve Symlink ile Konfigurasyon Yönetimi
Linux kullanıcılarının en çok zamanını alan faaliyetlerin başında yeni kurulum yaptıkları tool ve editorlerin Konfigurasyonlarını yapmak gelir. Bir device (aygıt) 'tan başka bir aygıta geçtiklerinde ayarlarını da otomatik olarak taşımak isteyenler için bu yazıyı kaleme almaya karar verdim.
Bu yazı :
- Linux, Termux, MacOS gibi terminal tabanlı OS ve emulatörlerde birden çok makinede
vscode,nvim,helix,vim,fish,zsh,tmuxgibi editor ve terminal shell uygulamalarını sıkça kullananlar - Makineler arası konfigurasyon taşımaktan yorulan DevOps Geliştiricileri
- Sistem konfigurasyonlarını merak eden yazılımcılar
için kaleme alınmıştır.
Sembolik Link (Symbolic Link - Symlink) Nedir?
Linux veya diğer Unix tabanlı işletim sistemlerinde bir dizine başka bir isimle ulaşmaya olanak veren kısayol atamasına symbolic link ismi verilir. Ayrıca soft link olarak da adlandırıldığı noktalar vardır. (Bknz. Hard Link)
- Sembolik link yalnızca orjinal dosya veya klasörün sistemdeki yolunu işaret eder.
- Dosya içeriğini değil yalnızca dizin yolunu (path) gösterir.
- Orjinal dosya silinirse sembolik link ölü bir kısayol olarak kalır.
Sembolik Link Oluşturma
Sembolik link oluşturmak için aşağıdaki sözdizimi (syntax) kullanılır:
ln -s <target> <symbolic-link-path>
Örneğin aşağıdaki myfile.txt isimli dosyayı myfile-symlink.txt isimli bir yola atıyoruz:
ln -s /home/user/myfile.txt /home/myfile-symlink.txt
Aynı işlemi klasör yapıları için de kullanabiliriz:
ln -s /home/user/myfolder /home/user/myfolder-symlink
Yukarıda myfolder isimli klasörümüzü myfolder-symlink isimli klasöre atadık.
Sembolik Link Silme
Mevcut bir sembolik link normal dosya gibi silinebilir. Bu işlem orjinal dosyayı silmez ya da değiştirmez.
rm <sembolik-link>
Sembolik link ismi girilerek aşağıdaki şekilde silinir:
rm /home/user/link_dosya.txt
Hard Link
Linux tabanlı işletim sistemlerinde hard link kavramı, asıl dosyaya bağlı farklı bir yolda bulunan klon dosyaları belirtir.
- Ana dosyayla eş zamanlı olarak düzenlenen sistem yedeğidir.
- Hard link sistemlerin sembolik link sistemlerden farkı kopyalanan dizin, orjinal dosya silindiğinde dahi varlığını korur.
- Hafızada aynı
ìnodeüzerinde tutulur. - Sistemden silebilmek için tüm hard link bağlantılarını silmek gerekir.
- Hard link’ler, aynı dosya sisteminde çalışır (farklı disk bölümlerinde yapılamaz).
- Dosyanın içeriği sadece tüm hard link'ler silinince silinir.
- Bir dosyanın kaç tane hard link’i olduğunu ls -l çıktısındaki link sayısından görebilirsin.
Hard Link Oluşturma
Bir sistemde bir dosya ve buna bağlı hard link oluşturalım :
touch original.txt
ln original.txt copy.txt
Bu işlem sonrasında artık aynı inode üzerinde tutulan iki adet dosyamız var. original.txt üzerinde yapılan değişikliğe copy.txt üzerinden ulaşabilirsiniz. Buradaki dosyalardan herhangi biri silindiğinde veri diğer dosya üzerinden erişilebilir haldedir.
Hard Link Silme
original.txt ve copy.txt isimli iki dosyamız da hafızada aynı inode 'u kullandıkları için hafızadan tamamiyle silme işlemi 2 dosya da silinene kadar gerçekleşmez. Bu noktada symlink ile bir fark ortaya çıkar. symlink lerde orjinal dosya silindikten sonra symlink kopyası erişilemez olur. Çünkü inode bağlantısı olan dosya silinmiştir. Dolayısıyla sadece dosya yolu kalmıştır.
rm original.txt
rm copy.txt
Stow Nedir ?
Stow birden fazla symlink'in organize bir şekilde otomatik bağlanmasını ve çözülmesini yönetmek amacıyla kullanılan bir araçtır. Bu araç özellikle konfigürasyon dosyaları içeren dotfile yapıları ( nokta ile gizlenmiş konfigürasyon dosyaları) nı yönetmek için kullanılır.
Stow uygulamasını kullanabilmek için aşağıdaki komutu yazmanız gerekir:
sudo apt install stow
Ayrıca daha fazla bilgi için aşağıdaki web adresini ziyaret edebilirsiniz:
Stow Bağlantısı Atılması
Github üzerinden bir dotfiles yapısını indirdiniz diyelim. Aşağıdakine benzer bir dosya ağacı olduğunu düşünelim:
dotfiles/
├── bash/
│ └── .bashrc
├── nvim/
│ └── .config/nvim/init.vim
Burada aşağıdaki komut ile stow işlemi gerçekleştirebiliyoruz:
cd ~/dotfiles
stow bash
Bu komut ~/dotfiles/bash/.bashrc dosyasını ~/.bashrc olacak şekilde bir symlink oluşturur. Böylece dosya yolunu değiştirmeden başka bir konfigürasyonu sistemde deneyebilirsiniz. Artık sisteminizce .bashrc dosyasına ulaşılmak istendiğinde ~/dotfiles/bash/.bashrc dosyasına geçiş yapılır.
Bu işlem sırasında ~/dotfiles/bash/.bashrc isimli dosya sisteminizde yer alan ~/.bashrc yoluna bağlanır. Sistem tarafından .bashrc dosyasına erişilmek istendiğinde ~/dotfiles/bash/.bashrc üzerindeki dosyaya geçiş sağlanır.
Unstow Nedir?
stow yaptığınız bir dosyanın bağlantısını kesmek ve başka bir sembolik bağlantı bağlamak istiyorsunuz, bu noktada unstow işlemine ihtiyacınız olacaktır. unstow , stow kullanarak oluşturulan symlink yapılarını kaldırmak için kullanılır.
stow -D <paket-adı>
Bizim örneğimiz için yine dotfiles üzerinden ilgili klasöre ulaşıldıktan sonra aşağıdaki komut ile gerçekleşir.
cd ~/dotfiles
stow -D bash
Yukarıda gördüğünüz -D parametresi delete anlamına gelir ve oluşturulan symlink bağlantısını kaldırır. symlink yani oluşturulan sembolik link yolu (symlink path) silinirken, orjinal dosyaya dokunulmaz. Böylece symlink bağlayıp (link) , bağlantı keserek (unlink) konfigurasyon dosyalarını yönetebiliriz.
HATIRLATMA:
unstoworada symlink değil de normal bir klasör/dosya varsa dokunmaz ve uyarı verir.
Stow ile Symlink Arasındaki Farklar
| Özellik | ln -s (symlink) | stow |
|---|---|---|
| Manuel işlem | Evet | Hayır (otomatik ve sistematik) |
| Çoklu dosya yönetimi | Zor | Kolay |
| Geri alma | Zor (manuel silmen gerekir) | Kolay (stow -D ile kaldırılabilir) |
| Kapsam | Tek tek dosya | Klasör bazlı yapı |
| Kullanım Alanı | Genel amaçlı | Özellikle dotfiles ve config yönetimi |
Stow ile symlink arasındaki fark symlink işlemlerini otomatik hale getirmek ve hızlıca klasör bazında bağlantı sağlayıp bağlantıyı kopartmak için stow'un daha elverişli olmasıdır. Temelde her iki yapıyla da bu bağlantı gerçekleştirilebilse de, konfigurasyon yapıları arasında geçişlerde işlem kolaylığı ve hızlı olmasından dolayı stow tercih dilir.
Sonsöz ve Değerlendirme
Bu yazıda Linux işletim sistemi üzerinde symlink yapılarının nasıl oluşturulup nasıl yönetilebileceğini öğrendiniz. Ayrıca stow ve unstow ile dotfile yönetimine dair temel bilgi sayesinde nvim, bash,zsh,fish, vim, helix ve benzeri uygulamalar için konfigurasyon yönetimine bir adım attınız.
Yeni yazılarda buluşmak üzere. Allaha emanet olun!