This programming guide is only available in Vietnamese. Switch to Vietnamese to read the full article.
Bài đầu tiên trong series Bash & Shell Scripting sẽ giúp bạn hiểu rõ môi trường dòng lệnh (command line) — nền tảng cốt lõi trước khi viết bất kỳ shell script nào. Chúng ta sẽ tìm hiểu sự khác biệt giữa Terminal, Shell và Console, cách điều hướng filesystem, quản lý file và hệ thống phân quyền Unix.
1. Terminal là gì? Shell vs Terminal vs Console
Nhiều người hay nhầm lẫn giữa ba khái niệm này:
- Terminal Emulator: Là ứng dụng đồ họa (GUI) cung cấp cửa sổ để bạn tương tác với shell. Ví dụ: iTerm2 (macOS), GNOME Terminal (Linux), Windows Terminal.
-
Shell: Là chương trình thông dịch lệnh (command interpreter) chạy bên trong
terminal. Shell nhận lệnh của bạn, phân tích cú pháp và gọi hệ điều hành thực thi. Các shell phổ
biến:
bash,zsh,fish,sh. - Console: Thuật ngữ lịch sử chỉ thiết bị vật lý kết nối trực tiếp với máy tính (physical terminal). Ngày nay thường dùng thay thế cho terminal.
Nói đơn giản: bạn mở Terminal (ứng dụng), Terminal chạy Shell (bash/zsh), và bạn gõ lệnh vào Shell để điều khiển máy tính.
# Kiểm tra shell hiện tại
echo $SHELL # /bin/bash hoặc /bin/zsh
echo $BASH_VERSION # 5.2.15(1)-release
# Liệt kê tất cả shell có sẵn trên hệ thống
cat /etc/shells
# Chuyển đổi shell tạm thời
bash # chuyển sang bash
zsh # chuyển sang zsh
exit # thoát shell hiện tại, quay về shell trước
2. Cấu trúc lệnh Unix
Mọi lệnh trong Unix/Linux đều tuân theo cấu trúc chung:
# Cấu trúc: command [options] [arguments]
ls -la /home
# command = ls (liệt kê nội dung thư mục)
# options = -la (-l: dạng danh sách dài, -a: hiện file ẩn)
# argument = /home (thư mục cần liệt kê)
# Short options (viết tắt 1 ký tự, dùng dấu -)
ls -l -a -h # tách riêng
ls -lah # gộp lại (tương đương)
# Long options (viết đầy đủ, dùng --)
ls --all --human-readable
# Đọc hướng dẫn lệnh
man ls # manual page đầy đủ
ls --help # trợ giúp ngắn gọn
type ls # kiểm tra lệnh là built-in hay external
3. Điều hướng Filesystem
Hệ thống file Unix được tổ chức dạng cây thư mục bắt đầu từ thư mục gốc / (root). Các thư
mục quan trọng:
/— Thư mục gốc (root directory)/home— Thư mục chứa dữ liệu người dùng (Linux), macOS dùng/Users/etc— File cấu hình hệ thống/var— Dữ liệu thay đổi: logs, cache, spool/tmp— File tạm thời (tự xóa khi reboot)/usr/bin— Chương trình người dùng (user binaries)
# In thư mục hiện tại
pwd # /home/user (Print Working Directory)
# Di chuyển thư mục
cd /etc # đường dẫn tuyệt đối (absolute path)
cd Documents # đường dẫn tương đối (relative path)
cd ~ # về thư mục home ($HOME)
cd - # quay lại thư mục trước đó
cd .. # lên thư mục cha
cd ../.. # lên 2 cấp thư mục cha
# Liệt kê nội dung
ls # danh sách cơ bản
ls -l # dạng dài (permissions, owner, size, date)
ls -a # hiện file ẩn (bắt đầu bằng dấu .)
ls -lh # -l + human-readable size (KB, MB, GB)
ls -R # đệ quy (liệt kê cả thư mục con)
ls -lt # sắp xếp theo thời gian sửa đổi
# Cây thư mục (cần cài đặt: brew install tree / apt install tree)
tree -L 2 # hiển thị cây thư mục, sâu 2 cấp
tree -d # chỉ hiện thư mục (không hiện file)
4. Quản lý File & Thư mục
# Tạo thư mục
mkdir projects # tạo 1 thư mục
mkdir -p projects/web/src/css # tạo nested (tự tạo thư mục cha nếu chưa có)
# Tạo file rỗng / cập nhật timestamp
touch index.html
touch file1.txt file2.txt file3.txt # tạo nhiều file cùng lúc
# Sao chép
cp file1.txt backup.txt # copy file
cp -r projects/ projects_backup/ # copy thư mục (recursive)
cp -i file1.txt file2.txt # hỏi xác nhận trước khi ghi đè (-i = interactive)
# Di chuyển & đổi tên
mv old_name.txt new_name.txt # đổi tên file
mv file1.txt Documents/ # di chuyển file vào thư mục
mv *.txt archive/ # di chuyển nhiều file theo pattern
# Xóa — CẨN THẬN! Không có thùng rác (Trash)
rm file1.txt # xóa file
rm -r old_folder/ # xóa thư mục và nội dung bên trong
rm -f stubborn_file.txt # xóa không hỏi (force)
rm -rf temp/ # xóa thư mục force + recursive
# ⚠️ CẢNH BÁO: KHÔNG BAO GIỜ chạy rm -rf / hoặc rm -rf ~
# Liên kết (Links)
ln file.txt hardlink.txt # Hard link (cùng inode, cùng dữ liệu)
ln -s /path/to/file symlink.txt # Symbolic link (shortcut, trỏ đến path)
ls -l symlink.txt # hiện -> /path/to/file
5. Phân quyền & Ownership
Mỗi file/thư mục trong Unix có 3 nhóm quyền: Owner (chủ sở hữu), Group (nhóm), Others (người khác). Mỗi nhóm có 3 quyền: r (read - đọc), w (write - ghi), x (execute - thực thi).
# Đọc output ls -l:
# -rwxr-xr-- 1 user group 4096 Jun 24 10:00 script.sh
# │├─┤├─┤├─┤
# │ │ │ └── Others: r-- (chỉ đọc = 4)
# │ │ └───── Group: r-x (đọc + thực thi = 5)
# │ └───────── Owner: rwx (đọc + ghi + thực thi = 7)
# └──────────── Loại: - (file), d (directory), l (symlink)
# chmod — thay đổi quyền
chmod 755 script.sh # Owner=rwx(7), Group=r-x(5), Others=r-x(5)
chmod 644 readme.txt # Owner=rw-(6), Group=r--(4), Others=r--(4)
chmod u+x script.sh # thêm quyền execute cho Owner (symbolic)
chmod g-w file.txt # bỏ quyền write cho Group
chmod a+r public.txt # thêm quyền read cho All (owner+group+others)
chmod -R 755 my_project/ # áp dụng đệ quy cho cả thư mục
# chown — thay đổi chủ sở hữu
sudo chown newuser file.txt # đổi owner
sudo chown newuser:newgroup file.txt # đổi owner và group
sudo chown -R www-data:www-data /var/www # đệ quy
# chgrp — thay đổi nhóm
sudo chgrp developers project/
# Quyền đặc biệt
chmod u+s program # SUID: chạy với quyền owner (ví dụ: passwd)
chmod g+s shared_dir/ # SGID: file mới trong thư mục kế thừa group
chmod +t /tmp # Sticky bit: chỉ owner mới được xóa file của mình
# sudo — chạy lệnh với quyền superuser (root)
sudo apt update # ví dụ: cập nhật package list trên Ubuntu
whoami # kiểm tra user hiện tại
sudo whoami # root
6. Câu hỏi trắc nghiệm ôn tập
Trắc nghiệm 1: Quyền truy cập file
File có quyền chmod 640. Người dùng thuộc nhóm "others" có thể làm gì với file này?
Trắc nghiệm 2: Điều hướng thư mục
Bạn đang ở /home/user/projects/web. Chạy cd ../../Documents sẽ đưa bạn đến
đâu?
Trắc nghiệm 3: Hard link vs Symbolic link
Nếu bạn xóa file gốc, điều gì xảy ra với hard link và symbolic link trỏ đến file đó?
Tải file code thực hành minh họa bài học
File script tổng hợp các lệnh cơ bản terminal, điều hướng filesystem và quản lý phân quyền:
Tải về terminal_basics.sh
Comments
Bình luận