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 đó:

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ự đầu d là thư mục, - là file thường, l là 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ừ ..., 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

Bài viết liên quan