GNU/Linux >> Znalost Linux >  >> Linux

Unix, rozdíl mezi cestou začínající „/“ a „//“?

Tato otázka zde již obsahuje odpovědi :Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////uživatelské jméno///soubor)?

(6 odpovědí)
Uzavřeno před 3 lety.

V unixu/linuxu je jakýkoli počet po sobě jdoucích lomítek v cestě obecně ekvivalentní jedinému lomítku. např.

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

Z nějakého důvodu jsou dvě lomítka na začátku absolutní cesty ošetřena speciálně. např.

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

Jakýkoli další počet po sobě jdoucích lomítek kdekoli jinde v patchi bude zkrácen, ale dvě na začátku zůstanou, i když se potom pohybujete po souborovém systému vzhledem k němu.

Proč je to? Je nějaký rozdíl mezi /… a //…?

Přijatá odpověď:

Z větší části jsou opakované lomítka v cestě ekvivalentní jedinému lomítku. Toto chování je nařízeno standardem POSIX a většina aplikací jej následuje. Výjimkou je, že „název cesty, který začíná dvěma po sobě jdoucími lomítky, lze interpretovat způsobem definovaným implementací“ (ale ///foo je ekvivalentní /foo ).

Většina unice nedělá nic zvláštního se dvěma počátečními lomítky. Zejména Linux ne. Cygwin dělá://hostname/path přistupuje k síťové jednotce (SMB).

To, co vidíte, ve skutečnosti není, že by Linux dělal něco zvláštního s // :je to aktuální sledování adresáře bash. Porovnejte:

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

Bash přijímá opatření, že operační systém může zacházet s // speciálně a udržet si to. Dash dělá to samé. Ksh a zsh ne, když běží na Linuxu, myslím (nekontroloval jsem), že mají nastavení doby kompilace.


Linux
  1. Rozdíl mezi /bin/false &/sbin/nologin

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  1. Jaký je rozdíl mezi /sbin/nologin a /bin/false?

  2. Rozdíl mezi „$ . Foo“ A „$ ./foo“??

  3. Rozdíl mezi /var/log/messages, /var/log/syslog a /var/log/kern.log?

  1. Rozdíl mezi absolutní a relativní cestou v Linuxu

  2. Rozdíl mezi /etc/crontab a crontab -e

  3. Jaký je rozdíl mezi /tmp a /run?