Diferença entre incluir / no final de um caminho de diretório e omiti-lo [duplicado]

0

Estou apenas imaginando se há alguma diferença no que acontece quando eu saio / no final de um caminho de arquivo, por exemplo:

root /var/www/website.com/

E omitindo como:

root /var/www/website.com

Como isso é tratado ou há alguma diferença?

    
por Stephen Fox 06.01.2015 / 17:00

5 respostas

4

O contexto realmente importa. Para nginx , ao especificar o root para um local, não faz nenhuma diferença, pois nginx sabe que é um diretório. No entanto, isso pode fazer a diferença em outro lugar, já que as double-slashes podem causar problemas nos URLs (isto é, se você fizer algo como blah/$request_uri enquanto reescreve ou faz proxy).

Em geral, não faz diferença quando se trata de plataformas * nix. Existem algumas exceções:

  • rsync se comporta de maneira diferente, dependendo de o caminho do diretório de origem ter uma barra final ou não. Um bom exemplo de como o rsync trata barras à direita .
  • Adicionar uma barra à direita pode fazer um aplicativo ciente de que está procurando um diretório, em vez de criar um arquivo acidentalmente:

    cp blah non-existent-directory
    cp blah non-existent-directory2/
    
  • Semelhante ao acima, em globbing, ele pode ser usado para forçar a expansão apenas para diretórios:

    $ printf "%s\n" * | wc -l
    26
    $ printf "%s\n" */ | wc -l
    20
    

    Desculpe o exemplo. Isso é feito na raiz de uma instalação do Ubuntu razoavelmente padrão, portanto nenhum nome estranho foi prejudicado durante a execução deste exemplo.

por 06.01.2015 / 17:19
4

Trailing bar depois que um nome de diretório é importante em alguns programas e não em outros. Por exemplo:

  • No git / after filename significa apenas o diretório e não um único arquivo (de man 5 gitignore ):

    If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git).

  • Em ls (de wikipedia ):

    When a directory listing of a symbolic link that points to a
    directory is requested, only the link itself will be displayed. In
    order to obtain a listing of the linked directory, the path must
    include a trailing directory separator character ('/', slash).

  • mas alguns outros programas que não me lembro agora (principalmente macros do Emacs que vi) que esperam apenas um diretório e não um arquivo regular aceitam dir e dir/ e adicionarão / quando necessário, por exemplo, para se referir a um arquivo dentro de dir .

Eu não sei como funciona o nginx, mas veja a resposta do muru .

    
por 06.01.2015 / 17:43
2

Em geral, um caminho que não possui uma barra final é ambíguo: pode ser um arquivo ou um diretório. Um caminho com barra à direita só pode ser um diretório. A maioria das shells fornece automaticamente a barra ao usar a conclusão da tabulação.

Isso não significa que você sempre deve usar uma barra final; na verdade, alguns programas não permitem seu uso. Como os outros afirmaram, depende do contexto. Cada programa interpreta isso de maneira diferente.

Um exemplo em que uma barra à direita faz uma grande diferença é rsync .

Considerando os diretórios source e target , o comando rsync -a source target copiaria tudo para target/source . Mas com uma barra à direita, rsync -a source/ target copia o conteúdo de source em target diretamente, sem criar um subdiretório target/source .

Muitas vezes me confundo com esse comportamento, então, em vez de confiar na criação implícita de subdiretórios, prefiro escrevê-lo. Às vezes, até uso um /. à direita para garantir que nenhum subdir indesejado seja criado, pois o subdiretório . já está lá.

    
por 06.01.2015 / 18:02
1

Para URLs nos navegadores, link e link são o mesmo URL. Se a barra à direita é mostrada na barra de endereços do navegador é puramente estética - quando a solicitação é enviada para o servidor, a barra será incluída . ( link e link em o outro lado são URLs diferentes.)

A explicação a seguir é muito boa, tirada de estouro de pilha: Trailing slash nas URLs - qual estilo é o preferido?

Na minha opinião pessoal, barras finais são mal utilizadas.

Basicamente, o formato da URL veio do mesmo formato UNIX de arquivos e pastas, posteriormente, em sistemas DOS e, finalmente, adaptado para a web.

A typical URL for this book on a Unix-like operating system would be a file path such as file:///home/username/RomeoAndJuliet.pdf, identifying the electronic book saved in a file on a local hard disk.

Fonte: Wikipedia: Identificador Uniforme de Recursos

Outra boa fonte para ler: Wikipedia: URI Scheme

According to RFC 1738, which defined URLs in 1994, when resources contain references to other resources, they can use relative links to define the location of the second resource as if to say, "in the same place as this one except with the following relative path". It went on to say that such relative URLs are dependent on the original URL containing a hierarchical structure against which the relative link is based, and that the ftp, http, and file URL schemes are examples of some that can be considered hierarchical, with the components of the hierarchy being separated by "/".

Fonte: Localizador Uniforme de Recursos (URL)

da Wikipedia

Além disso:

That is the question we hear often. Onward to the answers! Historically, it’s common for URLs with a trailing slash to indicate a directory, and those without a trailing slash to denote a file:

http://example.com/foo/ (with trailing slash, conventionally a directory)

http://example.com/foo (without trailing slash, conventionally a file)

Fonte: Blog do Google WebMaster Central - Para cortar ou não a barra

Finalmente:

  1. Uma barra no final do URL faz o endereço parecer "bonito".

  2. Um URL sem barra no final e sem uma extensão parece um pouco "estranho".

  3. Você nunca nomeará o seu arquivo CSS (por exemplo) link , não é?

MAS estou sendo um defensor das práticas recomendadas da Web, independentemente do ambiente. Pode ser complicado e incerto, assim como você disse sobre o URL sem ext.

    
por 06.01.2015 / 18:17
-3

Se você digitar o shell:

    cd path/somedir

Move seu diretório atual para path / somedir .
Mas se você digitar:

    cd path/somedir/

Imprime:

    bash: cd: path/somedir/: No such file or directory

Talvez porque o caractere / signifique que o caminho não está completo, mas continua, por isso, se você colocar nada depois, será o mesmo que fazer referência a um arquivo inexistente.

    
por 06.01.2015 / 17:21