Đang tải bài học…
Nội dung sẽ hiển thị khi tải xong.
Nội dung sẽ hiển thị khi tải xong.
Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.
Khi một dịch vụ lỗi, bạn cần biết tìm cấu hình ở đâu, log ở đâu, binary ở đâu và tiến trình đang thấy gì. Cây thư mục Linux có quy ước rõ ràng (FHS) nên kỹ năng này dùng được trên mọi server. Symlink và hard link xuất hiện ở khắp nơi: /etc/alternatives, unit systemd được enable, và mô hình deploy releases/ + current mà bạn sẽ dùng ở Module 04.
/proc, /sys.releases/ + current và chuyển phiên bản bằng symlink.Kernel và user space. Kernel điều khiển CPU, bộ nhớ, ổ đĩa, mạng. Chương trình của bạn chạy trong user space và chỉ nhờ kernel làm việc qua system call như open, read, write, fork. Khi một lệnh báo Permission denied, chính kernel từ chối system call đó.
Mọi thứ là file. Thiết bị (/dev/vdb), thông tin tiến trình (/proc/<PID>/), tham số kernel (/proc/sys/, /sys/) đều được trình bày như file. /proc và /sys không nằm trên ổ đĩa; kernel tạo nội dung khi bạn đọc.
| Thư mục | Chứa gì |
|---|---|
/etc | Cấu hình hệ thống, dạng text |
/usr/bin, /usr/sbin | Chương trình do package cài |
/usr/local | Phần mềm cài tay, ngoài package manager |
/opt | Ứng dụng đóng gói riêng, mỗi ứng dụng một thư mục |
/srv | Dữ liệu dịch vụ phục vụ ra ngoài |
/var/lib | Trạng thái của dịch vụ (database, backup) |
/var/log | Log dạng file |
/home, /root | Thư mục người dùng |
/tmp | File tạm, có thể bị xóa khi reboot |
/proc, /sys | Giao diện tới kernel |
Inode. Tên file chỉ là một mục trong thư mục, trỏ tới inode chứa metadata và dữ liệu. Hard link là thêm một tên trỏ tới cùng inode: hai tên ngang hàng, xóa một tên dữ liệu vẫn còn, không vượt qua filesystem khác. Symlink là một file nhỏ chứa đường dẫn: có thể trỏ sang filesystem khác, có thể "gãy" khi đích bị xóa.
uname -r
cat /proc/cpuinfo | head -5
cat /proc/meminfo | head -3
ls -l /proc/$$/exe /proc/$$/cwd
mount | grep -E ' /proc | /sys '
| Lệnh / tùy chọn | Ý nghĩa |
|---|---|
uname -r | In phiên bản kernel; -r là kernel release. |
cat ... | head -5 | Đọc file rồi chỉ hiển thị 5 dòng đầu. head -3 tương tự với 3 dòng; dạng đầy đủ là head -n 5. |
ls -l /proc/$$/exe /proc/$$/cwd | Xem hai symlink của shell hiện tại: executable và thư mục làm việc. $$ là PID của shell. |
mount | Không có đối số thì liệt kê các filesystem đang được mount. |
grep -E ' /proc | /sys ' | -E bật biểu thức chính quy mở rộng; dấu | bên trong chuỗi mẫu nghĩa là hoặc, khác dấu pipe giữa hai lệnh. |
$$ là PID của shell hiện tại. /proc/$$/exe là symlink tới chương trình shell đang chạy.
sudo install -d /opt/kdc-app/releases/v1 /opt/kdc-app/releases/v2 /opt/kdc-app/shared
echo "version=1" | sudo tee /opt/kdc-app/releases/v1/app.txt
echo "version=2" | sudo tee /opt/kdc-app/releases/v2/app.txt
echo "db_host=127.0.0.1" | sudo tee /opt/kdc-app/shared/settings.ini
install -d tạo các thư mục được liệt kê, không copy file. echo in nội dung, dấu | chuyển nội dung sang sudo tee để ghi file bằng quyền quản trị. tee không có -a sẽ ghi đè file đích.
sudo ln /opt/kdc-app/shared/settings.ini /opt/kdc-app/releases/v2/settings.ini
ls -li /opt/kdc-app/shared/settings.ini /opt/kdc-app/releases/v2/settings.ini
ln <file-nguồn> <tên-mới> tạo hard link. Khi không có -s, hai tên trỏ tới cùng inode. ls -li gộp -l (chi tiết) và -i (in số inode); đây là cách đọc các tùy chọn ngắn được viết liền nhau.
Cột đầu tiên là số inode, giống nhau ở cả hai dòng; cột link count là 2. Sửa một file rồi cat file còn lại để thấy cùng nội dung.
cd /opt/kdc-app
sudo ln -sfn releases/v1 current
cat current/app.txt
sudo ln -sfn releases/v2 current
cat current/app.txt
ls -l current
ln -sfn gộp ba tùy chọn: -s tạo symlink, -f thay tên đích đang tồn tại khi có thể, -n không đi vào thư mục được symlink đích trỏ tới. releases/v2 là đường dẫn lưu trong symlink; current là tên symlink được tạo. Kết quả ls -l current cần có current -> releases/v2.
-n thay thế chính symlink thay vì tạo link bên trong thư mục nó trỏ tới. Đổi symlink là thao tác gần như tức thời, nên đây là cách deploy và rollback phổ biến: rollback chỉ là trỏ current về bản cũ.
Symlink tương đối (releases/v2) vẫn đúng khi cả thư mục /opt/kdc-app được chuyển sang chỗ khác. Symlink tuyệt đối thì không.
stat /opt/kdc-app/current
readlink -f /opt/kdc-app/current
df -h /opt /proc
stat in metadata chi tiết của file/link. readlink -f giải toàn bộ chuỗi symlink thành đường dẫn tuyệt đối chuẩn hóa; -f ở đây không có nghĩa là ghi đè như trong ln. df xem dung lượng filesystem chứa đường dẫn; -h đổi kích thước sang đơn vị dễ đọc như MiB/GiB.
ls -l /opt/kdc-app/current
cat /opt/kdc-app/current/app.txt
ls -li /opt/kdc-app/shared/settings.ini /opt/kdc-app/releases/v2/settings.ini
ls -l xem quyền và đích symlink; ls -li thêm số inode (-i) vào định dạng chi tiết (-l) để đối chiếu hai hard link. cat in nội dung file.
Chọn server và bấm Kiểm tra kết quả.
ln -s releases/v2 current khi current đã là thư mục hoặc symlink tới thư mục: link mới bị tạo bên trong đích. Dùng ln -sfn.Invalid cross-device link. Dùng symlink.releases/ + current và rollback bằng symlink.Kiểm tra đúng đường dẫn /opt/kdc-app trước khi chạy: dữ liệu bị xóa không được chuyển vào thùng rác.
sudo rm -rf /opt/kdc-app
rm xóa file; -r xóa cả thư mục và nội dung bên trong, -f không hỏi xác nhận và không báo lỗi vì file không tồn tại. -rf là hai tùy chọn gộp lại.