myapp/src, myapp/logs, myapp/config.
mkdir -p myapp/{src,logs,config}
Sau đó dùng tree để kiểm tra kết quả.
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.
Quản lý file như một Pro.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| touch | Tạo file rỗng hoặc cập nhật timestamp | touch file.txt |
| cat | Hiển thị nội dung file | cat file.txt |
| more | Xem nội dung theo từng trang | more file.txt |
| less | Xem nội dung, cuộn lên/xuống | less file.txt |
| head | Xem N dòng đầu (mặc định 10) | head -n 20 file.txt |
| tail | Xem N dòng cuối, hữu ích cho log | tail -f app.log |
| cp | Sao chép file (-r cho thư mục) | cp -r dir1/ dir2/ |
| mv | Di chuyển / đổi tên file | mv old.txt new.txt |
| rm | Xóa file | rm -rf folder/ |
| ln | Tạo hard link | ln file.txt link.txt |
| ln -s | Tạo symbolic (soft) link | ln -s /opt/app app_link |
| readlink -f | Xem đường dẫn thật của symlink | readlink -f app_link |
| file | Xác định loại file | file app.log |
| stat | Thông tin chi tiết file (size, inode, timestamps) | stat file.txt |
| shred | Xóa file an toàn, ghi đè dữ liệu | shred -u secret.txt |
| split | Chia nhỏ file lớn thành nhiều phần | split -b 100M big.iso part_ |
| rename | Đổi tên hàng loạt theo pattern | rename 's/.txt/.bak/' *.txt |
| md5sum / sha256sum | Kiểm tra checksum/toàn vẹn file | sha256sum file.iso |
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.Quản lý thư mục hiệu quả.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| mkdir | Tạo thư mục mới | mkdir mydir |
| mkdir -p | Tạo thư mục cha khi cần | mkdir -p app/logs/data |
| rmdir | Xóa thư mục rỗng | rmdir olddir |
| rm -rf | Xóa cưỡng bức thư mục và toàn bộ nội dung | rm -rf temp/ |
| find | Tìm file/thư mục trong cây thư mục | find . -name "*.yml" |
| find -type | Tìm theo loại (f=file, d=dir, l=link) | find . -type d -empty |
| find -mtime | Tìm theo thời gian sửa đổi | find . -mtime +30 |
| find -size | Tìm theo kích thước | find . -size +100M |
| find -exec | Thực thi lệnh trên kết quả tìm được | find . -name "*.log" -exec rm {} \; |
| locate | Tìm nhanh bằng database locate | locate nginx.conf |
| updatedb | Cập nhật database cho locate | sudo updatedb |
| tree | Hiển thị cấu trúc dạng cây | tree -L 2 |
| rsync | Đồng bộ thư mục (local/remote), hỗ trợ resume | rsync -avz src/ dest/ |
Kiểm soát truy cập. Giữ hệ thống an toàn.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| chmod | Đổi quyền file/thư mục | chmod 755 script.sh |
| chmod +x | Thêm quyền thực thi | chmod +x deploy.sh |
| chmod -R | Đổi quyền đệ quy cho thư mục | chmod -R 755 /var/www |
| chown | Đổi owner của file | chown user file.txt |
| chown -R | Đổi owner:group đệ quy | chown -R www-data:www-data /var/www |
| chgrp | Đổi group owner | chgrp dev file.txt |
| umask | Đặt quyền mặc định cho file mới | umask 022 |
| ls -l | Hiển thị quyền dạng long format | ls -l file.txt |
| stat | Thông tin chi tiết về file | stat file.txt |
| id | Xem user và group hiện tại | id |
| chattr | Đặt thuộc tính đặc biệt (vd: immutable) | chattr +i file.txt |
| lsattr | Xem thuộc tính đặc biệt của file | lsattr file.txt |
| setfacl | Đặt Access Control List chi tiết hơn | setfacl -m u:alice:rwx file.txt |
| getfacl | Xem ACL của file | getfacl file.txt |
755 = 7(owner) + 5(group) + 5(others)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)Theo dõi, quản lý & kiểm soát tiến trình.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| ps -ef | Hiển thị tiến trình đang chạy | ps -ef |
| ps aux | Snapshot tiến trình (định dạng BSD) | ps aux | grep nginx |
| top / htop | Xem tiến trình real-time (htop tương tác tốt hơn) | htop |
| pstree | Hiển thị cây quan hệ cha-con của tiến trình | pstree -p |
| kill | Kill tiến trình theo PID | kill -9 1234 |
| killall | Kill tiến trình theo tên | killall nginx |
| pkill / pgrep | Kill / lấy PID theo pattern | pkill -f java |
| jobs / bg / fg | Quản lý job nền | bg %1 · fg %1 |
| disown | Gỡ job khỏi shell hiện tại (chạy độc lập) | disown %1 |
| nohup | Chạy lệnh miễn nhiễm hangup | nohup app.sh & |
| nice / renice | Đặt / đổi độ ưu tiên CPU của tiến trình | renice -5 -p 1234 |
| lsof | Liệt kê file đang được mở bởi tiến trình | lsof -i :8080 |
| strace | Theo dõi system call của tiến trình (debug) | strace -p 1234 |
| time | Đo thời gian thực thi lệnh | time ./script.sh |
1 SIGHUP (reload) · 15 SIGTERM (terminate, dùng trước) · 9 SIGKILL (force kill, dùng sau nếu cần)Giám sát tài nguyên hệ thống như một Pro.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| df -h | Dung lượng đĩa (human readable) | df -h |
| du -sh | Tổng dung lượng của file/dir | du -sh /var/log |
| du --max-depth | Dung lượng theo từng thư mục con | du -h --max-depth=1 /var |
| ncdu | Xem dung lượng đĩa dạng tương tác trực quan | ncdu /var |
| lsblk | Liệt kê block devices | lsblk |
| free -h | Dung lượng RAM sử dụng | free -h |
| uptime | Thời gian chạy hệ thống & load average | uptime |
| vmstat | Thống kê bộ nhớ ảo | vmstat 1 5 |
| iostat | Thống kê I/O | iostat -xz 1 5 |
| sar | Báo cáo hoạt động hệ thống (lịch sử) | sar -u 1 5 |
| watch | Chạy lặp lại lệnh theo chu kỳ để theo dõi | watch -n 1 df -h |
| dmesg | Xem log kernel (phần cứng, driver, lỗi disk) | dmesg | tail -20 |
Quản lý phân vùng, định dạng và mount ổ đĩa.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| fdisk -l | Liệt kê các phân vùng đĩa | sudo fdisk -l |
| fdisk /dev/sdX | Tạo/sửa phân vùng (interactive) | sudo fdisk /dev/sdb |
| parted | Cô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ùng | mkfs.ext4 /dev/sdb1 |
| mount | Gắn (mount) filesystem vào thư mục | mount /dev/sdb1 /data |
| umount | Gỡ mount | umount /data |
| blkid | Xem UUID và loại filesystem của thiết bị | blkid /dev/sdb1 |
| /etc/fstab | File cấu hình mount tự động khi boot | cat /etc/fstab |
| mount -a | Mount lại toàn bộ theo /etc/fstab | sudo mount -a |
| swapon / swapoff | Bật/tắt swap | sudo swapon /swapfile |
fdisk hoặc mkfs — các thao tác này có thể xóa dữ liệu vĩnh viễn./etc/fstab thay vì tên thiết bị (/dev/sdb1) để tránh lỗi khi thứ tự thiết bị thay đổi.Kết nối, chẩn đoán & xử lý sự cố mạng.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| ip a | Hiển thị interface & IP | ip a |
| ip route | Xem bảng định tuyến | ip route show |
| ping | Kiểm tra kết nối tới host | ping google.com |
| traceroute | Trace đường đi tới host | traceroute google.com |
| curl | Transfer dữ liệu từ/đến server | curl -I https://api.github.com |
| wget | Tải file qua HTTP/HTTPS/FTP | wget https://example.com/file.zip |
| ssh / scp | Đăng nhập / copy an toàn qua SSH | ssh user@192.168.1.10 |
| ss -tulnp | Socket statistics (thay thế netstat) | ss -tulnp |
| netstat -tulnp | Xem port đang mở & connections (legacy) | netstat -tulnp |
| dig / nslookup | Tra cứu DNS | dig google.com |
| whois | Thông tin đăng ký domain | whois example.com |
| nc (netcat) | Kiểm tra port, gửi/nhận dữ liệu qua TCP/UDP | nc -zv google.com 443 |
| telnet | Kiểm tra kết nối TCP tới port cụ thể | telnet google.com 80 |
| nmap | Quét port, phát hiện service trên host | nmap -Pn host |
| arp -a | Xem bảng ARP (MAC address trong LAN) | arp -a |
| hostname / hostnamectl | Xem/đổi hostname hệ thống | hostnamectl set-hostname db01 |
| iptables / ufw | Cấu hình firewall | sudo iptables -L |
| ifconfig | Cấu hình interface mạng (legacy) | ifconfig |
Find. Filter. Transform. Analyze.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| grep | Tìm pattern trong file | grep "ERROR" app.log |
| grep -E | Tìm với regex mở rộng (egrep) | grep -E "ERROR|WARN" app.log |
| grep -rn | Tìm đệ quy kèm số dòng | grep -rn "TODO" src/ |
| awk | Ngôn ngữ xử lý theo pattern | awk '{print $1}' file.txt |
| sed | Stream editor để filter/transform text | sed 's/dev/prod/' file.txt |
| sort / uniq | Sắp xếp / loại bỏ dòng trùng | sort file.txt | uniq -c |
| cut | Cắt cột dữ liệu | cut -d',' -f1 file.csv |
| tr | Chuyển đổi/xóa ký tự | tr 'a-z' 'A-Z' < file.txt |
| wc | Đếm dòng/từ/ký tự | wc -l file.txt |
| xargs | Build & thực thi lệnh từ input | cat files.txt | xargs rm -f |
| tee | Ghi output ra file & hiển thị màn hình | ls -l | tee output.txt |
| diff / comm | So sánh file | diff file1.txt file2.txt |
| paste | Ghép cột của nhiều file | paste file1.txt file2.txt |
| nl | Đánh số dòng cho file | nl file.txt |
| column -t | Căn dữ liệu thành bảng dễ đọc | cat data.csv | column -t -s, |
| printf | In dữ liệu theo định dạng | printf "%-10s %s\n" name value |
| rev | Đảo ngược chuỗi ký tự mỗi dòng | echo "linux" | rev |
| jq | Xử lý & format dữ liệu JSON | curl api | jq '.data[0]' |
grep, awk, sed — đây là siêu năng lực của DevOps.|) với các lệnh này = automation magic.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ệnh | Hệ điều hành | Ví dụ |
|---|---|---|
| apt update / upgrade | Debian/Ubuntu — cập nhật danh sách & nâng cấp gói | sudo apt update && sudo apt upgrade -y |
| apt install | Debian/Ubuntu — cài đặt gói | sudo apt install nginx |
| apt remove / purge | Debian/Ubuntu — gỡ gói (purge xóa cả config) | sudo apt purge nginx |
| dpkg -i | Debian/Ubuntu — cài đặt file .deb trực tiếp | sudo dpkg -i app.deb |
| dpkg -l | Debian/Ubuntu — liệt kê gói đã cài | dpkg -l | grep nginx |
| yum / dnf install | RHEL/CentOS/Oracle Linux — cài đặt gói | sudo dnf install httpd |
| yum / dnf update | RHEL/CentOS/Oracle Linux — cập nhật hệ thống | sudo dnf update -y |
| rpm -ivh | RHEL/CentOS — cài đặt file .rpm trực tiếp | sudo rpm -ivh app.rpm |
| rpm -qa | RHEL/CentOS — liệt kê gói đã cài | rpm -qa | grep oracle |
| snap install | Universal — cài đặt gói dạng snap | sudo snap install code |
| which / whereis | Tìm đường dẫn thực thi của một lệnh đã cài | which python3 |
apt/dpkg dùng cho hệ Debian-based (Ubuntu); yum/dnf/rpm dùng cho hệ RHEL-based (CentOS, Oracle Linux, Rocky Linux).Nén, giải nén và đóng gói file/thư mục.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| tar -cvzf | Đóng gói & nén thư mục thành .tar.gz | tar -cvzf backup.tar.gz /data |
| tar -xvzf | Giải nén file .tar.gz | tar -xvzf backup.tar.gz -C /restore |
| tar -tvf | Xem danh sách file trong archive (không giải nén) | tar -tvf backup.tar.gz |
| zip / unzip | Nén/giải nén định dạng .zip | zip -r app.zip app/ |
| gzip / gunzip | Nén/giải nén file đơn với .gz | gzip access.log |
| bzip2 / bunzip2 | Nén/giải nén với tỉ lệ nén cao hơn gzip | bzip2 -k data.sql |
| xz | Nén với tỉ lệ nén rất cao (chậm hơn) | xz -9 largefile.bin |
| 7z | Nén/giải nén định dạng 7-Zip (cần cài p7zip) | 7z x archive.7z |
tar -czf = phổ biến nhất cho backup Linux. c=create, v=verbose, z=gzip, f=filename.Biến môi trường, alias và các tiện ích shell hằng ngày.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| echo | In giá trị / biến ra màn hình | echo $HOME |
| export | Khai báo biến môi trường | export JAVA_HOME=/opt/java |
| env / printenv | Liệt kê toàn bộ biến môi trường | env | grep PATH |
| unset | Xóa một biến môi trường | unset JAVA_HOME |
| alias | Tạo lệnh tắt cho câu lệnh dài | alias ll='ls -la' |
| unalias | Xóa alias | unalias ll |
| source / . | Nạp lại file cấu hình shell | source ~/.bashrc |
| which / type | Xem đường dẫn hoặc loại của một lệnh | type ls |
| history | Xem lịch sử các lệnh đã chạy | history | grep ssh |
| !! / !n | Chạy lại lệnh trước đó / lệnh thứ n trong history | sudo !! |
| clear | Xóa màn hình terminal | clear |
| date | Xem/đặt ngày giờ hệ thống | date "+%Y-%m-%d %H:%M:%S" |
| cal | Xem lịch | cal 2026 |
| whoami | Xem user hiện tại | whoami |
| man | Xem tài liệu hướng dẫn của lệnh | man tar |
export và alias trong ~/.bashrc hoặc ~/.bash_profile để giữ lại vĩnh viễn.Đ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 file | echo "hi" > file.txt |
| >> | Ghi nối tiếp (append) vào file | echo "log" >> app.log |
| < | Đọc input từ file | mysql -u root < dump.sql |
| | | Pipe — chuyển output lệnh này thành input lệnh khác | ps aux | grep nginx |
| && | Chạy lệnh sau NẾU lệnh trước thành công | make && make install |
| || | Chạy lệnh sau NẾU lệnh trước thất bại | ping -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 stderr | cmd 2> error.log |
| 2>&1 | Gộp stderr vào stdout | cmd > 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ết | cmd > /dev/null 2>&1 |
Quản lý tài khoản, nhóm và phân quyền thực thi.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| useradd / adduser | Tạo user mới | sudo useradd -m devops |
| userdel | Xóa user (-r xóa luôn home) | sudo userdel -r devops |
| usermod -aG | Thêm user vào group | usermod -aG docker devops |
| passwd | Đặt/đổi mật khẩu user | passwd devops |
| chage | Quản lý chính sách hết hạn mật khẩu | chage -l devops |
| groupadd | Tạo group mới | sudo groupadd devteam |
| groupdel | Xóa group | sudo groupdel devteam |
| groups | Xem group của một user | groups devops |
| su | Chuyển sang user khác | su - devops |
| sudo | Thực thi lệnh với quyền superuser | sudo apt update |
| sudo -l | Xem các quyền sudo của user hiện tại | sudo -l |
| visudo | Sửa file /etc/sudoers an toàn | sudo visudo |
| cat /etc/passwd | Xem danh sách user hệ thống | cat /etc/passwd |
| last | Lịch sử đăng nhập | last |
| w / who | Xem user đang đăng nhập hiện tại | w |
Quản lý dịch vụ hệ thống trên các distro hiện đại.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| systemctl start | Khởi động một service | sudo systemctl start nginx |
| systemctl stop | Dừng service | sudo systemctl stop nginx |
| systemctl restart | Khởi động lại service | sudo systemctl restart nginx |
| systemctl reload | Nạp lại config mà không gián đoạn service | sudo systemctl reload nginx |
| systemctl status | Xem trạng thái service | systemctl status nginx |
| systemctl enable/disable | Bật/tắt service tự khởi động cùng hệ thống | sudo systemctl enable nginx |
| systemctl list-units | Liệt kê toàn bộ service đang chạy | systemctl list-units --type=service |
| journalctl | Xem log hệ thống (systemd journal) | journalctl -u nginx -f |
| journalctl --since | Lọc log theo thời gian | journalctl --since "1 hour ago" |
| systemctl daemon-reload | Nạp lại cấu hình unit file mới | sudo systemctl daemon-reload |
/etc/systemd/system/, luôn chạy daemon-reload trước khi start service.Tự động hóa các tác vụ định kỳ.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| crontab -e | Sửa cron job của user hiện tại | crontab -e |
| crontab -l | Xem danh sách cron job | crontab -l |
| crontab -r | Xóa toàn bộ cron job | crontab -r |
| /etc/cron.d/ | Thư mục cron job cấp hệ thống | cat /etc/cron.d/backup |
| at | Lên lịch chạy một lần vào thời điểm cụ thể | echo "reboot" | at 02:00 |
| atq / atrm | Xem / xóa job của at | atq |
| systemd timer | Thay thế cron hiện đại hơn (.timer unit) | systemctl list-timers |
* * * * * command → phút(0-59) giờ(0-23) ngày(1-31) tháng(1-12) thứ(0-6)0 2 * * * = chạy lúc 2:00 sáng mỗi ngày.Kết nối, xác thực và làm việc từ xa an toàn.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| ssh | Đăng nhập từ xa qua SSH | ssh user@192.168.1.10 -p 22 |
| ssh-keygen | Tạo cặp khóa SSH (public/private) | ssh-keygen -t ed25519 |
| ssh-copy-id | Copy public key lên server để login không cần password | ssh-copy-id user@server |
| ~/.ssh/config | File cấu hình alias & tham số kết nối SSH | Host db01 → HostName 10.0.0.5 |
| scp | Copy file an toàn giữa các host qua SSH | scp file.txt user@host:/tmp/ |
| rsync -e ssh | Đồng bộ file/thư mục qua SSH, hỗ trợ resume | rsync -avz -e ssh src/ user@host:/dest/ |
| sftp | Truyền file tương tác qua SSH | sftp user@host |
| ssh -L | Port forwarding (local tunnel) | ssh -L 8080:localhost:80 user@host |
| ssh-agent | Quản lý key SSH đã unlock trong phiên | eval $(ssh-agent) && ssh-add |
600 cho private key: chmod 600 ~/.ssh/id_ed25519.Cú pháp nền tảng để viết script tự động hóa.
| Thành phần | Mô tả | Ví dụ |
|---|---|---|
| #!/bin/bash | Shebang — khai báo interpreter cho script | #!/bin/bash |
| VAR=value | Khai báo biến (không có khoảng trắng quanh =) | NAME="devops" |
| $1 $2 $@ | Tham số truyền vào script | echo "Arg1: $1" |
| $? | Exit code của lệnh trước đó (0 = thành công) | echo $? |
| if / elif / else | Cấu trúc điều kiện | if [ -f file.txt ]; then ... fi |
| for | Vòng lặp for | for i in 1 2 3; do echo $i; done |
| while | Vòng lặp while | while read line; do echo $line; done < file.txt |
| function | Định nghĩa hàm | myfunc() { echo "hello"; } |
| exit | Thoát script với exit code | exit 1 |
| read | Đọc input từ người dùng | read -p "Enter name: " name |
| [ ] / [[ ]] | Test điều kiện (so sánh, kiểm tra file) | [ -d /data ] && echo "exists" |
| case | Cấu trúc switch-case | case $1 in start) ... ;; esac |
-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ỗiBảo mật hệ thống. Bảo vệ dữ liệu. Tuân thủ best practices.
| Lệnh | Mô tả | Ví dụ |
|---|---|---|
| sudo | Thực thi lệnh với quyền superuser | sudo apt update |
| useradd / passwd | Tạo user mới / đổi mật khẩu | useradd devops |
| usermod -aG | Thêm user vào group | usermod -aG docker devops |
| cat /etc/passwd | Xem danh sách user hệ thống | cat /etc/passwd |
| last | Lịch sử đăng nhập | last |
| fail2ban-client status | Kiểm tra trạng thái Fail2Ban | sudo fail2ban-client status |
| ufw status | Kiểm tra firewall | sudo ufw status |
| clamscan | Quét virus/malware (ClamAV) | clamscan -r /var/www |
| rkhunter | Quét rootkit trên hệ thống | sudo rkhunter --check |
| auditctl / ausearch | Theo dõi & tìm kiếm audit log bảo mật | ausearch -m avc |
/etc/ssh/sshd_configUbuntu 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.
apt/dpkg, firewall ufw, bảo mật AppArmor.dnf/yum/rpm, firewall firewalld, bảo mật SELinux.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.| Mục đích | Ubuntu / Debian | Oracle Linux / RHEL / CentOS / Rocky | SUSE / openSUSE |
|---|---|---|---|
| Cập nhật danh sách gói | apt update | dnf check-update | zypper refresh |
| Nâng cấp hệ thống | apt upgrade -y | dnf update -y | zypper update |
| Cài đặt gói | apt install nginx | dnf install nginx | zypper install nginx |
| Gỡ bỏ gói | apt remove nginx | dnf remove nginx | zypper remove nginx |
| Cài file gói cục bộ | dpkg -i app.deb | rpm -ivh app.rpm | rpm -ivh app.rpm |
| Liệt kê gói đã cài | dpkg -l | rpm -qa | rpm -qa |
| Tìm gói chứa 1 lệnh/file | dpkg -S /usr/bin/nginx | rpm -qf /usr/bin/nginx | rpm -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ổ sung | add-apt-repository ppa:... | dnf install epel-release | zypper addrepo ... |
| Mục đích | Ubuntu / Debian | Oracle Linux / RHEL / CentOS |
|---|---|---|
| Công cụ firewall mặc định | ufw | firewalld |
| Bật firewall | sudo ufw enable | sudo systemctl enable --now firewalld |
| Mở 1 port/service | sudo ufw allow 443/tcp | sudo 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ật | sudo ufw status verbose | sudo firewall-cmd --list-all |
| Cơ chế kiểm soát truy cập bắt buộc | AppArmor (aa-status) | SELinux (getenforce, sestatus) |
| Đổi chế độ bảo mật MAC | aa-enforce / aa-complain | setenforce 0 (Permissive) / 1 (Enforcing) |
| Xem/sửa policy chi tiết | /etc/apparmor.d/ | semanage, restorecon, /etc/selinux/config |
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).| Mục đích | Ubuntu Server (18.04+) | Oracle Linux / RHEL 8+ |
|---|---|---|
| Công cụ quản lý network | netplan | NetworkManager (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ới | sudo netplan apply | sudo nmcli connection reload |
| Xem danh sách kết nối | ip a / networkctl | nmcli connection show |
| Đặt IP tĩnh nhanh (CLI) | Sửa YAML rồi netplan apply | nmcli con mod ens33 ipv4.addresses 10.0.0.5/24 |
| DNS resolver | systemd-resolved (/etc/resolv.conf symlink) | /etc/resolv.conf trực tiếp hoặc qua NetworkManager |
| Mục đích | Ubuntu / Debian | Oracle 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 -xe | journalctl -xe |
| User mặc định (cloud image) | ubuntu | opc (Oracle Cloud) / ec2-user (AWS RHEL) |
| Xem phiên bản OS | lsb_release -a hoặc cat /etc/os-release | cat /etc/oracle-release hoặc cat /etc/os-release |
| Trình soạn thảo mặc định | nano (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ăm | Oracle Linux: đến 10 năm (Premier Support) |
cat /etc/os-release → hoạt động trên hầu hết mọi distro hiện đạiuname -a → xem kernel, không nói rõ tên distrohostnamectl → hiển thị cả OS, kernel, architecture gọn trong 1 lệnh/etc/os-release trước khi chạy script cài đặt tự độngcommand -v apt || command -v dnfChọn đáp án đúng — hệ thống sẽ chấm điểm tự động và giải thích.
Nhấn vào từng bài để xem yêu cầu và gợi ý lời giải.
myapp/src, myapp/logs, myapp/config.
mkdir -p myapp/{src,logs,config}
Sau đó dùng tree để kiểm tra kết quả.
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
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
/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.
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
/var.
df -h du -h --max-depth=1 /var | sort -rh | head -5
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>
ping db-server traceroute db-server dig db-server nc -zv db-server 5432 ss -tulnp | grep 5432
/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
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.
sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status
/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
sudo apt install nginx -y sudo systemctl enable nginx sudo systemctl start nginx systemctl status nginx journalctl -u nginx -n 50
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
/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/
/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
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 nginxGợ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).