การใช้ / เมื่อใช้ซีดี


12

ฉันอยู่ในไดเรกทอรีบ้านของฉันบนเครื่อง mac:

$ pwd
/Users/lukas

เมื่อฉันcdอยู่ใกล้ฉันไม่ (และไม่สามารถ) เริ่มต้นเส้นทางด้วย/:

$ cd Documents/
/Users/lukas/Documents

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

ยกเว้นเมื่อฉันอยู่ใน/:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

ทำไมฉันจึงสามารถใช้/ในด้านหน้าของเส้นทางเมื่อจะจาก/ไป/Usersแต่ไม่ได้อยู่ในระดับที่ตามมาหรือไม่? สิ่งนี้เฉพาะกับ macOS หรือเป็นพฤติกรรม Unix มาตรฐานนี้หรือไม่?


11
ฉันคิดว่าคำถามเกี่ยวกับเส้นทางสัมพัทธ์และเส้นทางสัมบูรณ์ได้รับการถาม ก่อน
adamczi

6
@adamczi เห็นได้ชัดว่า OP ไม่ทราบว่าเส้นทางสัมพัทธ์คืออะไรหรือมีรูปแบบของไวยากรณ์อย่างไรจึงไม่สามารถค้นหาได้
Reinstate Monica

12
@ K.Gkinis ซึ่งไม่ใช่เหตุผลที่ไม่ปิดเหมือนกัน มันช่วยให้ผู้ถามได้คำตอบที่ดี (ถือว่าคำตอบนั้นดี) และผู้ตอบคำถามเพื่อรักษาเนื้อหาเดียวกันให้น้อยลง
user202729

9
@ K.Gkinis และในแง่ที่ว่าส่วนใหญ่ของการปิดเป็นซ้ำ: ผู้คนจะถามคำถามในหลายวิธีที่แตกต่างกันดังนั้นคำถามมากมาย (ตรงกับวิธีการเหล่านั้น) ชี้ไปที่คำตอบเดียวคือ สิ่งที่ดี. ในกรณีเช่นนี้ (ที่ OP ไม่ทราบคำที่ต้องการค้นหา) การปิดตามคำล่อไม่ใช่คำวิจารณ์ของพวกเขาเพียงวิธีที่ดีที่สุดในการจัดการกับหลาย ๆ คนที่ถามคำถาม
TripeHound

1
@adamczi พวกเขาได้รับการถามก่อน (ขอขอบคุณสำหรับการเชื่อมโยง!) แต่คำถามและโดยเฉพาะอย่างยิ่งคำตอบที่ดีให้ที่นี่ฉันจะวิธีที่มีรายละเอียดมากขึ้นและอธิบายแนวคิดที่ดีกว่าคำตอบที่คุณเชื่อมโยง ไม่ทราบว่าเรื่องสำคัญสำหรับการปิดเป็นรายการที่ซ้ำกัน แต่อาจเป็นการพิจารณา
LukasKawerau

คำตอบ:


45

นี่คือพฤติกรรม Unix มาตรฐาน

/ที่จุดเริ่มต้นของเส้นทางหมายถึงรากของดิสก์ (หรือเริ่มต้น / ระดับบนสุดของต้นไม้ระบบแฟ้ม) ในฐานะที่Documentsเป็นไม่ได้ปิดราก/Documentsไม่สามารถพบได้

/Users ปิดไดเรกทอรีรากดังนั้นปัญหานี้จะไม่เกิดขึ้น

คุณสามารถใช้cd /Users/lukas/Documentsเพื่อเปลี่ยนเส้นทางนั้น

หรือคุณสามารถใช้การกำหนดที่อยู่แบบสัมพันธ์ ระบบไฟล์ที่ใช้ Unix มี 2 ไดเร็กทอรีพิเศษ:

  • . ซึ่งหมายถึง "ไดเรกทอรีนี้"
  • .. ซึ่งหมายถึงไดเรกทอรีหลัก

ถ้าคุณอยู่ใน/Users/lukas, cd ./Documentsจะพาคุณไปยังสถานที่ที่ถูกต้อง

สมมติว่าคุณอยู่ใน/Users/Lukas/Documentsและต้องการที่จะไป/Users/Janes/Documentsคุณสามารถออกคำสั่งcd ../../Janes/Documents- การใช้..จะพาคุณกลับระดับ - ดังนั้นคุณจะทำมันสองครั้งก่อนที่จะเข้าสู่เส้นทางญาติใหม่


1
หมายเหตุ: เป็น @davidgo กล่าวว่าเมื่อในUsers/lukas, cd Documentsสายสำหรับเส้นทางสัมพันธ์ ; cd /Users/Lukas/Documentsเรียกหาพา ธ สัมบูรณ์ (ซึ่งจะทำงานสิ่งใดก็ตามที่คุณอยู่เมื่อเรียกคำสั่งนี้)
Shan-x

1
ในขณะที่คำถามเกี่ยวกับ Mac ซึ่งเป็นระบบ Unix นี่ก็เป็นพฤติกรรม MS-DOS / Windows มาตรฐาน (แทนที่/ด้วย `\`) ตั้งแต่ DOS ยืมมัน (ผ่านประวัติอันยาวนานที่ซับซ้อน) จาก Unix
FreeMan

2
นอกจากนี้ยังขึ้นอยู่กับเชลล์ที่คุณใช้ cd $ HOME / Documents หรือ cd ~ / Documents ก็สามารถใช้ได้เช่นกัน ตัวแปรเชลล์ HOME (เข้าถึงด้วย $ HOME) เป็นที่เก็บข้อมูลปกติสำหรับไดเรกทอรีบ้านของคุณ (~ เป็นชื่อแทนพิเศษสำหรับ $ HOME)
pboss3010

13

/Users/lukasเป็นเส้นทาง "แน่นอน" ส่วนนำแสดง/ถึงรูตไดเร็กทอรีของระบบไฟล์ของคุณ

lukasเป็นเส้นทาง "ญาติ" เนื่องจากไม่ได้ยึดกับรูทหมายความว่า "ค้นหาสิ่งนี้ในไดเรกทอรีปัจจุบัน " เว้นแต่ไดเรกทอรีปัจจุบันคือ/Users(หรือไดเรกทอรีอื่นที่มีlukasใน) สิ่งนี้จะล้มเหลว

ดังนั้นลองสำรวจตัวอย่างของคุณโดยสมมติว่าคุณอยู่ใน/Users/lukas:

$ cd Documents/
/Users/lukas/Documents

ทางญาติได้รับ => การเปลี่ยนแปลงไปยังไดเรกทอรี "เอกสาร" /Users/lukasที่อยู่ภายใน

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

เส้นทางที่แน่นอนได้รับ => /Documentsการเปลี่ยนแปลงไปยังไดเรกทอรี

$ pwd
/

สิ่งนี้แสดงให้เห็นว่าคุณได้เปลี่ยนไดเรกทอรีการทำงานเป็นไดเรกทอรีรากแล้ว/(แม้ว่าcdคำสั่งในการทำสิ่งนี้จะไม่ปรากฏขึ้น)

$ cd Users
/Users

ทางญาติได้รับ => เปลี่ยนไดเรกทอรี "ผู้ใช้" /ที่อยู่ภายใน

$ cd /Users
/Users

เส้นทางที่แน่นอนได้รับ => /Usersการเปลี่ยนแปลงไปยังไดเรกทอรี

/ที่สำคัญทุกครั้งที่เป็นผู้นำที่ กับมันเส้นทางที่แน่นอน ก็ไม่มีเส้นทางนั้นเป็นญาติ กฎนี้ไม่มีความกำกวมเนื่องจากพา ธ สัมบูรณ์ทั้งหมดเริ่มต้นด้วย/(เนื่องจากเรียกว่าไดเรกทอรีรากเสมอ/)

นี่คือ pseudocode บางตัวที่อธิบายอัลกอริทึมอย่างหลวม ๆ :

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

อาร์กิวเมนต์ที่คุณส่งผ่านไปยังcdอัลกอริทึมนี้ ไดเรกทอรีที่คุณเปลี่ยนไปคือเส้นทางที่อัลกอริทึมส่งกลับ


อ่านเพิ่มเติม:


นี่เป็นวิธีที่ดีในการทำความเข้าใจพฤติกรรมนี้ ขอขอบคุณ! :)
LukasKawerau
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.