ล่ามบรรทัดคำสั่ง ภาษาคำสั่งของระบบยูนิกซ์ ล่ามเชลล์

ส่วนนี้อธิบายคำสั่งและสัญลักษณ์ที่มีความหมายพิเศษที่ช่วยให้คุณ:

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

ล่าม SHELL เป็นเชลล์สำหรับระบบปฏิบัติการทั้งหมดและทำหน้าที่อินเทอร์เฟซระหว่างผู้ใช้และระบบปฏิบัติการ โดยจะสกัดกั้นและตีความคำสั่งของผู้ใช้ทั้งหมด สร้างและแสดงข้อความตอบกลับ

นอกเหนือจากการรันคำสั่ง UNIX มาตรฐานและไฟล์ปฏิบัติการแล้ว ล่ามยังมีภาษาของตัวเอง ซึ่งมีความสามารถใกล้เคียงกับภาษาการเขียนโปรแกรมระดับสูง ภาษานี้ช่วยให้คุณสร้างโปรแกรม (ไฟล์เชลล์ สคริปต์) ที่สามารถรวมตัวดำเนินการภาษาและคำสั่ง UNIX ไฟล์ดังกล่าวไม่จำเป็นต้องมีการคอมไพล์และดำเนินการในโหมดตีความ แต่ต้องมีสิทธิ์ในการปฏิบัติการ (ตั้งค่าโดยใช้คำสั่ง โครโมด).

ผู้ใช้สื่อสารกับล่ามคำสั่งโดยการป้อนคำสั่งจากแป้นพิมพ์หลังจากปรากฏพร้อมต์ (คำเชิญ) ซึ่งโดยปกติจะเป็นสัญลักษณ์ "$" ล่ามจะพิจารณาลำดับของอักขระที่ป้อนเป็นชื่อของคำสั่งภายในหรือเป็นชื่อของไฟล์ปฏิบัติการ

ขั้นตอนเชลล์ (สคริปต์) สามารถส่งผ่านอาร์กิวเมนต์ได้เมื่อเปิดใช้งาน อาร์กิวเมนต์เก้าอาร์กิวเมนต์แรกแต่ละตัวได้รับการกำหนดพารามิเตอร์ตำแหน่งตั้งแต่ $1 ถึง $9 ($0 คือชื่อของโพรซีเดอร์) และชื่อเหล่านี้สามารถเข้าถึงได้จากข้อความของโพรซีเดอร์

ก่อนที่เราจะดูคำสั่งเชลล์ เราควรใส่ใจกับการใช้สัญลักษณ์บางตัวในคำสั่งเสียก่อน

ด้านล่างนี้คือเมตาอักขระที่ใช้ เปลือก:

- - อนุญาตให้คุณระบุชื่อไฟล์แบบย่อเมื่อค้นหาตามรูปแบบ

& - หมายความว่าคำสั่งจะถูกดำเนินการในเบื้องหลัง

- - แยกคำสั่งบนบรรทัดคำสั่ง

แทนที่ความหมายพิเศษของอักขระ เช่น *, ?, [, ], &, ;,<,

"..." - ยกเลิกค่าช่องว่างที่เป็นตัวคั่นและค่าพิเศษ

ตัวละครทั้งหมด

"..." - ยกเลิกค่าช่องว่างที่เป็นตัวคั่นและความหมายพิเศษของอักขระทั้งหมดยกเว้น $ และ;

> - เปลี่ยนเส้นทางเอาต์พุตคำสั่งไปยังไฟล์

< - เปลี่ยนเส้นทางอินพุตคำสั่งจากไฟล์

>> - เปลี่ยนเส้นทางเอาต์พุตคำสั่งที่ควรเพิ่ม

จุดสิ้นสุดของไฟล์ที่มีอยู่

- - สร้างไปป์ที่นำเอาต์พุตของคำสั่งหนึ่งไปยังอินพุตของอีกคำสั่งหนึ่ง

`...` - ใช้เป็นคู่; อนุญาตให้คุณใช้เอาต์พุตคำสั่งเป็น

อาร์กิวเมนต์บรรทัดคำสั่ง

$ - ใช้กับพารามิเตอร์ตำแหน่งและที่ผู้ใช้กำหนด

ชื่อตัวแปร ซึ่งใช้เป็นค่าเริ่มต้นด้วย

เป็นคำใบ้ เปลือก.

นอกจากนี้ เพื่อความสะดวกในการทำงานกับไฟล์ ล่ามคำสั่งเกือบทั้งหมดจะตีความอักขระ "?" และ "*" โดยใช้เป็นรูปแบบชื่อไฟล์ (ที่เรียกว่า อักขระเมตา):

  • - - สัญลักษณ์ใดสัญลักษณ์หนึ่ง
  • * - จำนวนอักขระใด ๆ โดยพลการ

ตัวอย่างเช่น: *.c - ระบุไฟล์ทั้งหมดที่มีนามสกุล "c";

pr???.* - ระบุไฟล์ที่ชื่อขึ้นต้นด้วย "pr" ประกอบด้วยอักขระห้าตัวและมีนามสกุลใดๆ

ตัวแปรเชลล์

ภาษาเชลล์ช่วยให้คุณทำงานกับตัวแปรได้ (โดยไม่ต้องมีการประกาศล่วงหน้า) ชื่อตัวแปรขึ้นต้นด้วยตัวอักษรและสามารถประกอบด้วยตัวอักษรและตัวเลขได้ การเข้าถึงตัวแปรเริ่มต้นด้วยเครื่องหมาย "$"

ตัวอย่าง. ไปที่โฮมไดเร็กตอรี่ของผู้ใช้: ซีดี $HOME

ผู้ดำเนินการที่ได้รับมอบหมาย- การกำหนดค่าให้กับตัวแปรทำได้โดยใช้ตัวดำเนินการ `=" โดยไม่มีช่องว่าง

จากหนังสือนิตยสาร Computerra ฉบับที่ 33 ลงวันที่ 12 กันยายน 2549 ผู้เขียน นิตยสารคอมพิวเตอร์

SOFTERRA: ทีมล่ามที่มีศิลปะชั้นสูง ผู้แต่ง: Ilya Shpankov เมื่อบทสนทนาหันไปหาโปรแกรมแก้ไขกราฟิกแรสเตอร์ คนส่วนใหญ่ส่วนใหญ่จำ Adobe Photoshop ได้เป็นอันดับแรก แน่นอนว่าผู้สนับสนุนซอฟต์แวร์เสรีจะไม่ลืมที่จะพูดถึง

จากหนังสือ Let's Build a Compiler! โดย เครนชอว์ แจ็ค

จากหนังสือสถาปัตยกรรมระบบปฏิบัติการ UNIX ผู้เขียน บาค มอริซ เจ

จากหนังสือเซิร์ฟเวอร์ DIY Linux ผู้เขียน โคลิสนิเชนโก เดนิส นิโคลาวิช

19.7. ล่ามคำสั่ง bash ล่ามคำสั่งเป็นโปรแกรมที่ดำเนินการคำสั่งของผู้ใช้ ล่ามมาตรฐาน (หรือเชลล์) คือ bash (Bourne Again Shell) ล่ามต่อไปนี้ก็ค่อนข้างธรรมดาเช่นกัน: sh, ash, bsh, tcsh, csh, zsh รายการ

จากหนังสือการเขียนโปรแกรมใน Prolog for Artificial Intelligence ผู้เขียน แบรตโก อีวาน

จากหนังสือสนทนาฟรีทางอินเทอร์เน็ต ผู้เขียน ฟรูโซรอฟ เซอร์เกย์

16.2. ล่ามอย่างง่ายสำหรับโปรแกรมที่ขับเคลื่อนด้วยรูปแบบ เพื่ออธิบายโมดูลที่ขับเคลื่อนด้วยรูปแบบ เราใช้ไวยากรณ์ต่อไปนี้: ConditionPart ---> ActionPartส่วนเงื่อนไขคือรายการของเงื่อนไข:[ Condition1, Condition2, Condition3, ...] โดยที่

จากหนังสือ Ubuntu 10 คู่มือเริ่มต้นฉบับย่อ ผู้เขียน โคลิสนิเชนโก้ ดี. เอ็น.

บทที่ 4 TeamSpeak - การสนทนาเป็นทีมผ่านเครือข่ายคอมพิวเตอร์ TeamSpeak แตกต่างจาก TeamTalk อย่างไร โปรแกรม TeamSpeak นั้นคล้ายกับ TeamTalk มาก: ช่องทางเดียวกันความสามารถเดียวกันในการทำงานทั้งบนอินเทอร์เน็ตและบนเครือข่ายท้องถิ่นตัวเลือกตัวแปลงสัญญาณการบีบอัดเสียงต่างๆ , ไคลเอนต์เซิร์ฟเวอร์

จากหนังสือคู่มือนักพัฒนาฐานข้อมูล Firebird โดย บอร์รี เฮเลน

บทที่ 22 ล่ามคำสั่ง bash 22.1 สิ่งที่คุณต้องรู้เกี่ยวกับ bash bash คือ Linux shell ที่ใช้กันมากที่สุด (ตัวแปลคำสั่ง) วัตถุประสงค์หลักของ bash คือเพื่อรันคำสั่งที่ผู้ใช้ป้อน ผู้ใช้ป้อนคำสั่ง bash ค้นหาโปรแกรม

จากหนังสือระบบปฏิบัติการ UNIX ผู้เขียน โรบาเชฟสกี้ อังเดร เอ็ม.

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

จากหนังสือ Linux และ UNIX: การเขียนโปรแกรมเชลล์ คู่มือนักพัฒนา โดย เทนสลีย์ เดวิด

เชลล์ ระบบ UNIX สมัยใหม่ทั้งหมดมีอย่างน้อยสามเชลล์: เชลล์เป้าหมาย (/bin/sh), เชลล์ C (/bin/csh) และเชลล์ Korn (/bin/ksh) มีล่ามอื่นๆ อีกหลายตัว เช่น เชลล์ Bourne-Again (bash) ซึ่งมีฟังก์ชันการทำงานคล้ายกันCommand

จากหนังสือ UNIX - สภาพแวดล้อมการเขียนโปรแกรมสากล โดย ไพค์ ร็อบ

บอร์นเชลล์ บอร์นเชลล์เป็นล่ามคำสั่งมาตรฐานที่มาพร้อมกับระบบ UNIX ทั้งหมด และเข้ากันได้กับล่าม bash บน Linux ในหนังสือที่อุทิศให้กับการเขียนโปรแกรมเชลล์และไม่เชื่อมโยงกับระบบปฏิบัติการเฉพาะโดยทั่วไป

จากหนังสือของผู้เขียน

Shell Interpreter ส่วนแรกของหนังสือครอบคลุมประเด็นทั่วไปที่เกี่ยวข้องกับการทำงานในเชลล์ล่าม บทที่ 1 ครอบคลุมถึงสิทธิ์ของไฟล์และไดเร็กทอรี และวิธีการสร้างลิงก์สัญลักษณ์

จากหนังสือของผู้เขียน

24.1. รายการคำสั่งทั้งหมดที่สร้างไว้ในตารางล่ามเชลล์ 24.1 มีรายการคำสั่งมาตรฐานในตัวทั้งหมด ตารางที่ 24.1. คำสั่งมาตรฐานในตัว: Null คืนค่าจริงเสมอ การอ่านไฟล์จากล่ามปัจจุบัน

ไดรเวอร์อุปกรณ์อักขระ

เมื่อมีการออกคำสั่ง สตรีมอักขระจะถูกตีความเป็นครั้งแรกโดยไดรเวอร์อุปกรณ์อักขระ ไดรเวอร์ใดใช้งานได้ขึ้นอยู่กับอุปกรณ์ที่ใช้ในแต่ละกรณี (สำหรับข้อมูลโดยละเอียดเพิ่มเติม โปรดดูที่ “คำอธิบายโปรแกรม ส่วนที่ 1 การอ้างอิงยูทิลิตี้” KPDA.10964-01 13 01)

บันทึก- การกดแป้นพิมพ์บางรายการอาจได้รับการประมวลผลแตกต่างไปจากที่อธิบายไว้ในส่วนนี้ ขึ้นอยู่กับการกำหนดค่าระบบของคุณ

โหมดอินพุต

ไดรเวอร์อุปกรณ์ Character I/O สามารถทำงานได้ทั้งสองแบบ โหมดของข้อมูลอินพุตที่ยังไม่ได้ประมวลผล ("ดิบ")(โหมดอินพุตดิบ) หรือใน โหมดมาตรฐาน(โหมดมาตรฐาน) หรือ โหมดอินพุตที่แก้ไขได้(แก้ไขโหมดอินพุต) ในโหมดอินพุตแบบ Raw อักขระทั้งหมดจะถูกส่งผ่านไปยังแอปพลิเคชันทันทีที่ป้อน ในโหมดอินพุตที่แก้ไขได้ แอปพลิเคชันจะได้รับอักขระหลังจากป้อนข้อมูลทั้งบรรทัดแล้วเท่านั้น (โดยปกติจะระบุด้วยการขึ้นบรรทัดใหม่)

การสนับสนุนเทอร์มินัล

บางโปรแกรม (เช่นvi) จำเป็นต้องมีข้อมูลเกี่ยวกับการดำเนินการที่เครื่องเทอร์มินัลของคุณสามารถทำได้ (เป็นไปได้ไหมที่จะเลื่อนเคอร์เซอร์ ล้างหน้าจอ ฯลฯ) ตัวแปรสภาพแวดล้อม TERMระบุประเภทของเทอร์มินัลที่ใช้งาน และไดเร็กทอรี /usr/lib/terminfo คือฐานข้อมูลเทอร์มินัล ไดเร็กทอรีนี้ประกอบด้วยชุดของไดเร็กทอรีย่อย (a ถึง z) ที่เก็บข้อมูลสำหรับเทอร์มินัลที่เกี่ยวข้อง แอปพลิเคชันบางตัวใช้ /etc/termcap ซึ่งเป็นโมเดลฐานข้อมูลไฟล์เดียวแบบเดิม แทนที่จะเป็น /usr/lib/terminfo

เทอร์มินัลเริ่มต้นคือqansi-m (เทอร์มินัล ANSI เวอร์ชัน QNX) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าประเภทเทอร์มินัล โปรดดูส่วนย่อย “ประเภทเทอร์มินัล” ในส่วนที่ 9

บริการ เทลเน็ต

เมื่อใช้บริการออนไลน์telnet สำหรับการสื่อสารระหว่างเครื่อง QNX สองเครื่อง (ใช้งาน QNX 4 หรือ QNX Neutrino) ควรระบุพารามิเตอร์ -8 เพื่อเปิดใช้งานเส้นทางข้อมูลแปดบิต หากคุณกำลังเชื่อมต่อกับเครื่องที่ใช้ QNX Neutrino จากเครื่องที่ใช้ระบบปฏิบัติการอื่นและเทอร์มินัลทำงานไม่ถูกต้อง ให้ออกจาก telnet และรันยูทิลิตี้อีกครั้งด้วยตัวเลือก -8

บันทึก - เมื่อเริ่มต้นtelnet จาก Windows OS ใช้โหมด ansi หรือ vt100 ขึ้นอยู่กับประเภทเทอร์มินัล

ข้อมูลทั่วไปเกี่ยวกับแป้นพิมพ์

ในตาราง 4.1 แสดงให้เห็นว่าไดรเวอร์อุปกรณ์ I/O ของอักขระตีความการกดแป้นพิมพ์ต่างๆ และการใช้ร่วมกันอย่างไร (นั่นคือ กลุ่มของปุ่มที่กดพร้อมกัน) ไดรเวอร์จะประมวลผลการกดแป้นพิมพ์ทันทีหลังจากดำเนินการ

บันทึก- การตอบสนองของระบบต่อการใช้แป้นพิมพ์ของผู้ใช้อาจแตกต่างจากที่อธิบายไว้ด้านล่าง หาก:

เปลือก(เชลล์) ในระบบ UNIX หมายถึงกลไกการโต้ตอบระหว่างผู้ใช้และระบบ โดยพื้นฐานแล้ว มันเป็นตัวแปลคำสั่งที่อ่านบรรทัดที่ผู้ใช้พิมพ์และเริ่มดำเนินการฟังก์ชันระบบที่ร้องขอ ภาษาคำสั่งที่สมบูรณ์ซึ่งตีความโดยเชลล์มีความสามารถมากมายและค่อนข้างซับซ้อน แต่คำสั่งส่วนใหญ่ใช้งานง่ายและจดจำได้ง่าย

บรรทัดคำสั่งประกอบด้วยชื่อคำสั่ง (นั่นคือ ชื่อของไฟล์ที่จะดำเนินการ) ตามด้วยรายการอาร์กิวเมนต์ คั่นด้วยช่องว่าง เชลล์แบ่งบรรทัดคำสั่งออกเป็นส่วนประกอบ ไฟล์ที่ระบุในคำสั่งถูกโหลดและให้สิทธิ์เข้าถึงอาร์กิวเมนต์ที่ระบุในคำสั่ง

ภาษาคำสั่งใดๆ ในตระกูลเชลล์จริงๆ แล้วประกอบด้วยสามส่วน:

โครงสร้างบริการที่อนุญาตให้คุณจัดการสตริงข้อความและสร้างคำสั่งที่ซับซ้อนตามคำสั่งง่ายๆ

 คำสั่งในตัวที่ดำเนินการโดยตรงโดยล่ามภาษาคำสั่ง

คำสั่ง  แสดงโดยไฟล์ปฏิบัติการที่แยกจากกัน

ในทางกลับกัน ชุดคำสั่งประเภทหลังประกอบด้วยคำสั่งมาตรฐาน (ยูทิลิตี้ระบบ เช่น vi, cc เป็นต้น) และคำสั่งที่สร้างโดยผู้ใช้ระบบ เพื่อให้ไฟล์ปฏิบัติการที่พัฒนาโดยผู้ใช้ OSUNIX สามารถรันเป็นคำสั่งเชลล์ได้ ก็เพียงพอแล้วที่จะกำหนดฟังก์ชันชื่อ main ในไฟล์ต้นฉบับไฟล์ใดไฟล์หนึ่ง (ชื่อ main จะต้องเป็นสากล นั่นคือ จะต้องไม่นำหน้า โดยคำหลักคงที่) หากคุณใช้ชื่อของไฟล์ปฏิบัติการดังกล่าวเป็นชื่อคำสั่ง เชลล์จะสร้างกระบวนการใหม่และรันโปรแกรมปฏิบัติการที่ระบุในนั้น โดยเริ่มต้นด้วยการเรียกไปยังฟังก์ชันหลัก

โดยทั่วไปแล้วเนื้อหาของฟังก์ชันหลักสามารถกำหนดเองได้ (สำหรับล่ามสิ่งสำคัญคือการมีจุดเริ่มต้นในโปรแกรมชื่อ main) แต่เพื่อสร้างคำสั่งที่สามารถตั้งค่าพารามิเตอร์ได้คุณต้อง ปฏิบัติตามกฎมาตรฐานบางประการ ในกรณีนี้ แต่ละฟังก์ชันหลักจะต้องถูกกำหนดด้วยพารามิเตอร์สองตัว ได้แก่ argci และ argv หลังจากเรียกคำสั่งแล้ว พารามิเตอร์ argc จะสอดคล้องกับจำนวนสตริงอักขระที่ระบุเป็นอาร์กิวเมนต์ของการเรียกคำสั่ง และ argv คืออาร์เรย์ของพอยน์เตอร์ไปยังตัวแปรที่มีสตริงเหล่านี้ ในกรณีนี้ ชื่อของคำสั่งจะถือเป็นบรรทัดแรกของอาร์กิวเมนต์ (นั่นคือ หลังจากการเรียก ค่าของ argc จะมากกว่าหรือเท่ากับ 1 เสมอ) รหัสฟังก์ชันหลักจะต้องประเมินความถูกต้องของค่า argc ที่กำหนดและประมวลผลสตริงข้อความที่กำหนดตามลำดับ

ตัวอย่างเช่น ข้อความ C ต่อไปนี้สามารถใช้เพื่อสร้างคำสั่งที่พิมพ์สตริงข้อความที่กำหนดเป็นอาร์กิวเมนต์:

#รวม

หลัก (argc, argv)

printf(“การใช้งาน: %s ข้อความของคุณ\n”, argv);

printf(“%s\n”, argv);

กระบวนการ

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

ในการสร้างกระบวนการใหม่และรันโปรแกรมจะมีการเรียกระบบ API สองครั้ง: fork() และ exe(executable_file_name) การเรียกระบบทางแยกทำให้เกิดการสร้างพื้นที่ที่อยู่ใหม่ ซึ่งสถานะจะเหมือนกันทุกประการกับสถานะของพื้นที่ที่อยู่ของกระบวนการหลัก (นั่นคือ มันมีโปรแกรมและข้อมูลเดียวกัน) สำเนาของเซ็กเมนต์ข้อมูลทั้งหมดถูกสร้างขึ้นสำหรับกระบวนการย่อย

กล่าวอีกนัยหนึ่ง ทันทีหลังจากดำเนินการเรียกระบบ fork กระบวนการหลัก (พาเรนต์) และโปรเซสรองจะเป็นฝาแฝดสัมบูรณ์

การควบคุมทั้งสองอยู่ที่จุดทันทีหลังจากการเรียกทางแยก เพื่อให้โปรแกรมสามารถระบุได้ว่ากระบวนการใดกำลังทำงานอยู่ - กระบวนการหลักหรือกระบวนการที่สร้างแล้ว ฟังก์ชัน fork จะส่งคืนค่าที่แตกต่างกัน: 0 ในกระบวนการวางไข่และจำนวนเต็มบวก (ตัวระบุกระบวนการวางไข่ - ที่เรียกว่า PID) ในกระบวนการหลัก

ตอนนี้ หากเราต้องการรันโปรแกรมใหม่ในกระบวนการวางไข่ เราจำเป็นต้องเรียกการเรียกของระบบ exec โดยระบุเป็นอาร์กิวเมนต์ในการเรียกชื่อของไฟล์ที่มีโปรแกรมปฏิบัติการใหม่ และอาจเป็นสตริงข้อความหนึ่งหรือหลายสตริงที่จะ จะถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังโปรแกรมฟังก์ชันหลักใหม่ การดำเนินการเรียกระบบ exec จะทำให้โปรแกรมปฏิบัติการใหม่ถูกโหลดลงในพื้นที่ที่อยู่ของกระบวนการที่สร้างและเรียกใช้จากที่อยู่ที่สอดคล้องกับอินพุตไปยังฟังก์ชันหลัก กล่าวอีกนัยหนึ่ง สิ่งนี้ทำให้เซ็กเมนต์โปรแกรมปัจจุบันและเซ็กเมนต์ข้อมูลปัจจุบันที่สืบทอดเมื่อมีการเรียก fork ถูกแทนที่ด้วยเซ็กเมนต์ใหม่ที่สอดคล้องกันที่ระบุในไฟล์ ส่วนก่อนหน้าจะหายไป นี่เป็นวิธีการที่มีประสิทธิภาพในการเปลี่ยนแปลงโปรแกรมที่กระบวนการกำลังดำเนินการ แต่ไม่ใช่ตัวกระบวนการเอง ไฟล์ที่เปิดอยู่แล้วก่อนที่จะดำเนินการ exec primitive จะยังคงเปิดอยู่หลังจากดำเนินการแล้ว

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

ถ้า (ทางแยก ()==(0) รอ (0); /* กระบวนการหลัก */

อื่น execl("ls", "เป็น", 0); /* กระบวนการสร้าง */

ดังนั้น จากมุมมองเชิงปฏิบัติ กระบวนการใน UNIX จึงเป็นอ็อบเจ็กต์ที่สร้างขึ้นโดยเป็นผลมาจากการเรียกใช้ฟังก์ชัน fork() แต่ละกระบวนการ ยกเว้นกระบวนการเริ่มต้น (null) จะเกิดขึ้นอันเป็นผลมาจากกระบวนการอื่นที่เรียกใช้การดำเนินการ fork() แต่ละกระบวนการมีพาเรนต์เดียว แต่สามารถวางไข่ได้หลายกระบวนการ กระบวนการเริ่มต้น (ศูนย์) เป็นกระบวนการพิเศษที่สร้างขึ้นจากการบูตระบบ หลังจากที่กระบวนการใหม่ที่มี ID 1 เกิดขึ้น กระบวนการที่เป็นศูนย์จะกลายเป็นกระบวนการสลับและใช้กลไกหน่วยความจำเสมือน กระบวนการที่มี ID 1 หรือที่เรียกว่า init ถือเป็นบรรพบุรุษของกระบวนการอื่นๆ ทั้งหมดบนระบบ และเชื่อมโยงกับแต่ละกระบวนการในลักษณะพิเศษ

จะมีการหารือเกี่ยวกับคำสั่งภายในที่ได้รับการสนับสนุนโดยล่าม Cmd.exe และคำสั่งภายนอกที่ใช้บ่อยที่สุด (ยูทิลิตี้บรรทัดคำสั่ง) มีการอธิบายกลไกสำหรับการเปลี่ยนเส้นทาง I/O การวางท่อ และการดำเนินการคำสั่งแบบมีเงื่อนไข มีตัวอย่างคำสั่งสำหรับการทำงานกับระบบไฟล์

ใน Windows เช่นเดียวกับในระบบปฏิบัติการอื่น คำสั่งแบบโต้ตอบ (พิมพ์จากแป้นพิมพ์และดำเนินการทันที) จะดำเนินการโดยใช้สิ่งที่เรียกว่าตัวแปลคำสั่งหรือที่เรียกว่าตัวประมวลผลคำสั่งหรือเชลล์คำสั่ง เริ่มต้นด้วยเวอร์ชันของ Windows NT ระบบปฏิบัติการได้ใช้ตัวแปลคำสั่ง Cmd.exe ซึ่งมีความสามารถขั้นสูงกว่ามาก

1.2.1 การเปิดตัวเชลล์

บน Windows NT/2000/XP ไฟล์ Cmd.exe รวมถึงไฟล์ปฏิบัติการอื่นๆ ที่สอดคล้องกับคำสั่งระบบปฏิบัติการภายนอก จะอยู่ในไดเร็กทอรี %SystemRoot%\SYSTEM32 (ค่าของตัวแปรสภาพแวดล้อม %SystemRoot% คือระบบ Windows ไดเร็กทอรี โดยปกติคือ C:\Windows หรือ C :\WinNT) หากต้องการเริ่มตัวแปลคำสั่ง (เปิดเซสชันบรรทัดคำสั่งใหม่) คุณสามารถเลือกเรียกใช้... จากเมนูเริ่ม ป้อนชื่อไฟล์ Cmd.exe แล้วคลิกตกลง เป็นผลให้หน้าต่างใหม่จะเปิดขึ้น (ดูรูปที่ 1) ซึ่งคุณสามารถเรียกใช้คำสั่งและดูผลลัพธ์ของการทำงานได้

ข้าว. 1 - หน้าต่างคำสั่งล่าม Cmd.exe ใน Windows XP

1.2.2 การตั้งค่าพารามิเตอร์สำหรับหน้าต่างคำสั่งล่าม

ยูทิลิตีบรรทัดคำสั่งซึ่งมาพร้อมกับแอปพลิเคชัน Windows มาตรฐาน มีตัวเลือกและการตั้งค่าของตัวเอง วิธีหนึ่งในการดูตัวเลือกเหล่านี้คือการใช้รายการคุณสมบัติในเมนูควบคุมของหน้าต่าง (คลิกขวาที่ชื่อหน้าต่าง) ในหน้าต่างคุณสมบัติ (ดูรูปที่ 2) จะมีสี่แท็บที่มีตัวเลือกให้เลือก: ทั่วไป แบบอักษร เค้าโครง และสี

ข้าว. 2 – หน้าต่างสำหรับตั้งค่าคุณสมบัติล่าม

1.2.3. ทีมงานภายในและภายนอก โครงสร้างคำสั่ง

คำสั่งบางคำสั่งได้รับการยอมรับและดำเนินการโดยตรงโดยเชลล์เอง - คำสั่งเหล่านี้เรียกว่า ภายใน(เช่น COPY หรือ DIR) คำสั่ง OS อื่นๆ เป็นโปรแกรมที่แยกจากกัน ซึ่งตามค่าเริ่มต้นจะอยู่ในไดเร็กทอรีเดียวกันกับ Cmd.exe ซึ่ง Windows จะโหลดและดำเนินการในลักษณะเดียวกับโปรแกรมอื่นๆ คำสั่งดังกล่าวเรียกว่า ภายนอก(เช่น MORE หรือ XCOPY)

ลองดูโครงสร้างของบรรทัดคำสั่งและหลักการทำงานกับมัน เพื่อดำเนินการคำสั่ง หลังจากพรอมต์บรรทัดคำสั่ง (เช่น C:\>) ให้ป้อนชื่อของคำสั่งนี้ (ตัวพิมพ์เล็กและใหญ่) พารามิเตอร์และสวิตช์ (หากจำเป็น) แล้วกดปุ่ม - ตัวอย่างเช่น:

C:\>คัดลอก C:\myfile.txt A:\ /V

ชื่อคำสั่งที่นี่คือ COPY พารามิเตอร์คือ C:\myfile.txt และ A:\ และคีย์คือ /V โปรดทราบว่าในบางคำสั่ง สวิตช์อาจไม่ได้เริ่มต้นด้วยสัญลักษณ์ / แต่เริ่มต้นด้วยสัญลักษณ์ – (ลบ) เช่น -V

คำสั่ง Windows หลายคำสั่งมีพารามิเตอร์และสวิตช์เพิ่มเติมจำนวนมาก ซึ่งมักจดจำได้ยาก คำสั่งส่วนใหญ่มีความช่วยเหลือในตัวที่อธิบายวัตถุประสงค์และไวยากรณ์ของคำสั่งโดยย่อ คุณสามารถเข้าถึงความช่วยเหลือนี้ได้โดยการป้อนคำสั่งด้วยสวิตช์ /? ตัวอย่างเช่น หากเรารันคำสั่ง ATTRIB /? จากนั้นในหน้าต่าง MS-DOS เราจะเห็นข้อความต่อไปนี้:

แสดงและเปลี่ยนคุณสมบัติของไฟล์

ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[ไดรฟ์:][เส้นทาง]ชื่อไฟล์]

การตั้งค่าแอตทริบิวต์

การลบแอตทริบิวต์

R คุณลักษณะแบบอ่านอย่างเดียว

คุณสมบัติ "เก็บถาวร"

S คุณลักษณะ "ระบบ"

H คุณลักษณะที่ซ่อนอยู่

/S ประมวลผลไฟล์ในโฟลเดอร์ย่อยทั้งหมดของเส้นทางที่ระบุ

สำหรับคำสั่งบางคำสั่ง ข้อความช่วยเหลือในตัวอาจมีขนาดค่อนข้างใหญ่และอาจไม่พอดีกับหน้าจอเดียว ในกรณีนี้ วิธีใช้สามารถแสดงตามลำดับบนหน้าจอเดียวโดยใช้คำสั่ง MORE และสัญลักษณ์ piping | ตัวอย่างเช่น:

ในกรณีนี้ หลังจากกรอกหน้าจอถัดไป ผลลัพธ์วิธีใช้จะถูกขัดจังหวะจนกว่าจะกดปุ่มใดๆ นอกจากนี้ ด้วยการใช้สัญลักษณ์การเปลี่ยนเส้นทางเอาต์พุต > และ >> คุณสามารถกำหนดทิศทางข้อความที่แสดงบนหน้าจอไปยังไฟล์ข้อความเพื่อดูในภายหลังได้ ตัวอย่างเช่น หากต้องการส่งข้อความช่วยเหลือสำหรับคำสั่ง XCOPY ไปยังไฟล์ข้อความ xcopy.txt ให้ใช้คำสั่งต่อไปนี้:

เอ็กซ์โคปี /? > XCOPY.TXT

ความคิดเห็น- แทนที่จะระบุชื่อไฟล์ คุณสามารถระบุการกำหนดอุปกรณ์คอมพิวเตอร์ของคุณได้ รายการต่อไปนี้ได้รับการสนับสนุนบน Windows ชื่ออุปกรณ์: PRN (เครื่องพิมพ์), CON (เทอร์มินัล: แป้นพิมพ์สำหรับอินพุต, มอนิเตอร์สำหรับเอาต์พุต), NUL (อุปกรณ์ว่าง, การดำเนินการ I/O ทั้งหมดบนอุปกรณ์จะถูกละเว้น)