Файл програми існує в / usr / bin, але його не можна використовувати


15

Ясно, що мій файл існує в /usr/bin

$ ls /usr/bin/ngrok
/usr/bin/ngrok

Однак при спробі chownя отримую помилку

$ sudo chown my_user:users /usr/bin/ngrok
chown: cannot dereference '/usr/bin/ngrok': No such file or directory

Подальші спроби запустити його також не вдаються!

$ ngrok
bash: ngrok: command not found
$ sudo /usr/bin/ngrok
sudo: /usr/bin/ngrok: command not found

Що тут відбувається?


Третій момент також може трапитися, якщо '/ usr / bin /' відсутній у вашій PATH. Ви повинні були пройти тестування /usr/bin/ngrokна повну симетрію наступного випадку sudo.
Патрік Мевзек

Відповіді:


52

/usr/bin/ngrokбуде символьним посиланням, яке не вказує нікуди (вірніше, на неіснуючий файл). Перевірте ls -l.


13
Помилка "не може відновити" - це мертвий привід. Ви не "перенаправляєте" звичайний файл, ви відкриваєте його.
Кевін

1
Або readlink -f /usr/bin/ngrokзнайти, куди посилання має вказувати.
Ерік Думініл

абоnamei -l /usr/bin/ngrok
hanshenrik

4

Враховуючи chownпомилку, найімовірнішою є можливість, що це симпосилання, на що відповідає Свен . Однак, лише для довідки, якщо хтось опиняється тут у випадках, коли файл існує і не є посиланням, але дає помилку не знайденої команди / файл-не знайдено, ще одна можливість полягає в тому, що виконуваний файл динамічно пов'язаний і чомусь він не в змозі завантажити бібліотеки:

  • відсутня бібліотека (запустіть lddбінарний файл, щоб переглянути їх)
  • відсутній навантажувач
  • apparmor, забороняючи доступ до бібліотеки чи завантажувача
  • ...

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


Ще більш заплутаним це може призвести до загадкового "немає такого файлу чи каталогу".
rackandboneman

0

Ви також можете змінити право власності на саме посилання на

chown -h my_user:users /usr/bin/ngrok

якщо ви не бажаєте (або маєте дозвіл) змінювати право власності на цільовий файл.


2
Я не впевнений, як це відповідає на питання - питання "Що тут відбувається?" і проблема полягає в тому, що цільовий файл не існує. Це не вирішує проблему і не відповідає на питання.
wizzwizz4

1
@ wizzwizz4 Я гадаю, що ви також можете інтерпретувати питання як "файл існує (симпосилання є файлом), чому він мені каже інакше і чому я не можу змінити його право власності?" Ця відповідь охоплює таку інтерпретацію. Свен просто припускає (певно правильно), що ОП хоче працювати з цільовим файлом.
JoL

1
@muru Це не застосовується в системі Linux, яка не має дозволів для посилань. Насправді Linux є однією з небагатьох (єдиною?) ОС сімейства POSIX, яка має можливість встановлювати власника / групу символьних посилань. Див . chown(1)Сторінку " Linux man" . Можливі причини Linux це обговорюють на unix.stackexchange.com/questions/33180/…
Ендрю Генле

2
@AndrewHenle і як це допомагає? Зміна власника / групи для символьного посилання тут не має ніякої різниці, оскільки дозволи, застосовані під час виконання, завжди є цільовим файлом. Таким чином, ви можете мати посилання, яким належить хто завгодно, але зміна права власності на це посилання абсолютно не має значення для дозволів, що розглядаються при його виконанні.
муру

1
@muru і як це допомагає? Прочитайте питання, яке я вже пов’язував, оскільки воно спеціально запитує: "В Linux можливо змінити власника або власника групи символічного посилання (symlink). Мені було цікаво, чому хтось хотів би це зробити, оскільки дозволи на симпосилання не є використовується під час доступу до файлу через нього "
Ендрю Генле
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.