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ự:
- Built-in command của shell (ví dụ
cd) được thực thi trực tiếp bởi shell - Alias (nếu có)
- 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$PATHtheo 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:
- Terminal nhận input và gửi cho Bash
- Bash phân tích lệnh, xác định
lslà command và/homelà argument - Bash xác định
lslà chương trình trong/bin/ls - Kernel tạo process mới cho
ls lsđọc thư mục/home- 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ệnh | Mô tả | Ví dụ |
pwd | Hiển thị thư mục hiện tại | pwd – kiểm tra vị trí hiện tại trước khi thao tác |
cd | Di chuyển giữa các thư mục | cd /var/log – vào thư mục chứa log |
ls | Liệt kê file/thư mục | ls -lh – xem file kèm dung lượng và quyền |
mkdir | Tạo thư mục mới | mkdir -p data/logs – tạo cấu trúc thư mục |
touch | Tạo file rỗng | touch app.log – tạo file log |
cp | Sao chép file/thư mục | cp -r src backup – sao lưu source |
mv | Di chuyển/đổi tên | mv a.txt b.txt – đổi tên file |
rm | Xóa file/thư mục | rm -r old_logs – xóa log cũ |
ln -s | Tạo symbolic link | ln -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)
Liên kết (link)
- 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ệnh | Mô tả | Ví dụ |
cat | In toàn bộ nội dung file | cat config.yml – xem nhanh file nhỏ |
less | Đọc file theo trang | less syslog – đọc file log lớn |
head | Xem dòng đầu file | head -n 20 app.log – xem header/log đầu |
tail | Xem dòng cuối file | tail -n 50 app.log – xem log mới |
tail -f | Theo dõi log realtime | tail -f app.log – xem log khi app chạy |
grep | Tìm/lọc nội dung | grep 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:
SpacehoặcPage Down: xuống trangbhoặcPage Up: lên trang/pattern: tìm kiếm về phía trước?pattern: tìm kiếm về phía sauq: thoátg: về đầu fileG: về cuối filemore: 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ệnh | Mô tả | Ví dụ |
ps | Xem danh sách tiến trình | ps aux – xem toàn bộ process |
top | Theo dõi hệ thống realtime | top – tìm process ngốn CPU/RAM |
kill | Dừng tiến trình theo PID | kill 1234 – dừng process bị treo |
killall | Dừng tiến trình theo tên | killall nginx – dừng nginx |
df | Kiểm tra dung lượng disk | df -h – xem ổ đĩa còn trống |
du | Xem dung lượng thư mục | du -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 useru: hiển thị dạng “user-friendly”x: gồm cả tiến trình không gắn terminaltop(hoặchtopnế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ệnh | Mô tả | Ví dụ |
ping | Kiểm tra kết nối mạng | ping google.com – test internet |
traceroute | Theo dõi đường đi gói tin | traceroute google.com – debug mạng |
ifconfig | Xem cấu hình mạng | ifconfig – xem IP máy |
ssh | Đăng nhập server từ xa | ssh user@ip – truy cập VPS |
wget | Tải file từ internet | wget 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àinet-toolshoặc dùngip 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ệnh | Mô tả | Ví dụ |
ls -l | Xem quyền và owner | ls -l – kiểm tra quyền file |
chmod | Thay đổi quyền truy cập | chmod 755 script.sh – cho phép chạy script |
chown | Thay đổi chủ sở hữu | chown user:group file – gán owner |
chgrp | Thay đổi group | chgrp 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 / othershunglà 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ừ file2>: 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.

