devops@server:~$ cat linux-cheatsheet-full.md

LINUX & BASH CHEAT SHEET

Bộ tổng hợp đầy đủ hơn 220 lệnh Linux/Bash cho DevOps Engineer — kèm câu hỏi ôn tập và bài tập thực hành.

20 chuyên đề 240+ lệnh 35 câu hỏi ôn tập 17 bài tập thực hành
02

File Commands

Quản lý file như một Pro.

LệnhMô tảVí dụ
touchTạo file rỗng hoặc cập nhật timestamptouch file.txt
catHiển thị nội dung filecat file.txt
moreXem nội dung theo từng trangmore file.txt
lessXem nội dung, cuộn lên/xuốngless file.txt
headXem N dòng đầu (mặc định 10)head -n 20 file.txt
tailXem N dòng cuối, hữu ích cho logtail -f app.log
cpSao chép file (-r cho thư mục)cp -r dir1/ dir2/
mvDi chuyển / đổi tên filemv old.txt new.txt
rmXóa filerm -rf folder/
lnTạo hard linkln file.txt link.txt
ln -sTạo symbolic (soft) linkln -s /opt/app app_link
readlink -fXem đường dẫn thật của symlinkreadlink -f app_link
fileXác định loại filefile app.log
statThông tin chi tiết file (size, inode, timestamps)stat file.txt
shredXóa file an toàn, ghi đè dữ liệushred -u secret.txt
splitChia nhỏ file lớn thành nhiều phầnsplit -b 100M big.iso part_
renameĐổi tên hàng loạt theo patternrename 's/.txt/.bak/' *.txt
md5sum / sha256sumKiểm tra checksum/toàn vẹn filesha256sum file.iso

⚠️ Pro tip

  • Dùng less thay more — cho phép cuộn cả hai chiều.
  • tail -f app.log theo dõi log real-time cực hữu ích.
  • Luôn kiểm tra checksum khi tải file quan trọng từ internet.
03

Directory Commands

Quản lý thư mục hiệu quả.

LệnhMô tảVí dụ
mkdirTạo thư mục mớimkdir mydir
mkdir -pTạo thư mục cha khi cầnmkdir -p app/logs/data
rmdirXóa thư mục rỗngrmdir olddir
rm -rfXóa cưỡng bức thư mục và toàn bộ nội dungrm -rf temp/
findTìm file/thư mục trong cây thư mụcfind . -name "*.yml"
find -typeTìm theo loại (f=file, d=dir, l=link)find . -type d -empty
find -mtimeTìm theo thời gian sửa đổifind . -mtime +30
find -sizeTìm theo kích thướcfind . -size +100M
find -execThực thi lệnh trên kết quả tìm đượcfind . -name "*.log" -exec rm {} \;
locateTìm nhanh bằng database locatelocate nginx.conf
updatedbCập nhật database cho locatesudo updatedb
treeHiển thị cấu trúc dạng câytree -L 2
rsyncĐồng bộ thư mục (local/remote), hỗ trợ resumersync -avz src/ dest/

Use cases

  • Tổ chức cấu trúc project, dọn thư mục cũ, script backup/migration, tự động hóa DevOps.
04

File Permissions & ACL

Kiểm soát truy cập. Giữ hệ thống an toàn.

LệnhMô tảVí dụ
chmodĐổi quyền file/thư mụcchmod 755 script.sh
chmod +xThêm quyền thực thichmod +x deploy.sh
chmod -RĐổi quyền đệ quy cho thư mụcchmod -R 755 /var/www
chownĐổi owner của filechown user file.txt
chown -RĐổi owner:group đệ quychown -R www-data:www-data /var/www
chgrpĐổi group ownerchgrp dev file.txt
umaskĐặt quyền mặc định cho file mớiumask 022
ls -lHiển thị quyền dạng long formatls -l file.txt
statThông tin chi tiết về filestat file.txt
idXem user và group hiện tạiid
chattrĐặt thuộc tính đặc biệt (vd: immutable)chattr +i file.txt
lsattrXem thuộc tính đặc biệt của filelsattr file.txt
setfaclĐặt Access Control List chi tiết hơnsetfacl -m u:alice:rwx file.txt
getfaclXem ACL của filegetfacl file.txt

Permission types

  • r (read) = 4 · w (write) = 2 · x (execute) = 1
  • rwx=7 · rw-=6 · r-x=5 · r--=4 · -wx=3 · -w-=2 · --x=1 · ---=0
  • 755 = 7(owner) + 5(group) + 5(others)

Common modes

  • 755 → rwxr-xr-x (owner full, others đọc & thực thi)
  • 644 → rw-r--r-- (owner đọc/ghi, others đọc)
  • 700 → rwx------ (chỉ owner toàn quyền)
  • 600 → rw------- (chỉ owner đọc/ghi)
05

Process Management

Theo dõi, quản lý & kiểm soát tiến trình.

LệnhMô tảVí dụ
ps -efHiển thị tiến trình đang chạyps -ef
ps auxSnapshot tiến trình (định dạng BSD)ps aux | grep nginx
top / htopXem tiến trình real-time (htop tương tác tốt hơn)htop
pstreeHiển thị cây quan hệ cha-con của tiến trìnhpstree -p
killKill tiến trình theo PIDkill -9 1234
killallKill tiến trình theo tênkillall nginx
pkill / pgrepKill / lấy PID theo patternpkill -f java
jobs / bg / fgQuản lý job nềnbg %1 · fg %1
disownGỡ job khỏi shell hiện tại (chạy độc lập)disown %1
nohupChạy lệnh miễn nhiễm hangupnohup app.sh &
nice / reniceĐặt / đổi độ ưu tiên CPU của tiến trìnhrenice -5 -p 1234
lsofLiệt kê file đang được mở bởi tiến trìnhlsof -i :8080
straceTheo dõi system call của tiến trình (debug)strace -p 1234
timeĐo thời gian thực thi lệnhtime ./script.sh

Kill signals

  • 1 SIGHUP (reload) · 15 SIGTERM (terminate, dùng trước) · 9 SIGKILL (force kill, dùng sau nếu cần)
06

Disk & Memory Monitoring

Giám sát tài nguyên hệ thống như một Pro.

LệnhMô tảVí dụ
df -hDung lượng đĩa (human readable)df -h
du -shTổng dung lượng của file/dirdu -sh /var/log
du --max-depthDung lượng theo từng thư mục condu -h --max-depth=1 /var
ncduXem dung lượng đĩa dạng tương tác trực quanncdu /var
lsblkLiệt kê block deviceslsblk
free -hDung lượng RAM sử dụngfree -h
uptimeThời gian chạy hệ thống & load averageuptime
vmstatThống kê bộ nhớ ảovmstat 1 5
iostatThống kê I/Oiostat -xz 1 5
sarBáo cáo hoạt động hệ thống (lịch sử)sar -u 1 5
watchChạy lặp lại lệnh theo chu kỳ để theo dõiwatch -n 1 df -h
dmesgXem log kernel (phần cứng, driver, lỗi disk)dmesg | tail -20

Load average guide

  • < 1.0 → Tốt · 1.0–2.0 → Bình thường · 2.0–5.0 → Cao · > 5.0 → Nghiêm trọng (tùy số core CPU)
07

Disk Partitioning & Mounting

Quản lý phân vùng, định dạng và mount ổ đĩa.

LệnhMô tảVí dụ
fdisk -lLiệt kê các phân vùng đĩasudo fdisk -l
fdisk /dev/sdXTạo/sửa phân vùng (interactive)sudo fdisk /dev/sdb
partedCông cụ phân vùng nâng cao (hỗ trợ GPT)sudo parted /dev/sdb print
mkfsĐịnh dạng filesystem cho phân vùngmkfs.ext4 /dev/sdb1
mountGắn (mount) filesystem vào thư mụcmount /dev/sdb1 /data
umountGỡ mountumount /data
blkidXem UUID và loại filesystem của thiết bịblkid /dev/sdb1
/etc/fstabFile cấu hình mount tự động khi bootcat /etc/fstab
mount -aMount lại toàn bộ theo /etc/fstabsudo mount -a
swapon / swapoffBật/tắt swapsudo swapon /swapfile

⚠️ Lưu ý

  • Luôn backup dữ liệu trước khi fdisk hoặc mkfs — các thao tác này có thể xóa dữ liệu vĩnh viễn.
  • Dùng UUID trong /etc/fstab thay vì tên thiết bị (/dev/sdb1) để tránh lỗi khi thứ tự thiết bị thay đổi.
08

Networking Commands

Kết nối, chẩn đoán & xử lý sự cố mạng.

LệnhMô tảVí dụ
ip aHiển thị interface & IPip a
ip routeXem bảng định tuyếnip route show
pingKiểm tra kết nối tới hostping google.com
tracerouteTrace đường đi tới hosttraceroute google.com
curlTransfer dữ liệu từ/đến servercurl -I https://api.github.com
wgetTải file qua HTTP/HTTPS/FTPwget https://example.com/file.zip
ssh / scpĐăng nhập / copy an toàn qua SSHssh user@192.168.1.10
ss -tulnpSocket statistics (thay thế netstat)ss -tulnp
netstat -tulnpXem port đang mở & connections (legacy)netstat -tulnp
dig / nslookupTra cứu DNSdig google.com
whoisThông tin đăng ký domainwhois example.com
nc (netcat)Kiểm tra port, gửi/nhận dữ liệu qua TCP/UDPnc -zv google.com 443
telnetKiểm tra kết nối TCP tới port cụ thểtelnet google.com 80
nmapQuét port, phát hiện service trên hostnmap -Pn host
arp -aXem bảng ARP (MAC address trong LAN)arp -a
hostname / hostnamectlXem/đổi hostname hệ thốnghostnamectl set-hostname db01
iptables / ufwCấu hình firewallsudo iptables -L
ifconfigCấu hình interface mạng (legacy)ifconfig

Troubleshooting flow

  • 1. Ping host → 2. Traceroute → 3. Kiểm tra DNS (dig) → 4. Kiểm tra port (nc/telnet)
09

Search & Text Processing

Find. Filter. Transform. Analyze.

LệnhMô tảVí dụ
grepTìm pattern trong filegrep "ERROR" app.log
grep -ETìm với regex mở rộng (egrep)grep -E "ERROR|WARN" app.log
grep -rnTìm đệ quy kèm số dònggrep -rn "TODO" src/
awkNgôn ngữ xử lý theo patternawk '{print $1}' file.txt
sedStream editor để filter/transform textsed 's/dev/prod/' file.txt
sort / uniqSắp xếp / loại bỏ dòng trùngsort file.txt | uniq -c
cutCắt cột dữ liệucut -d',' -f1 file.csv
trChuyển đổi/xóa ký tựtr 'a-z' 'A-Z' < file.txt
wcĐếm dòng/từ/ký tựwc -l file.txt
xargsBuild & thực thi lệnh từ inputcat files.txt | xargs rm -f
teeGhi output ra file & hiển thị màn hìnhls -l | tee output.txt
diff / commSo sánh filediff file1.txt file2.txt
pasteGhép cột của nhiều filepaste file1.txt file2.txt
nlĐánh số dòng cho filenl file.txt
column -tCăn dữ liệu thành bảng dễ đọccat data.csv | column -t -s,
printfIn dữ liệu theo định dạngprintf "%-10s %s\n" name value
revĐảo ngược chuỗi ký tự mỗi dòngecho "linux" | rev
jqXử lý & format dữ liệu JSONcurl api | jq '.data[0]'

Pro tip

  • Nắm vững grep, awk, sed — đây là siêu năng lực của DevOps.
  • Kết hợp pipe (|) với các lệnh này = automation magic.
10

Package Management

Cài đặt, cập nhật, gỡ bỏ phần mềm trên các bản phân phối Linux.

LệnhHệ điều hànhVí dụ
apt update / upgradeDebian/Ubuntu — cập nhật danh sách & nâng cấp góisudo apt update && sudo apt upgrade -y
apt installDebian/Ubuntu — cài đặt góisudo apt install nginx
apt remove / purgeDebian/Ubuntu — gỡ gói (purge xóa cả config)sudo apt purge nginx
dpkg -iDebian/Ubuntu — cài đặt file .deb trực tiếpsudo dpkg -i app.deb
dpkg -lDebian/Ubuntu — liệt kê gói đã càidpkg -l | grep nginx
yum / dnf installRHEL/CentOS/Oracle Linux — cài đặt góisudo dnf install httpd
yum / dnf updateRHEL/CentOS/Oracle Linux — cập nhật hệ thốngsudo dnf update -y
rpm -ivhRHEL/CentOS — cài đặt file .rpm trực tiếpsudo rpm -ivh app.rpm
rpm -qaRHEL/CentOS — liệt kê gói đã càirpm -qa | grep oracle
snap installUniversal — cài đặt gói dạng snapsudo snap install code
which / whereisTìm đường dẫn thực thi của một lệnh đã càiwhich python3

Ghi nhớ

  • apt/dpkg dùng cho hệ Debian-based (Ubuntu); yum/dnf/rpm dùng cho hệ RHEL-based (CentOS, Oracle Linux, Rocky Linux).
11

Archive & Compression

Nén, giải nén và đóng gói file/thư mục.

LệnhMô tảVí dụ
tar -cvzfĐóng gói & nén thư mục thành .tar.gztar -cvzf backup.tar.gz /data
tar -xvzfGiải nén file .tar.gztar -xvzf backup.tar.gz -C /restore
tar -tvfXem danh sách file trong archive (không giải nén)tar -tvf backup.tar.gz
zip / unzipNén/giải nén định dạng .zipzip -r app.zip app/
gzip / gunzipNén/giải nén file đơn với .gzgzip access.log
bzip2 / bunzip2Nén/giải nén với tỉ lệ nén cao hơn gzipbzip2 -k data.sql
xzNén với tỉ lệ nén rất cao (chậm hơn)xz -9 largefile.bin
7zNén/giải nén định dạng 7-Zip (cần cài p7zip)7z x archive.7z

Pro tip

  • tar -czf = phổ biến nhất cho backup Linux. c=create, v=verbose, z=gzip, f=filename.
12

Environment, Variables & Shell Utilities

Biến môi trường, alias và các tiện ích shell hằng ngày.

LệnhMô tảVí dụ
echoIn giá trị / biến ra màn hìnhecho $HOME
exportKhai báo biến môi trườngexport JAVA_HOME=/opt/java
env / printenvLiệt kê toàn bộ biến môi trườngenv | grep PATH
unsetXóa một biến môi trườngunset JAVA_HOME
aliasTạo lệnh tắt cho câu lệnh dàialias ll='ls -la'
unaliasXóa aliasunalias ll
source / .Nạp lại file cấu hình shellsource ~/.bashrc
which / typeXem đường dẫn hoặc loại của một lệnhtype ls
historyXem lịch sử các lệnh đã chạyhistory | grep ssh
!! / !nChạy lại lệnh trước đó / lệnh thứ n trong historysudo !!
clearXóa màn hình terminalclear
dateXem/đặt ngày giờ hệ thốngdate "+%Y-%m-%d %H:%M:%S"
calXem lịchcal 2026
whoamiXem user hiện tạiwhoami
manXem tài liệu hướng dẫn của lệnhman tar

Ghi nhớ

  • Đặt exportalias trong ~/.bashrc hoặc ~/.bash_profile để giữ lại vĩnh viễn.
13

Redirection, Pipes & Operators

Điều hướng luồng dữ liệu input/output — nền tảng của automation.

Toán tửMô tảVí dụ
>Ghi đè output ra fileecho "hi" > file.txt
>>Ghi nối tiếp (append) vào fileecho "log" >> app.log
<Đọc input từ filemysql -u root < dump.sql
|Pipe — chuyển output lệnh này thành input lệnh khácps aux | grep nginx
&&Chạy lệnh sau NẾU lệnh trước thành côngmake && make install
||Chạy lệnh sau NẾU lệnh trước thất bạiping -c1 host || echo "down"
;Chạy tuần tự nhiều lệnh, không phụ thuộc kết quảcd /tmp; ls
2>Chuyển hướng riêng stderrcmd 2> error.log
2>&1Gộp stderr vào stdoutcmd > all.log 2>&1
&Chạy lệnh ở chế độ nền (background)long_task.sh &
$( )Command substitution — lấy output làm giá trịecho "Today: $(date)"
/dev/null"Hố đen" — bỏ qua output không cần thiếtcmd > /dev/null 2>&1
14

Users, Groups & sudo

Quản lý tài khoản, nhóm và phân quyền thực thi.

LệnhMô tảVí dụ
useradd / adduserTạo user mớisudo useradd -m devops
userdelXóa user (-r xóa luôn home)sudo userdel -r devops
usermod -aGThêm user vào groupusermod -aG docker devops
passwdĐặt/đổi mật khẩu userpasswd devops
chageQuản lý chính sách hết hạn mật khẩuchage -l devops
groupaddTạo group mớisudo groupadd devteam
groupdelXóa groupsudo groupdel devteam
groupsXem group của một usergroups devops
suChuyển sang user khácsu - devops
sudoThực thi lệnh với quyền superusersudo apt update
sudo -lXem các quyền sudo của user hiện tạisudo -l
visudoSửa file /etc/sudoers an toànsudo visudo
cat /etc/passwdXem danh sách user hệ thốngcat /etc/passwd
lastLịch sử đăng nhậplast
w / whoXem user đang đăng nhập hiện tạiw
15

System Services (systemd)

Quản lý dịch vụ hệ thống trên các distro hiện đại.

LệnhMô tảVí dụ
systemctl startKhởi động một servicesudo systemctl start nginx
systemctl stopDừng servicesudo systemctl stop nginx
systemctl restartKhởi động lại servicesudo systemctl restart nginx
systemctl reloadNạp lại config mà không gián đoạn servicesudo systemctl reload nginx
systemctl statusXem trạng thái servicesystemctl status nginx
systemctl enable/disableBật/tắt service tự khởi động cùng hệ thốngsudo systemctl enable nginx
systemctl list-unitsLiệt kê toàn bộ service đang chạysystemctl list-units --type=service
journalctlXem log hệ thống (systemd journal)journalctl -u nginx -f
journalctl --sinceLọc log theo thời gianjournalctl --since "1 hour ago"
systemctl daemon-reloadNạp lại cấu hình unit file mớisudo systemctl daemon-reload

Ghi nhớ

  • Sau khi tạo/sửa unit file trong /etc/systemd/system/, luôn chạy daemon-reload trước khi start service.
16

Task Scheduling (cron / at)

Tự động hóa các tác vụ định kỳ.

LệnhMô tảVí dụ
crontab -eSửa cron job của user hiện tạicrontab -e
crontab -lXem danh sách cron jobcrontab -l
crontab -rXóa toàn bộ cron jobcrontab -r
/etc/cron.d/Thư mục cron job cấp hệ thốngcat /etc/cron.d/backup
atLên lịch chạy một lần vào thời điểm cụ thểecho "reboot" | at 02:00
atq / atrmXem / xóa job của atatq
systemd timerThay thế cron hiện đại hơn (.timer unit)systemctl list-timers

Cú pháp cron

  • * * * * * command → phút(0-59) giờ(0-23) ngày(1-31) tháng(1-12) thứ(0-6)
  • VD: 0 2 * * * = chạy lúc 2:00 sáng mỗi ngày.
17

SSH & Remote Access

Kết nối, xác thực và làm việc từ xa an toàn.

LệnhMô tảVí dụ
sshĐăng nhập từ xa qua SSHssh user@192.168.1.10 -p 22
ssh-keygenTạo cặp khóa SSH (public/private)ssh-keygen -t ed25519
ssh-copy-idCopy public key lên server để login không cần passwordssh-copy-id user@server
~/.ssh/configFile cấu hình alias & tham số kết nối SSHHost db01 → HostName 10.0.0.5
scpCopy file an toàn giữa các host qua SSHscp file.txt user@host:/tmp/
rsync -e sshĐồng bộ file/thư mục qua SSH, hỗ trợ resumersync -avz -e ssh src/ user@host:/dest/
sftpTruyền file tương tác qua SSHsftp user@host
ssh -LPort forwarding (local tunnel)ssh -L 8080:localhost:80 user@host
ssh-agentQuản lý key SSH đã unlock trong phiêneval $(ssh-agent) && ssh-add

⚠️ Bảo mật

  • Luôn dùng SSH key thay vì mật khẩu cho server production.
  • Đặt quyền 600 cho private key: chmod 600 ~/.ssh/id_ed25519.
18

Shell Scripting Basics

Cú pháp nền tảng để viết script tự động hóa.

Thành phầnMô tảVí dụ
#!/bin/bashShebang — khai báo interpreter cho script#!/bin/bash
VAR=valueKhai báo biến (không có khoảng trắng quanh =)NAME="devops"
$1 $2 $@Tham số truyền vào scriptecho "Arg1: $1"
$?Exit code của lệnh trước đó (0 = thành công)echo $?
if / elif / elseCấu trúc điều kiệnif [ -f file.txt ]; then ... fi
forVòng lặp forfor i in 1 2 3; do echo $i; done
whileVòng lặp whilewhile read line; do echo $line; done < file.txt
functionĐịnh nghĩa hàmmyfunc() { echo "hello"; }
exitThoát script với exit codeexit 1
readĐọc input từ người dùngread -p "Enter name: " name
[ ] / [[ ]]Test điều kiện (so sánh, kiểm tra file)[ -d /data ] && echo "exists"
caseCấu trúc switch-casecase $1 in start) ... ;; esac

Toán tử so sánh phổ biến

  • -f file tồn tại · -d thư mục tồn tại · -z chuỗi rỗng · -eq/-ne/-gt/-lt so sánh số · == so sánh chuỗi
19

Security, Permissions & Best Practices

Bảo mật hệ thống. Bảo vệ dữ liệu. Tuân thủ best practices.

LệnhMô tảVí dụ
sudoThực thi lệnh với quyền superusersudo apt update
useradd / passwdTạo user mới / đổi mật khẩuuseradd devops
usermod -aGThêm user vào groupusermod -aG docker devops
cat /etc/passwdXem danh sách user hệ thốngcat /etc/passwd
lastLịch sử đăng nhậplast
fail2ban-client statusKiểm tra trạng thái Fail2Bansudo fail2ban-client status
ufw statusKiểm tra firewallsudo ufw status
clamscanQuét virus/malware (ClamAV)clamscan -r /var/www
rkhunterQuét rootkit trên hệ thốngsudo rkhunter --check
auditctl / ausearchTheo dõi & tìm kiếm audit log bảo mậtausearch -m avc

Security best practices

  • Dùng mật khẩu mạnh & đổi định kỳ
  • Dùng sudo thay vì đăng nhập root
  • Tắt root login trong /etc/ssh/sshd_config
  • Dùng SSH key thay vì password
  • Bật firewall (ufw/iptables), theo dõi log

Common risks

  • Mật khẩu yếu / tài khoản dùng chung
  • Mở SSH ra internet không giới hạn
  • Phần mềm lỗi thời / có lỗ hổng
  • Quyền quá rộng (777)
  • Không giám sát log & cảnh báo
20

Khác biệt giữa các bản phân phối Linux

Ubuntu Server, Oracle Linux, RHEL/CentOS/Rocky/Alma, Debian, SUSE — mỗi họ distro dùng một bộ công cụ khác nhau. Biết đúng lệnh cho đúng hệ giúp tránh loay hoay khi chuyển server.

🗺️ Hai họ distro chính

  • Debian-based (Ubuntu, Ubuntu Server, Debian, Linux Mint) → dùng apt/dpkg, firewall ufw, bảo mật AppArmor.
  • RHEL-based (Oracle Linux, RHEL, CentOS, Rocky Linux, AlmaLinux, Fedora) → dùng dnf/yum/rpm, firewall firewalld, bảo mật SELinux.
  • SUSE/openSUSE là họ thứ ba, dùng zypper/rpm — ít gặp hơn trong môi trường DevOps Việt Nam nhưng vẫn liệt kê để tham khảo.

1. Quản lý gói phần mềm (Package Management)

Mục đíchUbuntu / DebianOracle Linux / RHEL / CentOS / RockySUSE / openSUSE
Cập nhật danh sách góiapt updatednf check-updatezypper refresh
Nâng cấp hệ thốngapt upgrade -ydnf update -yzypper update
Cài đặt góiapt install nginxdnf install nginxzypper install nginx
Gỡ bỏ góiapt remove nginxdnf remove nginxzypper remove nginx
Cài file gói cục bộdpkg -i app.debrpm -ivh app.rpmrpm -ivh app.rpm
Liệt kê gói đã càidpkg -lrpm -qarpm -qa
Tìm gói chứa 1 lệnh/filedpkg -S /usr/bin/nginxrpm -qf /usr/bin/nginxrpm -qf /usr/bin/nginx
Xem thông tin repo/etc/apt/sources.list/etc/yum.repos.d/*.repo/etc/zypp/repos.d/
Bật EPEL / repo bổ sungadd-apt-repository ppa:...dnf install epel-releasezypper addrepo ...

2. Firewall & bảo mật hệ thống

Mục đíchUbuntu / DebianOracle Linux / RHEL / CentOS
Công cụ firewall mặc địnhufwfirewalld
Bật firewallsudo ufw enablesudo systemctl enable --now firewalld
Mở 1 port/servicesudo ufw allow 443/tcpsudo firewall-cmd --add-port=443/tcp --permanent
Áp dụng thay đổi(áp dụng ngay)sudo firewall-cmd --reload
Xem trạng thái/luậtsudo ufw status verbosesudo firewall-cmd --list-all
Cơ chế kiểm soát truy cập bắt buộcAppArmor (aa-status)SELinux (getenforce, sestatus)
Đổi chế độ bảo mật MACaa-enforce / aa-complainsetenforce 0 (Permissive) / 1 (Enforcing)
Xem/sửa policy chi tiết/etc/apparmor.d/semanage, restorecon, /etc/selinux/config

⚠️ Lỗi thường gặp

  • Trên Oracle Linux/RHEL, dịch vụ chạy đúng nhưng không truy cập được dù firewalld đã mở port — nguyên nhân thường là SELinux chặn. Kiểm tra bằng sudo ausearch -m avc -ts recent hoặc tạm tắt bằng setenforce 0 để xác định nguyên nhân (không nên tắt vĩnh viễn ở production).

3. Cấu hình mạng (Network)

Mục đíchUbuntu Server (18.04+)Oracle Linux / RHEL 8+
Công cụ quản lý networknetplanNetworkManager (nmcli / nmtui)
File cấu hình interface/etc/netplan/*.yaml/etc/sysconfig/network-scripts/ifcfg-* (hoặc nmcli con)
Áp dụng cấu hình mớisudo netplan applysudo nmcli connection reload
Xem danh sách kết nốiip a / networkctlnmcli connection show
Đặt IP tĩnh nhanh (CLI)Sửa YAML rồi netplan applynmcli con mod ens33 ipv4.addresses 10.0.0.5/24
DNS resolversystemd-resolved (/etc/resolv.conf symlink)/etc/resolv.conf trực tiếp hoặc qua NetworkManager

4. Log, user mặc định & thông tin hệ thống

Mục đíchUbuntu / DebianOracle Linux / RHEL / CentOS
File log hệ thống chính/var/log/syslog/var/log/messages
Log xác thực đăng nhập/var/log/auth.log/var/log/secure
Xem log qua systemd (cả 2 giống nhau)journalctl -xejournalctl -xe
User mặc định (cloud image)ubuntuopc (Oracle Cloud) / ec2-user (AWS RHEL)
Xem phiên bản OSlsb_release -a hoặc cat /etc/os-releasecat /etc/oracle-release hoặc cat /etc/os-release
Trình soạn thảo mặc địnhnano (thường có sẵn)vi/vim (thường có sẵn, nano cần cài thêm)
Chu kỳ hỗ trợ (LTS)Ubuntu LTS: 5 nămOracle Linux: đến 10 năm (Premier Support)

💡 Mẹo nhận diện nhanh distro đang dùng

  • cat /etc/os-release → hoạt động trên hầu hết mọi distro hiện đại
  • uname -a → xem kernel, không nói rõ tên distro
  • hostnamectl → hiển thị cả OS, kernel, architecture gọn trong 1 lệnh

Khi làm việc đa distro (ví dụ VNET/HSPI)

  • Luôn kiểm tra /etc/os-release trước khi chạy script cài đặt tự động
  • Viết script hỗ trợ cả 2 nhánh bằng cách detect package manager: command -v apt || command -v dnf
  • SELinux thường là nguyên nhân "âm thầm" gây lỗi khi migrate từ Ubuntu sang Oracle Linux
📝

Câu hỏi ôn tập

Chọn đáp án đúng — hệ thống sẽ chấm điểm tự động và giải thích.

Điểm: 0 / 0
🛠

Bài tập thực hành

Nhấn vào từng bài để xem yêu cầu và gợi ý lời giải.

Bài 1 — Tạo cấu trúc thư mục project Dễ
Tạo cấu trúc thư mục sau chỉ với một lệnh: myapp/src, myapp/logs, myapp/config.
mkdir -p myapp/{src,logs,config}
Sau đó dùng tree để kiểm tra kết quả.
Bài 2 — Theo dõi log real-time và đếm lỗi Dễ
Cho file app.log. Hãy: (1) xem 20 dòng cuối, (2) đếm số dòng chứa "ERROR", (3) theo dõi log real-time.
tail -n 20 app.log
grep -c "ERROR" app.log
tail -f app.log
Bài 3 — Phân quyền script triển khai Dễ
Tạo file deploy.sh, cấp quyền để owner full quyền, group & others chỉ đọc + thực thi.
touch deploy.sh
chmod 755 deploy.sh
ls -l deploy.sh
Bài 4 — Tìm và xóa file log cũ hơn 7 ngày Trung bình
Trong thư mục /var/log/myapp, tìm các file *.log cũ hơn 7 ngày rồi xóa.
find /var/log/myapp -name "*.log" -mtime +7 -exec rm -f {} \;
Gợi ý: luôn chạy trước với find ... -print để kiểm tra danh sách trước khi xóa thật.
Bài 5 — Thống kê top 5 IP truy cập nhiều nhất từ access log Trung bình
Cho file access.log theo định dạng Apache/Nginx, cột 1 là IP. Tìm 5 IP truy cập nhiều nhất.
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -5
Bài 6 — Kiểm tra & giải phóng dung lượng đĩa Trung bình
Server báo disk gần đầy. Hãy: (1) kiểm tra filesystem nào đầy nhất, (2) tìm 5 thư mục con lớn nhất trong /var.
df -h
du -h --max-depth=1 /var | sort -rh | head -5
Bài 7 — Xử lý tiến trình "treo" (zombie/hang) Trung bình
Có process java đang chiếm 100% CPU, không phản hồi. Hãy tìm PID và kill đúng cách (dùng SIGTERM trước, SIGKILL sau nếu cần).
ps -ef | grep java
kill -15 <PID>
# nếu vẫn còn chạy sau vài giây:
kill -9 <PID>
Bài 8 — Kiểm tra kết nối và port của một service Trung bình
Ứng dụng trên server không kết nối được DB port 5432. Hãy đưa ra chuỗi lệnh chẩn đoán đầy đủ theo troubleshooting flow.
ping db-server
traceroute db-server
dig db-server
nc -zv db-server 5432
ss -tulnp | grep 5432
Bài 9 — Backup file cấu hình an toàn trước khi sửa Trung bình
Trước khi sửa /etc/nginx/nginx.conf, hãy backup kèm timestamp, sau đó dùng sed thay đổi cổng 80 → 8080.
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%Y%m%d)
sed -i 's/listen 80;/listen 8080;/' /etc/nginx/nginx.conf
diff /etc/nginx/nginx.conf.bak.* /etc/nginx/nginx.conf
Bài 10 — Viết script kiểm tra sức khỏe hệ thống Khó
Viết một shell script healthcheck.sh in ra: uptime, dung lượng đĩa (df -h), RAM (free -h), và cảnh báo nếu disk > 80%.
#!/bin/bash
echo "== Uptime =="; uptime
echo "== Disk =="; df -h
echo "== Memory =="; free -h

USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if [ "$USAGE" -gt 80 ]; then
  echo "CẢNH BÁO: Disk sử dụng ${USAGE}% !"
fi
Cấp quyền thực thi và chạy bằng chmod +x healthcheck.sh && ./healthcheck.sh.
Bài 11 — Thiết lập firewall cơ bản với ufw Khó
Cấu hình firewall chỉ cho phép SSH, HTTP, HTTPS; chặn mọi cổng khác.
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
Bài 12 — Tự động hóa dọn log định kỳ bằng cron Khó
Thiết lập cron job chạy mỗi ngày lúc 2h sáng để nén log cũ hơn 3 ngày và xóa log nén cũ hơn 30 ngày trong /var/log/myapp.
crontab -e
# Thêm dòng:
0 2 * * * find /var/log/myapp -name "*.log" -mtime +3 -exec gzip {} \; && find /var/log/myapp -name "*.gz" -mtime +30 -delete
Bài 13 — Cài đặt & quản lý service với systemd Trung bình
Cài đặt Nginx, bật tự khởi động cùng hệ thống, kiểm tra trạng thái và xem log 50 dòng gần nhất.
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
systemctl status nginx
journalctl -u nginx -n 50
Bài 14 — Thiết lập SSH key-based login Trung bình
Tạo cặp SSH key mới, copy public key lên server 10.0.0.5, sau đó tắt đăng nhập bằng password.
ssh-keygen -t ed25519 -C "devops@myserver"
ssh-copy-id devops@10.0.0.5
# Trên server, sửa /etc/ssh/sshd_config:
# PasswordAuthentication no
sudo systemctl restart sshd
Bài 15 — Backup & nén thư mục dữ liệu định kỳ Khó
Viết lệnh nén toàn bộ thư mục /data thành file có tên kèm ngày tháng, lưu vào /backup.
tar -czvf /backup/data_$(date +%Y%m%d).tar.gz /data
ls -lh /backup/
Bài 16 — Mount ổ đĩa mới và cấu hình tự động mount khi boot Khó
Ổ đĩa mới /dev/sdb1 đã được định dạng ext4. Hãy mount vào /data và cấu hình để tự mount mỗi khi khởi động lại server.
sudo mkdir -p /data
sudo mount /dev/sdb1 /data
blkid /dev/sdb1
# Thêm dòng vào /etc/fstab (dùng UUID lấy từ blkid):
# UUID=xxxx-xxxx  /data  ext4  defaults  0  2
sudo mount -a
Bài 17 — Viết script cài Nginx tự nhận diện distro Khó
Viết một script install_nginx.sh tự động nhận diện hệ điều hành đang chạy (Ubuntu/Debian hay Oracle Linux/RHEL) và dùng đúng package manager để cài Nginx, sau đó mở port 80/443 trên đúng firewall của distro đó.
#!/bin/bash
if command -v apt &> /dev/null; then
  echo "Phát hiện Debian/Ubuntu — dùng apt + ufw"
  sudo apt update && sudo apt install -y nginx
  sudo ufw allow 80/tcp
  sudo ufw allow 443/tcp

elif command -v dnf &> /dev/null; then
  echo "Phát hiện Oracle Linux/RHEL — dùng dnf + firewalld"
  sudo dnf install -y nginx
  sudo systemctl enable --now firewalld
  sudo firewall-cmd --add-service=http --permanent
  sudo firewall-cmd --add-service=https --permanent
  sudo firewall-cmd --reload

else
  echo "Không nhận diện được package manager!"
  exit 1
fi

sudo systemctl enable --now nginx
systemctl status nginx
Gợi ý mở rộng: nếu deploy trên Oracle Linux, nhớ kiểm tra thêm SELinux context bằng sudo semanage port -l | grep http nếu Nginx nghe trên port không chuẩn (không phải 80/443).