❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.
Khi mới dùng VPS, mình hay gặp kiểu: “File config nginx nằm đâu?”, “Log lỗi ở chỗ nào?”, “Cài phần mềm xong nó nằm ở đâu?” Cứ phải Google từng cái một, mệt lắm.

Vấn đề không phải là bạn không biết lệnh. Vấn đề là bạn không biết file nằm ở đâu. Mà không biết file nằm đâu thì không debug được gì cả. Nginx lỗi? Bạn cần biết log nằm ở /var/log/nginx/. SSH bị chặn? Phải sửa config ở /etc/ssh/sshd_config. Disk đầy? Cần biết /var/log hay /tmp đang ngốn dung lượng.
Bài này mình sẽ đi qua toàn bộ cấu trúc thư mục trên Linux, giải thích từng thư mục quan trọng mà bạn sẽ gặp khi quản trị VPS. Áp dụng cho cả Ubuntu lẫn AlmaLinux, vì cấu trúc thư mục của Linux gần như giống nhau giữa các distro.
Thư mục gốc / là gì?
Trên Windows bạn có ổ C:\, ổ D:\. Trên Linux thì tất cả bắt đầu từ một chỗ duy nhất: thư mục gốc / (gọi là root directory).
Mọi thứ trên hệ thống, từ file config, log, chương trình đã cài, cho đến thiết bị phần cứng, đều nằm bên trong /. Không có ổ đĩa riêng kiểu Windows. Chỉ có một cây thư mục duy nhất.
Bạn có thể hình dung / giống như ngôi nhà của bạn. Trong nhà có nhiều phòng, mỗi phòng chứa đồ khác nhau:
- Phòng làm việc (
/root,/home) chứa đồ cá nhân của từng người - Tủ hồ sơ (
/etc) chứa tất cả giấy tờ, cấu hình - Kho chứa đồ (
/var) chứa những thứ thay đổi liên tục: nhật ký, hàng hóa, thùng rác - Phòng dụng cụ (
/usr,/bin) chứa công cụ bạn dùng hàng ngày - Phòng máy (
/dev,/proc) là nơi máy móc, thiết bị hoạt động
Bây giờ mình sẽ đi vào từng “phòng” một.
Từng thư mục quan trọng trên VPS
/root và /home
/root là thư mục home của user root. Khi bạn đăng nhập VPS bằng tài khoản root, bạn sẽ ở đây. File .bashrc, .ssh/authorized_keys, lịch sử lệnh (.bash_history) của root đều nằm trong này.
/home là nơi chứa thư mục cá nhân của các user khác. Ví dụ user deploy sẽ có thư mục /home/deploy, user thach sẽ có /home/thach. Mỗi user có không gian riêng, không đụng vào đồ của nhau (trừ khi bạn dùng root hoặc sudo).
# Xem thư mục home hiện tại
echo $HOME
# Liệt kê tất cả user có thư mục home
ls -la /home/
/etc, tủ hồ sơ cấu hình
Đây là thư mục bạn sẽ vào nhiều nhất khi quản trị VPS. Hầu hết mọi phần mềm trên Linux đều lưu file config ở /etc.
Một số file và thư mục quan trọng trong /etc:
| Đường dẫn | Chức năng |
|---|---|
/etc/nginx/nginx.conf | Config chính của Nginx |
/etc/ssh/sshd_config | Config SSH server (port, authentication…) |
/etc/fstab | Cấu hình mount ổ đĩa tự động khi boot |
/etc/hosts | Map hostname sang IP thủ công |
/etc/hostname | Tên hostname của server |
/etc/passwd | Danh sách tất cả user trên hệ thống |
/etc/crontab | Cron jobs của hệ thống |
/etc/resolv.conf | Cấu hình DNS resolver |
Mẹo: Khi cài một phần mềm mới (nginx, mysql, php…), việc đầu tiên là kiểm tra thư mục config của nó trong /etc. Ví dụ cài nginx xong, chạy ls /etc/nginx/ để xem có gì.
/var, kho chứa dữ liệu thay đổi
/var là viết tắt của “variable”. Thư mục này chứa dữ liệu thay đổi liên tục trong quá trình hệ thống chạy: log, cache, email queue, database…
Các thư mục con quan trọng:
| Đường dẫn | Chứa gì |
|---|---|
/var/log | Tất cả log của hệ thống và ứng dụng |
/var/www | Thư mục web mặc định (chứa source code website) |
/var/cache | Cache của package manager và ứng dụng |
/var/lib | Data của các service (MySQL data, Docker volumes…) |
/var/mail | Mail queue của hệ thống |
/var/spool | Hàng đợi cron jobs, print jobs |
/var cũng là thư mục dễ bị đầy nhất trên VPS, vì log cứ ghi liên tục, cache cứ tích lũy. Khi disk báo đầy, chỗ đầu tiên cần kiểm tra là /var.
# Xem dung lượng từng thư mục con trong /var
du -sh /var/* | sort -rh | head -10
/var/log, nơi bạn sẽ đọc nhiều nhất khi có lỗi
Thư mục này xứng đáng có mục riêng vì bạn sẽ vào đây rất thường xuyên. Mọi thứ xảy ra trên server đều được ghi log ở đây.
Các file log quan trọng:
| File log | Nội dung |
|---|---|
/var/log/syslog (Ubuntu)/var/log/messages (AlmaLinux) | Log chung của hệ thống, ghi gần như mọi thứ |
/var/log/auth.log (Ubuntu)/var/log/secure (AlmaLinux) | Log đăng nhập SSH, sudo, xác thực |
/var/log/nginx/access.log | Mọi request đến web server |
/var/log/nginx/error.log | Lỗi của Nginx |
/var/log/mysql/error.log | Lỗi MySQL/MariaDB |
/var/log/kern.log | Log kernel (lỗi phần cứng, driver…) |
/var/log/dmesg | Log boot và phần cứng |
# Xem 50 dòng cuối của syslog (Ubuntu)
tail -50 /var/log/syslog
# Xem 50 dòng cuối của messages (AlmaLinux)
tail -50 /var/log/messages
# Theo dõi log realtime (rất hữu ích khi debug)
tail -f /var/log/nginx/error.log
# Tìm lỗi SSH đăng nhập sai
grep "Failed password" /var/log/auth.log # Ubuntu
grep "Failed password" /var/log/secure # AlmaLinux
Lưu ý: Log cũ thường được nén lại thành file .gz (ví dụ syslog.1.gz, syslog.2.gz). Hệ thống tự xoay vòng log qua logrotate để tránh chiếm hết dung lượng. Nếu bạn cần đọc log cũ, dùng zcat hoặc zgrep.
/tmp, file tạm thời
/tmp là nơi các chương trình lưu file tạm trong quá trình chạy. Đặc điểm quan trọng: file trong /tmp sẽ bị xóa khi server reboot. Trên nhiều distro hiện đại, /tmp còn được mount dạng tmpfs (chạy trên RAM) nên tốc độ đọc/ghi rất nhanh nhưng bị giới hạn dung lượng.
Bạn không nên lưu gì quan trọng trong /tmp. Nhưng nếu cần một chỗ để giải nén file tạm, download file trước khi di chuyển, hay test script nhanh thì /tmp là chỗ phù hợp.
# Download file tạm vào /tmp
cd /tmp
wget https://example.com/file.tar.gz
# Giải nén, kiểm tra, rồi di chuyển đến đúng chỗ
tar xzf file.tar.gz
mv file /opt/myapp/
/usr, chương trình đã cài đặt
/usr là viết tắt của “Unix System Resources” (không phải “user” như nhiều người nghĩ). Đây là nơi chứa phần lớn chương trình đã cài qua package manager.
| Đường dẫn | Chứa gì |
|---|---|
/usr/bin | Các lệnh người dùng (curl, git, vim, python…) |
/usr/sbin | Các lệnh quản trị (nginx, sshd, iptables…) |
/usr/lib | Thư viện dùng chung (shared libraries) |
/usr/share | Dữ liệu dùng chung (man pages, docs, icons…) |
/usr/local | Chương trình cài thủ công (compile từ source) |
Khi bạn cài phần mềm bằng apt install (Ubuntu) hoặc dnf install (AlmaLinux), binary thường nằm trong /usr/bin hoặc /usr/sbin. Khi bạn tự compile từ source code, mặc định nó sẽ vào /usr/local/bin.
# Tìm xem lệnh nginx nằm ở đâu
which nginx
# Output: /usr/sbin/nginx
# Hoặc dùng whereis để tìm cả binary, source, man page
whereis nginx
# Output: nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx
/bin và /sbin
/bin chứa các lệnh cơ bản nhất mà hệ thống cần để boot và chạy: ls, cp, mv, cat, bash… /sbin tương tự nhưng chứa lệnh dành cho quản trị: fdisk, mkfs, reboot, iptables…
Trên các distro hiện đại (Ubuntu 20.04+, AlmaLinux 8+), /bin và /sbin thực chất là symlink trỏ đến /usr/bin và /usr/sbin. Hai thư mục này đã được gộp lại. Bạn không cần phân biệt quá nhiều, nhưng biết để hiểu khi đọc tài liệu cũ.
/opt, phần mềm bên thứ ba
/opt là nơi để cài phần mềm bên thứ ba mà không đi qua package manager. Ví dụ: bạn download một phần mềm monitoring, một IDE, hay một ứng dụng Java dạng standalone, thì thường đặt vào /opt.
Cấu trúc thường thấy:
/opt/
├── google/
│ └── chrome/
├── containerd/
│ └── bin/
└── myapp/
├── bin/
├── config/
└── logs/
Nếu bạn tự viết script hoặc deploy ứng dụng riêng lên VPS, /opt là chỗ hợp lý để đặt. Gọn gàng hơn so với vứt lung tung ở /home hay /root.
/dev, device files
Trên Linux, mọi thiết bị phần cứng đều được biểu diễn dưới dạng file trong /dev. Ổ cứng, phân vùng, terminal, thậm chí cả bộ tạo số ngẫu nhiên.
| Device file | Là gì |
|---|---|
/dev/sda | Ổ đĩa thứ nhất (SATA/SAS) |
/dev/sda1 | Phân vùng 1 của ổ sda |
/dev/vda | Ổ đĩa ảo (VPS dùng VirtIO) |
/dev/null | “Hố đen”, ghi vào đây là mất, dùng để bỏ output |
/dev/zero | Nguồn byte 0 vô hạn (dùng để tạo file trống) |
/dev/urandom | Bộ tạo số ngẫu nhiên |
# Xem danh sách ổ đĩa và phân vùng
lsblk
# Ví dụ chuyển hướng output vào /dev/null (bỏ đi)
command_nào_đó 2>/dev/null
/proc và /sys, hệ thống file ảo
Hai thư mục này không chứa file thật trên ổ cứng. Chúng là “cửa sổ” để bạn nhìn vào bên trong kernel và phần cứng.
/proc chứa thông tin về các tiến trình đang chạy và trạng thái hệ thống:
# Xem thông tin CPU
cat /proc/cpuinfo
# Xem dung lượng RAM
cat /proc/meminfo
# Xem uptime hệ thống
cat /proc/uptime
# Mỗi tiến trình có thư mục riêng, ví dụ PID 1234
ls /proc/1234/
/sys chứa thông tin về phần cứng và driver. Bạn ít khi cần đụng vào /sys trừ khi làm việc với driver hoặc tuning kernel. Biết nó tồn tại là đủ.
/boot, kernel và bootloader
/boot chứa kernel Linux, file initramfs (initial RAM filesystem), và cấu hình bootloader (GRUB). Đây là thứ hệ thống cần để khởi động.
# Xem nội dung /boot
ls -la /boot/
# Output thường thấy:
# vmlinuz-5.15.0-91-generic ← kernel
# initrd.img-5.15.0-91-generic ← initramfs
# grub/ ← thư mục cấu hình GRUB
Cảnh báo: Không xóa file trong /boot trừ khi bạn biết rõ mình đang làm gì. Xóa nhầm kernel đang dùng thì server sẽ không boot được. Khi cần dọn kernel cũ, dùng package manager: apt autoremove (Ubuntu) hoặc dnf remove (AlmaLinux).
/mnt và /media, điểm mount
/mnt là nơi để mount tạm các ổ đĩa, phân vùng, hoặc network share. Ví dụ khi bạn thêm ổ cứng mới vào VPS, bạn sẽ mount nó vào một thư mục con trong /mnt.
/media dùng cho thiết bị di động (USB, CD-ROM). Trên VPS thì gần như không dùng đến /media.
# Mount ổ đĩa mới vào /mnt/data
mkdir -p /mnt/data
mount /dev/sdb1 /mnt/data
# Kiểm tra mount point
df -h /mnt/data
Khác biệt giữa Ubuntu và AlmaLinux
Cấu trúc thư mục giữa Ubuntu và AlmaLinux gần như giống hệt nhau vì đều tuân theo chuẩn FHS (Filesystem Hierarchy Standard). Tuy nhiên có một số khác biệt nhỏ bạn cần biết:
Package manager
| Ubuntu | AlmaLinux | |
|---|---|---|
| Package manager | apt | dnf |
| Config repo | /etc/apt/sources.list/etc/apt/sources.list.d/ | /etc/yum.repos.d/ |
| Cache packages | /var/cache/apt/ | /var/cache/dnf/ |
Đường dẫn web server mặc định
| Web server | Ubuntu | AlmaLinux |
|---|---|---|
| Apache (document root) | /var/www/html | /var/www/html |
| Nginx (document root mặc định) | /var/www/html | /usr/share/nginx/html |
| Nginx config | /etc/nginx/sites-available//etc/nginx/sites-enabled/ | /etc/nginx/conf.d/ |
Lưu ý: Trên Ubuntu, Nginx dùng hệ thống sites-available / sites-enabled với symlink để bật/tắt site. Trên AlmaLinux thì đơn giản hơn: mọi file .conf trong /etc/nginx/conf.d/ đều được load. Cả hai cách đều hoạt động tốt, chỉ là quy ước khác nhau.
Đường dẫn log
| Loại log | Ubuntu | AlmaLinux |
|---|---|---|
| System log | /var/log/syslog | /var/log/messages |
| Authentication | /var/log/auth.log | /var/log/secure |
| Nginx/Apache | /var/log/nginx/ | /var/log/nginx/ |
| Boot log | /var/log/boot.log | /var/log/boot.log |
Cả hai distro đều dùng journalctl để xem log từ systemd. Đây là cách xem log hiện đại, không cần nhớ đường dẫn file:
# Xem log SSH
journalctl -u sshd
# Xem log nginx
journalctl -u nginx
# Xem log hệ thống 1 giờ gần nhất
journalctl --since "1 hour ago"
Lệnh điều hướng cơ bản
Biết cấu trúc thư mục rồi thì cần biết cách di chuyển. Đây là những lệnh bạn dùng hàng ngày:
pwd, bạn đang ở đâu?
# In ra thư mục hiện tại
pwd
# Output: /root
cd, di chuyển giữa các thư mục
# Đi đến thư mục cụ thể
cd /etc/nginx
# Quay về thư mục home
cd ~
# hoặc chỉ cần
cd
# Lùi lại 1 cấp
cd ..
# Quay về thư mục vừa ở trước đó
cd -
ls, liệt kê nội dung thư mục
# Liệt kê cơ bản
ls
# Liệt kê chi tiết (quyền, owner, size, ngày)
ls -la
# Liệt kê + sắp xếp theo thời gian (file mới nhất trước)
ls -lt
# Liệt kê + hiển thị dung lượng dễ đọc
ls -lh
tree, xem cấu trúc thư mục dạng cây
Lệnh tree hiển thị thư mục dạng cây trực quan, rất tiện để nắm cấu trúc một thư mục. Lệnh này thường không có sẵn, cần cài thêm:
# Cài tree
apt install tree -y # Ubuntu
dnf install tree -y # AlmaLinux
# Xem cấu trúc thư mục hiện tại, giới hạn 2 cấp
tree -L 2
# Xem cấu trúc /etc/nginx
tree /etc/nginx
Mẹo thực tế
Dùng tab completion
Đây là thói quen phải có. Khi gõ đường dẫn, nhấn phím Tab để tự động hoàn thành tên thư mục hoặc file. Ví dụ gõ cd /etc/ng rồi nhấn Tab, terminal sẽ tự hoàn thành thành cd /etc/nginx/.
Nếu có nhiều kết quả trùng, nhấn Tab 2 lần để xem danh sách gợi ý.
Tạo alias cho các đường dẫn hay dùng
Thay vì gõ cd /var/log/nginx mỗi lần, bạn có thể tạo alias trong ~/.bashrc:
# Thêm vào cuối file ~/.bashrc
alias logs='cd /var/log'
alias nginxconf='cd /etc/nginx'
alias webroot='cd /var/www/html'
# Sau đó reload
source ~/.bashrc
# Giờ chỉ cần gõ:
logs # → nhảy đến /var/log
nginxconf # → nhảy đến /etc/nginx
Tìm file nhanh với find
# Tìm file có tên chứa "nginx" trong /etc
find /etc -name "*nginx*"
# Tìm file lớn hơn 100MB trong /var
find /var -size +100M
# Tìm file được sửa trong 24 giờ qua
find /var/log -mtime -1
Checkpoint: tự kiểm tra
Thử tự trả lời và thực hiện các câu hỏi dưới đây trên VPS của bạn:
Câu 1: File config chính của Nginx nằm ở đâu? Thử mở nó ra xem.
cat /etc/nginx/nginx.conf
Câu 2: Log đăng nhập SSH nằm ở file nào? Thử xem 20 dòng cuối.
# Ubuntu
tail -20 /var/log/auth.log
# AlmaLinux
tail -20 /var/log/secure
Câu 3: Thư mục /var/log đang chiếm bao nhiêu dung lượng?
du -sh /var/log
Câu 4: Tìm tất cả file .conf trong thư mục /etc/nginx/.
find /etc/nginx -name "*.conf"
Câu 5: Dùng lệnh tree để xem cấu trúc thư mục /etc/nginx (nhớ cài tree trước nếu chưa có).
tree /etc/nginx
Nếu bạn trả lời được hết mà không cần tra cứu, bạn đã nắm vững cấu trúc thư mục Linux rồi. Trong các bài tiếp theo, mình sẽ dùng các đường dẫn này liên tục, nên hãy chắc là bạn quen tay với chúng.
Có thể bạn cần xem thêm
- Quản lý file và thư mục trên Linux - Lệnh cơ bản cho VPS
- Quản lý disk trên Linux VPS - kiểm tra dung lượng, mount, lsblk, fdisk và mở rộng ổ đĩa
- Quyền file và thư mục trên Linux - chmod, chown và rwx
- Đọc log hệ thống trên Linux VPS - journalctl và /var/log
- User và Permission nâng cao trên Linux VPS - Least Privilege
- Troubleshooting VPS Linux - Cách xủ lý sự cố VPS phổ biến
Về tác giả
Trần Thắng
Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.