Linux là hệ điều hành mạnh mẽ, ổn định và được dùng rất nhiều trong lập trình, quản trị server, DevOps, bảo mật, cloud, container và cả máy tính cá nhân. Muốn dùng Linux hiệu quả, bạn nên nắm được các lệnh Linux cơ bản trong Terminal.
Bài viết này tổng hợp hơn 150 câu lệnh Linux thông dụng nhất, có giải thích ngắn gọn và ví dụ dễ hiểu. Bạn có thể dùng bài này như một “cheat sheet” để tra cứu nhanh khi làm việc với Ubuntu, Debian, Linux Mint, Fedora, CentOS, RHEL, Arch Linux, Alpine Linux hoặc các bản phân phối Linux phổ biến khác.
Linux Terminal là gì?
Terminal là giao diện dòng lệnh cho phép bạn giao tiếp với hệ điều hành Linux bằng cách nhập lệnh. Thay vì bấm chuột trong giao diện đồ họa, bạn có thể dùng Terminal để tạo thư mục, sao chép file, cài phần mềm, kiểm tra mạng, xem log, quản lý service hoặc xử lý hàng nghìn file cùng lúc.
Terminal thường được gọi bằng nhiều tên khác như: Command line, Shell, Console, CLI, Bash terminal.
Trên Ubuntu và nhiều bản Linux desktop, bạn có thể mở Terminal bằng tổ hợp phím: Ctrl + Alt + T
Cấu trúc cơ bản của một lệnh Linux
Một câu lệnh Linux thường có dạng:
command [option] [argument]
ls -lah /var/log
| Thành phần | Ý nghĩa |
|---|---|
ls |
Tên lệnh |
-lah |
Tùy chọn, còn gọi là option hoặc flag |
/var/log |
Đối tượng cần xử lý, thường là file, thư mục, user, service hoặc địa chỉ mạng |
Một ví dụ khác:
sudo apt update
| Thành phần | Ý nghĩa |
|---|---|
sudo |
Chạy lệnh với quyền quản trị |
apt |
Trình quản lý gói trên Ubuntu/Debian |
update |
Hành động cần thực hiện |
Lưu ý quan trọng trước khi dùng lệnh Linux
Trước khi học các lệnh Linux cơ bản, bạn nên nhớ vài nguyên tắc sau:
- Linux phân biệt chữ hoa và chữ thường.
File.txtvàfile.txtlà hai tên khác nhau. - Nhiều lệnh không hỏi lại khi xóa dữ liệu, đặc biệt là
rm -rf. - Lệnh bắt đầu bằng
sudocó thể thay đổi hệ thống, cài phần mềm, xóa file hệ thống hoặc chỉnh service. - Đường dẫn bắt đầu bằng
/là đường dẫn tuyệt đối, ví dụ/home/user/file.txt. - Dấu
~thường đại diện cho thư mục home của user hiện tại. - Nên dùng
man ten_lenhđể xem tài liệu chính thức của lệnh. - Không copy lệnh lạ trên mạng rồi chạy bằng
sudonếu chưa hiểu tác dụng.
Lệnh làm quen với Terminal
Đây là nhóm lệnh Linux cơ bản nhất, dùng để xem thông tin user, hệ thống, môi trường shell và trợ giúp.
Ghi chú: Trong các bảng lệnh bên dưới, cột Công dụng được đặt ngay sau tên lệnh để dễ nắm ý chính trước. Cột Options liệt kê các option/flag hoặc lệnh con thường dùng kèm ý nghĩa ngắn gọn. Dấu — nghĩa là lệnh đó gần như không có option đáng nhớ hoặc thường được dùng trực tiếp bằng argument. Cột Ví dụ ưu tiên minh họa các option/flag đáng học, nhất là những option dễ bị khó hiểu nếu chỉ đọc mô tả.
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
pwd |
Hiển thị thư mục hiện tại | -L: hiển thị đường dẫn logic-P: hiển thị đường dẫn vật lý, bỏ symlink |
pwd -P |
whoami |
Xem user đang đăng nhập | — | whoami |
id |
Xem UID, GID và group của user | -u: chỉ in UID-g: chỉ in GID chính-G: in tất cả group ID-n: in tên thay vì số |
id -un |
hostname |
Xem tên máy | -f: in FQDN-s: in tên ngắn-I: in các địa chỉ IP của máy |
hostname -I |
uname |
Xem thông tin kernel/hệ thống | -a: in toàn bộ thông tin-r: kernel release-m: kiến trúc máy-n: hostname-s: tên kernel |
uname -a |
date |
Xem ngày giờ hệ thống | -u: dùng UTC-d STRING: hiển thị ngày theo chuỗi mô tả+FORMAT: định dạng output-I: định dạng ISO 8601 |
date -u +"%Y-%m-%dT%H:%M:%SZ" |
cal |
Hiển thị lịch | -3: hiện 3 tháng-y: hiện cả năm-m: dùng Monday làm đầu tuần-A N/-B N: hiện thêm N tháng sau/trước |
cal -3 |
uptime |
Xem thời gian hệ thống đã chạy | -p: output dễ đọc-s: thời điểm hệ thống bắt đầu chạy |
uptime -p |
clear |
Xóa màn hình Terminal | -x: xóa màn hình nhưng giữ scrollback nếu terminal hỗ trợ |
clear -x |
reset |
Reset lại màn hình Terminal khi bị lỗi hiển thị | — | reset |
history |
Xem lịch sử lệnh đã chạy | -c: xóa history trong session-d N: xóa dòng history số N-a: ghi dòng mới vào file history-w: ghi toàn bộ history ra file |
history -w ~/.bash_history |
echo |
In chuỗi hoặc biến ra màn hình | -n: không xuống dòng cuối-e: bật escape như \n, \t-E: tắt xử lý escape |
echo -e "APP_ENV=production\nDEBUG=false" |
printf |
In dữ liệu theo định dạng | -v VAR: gán output vào biến BashFORMAT: chuỗi định dạng như %s, %d, \n |
printf "%-12s %s\n" "User:" "$USER" |
env |
Xem biến môi trường | -i: chạy với môi trường rỗng-u VAR: bỏ biến môi trườngVAR=value: đặt biến tạm cho lệnh |
env -i PATH=/usr/bin:/bin bash --noprofile --norc |
printenv |
In biến môi trường cụ thể | -0: ngăn cách output bằng ký tự null thay vì newline |
`printenv -0 \ |
export |
Tạo/xuất biến môi trường | -p: liệt kê biến đã export-n VAR: bỏ thuộc tính export của biến |
`export -p \ |
source |
Nạp file cấu hình shell | — | source ~/.bashrc |
alias |
Tạo lệnh tắt | -p: in alias theo dạng có thể dùng lại |
`alias -p \ |
unalias |
Xóa alias | -a: xóa toàn bộ alias |
unalias -a |
type |
Xem một lệnh là built-in, alias hay file thực thi | -a: hiện tất cả nơi tìm thấy lệnh-t: chỉ in loại lệnh-p: chỉ in path nếu là file thực thi-P: ép tìm trong PATH |
type -a python3 |
which |
Xem đường dẫn file thực thi | -a: hiện tất cả path khớp trong PATH |
which -a python3 |
whereis |
Tìm file binary, source, man page | -b: chỉ tìm binary-m: chỉ tìm man page-s: chỉ tìm source |
whereis -b nginx |
command -v |
Kiểm tra lệnh có tồn tại không | -v: in cách shell tìm lệnh-V: mô tả chi tiết hơn-p: dùng PATH mặc định an toàn |
command -V git |
man |
Mở tài liệu hướng dẫn của lệnh | -k: tìm theo từ khóa, tương tự apropos-f: mô tả ngắn, tương tự whatis-a: mở tất cả trang man khớp-P PAGER: chọn chương trình xem |
man -k password |
info |
Xem tài liệu GNU dạng info | -k KEYWORD: tìm trong tài liệu info-f FILE: mở file info cụ thể-o FILE: ghi output ra file |
info -k coreutils |
help |
Xem trợ giúp cho shell built-in | -d: mô tả ngắn-m: định dạng giống man page-s: chỉ in cú pháp ngắn |
help -m cd |
whatis |
Mô tả ngắn về lệnh | -w: tìm bằng wildcard-r: tìm bằng regex-s SECTION: giới hạn section man |
whatis -w 'git*' |
apropos |
Tìm lệnh theo từ khóa trong mô tả | -a: yêu cầu khớp tất cả từ khóa-e: khớp chính xác-w: dùng wildcard-s SECTION: giới hạn section man |
apropos -a password user |
exit |
Thoát khỏi shell hiện tại | — | exit |
logout |
Đăng xuất shell đăng nhập | — | logout |
Lệnh quản lý thư mục và file
Nhóm này dùng để di chuyển trong hệ thống file, tạo thư mục, sao chép, đổi tên, xóa, tạo liên kết và xem thông tin file.
Lệnh điều hướng thư mục
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
ls |
Liệt kê file và thư mục | -l: dạng chi tiết-a: hiện file ẩn-h: dung lượng dễ đọc-R: liệt kê đệ quy-t: sắp xếp theo thời gian-S: sắp xếp theo kích thước |
ls -lahS /var/log |
ls -l |
Liệt kê chi tiết | -l: dạng chi tiết-a: hiện file ẩn-h: dung lượng dễ đọc-R: liệt kê đệ quy-t: sắp xếp theo thời gian-S: sắp xếp theo kích thước |
ls -lh /var/log |
ls -a |
Hiện cả file ẩn | -l: dạng chi tiết-a: hiện file ẩn-h: dung lượng dễ đọc-R: liệt kê đệ quy-t: sắp xếp theo thời gian-S: sắp xếp theo kích thước |
ls -a ~ |
ls -lah |
Hiện chi tiết, file ẩn, dung lượng dễ đọc | -l: dạng chi tiết-a: hiện file ẩn-h: dung lượng dễ đọc-R: liệt kê đệ quy-t: sắp xếp theo thời gian-S: sắp xếp theo kích thước |
ls -lahS /var/log |
cd |
Di chuyển thư mục | -: quay lại thư mục trước-P: dùng đường dẫn vật lý, bỏ symlink-L: dùng đường dẫn logic |
cd -P /var/log |
cd .. |
Lùi lên thư mục cha | -: quay lại thư mục trước-P: dùng đường dẫn vật lý, bỏ symlink-L: dùng đường dẫn logic |
cd -P .. |
cd ~ |
Về thư mục home | -: quay lại thư mục trước-P: dùng đường dẫn vật lý, bỏ symlink-L: dùng đường dẫn logic |
cd ~ |
cd - |
Quay lại thư mục trước đó | -: quay lại thư mục trước-P: dùng đường dẫn vật lý, bỏ symlink-L: dùng đường dẫn logic |
cd - |
tree |
Hiển thị cây thư mục | -L N: giới hạn độ sâu-a: hiện file ẩn-d: chỉ hiện thư mục-h: dung lượng dễ đọc-I PATTERN: bỏ qua pattern |
tree -a -L 2 -I node_modules |
Lưu ý: tree có thể chưa được cài sẵn. Trên Ubuntu/Debian, cài bằng sudo apt install tree.
Lệnh tạo và kiểm tra file/thư mục
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
mkdir |
Tạo thư mục | -p: tạo thư mục cha nếu chưa có-m MODE: đặt quyền khi tạo-v: in thông tin thư mục được tạo |
mkdir -p -m 755 app/logs |
mkdir -p |
Tạo thư mục lồng nhau | -p: tạo thư mục cha nếu chưa có-m MODE: đặt quyền khi tạo-v: in thông tin thư mục được tạo |
mkdir -p -v app/logs/2026 |
rmdir |
Xóa thư mục rỗng | -p: xóa cả thư mục cha nếu rỗng--ignore-fail-on-non-empty: bỏ qua lỗi không rỗng-v: in quá trình xóa |
rmdir -p old/empty/folder |
touch |
Tạo file rỗng hoặc cập nhật thời gian sửa file | -a: chỉ đổi access time-m: chỉ đổi modify time-c: không tạo file mới-t TIME: đặt thời gian cụ thể-r FILE: lấy thời gian theo file khác |
touch -t 202604301200 index.html |
stat |
Xem metadata của file | -c FORMAT: chọn định dạng output-f: xem thông tin filesystem-L: theo symbolic link-t: output ngắn gọn |
stat -c "%n %s bytes %y" index.html |
file |
Xác định loại file | -b: không in tên file-i: in MIME type-L: theo symbolic link-z: thử đọc bên trong file nén |
file -i image.png |
realpath |
Lấy đường dẫn tuyệt đối | -s: không resolve symlink-m: canonicalize dù path chưa tồn tại--relative-to=DIR: in path tương đối từ DIR--relative-base=DIR: chỉ tương đối nếu nằm trong DIR |
realpath --relative-to="$HOME" ./index.html |
readlink |
Xem đích của symbolic link | -f: resolve path đầy đủ-e: giống -f nhưng yêu cầu mọi thành phần tồn tại-m: resolve kể cả khi path chưa tồn tại-n: không xuống dòng cuối |
readlink -f link_name |
basename |
Lấy tên file từ đường dẫn | -a: xử lý nhiều argument-s SUFFIX: bỏ hậu tố-z: ngăn cách output bằng null |
basename -s .log /var/log/syslog.log |
dirname |
Lấy thư mục cha từ đường dẫn | -z: ngăn cách output bằng null |
`dirname -z /var/log/syslog \ |
Lệnh sao chép, di chuyển, đổi tên và xóa file
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
cp |
Sao chép file | -r/-R: copy thư mục đệ quy-i: hỏi trước khi ghi đè-v: in quá trình copy-a: archive, giữ quyền/thời gian/symlink-u: chỉ copy nếu source mới hơn-n: không ghi đè |
cp -a source/ backup/ |
cp -r |
Sao chép thư mục | -r/-R: copy thư mục đệ quy-i: hỏi trước khi ghi đè-v: in quá trình copy-a: archive, giữ quyền/thời gian/symlink-u: chỉ copy nếu source mới hơn-n: không ghi đè |
cp -rv source/ backup/ |
cp -i |
Hỏi trước khi ghi đè | -r/-R: copy thư mục đệ quy-i: hỏi trước khi ghi đè-v: in quá trình copy-a: archive, giữ quyền/thời gian/symlink-u: chỉ copy nếu source mới hơn-n: không ghi đè |
cp -iv a.txt b.txt |
cp -v |
Hiển thị quá trình copy | -r/-R: copy thư mục đệ quy-i: hỏi trước khi ghi đè-v: in quá trình copy-a: archive, giữ quyền/thời gian/symlink-u: chỉ copy nếu source mới hơn-n: không ghi đè |
cp -v a.txt backup/ |
mv |
Di chuyển hoặc đổi tên file | -i: hỏi trước khi ghi đè-v: in quá trình di chuyển-n: không ghi đè file có sẵn-f: ghi đè không hỏi-u: chỉ di chuyển nếu source mới hơn--backup: tạo backup trước khi ghi đè |
mv -iv old.txt new.txt |
mv file dir/ |
Di chuyển file vào thư mục | -i: hỏi trước khi ghi đè-v: in quá trình di chuyển-n: không ghi đè file có sẵn-f: ghi đè không hỏi-u: chỉ di chuyển nếu source mới hơn--backup: tạo backup trước khi ghi đè |
mv -v report.pdf ~/Documents/ |
rm |
Xóa file | -i: hỏi trước khi xóa-r/-R: xóa đệ quy-f: cưỡng bức, bỏ qua lỗi không tồn tại-v: in file đã xóa--preserve-root: bảo vệ thư mục /--one-file-system: không vượt filesystem khác |
rm -iv old.txt |
rm -i |
Hỏi trước khi xóa | -i: hỏi trước khi xóa-r/-R: xóa đệ quy-f: cưỡng bức, bỏ qua lỗi không tồn tại-v: in file đã xóa--preserve-root: bảo vệ thư mục /--one-file-system: không vượt filesystem khác |
rm -i old.txt |
rm -r |
Xóa thư mục và nội dung bên trong | -i: hỏi trước khi xóa-r/-R: xóa đệ quy-f: cưỡng bức, bỏ qua lỗi không tồn tại-v: in file đã xóa--preserve-root: bảo vệ thư mục /--one-file-system: không vượt filesystem khác |
rm -rv old_folder |
rm -rf |
Xóa cưỡng bức, rất nguy hiểm | -i: hỏi trước khi xóa-r/-R: xóa đệ quy-f: cưỡng bức, bỏ qua lỗi không tồn tại-v: in file đã xóa--preserve-root: bảo vệ thư mục /--one-file-system: không vượt filesystem khác |
rm -rf -- ./build/ |
ln |
Tạo hard link | -s: tạo symbolic link-f: ghi đè link/file đích-n: không dereference symlink đích-v: in link được tạo |
ln -v file.txt hardlink.txt |
ln -s |
Tạo symbolic link | -s: tạo symbolic link-f: ghi đè link/file đích-n: không dereference symlink đích-v: in link được tạo |
ln -sfn /var/www/html site |
install |
Copy file và set quyền trong một bước | -m MODE: đặt quyền-o OWNER: đặt owner-g GROUP: đặt group-D: tạo thư mục cha của file đích-v: in quá trình copy |
install -D -m 755 script.sh /usr/local/bin/deploy |
rename |
Đổi tên hàng loạt, tùy distro | -n: chạy thử, không đổi thật-v: in tên file đã đổi-f: ghi đè nếu tên đích tồn tại |
rename -n 's/\.txt$/.bak/' *.txt |
shred |
Ghi đè nội dung file trước khi xóa | -u: xóa file sau khi ghi đè-v: in tiến trình-n N: số lần ghi đè-z: ghi thêm lượt zero để che dấu shred-s SIZE: chỉ shred kích thước chỉ định |
shred -uzv -n 3 secret.txt |
truncate |
Cắt hoặc đặt kích thước file | -s SIZE: đặt kích thước file-c: không tạo file mới-o: xử lý size theo block I/O-r FILE: lấy kích thước bằng file khác |
truncate -s 0 app.log |
split |
Chia file lớn thành nhiều phần | -b SIZE: chia theo byte/kích thước-l N: chia theo số dòng-d: dùng hậu tố số-a N: độ dài hậu tố |
split -b 100M -d big.iso part_ |
csplit |
Chia file theo pattern | -f PREFIX: prefix file output-b FORMAT: định dạng hậu tố-k: giữ file output nếu lỗi-s: im lặng-z: bỏ file output rỗng |
csplit -f chapter_ -b "%02d.txt" file.txt '/Chapter/' '{*}' |
dd |
Copy dữ liệu cấp thấp, thường dùng tạo image | if=FILE: input file/deviceof=FILE: output file/devicebs=SIZE: block sizecount=N: số block copystatus=progress: hiện tiến trìnhconv=sync,noerror: xử lý lỗi đọc |
dd if=/dev/sda of=disk.img bs=4M status=progress conv=sync,noerror |
Cảnh báo: dd, rm -rf, mkfs, fdisk, parted là các lệnh có thể làm mất dữ liệu. Hãy kiểm tra kỹ đường dẫn trước khi chạy.
Lệnh xem, sửa và xử lý nội dung file
Đây là nhóm lệnh rất quan trọng khi đọc log, chỉnh file cấu hình, lọc dữ liệu hoặc xử lý text.
Lệnh xem nội dung file
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
cat |
In toàn bộ nội dung file | -n: đánh số mọi dòng-b: đánh số dòng không rỗng-A: hiện ký tự ẩn-s: gộp dòng trống liên tiếp-E: hiện ký tự cuối dòng-T: hiện tab |
cat -n config.txt |
tac |
In nội dung file từ dưới lên | -s SEP: đặt separator-r: separator là regex-b: gắn separator trước record |
tac -s $'\n\n' notes.txt |
more |
Xem file từng trang | -d: hiện hướng dẫn phím-N: hiện số dòng-s: gộp dòng trống+N: bắt đầu từ dòng N |
more -N long.txt |
less |
Xem file linh hoạt hơn more |
-N: hiện số dòng-S: không wrap dòng dài-i: tìm kiếm không phân biệt hoa thường nếu pattern không có chữ hoa-R: giữ màu ANSI+F: theo dõi file giống tail |
less -N -S /var/log/syslog |
head |
Xem phần đầu file | -n N: in N dòng đầu-c N: in N byte đầu-q: không in header tên file-v: luôn in header tên file |
head -n 20 file.txt |
head -n 20 |
Xem 20 dòng đầu | -n N: in N dòng đầu-c N: in N byte đầu-q: không in header tên file-v: luôn in header tên file |
head -n 20 file.txt |
tail |
Xem phần cuối file | -n N: in N dòng cuối-c N: in N byte cuối-f: theo dõi file-F: theo dõi cả khi file rotate--pid=PID: dừng theo dõi khi PID kết thúc |
tail -n 50 app.log |
tail -n 50 |
Xem 50 dòng cuối | -n N: in N dòng cuối-c N: in N byte cuối-f: theo dõi file-F: theo dõi cả khi file rotate--pid=PID: dừng theo dõi khi PID kết thúc |
tail -n 50 app.log |
tail -f |
Theo dõi log theo thời gian thực | -n N: in N dòng cuối-c N: in N byte cuối-f: theo dõi file-F: theo dõi cả khi file rotate--pid=PID: dừng theo dõi khi PID kết thúc |
tail -F /var/log/nginx/access.log |
nl |
In file kèm số dòng | -b a: đánh số mọi dòng-b t: chỉ đánh số dòng không rỗng-n FORMAT: định dạng số dòng-w N: độ rộng số dòng-s STR: chuỗi ngăn cách số và dòng |
nl -ba file.txt |
wc |
Đếm dòng, từ, ký tự | -l: đếm dòng-w: đếm từ-c: đếm byte-m: đếm ký tự-L: độ dài dòng dài nhất |
wc -l -w -c file.txt |
od |
Xem file ở dạng octal/hex | -c: hiển thị ký tự-x: hiển thị hex-t TYPE: chọn kiểu output-A FORMAT: định dạng offset-N BYTES: chỉ đọc N byte |
od -A x -t x1 -N 64 file.bin |
hexdump |
Xem dữ liệu dạng hex | -C: canonical hex + ASCII-v: không gộp dòng trùng-n LENGTH: đọc số byte chỉ định-s OFFSET: bỏ qua offset-e FORMAT: định dạng output |
hexdump -C -n 64 file.bin |
xxd |
Tạo/xem hexdump | -g N: nhóm byte-l N: giới hạn độ dài-s OFFSET: bắt đầu từ offset-r: đảo hexdump về binary-p: plain hexdump |
xxd -g 1 -l 64 file.bin |
strings |
Lọc chuỗi đọc được trong file binary | -n N: độ dài chuỗi tối thiểu-a: quét toàn file-t FORMAT: in offset-e ENCODING: chọn encoding |
strings -n 8 -t x program |
Lệnh chỉnh sửa file
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
nano |
Trình soạn thảo dễ dùng cho người mới | -w: không tự wrap dòng-l: hiện số dòng-m: bật hỗ trợ chuột-B: backup file trước khi lưu |
nano -l -w notes.txt |
vi |
Trình soạn thảo phổ biến trên Unix/Linux | -R: mở read-only-u NONE: không nạp vimrc+N: mở tại dòng N-c CMD: chạy lệnh editor khi mở |
vi -R +20 config.txt |
vim |
Bản mở rộng mạnh hơn của vi | -R: mở read-only-p: mở nhiều tab-O/-o: chia cửa sổ dọc/ngang+N: mở tại dòng N-c CMD: chạy lệnh Vim khi mở |
vim -p app.conf nginx.conf |
ed |
Trình soạn thảo dòng cổ điển | -p PROMPT: đặt prompt-s: chế độ im lặng |
ed -p ': ' file.txt |
Mẹo nhanh với nano:
- Lưu file:
Ctrl + O - Thoát:
Ctrl + X - Tìm kiếm:
Ctrl + W
Mẹo nhanh với vim:
- Vào chế độ nhập: nhấn
i - Lưu và thoát: gõ
:wq - Thoát không lưu: gõ
:q!
Lệnh xử lý văn bản
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
grep |
Tìm chuỗi trong file hoặc output | -i: không phân biệt hoa thường-r/-R: tìm đệ quy-n: hiện số dòng-v: đảo kết quả, lấy dòng không khớp-E: regex mở rộng-F: tìm chuỗi literal-C N: hiện N dòng ngữ cảnh |
grep -Rni "error" /var/log |
grep -i |
Tìm không phân biệt hoa thường | -i: không phân biệt hoa thường-r/-R: tìm đệ quy-n: hiện số dòng-v: đảo kết quả, lấy dòng không khớp-E: regex mở rộng-F: tìm chuỗi literal-C N: hiện N dòng ngữ cảnh |
grep -in "error" app.log |
grep -r |
Tìm đệ quy trong thư mục | -i: không phân biệt hoa thường-r/-R: tìm đệ quy-n: hiện số dòng-v: đảo kết quả, lấy dòng không khớp-E: regex mở rộng-F: tìm chuỗi literal-C N: hiện N dòng ngữ cảnh |
grep -Rni "DB_HOST" . |
grep -n |
Hiện số dòng khớp | -i: không phân biệt hoa thường-r/-R: tìm đệ quy-n: hiện số dòng-v: đảo kết quả, lấy dòng không khớp-E: regex mở rộng-F: tìm chuỗi literal-C N: hiện N dòng ngữ cảnh |
grep -nC 2 "root" /etc/passwd |
sed |
Sửa/lọc text theo dòng | -n: không tự in dòng-i: sửa file trực tiếp-e SCRIPT: thêm script xử lý-f FILE: đọc script từ file-E: dùng regex mở rộng |
sed -i.bak -E 's/old/new/g' file.txt |
awk |
Xử lý text theo cột/trường | -F SEP: đặt dấu phân tách field-v VAR=VALUE: truyền biến vào awk-f FILE: đọc chương trình awk từ file |
awk -F: '{print $1, $3}' /etc/passwd |
sort |
Sắp xếp dòng | -n: sort theo số-r: đảo ngược-h: sort số dễ đọc như K/M/G-k KEY: sort theo cột/key-u: loại dòng trùng khi sort |
sort -h -r sizes.txt |
sort -n |
Sắp xếp theo số | -n: sort theo số-r: đảo ngược-h: sort số dễ đọc như K/M/G-k KEY: sort theo cột/key-u: loại dòng trùng khi sort |
sort -n -k2 scores.tsv |
uniq |
Loại dòng trùng liên tiếp | -c: đếm số lần lặp-d: chỉ in dòng bị trùng-u: chỉ in dòng duy nhất-i: không phân biệt hoa thường-f N/-s N: bỏ qua field/ký tự đầu |
`sort file.txt \ |
cut |
Cắt cột/ký tự | -d DELIM: dấu phân tách-f LIST: chọn field-c LIST: chọn ký tự-b LIST: chọn byte--complement: lấy phần ngược lại |
cut -d: -f1,7 /etc/passwd |
paste |
Ghép dòng từ nhiều file | -d LIST: đặt delimiter-s: ghép tuần tự từng file thay vì song song |
paste -d, names.txt emails.txt |
tr |
Thay đổi hoặc xóa ký tự | -d: xóa ký tự-s: gộp ký tự lặp-c: lấy phần bù của tập ký tự |
tr -d '\r' < windows.txt > unix.txt |
expand |
Đổi tab thành khoảng trắng | -t N: đặt độ rộng tab-i: chỉ đổi tab đầu dòng |
expand -t 4 file.txt |
unexpand |
Đổi khoảng trắng thành tab | -t N: đặt độ rộng tab-a: đổi cả khoảng trắng giữa dòng |
unexpand -a -t 4 file.txt |
column |
Canh cột cho dễ đọc | -t: tạo bảng căn cột-s SEP: dấu phân tách input-N NAMES: đặt tên cột-o SEP: dấu phân tách output |
column -t -s, data.csv |
fold |
Gói dòng theo độ rộng | -w N: độ rộng dòng-s: ngắt tại khoảng trắng-b: đếm theo byte |
fold -s -w 80 file.txt |
fmt |
Định dạng lại đoạn văn bản | -w N: độ rộng dòng-s: chỉ split dòng dài, không nối dòng ngắn-u: uniform spacing-p PREFIX: chỉ format dòng có prefix |
fmt -w 72 -s notes.txt |
tee |
Ghi output ra file và vẫn hiển thị màn hình | -a: ghi nối tiếp thay vì ghi đè-i: bỏ qua interrupt signal |
`echo ok \ |
diff |
So sánh hai file | -u: unified diff-r: so sánh đệ quy thư mục-q: chỉ báo khác/giống-y: so sánh song song--color: tô màu output |
diff -u old.txt new.txt |
cmp |
So sánh byte giữa hai file | -l: in tất cả byte khác nhau-s: im lặng, chỉ trả exit code-b: in byte khác nhau dạng ký tự-n N: chỉ so sánh N byte |
cmp -l a.bin b.bin |
comm |
So sánh hai file đã sort | -1: ẩn cột chỉ có ở file 1-2: ẩn cột chỉ có ở file 2-3: ẩn cột chung--check-order: kiểm tra input đã sort |
comm -12 <(sort a.txt) <(sort b.txt) |
Lệnh tìm kiếm file, thư mục và nội dung
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
find |
Tìm file/thư mục theo điều kiện | -name PATTERN: tìm theo tên-type f/d: lọc file/thư mục-mtime N: lọc theo ngày sửa-size SIZE: lọc theo kích thước-exec CMD {} \;: chạy lệnh với kết quả-delete: xóa kết quả-maxdepth N: giới hạn độ sâu |
find . -type f -name "*.log" -mtime -7 |
find -type f |
Tìm file thường | -name PATTERN: tìm theo tên-type f/d: lọc file/thư mục-mtime N: lọc theo ngày sửa-size SIZE: lọc theo kích thước-exec CMD {} \;: chạy lệnh với kết quả-delete: xóa kết quả-maxdepth N: giới hạn độ sâu |
find . -type f -name "*.conf" |
find -type d |
Tìm thư mục | -name PATTERN: tìm theo tên-type f/d: lọc file/thư mục-mtime N: lọc theo ngày sửa-size SIZE: lọc theo kích thước-exec CMD {} \;: chạy lệnh với kết quả-delete: xóa kết quả-maxdepth N: giới hạn độ sâu |
find . -type d -empty |
find -mtime |
Tìm theo thời gian sửa | -name PATTERN: tìm theo tên-type f/d: lọc file/thư mục-mtime N: lọc theo ngày sửa-size SIZE: lọc theo kích thước-exec CMD {} \;: chạy lệnh với kết quả-delete: xóa kết quả-maxdepth N: giới hạn độ sâu |
find . -type f -mtime -7 |
find -size |
Tìm theo kích thước | -name PATTERN: tìm theo tên-type f/d: lọc file/thư mục-mtime N: lọc theo ngày sửa-size SIZE: lọc theo kích thước-exec CMD {} \;: chạy lệnh với kết quả-delete: xóa kết quả-maxdepth N: giới hạn độ sâu |
find . -type f -size +100M |
find -exec |
Chạy lệnh trên kết quả tìm được | -name PATTERN: tìm theo tên-type f/d: lọc file/thư mục-mtime N: lọc theo ngày sửa-size SIZE: lọc theo kích thước-exec CMD {} \;: chạy lệnh với kết quả-delete: xóa kết quả-maxdepth N: giới hạn độ sâu |
find . -name "*.tmp" -exec rm -i {} \; |
locate |
Tìm nhanh bằng database | -i: không phân biệt hoa thường-r REGEX: tìm bằng regex-n N: giới hạn số kết quả |
locate -i nginx.conf |
updatedb |
Cập nhật database cho locate |
-U PATH: chỉ cập nhật dưới PATH-o FILE: ghi database ra file-l 0/1: bật/tắt kiểm tra quyền truy cập |
sudo updatedb -U /var/www |
xargs |
Chuyển output thành argument cho lệnh khác | -0: nhận input null-separated-n N: số argument mỗi lần chạy-I {}: placeholder thay thế-r: không chạy nếu input rỗng-P N: chạy song song N tiến trình |
`find . -name *.log-print0 \ |
fzf |
Tìm kiếm tương tác trong Terminal | --preview CMD: xem preview--multi: chọn nhiều dòng--height N%: đặt chiều cao--query TEXT: đặt từ khóa ban đầu |
`find . -type f \ |
rg |
Tìm nội dung nhanh bằng ripgrep | -i: không phân biệt hoa thường-n: hiện số dòng-S: smart case-g GLOB: lọc file theo glob--hidden: tìm cả file ẩn-u: giảm mức bỏ qua ignore file |
rg -n -i -e TODO -e FIXME src/ |
ag |
Tìm nội dung bằng The Silver Searcher | -i: không phân biệt hoa thường-n: hiện số dòng-G REGEX: lọc tên file--hidden: tìm cả file ẩn-l: chỉ in tên file khớp |
ag -n -i "function" src/ |
Lưu ý: fzf, rg, ag thường cần cài thêm.
Lệnh phân quyền và sở hữu file
Linux quản lý file bằng quyền đọc, ghi, thực thi cho owner, group và others. Nhóm lệnh này rất quan trọng khi quản trị server.
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
chmod |
Đổi quyền file/thư mục | -R: đổi quyền đệ quy+x: thêm quyền thực thiu/g/o/a: chọn owner/group/others/all-v: in thay đổi--reference=FILE: lấy quyền theo file mẫu |
chmod -R u+rwX,g+rX,o-rwx public/ |
chmod +x |
Thêm quyền thực thi | -R: đổi quyền đệ quy+x: thêm quyền thực thiu/g/o/a: chọn owner/group/others/all-v: in thay đổi--reference=FILE: lấy quyền theo file mẫu |
chmod +x deploy.sh |
chmod -R |
Đổi quyền đệ quy | -R: đổi quyền đệ quy+x: thêm quyền thực thiu/g/o/a: chọn owner/group/others/all-v: in thay đổi--reference=FILE: lấy quyền theo file mẫu |
chmod -R 755 public/ |
chown |
Đổi chủ sở hữu | -R: đổi owner đệ quy-v: in thay đổi--from=OLD: chỉ đổi nếu owner/group hiện tại khớp--reference=FILE: lấy owner/group theo file mẫu |
sudo chown -Rv www-data:www-data /var/www/html |
chown -R |
Đổi owner đệ quy | -R: đổi owner đệ quy-v: in thay đổi--from=OLD: chỉ đổi nếu owner/group hiện tại khớp--reference=FILE: lấy owner/group theo file mẫu |
sudo chown -R www-data:www-data /var/www/html |
chgrp |
Đổi group sở hữu | -R: đổi group đệ quy-v: in thay đổi--reference=FILE: lấy group theo file mẫu |
chgrp -Rv developers app/ |
umask |
Xem/đặt quyền mặc định khi tạo file | -S: hiển thị dạng symbolic-p: in dạng có thể dùng lại trong shell |
umask -S |
getfacl |
Xem ACL của file | -R: đọc ACL đệ quy-a: chỉ hiện access ACL-d: chỉ hiện default ACL-c: bỏ header comment |
getfacl -p file.txt |
setfacl |
Gán ACL chi tiết | -m ACL: thêm/sửa ACL-x ACL: xóa ACL cụ thể-b: xóa toàn bộ ACL mở rộng-R: áp dụng đệ quy-d: đặt default ACL |
setfacl -m u:john:rwx file.txt |
lsattr |
Xem thuộc tính mở rộng | -a: hiện cả file ẩn-d: hiện thuộc tính thư mục thay vì nội dung-R: đệ quy-l: dùng tên thuộc tính dài |
lsattr -a file.txt |
chattr |
Đổi thuộc tính mở rộng | +i/-i: bật/tắt immutable+a/-a: bật/tắt append-only-R: áp dụng đệ quy-V: in chi tiết |
sudo chattr +i file.txt |
sudo |
Chạy lệnh với quyền admin | -u USER: chạy dưới user khác-i: mở login shell root/user-s: mở shell theo biến SHELL-E: giữ biến môi trường-k: quên credential sudo-v: gia hạn credential |
sudo -u www-data systemctl status nginx |
su |
Chuyển user | -/-l: mở login shell-c CMD: chạy một lệnh rồi thoát-s SHELL: chọn shell |
su - root |
passwd |
Đổi mật khẩu | -l: khóa mật khẩu user-u: mở khóa-d: xóa mật khẩu-S: xem trạng thái mật khẩu-e: bắt đổi mật khẩu lần đăng nhập tới |
passwd -S $USER |
groups |
Xem group của user | — | groups username |
newgrp |
Chuyển group hiện tại | — | newgrp docker |
Ví dụ quyền phổ biến:
| Quyền | Ý nghĩa thường gặp |
|---|---|
644 |
File thường: owner đọc/ghi, người khác chỉ đọc |
755 |
Script/thư mục: owner đọc/ghi/chạy, người khác đọc/chạy |
700 |
Chỉ owner có toàn quyền |
600 |
File riêng tư, chỉ owner đọc/ghi |
Lệnh quản lý tiến trình
Tiến trình là chương trình đang chạy. Khi server chậm, app treo hoặc cần dừng service, bạn sẽ dùng nhóm lệnh này.
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
ps |
Xem tiến trình hiện tại | aux: mọi tiến trình kiểu BSD-ef: mọi tiến trình kiểu SysV-p PID: lọc PID-u USER: lọc user-o FORMAT: chọn cột output--sort KEY: sắp xếp |
`ps -eo pid,ppid,user,%cpu,%mem,cmd --sort=-%mem \ |
ps aux |
Xem tất cả tiến trình chi tiết | aux: mọi tiến trình kiểu BSD-ef: mọi tiến trình kiểu SysV-p PID: lọc PID-u USER: lọc user-o FORMAT: chọn cột output--sort KEY: sắp xếp |
`ps aux --sort=-%cpu \ |
top |
Xem tiến trình theo thời gian thực | -p PID: theo dõi PID-u USER: lọc user-d SEC: delay giữa các lần refresh-H: hiện thread-b: batch mode |
top -u www-data |
htop |
Giao diện tiến trình dễ dùng hơn top |
-u USER: lọc user-p PID: theo dõi PID-d DELAY: delay refresh-s COLUMN: sort theo cột |
htop -u www-data |
pgrep |
Tìm PID theo tên tiến trình | -f: khớp cả command line-u USER: lọc user-l: in PID kèm tên-n: tiến trình mới nhất-o: tiến trình cũ nhất |
pgrep -af nginx |
pidof |
Lấy PID của chương trình | -s: chỉ in một PID-x: tìm cả script-o PID: bỏ qua PID chỉ định |
pidof -s sshd |
kill |
Gửi signal tới tiến trình | -9: SIGKILL, ép dừng-15: SIGTERM, yêu cầu dừng an toàn-l: liệt kê signal-s SIGNAL: chọn signal gửi |
kill -15 1234 |
kill -9 |
Ép dừng tiến trình | -9: SIGKILL, ép dừng-15: SIGTERM, yêu cầu dừng an toàn-l: liệt kê signal-s SIGNAL: chọn signal gửi |
kill -9 1234 |
pkill |
Dừng tiến trình theo tên | -f: khớp cả command line-u USER: lọc user-9: gửi SIGKILL-l: in tên tiến trình bị khớp-n/-o: mới nhất/cũ nhất |
pkill -f "python3 app.py" |
killall |
Dừng tất cả tiến trình theo tên | -9: gửi SIGKILL-i: hỏi trước khi kill-v: in kết quả-u USER: lọc user-r: dùng regex |
killall -i firefox |
nice |
Chạy lệnh với độ ưu tiên CPU | -n N: đặt nice value, số lớn hơn là ưu tiên thấp hơn |
nice -n 10 command |
renice |
Đổi độ ưu tiên tiến trình đang chạy | -n N: nice value mới-p PID: đổi theo PID-u USER: đổi theo user-g GROUP: đổi theo group |
renice -n 5 -p 1234 |
jobs |
Xem job trong shell hiện tại | -l: hiện PID-p: chỉ hiện PID process group-r: chỉ job đang chạy-s: chỉ job đã dừng |
jobs -l |
bg |
Đưa job chạy nền | %JOB: chọn job để đưa chạy nền |
bg %1 |
fg |
Đưa job về foreground | %JOB: chọn job để đưa về foreground |
fg %1 |
nohup |
Chạy lệnh không bị dừng khi thoát shell | — | nohup python3 app.py > app.log 2>&1 & |
disown |
Tách job khỏi shell | -h: không xóa job nhưng bỏ SIGHUP-a: áp dụng cho mọi job-r: chỉ job đang chạy |
disown -h %1 |
sleep |
Tạm dừng một khoảng thời gian | s/m/h/d: hậu tố giây/phút/giờ/ngày, ví dụ 10m |
sleep 5m |
watch |
Lặp lại lệnh theo chu kỳ | -n SEC: chu kỳ lặp-d: highlight thay đổi-t: ẩn header-g: thoát khi output thay đổi |
watch -n 2 free -h |
timeout |
Giới hạn thời gian chạy lệnh | -s SIGNAL: signal khi hết giờ-k DURATION: gửi KILL sau thời gian chờ--foreground: không tạo process group riêng-v: in thông báo |
timeout -s TERM -k 5s 30s ping 8.8.8.8 |
time |
Đo thời gian chạy lệnh | -p: output POSIX ngắn-o FILE: ghi kết quả ra file-a: append vào file output-f FORMAT: định dạng output của GNU time |
/usr/bin/time -f "%E %MKB" ls -R /usr |
Lệnh kiểm tra ổ đĩa, RAM và hệ thống file
Nhóm lệnh này thường dùng khi server hết dung lượng, RAM cao, mount ổ đĩa, kiểm tra phân vùng hoặc xử lý lỗi filesystem.
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
df |
Xem dung lượng filesystem | -h: dung lượng dễ đọc-T: hiện loại filesystem-i: hiện inode-a: hiện mọi filesystem--total: thêm dòng tổng |
df -hT --total |
du |
Xem dung lượng file/thư mục | -s: chỉ tổng kết-h: dung lượng dễ đọc-a: hiện cả file-c: thêm tổng cộng--max-depth=N: giới hạn độ sâu |
`du -ah --max-depth=1 /var/log \ |
free |
Xem RAM và swap | -h: dễ đọc-m: MB-g: GB-s SEC: cập nhật lặp lại-t: thêm dòng tổng |
free -h -t |
lsblk |
Xem block device, ổ đĩa, phân vùng | -f: hiện filesystem/UUID-a: hiện mọi device-p: hiện path đầy đủ-o COLUMNS: chọn cột-J: output JSON |
lsblk -f |
blkid |
Xem UUID và loại filesystem | -o FORMAT: định dạng output-s TAG: chỉ hiện tag như UUID/TYPE-t TOKEN: lọc theo token-p: probe thiết bị trực tiếp |
sudo blkid -s UUID -o value /dev/sdb1 |
findmnt |
Xem các mount point | -t TYPE: lọc filesystem type-S SOURCE: lọc source-T TARGET: tìm mount chứa target-r: raw output-J: output JSON |
findmnt -t ext4 |
mount |
Mount thiết bị/thư mục | -t TYPE: loại filesystem-o OPTS: mount options-a: mount theo /etc/fstab-r: mount read-only-w: mount read-write |
sudo mount -t ext4 -o ro /dev/sdb1 /mnt |
umount |
Unmount thiết bị/thư mục | -a: unmount tất cả theo fstab-f: force unmount-l: lazy unmount-v: in chi tiết |
sudo umount -v /mnt |
fdisk |
Quản lý bảng phân vùng | -l: liệt kê phân vùng-u: hiện sector thay vì cylinder-s PARTITION: in kích thước phân vùng-b SIZE: đặt sector size |
sudo fdisk -l /dev/sda |
parted |
Quản lý phân vùng nâng cao | -l: liệt kê thiết bị/phân vùng-s: script mode, ít hỏi-a optimal: căn chỉnh phân vùng tối ưu |
sudo parted -l |
mkfs |
Tạo filesystem mới | -t TYPE: chọn loại filesystem-V: verbose/hiện lệnh backend-L LABEL: đặt label nếu backend hỗ trợ |
sudo mkfs -t ext4 /dev/sdb1 |
fsck |
Kiểm tra/sửa filesystem | -A: kiểm tra tất cả trong fstab-N: chỉ hiển thị, không chạy thật-y: tự trả lời yes-n: chỉ đọc, không sửa-f: ép kiểm tra-t TYPE: lọc loại filesystem |
sudo fsck -N /dev/sdb1 |
sync |
Ghi dữ liệu cache xuống đĩa | -f FILE: sync filesystem chứa file-d FILE: chỉ sync dữ liệu file |
sync -f /var/log/app.log |
swapon |
Bật swap | -a: bật tất cả swap trong fstab-s: hiện summary--show: hiện bảng swap-p PRIORITY: đặt priority |
sudo swapon -s |
swapoff |
Tắt swap | -a: tắt tất cả swap-v: in chi tiết |
sudo swapoff -v /swapfile |
lsof |
Xem file đang được tiến trình mở | -i: lọc socket mạng-p PID: lọc PID-u USER: lọc user+D DIR: tìm file mở trong thư mục-nP: không resolve DNS/port name |
sudo lsof -i :80 |
fuser |
Xem tiến trình đang dùng file/port | -v: output chi tiết-k: kill tiến trình đang dùng-m: xem cả filesystem/mount-n tcp: namespace TCP port-u: hiện user |
sudo fuser -v -n tcp 80 |
Mẹo tìm thư mục chiếm dung lượng lớn:
du -sh * | sort -h
Trên Linux, tar, gzip, xz, zip là các công cụ rất hay gặp khi backup, deploy hoặc tải source code.
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
tar |
Đóng gói file/thư mục | -c: tạo archive-x: giải nén-f FILE: chọn file archive-z: gzip-J: xz-v: verbose-t: liệt kê nội dung-C DIR: đổi thư mục đích/nguồn |
tar -cvf backup.tar folder/ |
tar -x |
Giải nén file tar | -c: tạo archive-x: giải nén-f FILE: chọn file archive-z: gzip-J: xz-v: verbose-t: liệt kê nội dung-C DIR: đổi thư mục đích/nguồn |
tar -xvf backup.tar -C /tmp/restore |
tar -czf |
Tạo file .tar.gz |
-c: tạo archive-x: giải nén-f FILE: chọn file archive-z: gzip-J: xz-v: verbose-t: liệt kê nội dung-C DIR: đổi thư mục đích/nguồn |
tar -czvf backup.tar.gz folder/ |
tar -xzf |
Giải nén .tar.gz |
-c: tạo archive-x: giải nén-f FILE: chọn file archive-z: gzip-J: xz-v: verbose-t: liệt kê nội dung-C DIR: đổi thư mục đích/nguồn |
tar -xzvf backup.tar.gz -C /tmp/restore |
tar -cJf |
Tạo file .tar.xz |
-c: tạo archive-x: giải nén-f FILE: chọn file archive-z: gzip-J: xz-v: verbose-t: liệt kê nội dung-C DIR: đổi thư mục đích/nguồn |
tar -cJvf backup.tar.xz folder/ |
gzip |
Nén file bằng gzip | -d: giải nén-k: giữ file gốc-r: xử lý đệ quy-1..-9: mức nén nhanh/tối đa-c: ghi ra stdout |
gzip -k -9 file.txt |
gunzip |
Giải nén gzip | -k: giữ file nén gốc-c: ghi ra stdout-f: ghi đè/ép giải nén |
gunzip -k file.txt.gz |
zcat |
Xem file gzip không cần giải nén | -f: ép đọc cả file không có đuôi gzip-q: giảm cảnh báo |
`zcat app.log.gz \ |
bzip2 |
Nén bằng bzip2 | -d: giải nén-k: giữ file gốc-1..-9: mức nén-c: ghi ra stdout |
bzip2 -k -9 file.txt |
bunzip2 |
Giải nén bzip2 | -k: giữ file nén gốc-c: ghi ra stdout-f: ghi đè/ép giải nén |
bunzip2 -k file.txt.bz2 |
bzcat |
Xem file bzip2 | -f: ép đọc-q: giảm cảnh báo |
`bzcat file.txt.bz2 \ |
xz |
Nén bằng xz | -d: giải nén-k: giữ file gốc-T0: dùng nhiều thread tự động-0..-9: mức nén-c: ghi ra stdout |
xz -k -9 file.txt |
unxz |
Giải nén xz | -k: giữ file nén gốc-c: ghi ra stdout-f: ghi đè/ép giải nén |
unxz -k file.txt.xz |
xzcat |
Xem file xz | -f: ép đọc file |
`xzcat file.txt.xz \ |
zip |
Nén file/thư mục dạng zip | -r: nén thư mục đệ quy-e: mã hóa bằng mật khẩu-q: quiet-9: nén tối đa-x PATTERN: loại trừ file |
zip -r -9 site.zip site/ -x "node_modules/*" |
unzip |
Giải nén zip | -l: liệt kê nội dung-d DIR: giải nén vào thư mục-o: ghi đè không hỏi-n: không ghi đè-q: quiet |
unzip -l site.zip |
7z |
Nén/giải nén nhiều định dạng | a: thêm/tạo archivex: giải nén giữ cấu trúc thư mụcl: liệt kê nội dung-pPASS: đặt mật khẩu-mx=9: mức nén tối đa-oDIR: thư mục output |
7z a -mx=9 archive.7z folder/ |
Lệnh mạng trong Linux
Nhóm lệnh mạng giúp bạn kiểm tra IP, route, DNS, port, kết nối server, tải file và copy dữ liệu qua mạng.
Kiểm tra IP, route và kết nối
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
ip addr |
Xem địa chỉ IP | -br: output ngắn gọn-c: tô màu-4/-6: chỉ IPv4/IPv6addr: quản lý IP addresslink: quản lý interfaceroute: quản lý routeneigh: ARP/neighbor |
ip -br addr show |
ip a |
Viết tắt của ip addr |
-br: output ngắn gọn-c: tô màu-4/-6: chỉ IPv4/IPv6addr: quản lý IP addresslink: quản lý interfaceroute: quản lý routeneigh: ARP/neighbor |
ip -c -br a |
ip link |
Xem network interface | -br: output ngắn gọn-c: tô màu-4/-6: chỉ IPv4/IPv6addr: quản lý IP addresslink: quản lý interfaceroute: quản lý routeneigh: ARP/neighbor |
ip -br link show |
ip route |
Xem bảng định tuyến | -br: output ngắn gọn-c: tô màu-4/-6: chỉ IPv4/IPv6addr: quản lý IP addresslink: quản lý interfaceroute: quản lý routeneigh: ARP/neighbor |
ip route get 8.8.8.8 |
ip neigh |
Xem ARP/neighbor table | -br: output ngắn gọn-c: tô màu-4/-6: chỉ IPv4/IPv6addr: quản lý IP addresslink: quản lý interfaceroute: quản lý routeneigh: ARP/neighbor |
ip neigh show dev eth0 |
ping |
Kiểm tra host có phản hồi không | -c N: gửi N gói rồi dừng-i SEC: khoảng cách giữa gói-W SEC: timeout phản hồi-4/-6: dùng IPv4/IPv6-s SIZE: kích thước payload |
ping -c 4 -i 0.5 8.8.8.8 |
tracepath |
Truy vết đường đi gói tin | -n: không resolve hostname-m HOPS: số hop tối đa-p PORT: port đích |
tracepath -n -m 20 google.com |
traceroute |
Truy vết route, thường cần cài thêm | -n: không resolve hostname-m HOPS: số hop tối đa-I: dùng ICMP-T: dùng TCP-p PORT: port đích |
traceroute -n -m 20 google.com |
ss |
Xem socket, port, kết nối | -t: TCP-u: UDP-l: socket đang listen-p: hiện process-n: không resolve tên-e: thông tin mở rộng-a: hiện tất cả socket |
ss -tulpen |
netstat |
Lệnh cũ để xem kết nối mạng | -t: TCP-u: UDP-l: socket đang listen-p: hiện process-n: không resolve tên-r: bảng route |
netstat -tulpen |
nmcli |
Quản lý NetworkManager bằng CLI | -f FIELDS: chọn cột output-t: terse output-p: pretty output--ask: hỏi thông tin còn thiếu |
nmcli -f DEVICE,TYPE,STATE device status |
hostnamectl |
Xem/đổi hostname | status: xem hostnameset-hostname NAME: đổi hostname--static: hostname tĩnh--transient: hostname tạm--pretty: tên dễ đọc |
hostnamectl status |
Gợi ý: Trên Linux hiện đại, nên ưu tiên ip thay cho ifconfig và ss thay cho netstat.
DNS và kiểm tra domain
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
dig |
Truy vấn DNS chi tiết | +short: output ngắn+trace: trace DNS delegation@SERVER: hỏi DNS server cụ thể-x IP: reverse lookup+noall +answer: chỉ in answer section |
dig +short A example.com |
nslookup |
Truy vấn DNS đơn giản | -type=TYPE: chọn record DNSserver DNS_SERVER: đổi DNS server trong phiên-debug: output debug |
nslookup -type=MX example.com |
host |
Xem thông tin DNS ngắn gọn | -t TYPE: chọn record DNS-a: hiển thị tất cả thông tin-v: verbose-4/-6: dùng IPv4/IPv6 |
host -t MX example.com |
whois |
Xem thông tin đăng ký domain/IP | -h HOST: chọn whois server-p PORT: chọn port-H: ẩn legal disclaimer nếu server hỗ trợ |
whois -h whois.iana.org example.com |
Tải file, gọi API và kết nối remote
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
curl |
Gọi URL/API, tải dữ liệu | -I: chỉ lấy HTTP header-L: follow redirect-o FILE: lưu với tên file chỉ định-O: lưu theo tên file remote-X METHOD: chọn HTTP method-H HEADER: thêm header-d DATA: gửi body form/data |
curl -L -o index.html https://example.com |
curl -I |
Xem HTTP header | -I: chỉ lấy HTTP header-L: follow redirect-o FILE: lưu với tên file chỉ định-O: lưu theo tên file remote-X METHOD: chọn HTTP method-H HEADER: thêm header-d DATA: gửi body form/data |
curl -I -L https://example.com |
wget |
Tải file từ Internet | -O FILE: lưu với tên file chỉ định-c: tiếp tục tải dở-r: tải đệ quy-q: quiet--limit-rate=RATE: giới hạn tốc độ--no-check-certificate: bỏ kiểm tra TLS certificate |
wget -c -O file.zip https://example.com/file.zip |
ssh |
Đăng nhập server từ xa | -p PORT: chọn port SSH-i KEY: chọn private key-L: local port forwarding-R: remote port forwarding-N: không chạy lệnh remote-v: verbose debug |
ssh -p 2222 -i ~/.ssh/id_ed25519 user@server_ip |
scp |
Copy file qua SSH | -P PORT: chọn port SSH-i KEY: chọn private key-r: copy thư mục đệ quy-C: nén khi truyền-v: verbose debug |
scp -P 2222 -i ~/.ssh/id_ed25519 file.txt user@server:/tmp/ |
sftp |
Truyền file qua SFTP | -P PORT: chọn port SSH-i KEY: chọn private key-b FILE: batch mode-r: truyền thư mục đệ quy |
sftp -P 2222 -i ~/.ssh/id_ed25519 user@server |
rsync |
Đồng bộ file/thư mục | -a: archive mode-v: verbose-z: nén khi truyền--delete: xóa file đích không còn ở nguồn--progress: hiện tiến trình-e ssh: chọn remote shell |
rsync -avz --delete ./site/ user@server:/backup/site/ |
nc |
Netcat, kiểm tra port/gửi dữ liệu TCP/UDP | -z: scan/check port không gửi data-v: verbose-l: listen mode-u: UDP-p PORT: port local-w SEC: timeout |
nc -vz -w 3 example.com 443 |
telnet |
Kiểm tra kết nối TCP kiểu cũ | -l USER: login user-8: dùng 8-bit data-E: tắt escape character |
telnet -l user example.com 80 |
nmap |
Quét port và dịch vụ mạng | -sS: SYN scan-sV: dò phiên bản dịch vụ-O: dò hệ điều hành-p PORTS: chọn port-A: bật OS/version/script/traceroute-Pn: coi host là online, bỏ ping discovery |
nmap -sV -p 80,443 example.com |
Lưu ý: Chỉ dùng nmap trên hệ thống bạn sở hữu hoặc được phép kiểm tra.
Lệnh service, systemd và log
Nhiều bản phân phối Linux hiện đại dùng systemd để quản lý service. Với server, bạn sẽ thường dùng systemctl và journalctl.
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
systemctl status |
Xem trạng thái service | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
systemctl --user status pipewire |
systemctl start |
Khởi động service | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
sudo systemctl start nginx |
systemctl stop |
Dừng service | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
sudo systemctl stop nginx |
systemctl restart |
Khởi động lại service | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
sudo systemctl restart nginx |
systemctl reload |
Reload cấu hình nếu service hỗ trợ | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
sudo systemctl reload nginx |
systemctl enable |
Cho service tự chạy khi boot | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
sudo systemctl enable --now nginx |
systemctl disable |
Tắt tự chạy khi boot | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
sudo systemctl disable --now nginx |
systemctl list-units |
Liệt kê unit đang hoạt động | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
systemctl list-units --type=service --state=running |
systemctl --failed |
Xem unit bị lỗi | status: xem trạng tháistart/stop: chạy/dừng servicerestart/reload: khởi động lại/tải lại cấu hìnhenable/disable: bật/tắt tự chạy khi bootlist-units: liệt kê unit--failed: chỉ unit lỗi--user: thao tác service user--now: enable/disable kèm start/stop ngay |
systemctl --failed --type=service |
service |
Quản lý service kiểu cũ/SysV | start: khởi độngstop: dừngrestart: khởi động lạireload: tải lại cấu hìnhstatus: xem trạng thái |
sudo service nginx status |
journalctl |
Xem log systemd journal | -u UNIT: lọc theo service/unit-f: theo dõi realtime-b: log từ lần boot hiện tại--since TIME: từ thời điểm--until TIME: đến thời điểm-n N: N dòng cuối-p LEVEL: lọc mức log |
journalctl -u nginx --since "1 hour ago" |
journalctl -u |
Xem log của service | -u UNIT: lọc theo service/unit-f: theo dõi realtime-b: log từ lần boot hiện tại--since TIME: từ thời điểm--until TIME: đến thời điểm-n N: N dòng cuối-p LEVEL: lọc mức log |
journalctl -u nginx --since today |
journalctl -f |
Theo dõi log realtime | -u UNIT: lọc theo service/unit-f: theo dõi realtime-b: log từ lần boot hiện tại--since TIME: từ thời điểm--until TIME: đến thời điểm-n N: N dòng cuối-p LEVEL: lọc mức log |
journalctl -u nginx -f |
journalctl -b |
Xem log từ lần boot hiện tại | -u UNIT: lọc theo service/unit-f: theo dõi realtime-b: log từ lần boot hiện tại--since TIME: từ thời điểm--until TIME: đến thời điểm-n N: N dòng cuối-p LEVEL: lọc mức log |
journalctl -b -1 |
dmesg |
Xem log kernel | -T: timestamp dễ đọc-H: output human-readable/pager-w: theo dõi realtime-k: chỉ kernel messages-l LEVEL: lọc mức log |
`dmesg -T \ |
systemd-analyze |
Phân tích thời gian boot | time: tổng thời gian bootblame: xếp hạng unit chậmcritical-chain: chuỗi phụ thuộc quan trọngplot: xuất biểu đồ SVG |
systemd-analyze critical-chain |
crontab |
Lên lịch chạy lệnh định kỳ | -e: sửa crontab-l: liệt kê crontab-r: xóa crontab-u USER: thao tác crontab của user khác |
crontab -l |
at |
Lên lịch chạy một lần | -f FILE: đọc job từ file-l: liệt kê job-r JOB: xóa job-q QUEUE: chọn queue |
`echo date\ |
batch |
Chạy job khi tải hệ thống thấp | -f FILE: đọc job từ file-q QUEUE: chọn queue |
`echo backup.sh\ |
shutdown |
Tắt máy/hẹn giờ tắt | -h: halt/poweroff-r: reboot-c: hủy shutdown đã đặtnow: chạy ngay+MIN: chạy sau số phút |
sudo shutdown -r +10 "Reboot sau 10 phút" |
reboot |
Khởi động lại | -f: reboot cưỡng bức--no-wall: không gửi thông báo wall |
sudo reboot --no-wall |
poweroff |
Tắt máy | -f: tắt cưỡng bức--no-wall: không gửi thông báo wall |
sudo poweroff --no-wall |
Ví dụ xem log Nginx bằng systemd:
journalctl -u nginx --since "1 hour ago"
Nhóm lệnh này dùng khi tạo tài khoản, phân quyền user, thêm user vào group hoặc kiểm tra ai đang đăng nhập.
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
who |
Xem user đang đăng nhập | -a: hiện hầu hết thông tin-b: thời điểm boot gần nhất-u: hiện idle time/PID-q: chỉ tên user và số lượng |
who -a |
w |
Xem user đang đăng nhập và lệnh họ đang chạy | -h: bỏ header-s: output ngắn-u: bỏ qua username khi tính process-i: hiện IP thay hostname |
w -h -s |
users |
Liệt kê user đang đăng nhập | — | users |
last |
Xem lịch sử đăng nhập | -n N: giới hạn số dòng-F: hiện thời gian đầy đủ-x: hiện shutdown/reboot/runlevel-a: đưa hostname về cuối dòng |
last -n 20 -F |
lastlog |
Xem lần đăng nhập gần nhất của user | -u USER: chỉ user cụ thể-t DAYS: login trong N ngày gần đây-b DAYS: login trước N ngày |
lastlog -t 30 |
useradd |
Tạo user mới | -m: tạo home directory-s SHELL: chọn login shell-G GROUPS: group phụ-u UID: đặt UID-d HOME: đặt home directory |
sudo useradd -m -s /bin/bash john |
adduser |
Tạo user kiểu thân thiện hơn trên Debian/Ubuntu | --disabled-password: tạo user không mật khẩu đăng nhập--gecos TEXT: đặt thông tin GECOS--ingroup GROUP: group chính--home DIR: home directory--shell SHELL: login shell |
sudo adduser --disabled-password john |
usermod |
Chỉnh thông tin user | -aG GROUPS: thêm vào group phụ, thường dùng kèm nhau-l NAME: đổi username-d HOME -m: đổi và di chuyển home-s SHELL: đổi shell-L/-U: khóa/mở khóa user |
sudo usermod -aG docker,sudo john |
userdel |
Xóa user | -r: xóa cả home/mail spool-f: ép xóa |
sudo userdel -r john |
groupadd |
Tạo group | -g GID: đặt GID-r: tạo system group-f: không lỗi nếu group đã tồn tại |
sudo groupadd -g 2000 developers |
groupmod |
Sửa group | -n NAME: đổi tên group-g GID: đổi GID |
sudo groupmod -n dev developers |
groupdel |
Xóa group | — | sudo groupdel dev |
chage |
Quản lý hạn mật khẩu | -l: xem thông tin hạn mật khẩu-M DAYS: số ngày tối đa trước khi đổi mật khẩu-m DAYS: số ngày tối thiểu-E DATE: ngày hết hạn account-W DAYS: số ngày cảnh báo |
sudo chage -l john |
passwd |
Đặt/đổi mật khẩu user | -l: khóa mật khẩu user-u: mở khóa-d: xóa mật khẩu-S: xem trạng thái mật khẩu-e: bắt đổi mật khẩu lần đăng nhập tới |
sudo passwd -e john |
Ví dụ thêm user vào group sudo:
sudo usermod -aG sudo john
Mỗi bản phân phối Linux dùng package manager khác nhau. Ubuntu/Debian dùng apt, Fedora/RHEL dùng dnf hoặc yum, Arch dùng pacman, Alpine dùng apk.
Ubuntu, Debian, Linux Mint: apt, apt-get, dpkg
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
apt update |
Cập nhật danh sách package | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
sudo apt update |
apt upgrade |
Nâng cấp package đã cài | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
sudo apt upgrade -y |
apt full-upgrade |
Nâng cấp có thể thay đổi dependency mạnh hơn | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
sudo apt full-upgrade -y |
apt install |
Cài package | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
sudo apt install -y --no-install-recommends nginx |
apt remove |
Gỡ package, giữ file cấu hình | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
sudo apt remove -y nginx |
apt purge |
Gỡ package và file cấu hình hệ thống | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
sudo apt purge -y nginx |
apt autoremove |
Gỡ package không còn cần thiết | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
sudo apt autoremove --purge |
apt search |
Tìm package | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
apt search '^nginx$' |
apt show |
Xem thông tin package | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
apt show nginx |
apt list --installed |
Liệt kê package đã cài | update: cập nhật danh sách packageupgrade: nâng cấp packageinstall: cài packageremove/purge: gỡ package/bao gồm configautoremove: gỡ dependency thừasearch/show: tìm/xem package-y: tự xác nhận--no-install-recommends: không cài gói khuyến nghị--reinstall: cài lại package |
`apt list --installed \ |
apt-get |
Công cụ APT truyền thống | update/upgrade: cập nhật/nâng cấpinstall/remove/purge: cài/gỡautoremove: gỡ dependency thừa-y: tự xác nhận-s: chạy mô phỏng--download-only: chỉ tải về--purge: gỡ kèm config |
sudo apt-get install -y --download-only nginx |
dpkg -i |
Cài file .deb |
-i: cài file .deb-l: liệt kê package-r: gỡ package, giữ config-P: purge cả config-L PACKAGE: liệt kê file của package-S FILE: tìm package sở hữu file |
sudo dpkg -i package.deb |
dpkg -l |
Liệt kê package đã cài | -i: cài file .deb-l: liệt kê package-r: gỡ package, giữ config-P: purge cả config-L PACKAGE: liệt kê file của package-S FILE: tìm package sở hữu file |
`dpkg -l \ |
dpkg -r |
Gỡ package bằng dpkg | -i: cài file .deb-l: liệt kê package-r: gỡ package, giữ config-P: purge cả config-L PACKAGE: liệt kê file của package-S FILE: tìm package sở hữu file |
sudo dpkg -r package_name |
Lệnh bảo mật Linux nên biết
Các lệnh bảo mật giúp bạn quản lý quyền admin, firewall, SSH key, chứng chỉ, checksum và cơ chế bảo vệ hệ thống.
| Lệnh | Công dụng | Options | Ví dụ |
|---|---|---|---|
sudo |
Chạy lệnh với quyền quản trị | -u USER: chạy dưới user khác-i: mở login shell root/user-s: mở shell theo biến SHELL-E: giữ biến môi trường-k: quên credential sudo-v: gia hạn credential |
sudo -E apt update |
visudo |
Sửa file sudoers an toàn | -c: kiểm tra cú pháp sudoers-f FILE: sửa file sudoers khác-s: strict mode-q: quiet |
sudo visudo -c |
ufw |
Firewall đơn giản trên Ubuntu | status: xem trạng tháiallow: cho phép port/servicedeny: chặn port/servicedelete: xóa ruleenable/disable: bật/tắt firewallverbose: chi tiết hơnnumbered: hiện số thứ tự rule |
sudo ufw status verbose |
ufw allow |
Mở port | status: xem trạng tháiallow: cho phép port/servicedeny: chặn port/servicedelete: xóa ruleenable/disable: bật/tắt firewallverbose: chi tiết hơnnumbered: hiện số thứ tự rule |
sudo ufw allow 22/tcp |
ufw enable |
Bật firewall | status: xem trạng tháiallow: cho phép port/servicedeny: chặn port/servicedelete: xóa ruleenable/disable: bật/tắt firewallverbose: chi tiết hơnnumbered: hiện số thứ tự rule |
sudo ufw enable |
firewall-cmd |
Quản lý firewalld trên Fedora/RHEL | --list-all: xem cấu hình zone--add-service=NAME: mở service--add-port=PORT/PROTO: mở port--permanent: ghi vĩnh viễn--reload: tải lại rule--zone=ZONE: chọn zone |
sudo firewall-cmd --permanent --add-service=https && sudo firewall-cmd --reload |
iptables |
Quản lý rule firewall kiểu cũ | -L: liệt kê rule-A CHAIN: thêm rule-D CHAIN: xóa rule-p PROTO: chọn protocol--dport PORT: port đích-j TARGET: hành động như ACCEPT/DROP-n -v: output số + chi tiết |
sudo iptables -L -n -v |
nft |
Quản lý nftables | list ruleset: xem toàn bộ ruleadd rule: thêm ruledelete rule: xóa rule-f FILE: nạp rule từ file-a: hiện handle để xóa/sửa rule |
sudo nft -a list ruleset |
ssh-keygen |
Tạo SSH key | -t TYPE: loại key như ed25519/rsa-b BITS: số bit với RSA-f FILE: file lưu key-C COMMENT: comment/email-N PASSPHRASE: passphrase mới |
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519 |
ssh-copy-id |
Copy SSH public key lên server | -i KEY: chọn public key-p PORT: port SSH-f: ép copy không kiểm tra key sẵn có-n: chạy thử |
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@server |
gpg |
Mã hóa, ký và kiểm tra chữ ký | --verify: kiểm tra chữ ký--encrypt: mã hóa--decrypt: giải mã--sign: ký--armor: output ASCII armor--recipient USER: người nhận |
gpg --armor --encrypt --recipient [email protected] file.txt |
openssl |
Làm việc với TLS, certificate, hash | version: xem phiên bảnx509: xử lý certificatereq: tạo CSR/certificate requests_client: kiểm tra TLS serverdgst: tạo/kiểm tra digest-in/-out: file vào/ra-text: in dạng dễ đọc |
openssl s_client -connect example.com:443 -servername example.com |
sha256sum |
Tạo/kiểm tra SHA-256 checksum | -c: kiểm tra checksum từ file-b: chế độ binary-t: chế độ text--quiet: chỉ báo lỗi khi check |
sha256sum -c file.iso.sha256 |
md5sum |
Tạo/kiểm tra MD5 checksum | -c: kiểm tra checksum từ file-b: chế độ binary-t: chế độ text--quiet: chỉ báo lỗi khi check |
md5sum -c file.iso.md5 |
sestatus |
Xem trạng thái SELinux | -v: verbose-b: hiện trạng thái boolean SELinux |
sestatus -v |
getenforce |
Xem chế độ SELinux | — | getenforce |
aa-status |
Xem trạng thái AppArmor | --enabled: kiểm tra AppArmor có bật không--profiled: số profile đã nạp--enforced: profile enforce--complaining: profile complain |
sudo aa-status --enforced |
fail2ban-client |
Quản lý Fail2ban | status: xem trạng thái toàn cục/jailstart/stop/reload: điều khiển serviceset JAIL banip IP: ban IPset JAIL unbanip IP: gỡ ban IP-v: verbose |
sudo fail2ban-client status sshd |
Mẹo bảo mật cơ bản:
- Không bật đăng nhập SSH bằng root nếu không cần.
- Nên dùng SSH key thay vì mật khẩu.
- Luôn kiểm tra firewall trước khi public server.
- Không cấp quyền
777bừa bãi. - Không chạy script lạ bằng
curl ... | shnếu chưa kiểm tra nội dung.
Toán tử, pipe và chuyển hướng trong Linux
Ngoài lệnh riêng lẻ, bạn cần biết cách nối lệnh để làm việc hiệu quả hơn.
| Ký hiệu | Công dụng | Ví dụ |
|---|---|---|
| ` | ` | Pipe: chuyển output lệnh trước sang input lệnh sau |
> |
Ghi output ra file, ghi đè file cũ | echo hello > file.txt |
>> |
Ghi thêm output vào cuối file | echo hello >> file.txt |
< |
Lấy input từ file | sort < names.txt |
2> |
Chuyển stderr ra file | command 2> error.log |
&> |
Chuyển stdout và stderr ra file | command &> output.log |
&& |
Chạy lệnh sau nếu lệnh trước thành công | mkdir app && cd app |
| ` | ` | |
; |
Chạy nhiều lệnh liên tiếp | date; uptime; whoami |
& |
Chạy lệnh nền | sleep 60 & |
* |
Wildcard khớp nhiều ký tự | rm *.tmp |
? |
Wildcard khớp một ký tự | ls file?.txt |
{} |
Brace expansion | mkdir -p app/{logs,tmp,cache} |
$() |
Command substitution | echo "Today is $(date)" |
~ |
Thư mục home | cd ~ |
. |
Thư mục hiện tại | find . -name "*.txt" |
.. |
Thư mục cha | cd .. |
Ví dụ lọc 10 tiến trình dùng nhiều RAM nhất:
ps aux --sort=-%mem | head
grep -i "error" app.log > errors.txt
Tạo project mới và file README**
mkdir -p ~/projects/demo
cd ~/projects/demo
touch README.md
echo "# Demo Project" > README.md
cat README.md
find /var/log -type f -size +100M
du -sh * | sort -h
tar -czf website-backup.tar.gz /var/www/html
tar -xzf website-backup.tar.gz
tail -f /var/log/nginx/access.log
journalctl -u nginx -f
ss -tulpen | grep -E ':80|:443'
sudo systemctl restart nginx
sudo apt update
sudo apt upgrade
- Ubuntu/Debian:
sudo apt install git - Fedora/RHEL:
sudo dnf install git - Arch Linux:
sudo pacman -S git - Alpine Linux:
sudo apk add git
Copy file từ máy local lên server
scp backup.tar.gz user@server_ip:/home/user/
rsync -av --progress ./site/ user@server_ip:/var/www/html/
chmod +x deploy.sh
./deploy.sh
.tmp
find . -name "*.tmp" -type f -delete
grep -i "error" app.log | tail -n 20
Lệnh Linux có phân biệt chữ hoa chữ thường không?
Có. Linux phân biệt chữ hoa và chữ thường. Ví dụ File.txt, file.txt và FILE.txt là ba tên file khác nhau.
Người mới nên học lệnh Linux nào trước?
Bạn nên bắt đầu với pwd, ls, cd, mkdir, touch, cp, mv, rm, cat, less, grep, find, chmod, sudo, ps, top, df, du, free, ip, ping, ssh và systemctl.
sudo là gì?
sudo cho phép chạy lệnh với quyền quản trị. Đây là lệnh mạnh, nên chỉ dùng khi bạn hiểu lệnh phía sau sẽ làm gì.
Khác nhau giữa apt update và apt upgrade là gì?
apt update cập nhật danh sách package từ repository. apt upgrade nâng cấp các package đã cài lên phiên bản mới hơn dựa trên danh sách vừa cập nhật.
Khác nhau giữa cp và mv là gì?
cp dùng để sao chép file hoặc thư mục. mv dùng để di chuyển hoặc đổi tên file/thư mục.
Khác nhau giữa find và locate là gì?
find tìm trực tiếp trong filesystem theo điều kiện nên linh hoạt nhưng có thể chậm. locate tìm bằng database đã tạo trước nên nhanh, nhưng kết quả có thể chưa cập nhật nếu database cũ.
ss và netstat khác nhau thế nào?
ss là công cụ hiện đại để xem socket và kết nối mạng. netstat là công cụ cũ thuộc bộ net-tools, vẫn gặp trên nhiều hệ thống nhưng thường được thay thế bằng ss.
chmod 755 nghĩa là gì?
chmod 755 nghĩa là owner có quyền đọc, ghi, thực thi; group và others có quyền đọc, thực thi. Quyền này thường dùng cho thư mục hoặc script cần chạy.
Có nên dùng chmod 777 không?
Không nên dùng bừa bãi. chmod 777 cho mọi người quyền đọc, ghi và thực thi, có thể gây rủi ro bảo mật. Chỉ dùng khi bạn hiểu rõ lý do.
Lệnh rm -rf có nguy hiểm không?
Có. rm -rf xóa file/thư mục đệ quy và không hỏi lại. Nếu chạy sai đường dẫn, bạn có thể mất dữ liệu nghiêm trọng.
Kết luận
Nắm vững các lệnh Linux cơ bản giúp bạn thao tác nhanh hơn, quản trị server tốt hơn và hiểu sâu hơn cách hệ điều hành Linux hoạt động. Với người mới, hãy bắt đầu từ nhóm lệnh điều hướng, quản lý file, xem log, tìm kiếm và phân quyền. Khi đã quen, bạn có thể học tiếp các lệnh về tiến trình, mạng, service, package manager và bảo mật.
Cách học hiệu quả nhất là mở Terminal và thực hành mỗi ngày. Bạn không cần học thuộc tất cả lệnh ngay lập tức, nhưng nên biết lệnh nào dùng để làm gì và biết cách tra cứu bằng man, help, whatis hoặc apropos.
