¿Por qué usamos ./filename
para ejecutar un archivo en Linux?
¿Por qué no simplemente ingresarlo como otros comandos gcc
, ls
etc.?
command-line
executable
Renjith G
fuente
fuente
./command_name
para ejecutar un comando en Linux?"Respuestas:
En Linux, UNIX y sistemas operativos relacionados,
.
denota el directorio actual. Como desea ejecutar un archivo en su directorio actual y ese directorio no está en el suyo$PATH
, necesita el./
bit para indicarle al shell dónde está el ejecutable. Entonces,./foo
significa ejecutar el ejecutable llamadofoo
que está en este directorio.Puede usar
type
uwhich
obtener la ruta completa de cualquier comando que se encuentre en su$PATH
.fuente
alias
eses que pueden interferir, no solo$PATH
..
primero, entonces sería un problema de seguridad, usted u otra persona podría reemplazar,ls
por ejemplo (un simple virus / trojen: haga un archivo zip con un ejecutable nombradols
en él, ya que alguien está buscando , ejecutan este ejecutable, eso ...). Si buscó en.
último lugar, puede pasar mucho tiempo volviéndose loco sin saber por qué su programa no funciona (por ejemplo, si realiza un programa llamado prueba, en lugar de ejecutar su programa, ejecuta el programa de prueba del sistema. El cual no produce resultados).export PATH="$PATH:."
para ejecutar el comando en el directorio actual si no se encuentra en otra parte de la RUTA, puede agregar esto en su archivo .bashrcLa respuesta literal es como han dado otros: porque el directorio actual no está en su
$PATH
.Pero por que? En resumen, es por seguridad. Si está buscando en el directorio de inicio de otra persona (o / tmp), y escribe just
gcc
ols
, quiere saber que está ejecutando el verdadero, no una versión maliciosa que su amigo bromista ha escrito y que borra todos sus archivos. Otro ejemplo seríatest
o[
, que podría anular esos comandos en los scripts de shell, si su shell no los tiene incorporados.Tener
.
como última entrada en tu camino es un poco más seguro, pero hay otros ataques que hacen uso de eso. Una fácil es explotar errores tipográficos comunes, comosl
ols-l
. O bien, busque un comando común que no esté instalado en este sistemavim
, por ejemplo, ya que los administradores de sistemas tienen una probabilidad superior a la media para escribir eso.fuente
PATH
variable de entorno.Si quiere decir, ¿por qué necesita ./ al principio? Eso es porque (a diferencia de Windows), el directorio actual no es parte de su ruta de forma predeterminada. Si tu corres:
su shell busca
ls
en los directorios en su variable de entorno PATH (echo $PATH
para verlo) y ejecuta el primer ejecutable llamadols
que encuentra. Si escribes:el shell hará lo mismo, pero probablemente no encontrará un ejecutable llamado a.out. Debe decirle al shell dónde está a.out: está en el directorio actual (.) Y luego está la ruta
./a.out
.Si se pregunta por qué se llama "a.out", ese es solo el nombre de archivo de salida predeterminado para gcc. Puede cambiarlo con la línea de comando -o arg. Por ejemplo:
fuente
touch .a.out; ls -lA
ver esto.)<dir>/<file>
por lo que básicamente está diciendo ejecutar un archivo en el directorio actual, que se indica por./test
Puede intentar agregar
:.
a su variable $ PATH.Pruebe ALT + F2 y escriba:
gksudo gedit /etc/environment
si está ejecutando Linux / GTK (esto es lo que tiene si usa Ubuntu).SIN EMBARGO, le recomiendo que NO haga eso. Es malo, malo, malo y malo.
Sabes, ese tipo de cosas funcionan así desde 1970. Hay una razón por la cual el directorio actual no está incluido en $ PATH.
.
es el directorio actual.something
sería un archivo oculto (escriba "ALT +" para que aparezcan en Nautilus o intente "ls -la
"../someProgram.sh
es lo que escribe para ejecutar un ejecutable someProgram.sh en el directorio actual..somethingElse
significaría que tiene un ejecutable oculto en el directorio actual, lo cual es una mala idea.fuente