Sử dụng / khi sử dụng cd


12

Tôi đang ở trong thư mục nhà của tôi trên máy Mac của tôi:

$ pwd
/Users/lukas

Khi tôi cdở xung quanh, tôi không (và không thể) bắt đầu con đường với /:

$ cd Documents/
/Users/lukas/Documents

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

Ngoại trừ khi tôi vào /:

$ pwd
/
$ cd Users
/Users

$ cd /Users
/Users

Tại sao tôi có thể sử dụng /ở phía trước đường dẫn khi đi từ /đến /Usersnhưng không ở bất kỳ cấp độ tiếp theo nào? Đây có phải là đặc trưng của macOS hay đây là hành vi Unix tiêu chuẩn?


11
Tôi nghĩ rằng các câu hỏi về đường dẫn tương đối và tuyệt đối đã được hỏi befofre
adamczi

6
@adamczi Một điều khá rõ ràng là OP không biết đường dẫn tương đối là gì hoặc cú pháp của nó là gì, do đó anh ta không thể tìm kiếm nó.
Phục hồi Monica

12
@ K.Gkinis Đó không phải là lý do để không đóng như là bản sao. Nó giúp người hỏi có được câu trả lời tốt (giả sử câu trả lời là tốt) và người trả lời để duy trì ít phiên bản của cùng một nội dung.
dùng202729

9
@ K.Gkinis Và, theo một nghĩa nào đó, đó là một phần lớn của điểm đóng là một bản sao: mọi người sẽ đặt câu hỏi theo nhiều cách khác nhau, vì vậy rất nhiều câu hỏi (khớp với những cách đó) chỉ vào một câu trả lời là một Điều tốt. Trong những trường hợp như thế này (trong đó OP không biết thuật ngữ để tìm kiếm), đóng cửa không phải là một lời chỉ trích về họ, chỉ là cách xử lý tốt nhất theo nhiều cách mà mọi người đặt câu hỏi.
TripeHound

1
@adamczi Họ đã được hỏi trước đó (cảm ơn bạn về các liên kết!) nhưng câu hỏi của tôi và đặc biệt là các câu trả lời tuyệt vời được đưa ra ở đây là cách chi tiết hơn và giải thích khái niệm tốt hơn câu trả lời bạn liên kết. Không biết điều đó có quan trọng để đóng là trùng lặp không, nhưng có thể là một sự cân nhắc.
LukasKawerau

Câu trả lời:


45

Đây là hành vi chuẩn của Unix.

/đầu đường dẫn biểu thị gốc của đĩa (hoặc mức bắt đầu / mức cao nhất của cây hệ thống tập tin). Vì Documentskhông phải là gốc, /Documentskhông thể được tìm thấy.

/Users là tắt thư mục gốc, vì vậy vấn đề này không xảy ra.

Bạn có thể sử dụng cd /Users/lukas/Documentsđể thay đổi đường dẫn đó.

Ngoài ra, bạn có thể sử dụng địa chỉ tương đối. Hệ thống tập tin dựa trên Unix có 2 thư mục đặc biệt:

  • . có nghĩa là "thư mục này",
  • .. có nghĩa là thư mục cha.

Nếu bạn đang ở /Users/lukas, cd ./Documentssẽ đưa bạn đến đúng nơi.

Giả sử bạn đã vào /Users/Lukas/Documentsvà muốn đi đến /Users/Janes/Documents, bạn có thể ra lệnh cd ../../Janes/Documents- sử dụng ..sẽ đưa bạn trở lại một cấp độ - vì vậy bạn sẽ thực hiện hai lần trước khi đi vào con đường tương đối mới.


1
Lưu ý: như @davidgo đã nói, khi vào Users/lukas, cd Documentsgọi đường dẫn tương đối ; cd /Users/Lukas/Documentsgọi cho đường dẫn tuyệt đối (sẽ hoạt động bất kể bạn đang ở đâu khi gọi lệnh này).
Shan-x

1
Trong khi câu hỏi là về máy Mac, là hệ thống Unix, đây cũng là hành vi MS-DOS / Windows tiêu chuẩn (thay thế /bằng `\`) kể từ khi DOS mượn nó (thông qua lịch sử lâu dài, phức tạp) từ Unix.
FreeMan

2
Ngoài ra tùy thuộc vào trình bao bạn sử dụng, cd $ HOME / Documents hoặc cd ~ / Documents cũng sẽ hoạt động. Biến shell HOME (được truy cập bằng $ HOME) là vị trí lưu trữ thông thường cho thư mục chính của bạn (~ là bí danh đặc biệt cho $ HOME).
pboss3010

13

/Users/lukaslà một con đường "tuyệt đối". Hàng đầu /đại diện cho thư mục gốc của hệ thống tập tin của bạn.

lukaslà một con đường "tương đối". Vì nó không được neo vào thư mục gốc, nó có nghĩa là "tìm kiếm cái này trong thư mục hiện tại ". Trừ khi thư mục hiện tại là /Users(hoặc một số thư mục khác có lukastrong đó), điều này sẽ thất bại.

Vì vậy, hãy khám phá các ví dụ của bạn, giả sử bạn đang ở trong /Users/lukas:

$ cd Documents/
/Users/lukas/Documents

Đường dẫn tương đối đã cho => thay đổi thư mục "Tài liệu" bên trong /Users/lukas.

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

Đường dẫn tuyệt đối đã cho => thay đổi thư mục /Documents.

$ pwd
/

Điều này cho thấy rằng bạn đã thay đổi thư mục làm việc thành thư mục gốc, /(mặc dù cdlệnh để làm điều này không được hiển thị).

$ cd Users
/Users

Đường dẫn tương đối đã cho => thay đổi thư mục "Người dùng" bên trong /.

$ cd /Users
/Users

Đường dẫn tuyệt đối đã cho => thay đổi thư mục /Users.

Chìa khóa mỗi lần là hàng đầu /. Với nó, con đường là tuyệt đối. Không có nó, con đường là tương đối. Quy tắc này không rõ ràng vì tất cả các đường dẫn tuyệt đối bắt đầu bằng /(vì thư mục gốc luôn được gọi /).

Đây là một số mã giả mô tả thuật toán đó một cách lỏng lẻo:

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

Đối số bạn vượt qua để cdđi qua thuật toán này; thư mục bạn kết thúc thay đổi là đường dẫn mà thuật toán trả về.


Đọc thêm:


Đây cũng là một hướng dẫn tuyệt vời và thực sự giúp hiểu được hành vi này. Cảm ơn bạn! :)
LukasKawerau
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.