Lệnh which, whereis, locate trên Linux: 3 lệnh tìm vị trí (đường dẫn) của tệp

Thông báo tiếp thị liên kết Ver 3.1
Thông báo tiếp thị liên kết Ver 3.2 (chỉ trên di động)
Môi trường thử nghiệmHọ RHELAlmaLinux 9.8Tài khoản rootKiểm tra ngày 2026-10-07
Lệnh tìm kiếmwhichwhereislocate

Có lúc bạn cần sửa httpd.conf nhưng không biết tệp nằm ở đâu, hoặc một lệnh cùng tên có ở hai nơi nên không rõ bản nào sẽ được chạy. Lệnh which trên Linux tìm tệp thực sự được chạy, lệnh whereis trên Linux tìm tệp thực thi cùng thư mục cấu hình · trang man, còn lệnh locate tìm mọi đường dẫn có chứa tên đó. Bài viết so sánh khác biệt giữa ba lệnh bằng bảng và cho bạn tự gõ thử trên server ảo ngay trong trình duyệt.

Trên AlmaLinux 9.8, which nằm trong gói which 2.21 và whereis nằm trong gói util-linux 2.37.4 nên dùng được ngay từ đầu, còn locate thì phải cài riêng gói mlocate 0.26.

✅ Khác biệt giữa which · whereis · locate

Ba lệnh này tìm ở những nơi khác nhau. which và whereis lục ngay tại chỗ trong các thư mục định sẵn, còn locate tìm tên trong danh sách tệp (DB) được tạo sẵn từ trước.

LệnhĐối tượng tìmNơi tìmTệp mới tạo
whichMột tệp lệnh được chạy, bí danh (alias)Các thư mục có trong PATHTìm thấy ngay
whereisTệp thực thi · thư mục cấu hình · trang manCác thư mục định sẵn như /usr/bin · /etc · /usr/share/manTìm thấy ngay
locateMọi tệp và thư mục có chứa tên đóDB tạo sẵn (/var/lib/mlocate/mlocate.db)Tìm thấy sau updatedb

Tìm cùng httpd bằng which và whereis là thấy ngay sự khác biệt.

~]# which httpd
/usr/sbin/httpd
~]# whereis httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd /usr/share/man/man8/httpd.8.gz

locate hiển thị mọi đường dẫn chỉ cần khớp một phần tên, nên khi gõ [locate httpd.conf], kết quả không chỉ có tệp cấu hình mà còn có cả trang man (httpd.conf.5.gz) lẫn các bản sao lưu đã tạo.

Trên server ảo bên dưới, chọn which · whereis · locate ở bên trái thì các chip sẽ thay đổi, và bấm vào chip là lệnh đó được nhập vào. Bạn cũng có thể gõ trực tiếp bằng bàn phím.

Trình mô phỏng lệnh tìm vị trí tệpAlmaLinux 9.8
[root@server work]#
Chỉ chạy trong trình duyệt và không đụng đến server thật. Chọn một lệnh ở bên trái thì các chip bên dưới sẽ thay đổi, và bấm vào chip là lệnh đó được nhập vào. Hãy tìm cùng httpd bằng ba lệnh rồi so sánh kết quả, còn với locate, hãy tạo một tệp mới rồi tìm trước và sau updatedb. Nếu bị rối, hãy nhấn [Start over], và nhập uknew help để xem các lệnh có thể dùng.

Để tìm tệp theo kích thước hoặc ngày sửa đổi thay vì theo tên, hãy dùng lệnh find, còn đường dẫn của thư mục hiện tại thì kiểm tra bằng lệnh pwd.

✅ Lệnh which trên Linux

which lục lần lượt các thư mục trong PATH từ đầu và hiển thị tệp thực thi đầu tiên tìm thấy. Đây chính là tệp thực sự được chạy khi bạn gõ lệnh.

Trên AlmaLinux, bash chuyển danh sách bí danh cho which, nên với lệnh có bí danh, kết quả hiện cả bí danh lẫn tệp thật. Nếu không có ở đâu trong PATH, kết quả sẽ là [no tên_lệnh in (PATH)].

~]# which ll
alias ll='ls -l --color=auto'
	/usr/bin/ls
~]# which htop
/usr/bin/which: no htop in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)

Trên thực tế chỉ có một tùy chọn là -a. Khi cùng một tên có ở hai thư mục trong PATH, tùy chọn này hiển thị cả hai, và tệp hiện ở trên cùng là tệp thực sự được chạy.

~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/ping

Trên AlmaLinux 9.8, /usr/sbin/ping là liên kết trỏ tới /usr/bin/ping nên kết quả như nhau. Chương trình bạn tự cài nếu nằm trong /usr/local/bin sẽ được chạy trước chương trình trong /usr/bin theo thứ tự của PATH.

[which cd] hiển thị /usr/bin/cd, nhưng khi gõ cd trong shell thì thứ được chạy là lệnh tích hợp sẵn của shell chứ không phải tệp này. Kiểm tra xem một lệnh có phải lệnh tích hợp hay không bằng [type cd], kết quả sẽ là [cd is a shell builtin].

✅ Lệnh whereis trên Linux

whereis dùng tên lệnh để tìm cùng lúc tệp thực thi và trang man. Lệnh này lục các thư mục định sẵn như /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share mà không phụ thuộc vào PATH, nên cả thư mục cấu hình trùng tên (/etc/httpd) cũng hiện ra.

Tùy chọnMô tả
-bChỉ phần tệp thực thi. Với httpd là /usr/sbin/httpd và /usr/lib64/httpd · /etc/httpd · /usr/share/httpd
-mChỉ trang man (/usr/share/man · /usr/share/info)
-sChỉ mã nguồn. Trên bản cài mặc định của AlmaLinux 9.8, chỉ hiện tên như [httpd:]
-lDanh sách thư mục mà whereis tìm
~]# whereis -b httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd
~]# whereis -m httpd
httpd: /usr/share/man/man8/httpd.8.gz
~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1ossl.gz /usr/share/man/man1/passwd.1.gz

Nếu không tìm thấy gì, chỉ hiện tên như [htop:]. which trả về mã thoát 1 khi không tìm thấy, còn whereis trả về 0, nên khi kiểm tra trong script xem đã cài đặt hay chưa, hãy dùng which.

✅ Lệnh locate trên Linux

locate không lục ổ đĩa mà tìm tên trong DB đã tạo sẵn. Vì vậy lệnh chạy nhanh, nhưng không tìm được các tệp tạo ra sau khi DB được tạo.

~]# dnf -y install mlocate
~]# updatedb

Nếu gõ ngay sau khi cài, vì chưa có DB nên sẽ hiện [locate: can not stat () `/var/lib/mlocate/mlocate.db’: No such file or directory]; chạy updatedb một lần là DB được tạo. Sau đó, mlocate-updatedb.timer sẽ tạo lại DB mỗi ngày một lần.

Tệp mới tạo sẽ không hiện ra trước khi chạy updatedb, còn tệp đã xóa vẫn tiếp tục hiện ra cho đến khi chạy updatedb. Để chỉ xem những tệp hiện đang tồn tại, hãy thêm -e.

~]# touch report.txt
~]# locate report.txt
~]# updatedb
~]# locate report.txt
/root/work/report.txt
~]# rm -f report.txt
~]# locate report.txt
/root/work/report.txt
~]# locate -e report.txt

PRUNEPATHS trong /etc/updatedb.conf có chứa /tmp · /var/tmp · /mnt · /media, nên tệp trong các thư mục này không hiện ra dù đã chạy updatedb.

🔲 Tùy chọn lệnh locate

Tùy chọnMô tả
-iTìm không phân biệt chữ hoa · chữ thường
-cChỉ hiện số kết quả tìm được thay vì đường dẫn
-l= -nThêm số phía sau để chỉ hiện tối đa bấy nhiêu kết quả. -l 3
-bChỉ tìm trong tên tệp ở cuối đường dẫn
-eBỏ qua những tệp có trong DB nhưng hiện không còn tồn tại
-SThông tin DB (số thư mục · số tệp · kích thước)
-rTìm bằng biểu thức chính quy. locate -r “httpd.conf$”

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 7   +   3   =