Trả lời nhanh: Dotfiles là các file cấu hình cá nhân bắt đầu bằng dấu chấm trong thư mục người dùng: cấu hình shell, Git, trình soạn thảo, tmux. Đưa chúng vào một repo Git rồi cài lên máy mới bằng một lệnh, bạn có lại môi trường quen thuộc trong hai phút thay vì chỉnh tay cả buổi. Điều quan trọng nhất phải nhớ: không bao giờ đưa khóa riêng, mật khẩu hay token vào repo này, vì dotfiles là loại repo hay được để công khai.
Nhận một VPS mới, việc đầu tiên nhiều người làm là ngồi chỉnh lại shell, cài lại alias, chép lại cấu hình tmux. Làm một lần thì vui, làm lần thứ năm thì chán, và lần nào cũng quên mất vài thứ. Dotfiles biến toàn bộ chuyện đó thành một lệnh, và tiện thể cho bạn lịch sử thay đổi của chính môi trường làm việc.
Nên đưa gì vào
Những file thật sự tiết kiệm thời gian khi lên máy mới:
.bashrchoặc.zshrc, gồm alias, biến môi trường và cách hiển thị dòng nhắc..gitconfig, gồm tên, email và các lệnh tắt bạn quen dùng..tmux.conf, phím tắt và cách chia khung, xem thêm ở bài tmux..ssh/config, danh sách máy chủ để gõ một chữ là vào thẳng. Chỉ file cấu hình này thôi, không bao giờ đưa khóa riêng vào.- Cấu hình trình soạn thảo dòng lệnh bạn dùng.
- Cấu hình cá nhân cho công cụ AI, ví dụ thư mục skill riêng như nói ở bài skill dùng chung.
Ngược lại, đừng đưa vào: bất kỳ file khóa nào, file chứa token, lịch sử lệnh vì nó thường lẫn thông tin nhạy cảm, và cấu hình do máy tự sinh vốn khác nhau giữa các máy.
Cách tổ chức bằng liên kết mềm
Cách dễ hiểu và dễ sửa nhất: giữ file thật trong repo, rồi tạo liên kết từ thư mục nhà trỏ vào.
~/dotfiles/ bash/.bashrc git/.gitconfig tmux/.tmux.conf cai-dat.sh#!/usr/bin/env bash# Tao lien ket mem tu thu muc nha vao repo dotfilesset -eGOC="$(cd "$(dirname "$0")" && pwd)" for f in bash/.bashrc git/.gitconfig tmux/.tmux.conf; do dich="$HOME/$(basename "$f")" [ -e "$dich" ] && mv "$dich" "$dich.sao-luu" ln -sf "$GOC/$f" "$dich"doneecho "Xong, mo phien moi de nap cau hinh"Ưu điểm của cách này: nhìn là hiểu, sửa file ở đâu cũng như nhau vì chỉ có một bản thật, và bước sao lưu file cũ tránh cảnh xóa nhầm cấu hình sẵn có trên máy.
Cách dùng repo dạng bare
Cách gọn hơn, không cần liên kết mềm, biến thẳng thư mục nhà thành thư mục làm việc của một repo đặc biệt:
git init --bare $HOME/.dotfilesalias cauhinh='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'cauhinh config --local status.showUntrackedFiles no cauhinh add .bashrc .gitconfig .tmux.confcauhinh commit -m "cau hinh ban dau"cauhinh pushTừ đó bạn dùng cauhinh thay cho khi thao tác với dotfiles, còn thường vẫn dùng bình thường trong các dự án. Dòng showUntrackedFiles no rất quan trọng, thiếu nó thì mỗi lần xem trạng thái sẽ liệt kê toàn bộ file trong thư mục nhà.
Cách này gọn vì không có bản sao, nhưng khó hiểu hơn với người mới và dễ gây bối rối khi bạn quay lại sau vài tháng. Chọn cách nào cũng được, miễn là bạn ghi lại cách cài đặt trong file README của repo.
Xử lý khác biệt giữa các máy
Máy cá nhân và máy chủ hiếm khi cần cấu hình y hệt nhau. Cách phổ biến là tách phần chung và phần riêng:
# cuoi file .bashrc dung chung[ -f ~/.bashrc.rieng ] && source ~/.bashrc.riengFile .bashrc.rieng không nằm trong repo, chứa thứ chỉ đúng với máy đó: đường dẫn riêng, biến môi trường của dự án, tên máy hiển thị trên dòng nhắc.
Với biến môi trường chứa thông tin nhạy cảm, hãy để hẳn ngoài repo và ngoài cả thư mục dotfiles. Một dòng nhắc đáng nhớ: repo dotfiles là thứ người ta hay để công khai để chia sẻ với nhau, và nhiều vụ lộ token đã xảy ra đúng theo cách này. Trước khi đẩy lên, hãy đọc lại một lượt xem có gì không nên nằm ở đó.
Dùng cho máy chủ và cho cả đội
Khi dotfiles đã ổn định, việc dựng một VPS mới rút xuống còn ba bước: cài các gói cần dùng, clone repo dotfiles, chạy script cài đặt. Kết hợp với danh sách việc bảo mật ban đầu trong bài 12 việc sau khi nhận VPS, bạn có quy trình dựng máy lặp lại được.
Với đội nhóm, có một biến thể đáng cân nhắc: một repo dotfiles chung của công ty chứa những cấu hình nên thống nhất, ví dụ alias cho các lệnh triển khai nội bộ, còn mỗi người vẫn giữ repo riêng cho sở thích cá nhân. Ranh giới giống hệt ranh giới giữa skill chung và skill cá nhân: thứ gì làm sai gây hậu quả thì để chung, thứ gì là gu riêng thì để riêng.
Nên đưa gì vào và tuyệt đối không đưa gì
| Loại | Đưa vào kho không | Ví dụ |
|---|---|---|
| Cấu hình trình soạn thảo, vỏ dòng lệnh, công cụ | Có | Cấu hình hiển thị, phím tắt, bí danh lệnh |
| Tệp lệnh tiện ích tự viết | Có | Tệp lệnh dựng máy, tệp lệnh sao lưu |
| Khóa riêng, mật khẩu, thẻ truy cập | KHÔNG, tuyệt đối | Khóa đăng nhập máy chủ, khóa gọi dịch vụ |
| Cấu hình chứa địa chỉ máy chủ nội bộ | Cân nhắc | Nếu kho công khai thì không |
| Lịch sử lệnh | Không | Thường chứa thông tin nhạy cảm |
Đây là lỗi phổ biến nhất và hậu quả nặng nhất: đưa cấu hình đăng nhập kèm khóa riêng lên kho công khai. Các công cụ quét tự động tìm ra khóa trong vòng vài phút.
# Truoc khi day len kho, luon quetgrep -rn "BEGIN OPENSSH PRIVATE KEY\|BEGIN RSA PRIVATE KEY" . || echo "sach"grep -rn "password\|api_key\|secret\|token" . --exclude-dir=.git | head -20 # Neu lo roi: THU HOI KHOA NGAY, dung chi xoa dong do# Lich su kho van giu ban cu # Dat file loai tru ngay tu daucat > .gitignore <<'EOF'.ssh/id_**.pem*.key.env.*_history.aws/credentialsEOFTách cấu hình chung và cấu hình riêng máy
- Tách phần chung và phần riêng theo máy. Tệp cấu hình chính nạp thêm một tệp riêng nếu tệp đó tồn tại; tệp riêng không đưa vào kho.
- Phân biệt máy cá nhân và máy chủ: máy chủ không cần cấu hình giao diện, và có thể không có các công cụ bạn cài trên máy cá nhân.
- Viết một tệp lệnh cài đặt tạo các liên kết mềm và cài công cụ cần thiết. Chạy một lệnh trên máy mới là xong.
- Thử tệp lệnh đó trên một máy sạch trước khi tin dùng, vì nó thường phụ thuộc vào những thứ đã có sẵn trên máy của bạn.
Dùng cho cả đội
Với đội, tách làm hai kho: một kho chung chứa cấu hình chuẩn của công ty (bí danh lệnh, tệp lệnh tiện ích, quy ước), và mỗi người một kho riêng cho thói quen cá nhân. Kho chung có duyệt thay đổi như duyệt mã; kho riêng thì tự do. Trộn hai loại là làm kho chung phình lên và không ai muốn dùng.
Câu hỏi thường gặp
Dotfiles có nên để công khai không?
Được, và nhiều người làm vậy để tham khảo lẫn nhau. Nhưng chỉ khi bạn chắc chắn trong đó không có khóa, token hay thông tin nội bộ. Nếu không chắc, để riêng tư vẫn dùng bình thường và an toàn hơn.
Nên chọn liên kết mềm hay repo bare?
Liên kết mềm dễ hiểu và dễ sửa hơn, hợp với hầu hết mọi người. Repo bare gọn hơn vì không có bản sao nào, hợp khi bạn đã quen và muốn ít file trung gian. Cả hai đều đạt cùng kết quả.
Có nên đưa file .ssh/config vào không?
File cấu hình thì nên vì nó tiết kiệm rất nhiều thời gian gõ địa chỉ. Khóa riêng thì tuyệt đối không, kể cả trong repo riêng tư, vì khóa nên được sinh riêng trên từng máy.
Dotfiles giúp gì khi hay dựng máy chủ mới?
Rút thời gian chuẩn bị môi trường từ hàng chục phút xuống còn vài phút, và quan trọng hơn là không còn quên thứ gì. Với người thường xuyên dựng máy thử nghiệm rồi xóa, đây là khác biệt rất rõ.
