Showing posts with label unix. Show all posts
Showing posts with label unix. Show all posts

Thursday, October 13, 2011

Dennis M. Ritchie: C , unix

 ผู้ที่จับโครงการ multics มานั่ง strip down ให้ทำงานได้อย่างเดียว อยู่คนเดียว จนมีอีกคนมาแซวว่า ที่เขาเขียน มันไม่น่าจะใช่ multics แต่เป็น uniplex มากว่า จึงน่าจะเป็น unics มากกว่า ... ฯลฯ

ในความทรงจำ ก็ออกจะเลอะเลือนแล้วว่า ใครแซวใคร,

ขออภัย เพิ่งไปค้นมา Ken Thompson ครับ ที่นั่งทำ และ Brian W. Kernighan มาแซว และที่สุด เขาทั้งสาม ซึ่งรวม DMR คนนี้ มาช่วยกันเขียน และ เข็ญ ภาษา C ออกมา  , 

แต่ เขานั่นหละ ที่เขียนทั้ง C และ unix ขึ้นมา ได้ข่าวจาก osnews เขาบอกมาอีกที

ขอไว้อาลัยต่อการจากไปของเขา   อโหสิให้หมดแล้ว
สู่สุคติเถิด  DMR

มา แล้วก็กลับ เมื่อถึงเวลา
มะไฟ ฅนยาก
มะฃาม คินเดินดน


Friday, July 8, 2011

cloud เมฆ

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

ลองพิจารณาดู NFS ก็ได้ หรือกระทั่ง เครื่องพิมพ์ สำหรับหน่วยงานเล็กๆ ที่วางไว้ ๑ เครื่อง แล้วมีงานพิมพ์เข้ามาตลอด ชนิดที่ ไม่เกรงว่ากระดาษจะสิ้นเปลืองน่ะ นั่นก็ เป็นการ แบ่งปัน หรือ share กันเหมือนกันน่ะ

โปรแกรม ทำหน้าที่ประมวลผล

การประมวลผลแบบแบ่งปันทรัพยากรผ่านเครือข่าย แล้วมันคืออะไรอีก ก็เรียกทับไปว่า การคำนวณแบบคลาวด์ ก็น่าจะพอเพียงแล้ว เน้าะ

เป็นเพียงความเห็นต่อเรื่อง เรื่องของเมฆ ของ อาจารย์ นิตยา กาญจนะวรรณ ใน มติชนสุดสัปดาห์ ล่าสุด ๘-๑๕ กค ๒๕๕๔

multics ได้แนวคิดจากความอยากได้ของในลักษณะที่ว่า พอเราเสียบปลั้ก เข้าไปในเต้าเสียบตามผนังบ้าน เราก็ได้กระแสไฟฟ้ามาใช้งาน ฉันใด multics ก็ ต้องการในแบบนั้น เอาคอมพิวเตอร์ มาต่อกันเข้า ก็ใช้งานได้เลย ไม่ต้องยุ่งยาก

แต่ การจะทำอย่างนั้น มันยากมาก คน(บ้าสมัยนั้น) เลยมานั่ง แกะ ถอด สลัดคืน สาระที่ไม่จำเป็นออกไปเสีย  แกนั่งทำงานคนเดียว จนมีคน(บ้ากว่า) มาแซวว่า

นี่ นายนั่นนั่งเขียน multics อยู่คนเดียว
มันน่าจะเป็น uni-plex มากกว่า  multi-plex น่ะ
น่าจะเรียกว่าเขาเขียน  unics มากกว่า multics น่ะ

อะไรประมาณนี้ ซึ่งก็เพี้ยน หรือ กร่อนลงมาเป็น UNIX ทุกวันนี้แหละ

แต่ ที่สุด คน(บ้า)ทั้ง ๒ คน ก็มาร่วมกันเขียน ภาษา C เพื่อให้ unix มันใช้งานได้โดยไม่ขึ้นกับ hardware ว่างั้นเถอะ

แล้ว cloud computing มันแตกต่างตรงไหนจาก multics มั้ยเนี่ย

อุทานเสริม

multics -> unix
                       
                        -> 4.4 bsd operating system -> *BSD
                        -> minix (minimal unix) -> linux

directory hierachy ของ dos สมัยก่อน ที่สืบสานต่อมาจนทุกวันนี้ ก็ได้ไปจาก unix นั่นแหละ

Tuesday, April 12, 2011

gnupot โปรแกรมเอนกประสงค์ และ ฟรี

ผับที่แวะเวียนเข้าไป ยามว่าง
เขียนผ่านไปนานแล้ว จึงมาพบว่า สะกดคำผิดไป gnuplot ดันเขียนเป็น gnupot เออหนอ คนเราก็ยังงี้แหละ บอกแล้วไงว่า เขียนเอง อ่านเอง ตรวจเอง ยากที่จะหาที่ผิดพลาดเจอได้ง่ายๆ

ไม่เปลี่ยนมันหรอก ชื่อเรื่องน่ะ มาบอกกันในนี้เลยดีกว่า  บางที imperfect มันก็ make beauty ได้น่ะ

ไม่แก้ แต่ ขออภัยในความผิดพลาดครั้งนี้ด้วย แม้จะช้าไป ก็ ขออภัยด้วยครับ

๔ สิงหาคม ๒๕๕๔
๑๘.๐๐ นาฬิกาโดยประมาณ 

freshports เป็นหน้าเว้ป ที่ มะไฟ แวะเวียนเข้าไปดูอย่างสม่ำเสมอ เวลาว่างที่ ไม่มีอะไรทำ หรือ ยามมีปัญหา freshports ก็เป็นหนึ่งในที่ที่หาทางแก้ได้

เมื่อวานนี้ แวะเข้าไปเจอ maxima ให้สงสัยว่ามันคืออะไร
เพราะเห็นว่า FreeBSD ports เขายังมีระบบพีชคณิตให้อยู่ ซึ่งพีชคณิตนี้ เป้นการเรียนการสอนในระดับมัธยมศึกษาเท่านั้นเอง แม้ในระดับอุดมศึกษาจะมี ก็แต่ชั้นสูงเท่านั้นหรอก และมีไม่กี่แห่งด้วย จึงให้สงสัย

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

moebius curve ด้วย maxima
นอกเหนือไปจากนี้ ตัวที่ดำเนินงานของงาน ก็คือ clisp ซึ่งถ้าท่าน อืมม พี่พี่ซิ ยังงงงๆอยู่ว่ามันคืออะไร ก็ลองตัดตัว c ที่หมายถึง common หน้าคำ clisp ออก มันยิ่งทำให้มึนงงงไปกันใหญ่ เพราะเหลือเพียง LISP

แล้วอะไรคือ LISP อันนี้หากพิจารณาให้ดีจะพบสัจจธรรมด้วยตนเองเข้าจริงๆ เรียกว่า เป็น ปัจจัตตัง กล่าวคือ หากเราลำดับญาติ ของเราท่านขึ้นๆไป ทั้งสายคุณแม่ และสายคุณพ่อ ก็จะเห้น ลำดับของบุคคล ที่ประกอบกันขึ้นมาเป็นสาแหรกเครือญาติ อืมม น่าจะใช้คำผิดน่ะ แต่เอาเถอะ ไม่ใช่นักภาษา เอาเป้นว่า ได้ ลำดับเครือญาติ list of parents

อีกที อีกตัวอย่าง ถ้าเรามองลำดับเหตุการณ์ที่เกิดขึ้นกับตัวเราเอง แต่ละคน แต่ละคนไป (อันนี้ถ้าจะเขียนแบบมี ไม้ยมก คงต้องเขียนเป็น (แต่ละคน)ๆไป เน้าะ เพราะถ้าเขียน แต่ละคนๆไป ก็จะกลายเป็น แต่ละคนคนไป ซึ่งไม่ใช่สิ่งที่อยากเขียนออกมา) ก็พอมองออก เพราะง่ายดี ก็เรื่องของเรานี่หว่า แต่นั่นแหละ นั่นคือ ลำดับเหตุการณ์ list of events

อีกสักหนึ่งตัวอย่างของ LISP ถ้าไม่รู้จะเอาอะไรมาดี ก็ให้นึกถึงตัวเลขสองตัวท้ายรางวัลที่ออกทุกงวด สัก ๕ งวดสุดท้าย ของแต่ละปี ไล่ย้อนหลังไป ๗ ปีท้ายสุด แล้วเลือกมาสัก ปีหนึ่งก็แล้วกัน มันไม่มีอะไรเลย นอกจาก ลำดับของตัวเลข list of two digits

lists ทั้งหลายเหล่านี้ ถ้าเรานำมันมาประมวลผลเข้า หรือนำมา process เข้า ด้วยกฏเกณฑ์ที่ตั้งขึ้นมา ก็ทำให้ได้ผลลัพธ์ของการประมวลผล lists ต่างๆเหล่านั้น

แก่นของเรื่องราว gnuplot และ lisp
การประมวลผล lists ต่างๆเหล่านี้แหละ เรียกรวมๆว่า lists processing ที่คนเมื่อหลายปีก่อนเขียนย่อๆว่า LISP ซึ่งก็คือ LISt Processing หรือ LISP ในภาษา คอมพิวเตอร์ อีก ๑ ภาษา ที่ท่านต้องปวดหัวกับวงเล็บ ที่ยกตัวอย่างมาในนี้นั่นแหล อิอิ เอ้ย คริคริ

แบบจำลอง การเดินเครื่องปฏิกรณ์นิวเคลียร์  ที่ยกตัวอย่างมา รวมทั้งระบบผู้เชี่ยวชาญ ก็เขียนด้วย LISP นี่แหละน่อ

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

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

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

Sunday, August 22, 2010

syslog: The system events logger

commandsจาก the white book ที่สงกาอยู่ว่า ทำไมจึงไม่มีเรื่องราวของ syslog อยู่ให้เห็นเลย จึงหยิบมาพลิกดูอีกหน ก็พบเข้าเต็มๆ เขาเขียนไว้ในเรื่องของ Essentail Administrative Tools and Techniques โดยจำเพาะ ซุกอยู่ในนั้น

ขออภัยผู้แต่งไว้ ด้วย ที่ไปกล่าวหาว่า ไม่มีเรื่องนี้อยู่

จะมาเสริมให้ ต่อไปจากเล่มแดง อย่างเข้มข้น



ฝรั่งเข้ามีหนังสืออ้างอิง เมื่อพูดถึง UNIX อยู่ ๒ เล่ม เรียกขานกันตามสีปก คือ
  • the red book
  • the white book
ซึ่งจัดพิมพ์มานานมากแล้ว และปรับปรุงมาเรื่อย ให้เข้ากับการเปลี่ยนแปลงทางวิชาการ และความต้องการ โดยเฉพาะ เล่มแดง นั้นเ ชาวน้องลี ย่อมรู้จักดี เพราะทำมาโดยเฉพาะ ชัดๆเลย แต่สีปก ไม่ใช่แดงเท่านั้นเอง

เล่มที่ มะไฟ มี เป็น 2nd ed. ความจริง มีทั้งสอง edition แต่ฉบับแรก เปียกฝน เสียหายอ่านไม่ได้ไปหลายหน้าแล้ว เลยหามาใหม่ อ่านเล่น เพลินดี

Thursday, August 19, 2010

syslog: The system events logger

commands
มาต่อกันอีกจากตอนที่แล้ว ที่นำเสนอในส่วนของ รายละเอียดของ facilities ของแฟ้ม /etc/syslog.conf ที่จบลงตรงตัวอย่างของ ชื่อของ facility และ severity level ของข้อมูลข่าวสาร

ตัว syslogd เอง ก็สามารถใช้เป็น facility ได้ด้วยน่ะ ลืมบอกไป แต่ facility mark ก้ต้องระบุด้วย

การที่ข่าวสารจากโปรแกรม หรือ facility ต่างๆจะถูกบันทึกไว้นั้น ก็ต้องพิจารณาด้วยว่า สำคัญพอที่จะบันทึกไว้หรือเปล่า เป็นเกณฑ์ กล่าวคือ severity level นั้นต้องมากกว่า หรือ เท่ากับที่ระบุไว้เท่านั้น action ถึงจะได้รับการพิจารณาให้กระทำ หรือ ดำเนินการได้

ในตัวอย่างที่ยกมาถึง severity level นั้น เรียงลำดับความสำคัญลดหลั่นลงมาตามลำดับน่ะ อันสูง สำคัญมากกว่าอันต่ำลงมา ๑ ระดับ แบบนี้แหละ ก็ลองไปไล่ๆดูเอาน่ะพี่น้อง

สำหรับ action นั้น มีพอให้ดูเป็นแนวทางอยู่ดังนี้
  • filename เขียนข่าวสารนั้นๆ ลงเครื่องนั้นเลยด้วยชื่อแฟ้มที่ระบุมานี่แหละ
  • @hostname ให้ส่งข่าวสารไปยัง syslogd ของเครื่องที่ระบุชื่อไว้นี่แหละ
  • @ipaddress คล้ายๆข้างบนนั้น แต่เป็นหมายเลข ip แทนชื่อเครื่อง
  • user1,user2,... เขียนลงที่หน้อจอของ ผู้ใช้งานตอนที่เขา login
  • * เขียนข่าวสารไปยังผู้ใช้งานทุกคนที่ logged in อยู่
มีข้อควรระวังคือ ถ้าใช้ filename แล้ว ชื่อต้องระบุแบบสมบูรณ์

ในตำราเล่มแดง เขาบอกด้วยว่า สามารถใช้ร่วมกับ m4 ได้ด้วย ก็สะดวกไป แต่ต้องใช้ m4 เป็น

ในเครื่องของท่าน สมควรมีตัวอย่างให้ดูน่ะ ลองๆไล่ดูเอาเอง

ในเล่มแดง เขายกโปรแกรมที่ใช้บริการของ syslogd มาให้ดู เช่น
ftpd ใช้ facility daemon ที่ level เป็น err-debug และ
named ใช้ facility daemon และ level เป็น err-info

สำหรับการเขียนโปรแกรมด้วยนั้น ขอให้ติดต่อมาเป็นการส่วนตัวก็แล้วกัน แต่ถึงอย่างนั้น หากสนใจก็แวะไปดู แฟ้ม syslog.h ก่อนก็ได้ เพราะ[ซึ่ง]เรียกใช้เสมอ ไม่ว่าจะเป็น openlog(), syslog(), closelog()

ขอยุติไว้ตรงนี้ชั่วขณะหนึ่ง เพราะยังมีส่วนที่ต้องพูดกันถึงเรื่องการบันทึก ที่ พรบ. คอมพิวเตอร์ต้องการนั้น มันคืออะไร แล้วเราค่อยมาว่ากันอีกที แต่ตอนนี้

ขอขอบคุณที่อ่านมาจนถึงถ้อยคำนี้

Wednesday, August 18, 2010

syslog: The system events logger

commands
ต่อจาก ตอนแรก ที่หนุดไว้ตรง แฟ้มเอกสาร ที่ควบคุมพฤติกรรมการทำงานของ syslogd ที่เปรียบเสมือนเอกสารกำกับยา ที่ทุกคนที่รับยา พึงอ่าน

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


จากท้ายตอนที่แล้วที่พูดถึงรูปแบบของแฟ้ม /etc/syslog.conf ที่เป็นแฟ้มเอกสารพื้นๆ, plain text, โดยอยู่ในรูป
selector<Tab>action
นั้น ได้ย้ำว่า <Tab> นั้น คือปุ่ม Tab บนแป้นพิมพ์เท่านั้น จะเป็น space หรืออย่างอื่นไม่ได้โดยเด็ดขาด ก็ขอให้ระมัดระวังในประเด็นนี้ให้มากด้วย มัน ปจฺจตฺตํ วิญฺญูหิ น่ะ ให้ลองดูเอง โดยเฉพาะพวกที่นิยม cut & paste นั้นแหละ ปวดหัวตายเอาง่ายๆ เพราะ หาที่ผิดพลาดไม่เจอ

ตัว selector เองนั้นจะมีไวยากรณ์เป็น facility.level ตัวอย่างเช่น
mail.info                /var/log/maillog
จะมีผลให้ข่าวสารจากระบบอีเล็กทรอนิคส์เมล์ ส่งไปเก็บไว้ที่แฟ้ม /var/log/maillog

นั่นคือ selector โดยเนื้อแท้แล้วก็คือ โปรแกรม, facility, ที่ส่งข้อมูลข่าวสาร และ ระดับความรุนแรงของข้อมูลข่าวสาร, level, ในรูปดังกล่าวมาแล้ว ซึ่ง ทั้งคู่นี้, facility & level ต้องเป็นชื่อที่กำหนดไว้แล้วเท่านั้นเอง จะเขียน หรือ ผลิตมาเอามิได้เลย แลพอแยก facility ออกเป็นกลุ่มได้ดังนี้
  • กุล่มของ kernel
  • กลุ่มของโปรแกรมอรรถประโยชน์ทั่วไป
  • กลุ่มของโปรแกรมที่เขียนขึ้นมาสำหรับใช้งานประจำเครื่องนั้นๆ
  • กลุ่มอื่นๆนอกไปจากนี้แล้ว รวมๆเรียกว่า user
นอกจากนี้ selector ยังสามารถใช้อีก ๒ คำ คือ * และ none ที่หมายถึง ทุกอย่าง หรือ ไม่เลยสักอย่าง

facility สามารถมีได้หลายตัว แต่ละตัว แยกกันด้วย comma ขณะเดียวกัน selector เอง ก็สามารถมีได้หลายตัวด้วยเช่นกัน โดยแยกกันด้วย semi-colon

ทุกสิ่ง ทุกอย่าง ล้วนแต่เอามา OR กันทั้งนั้น ข้อมูลข่าวสารใดใด ที่มี selector ตรง กับที่กำหนดไว้ ก็จะถูกนำไปยัง หรือ ส่งไปที่ action นั้นนั้น ตัวอย่างของ facility ก็ได้แก่
  • kern
  • mail
  • daemon
  • auth
  • cron
  • mark
  • fpt
และตัวอย่างของ severity levels ก็ได้แก่
  • emerg
  • alert
  • crit
  • err
  • warning
  • notice
  • info
  • debug
ความหมายของแต่ละคำ ใคร่ขอรบกวนให้ท่านไปศึกษาเอาเองจากระบบของท่าน ยกตัวอย่างเช่น mark นั้น เขาเอาไว้สำหรับบันทึกวันเดือนปีเวลา ที่ช่วงระยะใดๆที่กำหนดไว้ล่วงหน้า ซึ่งอันนี้ มีประโยชน์มาก เพราะอย่างน้อยก็ทราบว่า ปัญหาเกิดขึ้นในช่วงเวลาใด มันแคบลงมามาก ซึ่งยังดีกว่าที่จะรู้ว่า มันเกิดขึ้นเมื่อคืนนี้ หากเราสามารถกำหนดได้ว่า เมื่อคืนนี้ ที่เกิดเรื่อง อยู่ระหว่างชั่วโมงไหน ดั่งนี้ เป็นต้น

ตำราเขาเล่าเรื่องขำขำแบบฝรั่งเอาไว้ว่า หลาย sites ทีเดียว ที่เกิดปัญหาลึกลับ เพราะเครืองมันดับเอากลางดึก ทุกคืน ต่อเมื่อสืบทราบความจริงจึงทราบว่า เป็นเพราะแม่บ้านทำความสะอาด เธอนำเครื่องดูดฝุ่นมาเสียบเข้ากับเต้าเสียบไฟฟ้า ที่ใช้ร่วมกันกับคอมพิวเตอร์ ผลน่ะหรือ ไฟฟ้าก็กระเพื่อมน่ะซี แล้วอีทีนี้ คอมพิวเตอร์ หรืออุปกรณ์พ่วงอื่นๆ ก็พลอยดับ หรือ ล่ม ไป ก็เท่านั้นเอง, (อยู่ในหน้า ๒๐๙ เล่มแดง)

Tuesday, August 17, 2010

syslog: The system events logger

commands
ต่อจาก ตอนก่อนหน้านี้น่ะ ยกยอดมาเลย ดูดีกว่า

syslog เป็นโปรแกรมที่จัดการข้อมูลทั้งจาก kernel และ โปรแกรมอรรถประโยชน์ของระบบ เขียนโดย Eric Allman จาก Berkeley โปรแกรมนี้ มีข้อดีที่สำคัญ ๒ ประการคือ
  1. ทำให้ผู้พัฒนาโปรแกรม เป็นอิสระจากความจำเป็นที่ต้องมีการบันทึก log และ
  2. เอื้ออำนวยให้ ผู้บริหารระบบสามารถควบคุมการเก็บ log ได้
ก่อนหน้านี้ ต่างคน ต่างมีอิสระในการบันทึก log ของตัวของตัวไป ผู้บริหารระบบ ไม่สามารถควบคุมได้ว่าข้อมูลอันใดที่จะเก็บไว้ หรือ สมควรเก็บไว้ และ จะเก็บไว้ที่ไหน

syslog มีความหยืดหยุ่นพอสมควร กล่าวคือสามารถเรียงลำดับข่าวสารจากแหล่งกำเนิด และ ความสำคัญ(รวมๆเรียกแบบเหมาโหลว่า severity [security ขออภัย คำนี้ คัดลอกมาผิดครับ ที่ถูกคือ ซิเวียริตี้] level) ได้ และเปิดช่องทางของข่าวสารอันนั้น ไปยังจุดหมายปลายทางใดใดได้ เช่นลง log หรือ บน terminal ของผู้ใช้งานเอง หรือ เครื่องอื่นๆ ก้ยังได้

ความสามารถในการที่จะเป็นศูนย์กลางการ log ข่าวสารของเครือข่ายนี้เอง เป็นคุณสมบัติเด่นอันหนึ่งของเขา

syslog ประกอบด้วยสามองค์ใหญ่ๆคือ
  1. syslogd และ /etc/syslog.conf ตัวโปรแกรมที่ดำเนินการบันทึก และ แฟ้มที่บ่งบอกพฤติกรรมของเขา
  2. openlog, syslog,closelog รูทีนสำคัญๆที่อยู่ใน library ที่ผู้พัฒนาโปรแกรมใช้สำหรับส่งข้อมูลไปให้กับ syslogd และ
  3. logger คำสั่งในระดับผู้ใช้งาน ที่สามารถเรียกใช้เพื่อส่ง log ต่างๆ

syslogd อยู่ที่ /usr/sbin ส่วน logger อยุ่ที่ /usr/bin และ syslog เป็นรูทีนใน library ที่เป็นส่วนหนึ่งของ C standard library.

การทำงาน จะเป็นลักษณะนี้ โดยที่แรกเริ่ม syslogd จะวิ่งเมื่อเปิดระบบปฏิบัติการ โปรแกรมที่ทำงานร่วมกับ syslog จะเขียน log ลงไปยังแฟ้มพิเศษ ชื่อ /dev/log ส่วน syslogd จะอ่านข่าวสารจากแฟ้มนี้ ปรึกษาแฟ้มที่กำหนดพฤติกรรมของเขา แล้วแยกกระจายไปยังปลายทางต่างๆ ตามที่กำหนดไว้. syslogd จะอ่านข่าวสารต่างๆจาก kernel ด้วยเช่นกัน โดยอ่านจากอุปกรณ์ /dev/klog

สัญญาณควบคุม HUP จะทำให้ syslogd ปิดแฟ้ม log อ่านแฟ้มที่ควบคุมพฤติกรรมของเขาใหม่อีกครั้งหนึ่ง และ เริ่มต้นการบันทึกอีกระลอกใหม่ นั่นก็หมายความว่า หากมีการเปลี่ยนแปลงใดใดกับแฟ้มควบคุมพฤติกรรมของ syslogd แล้ว ท่านต้อง ส่งสัญญาณ HUP ให้กับ syslogd เพื่อว่า การเปลี่ยนแปลงนั้นๆ จะมีผลบังคับใช้ สัญญาณควบคุม TERM จะเป็นการสั่งยุติการทำงานของ syslogd

syslogd เขาจัเขียน process ID, PID, ไว้ที่แฟ้ม /var/run/syslog.pid ดังนั้น จึงสะดวกมาก สำหรับการสั่ง หรือ ส่งสัญญาณ ไปยัง process นั้นๆ ดังนี้ (โปรดใช้ความละเอียดถี่ถ้วนเป็นอย่างยิ่ง)
kill   -1   `/bin/cat /var/run/syslog.pid`
สัญญาณส่งผ่านคำสั่ง kill โดยเป็น option ของคำสั่ง ตามรูปแบบที่นำเสนอนี้ 1 หรือ HUP คือสัญญาณดังกล่าว

การบีบอัด และโยกย้ายแฟ้ม log จาก syslogd โดยพละการนั้น ไม่ดี และผลเสียมากเกินคาดคิดเลยทีเดียว ปกติระบบจะมีโปรแกรมเล็กๆช่วยงานลักษระนี้อยู่แล้ว

ในลำดับถัดไปจะนำเสนอส่วนของการควบคุมพฤติกรรมของ syslogd ซึ่งก็คือรายละเอียดของแฟ้ม /etc/syslog.conf ซึ่งสาระของแฟ้มนี้เขียนขึ้นด้วยอักษรธรรมดาๆ ไม่ต้องการอะไรมาก โดยมีข้อกำหนดว่า บรรทัดว่างๆ กับ บรรทัดที่ขึ้นต้นด้วย # นั้น มันจะไม่สนใจ มันจะสนใจก็ต่อเมื่อ บรรทัดนั้นๆ อยู่ในรูปแบบดังนี้
selector<Tab>action
โดยที่ <Tab> คือปุ่ม Tab บนแป้นพิมพ์ของท่าน และเป็นปุ่ม Tab เพียงเท่านั้น จะเป็นอย่างอื่นไปเสียไม่ได้ สำหรับ selector และ action นั้น จะได้นำมาเล่าต่อไป๚

Friday, August 6, 2010

syslog: the system event logger

commands
จะขอต่อเรื่องของ system logging ให้ได้ แต่ก็อย่าหวังอะไรมากนัก



ในการดู หรืออ่าน log files ที่แนะไว้ สามารถทำให้ท่านตรวจสอบผลงานได้เป็นเบื้องต้น ตัวอย่างที่เห็นได้ชัดเจนคือ เมื่อท่านลง apache แล้วนั้น ท่านจะทราบได้อย่างไรว่า apache จะวิ่งได้จริง เพราะบางครั้ง ลำพังแค่ message จากหน้าจอว่า Syntax OK นั้น ไม่ได้หมายความว่าเขาจะวิ่งได้จริง เพราะ Syntax OK ก็หมายเอาแค่ สิ่งที่ apache ต้องการนั้น เรากำหนดไว้ครบ และสามารถหาความหมายได้ ซึ่งข้อความหลังนี้ อาจจะหาได้ หรือ หาไม่ได้ ก็เป็นได้ แต่ว่า apache เพียงดูว่า เรากำหนดไว้ให้หรือเปล่า เท่านั้น

ในการที่จะดูว่า apache วิ่งได้จริง หรือไม่วิ่งนั้น ทำได้โดยการเข้าไปอ่าน log files ทั้ง ๒ แฟ้ม เท่านั้นเอง เอ้า บอกกันไว้เลยตรงนี้ว่า log files อยู่ที่ไหน ก็ลองสั่งดูน่ะ
# grep ^ErrorLog /usr/local/etc/apache22/httpd.conf
จะได้แฟ้มที่เก็บความผิดพลาด ส่วนแฟ้มที่บันทึกทั่วๆไป ก็น่าจะเดาชื่อฟ้มออกได้น่ะ

แต่ว่า ที่กล่าวมาทั้งหมดนั้น เป็นเพียงการอ่าน log files ของโปรแกรมหนึ่งเท่านั้น เรื่องราวของระบบปฏิบัติการ ยังมีอีก ซึง่จะกล่าวถึงต่อไปเท่าที่สามารถรวบรวมได้

เรื่องราวต่อไปนี้ รวบรวมจากหนังสือ
  1. UNIX System Administration Handbook; Evi N., Garth S., Scott S., Trent R. H.; second edition ซึ่งฝรั่งเรียกว่า the Red book ในบทของ Syslog and Log Files
  2. ส่วนเล่ม the white book นั้นไม่มีเร่องนี้แยกมาพิเศษ จึงไม่อ้างถึง
  3. กับ FreeBSD Handbook และ manual page ในเรื่องที่เกี่ยวข้อง
และอีกครั้ง อย่าคาดหวังอะไรมากนัก เพราะเขียนขึ้นมาเล่นๆ ระบายอารมณ์

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

นโยบายการบันทึกรายงานเหล่านี้ย่อมแปรผันไป จากแหล่งสู่แหล่ง ขึ้นอยู่กับสภาวะการปฏิบัติของแหล่งนั้นๆ แต่แบบแผนโดยรวมทั่วไปพอบอกได้ดังนี้
  • โยนข้อมูลทิ้งทันที
  • เริ่มต้นบันทึกใหม่ ณ คาบเวลาหนึ่งๆ
  • หมุนเวียนบันทึก และเก็บข้อมูลไว้ในระยะเวลาที่กำหนด
  • บีบอัด และเก็บลงคลังข้อมูลในสื่ออื่นๆที่เหมาะสม
ทางเลือกที่เหมาะสำหรับท่าน ขึ้นอยู่กับปัจจัยหลายอย่าง แต่อย่างหนึ่งคือ สำนึกในเรื่องความมั่นคง ความปลอดภัยของข้อมูล และระบบ
ยกยอดไปข้างบนดีกว่าน่ะครับ ต้องขออภัยพี่ เพื่อน ทุกท่านด้วย ที่ข้อเขียนล่าช้าไป

ซีงิต ก็เช่นนี้แล

แทรกน่ะ พี่น้อง ขอแทรกรูปภาพไว้ก่อนว่า ที่ชะงักไปน่ะ เพราะเรื่องราวอันเนื่องมาจากรูปทั้งหลายนี่เอง
ด้วงแมง จอมใจ ดวงใจ ดวงดาวประดับท้องฟ้า ณ เบื้องทิศตะวันออกเฉียงเหนือ คริคริ

๏ ขอขอบคุณคุณครูภาษาไทย ของรายการช่อง dltv 7 ที่สอนนักเรียนผ่านทีวี ซึ่ง มะไฟ เผอิญได้ฟัง และหยุดฟังจนทำให้ต้องปรับปรุงภาษาไทยขึ้น
....นำถ้อยคำมาเรียงกัน ให้สื่อความหมาย ได้ใจความ สละสลวย มีสัมพันธภาพ มีสารัตถภาพ...
ขอกราบแทบเท้าคุณครูภาษาไทย ไว้ ณ ที่นี้ด้วย ๚

Friday, July 2, 2010

FreeBSD : sh notes

commands


ใน FreeBSD บางครั้ง การ redirection standard output ไปยังแฟ้ม และ เรายัง redirect standard error ไปยัง standard output อีก ซึ่ง ก็หมายถึงว่า ไปที่เดียวกันนั่นแหละ ก็โครงสร้างง่ายๆ

.... > /dev/null 2>&1


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

บันทึกความจำไว้ สำหรับคนที่ชอบ sh(1) programming

Thursday, May 6, 2010

FreeBSD: programming -->getopt



commands

เพื่อนๆ หลายท่านคงเคยใช้งานโปรแกรม แบบที่ต้องกำหนด option ด้วย เช่น
% find -n -x pattern filename
% grep -v R-dep


ซึ่งโปรแกรมลักษณะนี้ อำนวยความสะดวกให้ผู้ใช้มาก ในแง่ที่ว่า สามารถเพิ่มคุณลักษณะวิเศษไปจากเดิมได้ นิดหน่อย โดยไม่ต้องสั่งโปรแกรมเดิมมาทำงานซ้ำ

n, x หรือ v ในตัวอย่างนั้น เรียกว่า option การกำหนด option ให้กับโปรแกรมที่เขียนขึ้น แม้จะทำได้เองโดยง่าย แต่ในโลกของ unix แล้ว การใช้บริการของ system functions นั้นเป็นสิ่งที่ ต้องทำ เพราะอย่างน้อย ก็ ลดภาระ ของผู้พัฒนาโปรแกรม และ ทำให้ ตัดความกังวล เรื่อง ความปลอดภัยของระบบไปได้มาก

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

ในโอกาสพิเศษเช่นนี้ จึงใคร่ขอนำเสนอเรื่องสั้นๆ ไม่ยาวนัก แต่พอให้เกิดปัญญา มาตกลงปรองดองกันได้ ระหว่าง การเขียน code ขึ้นมาเอง กับการใช้บริการของ system functions (ผ่าน library)

function ที่ว่านี้ เรียกว่า getopt(3) ซึ่งเมื่อเปิด manual page ใน section ที่ 3 ดูก็ทราบรายละเอียดได้ว่า
  1. ต้อง link กับ standard C library (-lc) ในตอน compile ตัวอย่างคือ
    % cc -o programme programme.c -lc
  2. function นี้กำหนด prototype ไว้แล้วใน unistd.h header files ทำให้เราต้องรวมบรรทัด
    #include <unistd.h>
    เข้าไปด้วย


ตัวอย่าง ที่เขียนขึ้นจริงๆกับ โปรแกรมเรื่องสั้นภาค ๒ ที่เพิ่งส่งไปเมื่อวันอังคารที่ผ่านมานี้ ขอตัดมาให้ดูแต่เพียงบางส่วนเท่านั้น คือ
@ |getopt(3)|, one of many functions from system services
@<Getoption@>=
sflag = 0;
interactive=0;
while ((ch = getopt(argc, argv, "is:d:")) != -1) { <----
  switch (ch) {
   case 'i':@/
      interactive = 1;@/
      break;@/
   case 's':
      if ((fp = fopen(optarg, "r")) == NULL) {
       fprintf(stderr,"%s: %s: %s\n",programme, optarg, strerror(errno));
       status = OPEN_FILE;
      }
      sflag = 1;
      strcpy(filename,optarg); /* for later used */
      break;
   case 'd':
      if ((fp = fopen(optarg, "r")) == NULL) {
       fprintf(stderr,"%s: %s: %s\n",programme, optarg, strerror(errno));
       status = OPEN_FILE;
       }
      strcpy(filename,optarg); /* for later used */
      break;
   case '?':@/
   default:@/
      fprintf(stderr,"usage: %s -[[i]s|[i]d] data-filename\n%s\n", programme,
      strerror(errno));
      status = USAGE;
      break;
   }
  }
โดยที่ตรงบรรทัด while นั่นแหละ พอเดาออกน่ะครับว่า options ที่ใช้คือ i,s,d อันนี้ไม่ได้หมายถึง index for sustainable development ของการพัฒนาอย่างยั่งยืน อะไรหรอกน่ะ แต่มันเผอิญมาตรงกัน เท่านั้นเอง

กล่าวคือ option ของโปรแกรมที่ใช้งานจริงจริง เมื่อเรียกใช้ ก็จะอยู่ในรูป
% programme -i -sfilename | -dfilename
หรือ
% programme -isfilename | -idfilename
หรือ
% programme -sfilename | -dfilename
จาก manual page ทราบว่า เรามีภาระเพียงกำหนด argument ที่ 3 ให้กับ system function นี้ ซึ่ง มีรูปแบบ ที่แน่นอน ไว้ให้แล้ว พร้อมกับเขียน code มาเพื่อรองรับ option ที่กำหนดไว้ ก็เท่านั้นเอง

และในตัวอย่าง มะไฟ ก็เพียงเลือกเอาว่า จะใช้ option i,s,d โดยที่ ๒ อันหลังนั้นต้องมีชื่อแฟ้มตามมาด้วยเสมอ กล่าวคือ ต้องอยู่ในรูป
% programme -sfilename
หรือ
% programme -dfilename
ย่างนี้เป็นต้นเสมอ จะใช้แต่ option ใด option หนึ่งโดดๆ ไม่มีชื่อแฟ้มตามมาด้วย ไม่ได้

ใน manual page นั้น เขาบอกไว้ชัดเจนว่า option ที่มี argument ตามมานั้น ให้ตามหลัง option นั้นด้วย : เสมอ เพื่อแยกจาก option อื่นที่ไม่มี argument ตามมาด้วย ส่วนที่ว่า argument ที่ตามมาด้วยนั้น จะเขียนติดต่อกันไปเลย อย่างในตัวอย่างที่ยกมาให้ดู หรือ จะมี space ตามเพื่อความสวยงาม ก็ได้ ไม่ว่ากัน

ในตัวอย่างที่ยกมานั้น option s และ option d มี : ตามอยู่ด้วย ทำให้ทราบว่า ทั้ง ๒ option นั้นมี argument ตามมาแน่นอน ซึ่งก็คือชื่อของแฟ้มเอกสาร ที่จะเปิดเพื่ออ่านข้อมูลนั่นเอง

ก็หวังว่าคงพอเข้าใจบ้าง

และเมื่อลองเทียบ ความเรียบง่ายนี้ กับ codes ที่ต้องเขียนเองขึ้นมา โดยขอให้ไปดูจากหนังสือ The C Programming Language ในบทที่ ๕ section ที่ 10 Command-line Arguments ท่านก็จะพบว่า ยุ่งเหยิงมากกว่ากันเยอะเลย เอาแค่การตีความ precedence ของ pointers & operator ก็แทบจะพูดได้ว่า

โชคดีแล้ว ที่ไม่ต้องเขียนเอง

การใช้บริการของ system function ผ่าน library ทั้งหลายที่มีให้ จึงนับว่าดีที่สุด

ขอยกคุณงามความดีนี้ ถวายเป็นราชพลี ถวายเป็นปฏิบัติบูชา ในวาระ ฉัตรมงคลสมัย อันประเสริฐยิ่งนี้

อันใดที่บกพร่อง มะไฟ ฅนยาก ขอน้อมรับไว้แต่ผู้เดียว

Monday, April 6, 2009

ไกลปืนเที่ยง: FreeBSD --> commands(1)

จาก คำสั่งแรก ที่แนะนำไป หลายท่านคงสับสนเอามากมากcommandsว่าทำไมจึงแนะให้ออกจากระบบ เป็นการเรียนรู้ครั้งแรก

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

หวังว่า คงเข้าใจ และได้รับการให้อภัย จากเพื่อนรักนักอ่านโดยทั่วกัน

ในเหตุผลที่ยกมานั้น มิได้หมายความว่า การศึกษาคู่มือแบบ on line จะเป็นไปไม่ได้ สามารถดำเนินการได้อยู่ จึงใคร่ขอให้ท่านผู้เริ่มต้น ได้เริ่มศึกษาเอาเอง จากเครื่องของท่าน ในขณะนี้

คำสั่งที่ว่านี้คือ man

% man name

เมื่อ name คือหัวข้อที่เราตั้งใจจะศึกษา ไม่มียกเว้นแม้กระทั่งคำสั่ง man ด้วยเช่นกัน ลองดูน่ะ

% man man

นี่เป็นคำสั่งที่ ๒ ที่ผมขอแนะนำให้ท่านศึกษาโดยละเอียด เพราะ จะช่วยแก้ปัญหา การทำงาน ของท่านได้เป็นอย่างดี จากคำสั่งนี้ ท่านจะพบข้อความคล้ายๆกับที่ผมยกมาให้ดู ดังนี้

MAN(1) FreeBSD General Commands Manual MAN(1)

NAME
man -- format and display the on-line manual pages

SYNOPSIS
man [-adfhkotw] [-m arch[:machine]] [-p string] [-M path] [-P pager]
[-S list] [section] name ...

DESCRIPTION

ขอให้สังเกตุที่มุมบนซ้ายให้ดี จะมีคำว่า MAN(1) อยู่ MAN คือหัวข้อของหน้าคู่มือ ที่ท่านกำลังศึกษา (1) คือ section ของหน้าคู่มือของคำสั่งที่ท่านกำลังศึกษา เบื้องต้น ให้จำไว้ก่อน

คำแนะนำเพิ่มเติมก็คือ ขอให้ศึกษาโครงสร้างของ รายละเอียด ที่อธิบายในแต่ละหัวข้อๆ ของแต่ละคำสั่งนั้นๆ, ที่ยกมาข้างบนก็ได้แก่ SYNOPSIS และ DESCRIPTION, โดยเฉพาะ SEE ALSO หรือ EXAMPLE ถ้ามี

อ้อ หากที่กล่าวมา ท่านยังไม่พบ ท่านสามารเลื่อนไป หน้าถัดไป ได้ด้วยการเคาะ space bar เบาๆทีหนึ่งจนพบ ขณะเดียวกัน ท่านสามารถใช้ปุ่ม PgUp/PgDn เพื่อ เลื่อนย้อนกลับไป หรือ เลื่อนไปข้างหน้า ถ้าพบว่า ยังอยากอ่านข้อความ ที่อ่านผ่านไปนั้นแล้ว อีกครั้งหนึ่ง

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

แล้วเราจะทราบได้อย่างไรว่า แต่ละ section นั้นมีเรื่อง หรือ คำสั่งกลุ่มใดอยู่บ้าง และที่สุดคือ มีกี่ section กันแน่ คำตอบ ท่านสามารถหาได้จาก

% man 1 intro

ขอให้อ่านให้ละเอียด หน้านี้ ไม่มากนัก จากนั้น ให้แทนเลข 1 ด้วยเลขลำดับถัดไป จนกระทั่งถึง section สุดท้าย ก็คงพอให้ทุกท่าน ได้สาระมาบ้าง จากคำสั่งที่ ๒ นี้

ก่อนจาก ขอให้เพื่อนรักนักอ่าน ศึกษาเรื่องของ C shell และ Born shell ให้ละเอียด จากหน้าคู่มือ

% man csh
% man sh

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

ขอถวายความดีจากข้อเขียนนี้ แด่พระสยามเทวาธิราช เนื่องในวันจักรี

Sunday, April 5, 2009

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

จาก commandsไกลปืนเที่ยง: FreeBSD --> simply freebsd ทำให้ทราบว่า ท่านต้องได้รับอนุญาตให้เข้ามาใช้งานด้วยการ login ก่อน และในตอนแรกนี้ ใคร่ขอแนะนำคำสั่งแรก ให้กับท่าน

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

% logout

ผลก็คือ มันทำให้ท่านต้องออกจากการใช้งาน หากท่านประสงค์จะเข้ามาใช้งานอีก ท่านก็ต้อง login อีกครั้งตามที่ได้บอกไว้ก่อนหน้านี้

ขอจบคำสั่งแรกไว้เพียงเท่านี้ก่อน

Sunday, July 6, 2008

wireless wired network

วันนี้ ผ่อนคลายความเครียดกันด้วยเรื่อง ไร้สาระ เอ้ย ไร้สายที่มีสายต่อ

จำไม่ได้ว่าเคยโพสไว้ที่ไหน แต่ดูเหมือนว่า เคยโพสไว้ ให้เป็นของขวัญ หลานไอเดีย แต่เรื่องที่โพส จะเป็นเรื่องนี้หรือไม่ ก็ไม่แน่ใจ เพราะว่ามันก็ล่วงมานานอยู่ เอาเถอะงวดนี้ก็ขออนุญาตหลาน ไอเดีย นำข้อเขียนมาโพสที่นี่อีกเตาละกัน

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

ก็นี่แหละ ซีงิต ที่กำหนดเองไม่ได้ แม้กระทั่งเส้นทางเดิน

เรื่องก็มีอยู่ว่า ...
ระหว่างนี้, ๙ มิย เป็นต้นมา, ผ่าตัดช่องท้อง และมานอนพักรักษาตัวที่ apartment ที่ไม่ใช่บ้าน ซึ่งใน apartment เขามี wireless internet ให้ ก็ปกติที่มีบริการนี้ให้กับลูกค้า ทีนี้เมื่อ week ก่อนไปซื้อ notebook ถูกๆ มาให้ ไหมฟ้า ที่ดูแลอยู่ได้ใช้ด้วย เพราะเธอมีนิสัยชอบขีดเขียน งานส่วนใหญ่จึงเป็นเพียงใช้ office suite นานนานครั้ง ถึงจะไปเปิดตัว e สักที, เธอบอกมายังงั้น
ปัญหาก็คือ ทั้งเครื่องที่ใช้อยู่กับเครื่องใหม่ ต่างก็มี wireless lan อยู่ทั้งคู่ แต่ account กลับมีอยู่เพียง ๑ แล้วจะทำยังไง ครั้นจะไปซื้อ account เพิ่ม ก็เสียดายตัง พอมานึกว่าตัวเอง ก็มี วิชาเทพฯ กะเขาอยู่ก็เลย แก้ปัญหาแบบแมวๆอย่างมะขาม
ก็รอดตัวไปได้

เอาเครื่องที่ใช้ก่อน เครื่องนี้ใช้ FreeBSD อยู่ อีกเครื่องที่ ไหมฟ้า เธอใช้นั้นเป็นวินอะป้าดเม่น ทั้งสองเครื่อง มี lan ต่ออยู่ด้วย เรียกว่า หากมีสาย lan มาต่อเข้า ๒ เครื่องก็คุยกันได้สบาย ไม่ว่าจะเป็น ftp, http, หรือ etc

แล้วจะเลือกเครื่องไหนละ ที่ต่อไปยัง hi speed wireless internet นั้น

ไม่รีรอหรอก ผมเลือกใช้ FreeBSD แหละ

มาดูฝั่งสายแลนมั่ง เครื่องผมใช้ ip=10.3.1.25 netmask=0xffffff00 ไม่กำหนด router แต่ตั้งให้เป็น gateway ด้านของ ไหมฟ้า ใช้ ip=10.3.1.60 netmask=0xffffff00 และกำหนดให้ gateway ไปที่ ip=10.3.1.25 นั้น

ด้านฝั่งของ FreeBSD นั้นกำหนดว่า
๑) nat ด้วย wireless nic นั้น
๒) รับหมายเลข ip จาก wireless ด้วย dhcp
๓) กำหนดว่าให้เป็น gateway
เพียงเท่านี้จริงๆ
ประเดี๋ยวจะนำแฟ้ม /etc/rc.conf มาให้ชม
เอาละครับ ตื่นมาชมกันได้แล้ว นี่ตัดจำเพาะที่เห็นว่า ต้องใช้จริงๆ


gateway_enable="YES"
##
firewall_enable="YES"
firewall_type="OPEN"
firewall_logging="YES" # Set to YES to enable events logging
firewall_logdeny="YES" # Set to YES to log default denied incoming

#defaultrouter="10.3.1.1"
ต้องยกเลิกนะ ห้ามกำหนด

ifconfig_ath0="DHCP"
<--- เส้นทางสู่ internet
#
#
natd_enable="YES" # Enable natd (if firewall_enable == YES).
natd_interface="ath0" # Public interface or IPaddress to use.
#
ifconfig_em0="inet 10.3.1.25 netmask 255.255.255.0"
<--- เส้นทางสายแลนของ ไหมฟ้า


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

Friday, July 4, 2008

shell(2)

find

ตั้งใจจะจบเรื่อง shell ไว้เท่าที่เขียนไป แต่มานึกดูอีกที หากขาดรายละเอียดของทั้ง ไฟ, find, และ เสร็จ, sed ที่ใช้ประกอบการบรรยาย ก็เหมือนว่ากินข้าว แล้วไม่ดื่มน้ำตาม ก็ด้วยเหตุนี้แล จึงมีภาคนี้เป็นลำดับถัดมา

find(1) ที่ใช้ค้นหาเอกสารนั้น มีรูปแบบง่ายๆ อย่างที่ยกมานั่นคือ
# find  /usr/ports  -name work  -type d  -print
ซึ่งมีความหมายตรงไปตรงมาคือ ให้หา จาก /usr/ports เอกสารชื่อ work ที่เป็น directory ส่วนที่เหลือนั้นบอกว่า ให้พิมพ์ออกมาเมื่อหาเจอ,  -print
ผลลัพธ์ก็คือ, สำหรับ goffice2,
/usr/ports/converters/fribidi/work
/usr/ports/converters/psiconv/work
/usr/ports/deskutils/glabels/work
/usr/ports/deskutils/planner/work
/usr/ports/devel/goffice/work
/usr/ports/devel/libgsf-gnome/work
/usr/ports/devel/goffice04/work
/usr/ports/editors/abiword/work
/usr/ports/editors/gnome2-office/work
/usr/ports/graphics/dia/work
/usr/ports/graphics/libwmf/work
/usr/ports/math/gnumeric/work
/usr/ports/textproc/wv/work

ซึ่งเรียกกัน หรือ รู้กันว่า คือ temporary working directory, ${WRKDIR}, และจะพิมพ์ออกมาทาง standard output,  stdout ทีละบรรทัด ทีละบรรทัดไป และนี่แหละคือ ไฟ, find(1)

ถ้าเป็นเช่นนี้ คงไม่ใช่ shell ที่เราต้องการ เพราะสิ่งที่เราต้องการคือ, ยกมาจำเพาะผลลัพธ์ บางส่วน,

cd /usr/ports/converters/fribidi && make package
cd /usr/ports/converters/psiconv && make package
....
cd /usr/ports/textproc/wv && make package


ก็แล้วเราจะเปลี่ยนให้ /usr/ports/converters/fribidi/work เป็น cd /usr/ports/converters/fribidi && make package ได้ยังไง ซึ่งก็นี่แหละคือหน้าที่ของ เสร็จ, sed(1) ไงละ

sed
คำสั่งเสร็จที่ใช้ในตัวอย่างที่ยกมาคือ
# sed  -e 's,/usr,cd /usr,'  -e 's,/work, \&\& make package,'
ซึ่งขอยกรูปแบบทั่วไปที่ใช้ตอนนี้มาให้เห็นคือ
# sed   -e  'sDELIMITtextDELIMITnew textDELIMIT'
โดยที่ input ของเสร็จ จะเป็น output ของ ไฟ เพราะส่งกันมาด้วย ท่อ, pipe อีกทีหนึ่ง ก็ต้องเป็นยังงี้แหละ เมื่อ ไฟ ส่งมา ๑ บรรทัด เสร็จ เขาก็จะ process ไป ๑ ที แล้วก็ส่งผลลัพธ์ไปที่ stdout

คราวนี้คงง่ายแล้วใช่ไหม ในการที่จะอ่านสิ่งที่ ได้บอกไว้ตั้งแต่ ports(1) โน้น โดยที่เราเลือกที่จะใช้ตัว คอมม่า เป็นตัว DELIMIT เพื่อแก้ไขตัว text ให้ได้ตามใจ
อ้อ เราต้องแก้ ๒ หนนะ ก็เลยต้องมี สีลบออง ๒ ลบอี sed  -e 's, , ,'  -e 's, , ,' โดยลบอีแรก เราแก้จาก /usr เป็น cd /usr และ ลบอีหลัง เราแก้จาก /work เป็น && make package แต่ สืบเนื่องจากตัว && นั้น มีความหมายพิเศษ เราจึง ยกความหมาย มันออกไปไว้ที่อื่นชั่วคราว ด้วยการใช้ ตัว \ ไงครับ

เสร็จ เอ้ยจบ find & sed และย้ำว่า โปรดศึกษา find(1) & sed(1) เพิ่มเติมด้วย

ขอย้ำว่า เรื่องของ sh ที่นำเสนอนี้ เป็นแต่เพียงสาระเบื้องต้นเท่านั้น และยังหยาบมากอยู่ เพราะยังขาด ในส่วนของการตรวจสอบข้อบกพร่อง ยังขาดการตรวจสอบ return code ของแต่ละคำสั่ง และยังขาดอีก ฯลฯ ขอให้ผู้ใฝ่รู้จงหาความรู้เพิ่มเติมเอาเองจาก sh(1)

ขอให้ประสบความสำเร็จ และ โชคดี

Saturday, June 28, 2008

shell(1)

จากข้อเขียนก่อน ขอขมวดถึง sh script ที่สร้างขึ้นมาจากการลง goffice2 ดังนี้

#!/bin/sh
set -x

cd /usr/ports/converters/fribidi && make package
cd /usr/ports/converters/psiconv && make package
cd /usr/ports/deskutils/glabels && make package
cd /usr/ports/deskutils/planner && make package
cd /usr/ports/devel/goffice && make package
cd /usr/ports/devel/libgsf-gnome && make package
cd /usr/ports/devel/goffice04 && make package
cd /usr/ports/editors/abiword && make package
cd /usr/ports/editors/gnome2-office && make package
cd /usr/ports/graphics/dia && make package
cd /usr/ports/graphics/libwmf && make package
cd /usr/ports/math/gnumeric && make package
cd /usr/ports/textproc/wv && make package

ขอทบทวนไวยากรณ์ของแต่ละบรรทัดพอให้ตามเรื่องราวได้โดยไม่หลงสักพอประมาณ
บรรทัดแรก อันนี้ จำไว้อย่างเดียว จำไว้เลย shell script ต้องเริ่มอย่างนี้
บรรทัดที่ ๒ จะทำให้การทำงานของแต่ละคำสั่ง แสดงผลออกมา ทุกรายคำสั่งย่อย
บรรทัดที่ ๓ ว่างๆ เพื่อความสวยงาม อันนี้เป็นความชอบของแต่ละคนๆไป
บรรทัดที่เหลือ ที่เริ่มด้วย cd /usr ... && make package นั้นคือ โครงสร้างทั่วไป ที่ควรศึกษาและจำไว้ คือ
expression1  &&  expression2
หรือที่เรารู้จักกันในรูป expression1  AND  expression2 ซึ่งทั้ง ๒ นิพจน์ ต้องเป็นจริงเท่านั้น
นั่นคือสาระเล็กๆน้อยๆจาก sh script ที่เขียนขึ้น ทีนี้มาดูว่าเราเขียนขึ้นมาได้อย่างไร เพราะที่บอกไว้ใน ports(1) แล้วว่า ...ถ้าเราไปไล่สั่ง # make package ไปเสียทุกที่ มันก็จบ นั้นมันดูง่ายๆ แต่เราจะไปรู้ได้อย่างไรว่า มัน อยู่ ณ ที่ใดใน ports tree ตั้งหมื่นกว่าตัวนั้น และนี่เองคือที่มาของ ผู้ช่วย อย่าง find(1)
ผลลัพธ์ของ find ดูแปลกดี เพราะไม่ว่าจะสั่ง make run-depends-list ก็พบว่ามีไม่มาก
ท่านอาจจะแย้งเอาได้ แต่ถ้าคิดว่า บาง package นั้น ต้องการอันอื่น เพิ่มขึ้นมา เป็นการจำเพาะ ก็สมเหตุสมผลอยู่
อีกประการหนึ่ง ผลลัพธ์ของ find(1) นั้นที่จริงจะเป็นอย่างนี้ สำหรับ gnome2-office
/usr/ports/converters/fribidi/work
/usr/ports/converters/psiconv/work
/usr/ports/deskutils/glabels/work
/usr/ports/deskutils/planner/work
/usr/ports/devel/goffice/work
/usr/ports/devel/libgsf-gnome/work
/usr/ports/devel/goffice04/work
/usr/ports/editors/abiword/work
/usr/ports/editors/gnome2-office/work
/usr/ports/graphics/dia/work
/usr/ports/graphics/libwmf/work
/usr/ports/math/gnumeric/work
/usr/ports/textproc/wv/work
เราจะเปลี่ยน หรือ แปลงสภาพ ที่เห็นอยู่นี้ ให้เป็น sh script ข้างบนนั้นได้ยังไง คำตอบก็คือ sed(1) ที่ปรากฏในช่วงท้าย ของบรรทัด find นั้น ซึ่งขอให้ศึกษาเอง เพราะไม่ยากเลย
เรื่องของ shell ก็ขอยุติลงแต่เพียงนี้ หวังว่าท่านคงได้สาระบ้าง แลหากมีอันใดบกพร่อง มะขาม ขอน้อมรับไว้แต่ผู้เดียว หากจะมีความดีบ้าง ก็ยกให้กับ ไหมฟ้า ผู้ดูแลในปัจจุบัน และ กุสุมา ผู้ล่วงลับไปแล้ว ซึ่งหากปราศจาก สองท่านผู้ที่เอ่ยนามมานี้ ก็มิอาจมี มะขาม มาเขียนหนังสือได้ในวันนี้

Monday, June 23, 2008

shell

ขอเอ่ยถึงเรื่องของ shell สักเล็กน้อย ไม่งั้นไม่ได้ชื่อว่าเล่น unix แลเมื่อเอ่ยถึง shell แล้วก็หนีไม่พ้น Bourne shell (sh)

sh เป็นเครื่องมือสำหรับผู้บริหารระบบ ในการจัดการงานต่างๆ แม้ว่าปัจจุบันนี้ จะมีเครื่องมือช่วย ในลักษณะของ graphics ให้มากมายก็ตาม แต่ในยามคับขัน ที่ต้องกู้ระบบแล้ว ความรู้พื้นฐานเหล่านี้ กลับช่วยชีวิตผู้คนไว้ได้มากกว่า

sh เป็นทั้ง command interpreter ที่ท่านต้องใช้ เมื่อท่านเข้าสู่ single user mode และ programming language ที่สามารถทำให้ท่านเขียน script สั้นๆเพื่อ แบ่งเบา งานซ้ำซากสำหรับท่านได้

ข้อเขียนวันนี้ ขอนำเสนอในแง่หลัง ทั้งนี้เพื่อใช้ประกอบกับเรื่องของ ports(1) ที่ได้เสนอไปก่อนหน้านี้

sh เป็นแฟ้มเอกสารพื้นๆ จึงสะดวกที่ท่านสามารถใช้ vi หรือ plain text editors ยอดนิยมของท่าน มาเตรียมขึ้นโดยง่าย ในการเขียน sh script นั้นมีหลักยึดง่ายๆเลย คือ ให้เขียนไปทีละบรรทัด ทดสอบไปทีละบรรทัด ก็ดูง่ายๆ ตรงไปตรงมาดี โดยเริ่มต้นที่

#!/bin/sh


ขอยกตัวอย่างง่ายๆอันเป็นที่นิยมยกมาคือ Hello, world ซึ่งโดยเนื้อแท้แล้วก็ไม่มีอะไร นอกจากสั่งให้ข้อความดังกล่าว ปรากฏที่หน้าจอ ฟังก์ชั่นนั้นคือ echo ก็ลองเรียก editor ยอดนิยมของท่านมา แล้วเตรียมเอกสารชื่อ myhello โดยมีรายละเอียดในแฟ้มนั้นดังนี้ ตามนี้เลยนะ, สีแดงๆ ไม่ต้องระบายให้หรอก

#!/bin/sh

echo Hello, world

เมื่อเสร็จแล้วให้สั่งต่อไปอีก ตามนี้นะ
# chmod +x myhello
พอเสร็จแล้วก็สั่งต่อไปซี น่านะ
# ./myhello
คงไม่ต้องบอกหรอกว่าผลลัพธ์คืออะไร

ความจริงแล้ว ฟังก์ชั่น echo นั้นไม่มีอะไรมากเลย เราเขียนอะไรตามหลังคำนั้น เขาก็เขียนอันนั้นออกมาที่ standard output แต่ก็ใช่ว่า อักขระ ทุกตัวจะสามารถแสดงออกมาได้ ถึงแม้จะเป็นอย่างนั้น หากเราต้องการ แสดงอักขระนั้นๆ ก็ย่อมทำได้ โดย ปิดคุณสมบัติ ของอักขระนั้นๆเสีย เราใช้ escape character ปิด คุณสมบัติพิเศษต่างๆ
ตัว escape character นั้นได้แก่ \
ค่อยๆเรียนรู้ไปทีละตัวว่า อะไรแสดงได้โดยตรง อะไรต้องการ escape character
ลองพิมพ์ข้อความต่อไปนี้บนหน้าจอของท่านดูซิ

# echo #\!/bin/sh
# echo set -x
# echo

คงคุ้นๆกันอยู่กระหมั่งหนา และโปรดสังเกตุด้วยว่า ! นั้นต้องใช้ escape character เข้ามาช่วย เพื่อให้แสดงผลเป็น ! จริงๆ เพราะความหมายแท้จริงของเขาใน shell นั้นคือ negate
ทีนี้ แทนที่เราจะให้แสดงผลที่หน้าจอ เราก็ให้เก็บไว้ในแฟ้มใดแฟ้มหนึ่ง โดยวิธีที่ง่ายๆ สำหรับแฟ้มเล็กๆ (หรือแม้กระทั่งแฟ้มใหญ่ๆ ก็ยังคงใช้วิธีนี้ได้เช่นกัน)

# echo #\!/bin/sh > pkgs
# echo set -x >> pkgs
# echo >> pkgs

หากท่านอยากทราบว่า ข้อความดังกล่าว จะมีอยู่ในแฟ้ม pkgs หรือไม่ ก็สามารถทำได้ง่ายๆ ด้วยคำสั่ง cat โดยมิถึงกับต้องเรียก editor แต่อย่างไรเลย

# cat  pkgs

อนึ่ง หากท่านต้องการให้แฟ้มนี้ สามารถ ทำงานได้ ท่านต้องกำหนด permission ให้เป็น +x ด้วยคำสั่ง chmod ดังนี้

# chmod   +x  pkgs

เพียงเท่านี้ ท่านก็สามารถสร้าง shell ขึ้นมาใช้งานได้ง่ายๆ
ทิ้งท้ายด้วยคำถามชวนคิด จากเอกสารเรื่อง ports(1) ขอถามว่าคำสั่ง find ... นั้น แท้จริงทำอะไร ใครตอบได้ถูกต้อง มีรางวัลให้ก็แล้วกัน

View My Stats