Câu trả lời:
Để thực thi tập lệnh, bạn cần nhập đường dẫn đầy đủ vào tập lệnh trừ khi tập lệnh có mặt trong một trong các thư mục được liệt kê trong $PATHbiến môi trường của bạn . Nói chung (và theo mặc định) .(thư mục hiện tại) không có trong bạn $PATH, vì vậy bạn cần nhập ./scriptđể thực thi nó.
Bởi vì thư mục hiện tại không nằm trong đường dẫn của bạn. Đây là một tính năng an toàn. Nếu nó nằm trong đường dẫn của bạn, ai đó có khả năng bỏ một bản sao độc hại của một lệnh chung và khi bạn ở trong thư mục đó thay vì chạy sudo thật, chẳng hạn, bạn sẽ chạy lệnh giả. Đó là một điều xấu.
.sau /usr/bin/đó, nó sẽ không thay thế thực tế sudo. Đó là để đảm bảo bạn không vô tình thêm các chương trình vào đường dẫn của mình, nhưng chủ yếu không phải là thay thế các chương trình hiện có.
sudo, tôi sẽ sử dụng lsvà rm. Nhiều khả năng được gọi là.
lssẽ không hỏi mật khẩu của bạn và nếu người dùng có thể sử dụng sudomật khẩu thì thật thú vị ...;)
sllàm những điều xấu, sau đó gọi ls, sau đó xóa chính nó. Bạn không thể ghi đè các công cụ hệ thống, nhưng bạn có thể 'typosquat'
cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@". Không cần biết mật khẩu.
echo $PATH
Bạn phải có thư mục hiện tại (một dấu chấm đơn) trong đường dẫn của bạn để làm việc này.
Bạn có thể thêm nó vào đường dẫn của bạn nếu bạn muốn với các lệnh sau.
sh / bash:
export PATH=$PATH:.
tcsh / csh:
set PATH = ($PATH .)
runnable file => executable file:?