Mục Tiêu Chương 4
Cấu trúc FHS
Hiểu Filesystem Hierarchy Standard: /bin, /etc, /home, /var, /usr, /tmp, /proc, /sys và mục đích của từng thư mục.
Điều hướng cơ bản
Dùng pwd, cd, ls để điều hướng filesystem. Hiểu đường dẫn tuyệt đối và tương đối, dùng . .. ~ - trong đường dẫn.
Quản lý File
Tạo, sao chép (cp), di chuyển/đổi tên (mv), xóa (rm) file và thư mục. Tạo thư mục với mkdir và xóa với rmdir.
Tìm kiếm File
Sử dụng find với các điều kiện tìm kiếm: tên, kích thước, thời gian, loại, quyền. Dùng locate và which/whereis.
Liên kết File
Tạo hard link và symbolic link (soft link) với lệnh ln. Hiểu sự khác nhau về inode và cách hoạt động của mỗi loại.
Phân quyền File
Đọc và thay đổi quyền file (rwx) cho owner, group, others. Dùng chmod, chown, chgrp. Hiểu octal notation.
Lý Thuyết: Linux Filesystem
1. Cấu trúc thư mục FHS (Filesystem Hierarchy Standard)
Linux sử dụng cấu trúc cây thư mục bắt đầu từ root (/). FHS định nghĩa mục đích của mỗi thư mục chuẩn.
| Thư mục | Mục đích |
|---|---|
| /bin | Lệnh cơ bản (ls, cp, mv, cat...) cho tất cả users |
| /sbin | Lệnh quản trị hệ thống (fdisk, ifconfig, init...) |
| /etc | File cấu hình hệ thống và ứng dụng |
| /home | Thư mục cá nhân của các user (/home/username) |
| /root | Thư mục home của root user |
| /var | Dữ liệu thay đổi thường xuyên: logs, mail, spool |
| /tmp | File tạm thời, bị xóa khi reboot |
| /usr | Ứng dụng và dữ liệu người dùng (/usr/bin, /usr/lib) |
| /proc | Pseudo-filesystem: thông tin về process và kernel |
| /dev | Device files (sda, tty, null, zero...) |
| /mnt, /media | Mount points cho filesystem tạm thời hoặc thiết bị ngoài |
| /boot | Kernel, initrd, GRUB bootloader files |
2. Điều hướng: pwd, cd, ls
$ pwd
/home/chris
$ cd /etc
$ pwd
/etc
$ cd ..
# Lên thư mục cha
$ cd ~
# Về home directory
$ cd -
# Trở lại thư mục vừa rời
$ ls -la /etc | head -15
total 1592
drwxr-xr-x. 149 root root 8192 Jun 13 08:00 .
drwxr-xr-x. 18 root root 4096 Jan 1 2025 ..
-rw-r--r--. 1 root root 541 Mar 15 2024 fstab
3. Quản lý File: cp, mv, rm, mkdir
$ mkdir -p /tmp/project/{src,docs,tests}
# -p tạo thư mục cha nếu chưa có
$ cp /etc/hosts /tmp/hosts.bak
$ cp -r /etc/sysconfig /tmp/sysconfig_bak
# -r sao chép đệ quy thư mục
$ mv /tmp/hosts.bak /tmp/hosts.backup
# Di chuyển hoặc đổi tên file
$ rm /tmp/hosts.backup
$ rm -rf /tmp/old_folder
# -r xóa đệ quy, -f không hỏi xác nhận (CẢNH BÁO!)
$ rm -i /tmp/important.txt
# -i hỏi xác nhận trước khi xóa
4. Tìm kiếm với find
$ find /etc -name "*.conf" 2>/dev/null
/etc/resolv.conf
/etc/nsswitch.conf
$ find /home -name "*.txt" -mtime -7
# File .txt thay đổi trong 7 ngày gần nhất
$ find /var/log -size +10M -type f
# File lớn hơn 10MB trong /var/log
$ find /tmp -user chris -type f
# File thuộc sở hữu của user chris
$ find / -perm -4000 -type f 2>/dev/null
# Tìm file có setuid bit (tiềm ẩn bảo mật)
$ find /etc -name "hosts" -exec cat {} \;
# Tìm và thực thi lệnh với kết quả tìm
Hard Links, Symlinks và Permissions
5. Hard Link và Symbolic Link
Hard link là nhiều tên file trỏ đến cùng inode (không qua thư mục khác, không cross filesystem). Symbolic link (symlink) là file đặc biệt chứa đường dẫn đến file/thư mục khác (giống shortcut).
$ echo "Hello" > /tmp/original.txt
$ ln /tmp/original.txt /tmp/hardlink.txt
# Tạo hard link
$ ls -li /tmp/original.txt /tmp/hardlink.txt
12345 -rw-r--r-- 2 chris chris 6 Jun 13 /tmp/hardlink.txt
12345 -rw-r--r-- 2 chris chris 6 Jun 13 /tmp/original.txt
# Cùng inode (12345), link count = 2
$ ln -s /tmp/original.txt /tmp/symlink.txt
# Tạo symbolic link
$ ls -li /tmp/symlink.txt
99999 lrwxrwxrwx 1 chris chris 19 Jun 13 /tmp/symlink.txt -> /tmp/original.txt
# Inode khác, chữ 'l' = symbolic link
6. Phân quyền File (Permissions)
Mỗi file có 3 nhóm quyền: owner (u), group (g), others (o). Mỗi nhóm có 3 loại quyền: read (r=4), write (w=2), execute (x=1).
$ ls -l /etc/hosts
-rw-r--r-- 1 root root 174 Jan 15 2025 /etc/hosts
# -rw-r--r-- = owner:rw, group:r, others:r
$ chmod 755 script.sh
# rwxr-xr-x: owner=rwx(7), group=r-x(5), others=r-x(5)
$ chmod u+x,g-w script.sh
# Thêm execute cho owner, bỏ write của group
$ chown chris:devs file.txt
# Thay đổi owner=chris, group=devs
$ chown -R chris:devs /project/
# Thay đổi đệ quy cho cả thư mục
$ umask
0022
# umask 022 = file mới sẽ có quyền 644, dir có 755
Lab Thực Hành – Chapter 4
Khám phá cấu trúc thư mục
$ ls /
bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
$ du -sh /var/log /etc /home 2>/dev/null
44M /var/log
32M /etc
12M /home
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 15G 35G 30% /
Tạo cấu trúc dự án
$ mkdir -p ~/myproject/{src,docs,tests,config}
$ tree ~/myproject
myproject/
├── config/
├── docs/
├── src/
└── tests/
$ touch ~/myproject/src/{main.py,utils.py,config.py}
$ ls ~/myproject/src/
config.py main.py utils.py
Sao chép và Di chuyển File
$ cp /etc/hosts ~/myproject/config/
$ cp -p /etc/passwd ~/myproject/config/passwd.bak
# -p giữ nguyên timestamp và permissions
$ mv ~/myproject/config/hosts ~/myproject/config/hosts.conf
$ ls -la ~/myproject/config/
total 12
-rw-r--r-- 1 chris chris 174 Jan 15 hosts.conf
-rw-r--r-- 1 chris chris 2.1K Jan 15 passwd.bak
Tìm kiếm File với find
$ find ~/myproject -name "*.py"
/home/chris/myproject/src/main.py
/home/chris/myproject/src/utils.py
$ find /var/log -name "*.log" -size +1M
$ find /tmp -mtime +3 -delete
# Xóa file trong /tmp không dùng hơn 3 ngày
$ find ~ -empty -type f
# Tìm file trống trong home directory
Tạo và kiểm tra Symbolic Link
$ ln -s ~/myproject /tmp/project_link
$ ls -la /tmp/project_link
lrwxrwxrwx 1 chris chris 25 Jun 13 /tmp/project_link -> /home/chris/myproject
$ ls /tmp/project_link/src/
config.py main.py utils.py
$ readlink -f /tmp/project_link
/home/chris/myproject
Quản lý Permissions
$ cat > ~/myproject/deploy.sh << 'EOF'
#!/bin/bash
echo "Deploying..."
EOF
$ chmod +x ~/myproject/deploy.sh
$ ls -la ~/myproject/deploy.sh
-rwxr-xr-x 1 chris chris 36 Jun 13 deploy.sh
$ chmod 750 ~/myproject/deploy.sh
$ ls -la ~/myproject/deploy.sh
-rwxr-x--- 1 chris chris 36 Jun 13 deploy.sh
Câu Hỏi Ôn Tập – Chapter 4
Thư mục /etc dùng để lưu gì? Cho 3 ví dụ file cấu hình quan trọng.
Sự khác nhau giữa đường dẫn tuyệt đối và tương đối?
Lệnh nào tạo thư mục bao gồm cả thư mục cha nếu chưa tồn tại?
mkdir -p /path/to/deep/directory - flag -p (parents) tạo tất cả các thư mục trong đường dẫn nếu chưa tồn tại. Không có -p, nếu thư mục cha chưa có sẽ báo lỗi. Ví dụ: mkdir -p /tmp/a/b/c/d tạo cả 4 cấp.Hard link và Symbolic link khác nhau như thế nào? Khi nào dùng cái nào?
Giải thích quyền -rwxr-xr-- cho file script.sh. Owner có thể làm gì?
Lệnh find để tìm tất cả file .log trong /var lớn hơn 50MB và cũ hơn 30 ngày?
find /var -name "*.log" -size +50M -mtime +30 -type f. Giải thích: -name "*.log" khớp tên, -size +50M lớn hơn 50MB (c=bytes, k=KB, M=MB, G=GB), -mtime +30 thay đổi lần cuối hơn 30 ngày trước, -type f chỉ file thường.Dùng lệnh nào để xem disk usage của /var/log và sắp xếp từ lớn đến nhỏ?
du -sh /var/log/* | sort -rh. Hoặc chi tiết hơn: du -h /var/log/* 2>/dev/null | sort -rh | head -20. Flag -s (summary cho mỗi thư mục), -h (human-readable), sort -r (reverse/descending), -h (human-readable sizes).Lệnh cd - làm gì? Nó hữu ích trong trường hợp nào?
cd - quay trở lại thư mục vừa rời (previous working directory), lưu trong biến OLDPWD. Hữu ích khi đang làm việc ở 2 thư mục xa nhau, cần chuyển đổi qua lại nhanh chóng mà không cần gõ lại đường dẫn dài.