GNU/Linux >> Linux Esercitazione >  >> Linux

Unix, differenza tra il percorso che inizia con '/' e '//'?

Questa domanda ha già risposte qui :In che modo Linux gestisce più separatori di percorso consecutivi (/home////username///file)?

(6 risposte)
Chiuso 3 anni fa.

In unix/linux, qualsiasi numero di barre consecutive in un percorso è generalmente equivalente a una singola barra. es.

$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum

Eppure, per qualche ragione, due barre all'inizio di un percorso assoluto sono trattate in modo speciale. es.

$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum

Qualsiasi altro numero di barre consecutive in qualsiasi altra parte di una patch viene troncato, ma ne rimarranno due all'inizio, anche se poi navighi nel filesystem relativo ad esso.

Perchè è questo? C'è qualche differenza tra /... e //... ?

Risposta accettata:

Per la maggior parte, le barre ripetute in un percorso equivalgono a una singola barra. Questo comportamento è imposto da POSIX e la maggior parte delle applicazioni segue l'esempio. L'eccezione è che "un percorso che inizia con due barre successive può essere interpretato in un modo definito dall'implementazione" (ma ///foo è equivalente a /foo ).

La maggior parte degli Unice non fa nulla di speciale con due tagli iniziali. Linux, in particolare, no. Cygwin fa://hostname/path accede a un'unità di rete (SMB).

Quello che vedi non è, infatti, Linux che fa qualcosa di speciale con // :è il monitoraggio della directory corrente di bash. Confronta:

$ bash -c 'cd //; pwd'
//
$ bash -c 'cd //; /bin/pwd'
/

Bash sta prendendo la precauzione che il sistema operativo potrebbe trattare // appositamente e mantenendolo. Dash fa lo stesso. Ksh e zsh non lo fanno quando sono in esecuzione su Linux, immagino (non ho verificato) abbiano un'impostazione in fase di compilazione.


Linux
  1. Differenza tra 2>&-, 2>/dev/null, |&, &>/dev/null E>/dev/null 2>&1?

  2. La differenza tra '$ . Foo' E '$ ./foo'??

  3. Perché '/' ha una voce '..'?

  4. Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

  5. Differenza tra /etc/crontab e crontab -e

Qual è la differenza tra Linux e Unix?

Differenza tra /var/log/messages, /var/log/syslog e /var/log/kern.log?

Differenza tra percorsi assoluti e relativi in ​​Linux

Installa i binari in /bin, /sbin, /usr/bin e /usr/sbin, interazioni con --prefix e DESTDIR

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Differenza tra /bin e /usr/bin