เหตุใดชื่อไฟล์ / โฟลเดอร์บางรายการใน Windows จึงมีจุดอยู่ข้างหน้า


34

ตัวอย่างเช่นในMy Documentsมีโฟลเดอร์ต่อไปนี้:

.ssh
.subversion

นี่เป็นรูปแบบของการตั้งชื่อที่ฉันไม่รู้หรือเปล่า?

คำตอบ:


94

หลักการตั้งชื่อนี้มาจากระบบปฏิบัติการที่คล้าย Unix (เช่น Linux หรือ OS X) ซึ่งหมายถึงไฟล์หรือไดเรกทอรี "ซ่อน" มันใช้งานได้ทุกที่ แต่การใช้งานหลักคือการซ่อนไฟล์การกำหนดค่าในโฮมไดเร็กตอรี่ของคุณ (เช่น~/.cache/หรือ~/.plan- มักเรียกว่า "dotfiles")

Dotfiles อาจเรียกว่า Unix แบบดั้งเดิมเทียบเท่ากับไดเรกทอรี "AppData" ใน Windows (โปรแกรม Linux จำนวนมากกำลังถูกเปลี่ยนไปตามข้อกำหนดไดเรกทอรีฐาน XDG การย้ายการกำหนดค่าไปยัง~/.config/และข้อมูลอื่น ๆ ไปยัง~/.cache/& ~/.local/share/- สิ่งนี้ทำให้คล้ายกับAppData\RoamingและAppData\Local)

คุณมีสิ่งเหล่านี้.sshและ.subversionไดเรกทอรีบน Windows เพราะคุณใช้บางโปรแกรม - โดยเฉพาะOpenSSHและการโค่นล้ม - ที่ได้รับการพอร์ตเพื่อใช้ API ระบบ Windows แทนที่จะเป็น POSIX แต่ยังไม่ได้ปรับสำหรับการประชุม Windows อื่น ๆ

บางครั้งการปรับตัวนี้ถูกข้ามไปโดยเจตนาเพื่อทำให้ชีวิตง่ายขึ้นสำหรับผู้ที่ใช้สภาพแวดล้อมแบบ Unix เช่น Cygwin บนระบบ Windows ตัวอย่างเช่น Cygwin ติดตั้งชุดเครื่องมือมาตรฐานแบบ Unix like like lsซึ่งละเว้นการตั้งค่าสถานะ "hidden" ของ Windows และให้เฉพาะ.dotfileชื่อเท่านั้น นอกจากนี้การใช้ตำแหน่งเดียวกัน (เช่น<home>/.ssh) สามารถทำให้การซิงโครไนซ์การกำหนดค่าระหว่างคอมพิวเตอร์ Windows และ Linux / BSD / OSX ง่ายขึ้น

นอกจากนี้: โดยทั่วไปไฟล์เหล่านี้อยู่ในโฮมไดเร็กตอรี่ของผู้ใช้เช่นบน Linux หรือบน Windows 7+ เป็นเรื่องยากสำหรับพวกเขาที่จะใส่ไว้ในไดเรกทอรีย่อย "Documents" หรือ "My Documents"/home/name/.sshC:\Users\name\.ssh


ตามที่ Rob Pike เขียนใน Google+นี่เป็นคุณลักษณะที่ไม่ได้ตั้งใจ:

นานมาแล้วในขณะที่การออกแบบระบบไฟล์ Unix นั้นกำลังดำเนินการอยู่รายการ.และ..ปรากฏขึ้นเพื่อให้การนำทางง่ายขึ้น ฉันไม่แน่ใจ แต่ฉันเชื่อว่า..ในระหว่างการเขียนเวอร์ชัน 2 เมื่อระบบไฟล์กลายเป็นลำดับขั้น (มีโครงสร้างที่แตกต่างกันมากในช่วงต้น) อย่างไรก็ตามเมื่อมีการพิมพ์ ls ไฟล์เหล่านี้จะปรากฏขึ้นดังนั้นทั้ง Ken หรือ Dennis จึงเพิ่มการทดสอบอย่างง่ายให้กับโปรแกรม มันอยู่ในแอสเซมเบลอร์ แต่โค้ดที่เป็นปัญหานั้นเทียบเท่ากับสิ่งนี้:

if (name[0] == '.') continue;

ข้อความนี้สั้นกว่าที่ควรจะเป็นสักนิด

if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

แต่เดี๋ยวก่อนมันง่าย

ผลสองสิ่ง

ครั้งแรกมีการตั้งค่าแบบอย่างที่ไม่ดี โปรแกรมเมอร์ขี้เกียจอื่น ๆ จำนวนมากแนะนำบั๊กด้วยการทำให้เข้าใจง่ายเหมือนกัน ไฟล์จริงที่เริ่มต้นด้วยจุดมักจะถูกข้ามเมื่อพวกเขาควรจะนับ

อย่างที่สองและที่แย่กว่านั้นคือความคิดเกี่ยวกับไฟล์ "ซ่อน" หรือ "จุด" เป็นผลให้โปรแกรมเมอร์ที่ขี้เกียจเริ่มวางไฟล์ลงในโฮมไดเร็กตอรี่ของทุกคน ฉันไม่มีสิ่งที่ติดตั้งบนเครื่องที่ฉันใช้เพื่อพิมพ์สิ่งนี้ แต่โฮมไดเร็กตอรี่ของฉันมีไฟล์ประมาณร้อยจุดและฉันไม่รู้ด้วยซ้ำว่าส่วนใหญ่ของพวกเขาคืออะไรหรือพวกเขายังต้องการ . การประเมินชื่อไฟล์ทุกครั้งที่ผ่านโฮมไดเร็กตอรี่ของฉันนั้นช้าลงด้วยตะกอนที่สะสมนี้


ขอขอบคุณ! ถี่ถ้วนมาก ในโฟลเดอร์ "C: \ users \ <username> \" ของฉันฉันพยายามใช้คำสั่ง "ls" ใน Windows PowerShell และอีกครั้งใน Cygwin Terminal PowerShell แสดงรายการไฟล์จุดและซ่อน AppData ในขณะที่ Cygwin Terminal ทำตรงกันข้าม ! ที่น่าสนใจ Cygwin ใช้การประชุม Unix
Niko Bellic

@NikoBellic: Unix / Cygwin lsมี-aตัวเลือกเพื่อแสดงรายการไฟล์ทั้งหมด
grawity

1
@Ruslan: ตัวอย่างเช่น: VMS ไม่มีไฟล์ที่ซ่อนอยู่เลย; คุณต้องการเพียงแค่จบลงด้วยสิ่งที่ต้องการLOGIN.COMหรือในไดเรกทอรีที่บ้านของคุณDECW$MAIL.DAT (ฉันไม่แน่ใจว่าระบบอื่น ๆ ที่เป็นที่นิยมในเวลานั้น) Unix เพิ่งถูกสร้างขึ้น มันไม่ได้มีการประชุมใด ๆ เลย
grawity

2
@grawity MS-DOS 1.0 เป็น O / S สไตล์ DEC ที่ทำโดย Digital Research และซื้อโดย Microsoft ซึ่งอยู่ในธุรกิจ Unixตั้งแต่นั้นมา MS-DOS 2.0 และใหม่กว่าเพิ่มระบบไฟล์แบบลำดับชั้นและอนุสัญญา Unix บางส่วนซึ่งรวมถึง.."up dir"; Microsoft ลงโฆษณาจริง ๆ "คุณสมบัติ Unix ขั้นสูง" เหล่านี้
Fred Foo

1
@grawity อ่ามันเป็น Seattle Computer Products ที่โคลน CP / M ของ DRI ขอโทษ แต่ประเด็นของฉันคือ Microsoft เป็นร้าน Unix ในช่วงต้นยุค 80 และระบบ DEC ไม่ใช่จุดเดียวที่ออกเดินทาง (Unix เดิมใช้กับฮาร์ดแวร์ DEC แต่ฉันคิดว่าได้รับอิทธิพลจาก CTSS และ Multics มากกว่า DEC OS)
Fred Foo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.