File program ada di / usr / bin, tetapi tidak dapat digunakan


15

Jelas file saya ada di /usr/bin

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

Namun, ketika saya berusaha untuk chownitu 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?


Poin ketiga bisa terjadi juga jika '/ usr / bin /' tidak ada di PATH Anda. Anda harus menguji dengan /usr/bin/ngrokmenjadi simetri lengkap dari kasus berikut dengan sudo.
Patrick Mevzek

Jawaban:


52

/usr/bin/ngrokakan menjadi symlink yang menunjuk ke mana-mana (atau lebih tepatnya ke file yang tidak ada). Periksa dengan ls -l.


13
Kesalahan "tidak bisa dereferensi" adalah hadiah mati di sini. Anda tidak "dereference" file normal, Anda membukanya.
Kevin

1
Atau readlink -f /usr/bin/ngrokuntuk menemukan di mana tautan harus mengarah.
Eric Duminil

ataunamei -l /usr/bin/ngrok
hanshenrik

4

Mengingat chownkesalahannya, 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:

  • perpustakaan yang hilang (jalankan lddpada biner untuk melihatnya)
  • loader hilang
  • apparmor menolak akses ke perpustakaan atau loader
  • ...

Juga, untuk skrip, jika penerjemah di shebang tidak dapat dieksekusi karena alasan yang sama, Anda akan mendapatkan kesalahan yang sama.


Bahkan lebih membingungkan, ini memang dapat mengakibatkan "tidak ada file atau direktori."
rackandboneman

0

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.


2
Saya tidak yakin bagaimana ini menjawab pertanyaan - pertanyaannya adalah "Apa yang terjadi di sini?" dan masalahnya adalah file target tidak ada. Ini tidak menyelesaikan masalah dan tidak menjawab pertanyaan.
wizzwizz4

1
@ wizzwizz4 Saya kira Anda juga dapat menafsirkan pertanyaan sebagai "file itu memang ada (symlink adalah file), mengapa ia memberi tahu saya sebaliknya dan mengapa saya tidak bisa mengubah kepemilikannya?" Jawaban ini mencakup interpretasi itu. Sven hanya mengasumsikan (mungkin dengan benar) OP ingin bekerja dengan file target.
JoL

1
@muru Ini tidak berlaku pada sistem Linux, yang tidak memiliki izin untuk symlink. Sebenarnya, Linux adalah salah satu dari sedikit (satu-satunya?) OS keluarga POSIX yang memang memiliki kemampuan untuk mengatur pemilik / grup symlink. Lihat chown(1)halaman manual Linux . Kemungkinan alasan mengapa Linux melakukan hal ini dibahas di unix.stackexchange.com/questions/33180/…
Andrew Henle

2
@AndrewHenle dan bagaimana itu membantu? Mengubah pemilik / grup untuk symlink tidak membuat perbedaan di sini karena izin yang diterapkan saat mengeksekusi selalu dari file target. Jadi Anda bisa memiliki tautan yang dimiliki oleh siapa pun, tetapi mengubah kepemilikan pada tautan itu sama sekali tidak membuat perbedaan dengan izin yang dipertimbangkan saat menjalankannya.
muru

1
@muru dan bagaimana itu membantu? Baca pertanyaan yang sudah saya tautkan karena secara khusus menanyakan: "Di linux dimungkinkan untuk mengubah pemilik atau pemilik grup dari tautan simbolik (symlink). Saya bertanya-tanya mengapa seseorang ingin melakukan itu, karena izin dari symlink tidak digunakan ketika mengakses file melalui itu "
Andrew Henle
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.