Файл програми існує в / 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.