Najwyraźniej mój plik istnieje /usr/bin
$ ls /usr/bin/ngrok
/usr/bin/ngrok
Jednak gdy próbuję to chown
zrobić , pojawia się błąd
$ sudo chown my_user:users /usr/bin/ngrok
chown: cannot dereference '/usr/bin/ngrok': No such file or directory
Dalsze próby jego uruchomienia również się nie udają!
$ ngrok
bash: ngrok: command not found
$ sudo /usr/bin/ngrok
sudo: /usr/bin/ngrok: command not found
Co tu się dzieje?
/usr/bin/ngrok
aby uzyskać pełną symetrię następującego przypadku zsudo
.Odpowiedzi:
/usr/bin/ngrok
będzie dowiązaniem symbolicznym, które nigdzie nie wskazuje (a raczej nieistniejącego pliku). Sprawdź za pomocąls -l
.źródło
readlink -f /usr/bin/ngrok
znaleźć, gdzie link powinien wskazywać.namei -l /usr/bin/ngrok
Biorąc pod uwagę
chown
błąd, najbardziej prawdopodobne jest to, że jest to dowiązanie symboliczne, na co odpowiedział Sven . Jednak tylko w celach informacyjnych, na wypadek gdyby ktoś znalazł się tutaj w przypadkach, w których plik istnieje i nie jest łączem, ale daje błąd polecenia nie znaleziono / plik nie znaleziono, istnieje jeszcze jedna możliwość, że plik wykonywalny jest dynamicznie powiązany i z jakiegoś powodu nie można załadować bibliotek:ldd
plik binarny, aby je zobaczyć)Ponadto w przypadku skryptu, jeśli interpreter w trybie shebang nie mógłby zostać wykonany z podobnych powodów, wystąpiłby ten sam błąd.
źródło
Możesz również zmienić własność samego dowiązania symbolicznego
chown -h my_user:users /usr/bin/ngrok
jeśli nie chcesz (lub nie masz uprawnień) zmienić właściciela pliku docelowego.
źródło
chown(1)
stronę man . Możliwe przyczyny, dla których Linux to robi, są omówione na stronie unix.stackexchange.com/questions/33180/...