ทำไม Windows & Ubuntu จึงมีคำสั่งเชลล์เหมือนกัน?


14

Ubuntu มีทุบตี (Bourne Again SHell) ในขณะที่ Windows มีเชลล์เป็นกรรมสิทธิ์ จากการวิจัยของฉันไม่มีชื่อภาษาที่ใช้สำหรับเชลล์สคริปต์ใน Windows / Ubuntu มันเรียกว่าเชลล์สคริปต์

ทำไม Windows & อูบุนตูหอยเข้าใจคำสั่งเดียวกันเช่น: ls, mkdir, rmdir, mountและอื่น ๆ ?

มีภาษากลางของภาษาสคริปต์เชลล์บ้างไหม? ถ้าเป็นเช่นนั้นโปรดให้รายละเอียดเพิ่มเติมแก่ฉัน


9
ดูen.wikipedia.org/wiki/List_of_Unix_คำสั่ง - ค้นหาว่าคำสั่งเหล่านี้ปรากฏขึ้นครั้งแรกเมื่อใดและตรวจสอบว่า Windows และ GNU ปรากฏตัวครั้งแรกเมื่อใด คำสั่งเหล่านี้ไม่ใช่ส่วนของ bash - เป็นยูทิลิตี้ภายนอกดังนั้นเชลล์ที่ใช้จะไม่เกี่ยวข้อง
muru

10
และผมค่อนข้างมั่นใจว่าlsได้รับการสนับสนุนโดย Powershell cmd.exeไม่ และนั่นเป็นเพราะผู้สร้าง Powershell พยายามเพิ่มชื่อแทนสำหรับคำสั่ง Unix ทั่วไปเพื่อให้ผู้ใช้ Unix สะดวกสบายยิ่งขึ้น technet.microsoft.com/en-us/library/dd347739.aspx
Muru

7
บทความ Wikipedia บน DOS อาจทำให้เข้าใจถึงสิ่งนี้ ข้อความอ้างอิง: "DOS ทำงานบนโปรเซสเซอร์ Intel 8086 16 บิตเริ่มต้นด้วย MS-DOS 1.28 และ PC DOS 2.0 ระบบปฏิบัติการได้รวมคุณสมบัติต่าง ๆ ที่ได้รับแรงบันดาลใจจาก Xenix ซึ่งเป็น Unix ของ Microsoft" ดังนั้นยูนิกซ์จึงเป็นบรรพบุรุษของ MS-DOS en.wikipedia.org/wiki/DOS
theodorn

4
@muru: จริง ๆ แล้วทั้งคำสั่งUnix และ DOS เป็นเพียงนามแฝงของคำสั่ง PowerShell จริงซึ่งตั้งชื่อตามAction-Objectโครงสร้างมาตรฐานประกอบด้วยชุดของการกระทำและวัตถุที่เป็นมาตรฐาน ตัวอย่างเช่นทั้งlsและdirเป็นนามแฝงสำหรับGet-ChildItem(ซึ่งมีนามแฝงเพิ่มเติมgci) mkdirและmdเป็นจริงNew-Item(ซึ่งจริง ๆ แล้วสามารถสร้างมากกว่าไดเรกทอรีเพียงเนื่องจากแนวทางของวัตถุ PowerShell) และอื่น ๆ
Jörg W Mittag

2
ดู CPM, VMS, JCL ด้วย
Zan Lynx

คำตอบ:


44

ของ Windows cmd.exeไม่สนับสนุนls, mountฯลฯ เว้นแต่คุณจะติดตั้งตัวเองเหล่านี้และเพิ่มพวกเขาไป%PATH%(ผ่าน Cygwin, MinGW, ระบบย่อยสำหรับการประยุกต์ใช้งานยูนิกซ์ (SUA)หรือสิ่งอื่น) Powershellทำ และนั่นเป็นเพราะ Powershell มีสิ่งเหล่านี้เป็นนามแฝงของคำสั่ง Powershell มาตรฐานเพื่อให้ผู้ใช้ Unix สะดวกสบายยิ่งขึ้น ดูรายชื่อของนามแฝงเข้ากันได้ใน Powershell Windows มีrmdir, mkdirและอื่น ๆแต่แน่นอนว่าสิ่งเหล่านี้ไม่รองรับไวยากรณ์ตัวเลือกเดียวกันกับที่คุณพบใน Ubuntu

ใน Ubuntu สิ่งเหล่านี้ไม่มีส่วนเกี่ยวข้องกับ Bash พวกมันคือคำสั่งภายนอกทั้งหมด มีมาตรฐานสำหรับสาธารณูปโภคดังกล่าว POSIXเป็นสิ่งที่น่าสังเกตมากที่สุด (ดูรายการของโปรแกรมอรรถประโยชน์ที่ได้รับคำสั่งจากPOSIX ) และLinux Standard Base (LSB)เป็นอีกสิ่งหนึ่งที่สำคัญสำหรับระบบ Linux (ซึ่งส่วนใหญ่ใช้ POSIX แต่มีบางอย่างเพิ่มเติม ) คนที่อยู่ใน Ubuntu ส่วนใหญ่จะให้บริการโดยGNUและยูทิลิตี้ GNU มักจะมีคุณสมบัติมากกว่าฐานที่ POSIX ต้องการ

POSIX ยังกำหนดภาษาของเชลล์ที่คุณกล่าวถึง (ซึ่งแตกต่างอย่างมากจากหนึ่งในcmd.exe) มันมาจากไวยากรณ์ของเชลล์เป้าหมาย Bash (ตอนนี้คุณรู้แล้วว่าBourneหมายถึงอะไรอีก ) จาก GNU ยังเพิ่มคุณสมบัติด้านบน แต่สามารถทำงานในลักษณะที่สอดคล้องกับ POSIX เมื่อต้องการ ภาษา POSIX คือสิ่งที่คุณคาดหวังshไว้ bash, ksh, ash, dash, zshการใช้งานทุกที่ภาษากับการปรับปรุง cshอยู่ในโลก (ฝันร้าย) ของตัวเองและtcshช่วยเพิ่มcshช่วยเพิ่ม

เพื่อทำความเข้าใจเพิ่มเติมให้ดูที่ประวัติของ Unix และUnix likeระบบ Unix ติดตั้ง Windows ล่วงหน้าเป็นเวลากว่าทศวรรษและโปรแกรมอรรถประโยชน์เหล่านี้ปรากฏตัวครั้งแรกใน Unix

Windows เป็นหนึ่งครั้งที่สอดคล้องกับ POSIX เนื่องจากรัฐบาลสหรัฐฯกำหนดให้ใช้สำหรับระบบปฏิบัติการที่ใช้โดยหน่วยงานของรัฐ (นั่นคือเมื่อพวกเขาเพิ่มบริการสำหรับ Unix (SFU)ซึ่ง SUA ดังกล่าวมาในวรรคแรก) แต่ความต้องการนั้นก็ถูกยกเลิกและต่อมา SUA ก็ถูกทิ้ง

ที่เกี่ยวข้อง:

(สังเกตส่วนที่พบบ่อยของโพสต์เหล่านี้ - ทั้งหมดอยู่ในUnix & Linuxและประวัติที่ติดแท็ก- คุณอาจพบว่าการสืบค้นผ่านแท็กนั้นมีข้อมูลอย่างมาก)


3
AFAIK rmdir(พร้อมด้วยmkdirและcd / chdir) เป็นcommand.comบิวด์อินดั้งเดิมตั้งแต่ MS-DOS 2.0 (ไม่มีลำดับชั้นในระบบไฟล์ DOS มาก่อน)
jlliagre

1
rdเป็นทางลัดmdด้วย
jlliagre

1
นี่คือสิ่งที่ฉันได้รับจากการอ่านคำตอบของคุณและอ่านผ่านลิงค์ที่มาจากผู้อื่น: คำสั่ง / ยูทิลิตี้เหล่านี้ปรากฏขึ้นครั้งแรกในอดีตในระบบที่แตกต่างกัน เมื่อเวลาผ่านไปส่วนใหญ่ของพวกเขาได้รับการรวมเข้ากับ Ubuntu และบางส่วนใน Windows อย่างไรก็ตาม Windows ตัดสินใจทำสิ่งต่าง ๆ ด้วยวิธีของตนเองและสร้างอรรถประโยชน์เหล่านี้ในเวอร์ชันของตนเอง เมื่อเวลาผ่านไป Windows ตัดสินใจที่จะเพิ่มนามแฝงลงในคำสั่งเชลล์ของตัวเองเพื่อให้ผู้ใช้ linux สามารถใช้คำสั่งที่ปรากฏบนพื้นผิวเหมือนกับในระบบของพวกเขา แต่ภายใต้พวกเขากำลังแปลคำสั่ง windows เป็นคำสั่ง
Shady Programmer

1
ภาษา POSIX คือสิ่งที่คุณคาดหวังshไว้ bash, ksh, ash, dash, zshการใช้งานทุกที่ภาษากับการปรับปรุง cshอยู่ใน (ฝันร้าย) โลกของตัวเองและช่วยเพิ่มtcsh cshในครั้งเดียว Windows ทำตาม POSIX เนื่องจากรัฐบาลสหรัฐฯกำหนดให้ใช้ระบบปฏิบัติการที่หน่วยงานของรัฐใช้ (ซึ่งเป็นที่ที่ SUA มาจาก) แต่ความต้องการนั้นก็ถูกยกเลิกและต่อมา SUA ก็ถูกทิ้ง
muru

1
@ShadyProgrammer อีกโพสต์ U&L คุณจะสนใจ: unix.stackexchange.com/q/145522/70524
muru

0

ง่าย:

Linux เป็นระบบที่ใช้โมเดลของ UNIX ซึ่งคิดค้นโดย Dennis Ritchie และ Ken Thompson

Windows / DOS เป็น knockoff ราคาถูกของระบบที่เรียกว่า CP / M ซึ่งได้รับความนิยมในปี 1970 ในคอมพิวเตอร์เก่า ๆ ที่คุณเสียบอยู่บนทีวีระบบนี้จะเปลี่ยนเป็นระบบ UNIX รุ่นแรก ๆ ในช่วงปลายยุค 60 ถึงต้นยุค 70 .


แม้ว่าคำตอบของคุณจะเป็นความจริง แต่ก็มีวิธีที่เกินความจริงที่จะเป็นประโยชน์ (และเราใช้จอภาพหรือเทอร์มินัลกับ CP / M - ไม่ใช่ทีวี;)) เมื่อฉันพยายามหาคำสั่ง bash หรือ sed ที่คลุมเครือบางครั้งฉันก็นึกย้อนกลับไปในสมัยนั้นเมื่อระบบปฏิบัติการแทบจะไม่ทำอะไรให้คุณเลย เป็นเรื่องง่ายที่จะทำ - และฉันไม่เคยมีหน่วยความจำหมดในเครื่อง 64k
Joe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.