Jelas file saya ada di /usr/bin
$ ls /usr/bin/ngrok
/usr/bin/ngrok
Namun, ketika saya berusaha untuk chown
itu saya menerima kesalahan
$ sudo chown my_user:users /usr/bin/ngrok
chown: cannot dereference '/usr/bin/ngrok': No such file or directory
Upaya lebih lanjut untuk menjalankannya juga gagal!
$ ngrok
bash: ngrok: command not found
$ sudo /usr/bin/ngrok
sudo: /usr/bin/ngrok: command not found
Apa yang terjadi disini?
/usr/bin/ngrok
menjadi simetri lengkap dari kasus berikut dengansudo
.Jawaban:
/usr/bin/ngrok
akan menjadi symlink yang menunjuk ke mana-mana (atau lebih tepatnya ke file yang tidak ada). Periksa denganls -l
.sumber
readlink -f /usr/bin/ngrok
untuk menemukan di mana tautan harus mengarah.namei -l /usr/bin/ngrok
Mengingat
chown
kesalahannya, kemungkinan yang paling mungkin adalah symlink, seperti dijawab oleh Sven . Namun, hanya untuk referensi jika seseorang berakhir di sini untuk kasus-kasus di mana file ada dan bukan tautan, tetapi memberikan kesalahan perintah-tidak-ditemukan / file-tidak-ditemukan, satu kemungkinan lagi adalah bahwa executable terhubung secara dinamis dan untuk beberapa alasan itu tidak dapat memuat perpustakaan:ldd
pada biner untuk melihatnya)Juga, untuk skrip, jika penerjemah di shebang tidak dapat dieksekusi karena alasan yang sama, Anda akan mendapatkan kesalahan yang sama.
sumber
Anda juga memiliki opsi untuk mengubah kepemilikan symlink itu sendiri
chown -h my_user:users /usr/bin/ngrok
jika Anda tidak ingin (atau memiliki izin) untuk mengubah kepemilikan file target.
sumber
chown(1)
halaman manual Linux . Kemungkinan alasan mengapa Linux melakukan hal ini dibahas di unix.stackexchange.com/questions/33180/…