❤️ 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.

Cấu trúc thư mục Linux

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/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ẫnChức năng
/etc/nginx/nginx.confConfig chính của Nginx
/etc/ssh/sshd_configConfig SSH server (port, authentication…)
/etc/fstabCấu hình mount ổ đĩa tự động khi boot
/etc/hostsMap hostname sang IP thủ công
/etc/hostnameTên hostname của server
/etc/passwdDanh sách tất cả user trên hệ thống
/etc/crontabCron jobs của hệ thống
/etc/resolv.confCấ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ẫnChứa gì
/var/logTất cả log của hệ thống và ứng dụng
/var/wwwThư mục web mặc định (chứa source code website)
/var/cacheCache của package manager và ứng dụng
/var/libData của các service (MySQL data, Docker volumes…)
/var/mailMail queue của hệ thống
/var/spoolHà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 logNộ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.logMọi request đến web server
/var/log/nginx/error.logLỗi của Nginx
/var/log/mysql/error.logLỗi MySQL/MariaDB
/var/log/kern.logLog kernel (lỗi phần cứng, driver…)
/var/log/dmesgLog 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ẫnChứa gì
/usr/binCác lệnh người dùng (curl, git, vim, python…)
/usr/sbinCác lệnh quản trị (nginx, sshd, iptables…)
/usr/libThư viện dùng chung (shared libraries)
/usr/shareDữ liệu dùng chung (man pages, docs, icons…)
/usr/localChươ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/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/sbin thực chất là symlink trỏ đến /usr/bin/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 fileLà gì
/dev/sdaỔ đĩa thứ nhất (SATA/SAS)
/dev/sda1Phâ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/zeroNguồn byte 0 vô hạn (dùng để tạo file trống)
/dev/urandomBộ 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/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/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

UbuntuAlmaLinux
Package manageraptdnf
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 serverUbuntuAlmaLinux
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 logUbuntuAlmaLinux
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.

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Trần Thắng

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.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI