วันอังคารที่ 15 พฤศจิกายน พ.ศ. 2559

8 ระดับของโปรแกรมเมอร์

คุณเคยได้รับคำถามสัมภาษณ์อันคลาสสิคไหม, “คุณจะเห็นตัวคุณอยู่ที่ไหนในอีก 5 ปี?” เมื่อถูกถาม ผมจะนึกย้อนกลับไปที่ วิดีโอ Twisted Sister ตอนหนึ่งในปี 1984 เสมอ


ผมอยากจะให้คุณบอกกับผม -ไม่, ดีกว่านั้น, บอกกับทุกคนในชั้นเรียน

คุณอยากจะทำอะไรกับชีวิตของคุณ?

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

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

คำถาม “คุณจะเห็นตัวคุณอยู่ที่ไหนในอีก 5 ปี” เป็นประเภทรวดเร็ว และผู้คนส่วนมากจะตอบกลับไปที่ผู้สัมภาษณ์อย่างรวดเร็วในแบบที่เตรียมตัวมา ก่อนแล้ว แต่มันแสดงให้เห็นความกังวลที่ลึกซึ้งยิ่งกว่า: อะไรคือเส้นทางอาชีพที่มีศักยภาพสำหรับผู้พัฒนาซอฟต์แวร์? แน่นอน, เราทำสิ่งพวกนี้ เพราะเรารักมัน, และเราก็ โชคดีมากในความคิดนั้น แต่คุณจะยังคงนั่งลงเขียนโปรแกรมในตอนที่คุณอายุ 50? ในตอนที่คุณอายุ 60? อะไรคือผลลัพธ์ของอาชีพที่ดีที่สุดที่เป็นไปได้สำหรับโปรแกรมเมอร์ที่มีความ ต้องการจะเป็น..อืม, โปรแกรมเมอร์?

จะเกิดอะไรขึ้นถ้าผมบอกคุณ, โดยไม่จริงจังเท่าไหร่, ว่ามันมี 8 ระดับของโปรแกรมเมอร์?

โปรแกรมเมอร์ระดับตำนาน (Dead Programmer)
นี่เป็นระดับที่สูงสุด โค้ดของคุณยังคงอยู่ข้ามผ่านความตายของคุณ คุณเป็นส่วนหนึ่งของประวัติศาสตร์ที่ได้รับการบันทึกของวงการคอมพิวเตอร์ โปรแกรมเมอร์คนอื่นๆ ศึกษางานและงานเขียนของคุณ คุณอาจชนะรางวัล Turing, หรือได้เขียนงานที่มีอิทธิพล หรือสร้างหนึ่งหรือสองสิ่งที่เป็นรากฐานของเทคโนโลยีที่ส่งผลต่อการเขียน โปรแกรมที่เรารู้จักกัน คุณไม่ได้มีแค่บทความ wikipedia ของตัวคุณเองเท่านั้น – มันมีเว็บไซต์ที่อุทิศแก่การศึกษาชีวิตและงานของคุณด้วย
โปรแกรมเมอร์น้อยคนที่ได้ไปถึงระดับนี้ในช่วงชีวิตของเขา
ตัวอย่าง: Dijkstra, Knuth, Kay

โปรแกรมเมอร์ที่ประสบความสำเร็จ (Successful Programmer)
โปรแกรมเมอร์ที่เป็นทั้งคนที่เป็นที่รู้จักกันดี และได้สร้างธุรกิจทั้งหมด หรืออาจขนาดทั้งอุตสาหกรรม – ด้วยโค้ดของพวกเขาเอง โปรแกรมเมอร์เหล่านี้ได้ให้ อิสระที่แท้จริง แก่ตัวพวกเขาเอง: อิสระที่พวกเขาจะตัดสินใจเลือกงานที่พวกเขาอยากทำเอง และการแบ่งปันอิสระนั้นแก่เพื่อนร่วมอาชีพ
นี่เป็นระดับที่โปรแกรมส่วนใหญ่ทุกคนควรอยากที่จะเป็น การที่จะได้ระดับนี้ขึ้นอยู่กับทักษะทางธุรกิจมากกว่าการเขียนโปรแกรม
ตัวอย่าง: Gates, Carmack, DHH

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

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

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

โปรแกรมเมอร์สมัครเล่น (Amateur Programmer)

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

โปรแกรมเมอร์ที่ไม่เป็นที่รู้จัก (Unknown Programmer)
โปรแกรมเมอร์ทั่วๆไป เก่ง แต่ไม่ถึงกับโดดเด่น อาจจะทำงานให้กับบริษัทขนาดใหญ่, บริษัทนิรนาม MegaCorp มันเป็นแค่งาน ไม่ใช่ทั้งชีวิตของพวกเขา ไม่มีอะไรผิดเกี่ยวกับสิ่งนั้น, เช่นกัน

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

ระดับพวกนี้ไม่ได้จริงจังโดยสิ้นเชิง ไม่ใช่ว่าโปรแกรมเมอร์ทุกคนจะต้องมองหาสิ่งเดียวกันในอาชีพ แต่มันชีให้เห็นสิ่งที่โปรแกรมเมอร์สามารถเป็นได้ใน 10 ปี, 20 ปี, หรือ 30 ปี – บางทีอาจจะทั้งชีวิต โปรแกรมเมอร์ที่มีชื่อเสียง คนไหนที่คุณนับถือที่สุด? สิ่งใดที่พวกเขาทำแล้วได้รับความนับถือจากคุณ?

ในประโยคสั้นๆ, คุณอยากจะทำอะไรกับชีวิตของคุณ?



ที่มา http://xenon.kmi.tl/?p=24
ที่มา http://www.nonvisual.com/2014/08/50.html

ต้นฉบับ: http://www.codinghorror.com/blog/2009/04/the-eight-levels-of-programmers.html

โดย Jeff Atwood @ Coding Horror

คู่มือคอมมานด์ไลน์บนลีนุกซ์ ฉบับมือใหม่ ตอนที่ 2 (จบ)

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

สามารคลิกดูตอนที่ 1 คู่มือคอมมานด์ไลน์บน Linux ฉบับมือใหม่ ได้ที่นี่เลยครับ 

ดังนั้น ภาคสองที่กล่าวต่อไปนี้ เราจะเจาะลึกลงไปเกี่ยวกับเรื่องข้อมูลพื้นฐานของไฟล์ หรือ Metadata, สิทธิ์การเข้าถึงหรือ Permission, Timestamps, รวมถึงการใช้ทูลหรือโปรแกรมต่างๆ ที่มีการใช้งานบ่อย เช่น tee และ Vim เป็นต้น
  1. วิธีเรียกดูข้อมูลพื้นฐานของไฟล์หรือ Metadata เช่น ขนาด, Permission เป็นต้น
ใช้คำสั่ง ls เหมือนเดิม แต่ให้ใส่ออพชั่น l (มาจาก long) เพิ่มเพื่อให้แสดง Metadata ของแต่ละไฟล์ในการแสดงผลด้วย ตัวอย่างดังรูปด้านล่าง
แต่ละบรรทัดจะระบุข้อมูล Metadata ที่เกี่ยวข้องกับไฟล์หรือไดเรกทอรีย่อยนั้นๆ ที่อยู่ในไดเรกทอรีปัจจุบัน ซึ่งข้อมูลแต่ละบรรทัดนี้สามารถแบ่งได้ออกเป็น 8 ส่วน คือ
d  rwx  r-x  r-x    3   himanshu himanshu 4096 Jul 3 14:26 Desktop
d                      คือชนิดไฟล์/ไดเรกทอรี
rwx                   เป็นสิทธิ์การเข้าถึงสำหรับเจ้าของไฟล์
r-x                    เป็นสิทธิ์การเข้าถึงสำหรับกลุ่มผู้ใช้เดียวกัน
r-x                    กลุ่มสุดท้าย เป็นสิทธิ์การเข้าถึงสำหรับผู้ใช้อื่นทุกคน
3                      จำนวน Hard Link (อย่าเพิ่งสนใจตอนนี้)
himanshu         คำแรก แทนชื่อเจ้าของไฟล์
himanshu         คำถัดมา แทนชื่อกลุ่มผู้ใช้ที่ไฟล์นี้อยู่
4096                ขนาดของไฟล์
Jul 3 14:26       คือวันเวลาที่มีการเปลี่ยนแปลงไฟล์หรือไดเรกทอรีนั้นล่าสุด
Desktop           คือชื่อไฟล์หรือไดเรกทอรีนั้นๆ
โดยตัวอักษรตัวแรกที่แสดงประเภทของไฟล์ มีความหมายต่างๆ เช่น d คือไดเรกทอรี,  คือไฟล์ปกติ, s คือไฟล์ซ็อกเก็ต, l คือไฟล์ลิงค์หรือชอร์ทคัทไปไฟล์อื่น เป็นต้น
ตัวอักษรอีก 9 ตัวถัดมาแสดงถึงสิทธิ์การเข้าถึง หรือ Permission ของผู้ใช้กลุ่มต่างๆ โดยตัวอักษร r คือ read (อ่านข้อมูลได้), w คือ write (เขียนข้อมูลได้), และ x คือ execute (สั่งรันการทำงานได้) ซึ่งแบ่งกลุ่ม Permission แต่ละกลุ่มเป็นตัวอักษรกลุ่มละตัว เรียงกันเป็น rwx ถ้าสิทธิ์ไหนไม่ให้สิทธิ์นั้น ก็จะเขียนเป็นเครื่องหมาย – แทน เช่น จากตัวอย่างข้างต้น
ตัวอักษรสามตัวกลุ่มแรก rwx ซึ่งเป็น Permission สำหรับเจ้าของไฟล์/ไดเรกทอรี ระบุว่ามีสิทธิ์ทั้งการอ่าน เขียน และรันการทำงาน
ตัวอักษรกลุ่มถัดมา r-x ซึ่งเป็น Permission ของผู้ใช้ในกลุ่มเดียวกัน ระบุให้มีสิทธิ์เฉพาะการอ่านข้อมูล และรันการทำงาน แต่ไม่มีสิทธิ์แก้ไขเนื้อหา
เช่นเดียวกับตัวอักษรกลุ่มสุดท้าย r-x ซึ่งเป็น Permission ของผู้ใช้รายอื่นๆ ที่ได้สิทธิ์เหมือนกับผู้ใช้ในกลุ่มข้างต้น
เทคนิคพิเศษ: ใส่ออพชั่น –h เพิ่มคู่กับ –l (สามารถเขียนติดกันเป็น –lh) เพื่อแสดงขนาดไฟล์ในหน่วยที่อ่านง่ายขึ้น (เช่น ถ้าขนาดไฟล์ใหญ่เป็นหลัก KB หรือ MB ก็จะย่อตัวเลขโดยใส่ K หรือ M กำกับให้อ่านง่าย เป็นต้น)
  1. เราจะเปลี่ยน Permission ของไฟล์ได้อย่างไร?
เราใช้คำสั่ง chmod ในการเปลี่ยนแปลง Permission ของไฟล์ที่ต้องการ โดยสามารถใส่อากิวเมนต์ที่แทนลักษณะ Permission ได้สองแบบ ทั้งแบบที่ใช้ตัวอักษรเพื่อกำหนดให้ผู้ใช้ทีละกลุ่ม กับแบบที่กำหนดด้วยตัวเลขที่แทน Permission สำหรับผู้ใช้ทั้งสามกลุ่มเสร็จทีเดียว สำหรับแบบแรกนั้น เราจะใช้ตัวอักษรและเครื่องหมายกำกับดังนี้
a มาจาก all แทนกลุ่มผู้ใช้ทุกคน (ทั้งกลุ่มเจ้าของ, กลุ่มผู้ใช้เดียวกัน, และผู้ใช้รายอื่นๆ)
u มาจาก owner แทนเจ้าของไฟล์หรือไดเรกทอรี
g มาจาก group แทนกลุ่มผู้ใช้
o มาจาก others แทนผู้ใช้รายอื่นๆ
+ แทนการเพิ่มสิทธิ์
 แทนการลบสิทธิ์
= แทนการกำหนดสิทธิ์ (พร้อมกันทั้ง r w x)
ตัวอย่างเช่น คำสั่ง chmod u=rwx somefile จะเป็นการกำหนด Permission ให้ทำได้ทั้งการอ่าน, เขียน, และรันไฟล์ สำหรับเจ้าของไฟล์ บนไฟล์ที่ชื่อ somefile นี้
คำสั่ง chmod o+w somefile จะเป็นการเพิ่มสิทธิ์การแก้ไขข้อมูลให้แก่ผู้ใช้รายอื่นๆ
chmod g-r somefile เป็นการดึงสิทธิ์การอ่านข้อมูลออกจากกลุ่มผู้ใช้ที่ไฟล์นี้อยู่ภายใน
chmod a+x somefile เป็นการให้สิทธิ์การรันการทำงานให้แก่ผู้ใช้ทุกคน (ทุกกลุ่ม) เป็นต้น
โดยที่ถ้าเราไม่ระบุกลุ่มผู้ใช้ เช่น การสั่ง chmod +x somefile หรือ chmod –r somefile จะเหมือนกับการกำกับกลุ่มผู้ใช้เป็น a คือ มีผลกับกลุ่มผู้ใช้ทุกกลุ่ม
ส่วนการกำหนด Permission แบบที่สอง คือการกำหนดด้วยตัวเลข โดยใช้ตัวเลขแทนสิทธิ์ประเภทต่างๆ ได้แก่
สิทธิ์ r แทนด้วยเลข 4
สิทธิ์ w แทนด้วยเลข 2
สิทธิ์ x แทนด้วยเลข 1
ซึ่งตัวเลขที่กำหนดเป็นอากิวเมนต์ จะเป็นสามหลัก ที่แต่ละหลักหมายถึงสิทธิ์สำหรับกลุ่มผู้ใช้แต่ละกลุ่ม คือ เจ้าของ, กลุ่มผู้ใช้, และผู้ใช้รายอื่นตามลำดับ ตัวเลขแต่ละหลักนี้มาจากการบวกรวมกันระหว่าง 4+2+1 ตามสิทธิ์ที่จะกำหนดให้กับผู้ใช้กลุ่มนั้นๆ
ตัวอย่างเช่น การสั่งคำสั่ง chmod 761 somefile จะเป็นการกำหนดสิทธิ์ rwx, rw, และ r ให้แก่เจ้าของ, กลุ่มผู้ใช้, และผู้ใช้รายอื่นตามลำดับ ทั้งนี้เนื่องจาก
7 = 4+2+1 = rwx
6 = 4+2+0 = rx-
1 = 0+0+1 = –x

  1. เราจะเปลี่ยนข้อมูล Timestamp ของไฟล์ได้อย่างไร?
ให้ใช้คำสั่ง touch เพื่อแก้ไข Timestamp ของไฟล์ ซึ่งข้อมูล Timestamp หรือเวลากำกับในที่นี้มีอยู่สามประเภทได้แก่ เวลาที่มีการเข้าถึงล่าสุด (Access time), เวลาที่มีการแก้ไขเนื้อหาไฟล์ล่าสุด (Modification time), และเวลาที่มีการเปลี่ยนข้อมูลกำกับไฟล์ล่าสุด (Change time) ซึ่งเวลาประเภทที่สามนี้หมายถึงเวลาที่มีการเปลี่ยนข้อมูลจำเพาะเกี่ยวกับไฟล์หรือ Inode รวมถึงข้อมูล Metadata ล่าสุด นอกจากนี้เราสามารถใช้คำสั่ง stat เพื่อเรียกดู Timestamp ทั้งสามประเภทของไฟล์ที่ต้องการได้ดังรูปด้านล่าง
ในการเปลี่ยนเวลา Access time ให้เป็นเวลา ณ ปัจจุบัน ให้ใช้คำสั่ง touch พร้อมออพชั่น –a เช่น touch -a somefile เช่นเดียวกับการเปลี่ยน Modification time ให้เป็นเวลาปัจจุบัน ให้ใช้ออพชั่น –m แทน
ส่วนการเปลี่ยน Timestamp โดยระบุเวลาที่นอกเหนือจากเวลาในปัจจุบันนั้น ให้ใช้ออพชั่นต่างๆ ได้แก่
 -t เพื่อระบุอากิวเมนต์เป็นตัวเลขติดกันที่ใช้แทน ปี(4 หลัก)-เดือน(2 หลัก)-วัน(2 หลัก)-เวลาในหน่วยชั่วโมง(2 หลัก)-เวลาหน่วยนาที(2 หลัก)-(คั่นด้วย .)-เวลาในหน่วยวินาที(2 หลัก) เช่น touch –t 201407020900.01 –a somefile จะเป็นการเปลี่ยนเวลา Access time ของไฟล์ชื่อ  Somefile เป็น 2014/07/02 09:00:01
 d ใช้กำหนดเวลาในลักษณะที่เข้าใจได้ง่าย ดังเช่น
touch -d “2013-01-10 10:00:07” -a somefile
touch -d “next sunday” -m somefile
touch -d “3 hours ago” -a somefile
  1. เราจะดูประเภทของไฟล์ได้อย่างไร?
เราจะใช้คำสั่ง file ในการเรียกดูประเภทของไฟล์ ดังแสดงในตัวอย่างตามรูปด้านล่างนั้น คำสั่งนี้ต้องการอากิวเมนต์เป็นชื่อไฟล์ที่ต้องการเรียกดูประเภท นอกจากนี้ยังสามารถใช้ไวลด์การ์ด * ในชื่อไฟล์ได้ เช่นการเรียนดูประเภทของไฟล์ของทุกไฟล์บนไดเรกทอรีปัจจุบันจะใช้คำสั่ง file *
  1. หลังดาวน์ไฟล์ที่รันตัวเองได้ (Executable) แล้ว ทำไมถึงสั่งรันไฟล์ดังกล่าวไม่ได้?
บนลีนุกซ์ (และระบบตระกูล *nix อื่นๆ) การที่ไฟล์นั้นๆ จะสั่งรันตัวเองได้หรือไม่ ขึ้นอยู่กับ Permission เท่านั้น ไม่ได้ขึ้นกับสกุลไฟล์หรือเนื้อหาภายในไฟล์แต่อย่างใด นั่นคือเมื่อดาวน์โหลดไฟล์ลงมาที่เครื่อง ระบบไม่ทราบ Permission ของไฟล์ตั้งแต่แรก จึงตั้งค่า Permission เป็นแบบดีฟอลต์ให้ (สามารถตั้งค่า Permission ดีฟอลต์ของไฟล์ที่ถูกสร้างใหม่บนระบบได้ด้วยคำสั่ง umask)
ซึ่งถ้าผู้ใช้ต้องการจะสั่งรันไฟล์ที่เพิ่งดาวน์โหลดลงมาที่เครื่อง ก็จำเป็นต้องให้ Permission ให้สามารถสั่งรันได้ด้วยคำสั่ง chmod ตามที่เขียนไว้ในข้อ 14 ข้างต้น การที่ต้องมากำหนด Permission ด้วยตัวเองกับไฟล์ใหม่ทุกครั้งมีข้อดีตรงที่สามารถป้องกันไวรัส, เวิร์ม, และมัลแวร์อื่นๆ ไม่ให้ติดเชื้อบนระบบโดยที่คุณไม่รู้ตัวได้
  1. จะแสดงจำนวนบรรทัด, คำ, และขนาดข้อมูลในหน่วยไบต์ของแต่ละไฟล์ได้อย่างไร?
เราใช้คำสั่ง wc ในการแสดงจำนวนบรรทัด, คำ, และไบต์ข้อมูลที่นับได้จากไฟล์เป้าหมาย ตัวอย่างเช่น
จากการแสดงผลข้างต้นนั้น
เลข 5 แทนจำนวนบรรทัด
เลข 12 แทนจำนวนคำ
เลข 52 แทนจำนวนไบต์ข้อมูล
นอกจากนี้คุณยังสามารถใช้ออพชั่นต่างๆ เช่น -l, -w, และ -c เพื่อให้ระบุแค่จำนวนบรรทัด, จำนวนคำ, หรือไบต์ข้อมูล ตามลำดับในการแสดงผลได้
  1. วิธีเรียกดูปริมาณการใช้พื้นที่ดิสก์ของไฟล์และไดเรกทอรีต่างๆ
คุณสามารถใช้คำสั่ง du เพื่อแสดงปริมาณการใช้พื้นที่บนดิสก์ของไฟล์และไดเรกทอรีที่ต้องการได้ ดังตัวอย่างต่อไปนี้
หมายเหตุ – ออพชั่น -h นี้ ใช้แสดงปริมาณพื้นที่บนดิสก์ในหน่วยที่มนุษย์เข้าใจง่าย (Human format) เช่น หน่วย K, M
สำหรับคนที่สงสัยว่าพื้นที่ดิสก์ที่ใช้ต่างจากขนาดไฟล์อย่างไรนั้น นั่นคือข้อมูลที่ได้จากคำสั่ง du เป็นขนาดของพื้นที่บนดิสก์ที่ไฟล์นั้นๆ ต้องการจริงๆ ซึ่งต่างจากขนาดไฟล์ดั้งเดิมที่ได้จากสั่ง ls -l ซึ่งเหตุผลที่แตกต่างกันนี้อาจเป็นได้ทั้งเพราะ Slack Space (การกินที่คร่อมหน่วยพื้นที่ย่อยที่สุดบนระบบ) หรือ Sparse File (การกระจายข้อมูลของตัวเองบนดิสก์ ให้สามารถเข้าถึงหรือทำงานได้สะดวกขึ้น)
แต่ถ้าต้องการดูขนาดพื้นที่ที่ใช้ของไดเรกทอรีเป้าหมาย รวมทั้งไดเรกทอรีย่อยภายในนั้นทั้งหมดด้วย ให้ใช้ออพชั่น -s (มาจาก Sum) แต่ถ้าพิมพ์ออพชั่นเป็นตัวพิมพ์ใหญ่ –S จะเป็นการแยกแสดงแต่ละขนาดแจงมาให้ ส่วนการเรียกดูพื้นที่ดิสก์ที่ว่างเหลืออยู่บนระบบ ที่อยู่บนไดเรกทอรีหรือไฟล์เป้าหมายนั้น ให้ใช้คำสั่ง df แทน
เช่นเดียวกับกรณีข้างต้น ออพชั่น –h ใช้แสดงหน่วยขนาดพื้นที่ในหน่วยที่มนุษย์เข้าใจง่าย คำสั่ง df นี้ ถ้าสั่งโดยไม่ใส่ชื่อไฟล์หรือไดเรกทอรีใดๆ เป็นอากิวเมนต์แล้ว จะแสดงผลเป็นพื้นที่ดิสก์ที่มีใช้ทั้งหมดบนระบบแทน
  1. จะเปรียบเทียบความแตกต่างระหว่างสองไฟล์ได้อย่างไร?
เราใช้คำสั่ง diff ในการเทียบกันระหว่างไฟล์สองไฟล์ โดยคำสั่งนี้จะตรวจสอบเนื้อหาของทั้งสองไฟล์ แล้วแสดงผลให้คุณรู้ว่า จำเป็นต้องแก้ไขเนื้อหาในไฟล์อย่างไรเพื่อให้ทั้งสองไฟล์นี้มีเนื้อหาตรงกันทั้งหมด คำสั่งนี้ต้องการชื่อไฟล์ทั้งสองไฟล์เป็นอากิวเมนต์ ลองดูตัวอย่างตามรูปด้านล่างก่อนครับ
คำสั่ง cat (มาจาก concatenate หรือการจัดเรียงข้อมูลให้เป็นระเบียบเพื่อแสดงผล) ตามด้วยชื่อไฟล์นี้ เป็นคำสั่งสำหรับแสดงเนื้อหาภายในไฟล์เป้าหมาย ดังนั้นรูปด้านบนจึงแสดงเนื้อหาของไฟล์ somefile และ anotherfile ตามลำดับ ซึ่งจะเห็นความแตกต่างตรงบรรทัดสุดท้าย ดังนั้นเมื่อเราใช้คำสั่ง diff กับสองไฟล์ดังกล่าว จะได้การแสดงผลดังรูปด้านล่าง
5c5 แปลว่า บรรทัดที่ 5 ของไฟล์ somefile (ไฟล์ที่ป้อนเป็นอากิวเมนต์แรก) มีการเปลี่ยนแปลง (changed) เป็นตามบรรทัดที่ 5 ของไฟล์ anotherfile (ไฟล์ที่ป้อนเป็นอากิวเมนต์ที่สอง) โดยเนื้อหาในบรรทัดที่กล่าวถึงในไฟล์แรกจะขึ้นต้นด้วยเครื่องหมาย < ขณะที่บรรทัดของไฟล์ที่สองที่อ้างถึงจะขึ้นต้นด้วยเครื่องหมาย >
หมายเหตุ – นอกจากตัวอักษร c ที่ระบุถึงข้อความที่มีการเปลี่ยนแปลงแล้ว ยังมีตัวอักษรอื่นอีกได้แก่
a มาจาก added หมายถึงการที่มีบรรทัดเนื้อหาเพิ่มขึ้นในไฟล์ที่สอง
d มาจาก deleted หมายถึงบรรทัดที่ถูกลบไปในไฟล์ที่สอง
คุณสามารถศึกษาคำสั่ง diff เพิ่มเติมนี้ได้จาก http://www.linuxdevcenter.com/pub/a/linux/lpt/28_01.html
  1. เราจะเรียกดูเนื้อหาเฉพาะช่วงบรรทัดแรกๆ และบรรทัดท้ายๆ ของไฟล์ได้อย่างไร?
ใช้คำสั่ง head และ tail เพื่อเรียกดูข้อความไม่กี่บรรทัดช่วงเริ่มต้น และช่วงท้ายไฟล์ที่ต้องการตามลำดับ ซึ่งมีประโยชน์เวลาที่คุณต้องการส่องดูเนื้อหาคร่าวๆ ตัวอย่างเช่น คำสั่ง head –n2 somefile จะแสดงเนื้อหา 2 บรรทัดแรกของไฟล์ที่ชื่อ somefile ขณะที่คำสั่ง tail –n3 somefile จะแสดงเนื้อหา 3 บรรทัดสุดท้ายของไฟล์
ไม่เพียงแค่จำนวนบรรทัดเท่านั้น คุณยังสามารถเรียกดูเป็นจำนวนไบต์ที่ต้องการได้ด้วย โดยใช้ออพชั่น –c แทน –n แต่ปกติแล้ว ถ้าไม่ได้ใส่ออพชั่นกำหนดจำนวนบรรทัดหรือไบต์อย่างเจาะจง คำสั่งทั้งสองข้างต้นจะแสดงเอาต์พุตอยู่ที่ 10 บรรทัดโดยดีฟอลต์
  1. จะจัดเก็บเนื้อหาเอาต์พุตของคำสั่งลงไฟล์ พร้อมกับให้แสดงเนื้อหาดังกล่าวพร้อมกันได้อย่างไร?
ปกติเราใช้คำสั่ง tee (มาจากท่อรูปตัว T ที่เหมือนส่งเอาต์พุตที่ได้รับแยกออกไปสองทาง ทั้งจัดเก็บและแสดงต่อ) เพื่อเขียนข้อมูลที่เป็นเอาต์พุตจากคำสั่งอื่น (รับมาผ่านไปป์ไลน์หรือเครื่องหมาย | ) รวมทั้งจัดแสดงเนื้อหาเอาต์พุตให้เห็น (หรือส่งต่อเอาต์พุตนี้ไปยังคำสั่งอื่นถัดไปผ่านไปป์ไลน์ก็ได้เช่นกัน) ตัวอย่างเช่น คำสั่ง ls | tee ls-dump เมื่อสั่งแล้ว นอกจากจะมีการแสดงเนื้อหาเอาต์พุตของคำสั่ง ls ให้เห็นผ่านหน้าคอนโซลตามปกติแล้ว ยังมีการเขียนเอาต์พุตดังกล่าวลงไฟล์ที่ชื่อว่า ls-dump อีกด้วย
คำสั่ง tee นี้ นอกจากนิยมใช้ในการจัดเก็บและวิเคราะห์ log ต่างๆ ไปพร้อมกันแล้ว ยังสามารถเร่งความเร็วในการทำงานของคุณด้วยการลดขั้นตอนได้ด้วย เช่น การใช้คำสั่ง echo “Linux command line” | tee file1 > file2 จะเป็นการเขียนเนื้อหาข้อความในเครื่องหมายคำพูด บันทึกลงเป็นไฟล์ชื่อ file1 และ file2 ได้พร้อมกัน เป็นต้น
  1. การบีบอัดหรือขยายไฟล์ที่ถูกบีบอัดนี้ทำอย่างไรบ้าง?
การทำงานบนลีนุกซ์จำเป็นต้องเกี่ยวข้องกับไฟล์ที่บีบอัดไว้หรือ Archive ไม่ว่าจะเป็นสกุล .tar, .tar.gz, bz2เป็นต้น ซึ่งการสร้างไฟล์บีบอัด หรือการขยายไฟล์กลับสำหรับไฟล์ตระกูลข้างต้นนี้ เราจะใช้คำสั่งเดียวกันคือ คำสั่ง tar
ตัวอย่างเช่น คำสั่ง tar –cvf practice.tar practice/ จะเป็นการสั่งบีบอัดโฟลเดอร์ practice ลงในไฟล์สกุล .tar ที่ชื่อ practice.tar โดยออพชั่นต่างๆ มีความหมายดังนี้
c มาจาก create เพื่อให้คำสั่ง tar รู้ว่าครั้งนี้เป็นการสร้างไฟล์บีบอัดใหม่
-v มาจาก view สำหรับให้แสดงรายการไฟล์ต่างๆ ที่ถูกบีบอัดลงมา
f มาจาก filename เป็นการระบุชื่อไฟล์บีบอัดที่ต้องการ
สำหรับการขยายไฟล์ที่ถูกบีบอัดในสกุล .tar อย่างในตัวอย่างข้างต้นนั้น จะใช้คำสั่ง tar –xvf practice.tarโดยออพชั่น –x (มาจาก extract) เป็นการระบุให้คำสั่ง tar ขยายไฟล์ออกมากจากไฟล์ที่ถูกบีบอัด ซึ่งคำสั่งข้างต้นนี้จะเป็นการขยายไฟล์แตกออกมาอยู่ที่ไดเรกทอรีปัจจุบัน ซึ่งคุณสามารถใช้ออพชั่น –C เพิ่มสำหรับระบุไดเรกทอรีเป้าหมายในการแตกไฟล์อื่นๆ ได้
ส่วนการสร้างไฟล์บีบอัดในสกุล .tar.gz และ .tar.bz2 นั้น ให้ใส่ออพชั่น –z หรือ –j เพิ่มในคำสั่งตามลำดับ ส่วนกรณีขยายแตกไฟล์สกุลเหล่านี้ก็สามารถใช้คำสั่ง tar แบบเดียวกับตัวอย่างในย่อหน้าที่แล้วได้ คุณสามารถใช้ออพชั่น –t (พร้อมกับ v และ f คือระบุเป็น -tvf) ในกรณีที่แค่อยากดูรายการไฟล์ในไฟล์บีบอัดที่ต้องการเท่านั้น
เทคนิค – ถ้าต้องการทำงานกับไฟล์บีบอัดตระกูล .zip ให้ใช้คำสั่ง zip แทน
  1. ถ้าต้องการแก้ไขเนื้อหาไฟล์โดยใช้โปรแกรม Vim ใช้งานอย่างไรได้บ้าง?
ทูลแก้ไขเนื้อหาไฟล์ชื่อ Vim นี้เป็นตัวแก้ไขไฟล์ข้อความบนคอมมานด์ไลน์ที่มีประสิทธิภาพมากที่สุด แต่ก็ใช้ปุ่มลัดหลายอย่างที่ควรเรียนรู้ไว้ แต่ในการใช้งานเบื้องต้นนั้นค่อนข้างเรียบง่ายและสะดวกสบายมากครับ
ในการเปิดไฟล์เข้ามาในตัวแก้ไขนี้ ให้ใช้คำสั่ง vim ที่ใช้ชื่อไฟล์เป็นอากิวเมนต์ เช่น พิมพ์คำสั่งว่า vim textfile ซึ่งถ้าไฟล์ชื่อ textfile ไม่มีอยู่ในไดเรกทอรีที่กำหนด (หรือไดเรกทอรีปัจจุบันกรณีไม่ได้ใส่พาธเต็ม) โปรแกรมก็จะสร้างไฟล์ใหม่ในชื่อดังกล่าวแทนการเปิดไฟล์เดิม
มีการทำงานใน Vim อยู่สองโหมดคือ โหมด Command และโหมด Insert โดยตัวอก้ไขไฟล์จะเปิดไฟล์ในโหลด Command โดยดีฟอลต์ ซึ่งคุณสามารถเลื่อนเคอเซอร์โดยใช้ปุ่มลูกศรบนคีย์บอร์ดได้ แต่ไม่สามารถแก้ไขเนื้อหาได้จนกว่าจะกดปุ่ม i (มาจาก insert) เพื่อเปิดโหมด Insert ดังในรูป
เมื่อแก้ไขเนื้อหาไฟล์เสร็จเรียบร้อยแล้ว คุณต้องกดปุ่ม ESC เพื่อออกจากโหมด Insert มาอยู่ในโหมด Command เหมือนเดิม ก่อนที่จะกดบันทึกไฟล์ได้

การจะบันทึกไฟล์ ให้พิมพ์ :w แล้วกด Enter

สำหรับการออกจากโปรแกรม ให้พิมพ์ว่า :q แล้วกด Enter หรือจะพิมพ์เป็น :wq เพื่อบันทึกไฟล์แล้วออกจากโปรแกรมพร้อมกัน
หมายเหตุ – การคัดลอกหรือลบเนื้อหาทั้งบรรทัดนั้น ให้เปลี่ยนออกมาอยู่ในโหมด Command แล้วเลื่อนเคอเซอร์มาอยู่บนบรรทัดที่ต้องการ จากนั้นพิมพ์ว่า yy หรือ dd ตามลำดับ สำหรับการปล่อยเนื้อหาหรือ Paste นั้น ให้กดปุ่ม p ในโหมดคอมมานด์เช่นกัน
บทสรุป
แต่ละคำสั่งที่กล่าวถึงในบทความนี้ มีการใช้งานที่ลงลึกและซับซ้อนในแต่ละคำสั่งอีกมากมาย แต่เนื้อหาที่กล่าวถึงจะทำให้คุณใช้งานเบื้องต้นได้อย่างครอบคลุมพอสมควร คุณสามารถใช้คำสั่ง man ในการเรียนรู้เพิ่มเติมในคำสั่งต่างๆ ครับผม

คู่มือคอมมานด์ไลน์บน Linux ฉบับมือใหม่

คุณยังมีความคิดที่ว่า คอมมานด์ไลน์เป็นเหมือนร่องรอยอารยธรรมในอดีต เป็นวิธีการใช้คอมพิวเตอร์แบบล้าสมัยอยู่ไหมครับ? คุณจะเปลี่ยนความคิดเมื่อมาลองใช้ลีนุกซ์ เพราะคอมมานด์ไลน์ที่แท้จริงเป็นเครื่องมือที่ยืดหยุ่นและทรงพลังอย่างยิ่ง ยกตัวอย่างเช่น การค้นหาไฟล์ .tmp ทั้งหมดในไดเรกทอรี (และไดเรกทอรีย่อย) แล้วลบทิ้งนั้น ถ้าทำงานผ่านยูเซอร์อินเทอร์เฟซแบบกราฟิกที่ทันสมัยในปัจจุบันอาจต้องกดสั่งอยู่หลายขั้นตอน ขณะที่สามารถจบการทำงานได้ในคำสั่งบรรทัดเดียวถ้าทำผ่านคอมมานด์ไลน์
ดังนั้นบทความนี้ผมจะสอนพื้นฐานของการใช้คอมมานด์ไลน์บนลีนุกซ์ ทั้งการสืบค้นในแต่ละไดเรกทอรี, การจัดการไฟล์และไดเรกทอรี, และการค้นหาข้อมูลต่างๆ เป็นต้น
หมายเหตุ: บทความนี้เคยถูกตีพิมพ์ครั้งแรกเมื่อวันที่ 19 มิถุนายน 2557 ซึ่งครั้งนี้นำกลับมาปัดฝุ่นลงให้ใหม่อีกครั้งนั้น เนื่องจากปัจจุบันพื้นฐานการเรียนรู้เกี่ยวกับลีนุกซ์แบบนี้ยังคงใช้ได้อยู่เสมอ ถือเป็นส่วนหนึ่งของกิจกรรม #ThrowbackThursday ของเรา
  1. ไดเรกทอรี Home ในลีนุกซ์คืออะไร?
ลีนุกซ์เป็นระบบปฏิบัติการแบบมัลติยูเซอร์ นั่นคือผู้ใช้หลายคนสามารถเข้าถึงโอเอสเดียวกันนี้พร้อมกันได้ โดยผู้ใช้แต่ละคนจะถูกจัดสรรไดเรกทอรีสำหรับจัดเก็บไฟล์ส่วนตัว ซึ่งโฟลเดอร์เหล่านั้นเรียกว่าโฟลเดอร์ Home ของผู้ใช้รายนั้นๆ
ไดเรกทอรี Home ของผู้ใช้แต่ละคนจะอยู่ภายใต้ไดเรกทอรีใหญ่ที่ชื่อ Home เช่น ชื่อผู้เขียนคือ Himanshu ไดเรกทอรี Home ของผู้เขียนจึงอยู่ที่ /home/himanshu สังเกตได้ว่า ชื่อไดเรกทอรี Home ของผู้ใช้ จะตรงกับชื่อล็อกอิน ซึ่งถ้าคุณเคยใช้วินโดวส์ ก็สามารถเปรียบเทียบได้กับไดเรกทอรีของผู้ใช้แต่ละรายที่อยู่ใน C:\Documents and Settings หรือ C:\Users เป็นต้น
ผู้ใช้จะมีสิทธิ์ควบคุมเหนือไดเรกทอรี Home ของตัวเองได้อย่างสมบูรณ์ โดยรวมถึงไดเรกทอรีย่อยภายในทั้งหมดด้วย นั่นคือสามารถบริหารจัดการไฟล์และไดเรกทอรีทั้งสร้างใหม่หรือลบ, ติดตั้งโปรแกรม, หรือการกระทำอื่นๆ ภายในโฮมไดเรกทอรีของตัวเองได้อย่างอิสระ
  1. จะดูไดเรกทอรีที่กำลังใช้งานอยู่ได้อย่างไร?
ทุกครั้งที่คุณเปิดเชลล์คอมมานด์ไลน์ในลีนุกซ์ จะเริ่มต้นที่โฮมไดเรกทอรีของคุณก่อนเสมอ ซึ่งถือเป็นไดเรกทอรีที่ใช้ทำงานอยู่ปัจจุบัน คุณสามารถเปลี่ยนไปอยู่บนไดเรกทอรีอื่นๆ ได้ ปกติคุณสามารถใช้คำสั่ง pwd เพื่อตรวจสอบพาธเต็มๆ ของไดเรกทอรีปัจจุบันได้ตลอด
ตัวอย่างเช่น:
การแสดงผลของคำสั่ง pwd ดังที่แสดงในรูปข้างต้น ชี้ว่าปัจจุบันผู้ใช้กำลังอยู่บนไดเรกทอรีที่ชื่อ Pictures ซึ่งอยู่ภายใต้ไดเรกทอรีชื่อ himanshu ซึ่งก็เป็นไดเรกทอรีย่อยในไดเรกทอรีชื่อ home อีกทอดหนึ่ง ในที่นี้ ข้อความ himanshu@ubuntu:~/Pictures$ เป็นพร็อมพ์รับคำสั่ง
  1. วิธีเปลี่ยนไปอยู่อีกไดเรกทอรีหนึ่ง
ให้ใช้คำสั่ง cd ในการเคลื่อนย้ายไปอยู่ไดเรกทอรีต่างๆ ในระบบไฟล์ลีนุกซ์ ซึ่งคำสั่งนี้ต้องตามด้วยข้อมูลป้อนเข้าหรืออากิวเมนต์ ที่ไม่ว่าจะเป็นชื่อไดเรกทอรีหรือพาธเต็มๆ แล้วแต่ว่าไดเรกทอรีที่เราต้องการไปอยู่ตรงไหน
ตัวอย่างเช่น ถ้าปัจจุบันคุณอยู่ที่ไดเรกทอรี /hone/himanshu/pictures แล้วต้องการไปที่ /home/himanshu/pictures/vacations ก็สามารถใส่พารามิเตอร์แค่ชื่อไดเรกทอรีได้ โดยพิมพ์เป็นคำสั่งว่า cd vacations ซึ่งคำสั่งนี้เป็นการสั่งให้เชลล์ค้นหาไดเรกทอรีชื่อ vacations ที่อยู่ภายใน pictures การเข้าไปยังโฟลเดอร์ที่สัมพันธ์กับโฟลเดอร์แม่เดิมนี้ เราเรียกพาธลักษณะนี้ว่า Relative Path
แต่ถ้าเป็นกรณีที่ต้องการย้ายไปอยู่ที่ /home/techspot คุณจำเป็นต้องใช้คำสั่ง cd /home/techspot โดยระบุพาธเต็มแทน ซึ่งจะเริ่มต้นจากเครื่องหมายสแลช (/) พาธเต็มที่ระบุตั้งแต่ไดเรกทอรีใหญ่สุดเรียงออกมานี้เรียกว่า Absolute Path นอกจากนี้ยังมีคำสั่งลัดในการเลื่อนกลับมาอยู่ไดเรกทอรีแม่ก่อนหน้าด้วย คือ cd .. หรือถ้าต้องการกลับไปอยู่ในไดเรกทอรีก่อนหน้าที่เคยจากมา ให้พิมพ์ว่า cd – เป็นต้น
4. จะเรียกดูรายการเนื้อหาภายในไดเรกทอรีได้อย่างไร?
ใช้คำสั่ง ls (แอลเอส มาจากคำว่า list)  เพื่อแสดงรายการเนื้อหาภายในไดเรกทอรี โดยถ้าพิมพ์คำสั่งนี้โดยไม่ใส่อากิวเมนต์อื่นกำกับ จะเป็นการแสดงเนื้อหาภายในไดเรกทอรีปัจจุบัน
ตัวอย่างดังรูป:
สำหรับการเรียกดูเนื้อหาในไดเรกทอรีอื่นนั้น คุณสามารถป้อนอากิวเมนต์เป็นทั้งชื่อไดเรกทอรี (กรณีเป็นไดเรกทอรีย่อยของไดเรกทอรีปัจจุบัน) หรือพาธเต็ม (กรณีที่ไม่ใช่ไดเรกทอรีย่อยบนไดเรกทอรีปัจจุบัน) ต่อท้ายคำสั่ง ls ได้
ถ้าลองสังเกตเอาต์พุตดูดีๆ จะเห็นว่าเอาต์พุตของคำสั่ง ls จะแยกเป็นสีต่างๆ ซึ่งแต่ละสีหมายถึงประเภทของไฟล์แต่ละชนิด ทำให้ง่ายต่อการจำแนก ซึ่งความหมายของแต่ละสีที่ควรทราบได้แก่ สีน้ำเงิน (ไดเรกทอรี), สีขาว (ไฟล์ข้อความ), สีแดง (ไฟล์ที่บีบอัดข้อมูล), สีฟ้าอ่อน (ลิงค์), สีเขียว (ไฟล์ที่สั่งรันในตัวเองหรือ Executable), และสีชมพู (ไฟล์ภาพ) เป็นต้น
  1. ทำอย่างไรถึงจะดูข้อมูลภายในไฟล์ได้?
ใช้คำสั่ง cat เพื่อแสดงเนื้อหาภายในไฟล์ที่ต้องการ โดยคำสั่งนี้ต้องการอากิวเมนต์เป็นชื่อไฟล์ ดังตัวอย่างการใช้งานในภาพด้านล่าง ที่คำสั่ง cat ใช้แสดงเนื้อหาภายในไฟล์ชื่อ arg.c แต่อย่างไรก็ดี ถ้าไฟล์มีขนาดมหึมาเกินไป การแสดงผลภายในเชลล์อาจจะเยอะเกินกว่าที่จะใช้งานได้นะครับ
ปัญหาดังกล่าวจะหมดไป (บ้าง) เมื่อต่อท้ายคำสั่งด้วยคำสั่ง less ด้วยวิธีส่งต่อข้อมูลไปยังคำสั่งถัดไปผ่านไปป์ไลน์ นั่นคือ คำสั่งที่ต้องพิมพ์จะอยู่ในรูป cat (ชื่อไฟล์) | less โดยสัญลักษณ์ | แสดงถึงไปป์หรือท่อที่ส่งผ่านเอาต์พุตไปยังคำสั่งด้านขวาถัดไป ในกรณีนี้คือคำสั่ง less ซึ่งจะทำให้คุณสามารถกดปุ่มลูกศรเลื่อนขึ้นลงเพื่อดูเนื้อหาเฉพาะหน้าที่ต้องการ โดยสามารถกดออกมาหน้าพร็อมพ์ปกติได้โดยกดปุ่ม q
  1. สร้างไฟล์ใหม่ได้อย่างไร?
ใช้คำสั่ง touch เพื่อสร้างไฟล์ใหม่ โดยอากิวเมนต์ของคำสั่งนี้คือชื่อของไฟล์ที่ต้องการ ตัวอย่างเช่น การสร้างไฟล์ชื่อ test.log บนไดเรกทอรีที่ทำงานอยู่ปัจจุบัน จะใช้คำสั่งว่า touch test.log
แต่ถ้าต้องการสร้างไฟล์ใหม่ในตำแหน่งอื่นนอกจากบนไดเรกทอรีที่ทำงานอยู่ปัจจุบัน ก็เพียงแค่ใส่พาธเต็มๆ ให้ชื่อไฟล์ เช่น touch /home/himanshu/practice/test.log
ทริคพิเศษ: สำหรับการเขียนข้อความใดๆ ลงในไฟล์ที่เพิ่งสร้างใหม่ ให้ใช้โปรแกรมแก้ไขเนื้อหาไฟล์บนคอมมานด์ไลน์อย่าง Vi หรือ Vim เป็นต้น
  1. แล้วการเปลี่ยนชื่อ/คัดลอก/ลบไฟล์ ทำอย่างไร?
ใช้คำสั่ง mv สำหรับการเปลี่ยนชื่อไฟล์ เช่น การที่จะเปลี่ยนชื่อไฟล์จาก log.txt เป็น new_log.txt ให้ใช้คำสั่งว่า mv log.txt new_log.txt ซึ่งถ้าไฟล์ดังกล่าวไม่ได้อยู่บนไดเรกทอรีที่ทำงานอยู่ปัจจุบัน ก็เพียงใส่พาธเต็มของไฟล์นั้น เช่นเดียวกับกรณีทั่วไป
นอกจากนี้ คุณยังสามารถใช้คำสั่ง mv เพื่อย้ายไฟล์จากตำแหน่งหนึ่งไปอยู่อีกตำแหน่งได้ ซึ่งลักษณะการทำงานคล้ายกับการกด Cut > Paste ในโอเอสแบบกราฟิกทั่วไป ตัวอย่างเช่น การย้ายไฟล์ log.txt (ที่อยู่ในไดเรกทอรีที่ใช้งานอยู่ปัจจุบัน) ไปยังไดเรกทอรี /home/himanshu ให้พิมพ์คำสั่งว่า mv log.txt /home/himanshu
ส่วนการคัดลอกไฟล์จากไดเรกทอรีหนึ่งไปสู่อีกไดเรกทอรีหนึ่งนั้น ใช้คำสั่ง cp ซึ่งการป้อนอากิวเมนต์เหมือนกับในคำสั่ง mv กรณีย้ายไฟล์ โดยต้องระบุต้นทางและปลายทาง เช่น cp log.txt /home/himanshu จะเป็นการคัดลอกไฟล์ log.txt (โดยไฟล์ที่ถูกคัดลอกมีชื่อไฟล์เหมือนต้นฉบับ) ไปยังไดเรกทอรี /home/himanshu เป็นต้น
สำหรับการลบไฟล์ทิ้ง ให้ใช้คำสั่ง rm โดยคำสั่งนี้ต้องการอากิวเมนต์เป็นชื่อไฟล์ที่ต้องการลบทิ้ง เช่น คำสั่ง rm log.txt จะลบไฟล์ข้อความ log.txt ที่อยู่บนไดเรกทอรีที่ใช้งานอยู่ปัจจุบันทิ้งไป ขณะที่ถ้าพิมพ์ rm /home/himanshu/practice/log.txt จะเป็นการลบไฟล์ดังกล่าวที่อยู่ภายในไดเรกทอรี practice ทิ้งแทน
ในการลบไดเรกทอรี ให้พิมพ์ออพชั่น -r ในคำสั่ง rm เพิ่ม ตัวอย่างเช่น rm –r /home/himanshu/practice/ จะเป็นลบไดเรกทอรี practice พร้อมกับไดเรกทอรีย่อยและไฟล์ภายในทั้งหมดทิ้ง
  1. วิธีค้นหาไฟล์
การค้นหาไฟล์ภายในไดเรกทอรีที่ต้องการ เราจะใช้คำสั่ง find ซึ่งคำสั่งนี้ต้องการพาธของไดเรกทอรีเป้าหมาย และชื่อไฟล์เป็นอากิวเมนต์ ตัวอย่างเช่น การค้นหาไฟล์ที่ชื่อ inheritance.cpp ภายในไดเรกทอรี /home/himanshu นั้น เราจะใช้คำสั่งในลักษณะตามรูปด้านล่าง
ผมใช้คำสั่ง sudo ขึ้นต้นก่อนคำสั่งอื่น เพื่อให้สิทธิ์การสั่งคำสั่งถัดไปนี้เป็นระดับเจ้าของระบบ (Super User) เนื่องจากถ้าไดเรกทอรีเป้าหมายเป็นของผู้ใช้คนอื่น หรือผู้ใช้ปัจจุบันไม่มีสิทธิ์เข้าถึง จะไม่สามารถรันคำสั่งนี้ได้ เป็นต้น (แต่สำหรับคุณแล้วอาจไม่จำเป็นต้องใช้ sudo นี้ก็ได้ หรือถ้าจะใช้ คุณก็ต้องรู้รหัสผ่านของเจ้าของระบบ)
ถ้าไม่ได้ระบุพาธเป็นอากิวเมนต์เพิ่มนอกจากชื่อไฟล์ คำสั่ง find จะทำการค้นหาไฟล์ชื่อดังกล่าวในไดเรกทอรีปัจจุบันแทน
นอกจากนี้ คุณยังสามารถใช้ไวลด์การ์ด (เช่น เครื่องหมาย * ที่แทนข้อมูลใดๆ ทั้งหมดในส่วนนั้น) กับคำสั่ง findเพื่อค้นหาไฟล์ที่ตรงกับกฎที่ระบุไว้ทั้งหมด เช่น ถ้าคุณต้องการค้นหาไฟล์ที่สกุล .c ที่อยู่ในไดเรกทอรี /home/himanshu/practice ทั้งหมด ให้ใช้คำสั่ง find ตามรูปด้านล่าง ซึ่งเครื่องหมาย “*” นี้ เป็นไวลด์การ์โ (Wildcard) ที่ใช้แทนค่าข้อมูลที่เป็นตัวเลขหรือตัวอักษรใดๆ ตัวอย่างเช่น tech* อาจแทนคำว่า tech, techspot, techreport เป็นต้น
  1. เราจะค้นหาข้อความภายในไฟล์ต่างๆ ได้อย่างไร?
การค้นหาข้อความภายในไฟล์ต่างๆ นั้น ใช้คำสั่ง grep ซึ่งคำสั่งนี้ต้องการอากิวเมนต์เป็นข้อความที่ต้องการค้นหาหรือ Keyword กับชื่อไฟล์เป้าหมาย โดยเอาต์พุตที่ได้จะเป็นข้อความแต่ละบรรทัดที่มีคีย์เวิร์ดอยู่ภายใน ตัวอย่างเช่น การค้นหาทุกบรรทัดภายในไฟล์ /home/himanshu/practice/wazi/gdb/test.c ที่มีคีย์เวิร์ด ptr เราจะใช้คำสั่ง grep ดังรูปต่อไปนี้
นอกจากนี้ เราสามารถใส่ออพชั่น –n  กรณีที่ต้องการให้คำสั่ง grep แสดงเลขที่บรรทัดในเอาต์พุตด้วย ดังนี้

เทคนิค: สำหรับการค้นหาคีย์เวิร์ดที่ต้องการ ในไฟล์หลายไฟล์ที่อยู่บนไดเรกทอรีปัจจุบันนั้น สามารถใช้ไวลด์การ์ด * แทนชื่อไฟล์ได้
แต่จำไว้ว่า คำสั่ง grep นี้ ไม่ได้ค้นหาไฟล์ภายในไดเรกทอรีย่อยโดยดีฟอลต์ด้วยเหมือนในคำสั่ง find แต่อย่างไรก็ดี คุณสามารถเปิดให้ค้นไฟล์เป้าหมายในไดเรกทอรีย่อยได้ด้วยการใส่ออพชั่น –R ในคำสั่ง grep
  1. ฟีเจอร์ Auto-complete ในคอมมานด์ไลน์เป็นอย่างไร?
ขณะที่ทำงานบนคอมมานด์ไลน์ของลีนุกซ์นั้น การพิมพ์พาธ, ชื่อไฟล์, หรืออากิวเมนต์ยาวๆ ก็ดูน่ารำคาญพอสมควร แต่คุณสามารถใช้ปุ่ม tab ในการเติมข้อความให้สมบูรณ์โดยอัตโนมัติ (ฟีเจอร์ Auto-complate) สำหรับชื่อไฟล์หรือพาธยาวๆ ได้อย่างง่ายได้ เช่น การพิมพ์พาธ /home คุณอาจพิมพ์แค่ /ho แล้วกด tab ซึ่งเชลล์ของคอมมานด์ไลน์จะเติมข้อความที่เหลือให้คุณโดยอัตโนมัติ
จากกรณีข้างต้น เชลล์สามารถเดาชื่อเต็มๆ เป็น home ได้ง่ายเพราะไม่มีไดเรกทอรีชื่ออื่นที่ขึ้นต้นเหมือนกันในไดเรกทอรีรูท /  แต่กรณีที่เชลล์เจอชื่อที่ขึ้นต้นเหมือนกันขณะกำลัง Auto-complete เชลล์จะแสดงผลรายการข้อความที่เป็นไปได้ทั้งหมดให้คุณดู แล้วเปิดโอกาสให้คุณพิมพ์ตัวอักษรเพิ่มเติมให้เชลล์ทราบว่าคุณต้องการพิมพ์ข้อความไหน
ตัวอย่างดังรูป:
เชลล์ได้แสดงชื่อไดเรกทอรีทั้งหมดที่สามารถทำ Auto-complete ให้ได้ ดังนั้น ถ้าคุณต้องการพิมพ์คำว่า techspot ก็เพียงแค่พิมพ์ตัว c อีกตัวเพิ่มก่อนกด tab เพื่อให้เชลล์รู้ว่าคุณต้องการข้อความไหน เป็นต้น
  1. รูท (Root) คืออะไร?
รูท (Root)  คือผู้ใช้ที่มีอำนาจควบคุมระบบลีนุกซ์บนเครื่องทั้งหมด ซึ่งมีความสามารถหลายอย่างที่ผู้ใช้ทั่วไปทำไม่ได้ เช่น เปลี่ยนผู้ใช้เจ้าของไฟล์แต่ละไฟล์ หรือเพิ่มหรือลบไฟล์จากไดเรกทอรีของระบบ เป็นต้น ดังนั้น บัญชีผู้ใช้ที่เป็นรูทจะใช้กับผู้ที่ทำหน้าที่ดูแลระบบ หรือซิสเต็มแอดมินเท่านั้น
โดยไดเรกทอรีที่อยู่สูงสุดของระบบลีนุกซ์ จะแทนด้วยแค่เครื่องหมายสแลช (/) เรียกไดเรกทอรีนี้ว่า รูทไดเรกทอรี ซึ่งเป็นไดเรกทอรีเดียวกันกับที่มีไดเรกทอรี home ที่บรรจุไดเรกทอรีจำเพาะของแต่ละผู้ใช้อยู่ภายใน อย่างไรก็ดี อย่าสับสนกับไดเรกทอรี home ของผู้ใช้ที่เป็น root ซึ่งก็คือไดเรกทอรีชื่อ root ที่อยู่บนรูทไดเรกทอรีหรือ / อีกทีนั่นเอง
  1. แล้วหน้า “man” คืออะไร?
ถ้าคุณต้องการศึกษารายละเอียดเพิ่มเติมของคำสั่งต่างๆ บนลีนุกซ์ คุณสามารถเปิดดูคู่มือการใช้คำสั่งต่างๆ นั้นได้ในหน้า man (ย่อมาจาก Manual) ซึ่งมีมาให้ตั้งแต่ติดตั้งระบบ สำหรับการเปิดหน้า man นี้ เพียงพิมพ์คำสั่ง man ตามด้วยชื่อคำสั่งที่ต้องการศึกษา ตัวอย่างเช่น พิมพ์คำสั่งว่า man rm จะเป็นการเปิดหน้าคู่มือที่เกี่ยวกับการใช้คำสั่ง rm ทั้งอากิวเมนต์และออพชั่นที่ใช้ เป็นต้น นั่นคือ คุณสามารถศึกษาการใช้งานลีนุกซ์เพิ่มเติมได้ด้วยตนเองผ่าน Manual ลักษณะนี้
ทั้งหมดที่ผมกล่าวในบทความนี้ เป็นเพียงแค่บันไดก้าวแรกเท่านั้น คอมมานด์ไลน์บนลีนุกส์ยังสามารถใช้ทำงานได้หลากหลายมากมาย การฝึกฝนและเชี่ยวชาญในแต่ละคำสั่งที่กล่าวไว้ข้างต้นจะเป็นพื้นฐานให้ต่อยอดการใช้งานแบบมืออาชีพต่อไปในอนาคต
ที่มา: http://www.enterpriseitpro.net/?p=3502

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...