ความแตกต่างระหว่างไวยากรณ์มาตรฐานและไวยากรณ์ BSD คืออะไร?


21

ฉันได้เห็นคำสั่งมากมายที่ยอมรับ "ไวยากรณ์ BSD" เช่นเดียวกับไวยากรณ์มาตรฐานของพวกเขา ใช้psคำสั่งตัวอย่างหนึ่งตัวอย่าง:

To see every process on the system using standard syntax:
      ps -e
      ps -ef
      ps -eF
      ps -ely

To see every process on the system using BSD syntax:
      ps ax
      ps axu

ดังนั้นความแตกต่างระหว่างสองเส้นทางนี้คืออะไร? โดยทั่วไปเมื่อพวกเขาพูดในรูปแบบ BSD สิ่งที่ฉันควรจำองค์ประกอบ? ไวยากรณ์นี้เป็นเพียงสำหรับคำสั่งเหล่านั้นซึ่งพวกเขาอยู่ใน BSD ด้วยหรือไม่


เพื่อสอบถามถึงความแตกต่างทางประวัติศาสตร์ระหว่างวิธีที่ระบบดำเนินการตามระยะเวลาที่psเหมาะสมคือการยืนอยู่ที่ขอบของเหวที่ไม่มีความหมายที่จะรู้

คำตอบ:


18

MS Office และ LibreOffice ต่างกันอย่างไร ระหว่าง Firefox กับ Chrome?
พวกเขาทำสิ่งเดียวกันโดยประมาณ แต่พวกเขาต่างคนต่างมีจุดประสงค์ที่แตกต่างกันเล็กน้อย

บางทีอาจจะเป็นคำถามที่ดีกว่าคือทำไม BSD, Linux และ Unix OSX กระจายแบ่งปันดังนั้นหลายคำสั่ง? สิ่งนี้จะช่วยลดความสอดคล้องกับPOSIX POSIX นั้นเป็นชุดของมาตรฐานสำหรับระบบปฏิบัติการยูนิกซ์ มันกำหนด Core API คำสั่งและวิธีการทำงานของคำสั่งเหล่านั้น

ในกรณีของps(คำสั่งที่ระบุโดย POSIX) อาร์กิวเมนต์บางตัวจะถูกเรียกร้อง เหล่านี้รวมถึง BSD เหล่านี้ คำสั่งที่ได้รับจาก POSIX ทั้งหมดมี man page ของตนเอง แต่ต้องการการติดตั้งแยกต่างหาก สำหรับps:

sudo apt-get install manpages-posix
man 1posix ps

เหตุใด BSD จึงไม่ใช้ps(หรือในทางกลับกัน)

  • ของเราpsแพคเกจ ( procpsโปรดดูที่: dpkg -S $(which ps)) เป็นทางแยกของอีกprocpsแพคเกจ ทั้งสองอย่างนี้เป็นลิขสิทธิ์ของ GPL สิ่งนี้ไม่สามารถใช้ร่วมกับใบอนุญาตของ BSD ดังนั้นจึงไม่สามารถรวมอยู่ในนั้นได้ ( เราสามารถรวม BSD แต่ไม่จำเป็นต้อง)
  • psเคอร์เนลค่อนข้างเฉพาะ ฉันคิดว่ามันเข้ากันไม่ได้ในทางเทคนิค

แอพพลิเคชั่นอื่น ๆ

คำสั่งส่วนใหญ่สำหรับการปฏิบัติตาม POSIX มาจากcoreutilsแพ็คเกจของ Ubuntu แพคเกจนี้แสดงถึง GNU ใน GNU / Linux และมันก็เป็นลิขสิทธิ์ของ GPL BSD จัดส่งเวอร์ชันที่ได้รับลิขสิทธิ์ BSD ที่เป็นไปตาม POSIX แต่ไม่จำเป็นต้องเหมือนกับ GNU ทั้งหมด

psไม่ได้เป็นเพียงคำสั่ง POSIX ที่ไม่ GNU มีมากมายของพวกเขา

เมื่อฉันนำไปด้วยทำไมพวกเขาควรจะเป็นอย่างไร พวกเขาเป็นคนที่แตกต่างกันในเวลานานมาก นั่นเป็นคำตอบสั้น ๆ ที่นี่


20

วันนี้ย้อนกลับไปในประวัติศาสตร์ที่ค่อนข้างคดเคี้ยวของUnix (Wikipedia มีไดอะแกรมแบบง่ายๆ ซึ่งยังห่างไกล จากความสมบูรณ์) โดยเฉพาะอย่างยิ่งในขณะที่มีสองกระแสหลัก: System Vพัฒนาโดย AT&T และBSDพัฒนาที่ University of California, Berkeley นี่เป็นช่วงต้นทศวรรษ 1980 ก่อน Linux (1991) นับประสา Ubuntu (2004) บ่อยครั้งที่กระแสทั้งสองนี้ทำการตัดสินใจแตกต่างกันและแม้กระทั่งทุกวันนี้คุณจะพบการอ้างอิงถึงคุณลักษณะหรือตัวแปร“ System V” และ“ BSD” เป็นครั้งคราว

psวันที่คำสั่งกลับมาจากหนึ่งในรุ่นแรกของระบบปฏิบัติการยูนิกซ์ (มันไม่ได้อยู่ในรุ่นที่ 1, หน้าคนที่เก่าแก่ที่สุดที่ฉันสามารถค้นหาออนไลน์จากรุ่น 5 (p.94) ในปี 1974) ในเวลานั้นpsมีเพียงไม่กี่ตัวเลือกเช่นps aจะแสดงกระบวนการทั้งหมดแทนที่จะเป็นเพียงแค่ผู้ใช้และps xจะแสดงกระบวนการที่ไม่มีเทอร์มินัลเชื่อมต่อ คุณจะทราบว่าตัวเลือกที่ไม่ได้ขึ้นต้นด้วย-: ในขณะนั้นการใช้งาน-สำหรับตัวเลือกนั้นไม่ใกล้เคียงกับระบบเหมือนทุกวันนี้ส่วนใหญ่เป็นสิ่งสำหรับคำสั่งที่ใช้ชื่อไฟล์เป็นอาร์กิวเมนต์ปกติ

เมื่อเวลาผ่านไปความหลากหลายของ Unix ได้ขยายออกไปpsพร้อมกับตัวเลือกอื่น ๆ อีกมากมาย ตัวแปร BSD เลือกที่จะรักษาไวยากรณ์ดั้งเดิมโดยไม่มีการนำ-หน้าและaและxยังคงมีอยู่ในปัจจุบัน ตัวแปร System V เลือกที่จะนำระเบียบแบบแผนทางไวยากรณ์ของ-สำหรับตัวเลือกและใช้ตัวอักษรที่แตกต่างกัน (ตัวอย่างเช่นps -eเพื่อแสดงกระบวนการทั้งหมด) Oracle (เดิมคือ Sun) Solarisเป็นตัวอย่างของตัวแปร System V (Solaris ยังจัดส่งpsไฟล์ปฏิบัติการแยกต่างหากในไดเรกทอรีที่ไม่ได้อยู่ในค่าเริ่มต้นPATHสำหรับแอปพลิเคชันที่เขียนด้วย BSD ในใจ)

ในช่วงเวลาที่ลินุกซ์เข้ามาในฉากคนที่ใช้มันมักจะมีประสบการณ์ก่อนหน้าหนึ่งของตัวแปร Unix หรืออย่างอื่น บางครั้ง Linux ทำสิ่งต่างๆด้วยวิธี System V บางครั้งใช้วิธี BSD บางครั้งเป็นของตัวเองไม่ว่าจะพิจารณาทางเทคนิคหรือพิจารณาจากประสบการณ์และรสนิยมของผู้ที่นำคุณลักษณะนี้ไปใช้ psคำสั่งของ Linux เริ่มต้นด้วยตัวเลือกคล้าย BSD เช่นps aeเพื่อแสดงกระบวนการทั้งหมดและรวมถึงตัวแปรสภาพแวดล้อมในรายการ เมื่อเวลาผ่านไป (ในช่วงปลายปี 1990 ผมจำไม่ได้ว่าเมื่อไหร่) ผู้เขียนpsตัวเลือกเพิ่มเติมของลินุกซ์สำหรับผู้ที่เคยชินกับระบบโวลต์ดังนั้นวันนี้ps axหรือps -eจะแสดงรายการกระบวนการทั้งหมดภายใต้ Linux และยังมีตัวแปรสภาพแวดล้อมด้วย ( PS_PERSONALITY) เพื่อให้ps ทำตัวเหมือน Unix สายพันธุ์ Unix ที่หลากหลายเพื่อประโยชน์ของสคริปต์เก่าและผู้ที่มีนิสัยที่กำหนดไว้

คนที่ใช้ Unix หลายรุ่นไม่ชอบที่จะต้องปรับเปลี่ยนโปรแกรมและพฤติกรรมของพวกเขาเมื่อเปลี่ยนจาก Unix หนึ่งไปเป็นอีก ดังนั้นจึงมีความพยายามที่จะสร้างมาตรฐานให้กับชุดย่อยของฟังก์ชันการทำงาน สิ่งนี้นำไปสู่มาตรฐานPOSIX (นำโดยIEEE ) ซึ่ง Ubuntu โดยและมีขนาดใหญ่ดังต่อไปนี้ รุ่นแรกที่มีขอบเขตรวมถึงpsคำสั่งออกมาในปี 1992; อันนี้ไม่พร้อมใช้งานออนไลน์ แต่รุ่น 1997เป็น สำหรับpsคำสั่งเช่นในหลาย ๆ กรณี POSIX ใช้วิธีการของ System V ในการทำสิ่งต่าง ๆ

psไวยากรณ์คำสั่งมาตรฐานเป็นหนึ่งที่เข้ากันได้กับทั้งระบบวีและ POSIX นอกจากนี้ไวยากรณ์นั้นสามารถพูดได้ว่าเป็นมาตรฐานเพราะมันใช้-เพื่อแนะนำตัวเลือกโดยค่าเริ่มต้น บางตัวเลือกมีอยู่ในหนึ่งในสองไวยากรณ์เท่านั้น โชคดีที่พวกเขาสามารถผสมในสายเดียวกัน

โดยทั่วไปแล้วคำว่า“ BSD” กับ“ System V” ไม่มีความหมายทางเทคนิคใด ๆ มันหมายถึงประวัติศาสตร์:“ BSD” เป็นสิ่งที่ BSD เลือกในยุค 80 และในที่นั้น“ System V” เป็นทางเลือกของ AT&T และพันธมิตรของพวกเขา (โดยเฉพาะอย่างยิ่ง Sun) “ POSIX” เป็นสิ่งที่คณะกรรมการมาตรฐาน IEEE เลือก


2

ไวยากรณ์ 'มาตรฐาน' ที่คุณอ้างถึงจริง ๆ แล้วเป็นระบบปฏิบัติการ GNU ที่พัฒนาขึ้นในปี 1980 ยูทิลิตี้และปรัชญาที่ยึดตาม GNU ได้ถูกรวมเข้ากับเคอร์เนลของ Linux เพื่อพัฒนาการแจกแจงลินุกซ์ในยุคปัจจุบัน

ระบบปฏิบัติการ BSD ได้รับการพัฒนาในช่วงปลายปี 1970 เป็นอิสระจาก GNU และต่อมาแยกออกเป็นรุ่นที่ทันสมัยเช่น FreeBSD หรือ OpenBSD

ทั้ง GNU และ BSD ได้รับแรงบันดาลใจจาก Unix และพวกเขามีปรัชญาไวยากรณ์ที่แตกต่างกันเล็กน้อย


0

coreutils ของ Ubuntu คือชุดของแอปพลิเคชั่นที่ดูแลโดย GNU ซึ่งรวมถึงเนื้อหาทั้งหมด (ดูที่ apt-cache show coreutils) BSD มีรุ่นเป็นของตนเอง (GNU ไม่เข้ากันกับใบอนุญาต BSD)

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