hoatranlab.io.vn Zalo: 0917516878 Hotline: 0917516878 [email protected]
HoaTranLab Logo HoaTranLab
Linux Bible 11th Edition • Chapter 4

Moving Around the Filesystem

Điều hướng hệ thống file Linux: cấu trúc thư mục FHS, các lệnh điều hướng, quản lý file và thư mục, liên kết cứng và mềm.

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ụcMục đích
/binLệnh cơ bản (ls, cp, mv, cat...) cho tất cả users
/sbinLệnh quản trị hệ thống (fdisk, ifconfig, init...)
/etcFile cấu hình hệ thống và ứng dụng
/homeThư mục cá nhân của các user (/home/username)
/rootThư mục home của root user
/varDữ liệu thay đổi thường xuyên: logs, mail, spool
/tmpFile 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)
/procPseudo-filesystem: thông tin về process và kernel
/devDevice files (sda, tty, null, zero...)
/mnt, /mediaMount points cho filesystem tạm thời hoặc thiết bị ngoài
/bootKernel, initrd, GRUB bootloader files

2. Điều hướng: pwd, cd, ls

Terminal – Điều hướng cơ bản

$ 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

Terminal – Quản lý file

$ 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

Terminal – find command

$ 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).

Terminal – Hard link vs Symlink

$ 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).

Terminal – Permissions

$ 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

1

Khám phá cấu trúc thư mục

Terminal

$ 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% /

2

Tạo cấu trúc dự án

Terminal

$ 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

3

Sao chép và Di chuyển File

Terminal

$ 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

4

Tìm kiếm File với find

Terminal

$ 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

5

Tạo và kiểm tra Symbolic Link

Terminal

$ 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

6

Quản lý Permissions

Terminal

$ 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

1

Thư mục /etc dùng để lưu gì? Cho 3 ví dụ file cấu hình quan trọng.

/etc chứa file cấu hình hệ thống và ứng dụng. Ví dụ: /etc/passwd (thông tin user), /etc/hosts (ánh xạ hostname-IP), /etc/fstab (cấu hình mount filesystem), /etc/ssh/sshd_config (cấu hình SSH server).
2

Sự khác nhau giữa đường dẫn tuyệt đối và tương đối?

Đường dẫn tuyệt đối bắt đầu từ / (root): /home/chris/file.txt - luôn chỉ đúng vị trí bất kể đang ở đâu. Đường dẫn tương đối không có / ở đầu, tính từ thư mục hiện tại: ../docs/file.txt. Dấu . là thư mục hiện tại, .. là thư mục cha, ~ là home.
3

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.
4

Hard link và Symbolic link khác nhau như thế nào? Khi nào dùng cái nào?

Hard link: cùng inode, không thể cross filesystem hoặc link thư mục, vẫn hoạt động nếu file gốc bị xóa. Symlink: inode khác, có thể cross filesystem, link thư mục, bị hỏng nếu target bị xóa. Dùng symlink cho linh hoạt hơn (cross-filesystem, thư mục), hard link cho redundancy trong cùng partition.
5

Giải thích quyền -rwxr-xr-- cho file script.sh. Owner có thể làm gì?

- (regular file) | rwx (owner: read+write+execute) | r-x (group: read+execute) | r-- (others: read only). Owner (u) có thể đọc, ghi và chạy file. Group có thể đọc và chạy nhưng không sửa. Others chỉ đọc. Octal tương đương: 754.
6

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

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).
8

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.