[Linux] Hướng dẫn tìm đường dẫn tuyệt đối của lệnh trên Linux bằng “whereis” và “which”

Xin chào các bạn, chúng ta sẽ đến 1 bài viết cơ bản với nội dung nhằm tìm kiếm xác định được đường dẫn tuyệt đối của 1 lệnh trên Linux, để thực hiện được điều đó chúng ta sẽ sử dụng 2 chương trình lệnh gồm : “whereis” và “which“.

Bây giờ chúng ta cùng tìm hiểu qua 2 chương trình này nhé.

A. Chương trình lệnh “which”

Chương trình “which” là một chương trình đơn giản và nhỏ gọn có mục đích xác định đường dẫn các file chương trình thực thi. Nó cho phép người dùng có thể sử dụng output của chương trình làm thông tin đường dẫn tuyệt đối thành input cho các lệnh hay shell script khác.

which” sẽ chỉ tìm đường dẫn các file chương trình nào nằm trong các directory được liệt kê ở biến môi trường $PATH.

# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/easy/bin:/root/bin:/root/.local/bin:/root/bin:/bin

 
Cấu trúc lệnh

which [-option] [command]

 
Ví dụ :

A.1. Hiển thị cơ bản

# which cat
/bin/cat
# which ls gdb open grep
/bin/ls
/usr/bin/gdb
/bin/open
/bin/grep

 
A.2. Hiển thị toàn bộ đường dẫn của chương trình

Đối với ví dụ ở phần ví dụ 1 “Hiển thị cơ bản” thì “which” mặc định chỉ xuất ra thông tin đường dẫn đầu tiên mà chương trình tìm thấy trong các thư mục của biến môi trường $PATH. Điều này dẫn đến việc có thể bỏ sót các thông tin đường dẫn khác hay chương trình cùng loại nhưng khác phiên bản trên cùng hệ thống.

Vậy để hiển thị toàn bộ các đường dẫn file chương trình được tìm thấy trong các thư mục thì ta thêm option “-a“.

# which -a echo
/usr/sbin/echo
/bin/echo

 
B. Chương trình lệnh “whereis”

whereis” là 1 chương trình giúp cho chúng ta tìm được 3 thông tin sau về 1 chương trình hoặc 1 lệnh trên Linux :
– Đường dẫn vị trí file binary.
– Đường dẫn vị trí source code.
– Đường dẫn vị trí trang manual dành cho chương trình hay lệnh đó.

“whereis” sẽ tìm ở đâu ?
Nếu bạn manual “whereis” sẽ thấy có phần thông tin “FILES” như sau :

# man whereis
FILES 
   /{bin,sbin,etc}
   /usr/{lib,bin,old,new,local,games,include,etc,src,man,sbin,X386,TeX,g++-include}
   /usr/local/{X386,TeX,X11,include,lib,man,etc,bin,games,emacs}

 
thì whereis sẽ tìm kiếm các thông tin được chỉ định trong các thư mục được liệt kê ở phần FILES như phía trên, như vậy nếu bạn cài đặt chương trình ở thư mục khác thì có khi “whereis” sẽ không thể tìm ra được thông tin file chương trình đó cho bạn. Vậy nên nếu bạn mong muốn chỉ định whereis tìm kiếm ở 1 thư mục cụ thể khác thì “whereis” có option hỗ trợ việc đó.
 

Cấu trúc lệnh

# whereis [options] program/command
# whereis -BMS /directory -f command/program


Ví dụ sử dụng

B.1. Tìm đường dẫn chương trình

– Mặc định whereis sẽ tìm cả 3 thông tin liên quan nếu bạn không chỉ định giới hạn loại  thông tin cho whereis, như ví dụ dưới thì whereis xuất ra được thông tin đường dẫn file binary và file manual của lệnh “date“.

# whereis date
date: /bin/date /usr/share/man/man1/date.1.gz

# whereis df
df: /bin/df /usr/share/man/man1/df.1.gz

 

B.2. Chỉ định loại thông tin cần tìm kiếm

– Bạn có thể chỉ định rõ loại thông tin mình cần tìm kiếm, không cần tìm hết cả 3 loại thông tin.

Một số option sau :
-b : chỉ tìm file binary
-m : chỉ tìm file manual
-s : chỉ tìm source code

# whereis -b perl
whereis: /usr/sbin/perl /usr/bin/X11/perl

# whereis -m bash
/usr/share/man/man1/bash.1.gz

# whereis -s rsync
rsync:

 

B.3. Giới hạn tìm kiếm ở thư mục cụ thể

whereis” hỗ trợ bạn giới hạn thư mục được chỉ định để tìm kiếm các thông tin liên quan đến file binary, source code và manual file bằng các option sau :

-B /path/dir : giới hạn tìm kiếm file binary ở thư mục được chỉ định.
-M /path/dir : giới hạn tìm kiếm file manual ở thư mục được chỉ định.
-S /path/dir : giới hạn tìm kiếm file binary ở thư mục được chỉ định.

Nhưng bạn phải thêm option “-f” để chỉ định tên chương trình/lệnh mà bạn cần tìm khi kết hợp với 3 option quy định thư mục cần tìm kiếm ở trên.

# whereis -B /bin -f python

-> “whereis” sẽ tìm chương trình file binary “python” trong thư mục /bin mà thôi.

# whereis -M /usr/share/man/man1 -f open
open: /bin/open /usr/share/man/man1/open.1.gz

 

C. Sự khác nhau giữa “whereis” và “which”

Chương trình “whereis” sẽ liệt kê cho bạn đường dẫn vị trí của các file binary, source  code và file manual liên quan đến chương trình lệnh đó. Trong khi đó “which” chỉ liệt kê cho bạn đường dẫn file binary của chương trình lệnh thôi.

whereis” sẽ tìm kiếm trong danh sách các thư mục đã được quy định để tìm file binary, source và trang manual, thông tin về các thư mục này được tìm thấy thêm ở phần thông tin FILES nằm ở trang manual của chương trình lệnh “whereis“. Còn “which” chỉ tìm kiếm trong các thư mục được liệt kê ở biến môi trường $PATH mà thôi.

Nếu bạn cài đặt chương trình ngoài các thư mục được quy định trong manual của chương trình lệnh “whereis” hoặc ngoài thư mục được khai báo ở biến môi trường $PATH của chương trình lệnh “which” thì hoàn toàn có khả năng cả 2 lệnh trên không thể xuất ra thông tin bạn muốn biết.

 
Bài viết đến đây là hết rồi, rất hy vọng bạn đã có thêm được kiến thức bổ ích về Linux.

Previous article[Linux] Fix lỗi compile source PHP 5.6 với tính năng hỗ trợ zip
Next article[Linux] Hướng dẫn tạo user trên Linux bằng tay không sử dụng lệnh “useradd”
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !