hash
là một lệnh bash tích hợp. Bảng băm là một tính năng bash
giúp nó không phải tìm kiếm $PATH
mỗi khi bạn gõ lệnh bằng cách lưu kết quả vào bộ nhớ. Bảng được xóa trên các sự kiện rõ ràng làm mất hiệu lực kết quả (chẳng hạn như sửa đổi $PATH
)
Các hash
lệnh chỉ là cách bạn tương tác với hệ thống (đối với bất cứ lý do nào bạn cảm thấy bạn cần).
Một số trường hợp sử dụng:
Giống như bạn đã thấy nó in ra bao nhiêu lần bạn nhấn lệnh nào nếu bạn gõ nó không có đối số. Điều này có thể cho bạn biết những lệnh bạn sử dụng thường xuyên nhất.
Bạn cũng có thể sử dụng nó để ghi nhớ các tệp thực thi ở các vị trí không chuẩn.
Thí dụ:
[root@policyServer ~]# hash -p /lol-wut/whoami whoami
[root@policyServer ~]# whoami
Not what you're thinking
[root@policyServer ~]# which whoami
/usr/bin/whoami
[root@policyServer ~]# /usr/bin/whoami
root
[root@policyServer ~]#
Điều này có thể hữu ích nếu bạn chỉ có một tệp thực thi trong một thư mục bên ngoài $PATH
mà bạn muốn chạy bằng cách chỉ cần nhập tên thay vì bao gồm mọi thứ trong thư mục đó (sẽ có hiệu lực nếu bạn thêm nó vào $PATH
).
Một bí danh thường cũng có thể làm điều này, và vì bạn đang sửa đổi hành vi của trình bao hiện tại, nên nó không được ánh xạ trong các chương trình bạn khởi động. Một liên kết tượng trưng đến thực thi đơn độc có lẽ là tùy chọn thích hợp hơn ở đây. hash
là một cách để làm điều đó.
- Bạn có thể sử dụng nó để bỏ nhớ đường dẫn tập tin. Điều này rất hữu ích nếu một tệp thực thi mới xuất hiện trong một
PATH
thư mục trước đó hoặc được mv
chuyển đến một nơi khác và bạn muốn buộc bash đi ra ngoài và tìm lại nó thay vì nơi cuối cùng nó nhớ tìm thấy nó.
Thí dụ:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# cp /bin/ls /lol-wut
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /bin/ls
[root@policyServer ~]# hash -d ls
[root@policyServer ~]# ls
default.ldif newDIT.ldif notes.txt users.ldif
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /lol-wut/ls
[root@policyServer ~]#
Các cp
lệnh gây ra một phiên bản mới của ls
thực thi xuất hiện trước đó trong tôi $PATH
nhưng không kích hoạt một cuộc thanh trừng của bảng băm. Tôi đã sử dụng hash -d
để chọn lọc mục nhập ls
từ bảng băm. Bash sau đó bị buộc phải xem $PATH
lại một lần nữa và khi đó, nó đã tìm thấy nó ở vị trí mới hơn (trước đó là $ PATH so với trước đây).
$PATH
Mặc dù vậy, bạn có thể gọi một cách có chọn lọc hành vi "tìm vị trí thực thi mới từ " này:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
Bạn hầu như chỉ muốn làm điều này nếu bạn muốn một cái gì đó từ bảng băm và không 100% rằng bạn có thể đăng xuất và sau đó quay lại thành công hoặc bạn muốn duy trì một số sửa đổi bạn đã thực hiện cho trình bao của mình.
Để loại bỏ ánh xạ cũ, bạn cũng có thể thực hiện hash -r
(hoặc export PATH=$PATH
) một cách hiệu quả chỉ cần thanh trừng toàn bộ bảng băm của bash.
Có rất nhiều tình huống nhỏ như thế. Tôi không biết nếu tôi gọi nó là một trong những lệnh "hữu ích nhất" nhưng nó có một số trường hợp sử dụng.