¿Cuál es la diferencia entre filename y ./filename en Linux

10

¿Cuál es la diferencia entre filenamey ./filename? ¿En qué circunstancias se prefiere uno al otro?

justo a tiempo
fuente

Respuestas:

18

Para los archivos de datos, no hay diferencia: ambas declaraciones harán referencia al archivo de datos en su directorio actual. (Por ejemplo, cat filenamey cat ./filenameson semánticamente idénticos).

Es una historia diferente si el nombre de archivo en cuestión se refiere a un ejecutable , es decir, es lo primero (o incluso lo único) que escribe en la línea de comando. ./filenamebuscará el ejecutable en su directorio actual y en ningún otro lugar. filename, por otro lado, evaluará la variable de entorno PATHy buscará filenameen cada directorio almacenado allí (que podría incluir o no su directorio actual).

./filename(o cualquier otro /path/to/filename) se prefiere cuando se desea ejecutar un ejecutable específico , no el primero que se encuentra en su RUTA.

DevSolar
fuente
6

Si está ejecutando un programa, filenamedice que ejecute el primero que se encuentra en su $PATHy el segundo dice que ejecute el que está en el directorio actual.

Si está usando ese nombre de archivo como argumento para un programa como en do_something filenameo do_something ./filenamesignifican lo mismo.

Pausado hasta nuevo aviso.
fuente
5

Te refieres a la ejecución de comandos, ¿verdad?

Hay una variable de entorno PATHque contiene algunos directorios del sistema, delimitados por punto y coma. Cuando escribe, commandel sistema busca en estos directorios en el orden en que están especificados para buscar un archivo ejecutable llamado <comando>. Si lo encuentra, intenta ejecutarlo. Puedes ver tu RUTA a través echo $PATHde bash. Por ejemplo:

$ echo $ PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / games: / usr / local / sbin: / usr / local / bin: / home / ivanatora / bin: / usr / local / kde4 / bin: / usr / local / kde4 / bin

Cuando escribe ./filenameestá especificando la ruta exacta: el directorio actual. Puede ver que el directorio actual rara vez está en su $ PATH (por razones de seguridad). Entonces, si desea ejecutar un archivo desde el directorio actual, lo usa ./filename.

Para ejecutar un archivo por su ruta (especialmente si no está en $ PATH) también puede escribir <path>/file, como:

/ sbin / ifconfig

Ivan Petrushev
fuente
3

La seguridad ejecutable es la razón principal de esta diferencia.

Usted no quiere . (presente directorio de trabajo o PWD) en su camino porque alguien podría troyano http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 un ejecutable crucial como ps o ls, en su PWD y engañarlo presentando datos incorrectos.

bitbucket
fuente
1

Depende de qué circunstancias lo estés usando.

Como argumento, por ejemplo, "nombre de archivo del programa", entonces depende del programa, pero generalmente son idénticos.

Como nombre de programa, por ejemplo, "argumentos de nombre de archivo", luego "argumentos de nombre de archivo" buscará PATH para encontrar el binario, mientras que "argumentos de nombre de archivo" utilizará el programa en el directorio actual. Esto es obviamente útil si. no está en la RUTA, pero también es útil usar esta, incluso si. está en la ruta, quizás porque coincide con una entrada anterior.

gorila
fuente