101+ lệnh linux thường gặp
Tung Bui Thanh (TungDaDev)16 mins read

Dân lập trình, nhất là anh em làm backend với devops, thường mê Linux lắm. Có người còn coi nó là chân ái.
Đi làm thật thì service nào cũng chạy trên server, mà server thì gần như toàn Linux, nên chuyện gõ lệnh là không né được. Biết nhiều lệnh, nhớ nhiều lệnh thì làm việc nhanh hơn, mà CV cũng đẹp hơn.
Thêm nữa, gõ lệnh nhìn ngầu hơn hẳn. Thật đấy, không đùa đâu :))) Không tin thì đọc xong bài ra quán cafe ngồi gõ thử xem có ai nhìn không nhé. :)))
# quản lý tệp và thư mục
ls: liệt kê nội dung thư mục, xem danh sách file kèm chi tiết trong thư mục hiện tại.
tungdadev@linux:~$ ls -lls còn hay đi kèm -a (hiện cả file ẩn), -h (dung lượng dễ đọc), gộp lại kiểu -la, -lah. Còn ll mà bạn hay thấy thực ra là alias của ls -l (hoặc ls -alF trên Ubuntu), không phải tham số.
cd: viết tắt của change directory, dùng để chuyển sang thư mục khác.
Ví dụ muốn vào thư mục /var/mb-server/log:
tungdadev@linux:~$ cd /var/mb-server/logpwd: viết tắt của print working directory, in ra đường dẫn thư mục bạn đang đứng.
tungdadev@linux:~$ pwd
/home/tungdadevmkdir: viết tắt của make directory, tạo thư mục mới.
tungdadev@linux:~$ mkdir new_projectrmdir: xóa thư mục rỗng.
tungdadev@linux:~$ rmdir old_folderrm: xóa file hoặc thư mục. Ví dụ xóa một thư mục cùng toàn bộ nội dung bên trong:
tungdadev@linux:~$ rm -r temp_foldercp: sao chép file hoặc thư mục, kiểu backup một file quan trọng:
tungdadev@linux:~$ cp file.txt /backup/file.txtmv: di chuyển hoặc đổi tên file/thư mục.
tungdadev@linux:~$ mv old_name.txt new_name.txtfind: tìm file hoặc thư mục. Ví dụ tìm các file log trong /var/log:
tungdadev@linux:~$ find /var/log -name "*.log"touch: tạo một file rỗng.
tungdadev@linux:~$ touch index.html# quản lý người dùng và quyền
whoami: cho biết bạn đang đăng nhập bằng user nào.
tungdadev@linux:~$ whoami
tungdadevid: xem thông tin user (uid, gid, group).
tungdadev@linux:~$ id
uid=1000(tungdadev) gid=1000(tungdadev) groups=1000(tungdadev)chmod: đổi quyền truy cập file. Ví dụ cho phép chạy một script:
tungdadev@linux:~$ chmod 755 script.shchown: đổi chủ sở hữu file/thư mục. Ví dụ giao file cấu hình cho root (đổi chủ sang user khác thì cần quyền root, nên phải có sudo):
tungdadev@linux:~$ sudo chown root:root config.confpasswd: đổi mật khẩu cho tài khoản đang dùng.
tungdadev@linux:~$ passwd# quản lý hệ thống
top: theo dõi tiến trình và tài nguyên theo thời gian thực, xem máy đang ngốn bao nhiêu CPU/RAM.
tungdadev@linux:~$ tophtop: bản xịn hơn của top, giao diện dễ nhìn, quản lý tiến trình tiện hơn.
tungdadev@linux:~$ htopdf: xem ổ đĩa còn trống bao nhiêu.
tungdadev@linux:~$ df -hdu: xem một thư mục hay file chiếm bao nhiêu dung lượng, ví dụ thư mục log:
tungdadev@linux:~$ du -sh /var/logfree: xem RAM. Trên Windows hay Mac thì mở app có sẵn là xong. Linux cũng có app, nhưng thôi, gõ lệnh cho ngầu. Mà nói thật, server ngoài dự án làm gì có UI mà bấm :))) Nên nhớ lệnh đi nhé.
tungdadev@linux:~$ free -huptime: xem server đã chạy liên tục được bao lâu.
tungdadev@linux:~$ uptimereboot: khởi động lại máy, giống nút Restart trên Windows vậy á.
tungdadev@linux:~$ sudo rebootshutdown: tắt máy. Nhanh hơn cầm chuột click click mấy cái đúng không?
tungdadev@linux:~$ sudo shutdown nowsystemctl: quản lý các service của hệ thống. Lệnh này đi làm dùng nhiều lắm nè, start/stop/restart service đều qua nó. Ví dụ restart Nginx:
tungdadev@linux:~$ sudo systemctl restart nginxjournalctl: xem log hệ thống, ví dụ log của Nginx:
tungdadev@linux:~$ sudo journalctl -u nginx# xử lý mạng
ping: kiểm tra kết nối mạng.
tungdadev@linux:~$ ping google.comcurl: gửi request HTTP. Ví dụ xem website trả về status gì:
tungdadev@linux:~$ curl -I https://example.comwget: tải file từ một URL về máy.
tungdadev@linux:~$ wget https://example.com/file.zipnetstat: xem các kết nối mạng, hay dùng để kiểm tra port nào đang mở. Lệnh này nằm trong gói net-tools đã cũ, nhiều distro mới không cài sẵn nữa; bản thay thế là ss ở bên dưới.
tungdadev@linux:~$ netstat -tulnifconfig: cấu hình và kiểm tra mạng, hay dùng nhất là để xem địa chỉ IP.
tungdadev@linux:~$ ifconfigip: bản thay thế mới hơn của ifconfig, xem thông tin mạng.
tungdadev@linux:~$ ip addr shownslookup: tra DNS, xem thông tin một tên miền.
tungdadev@linux:~$ nslookup google.comtraceroute: xem gói tin đi qua những chặng nào, tiện để dò xem mạng nghẽn ở đâu.
tungdadev@linux:~$ traceroute example.comnmap: quét port và dịch vụ, dùng để kiểm tra bảo mật mạng.
tungdadev@linux:~$ nmap -sT localhostss: xem trạng thái socket, theo dõi kết nối TCP/UDP.
tungdadev@linux:~$ ss -tuln# quản lý gói phần mềm
apt-get: quản lý gói phần mềm. Ví dụ cài Nginx:
tungdadev@linux:~$ sudo apt-get install nginxapt: bản cải tiến của apt-get. Ví dụ cập nhật danh sách gói:
tungdadev@linux:~$ sudo apt updatedpkg: quản lý gói ở mức thấp, hay dùng để cài tay một file .deb.
tungdadev@linux:~$ sudo dpkg -i package.debsnap: hệ thống đóng gói và cài đặt app chạy được trên nhiều distro, do Canonical (công ty đứng sau Ubuntu) làm ra. Ubuntu có sẵn snap, còn các distro lớn khác như Debian, Arch Linux, Fedora, CentOS, Manjaro thì cài thêm snapd là dùng được.
Ví dụ cài Visual Studio Code:
tungdadev@linux:~$ sudo snap install code --classicflatpak: một cách đóng gói app cho Linux. Mỗi distro có trình quản lý gói riêng, còn Flatpak muốn làm một kiểu đóng gói chạy được trên mọi distro, nhờ vậy người làm app đỡ cực hơn.
Ví dụ cài Firefox từ Flathub:
tungdadev@linux:~$ flatpak install flathub org.mozilla.firefox# phân tích log
tail: xem mấy dòng cuối của file log. Thêm -f là theo dõi log chạy theo thời gian thực.
tungdadev@linux:~$ tail -f /var/log/sysloghead: xem mấy dòng đầu của file, ví dụ 20 dòng đầu của log:
tungdadev@linux:~$ head -n 20 /var/log/syslogcat: in nội dung file ra màn hình, ví dụ access log của Nginx:
tungdadev@linux:~$ cat /var/log/nginx/access.logless: đọc file dài, cuộn lên xuống thoải mái, hợp để xem log kernel.
tungdadev@linux:~$ less /var/log/dmesggrep: tìm chuỗi trong file, ví dụ lục lỗi trong log hệ thống:
tungdadev@linux:~$ grep "error" /var/log/syslogawk: lấy và xử lý dữ liệu theo cột, ví dụ rút IP và timestamp từ log Nginx:
tungdadev@linux:~$ awk '{print $1, $4}' /var/log/nginx/access.logcut: cắt lấy từng trường trong dòng log, ví dụ lấy cột đầu tiên (IP):
tungdadev@linux:~$ cut -d' ' -f1 /var/log/nginx/access.logsort: sắp xếp các dòng trong file, có mặt trên hầu hết hệ Unix và họ hàng của nó.
tungdadev@linux:~$ sort /var/log/nginx/access.loguniq: báo cáo hoặc lọc các dòng bị lặp. Nói dễ hiểu thì uniq tìm các dòng trùng nhau nằm liền kề rồi bỏ bớt, chỉ giữ lại một dòng. Nó đọc từ file đầu vào (truyền vào làm tham số) và ghi kết quả đã lọc ra đầu ra.
tungdadev@linux:~$ sort /var/log/nginx/access.log | uniqwc: viết tắt của word count, dùng để đếm số dòng, số từ, số ký tự, số byte...
tungdadev@linux:~$ wc -l /var/log/syslog# xử lý file hệ thống
stat: xem thông tin của file, giống ls nhưng chi tiết hơn nhiều.
tungdadev@linux:~$ stat file.txtfile: cho biết file thuộc định dạng gì.
tungdadev@linux:~$ file image.pngln: tạo link, hay dùng nhất là symbolic link (symlink). Symlink rất tiện, giúp sắp xếp file trên Linux linh hoạt hơn hẳn. Dùng nó để:
- Tạo shortcut cho file và thư mục.
- Quản lý cấu trúc thư mục phức tạp.
- Chia sẻ file và thư mục.
- Cập nhật liên kết thay vì file gốc.
- Tạo các liên kết mềm cho các ứng dụng.
- Tiết kiệm không gian đĩa.
Ví dụ tạo symlink cho Python (ghi vào /usr/bin nên cần sudo; trên Ubuntu/Debian có sẵn gói python-is-python3 làm đúng việc này):
tungdadev@linux:~$ sudo ln -s /usr/bin/python3 /usr/bin/pythonfsck: kiểm tra và sửa lỗi hệ thống file, ví dụ trên phân vùng /dev/sda1. Nhớ umount phân vùng trước khi chạy, chạy fsck lên phân vùng đang mount có thể làm hỏng dữ liệu:
tungdadev@linux:~$ sudo fsck /dev/sda1mount: gắn (mount) một hệ thống file vào máy, ví dụ cắm USB vào:
tungdadev@linux:~$ sudo mount /dev/sdb1 /mntumount: tháo một hệ thống file đã mount, ví dụ rút USB ra:
tungdadev@linux:~$ sudo umount /mntdf: xem dung lượng trống trên các ổ đĩa. Lệnh này có thêm kha khá tham số để bạn chỉnh cách hiển thị theo ý mình.
tungdadev@linux:~$ df -hblkid: xem nhãn (nếu có) và UUID của các phân vùng. Muốn xem một phân vùng cụ thể thì truyền đường dẫn thiết bị của nó vào.
tungdadev@linux:~$ sudo blkidparted: chia và đổi kích thước phân vùng: tạo, xóa, đổi kích thước phân vùng, đặt nhãn GPT/MBR. Bản cũ (2.x) còn tự resize, di chuyển, sao chép được hệ thống file ext2, linux-swap, FAT, FAT32, reiserfs, nhưng từ bản 3.x phần này bị bỏ: resizepart chỉ đổi kích thước phân vùng, còn hệ thống file bên trong phải resize bằng công cụ riêng (resize2fs cho ext4 chẳng hạn). Ai hay phải quản lý ổ đĩa trên Linux thì gần như không thiếu được.
tungdadev@linux:~$ sudo parted /dev/sda printmkfs: format, tức là tạo hệ thống file mới (cách dữ liệu được sắp xếp trên đĩa) cho một phân vùng.
Ví dụ: format USB sang định dạng ext4. Cẩn thận gõ đúng tên thiết bị (xem bằng lsblk trước), vì format là mất sạch dữ liệu cũ trên phân vùng đó.
tungdadev@linux:~$ sudo mkfs.ext4 /dev/sdb1# các tiện ích khác
date: xem ngày giờ hiện tại của hệ thống.
tungdadev@linux:~$ datecal: in lịch ra terminal. Gõ cal không kèm gì thì nó in lịch tháng này, ngày hôm nay được tô sáng.
tungdadev@linux:~$ calecho: lệnh có sẵn, in ra đoạn text bạn truyền vào. Đây là lệnh cơ bản nhất, script shell hay Bash nào cũng dùng để in trạng thái ra màn hình.
tungdadev@linux:~$ echo "Hello, Linux!"man: mở tài liệu hướng dẫn của lệnh, tiện ích hay system call. Quên tham số nào thì cứ man là ra.
tungdadev@linux:~$ man lsalias: đặt tên tắt cho một lệnh. Thay vì gõ cả câu lệnh dài, bạn gõ cái tên ngắn mình tự đặt. Chủ yếu dùng cho mấy lệnh dài, vừa đỡ mỏi tay vừa đỡ gõ sai.
tungdadev@linux:~$ alias ll="ls -l"uname: xem thông tin kernel: tên kernel, hostname, bản phát hành, phiên bản kernel và kiến trúc phần cứng.
tungdadev@linux:~$ uname -aiptables: quản lý luật tường lửa và lưu lượng mạng. Admin dùng nó để đặt luật lọc, dịch địa chỉ hoặc chuyển tiếp gói tin. Trên các distro mới, iptables thường chạy trên nền nftables (iptables-nft), và luật thêm bằng lệnh sẽ mất khi reboot nếu không lưu lại. Ví dụ mở port 22:
tungdadev@linux:~$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPTps: liệt kê các tiến trình đang chạy, đơn giản mà dùng hoài.
tungdadev@linux:~$ ps auxkill: dừng tiến trình. Nó gửi tín hiệu tới tiến trình để bảo nó dừng lại. Mặc định kill <pid> gửi SIGTERM, tức là dừng nhẹ nhàng, cho tiến trình kịp dọn dẹp trước khi thoát. Còn -9 như ví dụ dưới là SIGKILL: kernel giết luôn, tiến trình không kịp làm gì (đóng file, flush dữ liệu...), nên chỉ dùng khi SIGTERM không ăn thua.
tungdadev@linux:~$ kill -9 12345tar: tạo, quản lý và giải nén file lưu trữ (archive). Nó gom nhiều file và thư mục thành một file duy nhất, rồi có thể nén thêm bằng nhiều thuật toán khác nhau cho nhẹ.
tungdadev@linux:~$ tar -czvf archive.tar.gz foldergzip: một trong những kiểu nén phổ biến nhất. Nén xong file nhỏ lại mà vẫn giữ nguyên dữ liệu, quyền sở hữu và timestamp của file gốc. File nén có đuôi .gz, và cũng dùng chính gzip -d để giải nén được. Lưu ý gzip file.txt sẽ thay file gốc bằng file.txt.gz; muốn giữ file gốc thì thêm -k.
tungdadev@linux:~$ gzip file.txtgunzip: giải nén file .gz về lại file gốc.
tungdadev@linux:~$ gunzip file.txt.gzzip: nén file/thư mục thành file .zip.
tungdadev@linux:~$ zip -r archive.zip folderunzip: giải nén file .zip.
tungdadev@linux:~$ unzip archive.zipscp: viết tắt của Secure Copy, copy file giữa máy mình và server từ xa. File đi qua mạng sang máy khác nên bạn cần có quyền SSH vào máy đó.
tungdadev@linux:~$ scp file.txt user@remote:/pathrsync: sao chép và đồng bộ file, thư mục, cả trong máy lẫn sang máy khác. Trên Linux/Unix thì đây là lựa chọn quen thuộc nhất.
tungdadev@linux:~$ rsync -av folder/ user@remote:/pathlocate: tìm file, thư mục theo tên. Cú pháp dễ nhớ, kết quả ra gần như ngay lập tức, vì nó tra trong một database dựng sẵn chứ không quét đĩa. Bù lại, file mới tạo sẽ chưa có trong kết quả cho tới khi database được cập nhật (sudo updatedb).
tungdadev@linux:~$ locate file.txtxargs: lấy đầu vào làm tham số để chạy một lệnh khác. Ví dụ xóa hết file log trong thư mục hiện tại và các thư mục con (-print0 với -0 để không vỡ khi tên file có dấu cách):
tungdadev@linux:~$ find . -name "*.log" -print0 | xargs -0 rmdiff: có sẵn trên hầu hết các distro, dùng để so hai file và chỉ ra chỗ khác nhau. Dòng nào sửa, dòng nào thêm, dòng nào xóa đều hiện ra rõ ràng, dễ đọc.
tungdadev@linux:~$ diff file1.txt file2.txtcmp: so hai file từng byte xem có giống nhau không. Giống nhau thì nó im lặng, không in gì. Khác nhau thì nó in ra vị trí byte (và dòng) khác đầu tiên.
tungdadev@linux:~$ cmp file1.txt file2.txtcomm: so hai file đã sort theo từng dòng, chia ra dòng chỉ có ở file 1, dòng chỉ có ở file 2 và dòng chung. Rất tiện khi cần so hai danh sách, hai file log hay hai tập dữ liệu.
tungdadev@linux:~$ comm file1.txt file2.txttee: vừa ghi ra file vừa in ra màn hình cùng lúc.
tungdadev@linux:~$ echo "Hello" | tee file.txtcut: cắt lấy một phần của từng dòng, ví dụ lấy cột đầu tiên của file CSV:
tungdadev@linux:~$ cut -d',' -f1 data.csvtr: đổi hoặc xóa ký tự từ stdin rồi ghi ra stdout. Hay dùng để đổi chữ thường thành chữ hoa, gộp hoặc xóa ký tự, thay thế text đơn giản.
tungdadev@linux:~$ echo "hello" | tr 'a-z' 'A-Z'sed: xử lý text trong file: tìm, thay thế, chèn, xóa đều được.
Ví dụ thay "old" bằng "new" trong file:
tungdadev@linux:~$ sed -i 's/old/new/g' file.txtwatch: chạy đi chạy lại một lệnh theo chu kỳ, ví dụ cứ 5 giây xem dung lượng ổ đĩa một lần:
tungdadev@linux:~$ watch -n 5 df -hiotop: xem tiến trình nào đang đọc ghi đĩa nhiều.
tungdadev@linux:~$ sudo iotopwho: xem ai đang đăng nhập vào hệ thống.
tungdadev@linux:~$ whow: giống who nhưng chi tiết hơn, xem ai đang đăng nhập và đang làm gì.
tungdadev@linux:~$ whistory: xem lại các lệnh đã gõ.
tungdadev@linux:~$ historyclear: dọn sạch màn hình terminal.
tungdadev@linux:~$ clearvmstat: xem thống kê bộ nhớ ảo, process, CPU, I/O. Có cả các cột si/so (lượng bộ nhớ swap vào/ra mỗi giây) và bi/bo (block đọc/ghi đĩa), nhìn vào là biết máy có đang thiếu RAM phải swap hay không. vmstat 1 in một dòng mỗi giây, thường dùng để theo dõi CPU với bộ nhớ đang thế nào.
tungdadev@linux:~$ vmstat 1ufw: (Uncomplicated Firewall) quản lý luật tường lửa với cú pháp gọn gàng. Ví dụ mở port 22:
tungdadev@linux:~$ sudo ufw allow 22/tcparp: xem và quản lý bảng ARP, tức bảng ghi IP nào ứng với địa chỉ MAC nào của các thiết bị trong cùng mạng.
tungdadev@linux:~$ arp -ahostnamectl: quản lý hostname, ví dụ đổi tên máy:
tungdadev@linux:~$ sudo hostnamectl set-hostname new-hostuseradd: tạo user mới trên máy.
tungdadev@linux:~$ sudo useradd -m -s /bin/bash newuserusermod: sửa thông tin user.
Ví dụ cho một tài khoản quyền sudo:
tungdadev@linux:~$ sudo usermod -aG sudo newusergroupadd: tạo group mới, ví dụ group cho team dev:
tungdadev@linux:~$ sudo groupadd devgroupgroups: xem một user đang thuộc những group nào.
tungdadev@linux:~$ groups tungdadevlast: xem lịch sử đăng nhập, ai vào lúc nào.
tungdadev@linux:~$ lastlogrotate: tự động xoay vòng, nén và xóa file log. Admin Linux nào cũng cần nó, để file log không phình to vô hạn và log cũ được cất gọn gàng.
tungdadev@linux:~$ sudo logrotate /etc/logrotate.confcron: hẹn giờ chạy tác vụ định kỳ. Sửa lịch bằng crontab -e:
tungdadev@linux:~$ crontab -e# lời kết
Gõ lệnh Linux thành thạo rồi thì đi làm cứ như được buff full giáp, một mình cân cả dàn server :)))
Phần lớn lệnh xử lý file, text, mạng cơ bản dùng được luôn trên macOS, vì hai hệ điều hành đều có gốc Unix. Có điều bản trên macOS là bản BSD nên vài tham số khác (ví dụ sed -i ''), còn mấy lệnh riêng của Linux như systemctl, journalctl, apt, free, ip, ss thì macOS không có.
Nhớ hết đống lệnh này chắc nhiều bạn thấy oải. Đừng lo, mấy anh dev lười đã làm sẵn extension gợi ý lệnh rồi. Cái đó hẹn bài khác nhé. :D
Chỉ là những ghi chép cá nhân với hy vọng mang lại chút giá trị. Nếu thấy hữu ích, đừng ngại chia sẻ cho bạn bè & đồng nghiệp nhé!
Happy coding 😎 👍🏻 🚀 🔥.