Gunakan / saat menggunakan cd

12

Saya di direktori home saya di mac saya:

$ pwd
/Users/lukas

Ketika saya cdberkeliling, saya tidak (dan tidak bisa) memulai jalan dengan /:

$ cd Documents/
/Users/lukas/Documents

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

Kecuali ketika saya di /:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

Mengapa saya dapat menggunakan /di depan jalan ketika pergi dari /ke /Userstetapi tidak di tingkat berikutnya? Apakah ini khusus untuk macOS atau apakah ini perilaku Unix standar?

LukasKawerau
sumber
11
Saya pikir pertanyaan tentang jalan relatif dan absolut telah ditanyakan sebelumnya
adamczi
6
@adamczi Cukup jelas bahwa OP tidak tahu apa itu path relatif, atau bagaimana sintaksisnya, sehingga ia tidak dapat mencarinya.
Pasang kembali Monica
12
@ K.Gkinis Yang bukan alasan untuk tidak menutup sebagai duplikat. Ini membantu penanya untuk mendapatkan jawaban yang baik (menganggap jawaban itu baik) dan penjawab untuk mempertahankan versi yang lebih sedikit dari konten yang sama.
user202729
9
@ K.Gkinis Dan, dalam arti, itu adalah bagian besar dari titik penutupan sebagai duplikat: orang akan mengajukan pertanyaan dalam banyak cara berbeda, jadi banyak pertanyaan (cocok dengan cara itu) menunjuk ke satu jawaban adalah Hal baik. Dalam kasus seperti ini (di mana OP tidak tahu istilah untuk mencari), clos-as-dupe bukanlah kritik terhadap mereka, hanya cara terbaik untuk menangani banyak cara orang mengajukan pertanyaan.
TripeHound
1
@adamczi Mereka telah ditanya sebelumnya (terima kasih atas tautannya!) tetapi pertanyaan saya dan terutama jawaban-jawaban hebat yang diberikan di sini jauh lebih terperinci dan menjelaskan konsep lebih baik daripada jawaban yang Anda tautkan. Tidak tahu apakah itu penting untuk ditutup sebagai duplikat, tetapi mungkin menjadi pertimbangan.
LukasKawerau

Jawaban:

45

Ini adalah perilaku standar Unix.

Di /awal lintasan mewakili akar disk (atau level awal / paling atas dari pohon sistem file). Karena Documentsbukan dari akarnya, /Documentstidak dapat ditemukan.

/Users tidak aktif dari direktori root, jadi masalah ini tidak terjadi.

Anda bisa menggunakan cd /Users/lukas/Documentsuntuk mengubah ke jalur itu.

Atau, Anda bisa menggunakan pengalamatan relatif. Filesystem berbasis Unix memiliki 2 direktori khusus:

  • . yang berarti "direktori ini",
  • .. yang berarti direktori induk.

Jika Anda berada di /Users/lukas, cd ./Documentsakan membawa Anda ke tempat yang benar.

Mari kita asumsikan Anda berada di /Users/Lukas/Documentsdan ingin pergi ke /Users/Janes/Documents, Anda bisa mengeluarkan perintah cd ../../Janes/Documents- menggunakan.. akan membawa Anda kembali tingkat - jadi Anda akan melakukannya dua kali, sebelum masuk ke jalur relatif baru.

davidgo
sumber
1
Catatan: seperti yang dikatakan @davidgo, saat masuk Users/lukas, cd Documentspanggilan untuk jalur relatif ; cd /Users/Lukas/Documentspanggilan untuk jalur absolut (yang akan bekerja di mana pun Anda berada saat memanggil perintah ini).
Shan-x
1
Sementara pertanyaannya adalah tentang Mac, yang merupakan sistem Unix, ini juga merupakan perilaku standar MS-DOS / Windows (menggantikan /dengan `\`) karena DOS meminjamnya (melalui sejarah yang panjang dan berbelit-belit) dari Unix.
FreeMan
2
Juga tergantung pada shell yang Anda gunakan, cd $ HOME / Documents atau cd ~ / Documents juga akan berfungsi. Variabel shell HOME (diakses dengan $ HOME) adalah lokasi penyimpanan biasa untuk direktori home Anda (~ menjadi alias khusus untuk $ HOME).
pboss3010
13

/Users/lukasadalah jalan "absolut". Yang memimpin/ mewakili direktori root dari sistem file Anda.

lukasadalah jalur "relatif". Karena tidak berlabuh ke root, itu berarti "lihat ini di direktori saat ini ". Kecuali direktori saat ini adalah /Users(atau direktori lain dengan alukas di dalamnya), ini akan gagal.

Jadi, mari kita telusuri contoh Anda, dengan asumsi Anda berada di /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Path relatif yang diberikan => ubah ke direktori "Documents" yang ada di dalamnya /Users/lukas.

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

Path absolut yang diberikan => ubah ke direktori /Documents.

$ pwd
/

Ini menunjukkan bahwa Anda sekarang telah mengubah direktori kerja ke direktori root, /(meskipun cdperintah untuk melakukan ini tidak ditampilkan).

$ cd Users
/Users

Path relatif yang diberikan => ubah ke direktori "Users" yang ada di dalamnya /.

$ cd /Users
/Users

Path absolut yang diberikan => ubah ke direktori /Users.

Kuncinya setiap kali memimpin itu /. Dengan itu, jalan itu mutlak. Tanpanya, jalan itu relatif. Aturan ini tidak ambigu karena semua path absolut dimulai dengan /(karena direktori root selalu dipanggil /).

Berikut ini beberapa pseudocode yang secara longgar menggambarkan algoritma itu:

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

Argumen yang Anda berikan harus cdmelalui algoritma ini; direktori yang akhirnya Anda ubah adalah jalur yang dikembalikan algoritma.


Bacaan lebih lanjut:

Lightness Races with Monica
sumber
Ini juga merupakan langkah besar dan sangat membantu dalam memahami perilaku ini. Terima kasih! :)
LukasKawerau