Lệnh ls trong Linux: Cách Liệt Kê File + Ví Dụ Thực Tế (2026)
Lệnh ls trong Linux là gì?
Lệnh ls là command liệt kê nội dung thư mục trong Linux. Khi chạy không có argument, lệnh này hiển thị danh sách tất cả file và thư mục con của thư mục hiện tại. Đây là một trong những command được dùng nhiều nhất trên terminal — hầu như mọi script và workflow đều bắt đầu bằng ls để xem mình đang ở đâu và có gì trong thư mục làm việc.
Lệnh này có sẵn mặc định trên mọi bản phân phối Linux, macOS (qua BSD ls), và WSL trên Windows. Không cần cài đặt thêm package.
Cú pháp lệnh ls trong Linux như thế nào?
Cú pháp cơ bản của ls:
ls [OPTION]... [FILE]...
Trong đó:
OPTION— các flag thay đổi cách hiển thị (ví dụ:-l,-a,-h)FILE— đường dẫn đến file hoặc thư mục cần liệt kê. Nếu không chỉ định, lệnh mặc định liệt kê thư mục hiện tại.
Các options phổ biến của lệnh ls
Hiển thị chi tiết với -l
-l hiển thị mỗi file trên một dòng, kèm thông tin permission, số liên kết cứng, owner, group, kích thước, và thời gian sửa đổi cuối.
ls -l
total 48
drwxr-xr-x 3 admin staff 4096 Apr 1 10:23 .
drwxr-xr-x 12 admin staff 4096 Apr 1 09:00 ..
-rw-r--r-- 1 admin staff 220 Mar 28 14:30 .bashrc
-rw-r--r-- 1 admin staff 3526 Mar 29 11:00 .profile
drwxr-xr-x 5 admin staff 4096 Apr 1 10:23 projects
-rw-r--r-- 1 admin staff 8192 Apr 1 09:45 report.txt
Lưu ý: Cột đầu tiên (ví dụdrwxr-xr-x) cho biết loại entry. Ký tự đầudlà thư mục,-là file thường,llà symbolic link. 9 ký tự tiếp theo là permission của file.
Hiển thị file ẩn với -a
-a liệt kê tất cả file bao gồm file ẩn — những file có tên bắt đầu bằng dấu chấm (.).
ls -a
.
..
.bash_history
.bashrc
.profile
projects
report.txt
Nếu muốn hiển thị file ẩn nhưng loại trừ . và .., dùng -A (--almost-all):
ls -A
Kích thước dễ đọc với -h
-h viết kích thước file theo định dạng con người đọc được: 1K, 234M, 2G. Thường kết hợp với -l:
ls -lh
total 48
drwxr-xr-x 3 admin staff 4.0K Apr 1 10:23 .
drwxr-xr-x 12 admin staff 12K Apr 1 09:00 ..
-rw-r--r-- 1 admin staff 220 Mar 28 14:30 .bashrc
-rw-r--r-- 1 admin staff 3.4K Mar 29 11:00 .profile
drwxr-xr-x 5 admin staff 4.0K Apr 1 10:23 projects
-rw-r--r-- 1 admin staff 8.0K Apr 1 09:45 report.txt
Phân biệt thư mục bằng dấu gạch chéo với -p
-p thêm dấu / vào cuối tên thư mục, giúp dễ phân biệt file và thư mục khi không dùng màu.
ls -p
projects/ report.txt .bashrc
Đánh dấu loại file với -F
-F thêm indicator vào mỗi entry: / cho thư mục, * cho file thực thi, @ cho symbolic link, = cho socket, | cho FIFO.
ls -F
projects/ report.txt* script.sh@
Phân biệt thư mục với -d
-d liệt kê chính thư mục được chỉ định thay vì nội dung bên trong nó. Dùng khi muốn xem thuộc tính của thư mục:
ls -ld projects
drwxr-xr-x 5 admin staff 4096 Apr 1 10:23 projects
So sánh: nếu không dùng -d, ls projects sẽ liệt kê nội dung bên trong thư mục projects, không phải chính thư mục đó.
Liệt kê đệ quy với -R
-R hiển thị nội dung thư mục và tất cả thư mục con bên trong, theo cấu cây thư mục.
ls -R
.:
projects
report.txt
./projects:
src
data
./projects/src:
main.py
utils.py
./projects/data:
config.json
Sắp xếp theo kích thước với -S
-S sắp xếp kết quả theo kích thước file, từ lớn nhất đến nhỏ nhất. Hữu ích để tìm file chiếm nhiều dung lượng nhất.
ls -lhS
total 48
-rw-r--r-- 1 admin staff 8.0K Apr 1 09:45 report.txt
drwxr-xr-x 5 admin staff 4.0K Apr 1 10:23 projects
-rw-r--r-- 1 admin staff 3.4K Mar 29 11:00 .profile
-rw-r--r-- 1 admin staff 220 Mar 28 14:30 .bashrc
Sắp xếp theo thời gian với -t
-t sắp xếp theo thời gian sửa đổi (mtime) từ mới nhất đến cũ nhất. Muốn xem file vừa sửa gần đây nhất:
ls -lt
total 48
drwxr-xr-x 5 admin staff 4096 Apr 1 10:23 projects
-rw-r--r-- 1 admin staff 8192 Apr 1 09:45 report.txt
-rw-r--r-- 1 admin staff 3526 Mar 29 11:00 .profile
-rw-r--r-- 1 admin staff 220 Mar 28 14:30 .bashrc
Để xem thời gian truy cập (atime) thay vì mtime, dùng thêm -u. Để xem thời gian thay đổi metadata (ctime), dùng thêm -c.
Mỗi file một dòng với -1
-1 (số một) buộc mỗi entry hiển thị trên một dòng riêng. Hữu ích khi xử lý output bằng script:
ls -1
projects
report.txt
.bashrc
.profile
Đảo ngược thứ tự với -r
-r đảo ngược thứ tự sắp xếp. Thường dùng với -lS để xem file nhỏ nhất trước, hoặc với -lt để xem file cũ nhất:
ls -lSr
total 48
-rw-r--r-- 1 admin staff 220 Mar 28 14:30 .bashrc
-rw-r--r-- 1 admin staff 3526 Mar 29 11:00 .profile
drwxr-xr-x 5 admin staff 4096 Apr 1 10:23 projects
-rw-r--r-- 1 admin staff 8192 Apr 1 09:45 report.txt
Hiển thị inode với -i
-i in số inode của mỗi file ở cột đầu tiên. Số inode là định danh duy nhất của file trên hệ thống file:
ls -li
total 48
123456 drwxr-xr-x 3 admin staff 4096 Apr 1 10:23 .
12345 drwxr-xr-x 12 admin staff 12288 Apr 1 09:00 ..
789012 -rw-r--r-- 1 admin staff 220 Mar 28 14:30 .bashrc
654321 -rw-r--r-- 1 admin staff 3526 Mar 29 11:00 .profile
Kết hợp thường dùng
ls -lha # hiển thị tất cả file (kể cả ẩn), chi tiết, kích thước dễ đọc
ls -lt --reverse # file cũ nhất lên đầu
ls -lS # file lớn nhất lên đầu
Xem thêm bài về Pillar: Quản lý file và thư mục trong Linux
Ví dụ thực tế
Xem thư mục hiện tại
Khi mới mở terminal, chạy ls không argument để xem mình đang ở đâu:
pwd # xác nhận thư mục hiện tại
ls # liệt kê file trong thư mục đó
Kiểm tra thư mục trước khi tạo
Trước khi dùng mkdir tạo thư mục mới, dùng ls để chắc chắn tên chưa tồn tại:
ls /home/admin/
# Nếu thấy "projects" đã tồn tại, đặt tên khác
ls /home/admin/projects/
Tìm file lớn nhất trong thư mục
Dùng kết hợp ls với sort qua pipe để tìm file chiếm nhiều dung lượng nhất:
ls -lS /var/log/ | head -20
Xem file mới sửa gần đây
Khi debug, muốn biết file nào vừa bị thay đổi:
ls -lt *.log | head -5
Liệt kê thư mục cha
Dùng .. làm argument để xem nội dung thư mục cha:
ls ..
admin/ documents/ backup/
So sánh với lệnh tương tự
| Đặc điểm | ls | tree | find |
|---|---|---|---|
| Mục đích chính | Liệt kê file/thư mục | Hiển thị cây thư mục | Tìm file theo điều kiện |
| Hiển thị đệ quy | Có (-R), dạng phẳng |
Có, dạng cây có indent | Có, in đường dẫn đầy đủ |
| Lọc theo tên | Hạn chế (glob pattern) | Có (-P, -I) |
Mạnh nhất (-name, -regex) |
| Tốc độ | Nhanh, đọc trực tiếp | Chậm hơn trên thư mục lớn | Chậm nhất trên thư mục lớn |
Dùng ls khi chỉ cần xem nhanh nội dung thư mục. Dùng tree khi muốn nhìn cấu trúc cây trực quan. Dùng find khi cần tìm file theo điều kiện phức tạp (kích thước, ngày tháng, permission).
Lệnh ls kết hợp với lệnh khác
ls xuất output ra stdout nên dễ pipe sang lệnh khác để xử lý thêm:
# Đếm số file trong thư mục
ls -1 | wc -l
# Lọc file có đuôi cụ thể
ls -1 | grep ".txt"
# Sắp xếp theo alphabet rồi xem 10 dòng đầu
ls | sort | head -10
# Xem kích thước file rồi sắp xếp
ls -l | awk '{print $5, $9}' | sort -n | tail -5
Lỗi thường gặp
ls: cannot access 'thumuc': No such file or directory
Nguyên nhân: đường dẫn chỉ định không tồn tại hoặc bị sai chính tả. Lệnh ls exit với code 2 khi gặp lỗi nghiêm trọng như thế này.
Kiểm tra: dùng pwd xác nhận thư mục hiện tại, rồi kiểm tra lại đường dẫn:
pwd
ls -l /home/admin/proejcts/ # typo: "proejcts" thay vì "projects"
ls: cannot access '/home/admin/proejcts/': No such file or directory
ls: cannot open directory '.': Permission denied
Nguyên nhân: user hiện tại không có quyền đọc (read) thư mục. Thường xảy ra khi thử liệt kê thư mục của user khác hoặc thư mục hệ thống có permission hạn chế.
Exit code của lệnh trong trường hợp này là 1 (có vấn đề nhỏ — không truy cập được thư mục con).
Khắc phục: kiểm tra permission và thử sudo nếu cần:
ls -ld /root/
# drwx------ 3 root root 4096 Apr 1 09:00 /root/
sudo ls /root/
ls: invalid option -- 'x'
Nguyên nhân: dùng option của GNU ls trên macOS (BSD ls) hoặc ngược lại. Một số option không tương thích giữa hai phiên bản.
Ví dụ: --group-directories-first là flag riêng của GNU, không có trên BSD ls mặc định của macOS.
Khắc phục trên macOS: cài GNU coreutils qua Homebrew:
brew install coreutils
gls -l --group-directories-first
Mẹo sử dụng
Thêm alias tiện lợi trong ~/.bashrc:
alias ll='ls -lh' # hiển thị chi tiết, kích thước dễ đọc
alias la='ls -lha' # hiển thị mọi thứ kể cả ẩn
alias lt='ls -ltr' # file mới nhất ở cuối (dùng -r để đảo)
alias ls='ls --color=auto' # bật màu cho output
Tốc độ: dùng ls -U khi không cần sắp xếp: Option -U bỏ qua bước sắp xếp, xuất file theo thứ tự trong directory entry table — nhanh hơn đáng kể trên thư mục chứa hàng nghìn file.
Kiểm tra nhanh thay đổi trong git repo: Sau khi cd vào thư mục project, ls -lt giúp xem file nào vừa được sửa — hữu ích khi quên mình thay đổi gì gần đây.
Tham khảo: GNU Coreutils manual