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.pl
y actualmente estoy dentro /home/me
, escribir script.pl
no lo hará, pero lo ./script.pl
hará.
¿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
$PATH
variable de entorno. Generalmente (y de manera predeterminada).
(el directorio actual) no está en su$PATH
, por lo que debe escribir./script
para 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íals
yrm
. Mucho más probable que se llame.ls
no pedirá su contraseña y si el usuario puede usarsudo
la contraseña es interesante ...;)sl
que 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