Uso di / quando si utilizza cd


12

Sono nella mia home directory sul mio mac:

$ pwd
/Users/lukas

Quando sono in cdgiro, non (e non posso) iniziare il percorso con /:

$ cd Documents/
/Users/lukas/Documents

$ cd /Documents
-bash: cd: /Documents: No such file or directory

Tranne quando sono in /:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

Perchè posso usare /di fronte al percorso quando si passa da /a /Users, ma non in tutti i livelli successivi? È specifico per macOS o si tratta di un comportamento Unix standard?


11
Penso che siano state poste domande su percorsi relativi e assoluti prima
adamczi,

6
@adamczi È abbastanza ovvio che OP non sa quale sia un percorso relativo o come sia la sua sintassi, quindi non può cercarlo.
Ripristina Monica il

12
@ K.Gkinis Che non è un motivo per non chiudere come duplicato. Aiuta i richiedenti a ottenere buone risposte (supponiamo che le risposte siano buone) e i rispondenti a mantenere meno versioni dello stesso contenuto.
user202729

9
@ K.Gkinis E, in un certo senso, questa è una grande parte del punto di chiusura come duplicato: le persone faranno domande in molti modi diversi, quindi molte domande (abbinando quei modi) che indicano una singola risposta sono un Buona cosa. In casi come questo (in cui un PO non conosce il termine da cercare), la chiusura come duplice non è una critica nei loro confronti, ma solo il modo migliore di gestire il modo in cui le persone fanno domande.
TripeHound,

1
@adamczi Sono state poste in precedenza (grazie per i collegamenti!) ma la mia domanda e soprattutto le grandi risposte fornite qui sono molto più dettagliate e spiegano il concetto meglio delle risposte che hai collegato. Non so se questo è importante per la chiusura come duplicato, ma potrebbe essere una considerazione.
LukasKawerau,

Risposte:


45

Questo è un comportamento Unix standard.

/L'all'inizio del percorso rappresenta la radice del disco (o / livello più alto inizio dell'albero file system). Poiché Documentsnon è fuori dalla radice, /Documentsnon può essere trovato.

/Users è fuori dalla directory principale, quindi questo problema non si verifica.

È possibile utilizzare cd /Users/lukas/Documentsper passare a quel percorso.

In alternativa, è possibile utilizzare l'indirizzamento relativo. I filesystem basati su Unix hanno 2 directory speciali:

  • . che significa "questa directory",
  • .. il che significa che la directory principale.

Se sei dentro /Users/lukas, ti cd ./Documentsporterebbe nel posto giusto.

Supponiamo che tu fossi dentro /Users/Lukas/Documentse volessi andare /Users/Janes/Documents, potresti emettere un comando cd ../../Janes/Documents- usando ti ..porterebbe indietro di un livello - quindi lo faresti due volte, prima di andare nel nuovo percorso relativo.


1
Nota: come diceva @davidgo, quando in Users/lukas, cd Documentsrichiede il relativo percorso ; cd /Users/Lukas/Documentsrichiede il percorso assoluto (che funzionerebbe qualunque repertorio ci si trovi quando si chiama questo comando).
Shan-x

1
Mentre la domanda riguarda un Mac, che è un sistema Unix, questo è anche un comportamento standard MS-DOS / Windows (che sostituisce /con `\`) poiché DOS lo ha preso in prestito (attraverso una lunga storia contorta) da Unix.
FreeMan,

2
Inoltre, a seconda della shell utilizzata, funzionerebbe anche cd $ HOME / Documents o cd ~ / Documents. La variabile di shell HOME (accessibile con $ HOME) è la solita posizione di archiviazione per la directory home (~ essendo un alias speciale per $ HOME).
pboss3010,

13

/Users/lukasè un percorso "assoluto". Il leader /rappresenta la directory principale del tuo filesystem.

lukasè un percorso "relativo". Poiché non è ancorato alla radice, significa "cercare questo nella directory corrente ". A meno che la directory corrente non sia /Users(o qualche altra directory che contiene al suo lukasinterno), ciò non riuscirà.

Quindi, esploriamo i tuoi esempi, supponendo che tu sia in /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Percorso relativo indicato => modifica nella directory "Documenti" che si trova all'interno /Users/lukas.

$ cd /Documents
-bash: cd: /Documents: No such file or directory

Percorso assoluto indicato => modifica nella directory /Documents.

$ pwd
/

Ciò dimostra che ora hai cambiato la directory di lavoro nella directory principale /(sebbene il cdcomando per farlo non sia stato mostrato).

$ cd Users
/Users

Percorso relativo indicato => modifica nella directory "Utenti" all'interno /.

$ cd /Users
/Users

Percorso assoluto indicato => modifica nella directory /Users.

La chiave ogni volta è quella principale /. Con esso, il percorso è assoluto. Senza di essa, il percorso è relativo. Questa regola non è ambigua perché iniziano tutti i percorsi assoluti /(poiché la directory principale viene sempre chiamata /).

Ecco alcuni pseudocodici che descrivono vagamente quell'algoritmo:

MakePathAbsolute(path):
   if <path> starts with '/'
      return <path>
   else
      return <current directory>/<path>

L'argomento a cui passi cdpassa attraverso questo algoritmo; la directory in cui finisci per cambiare è il percorso che restituisce l'algoritmo.


Ulteriori letture:


Anche questo è un grande walk-through e aiuta davvero a comprendere questo comportamento. Grazie! :)
LukasKawerau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.