เชลล์
เชลล์ (อังกฤษ: shell) ในทางคอมพิวเตอร์ คือส่วนติดต่อผู้ใช้หรือตัวแปลภาษาคำสั่งที่รับคำสั่งจากผู้ใช้หรือจากสคริปต์ แล้วสั่งให้ระบบปฏิบัติการหรือโปรแกรมอื่นทำงานต่อไป ในระบบแบบยูนิกซ์และระบบที่คล้ายยูนิกซ์ คำว่าเชลล์มักหมายถึงโปรแกรมบรรทัดคำสั่ง เช่น Bash, zsh, ksh หรือ csh ส่วนในระบบไมโครซอฟท์วินโดวส์ ตัวอย่างเชลล์แบบบรรทัดคำสั่งได้แก่ Command Prompt และ PowerShell ขณะที่คำว่าเชลล์ในอีกความหมายหนึ่งอาจหมายถึงส่วนติดต่อกราฟิกของระบบ เช่น Windows shell, Finder ใน macOS หรือ GNOME Shell[1][2][3]
เชลล์แตกต่างจากเคอร์เนล ซึ่งเป็นแกนกลางของระบบปฏิบัติการที่จัดการทรัพยากรของเครื่อง เช่น กระบวนการ หน่วยความจำ ระบบไฟล์ และอุปกรณ์ เชลล์โดยทั่วไปทำงานในพื้นที่ผู้ใช้ และเรียกใช้โปรแกรมหรือบริการของระบบผ่านกลไกของระบบปฏิบัติการ[4] เชลล์ยังแตกต่างจากเทอร์มินัลหรือโปรแกรมจำลองเทอร์มินัล ซึ่งเป็นหน้าต่างหรืออุปกรณ์ที่รับแป้นพิมพ์และแสดงผลข้อความ แต่ภายในเทอร์มินัลอาจเรียกใช้เชลล์ได้หลายชนิด เช่น Bash, zsh, fish หรือ พาวเวอร์เชลล์
ความหมาย
[แก้]คำว่า “เชลล์” มีที่มาจากแนวคิดว่าโปรแกรมชนิดนี้เป็นชั้นนอกที่ห่อหุ้มบริการของระบบปฏิบัติการไว้ และให้ผู้ใช้สั่งงานระบบได้โดยไม่ต้องติดต่อกับเคอร์เนลโดยตรง ในมาตรฐาน POSIX เชลล์ถูกอธิบายว่าเป็น “ตัวแปลภาษาคำสั่ง” (command language interpreter) ซึ่งอ่านคำสั่งจากบรรทัดคำสั่ง จากสตริง หรือจากไฟล์ แล้วตีความตามภาษาของเชลล์[1][5]
ในความหมายกว้าง เชลล์เป็นส่วนติดต่อผู้ใช้ของระบบคอมพิวเตอร์ อาจเป็นได้ทั้งเชลล์แบบบรรทัดคำสั่งและเชลล์แบบกราฟิก ส่วนในความหมายแคบ โดยเฉพาะในบริบทของยูนิกซ์และลินุกซ์ เชลล์มักหมายถึงโปรแกรมที่ผู้ใช้พิมพ์คำสั่ง เช่น cd, ls, grep หรือรันสคริปต์เพื่อทำงานอัตโนมัติ
ความสัมพันธ์กับเคอร์เนล เทอร์มินัล และเคอร์เนลของ Jupyter
[แก้]เชลล์มักถูกสับสนกับเคอร์เนลและเทอร์มินัล เพราะทั้งสามเกี่ยวข้องกับการสั่งงานคอมพิวเตอร์ แต่ทำหน้าที่คนละระดับ
- เคอร์เนล คือแกนกลางของระบบปฏิบัติการ ทำหน้าที่จัดการทรัพยากรพื้นฐานของเครื่อง เช่น หน่วยความจำ กระบวนการ ระบบไฟล์ และอุปกรณ์
- เชลล์ คือโปรแกรมที่รับคำสั่งจากผู้ใช้หรือสคริปต์ แล้วเรียกใช้โปรแกรมอื่นหรือบริการของระบบปฏิบัติการ
- เทอร์มินัล หรือ โปรแกรมจำลองเทอร์มินัล คือหน้าต่างหรือสภาพแวดล้อมที่ให้ผู้ใช้พิมพ์คำสั่งและดูผลลัพธ์ โดยภายในเทอร์มินัลอาจรันเชลล์ชนิดใดก็ได้
ตัวอย่างเช่น เมื่อผู้ใช้เปิดแอปพลิเคชัน Terminal บนลินุกซ์หรือ macOS แอปพลิเคชันนั้นเป็นเทอร์มินัล ส่วนโปรแกรมที่รับคำสั่งภายในอาจเป็น Bash หรือ zsh ขณะที่เคอร์เนลของระบบปฏิบัติการทำหน้าที่จัดการการเรียกใช้โปรแกรมและทรัพยากรเบื้องหลัง
คำว่า “เคอร์เนล” ยังใช้ในบริบทอื่น เช่น Jupyter kernel ซึ่งหมายถึงโปรแกรมเฉพาะภาษาที่รันและตรวจสอบโค้ดของผู้ใช้ใน Jupyter ไม่ใช่เคอร์เนลของระบบปฏิบัติการโดยตรง[6] เช่น IPython kernel ใช้รันโค้ด Python ใน Jupyter Notebook หรือ JupyterLab
ประเภท
[แก้]เชลล์แบบบรรทัดคำสั่ง
[แก้]เชลล์แบบบรรทัดคำสั่ง (command-line shell) รับคำสั่งเป็นข้อความ ผู้ใช้พิมพ์คำสั่งและอาร์กิวเมนต์ลงไป แล้วเชลล์จะแปลคำสั่ง เรียกโปรแกรมที่เกี่ยวข้อง จัดการการเปลี่ยนเส้นทางข้อมูล และส่งผลลัพธ์กลับมา เชลล์ชนิดนี้เหมาะกับงานอัตโนมัติ งานดูแลระบบ งานที่ต้องทำซ้ำ และงานที่ต้องประสานโปรแกรมหลายตัวเข้าด้วยกัน
เชลล์แบบบรรทัดคำสั่งมักทำหน้าที่เป็นทั้งตัวแปลคำสั่งและภาษาสคริปต์ คู่มือ GNU Bash อธิบายว่าเชลล์ของยูนิกซ์เป็นทั้งตัวแปลคำสั่งและภาษาโปรแกรม ผู้ใช้สามารถรวมคำสั่งหลายคำสั่งไว้ในไฟล์ แล้วใช้ไฟล์นั้นเป็นคำสั่งใหม่ได้[2] ตัวอย่างเชลล์ชนิดนี้ ได้แก่ sh, Bash, ksh, csh, zsh, fish, Command Prompt และ PowerShell
เชลล์แบบกราฟิก
[แก้]เชลล์แบบกราฟิก (graphical shell) ให้ผู้ใช้สั่งงานระบบผ่านหน้าต่าง ไอคอน เมนู แถบงาน เดสก์ท็อป หรือส่วนติดต่อกราฟิกอื่น แทนการพิมพ์คำสั่งเป็นข้อความ ตัวอย่างเช่น Windows shell ซึ่งสัมพันธ์กับ File Explorer และเดสก์ท็อปของ Windows, Finder ใน macOS ซึ่งใช้ดูและจัดการไฟล์และโฟลเดอร์[7] และ GNOME Shell ซึ่งเป็นส่วนติดต่อหลักของสภาพแวดล้อมเดสก์ท็อป GNOME[8]
เชลล์แบบกราฟิกมักเหมาะกับผู้ใช้ทั่วไปและงานที่ต้องอาศัยการมองเห็น เช่น การจัดการไฟล์ การเปิดโปรแกรม การลากวาง และการตั้งค่าระบบ อย่างไรก็ตาม เชลล์แบบกราฟิกและเชลล์แบบบรรทัดคำสั่งไม่ได้แทนกันทั้งหมด ในระบบเดียวกันผู้ใช้มักใช้ทั้งสองแบบควบคู่กัน
การทำงานของเชลล์แบบบรรทัดคำสั่ง
[แก้]เมื่อผู้ใช้พิมพ์คำสั่ง เชลล์แบบบรรทัดคำสั่งมักทำงานเป็นลำดับโดยย่อดังนี้
- อ่านคำสั่งจากผู้ใช้หรือจากสคริปต์
- แยกคำสั่ง อาร์กิวเมนต์ ตัวแปร เครื่องหมายคำพูด และตัวดำเนินการ
- ขยายรูปแบบ เช่น ตัวแปร สัญลักษณ์แทนชื่อไฟล์ หรือคำสั่งย่อย
- จัดการการเปลี่ยนเส้นทางข้อมูล เช่น อินพุต เอาต์พุต และท่อส่งข้อมูล
- เรียกใช้คำสั่งภายในเชลล์หรือโปรแกรมภายนอก
- ส่งค่าสถานะการจบงานและผลลัพธ์กลับให้ผู้ใช้หรือสคริปต์
ตัวอย่างในเชลล์แบบ POSIX หรือ Bash:
grep "error" server.log | sort | uniq -c
คำสั่งนี้อ่านไฟล์ server.log เลือกบรรทัดที่มีคำว่า error จัดเรียงผลลัพธ์ แล้วนับบรรทัดที่ซ้ำกัน ตัวอย่างนี้แสดงแนวคิดสำคัญของเชลล์ยูนิกซ์ คือการประกอบโปรแกรมเล็กหลายตัวเข้าด้วยกันผ่านท่อส่งข้อมูล
เชลล์สคริปต์
[แก้]เชลล์สคริปต์คือไฟล์ข้อความที่มีคำสั่งของเชลล์หลายบรรทัด ใช้ทำงานซ้ำ ๆ โดยอัตโนมัติ เช่น สำรองข้อมูล จัดการไฟล์ ติดตั้งโปรแกรม เรียกโปรแกรมหลายตัวต่อเนื่อง หรือดูแลระบบเซิร์ฟเวอร์ เชลล์สคริปต์อาจใช้ตัวแปร เงื่อนไข วนซ้ำ ฟังก์ชัน และการรับค่าจากผู้ใช้ได้
ตัวอย่างเชลล์สคริปต์แบบ POSIX:
#!/bin/sh
for file in *.txt
do
echo "พบไฟล์: $file"
done
ในระบบวินโดวส์ PowerShell ก็ใช้เขียนสคริปต์ได้เช่นกัน โดย Microsoft อธิบายว่า PowerShell เป็นทั้ง command-line shell, scripting language และระบบสำหรับการทำงานอัตโนมัติ/จัดการคอนฟิกูเรชัน โดยมีจุดเด่นคือรับและส่งออกข้อมูลเป็นออบเจกต์ .NET แทนการประมวลผลข้อความล้วนแบบเชลล์ดั้งเดิมหลายชนิด[3]
ตัวอย่างเชลล์
[แก้]ระบบยูนิกซ์และระบบที่คล้ายยูนิกซ์
[แก้]- Bourne shell หรือ
shเป็นเชลล์สำคัญในประวัติศาสตร์ยูนิกซ์ และเป็นฐานของภาษาเชลล์แบบ POSIX - Bash หรือ Bourne-Again SHell เป็นเชลล์ของโครงการ GNU และเป็นเชลล์ที่ใช้แพร่หลายในลินุกซ์หลายระบบ[2]
- KornShell หรือ
kshเป็นเชลล์ที่พัฒนาต่อยอดจาก Bourne shell พร้อมความสามารถเชิงสคริปต์เพิ่มเติม - C shell หรือ
cshใช้ไวยากรณ์ที่ได้รับอิทธิพลบางส่วนจากภาษา C - zsh เป็นเชลล์ที่มีความสามารถด้านการเติมคำและการปรับแต่งสูง
- fish เป็นเชลล์สมัยใหม่ที่เน้นความสะดวกในการใช้งานแบบโต้ตอบ
ระบบไมโครซอฟท์วินโดวส์
[แก้]- COMMAND.COM เป็น command interpreter ของ MS-DOS และ Windows รุ่นเก่า
- Command Prompt หรือ
cmd.exeเป็นเชลล์บรรทัดคำสั่งของ Windows ในตระกูล Windows NT - PowerShell เป็นเชลล์และภาษาสคริปต์ของ Microsoft ที่สร้างบน .NET ใช้ได้ทั้งบน Windows, macOS และ Linux ในรุ่นใหม่[3]
- Windows shell ในความหมายแบบกราฟิกสัมพันธ์กับเดสก์ท็อป แถบงาน Start menu และ File Explorer ของ Windows
เชลล์แบบกราฟิกและเดสก์ท็อป
[แก้]- Finder เป็นส่วนติดต่อสำหรับดูและจัดการไฟล์ โฟลเดอร์ และตำแหน่งต่าง ๆ ใน macOS[7]
- GNOME Shell เป็นส่วนติดต่อหลักของ GNOME 3 และรุ่นต่อมา[8]
- KDE Plasma เป็นสภาพแวดล้อมเดสก์ท็อปที่มีเชลล์กราฟิกสำหรับระบบลินุกซ์และยูนิกซ์คล้ายกัน
- CDE หรือ Common Desktop Environment เป็นสภาพแวดล้อมเดสก์ท็อปเชิงประวัติศาสตร์ในระบบยูนิกซ์หลายระบบ
เชลล์ของภาษาโปรแกรมและสภาพแวดล้อมโต้ตอบ
[แก้]คำว่าเชลล์ยังใช้กับสภาพแวดล้อมโต้ตอบของภาษาโปรแกรม เช่น Python interactive shell, IPython, Ruby IRB หรือ REPL ของภาษาอื่น ๆ เชลล์ประเภทนี้ไม่ได้เป็นเชลล์ของระบบปฏิบัติการโดยตรง แต่ทำหน้าที่คล้ายกันในระดับภาษาโปรแกรม คือรับคำสั่งหรือโค้ดทีละบรรทัด ตีความ แล้วแสดงผลลัพธ์
ประวัติ
[แก้]แนวคิดเชลล์มีรากจากระบบปฏิบัติการยุคแรกที่แยกชั้นผู้ใช้กับแกนระบบออกจากกัน ในระบบยูนิกซ์ เชลล์เป็นองค์ประกอบสำคัญที่ให้ผู้ใช้เรียกใช้โปรแกรมและรวมโปรแกรมเข้าด้วยกันผ่านท่อส่งข้อมูลและการเปลี่ยนเส้นทางข้อมูล Bourne shell ซึ่งพัฒนาโดย Stephen Bourne ที่ Bell Labs มีอิทธิพลสูงต่อเชลล์รุ่นหลังและมาตรฐาน POSIX
ภายหลังมีเชลล์จำนวนมากเกิดขึ้นเพื่อตอบโจทย์ที่ต่างกัน เช่น C shell เน้นไวยากรณ์ที่คล้ายภาษา C และการใช้งานแบบโต้ตอบ, KornShell เพิ่มคุณสมบัติด้านสคริปต์และการทำงานกับคำสั่ง, Bash พัฒนาเป็นเชลล์ของโครงการ GNU และรวมคุณสมบัติจาก Bourne shell, KornShell และ C shell เข้าด้วยกัน[2] ส่วน PowerShell เกิดขึ้นในระบบวินโดวส์เพื่อตอบโจทย์การดูแลระบบและระบบอัตโนมัติแบบออบเจกต์[3]
เชลล์แบบกราฟิกพัฒนาควบคู่กับส่วนติดต่อกราฟิกของระบบปฏิบัติการ เช่น Finder ใน Macintosh/macOS, Program Manager และต่อมา Windows Explorer/File Explorer ใน Windows รวมถึงเดสก์ท็อปเชลล์ในระบบลินุกซ์ เช่น GNOME Shell และ KDE Plasma
ความปลอดภัย
[แก้]เชลล์สามารถเรียกโปรแกรม จัดการไฟล์ และควบคุมระบบได้ จึงต้องใช้ด้วยความระมัดระวัง[9] คำสั่งผิดพลาดอาจลบไฟล์จำนวนมาก เขียนทับข้อมูล หรือเปิดช่องให้รันโค้ดที่ไม่ปลอดภัยได้ ปัญหาด้านความปลอดภัยที่เกี่ยวข้องกับเชลล์ที่พบบ่อย เช่น command injection, การรันสคริปต์จากแหล่งไม่น่าเชื่อถือ, การใช้สิทธิผู้ดูแลระบบโดยไม่จำเป็น และการจัดการตัวแปรหรือเครื่องหมายคำพูดผิดพลาดในสคริปต์[10][11][12] ในเชลล์สคริปต์ ผู้เขียนควรตรวจสอบอินพุต ระวังการขยายตัวแปรและ wildcard ใช้เครื่องหมายคำพูดอย่างเหมาะสม และหลีกเลี่ยงการคัดลอกคำสั่งที่ไม่เข้าใจมารันโดยตรง โดยเฉพาะคำสั่งที่ใช้สิทธิผู้ดูแลระบบหรือดาวน์โหลดสคริปต์จากอินเทอร์เน็ตมารันทันที[13][14]
ดูเพิ่ม
[แก้]อ้างอิง
[แก้]- 1 2 "Shell Command Language". The Open Group. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 3 4 "Bash Reference Manual". GNU Project. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 3 4 "What is PowerShell?". Microsoft Learn. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "The Linux kernel user-space API guide". The Linux Kernel documentation. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "sh — Shell Command Language". The Open Group. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Kernels". Project Jupyter. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 "Use the Finder on Mac". Apple Support. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 "GNOME Shell, next generation desktop shell". GNOME Project. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Bash Reference Manual". GNU. Free Software Foundation. สืบค้นเมื่อ 8 กรกฎาคม 2026.
{{cite web}}: CS1 maint: date auto-translated (ลิงก์) - ↑ "Command Injection". OWASP. Open Worldwide Application Security Project. สืบค้นเมื่อ 8 กรกฎาคม 2026.
{{cite web}}: CS1 maint: date auto-translated (ลิงก์) - ↑ "OS Command Injection Defense Cheat Sheet". OWASP Cheat Sheet Series. Open Worldwide Application Security Project. สืบค้นเมื่อ 8 กรกฎาคม 2026.
{{cite web}}: CS1 maint: date auto-translated (ลิงก์) - ↑ "least privilege". Computer Security Resource Center. National Institute of Standards and Technology. สืบค้นเมื่อ 8 กรกฎาคม 2026.
{{cite web}}: CS1 maint: date auto-translated (ลิงก์) - ↑ "Shell Style Guide". Google Style Guides. Google. สืบค้นเมื่อ 8 กรกฎาคม 2026.
{{cite web}}: CS1 maint: date auto-translated (ลิงก์) - ↑ "Shell Scripts: Stay Small & Simple". Google Testing Blog. Google. 11 ตุลาคม 2023. สืบค้นเมื่อ 8 กรกฎาคม 2026.
{{cite web}}: CS1 maint: date auto-translated (ลิงก์)
แหล่งข้อมูลอื่น
[แก้]- Shell Command Language จาก The Open Group
- Bash Reference Manual จาก GNU Project
- What is PowerShell? จาก Microsoft Learn