
Solo me pregunto si hay alguna diferencia en lo que sucede cuando salgo/al final de la ruta de un archivo, por ejemplo:
root /var/www/website.com/
Y omitiéndolo como:
root /var/www/website.com
¿Cómo se maneja esto o hay alguna diferencia?
Respuesta1
La barra diagonal después del nombre de un directorio es importante en algunos programas y no en otros. Por ejemplo:
En git,
/
después del nombre del archivo significa solo directorio y no un solo archivo (deman 5 gitignore
):Si el patrón termina con una barra diagonal, se elimina a los efectos de la siguiente descripción, pero solo encontrará una coincidencia con un directorio. En otras palabras, foo/ coincidirá con un directorio foo y las rutas debajo de él, pero no coincidirá con un archivo normal o un enlace simbólico foo (esto es consistente con la forma en que funciona pathspec en general en git).
Desde
ls
Wikipedia):Cuando se solicita una lista de directorio de un enlace simbólico que apunta a un
directorio, sólo se mostrará el enlace en sí. Para
obtener una lista del directorio vinculado, la ruta debe
incluir un carácter separador de directorio final ('/', barra diagonal).sin embargo, algunos otros programas que no recuerdo ahora (en su mayoría macros de Emacs que vi) que esperan solo un directorio y no un archivo normal aceptarán ambos
dir
ydir/
agregarán/
cuando sea necesario, por ejemplo, para hacer referencia a un archivo dentro dedir
.
No sé cómo funciona nginx pero mirala respuesta de muru.
Respuesta2
En general, una ruta que no tiene una barra diagonal es ambigua: puede ser un archivo o un directorio. Una ruta con una barra diagonal final sólo puede ser un directorio. La mayoría de los shells le dan la barra diagonal automáticamente cuando utiliza la función de finalización de tabulación.
Eso no significa que siempre debas usar una barra diagonal; de hecho, algunos programas no permiten su uso. Como dijeron los demás, depende del contexto. Cada programa interpreta esto de manera diferente.
Un ejemplo en el que una barra diagonal marca una gran diferencia es rsync
.
Dados los directorios source
y target
, el comando rsync -a source target
copiaría todo a target/source
. Pero con una barra diagonal, rsync -a source/ target
copia el contenido de source
directamente target
, sin crear un target/source
subdirectorio.
A menudo me confunde este comportamiento, por lo que en lugar de confiar en la creación implícita de subdirectorios, prefiero escribirlo. A veces incluso uso un final /.
para asegurarme de que no se creen subdirectorios no deseados, ya que el subdirectorio .
ya está allí.
Respuesta3
El contexto realmente importa. Para nginx
, aunque especifica root
una ubicación, no hace ninguna diferencia, ya que nginx
sabe que es un directorio. Sin embargo, puede marcar la diferencia en otros lugares, ya queLas barras dobles pueden causar problemas en las URL.(es decir, si hace algo como blah/$request_uri
mientras reescribe o realiza proxy).
En general, no hay diferencia cuando se trata de plataformas *nix. Hay algunas excepciones:
rsync
se comporta de manera diferente dependiendo de si la ruta del directorio de origen tiene una barra diagonal o no.Un buen ejemplo de cómo trata rsync las barras diagonales.Agregar una barra diagonal puede hacer que una aplicación se dé cuenta de que está buscando un directorio, en lugar de crear accidentalmente un archivo:
cp blah non-existent-directory cp blah non-existent-directory2/
De manera similar a lo anterior, en global, se puede usar para forzar la expansión solo a directorios:
$ printf "%s\n" * | wc -l 26 $ printf "%s\n" */ | wc -l 20
Disculpe el ejemplo. Se realiza en la raíz de una instalación de Ubuntu bastante estándar, por lo que no se dañaron nombres extraños durante la ejecución de este ejemplo.
Respuesta4
Si escribes en el shell:
ruta del cd/somedir
Mueve su directorio actual aruta/somedir.
Pero si escribes:
ruta del CD/somedir/
Imprime:
bash: cd: ruta/somedir/: No existe tal archivo o directorio
Quizás porque el /
carácter significa que la ruta no está completa, sino que continúa, por lo que si no pones nada después es lo mismo que hacer referencia a un archivo inexistente.