Friday, December 24, 2010

ฉบับที่ี่ 16 (ธันวาคม 2010)

Merry X’mas and Happy New Year 2011


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


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


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


สุดท้ายนี้ ผมและทีมงานขออำนวยพรให้เพื่อนสมาชิกและผู้อ่านทุกท่าน จงประสบแต่ความสุขความเจริญทั้งในหน้าที่การงานและชีวิตครอบครัว แล้วพบกันใหม่ในปี 2011 ครับ

Highlight

สเต็มเซลล์…เพื่อนรัก

วีระพงษ์ ประสงค์จีน


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


ทำความรู้จักกับสเต็มเซลล์


คนเราเติบโตมาจากเซลล์เดี่ยวซึ่งเกิดจากการปฏิสนธิระหว่างเซลล์ไข่ (egg) จากแม่กับสเปิร์ม (sperm) จากพ่อ ซึ่งเรียกเซลล์ที่ผสมกันแล้วนี้ว่าเป็นไซโกต (zygote) จากนั้นจะแบ่งตัวโดยวิธีไมโตซิสสร้างเซลล์ลูกอีกหลายรอบจนได้เป็นบลาสโตซิทส์ (blastocyst) ที่เป็นก้อนกลวงๆ และมีกลุ่มเซลล์เกาะอยู่ภายในที่เรียกว่า inner cell mass กลุ่มเซลล์นี้จะเจริญไปเป็นเซลล์ชนิดต่างๆ เพื่อสร้างร่างกายให้สมบูรณ์ แต่ถ้าหากเราแยกกลุ่มเซลล์ที่ว่านี้ออกมาเลี้ยงในห้องปฏิบัติการ เราก็จะเรียกว่าเซลล์ต้นกำเนิดจากตัวอ่อน (embryonic stem cell) ซึ่งมีความสามารถเฉกเช่นเดียวกันในการเจริญเปลี่ยนแปลงไปเป็นเซลล์ทุกชนิดในร่างกายมนุษย์เมื่อได้รับการกระตุ้นและการยับยั้งที่เหมาะสม เมื่อคนเราโตขึ้นก็ยังคงมีกลุ่มเซลล์ต้นกำเนิด (adult stem cell) อยู่ในอวัยวะต่างๆ เช่น สมอง ผิวหนัง ฟัน ไขกระดูก กล้ามเนื้อ ตับ ตับอ่อน ทางเดินอาหาร และอวัยวะสืบพันธุ์ เป็นต้น ทำหน้าที่สร้างเซลล์ชนิดต่างๆ ทดแทนและซ่อมแซมเนื้อเยื่อเมื่อร่างกายเกิดการบาดเจ็บ โดยเซลล์ต้นกำเนิดอาศัยอยู่ร่วมกับเซลล์ชนิดอื่นๆ และสารภายนอกเซลล์ (extracellular matrix) ในบริเวณที่เรียกว่า “บ้านของเซลล์ต้นกำเนิด” (stem cell niche)


นอกจากเซลล์ต้นกำเนิดที่เกิดตามธรรมชาติดังกล่าวข้างต้นแล้ว นักวิทยาศาสตร์ยังสามารถสร้างเซลล์ต้นกำเนิดประเภทอื่นๆ ได้อีก เช่น เซลล์ต้นกำเนิดที่เกิดจากการเหนี่ยวนำ (induced pluripotent stem cells; iPS) เซลล์ต้นกำเนิดที่เกิดจากการถ่ายโอนนิวเคลียส (somatic cell nuclear transfer cells; SCNT cell) และเซลล์ต้นกำเนิดที่เกิดจากการกระตุ้นให้เกิดพาธีโนเจเนซีส (pathenogenic stem cell) เป็นต้น ดังนั้นเซลล์ต้นกำเนิด (stem cell) จึงเป็นเซลล์ที่มีความสามารถในการแบ่งตัวได้เป็นเวลานานเพื่อสร้างเซลล์ลูกที่มีการเจริญพัฒนาไปเป็นเซลล์ที่ทำหน้าที่จำเพาะ เช่น เซลล์เม็ดเลือด เซลล์ประสาท และเซลล์กระดูก เป็นต้น


เซลล์ต้นกำเนิดเป็นเซลล์ที่ยังไม่มีการพัฒนาไปทำหน้าที่จำเพาะ (undifferentiated cell) สามารถเข้าวัฏจักรเซลล์ (cell cycle) เพื่อแบ่งตัวให้เซลล์ลูก (daughter cell) ได้ไม่จำกัด โดยเมื่อเซลล์ต้นกำเนิดแบ่งตัว (cell division) โดยวิธีไมโตซิสจากเซลล์ต้นกำเนิด 1 เซลล์ สร้างเซลล์ลูกได้ 2 เซลล์ จะสร้างเซลล์ต้นกำเนิดอย่างน้อย 1 เซลล์ที่มีคุณสมบัติเหมือนกับเซลล์เริ่มต้นที่ยังคงคุณสมบัติของเซลล์ต้นกำเนิด ดังคุณสมบัติที่เรียกว่า self-renewal นอกจากนี้เซลล์ต้นกำเนิดยังสามารถเจริญพัฒนา (differentiation) ไปเป็นเซลล์กึ่งกลางที่เรียกว่า progenitor cells และในท้ายที่สุดพัฒนาไปเป็นเซลล์ที่จำเพาะได้หลายชนิด (terminal differentiation) ยกตัวอย่างเช่น สเต็มเซลล์ประสาท (neural stem cell) ที่อยู่ในสมองและไขสันหลังจะแบ่งตัวให้เซลล์ที่พัฒนาไปเป็น neuronal progenitor cell และ glial progenitor cell ซึ่งจะพัฒนาไปเป็นเซลล์ประสาท (neuron) และเซลล์เกลีย (glial cell) ตามลำดับ แต่อย่างไรก็ตาม คำว่า “เซลล์ต้นกำเนิด” ที่ประชาชนเข้าใจนั้นหมายรวมถึงทั้งเซลล์ต้นกำเนิดจริงๆ ที่ภาษาอังกฤษเรียกว่า สเต็มเซลล์ (stem cell) และโปรเจนิเตอร์เซลล์ (progenitor cell) เนื่องจากในปัจจุบันเป็นการยากที่จะระบุชนิดของเซลล์ ดังนั้นในที่นี้ผู้เขียนจึงใช้คำว่าเซลล์ต้นกำเนิดตามความหมายที่ใช้เรียกเซลล์ทั้งสองประเภทรวมกัน


แต่ละวันคุณได้ดูแลสเต็มเซลล์ในตัวของคุณไหม


จากที่ได้กล่าวไว้ในตอนต้นว่าเซลล์ต้นกำเนิดนั้นอยู่กับเราไปตลอดชีวิต พฤติกรรมในชีวิตประจำวัน เช่น การออกกำลังกาย การกินอาหาร สารเคมีที่สัมผัส และสิ่งแวดล้อมรอบตัวเรา เป็นต้น จึงสามารถปรับเปลี่ยนการทำงานของเซลล์ต้นกำเนิดในร่างกายของเราได้ เซลล์ต้นกำเนิดไม่ได้เดินทางไปมาระหว่างอวัยวะในร่างกายของคนคนหนึ่งเท่านั้น แต่มันยังสามารถเดินทางเชื่อมสายสัมพันธ์ระหว่างแม่กับลูกได้อีกด้วย เซลล์ต้นกำเนิดในแม่อาจจะเดินทางเข้าไปในตัวของลูกที่อยู่ในครรภ์ และเซลล์ต้นกำเนิดของลูกก็อาจเดินทางเข้าสูกระแสเลือดแม่ (fetomaternal stem cell trafficking) เซลล์ต้นกำเนิดดังกล่าวนี้อาจทำหน้าที่บางอย่าง เช่น การทำงานของระบบภูมิคุ้มกันและการซ่อมแซมเนื้อเยื่อ เป็นต้น


โครงสร้างและการทำงานของสมองคนเราไม่ได้คงที่หากแต่มีความสามารถในการปรับเปลี่ยนตลอดเวลาตามการเรียนรู้และพฤติกรรมที่เราสร้างขึ้นจากอิทธิพลของสิ่งแวดล้อมที่เราเรียกว่า ความยืดหยุ่นของสมอง (brain plasticity) เซลล์ต้นกำเนิดประสาทมีบทบาทเป็นผู้ผลิตเซลล์ในระบบประสาท (neural cell) คือ เซลล์ประสาท (neuron) และเซลล์เกลีย (glial cell) เซลล์ประสาทใหม่ที่เกิดจากเซลล์ต้นกำเนิดจะต้องเคลื่อนตัวไปยังตำแหน่งสมองที่จำเพาะและเจริญพัฒนาไปเป็นเซลล์ประสาทที่สามารถทำงานเชื่อมต่อกับกลุ่มเซลล์ประสาทที่มีอยู่เดิม ในที่นี้เรียกว่าการเกิดใหม่ของเซลล์ประสาท (neurogenesis) ซึ่งเหตุการณ์ดังกล่าวนี้ทำให้เซลล์ประสาทหลายพันเซลล์เกิดขึ้นใหม่ในบริเวณสมองบางส่วนเป็นประจำทุกวัน มีปัจจัยหลายอย่างที่มีผลต่อการสร้างเซลล์ประสาทใหม่ เช่น การออกกำลังกาย การเรียนรู้ที่อาศัยสมองส่วนฮิปโปแคมปัส การจำกัดอาหาร เป็นต้น นอกจากนี้ยังพบว่าความเครียด อาการซึมเศร้า พยาธิสภาพในสมอง และอายุที่เพิ่มขึ้น มีตัวการสำคัญที่ยับยั้งการสร้างเซลล์ประสาทใหม่ กระบวนการสร้างเซลล์ประสาทใหม่ในสมองผู้ใหญ่นั้นสามารถเกิดได้จนกระทั่งวาระสุดท้ายของชีวิต เซลล์ต้นกำเนิดประสาทที่อยู่ในสมองสามารถแบ่งตัวและสร้างเซลล์ประสาทใหม่ให้กับสมองอย่างน้อยสองบริเวณคือออลแฟกตอรีบัลบ์และฮิปโปแคมปัส สมองทั้งสองบริเวณมีหน้าที่เกี่ยวข้องกับกระบวนการถอดรหัสและจัดเก็บข้อมูลให้กลายเป็นความจำ


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


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


เซลล์ต้นกำเนิดกับเวชศาสตร์ฟื้นฟูสภาวะเสื่อม


ความรู้เกี่ยวกับเซลล์ต้นกำเนิดได้เปิดประตูไปสู่แนวคิดการส่งเสริมสุขภาพและการรักษาทางการแพทย์แนวใหม่ที่เรียกว่า เวชศาสตร์ฟื้นฟูสภาวะเสื่อม หรือการแพทย์เชิงฟื้นฟู (regenerative medicine) ซึ่งหมายถึง การแพทย์แขนงใหม่ที่มุ่งเน้นการทดแทน การซ่อมเสริม การฟื้นฟูเซลล์ เนื้อเยื่อ หรืออวัยวะที่เสื่อมถอยหรือได้รับบาดเจ็บทั้งจากความแก่ตามธรรมชาติและโรคภัยไข้เจ็บ เทคโนโลยีสมัยใหม่ได้ก้าวหน้าไปมาก จากที่เราเคยกินยาเม็ดหรือยาน้ำ (เภสัชภัณฑ์ทั่วไป) ในปัจจุบันเราก็ได้มีการพัฒนาเป็นการบำบัดด้วยยีน (gene therapy) เนื้อเยื่อที่ผ่านการดัดแปลง (engineered tissue) การรักษาโดยใช้เซลล์ต้นกำเนิดและเซลล์ที่ได้จากเซลล์ต้นกำเนิด (stem cell-based therapy) รวมทั้งเวชศาสตร์นาโน (nanomedicine) เป็นต้น ประเทศในแถบยุโรปเรียกผลิตภัณฑ์ยากลุ่มนี้โดยรวมว่า Advanced Therapy Medicinal Products (ยา ATMPs)


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


1. การปลูกถ่ายเซลล์ต้นกำเนิดหรือเซลล์ลูกหลานจากภายนอกร่างกาย (exogenous stem cell transplantation, stem cell replacement therapy) ซึ่งอาจปลูกถ่ายร่วมกับสารเคมี โพลิเมอร์ หรืออุปกรณ์ทางการแพทย์อื่นๆ ที่ช่วยส่งเสริมการทำงานของเซลล์ดังกล่าว


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


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


2. การระดมพลเซลล์ต้นกำเนิดที่มีอยู่แล้วในร่างกายเรา (endogenous stem cell recruitment therapy) หมายถึง การหาวิธีการใช้ประโยชน์จากเซลล์ต้นกำเนิดที่เป็นสมบัติอยู่ในร่างกายเราอยู่แล้ว โดยใช้ตัวกระตุ้น (stimulus) ที่เหมาะสม ไม่ว่าจะเป็นการกินยา ใช้เครื่องมือทางการแพทย์ หรือวิธีการอื่นๆ เช่น การวิ่งออกกำลังกายช่วยเพิ่มปริมาณเซลล์ต้นกำเนิดชนิด endothelial progenitor cells, bone-marrow stem cells และเซลล์ชนิดอื่นๆ ในกระแสเลือด ซึ่งส่งผลดีต่อหลอดเลือดและกล้ามเนื้อหัวใจ


  • ตัวกระตุ้นบางประเภทสามารถกระตุ้นให้เซลล์ต้นกำเนิดแบ่งตัว หรือออกเดินทางไปยังบริเวณที่ต้องการ เช่น ยา G-CSF ที่ใช้ในการกระตุ้นให้เซลล์ต้นกำเนิดในไขกระดูกออกเดินทางไปตามกระแสเลือดเพื่อไปยังบริเวณสมองที่เกิดหลอดเลือดตีบตันจนเกิดโรคสมองขาดเลือด (ischemic stroke) เป็นต้น
  • การวิ่ง สารอาหารบางชนิด และยารักษาโรคปัจจุบันบางอย่างก็ยังช่วยเพิ่มการแบ่งตัวของเซลล์ต้นกำเนิดเพื่อสร้างเซลล์ประสาทใหม่ในสมองของคนเราและเดินทางไปยังบริเวณที่สมองเกิดการบาดเจ็บ เป็นต้น ซึ่งอาจจะมีผลต่อการรักษาโรคบางประเภทได้
  • ตัวกระตุ้นบางประเภทสามารถเพิ่มระดับเซลล์ต้นกำเนิดในอวัยวะต่างๆ เพื่อชะลอกระบวนการแก่ของเซลล์ หรือซ่อมแซมเนื้อเยื่อที่เกิดการบาดเจ็บ หรือเพิ่มขีดความสามารถของมนุษย์ให้สูงขึ้น (human enhancement)


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

Python Programing

ทำงานกับไฟล์ด้วย Python ตอนที่ 2: การอ่านไฟล์

ประพัฒน์ สุริยผล


งานทาง bioinformatics ส่วนใหญ่มักจะหนีไม่พ้นการทำงานกับไฟล์ โดยมากจะเป็น text file คือไฟล์ตัวอักษรที่เราสามารถอ่านได้ การอ่านไฟล์ใน python โดยพื้นฐาน จะมีคำสั่งที่เกี่ยวข้องอยู่ 3 คำสั่งคือ


1. read

2. readline

3. readlines


คำสั่งที่ผมเคยใช้มากที่สุดคือคำสั่ง readlines เนื่องจากผมทำงานกับ text file เป็นหลัก เพราะฉะนั้นผมขออนุญาตเริ่มต้นที่คำสั่งนี้ก่อนนะครับ

เราจะสร้าง text file หนึ่งชื่อว่า test.txt ด้วย code ดังด้านล่างครับ


f = open('test.txt', 'w')

f.write('1. this is the first line\n')

f.write('2. this is the 2nd line\n')

f.write('3. this is the last line\n')

f.close()


ถ้าเรารัน code สั้นๆ นี้ เราก็จะได้ไฟล์ test.txt คราวนี้ เราจะลองมาอ่านไฟล์นี้กันครับ


f = open('test.txt')

for line in f.readlines():

....print line


สิ่งที่ใหม่สำหรับ code สั้นๆ นี้คือเราใช้ for loop กับข้อมูลที่ได้กลับมาจากการเรียก method readlines


คงพอจำกันได้นะครับว่า ตัวแปร f ที่เราได้คืนมาจากการเรียกใช้ function open คือ object ซึ่งเราจะเรียกใช้ method ของ object นั้นได้ เริ่มต้นด้วยตัวแปร object ตามด้วยจุด และชื่อ method (ขอให้พยายามแยก function กับ method ให้ชินนะครับ ในช่วงแรก ผมจะเขียนให้สังเกตเป็นระยะ)


method readlines จะคืนค่าเป็น list ของแต่ละบรรทัดของไฟล์ object ซึ่งเมื่อเราใส่ไว้ใน for loop ก็จะเท่ากับว่าเราวนลูปแต่ละบรรทัดของข้อมูลในไฟล์


เพราะฉะนั้น เมื่อเรารันคำสั่งข้างต้นเราจะได้ผลลัพธ์คือ

1. this is the first line


2. this is the 2nd line

3. this is the last line


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


Strip method


วิธีการแก้ไขมีได้หลายวิธี วิธีที่ผมใช้บ่อย เพราะส่วนใหญ่แล้วเรามักจะไม่ต้องการตัวขึ้นบรรทัดใหม่ท้ายบรรทัดอยู่แล้ว ผมจึงใช้คำสั่ง strip() ช่วยครับ


f = open('test.txt')

for line in f.readlines():

....print line.strip()


จะเห็นว่า strip ก็เป็น method เหมือนกัน เป็น method ของ string object ตัวแปร line ที่เป็น string นั้น อันที่จริงแล้วก็คือ object อันหนึ่ง เพราะฉะนั้นเราจะไม่เรียก function strip(line) แต่เราจะเรียก method strip ของ line โดยเขียนเป็น line.strip() แทน


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


ที่เราเรียก whitespace ก็เพราะว่าเว้นวรรค tab และตัวขึ้นบรรทัดใหม่ จะไม่แสดงอะไรบนหน้าจอ เห็นเป็นพื้นที่ว่างๆ จึงเรียกว่า whitespace ครับ และ method ที่สะดวกที่สุดที่จะกำจัด whitespace ทิ้งก็คือ strip


แต่ถ้าหากเราไม่ต้องการลบ whitespace ที่อยู่ด้านหน้า เราต้องการกำจัดเฉพาะที่อยู่ด้านหลัง เราก็สามารถใช้ method rstrip() แทนได้ครับ ตัว r เล็กที่อยู่ด้านหน้า ก็หมายถึง right คือตัดเฉพาะด้านขวาเท่านั้น และคงจะเดากันได้ว่า python มี method lstrip() สำหรับตัด white space เฉพาะด้านซ้าย หรือด้านหน้าบรรทัดให้เราด้วยเช่นกัน เลือกใช้กันตามสะดวกครับ

f = open('test.txt')

for line in f.readlines():

....print line.rstrip()


ผมถูกถามว่า แล้วถ้าไม่ต้องการเปลี่ยนแปลงค่า line เรามีทางที่จะบังคับให้ print ไม่ขึ้นบรรทัดใหม่ได้ไหม คำตอบคือได้ครับ ถ้าหากเราปิดท้ายคำสั่งด้วยสัญลักษณ์ comma (,)


f = open('test.txt')

for line in f.readlines():

....print line,


เมื่อเราปิดท้ายด้วย comma คำสั่ง print จะไม่พิมพ์ตัวขึ้นบรรทัดใหม่ให้ครับ


ถ้าหากท่านผู้อ่านช่างสังเกตนิดนึง จะเห็นผมบอกตอนต้นบทความว่า ผมเคยใช้ method readlines เพราะด้วย python เวอร์ชันใหม่ๆ ที่ออกมา ผมแทบจะไม่ได้ใช้คำสั่ง readlines แล้วครับ เพราะเราสามารถใช้ loop ใน file object ได้เลยดังนี้ครับ


f = open('test.txt')

for line in f:

....print line,


อ่านง่ายและสะดวกดีนะครับ code จะอ่านได้ว่าสำหรับแต่ละบรรทัดในไฟล์นี้ เราต้องการพิมพ์แต่ละบรรทัดออกมา ตรงไม่ตรงมา แต่ถ้าหากคุณใช้ python เวอร์ชันเก่าหน่อย อาจจะใช้วิธีนี้ไม่ได้เท่านั้นเอง แต่วิธีนี้เป็นวิธีแนะนำครับ เพราะนอกจากสั้น อ่านสะดวก และยังทำงานได้รวดเร็วด้วยครับ


Readline method


แล้ว method readline จะใช้เมื่อไหร่ อันที่จริงคงเดาจากชื่อ method ได้ไม่ยากว่า คำสั่งนี้จะอ่านบรรทัดจาก file object มาครั้งละบรรทัด (ไม่มี s ด้านหลัง แสดงว่าเป็นเอกพจน์)

ถ้าเราใช้คำสั่ง


f = open('test.txt')

line = f.readline()

print line.strip()


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


f = open('test.txt')

line = f.readline()

while line != '':

....print lne.strip()

....line = f.readline()


อาจจะดูสับสนเล็กน้อย เรามาลองไล่ code ดูกันสักนิดครับ เรามาเริ่มต้นที่บรรทัดที่ 3 ที่เป็นลูปหลักของ code ลักษณะการคิดคือเราต้องการวนลูปไปเรื่อยๆ จนกว่าจะไม่เหลือบรรทัดในไฟล์แล้ว ซึ่งเมื่อไหร่ที่ไม่มีบรรทัดเหลือแล้ว method readline() จะคืนค่า empty string กลับมา นี่คือเหตุผลที่เราใส่เงื่อนไขใน while ว่า ให้วนลูปไปเรื่อยๆ ตราบใดที่ line ไม่ใช่ empty string


ในลูป เราจะพิมพ์บรรทัดที่อ่านมาได้ และที่สำคัญมากที่สุดคือ อย่าลืมอ่านบรรทัดต่อไป ตามที่ผมเขียนไว้ในบรรทัดที่ 5 นะครับ เพราะจุดนี้เป็นจุดที่ผิดพลาดกันบ่อยที่สุด เวลาเขียนลูป while เพราะหากเราไม่อ่านค่าบรรทัดถัดไปมาว่าในตัวแปร line ตัวแปร line ก็จะไม่เปลี่ยนแปลง ลูปนี้ก็จะวนไม่มีที่สิ้นสุดครับ จะวนพิมพ์บรรทัดนั้นซ้ำไปไม่รู้จบ เหล่านี้คือสาระสำคัญของ while loop บรรทัดที่ 3-5


บรรทัดที่ 2 จำเป็นเพราะเงื่อนไขของ while อยู่ที่บรรทัดที่ 3 ส่วนการอ่านบรรทัดถัดไปอยู่ที่บรรทัดที่ 5 เพราะฉะนั้นเราจำเป็นที่จะต้องอ่านบรรทัดแรกเข้ามาไว้ในตัวแปร line ก่อน ถ้าหากไฟล์นั้น ไม่มีข้อมูลใดๆ เลย ตัวแปรก็จะเป็น empty string ตั้งแต่บรรทัดที่ 2 และไม่เข้าเงื่อนไขเข้าลูปในบรรทัดที่ 3 จึงไม่มีการพิมพ์อะไรออกมา


ถ้าหากไฟล์นั้นมีข้อมูลอยู่บรรทัดเดียว ข้อมูลนั้นก็จะอ่านมาอยู่ในตัวแปร line และผ่านเงื่อนไขของ while loop เข้าไปพิมพ์ข้อมูลในบรรทัดที่ 4 และอ่านบรรทัดถัดไปใน code บรรทัดที่ 5 ซึ่งจะทำให้ค่า line กลายเป็น empty string เพราะไฟล์นั้นมีข้อมูลอยู่บรรทัดเดียว และเราได้อ่านบรรทัดนั้นไปแล้วใน code บรรทัดที่ 2


แต่ถ้าหากไฟล์นั้นมีข้อมูลหลายบรรทัด ก็จะวนลูปไปจนกว่าจนหมด ได้ค่า empty string อยู่ในตัวแปร line


หวังว่าคงไล่ code ได้ไม่ยากเย็นนะครับ


จุดสำคัญในการเขียน while loop


เมื่อไหร่ ที่เราต้องการเขียน while loop ซึ่งที่ต้องตรวจสอบอยู่เสมอคือ เงื่อนไขของ while loop มีโอกาสเป็นเท็จ เพื่อให้หลุดออกจาก loop ได้หรือไม่ ซึ่งในกรณีนี้ จะเตือนให้เราไม่ลืมเขียน code บรรทัดที่ 5 เพื่ออ่านบรรทัดถัดไปเข้ามา และให้ตรวจสอบว่า ตัวแปรที่อยู่ในเงื่อนไขของ while loop นั้น มีอยู่ก่อนเข้า while loop ไหม เพราะหากไม่มี python จะแสดง NameError มาว่า ตัวแปรนั้นยังไม่ถูกกำหนดมาก่อน (is not defined)


เมื่อการใช้ readline อ่านไฟล์ทั้งไฟล์ยุ่งยากกว่า readlines() หรือ for loop in file object อย่างนี้แล้ว เมื่อไหร่เราถึงจะมีที่ใช้ readline คำตอบคือเมื่อเราไม่ต้องการอ่านไฟล์ทั้งไฟล์ อย่างเช่น เราต้องการอ่านเฉพาะ 10 บรรทัดแรก เราสามารถเขียนได้ดังนี้


f = open('test.txt')

first_ten_lines = []

for i in range(10):

....first_ten_lines.append(f.readline())


พอเห็น code อย่างนี้แล้ว อดไม่ได้ที่จะเตือนให้ผู้อ่านนึกถึง list comprehensions ของ python ที่จะทำให้ code ของเราสั้นและกระชับเป็นดังนี้


f = open('test.txt')

first_ten_lines = [f.readline() for i in range(10)]


Read method


มาถึงคำสั่งสุดท้ายคือ read ถ้าเราจะมาลองเดากัน คำสั่งนี้ก็คืออ่านข้อมูลมา แบบที่ไม่เป็นบรรทัด เพราะไม่มีคำว่า line ต่อท้าย เพราะฉะนั้น ข้อมูลทั้งหมดของไฟล์จะถูกอ่านรวดเดียวเลยดังนี้ครับ


f = open('test.txt')

all_data = f.read()


ข้อมูลทั้ง 3 บรรทัดจะมาอยู่ใน all_data ส่วนใหญ่แล้วคำสั่ง read จะใช้สำหรับการอ่านไฟล์ที่ไม่ใช่ text file เช่นไฟล์รูปภาพต่างๆ คำสั่ง read อาจจะมีที่ใช้ที่อื่นอีก แม้แต่กับ text file แต่พบไม่บ่อย และมักไม่ได้ใช้ในงานทาง bioinformatics ทั่วไป จึงขอไม่กล่าวถึงในครั้งนี้


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

Linux Command Line

โครงสร้างระบบไฟล์ใน Linux (ตอนที่ 1)

ณฐพล พรพุทธพงศ์


สวัสดีครับ กลับมาพบกันอีกครั้งนะครับ หลังจากที่เราได้ทำความรู้จักกับระบบปฏิบัติการลินุกซ์ และระบบ command line กันอย่างคร่าวๆ แล้ว ในฉบับนี้เรามาทำความรู้จักกับโครงสร้างของระบบไฟล์ในลินุกซ์ กันต่อนะครับ


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


หลายคนคงสงสัยแล้วแอดมินคือใครและมาจากที่ไหนกันละ โดยเริ่มแรกระบบ Unix ซึ่งเป็นต้นแบบของลินุกซ์นั้นสร้างขึ้นบนเครื่องที่ใหญ่มาก เพื่อรับรองระบบผู้ใช้หลายคน (multi-users) ซึ่งแต่ละคนจะมีชื่อเข้าใช้และสิทธิในการใช้งานไม่เหมือนกัน และสามารถเข้าใช้งานจากที่ใดก็ได้ ที่สามารถเชื่อมต่อกับเครือข่ายได้ ผู้ใช้ทั่วไปจะใช้งานระบบได้แต่จะถูกห้ามไม่ให้สามารถแก้ไขค่าต่างๆ ของเครื่องและของระบบได้เพื่อความปลอดภัย จึงต้องผู้ที่มีความรู้ เชี่ยวชาญเข้ามาดูแลระบบนั่นเอง โดยทั่วไปผู้ดูแลระบบจะได้ชื่อเข้าใช้งานเป็น root ด้วย ซึ่งรายละเอียดเกี่ยวกับระบบผู้ใช้งาน จะกล่าวโดยละเอียดในตอนหน้านะครับ ในปัจจุบันลิกนุกซ์ถูกพัฒนาขึ้นจนสามารถนำมาติดตั้งบนเครื่องส่วนตัวได้ ซึ่งผู้ดูแลระบบบนเครื่องเราก็คือผู้ติดตั้งระบบบนเครื่องเรานั่นเอง


คงต้องมาเริ่มเนื้อหาในบทนี้กันแล้วนะครับ อย่างที่สัญญากันไว้ในบทที่แล้ว เราจะมาลองใช้ command line มาท่องระบบไฟล์บนเครื่องของเรากันนะครับ เริ่มเปิด Terminal กันเลยครับ หวังว่าทุกคนคงยังไม่ลืมนะครับ เมื่อเราเปิดขึ้นมาแล้วจะพบเครื่องหมายพร้อม $ (dollar sign) แล้วมีข้อความอยู่ข้างหน้าเครื่องหมาย พร้อมทั้ง cursor ซึ่งกระพริบอยู่ข้างหลังรอคอยคำสั่งจากผู้ใช้อยู่ ซึ่งมีอธิบายอย่างคร่าวๆ ไว้ในฉบับที่แล้ว แต่วันนี้เราจะมาเจาะลึกในรายละเอียดกัน ซึ่งข้อความที่อยู่ข้างหน้านั้นจะต่างกันออกไปขึ้นอยู่กับการตั้งค่าของระบบ จะมีหรือไม่มีก็ได้ หากผู้ใช้เลือกติดตั้งระบบปฏิบัติการที่เป็นที่นิยมมักจะตั้งค่าไว้คล้ายๆ กัน โดยทั่วไปจะแสดงถึงข้อมูลของผู้ใช้ ในที่นี้คือ natapol ซึ่งเป็นชื่อผู้ใช้ของผู้เขียนเอง ถัดจากนั้นเป็นเครื่องหมาย @ (at sign) ซึ่งมีความหมายคล้ายกับคำว่า "อยู่ที่" ถัดจากนั้นจะเป็นชื่อเครื่อง ซึ่งในที่นี้คือ oo-banana ซึ่งเป็นชื่อเครื่องที่ถูกตั้งไว้ขณะติดตั้งระบบ ถัดจากนั้นจะเป็นการบอกตำแหน่งของเราในระบบไฟล์ขณะที่ ในที่นี้คือ เครื่องหมาย ~ () ซึ่งเป็นเครื่องหมายแทน home ของผู้ใช้นั่นเอง home จะเปรียบเสมือนบ้านของผู้ใช้เมื่อผู้ใช้เข้าระบบ (ในที่นี้หมายถึงเปิด Terminal) ผู้ใช้ทุกคนจะไปเริ่มต้นที่นี่เช่นเดียวกันทุกคน ใน home นั้นผู้ใช้มีสิทธิ์เต็มที่ที่จะทำอะไรก็ได้ ติดตั้งอะไรก็ได้ แต่ไม่สามารถเข้าไปดู home ของคนอื่นได้ครับ บ้านของใคร ใครก็หวงครับ ผู้ใช้ทุกคนจะมีโฟลเดอร์ส่วนตัวนี่โดยมีชื่อเดียวกับชื่อผู้ใช้ในที่นี้จะเป็นชื่อผู้ใช้ของผู้เขียน และส่วนใหญ่จะอยู่ภายไต้โฟลเดอร์ที่ชื่อ home อีกที แต่ตอนที่เปิด Terminal ขึ้นมานั้นระบบแสดงเป็นสัญลักษณ์ ~ ระบุว่าเราอยู่ที่ home เท่านั้น แต่จริงๆ แล้วเราอยู่ที่ไหนกันแน่ละครับ เนื่องจากผู้ดูแลระบบสมารถกำหนดตำแหน่งของ home ได้เองดังนั้นในลินุกซ์บางระบบจะมีตำแหน่งของ home ที่แตกต่างกันได้ ในกรณีนี้มีคำสั่งที่ช่วยเราได้ (ในที่สุดก็เริ่มตำสั่งแรกเสียที) คือ คำสั่ง pwd ซึ่งย่อมาจาก (Print Working Directory) เมื่อพิมพ์คำสั่งแล้วเคาะ ระบบจะแสดงตำแหน่งที่อยู่ปัจจุบันของเรามาให้เห็นดังในตัวอย่าง คือ


[natapol@oo-banana ~]$ pwd

/home/natapol


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


[natapol@oo-banana ~]$ ls

text1.txt


คำสั่งนี้จะสั่งให้ระบบรายงานชื่อไฟล์ออกมา ในตัวอย่างจะมีเพียงไฟล์เดียวคือ text1.txt แต่บางคนอาจจะไม่มีอะไรรายงานออกมา ยังไม่ต้องตกใจ นั่นแสดงว่าบ้านของผู้อ่านยังสะอาด และ ว่างอยู่นั่นเอง แต่จริงๆ แล้วมันไม่ได้ว่างอย่างที่คิดหรอกครับ ลองมาพิมพ์คำสั่งนี้ดูนะครับ


[natapol@oo-banana ~]$ ls -la

total 692

drwxr-xr-x 52 natapol natapol 4096 Dec 20 16:18 .

drwxr-xr-x 3 root root 4096 Aug 24 10:51 ..

-rw------- 1 natapol natapol 10053 Dec 17 11:00 .bash_history

-rw-r--r-- 1 natapol natapol 220 Aug 24 10:51 .bash_logout

-rw-r--r-- 1 natapol natapol 3184 Aug 24 10:51 .bashrc

drwx------ 2 natapol natapol 4096 Oct 27 21:35 text1.txt


หลังคำสั่ง ls เราเรียกส่วนนี้ว่า option หรือ parameter ก็ได้ครับ option ในลินุกซ์มักจะขึ้นต้นด้วย (-) เสมอ บางทีก็เป็น (–-) ถ้าเป็น option แบบยาวในที่นี้เราใส่สอง option ต่อกัน คือ –l และ –a


-l จะสั่งให้ระบบรายงานชื่อและข้อมูลของไฟล์ที่มีอยู่ในโฟลเดอร์ปัจจุบัน แบบยาว

-a จะสั่งให้ระบบรายงานชื่อและข้อมูลของไฟล์ทั้งหมดออกมาโดยไม่มีข้อยกเว้น


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


ผู้อ่านคงจะสังเกตุเห็นว่ามีไฟล์แปลกๆ ถูกรายงานเพิ่มมาอีกดังในตัวอย่าง ซึ่ง ไฟล์ที่เป็น . และ .. ซึ่งเป็นไฟล์สมมติของระบบ ซึ่ง . จะหมายถึงโฟลเดอร์ปัจจุบัน ส่วน .. หมายถึงโฟล์เดอร์ที่อยู่สูงขึ้นไป ซึ่งก็คือ home นั่นเอง ผู้อ่านสามารถใช้สัญลักษณ์ทั้งสองนี้ในการอ้างถึงโฟลเดอร์ในคำสั่งอื่นได้ ส่วนไฟล์ที่เพิ่มมาอีกสามไฟล์นั้นจะขึ้นต้นด้วยจุดซึ่งระบบจะถือว่าเป็นไฟล์ที่ถูกซ่อนไว้ซึ่งส่วนใหญ่เป็นไฟล์ของระบบไม่ต้องการให้แสดงออกมาด้วยคำสั่งปกติ นอกจากนี้ ls ยังมี option อื่นๆ อีกมากมายผู้อ่านสามารถเรียกให้แสดงขึ้นมาได้ด้วยการเติม --help หลังคำสั่ง ซึ่งเกือบทุกคำสั่งจะใช้ option เดียวกันนี้ในการแสดงข้อความช่วยเหลือของคำสั่ง

[natapol@oo-banana ~]$ ls --help

Usage: ls [OPTION]... [FILE]...

List information about the FILEs (the current directory by default).

Sort entries alphabetically if none of -cftuvSUX nor --sort.

Mandatory arguments to long options are mandatory for short options too.

-a, --all do not ignore entries starting with .

-A, --almost-all do not list implied . and ..

--author with -l, print the author of each file

-b, --escape print C-style escapes for nongraphic characters

--block-size=SIZE use SIZE-byte blocks. See SIZE format below

.

.

.


ในตัวอย่างจะแสดง option ต่างๆ ของคำสั่ง ls ซึ่งผมได้ตัดมาเฉพาะส่วนแรกๆ เท่านั้น ผู้อ่านลองใช้ option อื่นของคำสั่งนี้ดูนะครับ ยังมี option อื่นที่น่าสนใจอีกมาก ถ้าหากต้องการคู่มือใช้งานซึ่งจะให้รายละเอียดที่มากกว่าข้อความช่วยเหลือละก็ ลินุกซ์ก็มีคำสั่งแสดงคู่มือขึ้นมาโดยใช้คำสั่ง man (manual) ตามด้วยคำสั่งที่เราต้องการในที่นี้คือ ls ครับดังในตัวอย่าง


[natapol@oo-banana ~]$ man ls


หลังจากกด แล้วระบบจะแสดงคู่มือหลายหน้าขึ้นมาผู้อ่านสามารเลื่อนไปมาได้ด้วยปุ่มขึ้น และลง หรือถ้าต้องการเลื่อนทีละหน้าก็ใช้ page up และ down หรือ space bar ได้ครับ


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