Linux Command: Hướng dẫn sử dụng bộ lệnh Linux cơ bản

Linux command line là một trong những công cụ mạnh mẽ nhất mà hệ điều hành Linux mang lại. Thông qua các command, người dùng có thể quản lý file, hệ thống, mạng, quyền truy cập và tự động hóa công việc một cách nhanh chóng và chính xác.

Đọc bài viết này để hiểu rõ hơn về:

  • Linux command là gì?
  • Linux thực thi một command như thế nào?
  • Cách sử dụng các lệnh linux căn bản
  • Kinh nghiệm sử dụng Linux command hiệu quả

Linux command là gì?

Trong hệ điều hành Linux, command (lệnh) là cách phổ biến và trực tiếp nhất để người dùng giao tiếp với hệ điều hành. Thông qua command-line interface (CLI) hoặc terminal, người dùng có thể quản lý file, user, tiến trình, mạng, cài đặt phần mềm và kiểm soát gần như mọi khía cạnh của hệ thống. Thay vì thao tác bằng giao diện đồ họa, Linux cho phép bạn ra lệnh bằng văn bản, giúp thao tác nhanh, chính xác và dễ tự động hóa. 

Về bản chất, một Linux command có thể là một chương trình thực thi (như ls, cp, rm), một built-in command của shell (như cd, export) hoặc một script do người dùng viết.

Linux thực thi một command như thế nào?

Quá trình thực thi một command trong Linux có thể hiểu theo các bước sau:

Bước 1:

Người dùng nhập lệnh trong terminal: user gõ lệnh vào terminal (ví dụ: ls -l /home). Terminal chỉ đóng vai trò là công cụ nhập/xuất, nó không xử lý lệnh mà chuyển nội dung này cho shell (thường là Bash trên hầu hết các hệ thống Linux).

Bước 2:

Shell phân tích lệnh (parsing): Ví dụ một Shell Bash sẽ:

  • Tách lệnh thành command và các option/argument,
  • Xử lý biến môi trường (như $HOME, $PATH),
  • Xử lý wildcard (*, ?, []),
  • Kiểm tra redirect (>, <, |) và pipe.

Bước 3:

Xác định loại command: Shell sẽ kiểm tra theo thứ tự:

  1. Built-in command của shell (ví dụ cd)  được thực thi trực tiếp bởi shell
  2. Alias (nếu có)
  3. File thực thi trong các thư mục được khai báo trong biến $PATH
    Shell sẽ tìm kiếm từng thư mục trong $PATH theo thứ tự cho đến khi tìm thấy file thực thi phù hợp. Nếu không tìm thấy command hợp lệ, shell sẽ báo lỗi command not found.

Bước 4:

Tạo process và gọi kernel: Khi command là một chương trình thực thi, shell sẽ tạo một process mới bằng fork()  để tạo một bản sao của chính nó, yêu cầu kernel chạy chương trình đó bằng exec() để thay thế process con bằng chương trình mới. Từ thời điểm này, Linux kernel chịu trách nhiệm cấp CPU, cấp bộ nhớ, quản lý I/O và theo dõi tiến trình.

Bước 5:

Thực thi và trả kết quả: Chương trình chạy xong sẽ trả output về terminal và trả exit code (0 = thành công, khác 0 = lỗi). Sau đó, Shell sẽ hiển thị kết quả cho người dùng và sẵn sàng nhận lệnh tiếp theo.

Giả sử ta chạy lệnh:

ls /home

Linux sẽ xử lý như sau:

  1. Terminal nhận input và gửi cho Bash
  2. Bash phân tích lệnh, xác định ls là command và /home là argument
  3. Bash xác định ls là chương trình trong /bin/ls
  4. Kernel tạo process mới cho ls
  5. ls đọc thư mục /home
  6. Kết quả được trả về terminal và hiển thị ra màn hình

Cấu trúc Linux command cơ bản

Nếu coi Linux như một “xưởng máy”, thì command line là bảng điều khiển, còn Linux commands là những nút bấm/đòn bẩy giúp bạn thao tác với file, tiến trình, mạng, quyền truy cập…

Các lệnh thường có dạng như sau:

command [options] [arguments]

Trong đó:

  • command: tên lệnh (vd: ls, cp, ps)
  • options: tuỳ chọn, thường bắt đầu bằng - hoặc -- (vd: -l, --human-readable)
  • arguments: đối tượng tác động (file, thư mục, IP, service…)

Linux command: Lệnh làm việc với hệ thống file 

Đây là nhóm lệnh bạn dùng mỗi ngày: đi lại giữa thư mục, xem danh sách file, tạo/sao chép/di chuyển/xóa, tạo link…

LệnhMô tảVí dụ
pwdHiển thị thư mục hiện tạipwd – kiểm tra vị trí hiện tại trước khi thao tác
cdDi chuyển giữa các thư mụccd /var/log – vào thư mục chứa log
lsLiệt kê file/thư mụcls -lh – xem file kèm dung lượng và quyền
mkdirTạo thư mục mớimkdir -p data/logs – tạo cấu trúc thư mục
touchTạo file rỗngtouch app.log – tạo file log
cpSao chép file/thư mụccp -r src backup – sao lưu source
mvDi chuyển/đổi tênmv a.txt b.txt – đổi tên file
rmXóa file/thư mụcrm -r old_logs – xóa log cũ
ln -sTạo symbolic linkln -s /var/log/app.log app.log – tạo shortcut

Điều hướng & xác định vị trí

  • pwd: cho biết bạn đang đứng ở đâu (đường dẫn hiện tại).
pwd
  • cd: di chuyển giữa các thư mục.
cd /var/log  # Di chuyển vào thư mục /var/log
cd ..        # lùi 1 cấp
cd ~         # về home d
cd -         # quay lại thư mục trước đó

Liệt kê & quan sát file/thư mục với ls

ls
ls -l        # hiển thị metadata mà filesystem đang lưu (permissions, owner/group, mtime...
ls -a        # hiện cả file ẩn (bắt đầu bằng .)
ls -lh       # size dễ đọc (KB/MB/GB)

Tạo thư mục / file rỗng

  • mkdir: tạo thư mục.
mkdir logs
mkdir -p a/b/c   # tạo cả cây thư mục nếu chưa có
  • touch: tạo file rỗng hoặc cập nhật timestamp file.
touch app.log

Sao chép / di chuyển / đổi tên

  • cp: sao chép file/thư mục.
cp a.txt b.txt
cp -r src/ backup/     # copy thư mục
cp -i a.txt b.txt      # hỏi trước khi ghi đè
  • mv: di chuyển hoặc đổi tên.
mv old.txt new.txt           # đổi tên
mv build/ /tmp/build/      # di chuyển

Xoá file/thư mục với rm

rm a.txt
rm -r folder/     # xóa thư mục + nội dung
rm -rf folder/    # cưỡng bức (rất nguy hiểm nếu gõ nhầm)
  • Tạo link với ln:
ln -s /var/log/nginx/access.log nginx-access.log
  • Symbolic link (-s) giống shortcut: trỏ tới đường dẫn.
  • Hard link (không -s) trỏ tới cùng inode với file gốc. File chỉ thực sự bị xóa khi không còn hard link nào trỏ tới nó. Hard link không thể tạo cho thư mục và không thể vượt qua ranh giới filesystem.

Linux command: Lệnh đọc nội dung file

Là nhóm lệnh giúp bạn xem nhanh nội dung file, đọc file lớn theo từng trang và lọc thông tin cần thiết, đặc biệt hữu ích khi debug log hoặc kiểm tra cấu hình.

LệnhMô tảVí dụ
catIn toàn bộ nội dung filecat config.yml – xem nhanh file nhỏ
lessĐọc file theo trangless syslog – đọc file log lớn
headXem dòng đầu filehead -n 20 app.log – xem header/log đầu
tailXem dòng cuối filetail -n 50 app.log – xem log mới
tail -fTheo dõi log realtimetail -f app.log – xem log khi app chạy
grepTìm/lọc nội dunggrep error app.log – lọc dòng lỗi

Đọc toàn bộ (nhanh nhưng có thể “tràn màn hình”)

  • cat: in toàn bộ nội dung ra terminal, phù hợp khi dùng file nhỏ.
cat config.json

Đọc theo trang (khuyên dùng)

  • less: đọc nội dung theo trang, cuộn lên/xuống, tìm kiếm, phù hợp với file log lớn.
less /var/log/syslog

Các phím tắt trong less:

  • Space hoặc Page Down: xuống trang
  • b hoặc Page Up: lên trang
  • /pattern: tìm kiếm về phía trước
  • ?pattern: tìm kiếm về phía sau
  • q: thoát
  • g: về đầu file
  • G: về cuối file
  • more: tương tự less nhưng ít tính năng hơn (chỉ cuộn xuống, không cuộn lên).

Xem đầu/cuối file

  • head: xem vài dòng đầu.
head -n 20 app.log
  • tail: xem vài dòng cuối.
tail -n 50 app.log
tail -f app.log     # “follow” log theo thời gian thực

Tìm kiếm theo mẫu

  • grep: lọc dòng chứa chuỗi/mẫu.
grep "ERROR" app.log
grep -n "ERROR" app.log     # kèm số dòng
grep -i "error" app.log     # không phân biệt hoa thường
grep -r "TODO" src/         # tìm đệ quy trong thư mục

Kết hợp pipe để đọc “thông minh”

  • Ví dụ ta xem 200 dòng cuối log rồi lọc error:
tail -n 200 app.log | grep -i "error"

Linux command: Lệnh quản lý hệ thống 

Nhóm này tập trung vào việc xem tiến trình, dừng tiến trình, theo dõi tài nguyên, quản lý dịch vụ và xem thông tin hệ thống.

LệnhMô tảVí dụ
psXem danh sách tiến trìnhps aux – xem toàn bộ process
topTheo dõi hệ thống realtimetop – tìm process ngốn CPU/RAM
killDừng tiến trình theo PIDkill 1234 – dừng process bị treo
killallDừng tiến trình theo tênkillall nginx – dừng nginx
dfKiểm tra dung lượng diskdf -h – xem ổ đĩa còn trống
duXem dung lượng thư mụcdu -sh /var/log – kiểm tra log chiếm disk

Xem tiến trình

  • ps: chụp nhanh danh sách tiến trình.
ps aux
  • a: tiến trình của mọi user
  • u: hiển thị dạng “user-friendly”
  • x: gồm cả tiến trình không gắn terminal
  • top (hoặc htop nếu có): xem realtime CPU/RAM theo tiến trình.
top

Dừng tiến trình 

  • kill: dừng theo PID.
kill 1234
kill -9 1234   # cưỡng bức (SIGKILL) – dùng khi “cứng đầu”
  • killall: dừng theo tên tiến trình.
killall nginx

Quản lý dịch vụ

Tuỳ distro/hệ thống init, nhưng phổ biến bạn sẽ gặp:

  • service (cách cổ điển/compat):
sudo service nginx status
sudo service nginx restart
  • Nếu dùng systemd, thường là systemctl (ta có thể dành 1 mục riêng trong bài):
sudo systemctl status nginx
sudo systemctl restart nginx

Thông tin hệ thống & dung lượng

  • uname -a: thông tin kernel/OS.
  • df -h: dung lượng các filesystem.
  • du -sh <path>: dung lượng thư mục (hữu ích để tìm “thủ phạm” đầy disk).

Linux command: Lệnh về mạng

LệnhMô tảVí dụ
pingKiểm tra kết nối mạngping google.com – test internet
tracerouteTheo dõi đường đi gói tintraceroute google.com – debug mạng
ifconfigXem cấu hình mạngifconfig – xem IP máy
sshĐăng nhập server từ xassh user@ip – truy cập VPS
wgetTải file từ internetwget url – tải source/tool

Kiểm tra kết nối

Kiểm tra với ping xem máy đích có phản hồi không:

ping -c 4 8.8.8.8

Trace đường đi

  • traceroute: xem các “hop” từ máy bạn tới đích.
traceroute google.com

Xem thông tin interface/IP

  • ifconfig (trên nhiều máy mới có thể cần cài net-tools hoặc dùng ip a):
ifconfig

ssh và tải file

  • ssh: đăng nhập máy chủ từ xa.
ssh user@1.2.3.4
ssh -i ~/.ssh/id_rsa user@1.2.3.4
  • wget: tải file qua HTTP/HTTPS.
wget https://example.com/file.zip

Linux command: Lệnh Permissions và ownership

LệnhMô tảVí dụ
ls -lXem quyền và ownerls -l – kiểm tra quyền file
chmodThay đổi quyền truy cậpchmod 755 script.sh – cho phép chạy script
chownThay đổi chủ sở hữuchown user:group file – gán owner
chgrpThay đổi groupchgrp dev app.log – đổi group quản lý

Đọc output ls -l

Ví dụ ta có:

-rw-r----- 1 hung developers  1200 Jan 12 10:00 app.log

Trong đó:

  • -rw-r----- là quyền: owner / group / others
  • hung là owner, developers là group

Đổi quyền – chmod

Thường có 2 cách như sau:

  • Dạng số (rwx = 4/2/1):
    • 7 = rwx, 6 = rw-, 5 = r-x, 4 = r–
chmod 644 app.log      # owner rw, group r, others r
chmod 755 script.sh    # owner rwx, group rx, others rx
  • Dạng ký hiệu:
chmod u+x script.sh    # thêm quyền execute cho owner
chmod g+w app.log      # thêm quyền write cho group
chmod o-r secret.txt   # bỏ quyền read của others

Đổi chủ sở hữu - chown

  • Đổi owner:
sudo chown hung app.log
  • Đổi owner và group:
sudo chown hung:developers app.log
  • Áp dụng đệ quy cho cả thư mục:
udo chown -R hung:developers /project

Kinh nghiệm sử dụng Linux command hiệu quả

Luôn kiểm tra kỹ lệnh trước khi chạy

Luôn dành thời gian để đọc lại lệnh trước khi thực thi, đặc biệt là kiểm tra lại đường dẫn,  các option và những lệnh như rm, mv, cp -r, chown có thể tác động đến nhiều file hoặc cả thư mục. Một cách an toàn là thử bằng ls hoặc thêm tùy chọn xác nhận (-i) để chắc chắn lệnh đang nhắm đúng đối tượng.

rm -i file.txt          # Hỏi trước khi xóa
cp -i source dest      # Hỏi trước khi ghi đè
mv -i old new          # Hỏi trước khi ghi đè

Hạn chế sử dụng quyền root, ưu tiên sudo khi cần thiết

Root có toàn quyền trên hệ thống nên một sai sót nhỏ cũng có thể gây hậu quả lớn. Thay vì đăng nhập trực tiếp bằng root, hãy làm việc với user thường và chỉ dùng sudo cho các thao tác cần quyền cao. Cách này giúp giảm rủi ro và phù hợp với cách Linux được thiết kế.

Lưu ý: Không bao giờ chạy sudo rm -rf / hoặc các lệnh tương tự vì có thể xóa toàn bộ hệ thống và hãy luôn kiểm tra đường dẫn kỹ lưỡng trước khi chạy lệnh với quyền root.

Thực hiện lệnh theo từng bước nhỏ, dễ kiểm soát

Với các tác vụ phức tạp, đừng vội chạy một lệnh dài ngay từ đầu mà hãy chia nhỏ thành xem dữ liệu trước, lọc thử, kiểm tra kết quả rồi mới thực hiện bước tiếp theo. Điều này đặc biệt quan trọng khi xử lý log, file số lượng lớn hoặc dữ liệu nhạy cảm. Ví dụ:

# Thay vì chạy ngay lệnh dài:
grep "ERROR" app.log | awk '{print $2}' | sort | uniq -c | sort -rn | head -10

# Hãy làm từng bước:
grep "ERROR" app.log                    # Bước 1: Xem có bao nhiêu ERROR
grep "ERROR" app.log | awk '{print $2}' # Bước 2: Kiểm tra cột 2 có đúng không
# ... và tiếp tục từng bước

Sử dụng pipe và redirect một cách có chủ đích

Pipe (|) giúp kết nối nhiều lệnh với nhau, nhưng cũng khiến lệnh trở nên khó đọc và khó debug nếu dùng quá nhiều. Khi redirect output ra file, hãy phân biệt rõ giữa > (ghi đè) và >> (ghi thêm) để tránh mất dữ liệu ngoài ý muốn.

  • >: ghi đè file (overwrite) – nguy hiểm, có thể mất dữ liệu cũ
  • >>: ghi thêm vào cuối file (append) – an toàn hơn
  • <: đọc input từ file
  • 2>: redirect stderr (lỗi)
  • 2>&1: redirect stderr vào stdout

Ví dụ:

ls > output.txt         # Ghi đè file (mất dữ liệu cũ nếu có)
ls >> output.txt        # Ghi thêm vào cuối file (an toàn hơn)
command 2> error.log    # Chỉ lưu lỗi vào file
command > output.log 2>&1    # Lưu cả output và lỗi vào file

Các câu hỏi thường gặp về Linux command

Linux command có dùng được trên macOS không?

Có, phần lớn Linux command cơ bản dùng được trên macOS vì macOS được xây dựng trên nền tảng Unix (BSD). Các lệnh quen thuộc như ls, cd, pwd, cat, grep, chmod, ssh… đều hoạt động tương tự trên macOS. Tuy nhiên, một số lệnh hoặc tuỳ chọn có thể khác nhẹ về cú pháp (ví dụ sed, ps, top) do macOS dùng BSD tools thay vì GNU tools.

Ngoài ra, bạn có thể cài thêm GNU tools thông qua Homebrew để hành vi giống Linux hơn.

Ví dụ sự khác biệt:

# Linux (GNU):
ps aux                        # Hiển thị tất cả process
sed -i 's/old/new/g' file     # Sửa file tại chỗ

# macOS (BSD):
ps aux                        # Vẫn dùng được
sed -i '' 's/old/new/g' file  # Cần thêm '' (empty string) sau -i

Ngoài ra, bạn có thể cài thêm GNU tools thông qua Homebrew để hành vi giống Linux hơn:

brew install coreutils
brew install gnu-sed

Lưu ý: Trên Windows, bạn có thể sử dụng WSL (Windows Subsystem for Linux) để chạy Linux commands trong môi trường Linux thực sự, hoặc sử dụng Git Bash (một phần của Git for Windows) để có một số lệnh cơ bản tương tự.

Lệnh Linux có giống nhau giữa các distro không?

Về cơ bản, các lệnh cốt lõi là giống nhau trên hầu hết các distro Linux vì chúng tuân theo chuẩn POSIX. Những lệnh như ls, cp, mv, rm, ps, grep, chmod gần như không đổi. Sự khác biệt chủ yếu nằm ở trình quản lý gói (apt, dnf, yum, pacman), hệ thống init (systemctl với systemd) và một số tuỳ chọn nâng cao của lệnh.

Vì vậy, nếu bạn nắm vững command cơ bản, việc chuyển giữa các distro sẽ không gặp nhiều khó khăn.

Khi nào nên dùng terminal thay vì giao diện đồ họa?

Terminal phù hợp khi bạn cần thao tác nhanh, lặp lại nhiều lần, làm việc trên server không có GUI hoặc viết script tự động. Với các tác vụ quản trị hệ thống và debug, command line thường hiệu quả hơn GUI.

Vì sao cùng một lệnh nhưng kết quả trên hai máy lại khác nhau?

Nếu cùng một lệnh nhưng kết quả trên hai máy lại khác nhau thì nguyên nhân thường do:

  • Khác distro hoặc phiên bản hệ điều hành
  • Khác phiên bản tool (GNU vs BSD)
  • Khác quyền user hoặc biến môi trường (PATH, LANG)

Tổng kết

Linux command không chỉ là tập hợp các câu lệnh rời rạc, mà là một cách làm việc hiệu quả với hệ điều hành. Khi hiểu được cách lệnh được shell và kernel xử lý, bạn sẽ sử dụng command-line một cách chủ động hơn, tránh được nhiều lỗi phổ biến và debug hệ thống dễ dàng hơn.

TÁC GIẢ
Mỹ Duyên
Mỹ Duyên

Content Writer

Là cử nhân ngành Data Science, Duyên có hơn 1 năm kinh nghiệm nghiên cứu trong ngành Data và tập trung vào AI, phân tích dữ liệu. Thông qua những bài viết từ cơ bản đến nâng cao thuộc lĩnh vực cơ sở dữ liệu, Duyên mang đến cho độc giả những cái nhìn toàn diện và mới mẻ về thế giới công nghệ thông tin và dữ liệu.