Tuesday, April 14, 2009

ไกลปืนเที่ยง: FreeBSD --> Shell

เรื่องของ FreeBSD ตั้งแต่ง่ายๆไป จนถึงการใช้งาน FreeBSD เป็นฐานรองรับ hardware เพื่อทำหน้าที่เป็น servers และงานอื่นๆในที่สุด ใจความในตอนนี้ ถอดจาก FreeBSD Handbook บทที่ ๓ Shell โดยแต่งเรื่องราวเสริมขึ้นบ้าง
วันนี้, ๒๕ เม.ย ๒๕๕๒ , เพิ่มส่วนของ chsh ให้



Shell

งานประจำวันทั่วไปใน FreeBSD กระทำผ่าน คำสั่งทางแป้นพิมพ์ ที่เรียกว่า shell งานหลักของ shell คือรับคำสั่งทางช่องทางรับ แล้วก็ดำเนินงานตามคำสั่งนั้น shell ทั้งหลาย มีฟังก์ชั่นภายในที่ช่วยงานประจำวัน เช่น การจัดการแฟ้มเอกสาร การป้องกันการเขียนทับแฟ้มเอกสาร การแก้ไขคำสั่ง, ชุดคำสั่ง, และ ตัวแปรสภาพแวดล้อม FreeBSD ให้ชุดของ shell มากับระบบแล้ว เช่น sh หรือ Bourn shell, tcsh หรือ c shell ที่ได้รับการปรับปรุง shell อื่นๆอีกหลายตัว ท่านสามารถหาเอามาใช้ได้จาก ports เช่น z sh และ bash

แล้วท่านใช้ shell อะไรเป็นประจำ คำตอบ ก็ขึ้นอยู่กับว่า ท่านชอบของท่านอย่างไร ท่านก็ใช้อันนั้น ถ้าท่านเป็นคนเขียนโปรแกรมด้วย ภาษา C ท่านอาจจะชอบ shell ที่มีโครงสร้างคล้ายๆกัน เช่น tcsh ถ้าท่านมาจาก Linux หรือใหม่กับ unix ท่านอาจจะชอบ bash ก็ได้ ประเด็นอยู่ที่ว่า แต่ละ shell มีคุณสมบัติโดดเด่นจำเพาะตัว ที่อาจเหมาะ หรือ ไม่เหมาะกับสภาพแวดล้อมการทำงานของท่าน

หนึ่งในคุณสมบัติทั่วๆไปของ shell ก็คือ การช่วยเติมชื่อแฟ้มให้เต็ม โดยการเขียนชื่อแฟ้มด้วย ๓ หรือ ๔ ตัวแรก ท่านสามารถเขียนส่วนที่เหลือได้โดยง่าย เพียงแค่ กัดปุ่ม Tab ตัวอย่างเช่น ท่านมีแฟ้ม ๒ แฟ้มชื่อ foobar และ foo.bar ต้องการจะลบแฟ้ม foo.bar ดังนั้น ท่านเพียงแต่พิมพ์ที่แป้นพิมพ์ ดังนี้
rm fo[Tab] . [Tab]
shell ก็จะพิมพ์ออกมาให้เห็นดังนี้ rm foo[BEEP].bar เมื่อ [BEEP] คือเสียงจาก console ซึ่ง shell แจ้งให้เราทราบว่า ไม่สามารถเลือกชื่อแฟ้มได้ เพราะมีอยู่ ๒ แฟ้มคือ foobar และ foo.bar ที่เริ่มต้นด้วย fo แต่สามารถทำได้แค่ foo เท่านั้น ซึ่ง ถ้าเราพิมพ์ . ลงไป แล้วตามด้วยปุ่ม Tab อีกครั้งหนึ่ง shell ก็สามารถบอกได้ว่า ชื่อแฟ้มที่ท่านต้องการ คือ foo.bar และแสดงผลให้ท่านทราบทางช่องทางแสดงผล ทันที

อีกตัวอย่างหนึ่ง ของการใช้งาน shell คือการใช้ environment variable ตัวแปรนี้ คือ คู่ของ ตัวแปร/ค่า ที่เก็บไว้ในพื้นที่ของ shell พื้นที่นี้ สามารถอ่านได้จากโปรแกรมใดใด ที่ shell เรียกใช้ และมีค่าตั้งต้นต่างๆ ของโปรแกรม ตารางนี้ แสดงบางส่วนของตัวแปร และความหมายที่มี
ตัวแปร                   คำบรรยาย หรือ ความหมาย

USER ชื่อ ของผู้ที่ เข้ามาใช้งานในขณะนี้
PATH ชื่อของสารบบ ที่แยกกันด้วย : ที่ใช้สำหรับค้นหาโปรแกรม
DISPLAY ชื่อของ network ที่ภาคแสดงผลของ X11 ใช้งาน ถ้ามี
SHELL shell ปัจจุบัน
TERM ชื่อ ของ terminal ที่ผู้ใช้ ใช้งาน มีไว้สำหรับคำนวณหา ความสามารถของ terminal
TERMCAP ช่องทางในฐานข้อมูลของ การหา Esc code ของ terminal เพื่อทำฟังก์ชั่นบางอย่าง
OSTYPE ชนิดของระบบปฏิบัติการ , ตัวอย่างเช่น FreeBSD.
MACHTYPE สถาปัตยกรรม ของ หน่วยประมวลผลกลาง ที่ระบบกำลังทำงานอยู่
EDITOR ชื่อของ editor ที่ผู้ใช้ ใช้งาน.
PAGER ชื่อของ pager ที่ผู้ใช้ ใช้งาน
MANPATH รายชื่อของ สารบบ ที่แยกกันด้วย : เพื่อใช้สำหรับค้นหา หน้าช่วยเหลือ

การกำหนดค่าของตัวแปร environment นั้นต่างกันไปในแต่ละ shell ตัวอย่างเช่น ใน shell ที่ทำงานคล้ายกับภาษา C เช่น tcsh และ csh ท่านสามารถใช้คำสั่ง setenv เพื่อกำนหนดค่าตัวแปร แต่ภายใต้ Bourne shell เช่น sh และ bash ท่านต้องใช้ export เพื่อกำหนดค่าตัวแปร ตัวอย่างเช่น เพื่อกำหนดค่าตัวแปรของ EDITOR ใน tcsh และ csh ท่านต้องใช้คำสั่งผ่านแป้นพิมพ์ดังนี้ ในกรณี ที่ท่านประสงค์จะกำหนดใหม่ ให้มีค่าเป็น /usr/local/bin/emacs
% setenv EDITOR /usr/local/bin/emacs

และ ภายใต้ Bourne shell
% export EDITOR="/usr/local/bin/emacs"

shell ถือเอาว่า อักขระหลายตัว เป็น meta-characters ซึ่งแทนข้อมูลพิเศษบางตัว อย่างที่เรารู้ๆก็ได้แก่ * ซึ่งแทนจำนวนอักขระตั้งแต่ ๐ หรือมากกว่า ในชื่อแฟ้ม แลส่วนมากแล้ว ใช้กับชื่อแฟ้มนั่นแหละ ยกตัวอย่างเช่น ท่านเพียงแค่พิมพ์ * ลงไป ก็เท่ากับสั่ง ls เพราะ shell จะนำแฟ้มทุกแฟ้ม มา และแสดงทางช่องทางแสดงผล

เพื่อป้องกัน shell จากการ แทนค่า เราสามารถทำให้ อักขระพิเศษ เหล่านี้ หนีออก, escaped, ไปได้ ด้วยการใช้ \ นำหน้าอักขระพิเศษ เหล่านั้น ลองดูซิ สั่ง echo $TERM ยังผลให้ทราบว่า terminal ของท่าน กำหนดค่าตั้งต้นต่างๆไว้เช่นไร แต่ขณะเดียวกัน ถ้าท่านสั่ง echo \$TERM ท่านก็จะเห็นตัวหนังสือ $TERM ตรงๆจริงๆ


การเปลี่ยน shell
วิธีง่ายๆ คือใช้คำสั่ง chsh การวิ่ง chsh จะนำท่านเข้าสู่ editor ที่ถูกระบุโดยตัวแปรสิ่งแวดล้อม $EDITOR ซึ่งถ้าเราไม่ได้กำหนดไว้ เขาก็จะกำหนดให้เป็น vi โดยปริยาย แล้วก็เปลี่ยนบรรทัด Shell: เอาตามใจ

คำสั่งนี้มี option ให้ท่านสามารถกำหนด shell ที่ท่านต้องการได้โดยตรง โดยมิพักต้องเข้าไปใช้บริการของ $EDITOR แต่อย่างใด ง่ายๆ ตรงๆ
# chsh -s shell

เมื่อ shell คือ shell ยอดนิยมของท่าน ใจความจาก handbook จบตรงนี้ และก็ขอจบไว้สำหรับเรื่อง shell เพียงเท่านี้ด้วยเช่นกัน

4 comments:

Chaiyut said...

แวะเข้ามาอ่านครับ ก็เลยแวะเข้ามาทักทายด้วยครับ :)

มะขาม said...

ขอบคุณมากครับ
ยังขาดส่วน เปลี่ยน shell ซึ่งตอนอยู่ประตูป่า เอาขึ้นไม่ได้ เพราะเข้าไม่ได้ งงงอยู่เนี่ย
อีกครั้ง ขอบขอบคุณมากมากด้วยใจจริง

dekdar said...

.ทิ้งกันละน่าดู..

แวะมาตามบทความ อิอิ ขอบคุณคับลุง

มะขาม said...

ขอบใจจริงๆครับ


View My Stats