El archivo de programa existe en / usr / bin, pero no se puede usar

15

Claramente mi archivo existe en /usr/bin

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

Sin embargo, cuando intento chownhacerlo, recibo un error

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

¡Otros intentos de ejecutarlo también fallan!

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

¿Que está sucediendo aquí?

Jorik
fuente
El tercer punto también podría ocurrir si '/ usr / bin /' no está en su RUTA. Debería haber probado con /usr/bin/ngrokpara ser una simetría completa del siguiente caso con sudo.
Patrick Mevzek

Respuestas:

52

/usr/bin/ngrokserá un enlace simbólico que no apunta a ninguna parte (o más bien a un archivo no existente). Consulte con ls -l.

Sven
fuente
13
El error "no se puede desreferenciar" es el obsequio muerto aquí. No "desreferencia" un archivo normal, lo abre.
Kevin
1
O readlink -f /usr/bin/ngrokpara encontrar dónde debe apuntar el enlace.
Eric Duminil
onamei -l /usr/bin/ngrok
hanshenrik
4

Dado el chownerror, la posibilidad más probable es que sea un enlace simbólico, como respondió Sven . Sin embargo, solo como referencia en caso de que alguien termine aquí para casos en los que el archivo existe y no es un enlace, pero da un error de comando no encontrado / archivo no encontrado, una posibilidad más es que el ejecutable esté vinculado dinámicamente y por alguna razón no puede cargar bibliotecas:

  • biblioteca faltante (ejecutar ldden el binario para verlos)
  • cargador perdido
  • apparmor denegando el acceso a una biblioteca o cargador
  • ...

Además, para un script, si el intérprete en el shebang no se pudo ejecutar por razones similares, obtendría el mismo error.

muru
fuente
Aún más confuso, esto puede resultar en un enigmático "no existe tal archivo o directorio".
rackandboneman
0

También tiene la opción de cambiar la propiedad del enlace simbólico con

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

si no desea (o tiene permiso) para cambiar la propiedad del archivo de destino.

comadreja5i2
fuente
2
No estoy seguro de cómo responde esto a la pregunta: la pregunta es "¿Qué está pasando aquí?" y el problema es que el archivo de destino no existe. Esto no resuelve el problema y no responde la pregunta.
wizzwizz4
1
@ wizzwizz4 Supongo que también puede interpretar la pregunta como "el archivo existe (el enlace simbólico es un archivo), ¿por qué me dice lo contrario y por qué no puedo cambiar su propiedad?" Esta respuesta cubre esa interpretación. Sven solo asume (probablemente correctamente) que el OP quiere trabajar con el archivo de destino.
JoL
1
@muru Esto no es aplicable en un sistema Linux, que no tiene permisos para enlaces simbólicos. En realidad, Linux es uno de los pocos (es la única?) De los sistemas operativos POSIX-familiares que no tienen la capacidad de establecer enlace simbólico propietario / grupo. Consulte la chown(1)página del manual de Linux . Las posibles razones por las que Linux hace esto se discuten en unix.stackexchange.com/questions/33180/…
Andrew Henle
2
@AndrewHenle y cómo ayuda eso? Cambiar el propietario / grupo para un enlace simbólico no hace ninguna diferencia aquí ya que los permisos aplicados al ejecutar siempre son del archivo de destino. Por lo tanto, podría tener un enlace propiedad de quien sea, pero cambiar la propiedad en ese enlace no hace absolutamente ninguna diferencia con respecto a los permisos considerados al ejecutarlo.
muru
1
@muru y cómo ayuda eso? Lea la pregunta que ya he vinculado, ya que específicamente pregunta: "En Linux es posible cambiar el propietario o el propietario del grupo de un enlace simbólico (enlace simbólico). Me preguntaba por qué alguien querría hacer eso, ya que los permisos de un enlace simbólico no son utilizado al acceder a un archivo a través de él "
Andrew Henle