Estoy usando ubuntu y noto que muchos de mis scripts ejecutables no se ejecutarán a menos que preceda al tema ./.
Por ejemplo, si tengo una secuencia de comandos perl: /home/me/script.ply actualmente estoy dentro /home/me, escribir script.plno lo hará, pero lo ./script.plhará.
¿Porqué es eso?
linux
ubuntu
filesystems
David B
fuente
fuente

runnable file => executable file:?Respuestas:
Para ejecutar una secuencia de comandos, debe escribir la ruta completa a la secuencia de comandos a menos que la secuencia de comandos esté presente en uno de los directorios enumerados en su
$PATHvariable de entorno. Generalmente (y de manera predeterminada).(el directorio actual) no está en su$PATH, por lo que debe escribir./scriptpara ejecutarlo.fuente
Porque el directorio actual no está en su camino. Esta es una característica de seguridad. Si estuviera en su camino, alguien podría soltar una copia maliciosa de un comando común, y cuando esté en ese directorio en lugar de ejecutar el sudo real, por ejemplo, ejecutaría el falso. Eso sería algo malo.
fuente
.estuvieran después/usr/bin/, no reemplazaría lo realsudo. Es para asegurarse de que no agrega accidentalmente programas a su ruta, pero no se trata principalmente de reemplazar los existentes.sudo, usaríalsyrm. Mucho más probable que se llame.lsno pedirá su contraseña y si el usuario puede usarsudola contraseña es interesante ...;)slque hace cosas malas, luego invocals, luego se elimina. No puede anular las herramientas del sistema, pero puede 'typosquat'cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@". No es necesario saber la contraseña.Debe tener el directorio actual (un solo punto) en su ruta para que esto funcione.
Puede agregarlo a su ruta si lo desea con los siguientes comandos.
sh / bash:
export PATH=$PATH:.tcsh / csh:
set PATH = ($PATH .)fuente
el shell busca ejecutables en la ruta y, de manera predeterminada,
./no está en la ruta.fuente