чому ./ потрібен для запуску запущеного файлу?


9

Я використовую ubuntu, і я помічаю, що багато моїх сценаріїв не можна запускати, якщо я не передую темі ./.

Наприклад, якщо у мене є сценарій perl: /home/me/script.plі я зараз перебуваю в режимі /home/me, введення script.plцього не зробить, але ./script.plбуде.

Чому так?


@David B runnable file => executable file:?
Лазер

Відповіді:


13

Щоб виконати сценарій, вам потрібно ввести повний шлях до сценарію, якщо сценарій не присутній в одному з каталогів, перелічених у вашій $PATHзмінній середовища. Як правило (і за замовчуванням) .(поточний каталог) немає у вашому $PATH, тому вам потрібно ввести його ./scriptдля виконання.


21

Тому що поточний каталог не на вашому шляху. Це функція безпеки. Якби це було на вашому шляху, хтось може потенційно скинути зловмисну ​​копію загальної команди, і коли ви знаходитесь в цьому каталозі замість запуску справжнього судо, ви б запустили підробку. Це було б погано.


3
Це дещо вводить в оману. Поки вони .були після /usr/bin/, це не витіснило б реальне sudo. Це для того, щоб ви не випадково додавали програми на свій шлях, але справа не в першу чергу про витіснення існуючих.
Меттью Флашен

Замість цього sudoя б використав lsі rm. Набагато більше шансів називатися.
Аарон Дігулла

@aaron: впевнений, але lsне запитає ваш пароль, і якщо користувач може використовувати sudoпароль цікаво ...;)
laurent

1
@Matthew. Так, це все-таки важко використати, але реальний ризик для безпеки. Скажімо, я кладу в сценарій, slякий робить погані речі, потім викликає ls, а потім видаляє себе. Ви не можете перекрити системні інструменти, але ви можете "помилитися"
Rich

@laurent: Те , що я мав на увазі: cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@". Не потрібно знати пароль.
Аарон Дігулла

4
echo $PATH

Ви повинні мати поточний каталог (одну крапку) на своєму шляху, щоб це працювало.

Ви можете додати його у свій шлях, якщо хочете, скориставшись наступними командами.

ш / баш: export PATH=$PATH:.

tcsh / csh: set PATH = ($PATH .)


3

оболонка шукає шлях до виконуваних файлів, і за замовчуванням ./не знаходиться шлях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.