← สารบัญบทเรียน M2 · จัดการไฟล์ & Text
M2 · ปูพื้น

จัดการไฟล์ & ข้อความ

บทที่แล้วคุณเดินไปมาในเครื่องได้แล้ว — บทนี้จะลงมือ “ทำของจริง” คือ สร้าง คัดลอก ย้าย ลบไฟล์ ดูเนื้อหาข้างใน ค้นหาข้อความ และบีบอัดไฟล์เป็นก้อนเดียว เหมือนเรียนรู้ที่จะหยิบจับข้าวของในบ้านได้คล่อง

🌱 บทนี้เขียนเพื่อคนที่ไม่เคยแตะ Linux มาก่อนเลย

1บทนี้เราจะทำอะไรกันบ้าง

ลองนึกว่า Linux ก็เหมือนบ้านหลังหนึ่ง บทที่แล้ว (M1) คุณเรียนรู้ที่จะ เดินไปมาในห้องต่างๆ ได้แล้ว — รู้ว่าตัวเองอยู่ห้องไหน (pwd) เปิดดูว่าในห้องมีอะไร (ls) แล้วเดินไปห้องอื่น (cd)

บทนี้คุณจะได้ ลงมือจับข้าวของจริงๆ ในบ้าน:

🎯 ทำไมบทนี้สำคัญกับข้อสอบ

งานในข้อสอบ RHCSA แทบทุกข้อต้องแตะไฟล์ — สร้างไฟล์ตั้งค่า แก้ข้อความ คัดลอกไฟล์ไปวางที่ถูกที่ การจัดการไฟล์จึงเป็น “ทักษะพื้นฐานที่สุด” ที่ต้องทำได้โดยไม่ต้องคิดนาน

2สร้างไฟล์และโฟลเดอร์

เริ่มจากเรื่องง่ายที่สุดก่อน — การสร้างของใหม่ขึ้นมา มี 2 คำสั่งหลัก: ตัวหนึ่งสร้างไฟล์ อีกตัวสร้างโฟลเดอร์

touch — สร้างไฟล์เปล่า

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

⌨️ ลองดู
[student@server1 ~]$ touch notes.txt
[student@server1 ~]$ ls
Desktop  Documents  notes.txt

พิมพ์ touch notes.txt แล้วไฟล์ notes.txt ก็โผล่มาในโฟลเดอร์ทันที — ยังเป็นไฟล์เปล่าไม่มีอะไรข้างใน ไว้ค่อยใส่ข้อความทีหลัง

mkdir — สร้างโฟลเดอร์

ย่อมาจาก “make directory” = สร้างโฟลเดอร์ใหม่

⌨️ ลองดู
[student@server1 ~]$ mkdir project
[student@server1 ~]$ ls
Desktop  Documents  notes.txt  project

ได้โฟลเดอร์ใหม่ชื่อ project เรียบร้อย

mkdir -p — สร้างหลายชั้นรวดเดียว

ถ้าอยากสร้างโฟลเดอร์ซ้อนกันหลายชั้น เช่น a/b/c ปกติต้องสร้างทีละชั้น แต่ option -p ช่วยสร้างให้ครบทุกชั้นในคำสั่งเดียว (p = parents = สร้างโฟลเดอร์แม่ที่ยังไม่มีให้ด้วย)

⌨️ ลองดู
[student@server1 ~]$ mkdir a/b/c
mkdir: cannot create directory 'a/b/c': No such file or directory

[student@server1 ~]$ mkdir -p a/b/c
(ไม่มี error — สร้างครบทั้ง a, a/b และ a/b/c ให้เลย)
mkdir a/b/cerror เพราะยังไม่มีโฟลเดอร์ a และ a/b มันเลยสร้าง c ไม่ได้
mkdir -p a/b/cสร้างให้ครบทุกชั้นเลย ไม่ต้องเตรียมโฟลเดอร์แม่ก่อน
💡 เกร็ด: ตั้งชื่อไฟล์อย่าใส่เว้นวรรค

บน Linux ควรตั้งชื่อไฟล์/โฟลเดอร์โดยไม่มีช่องว่าง เพราะ shell มองช่องว่างเป็นตัวคั่นคำ ถ้าจะใช้คำหลายคำ ให้ใช้ขีดล่าง my_project หรือขีดกลาง my-project แทน จะทำงานง่ายกว่ามาก

3คัดลอก ย้าย ลบ: cp / mv / rm

สามคำสั่งนี้คือ “มือไม้” ที่คุณใช้จัดการไฟล์ทุกวัน — คัดลอก ย้าย และลบ

cp — คัดลอก (copy)

รูปแบบคือ cp ต้นทาง ปลายทาง = เอาไฟล์ต้นทางไปทำสำเนาไว้ที่ปลายทาง (ต้นฉบับยังอยู่)

⌨️ ลองดู
[student@server1 ~]$ cp notes.txt backup.txt
[student@server1 ~]$ ls
backup.txt  notes.txt  project

[student@server1 ~]$ cp project project2
cp: -r not specified; omitting directory 'project'

[student@server1 ~]$ cp -r project project2
(คัดลอกทั้งโฟลเดอร์รวมของข้างในเรียบร้อย)
cp notes.txt backup.txtทำสำเนา notes.txt เป็นไฟล์ใหม่ชื่อ backup.txt
cp -rต้องใส่ -r (recursive) เมื่อคัดลอก โฟลเดอร์ เพราะต้องตามเข้าไปลอกของข้างในด้วย
📌 จำง่ายๆ: เจอโฟลเดอร์เมื่อไหร่ ให้นึกถึง -r

cp เฉยๆ คัดลอกได้แค่ไฟล์เดี่ยว ถ้าจะลอกทั้งโฟลเดอร์ (และของข้างใน) ต้องเติม -r เสมอ ไม่งั้นมันจะบ่นและไม่ทำให้

mv — ย้าย หรือ เปลี่ยนชื่อ (move)

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

⌨️ ลองดู
[student@server1 ~]$ mv backup.txt project/
(ย้าย backup.txt เข้าไปอยู่ในโฟลเดอร์ project)

[student@server1 ~]$ mv notes.txt mynotes.txt
(เปลี่ยนชื่อ notes.txt เป็น mynotes.txt)
mv ไฟล์ โฟลเดอร์/ย้ายไฟล์เข้าไปในโฟลเดอร์ (ปลายทางเป็นโฟลเดอร์ที่มีอยู่)
mv ชื่อเก่า ชื่อใหม่เปลี่ยนชื่อไฟล์ (ปลายทางเป็นชื่อไฟล์ใหม่ในที่เดิม)
💡 เปรียบเทียบให้เห็นภาพ

cp = ถ่ายเอกสาร — ได้สำเนาเพิ่มมา ต้นฉบับยังอยู่บนโต๊ะ
mv = หยิบเอกสารจากโต๊ะนี้ไปวางอีกโต๊ะ — มีแค่ใบเดียว ย้ายไปแล้วก็ไม่เหลือที่เก่า

rm / rmdir — ลบ (remove)

ลบไฟล์ใช้ rm ลบโฟลเดอร์ว่างๆ ใช้ rmdir ส่วนลบโฟลเดอร์ที่มีของข้างในต้องใช้ rm -r

⌨️ ลองดู
[student@server1 ~]$ rm mynotes.txt
(ลบไฟล์ทิ้ง)

[student@server1 ~]$ rmdir emptyfolder
(ลบได้เฉพาะโฟลเดอร์ที่ว่างเปล่าเท่านั้น)

[student@server1 ~]$ rm -r project2
(ลบทั้งโฟลเดอร์รวมของข้างในทั้งหมด)
rm ไฟล์ลบไฟล์เดี่ยว
rmdir โฟลเดอร์ลบโฟลเดอร์ — ได้เฉพาะโฟลเดอร์ ว่างเปล่า
rm -r โฟลเดอร์ลบโฟลเดอร์ที่มีของข้างใน (recursive — ลบลึกลงไปทุกชั้น)
⚠️ อันตรายสุดๆ: rm -rf ลบถาวร ไม่มีถังขยะ!

บน Linux เมื่อสั่งลบด้วย rm ไฟล์จะ หายไปเลยทันที — ไม่มีถังขยะ (Recycle Bin) ให้กู้คืนเหมือน Windows และมันจะ ไม่ถามยืนยันซ้ำ

ตัวที่อันตรายที่สุดคือ rm -rf-r ลบลงลึกทุกชั้น และ -f (force) สั่งให้ลบทันทีโดยไม่ถามอะไรเลย ถ้าพิมพ์ path ผิดเพียงนิดเดียว อาจลบของสำคัญหายเกลี้ยง

และที่ อันตรายเป็นพิเศษคือตอนเป็น root (เห็น # ใน prompt) — root ลบได้ทุกอย่างในเครื่องโดยไม่มีใครห้าม ดังนั้นก่อนกด Enter กับ rm -rf ให้อ่าน path ที่จะลบทวนอีกรอบเสมอ

😱 คำสั่งในตำนานที่ห้ามพิมพ์เด็ดขาด

rm -rf / หมายถึง “ลบทุกอย่างตั้งแต่รากของเครื่อง” = ทำลายระบบทั้งเครื่อง อย่าพิมพ์เล่นเด็ดขาด! ในห้องสอบหรือเครื่องจริง ให้ระวังการเว้นวรรคผิดที่ เช่นตั้งใจพิมพ์ rm -rf /tmp/x แต่เผลอเว้นวรรคเป็น rm -rf / tmp/x ก็พังได้

4ดูเนื้อหาในไฟล์

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

cat — เทออกมาทั้งหมด (ไฟล์สั้น)

ย่อมาจาก “concatenate” — แต่ใช้บ่อยสุดเพื่อ เทเนื้อหาไฟล์ออกมาบนจอทั้งหมด เหมาะกับไฟล์สั้นๆ

⌨️ ลองดู
[student@server1 ~]$ cat notes.txt
บรรทัดแรกของไฟล์
บรรทัดที่สอง
บรรทัดที่สาม

เนื้อหาทั้งไฟล์โผล่ออกมาเลย — แต่ถ้าไฟล์ยาวเป็นพันบรรทัด มันจะวิ่งผ่านจอจนตามอ่านไม่ทัน ตอนนั้นให้ใช้ less แทน

less — เปิดอ่านแบบเลื่อนได้ (ไฟล์ยาว)

เปิดไฟล์ขึ้นมาแบบ เลื่อนขึ้นลงได้ทีละหน้า ไม่เลื่อนหายไปเอง เหมาะกับไฟล์ยาวๆ เช่น log หรือไฟล์ตั้งค่า

⌨️ ลองดู
[student@server1 ~]$ less /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...

เมื่ออยู่ในหน้า less ใช้ปุ่มเหล่านี้:

Spaceเลื่อนลงทีละหน้า
↑ ↓เลื่อนทีละบรรทัด
/คำค้นหาคำในไฟล์
qกดออก — เหมือนตอนออกจาก man ในบทที่แล้วเป๊ะ
💡 เกร็ด: man กับ less เป็นญาติกัน

จำได้ไหมว่าบทที่แล้วออกจาก man ด้วยปุ่ม q? นั่นเพราะ man ใช้ less เปิดคู่มือให้นั่นเอง วิธีเลื่อน/ค้นหา/ออก จึงเหมือนกันทุกอย่าง — เรียนรู้ครั้งเดียวใช้ได้ทั้งคู่

head / tail — ดูแค่หัวหรือท้ายไฟล์

head แสดง บรรทัดบนสุด ของไฟล์ ส่วน tail แสดง บรรทัดล่างสุด โดยปกติให้มา 10 บรรทัด ใช้ option -n เพื่อกำหนดจำนวนเองได้

⌨️ ลองดู
[student@server1 ~]$ head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[student@server1 ~]$ tail -n 2 /etc/passwd
student:x:1000:1000::/home/student:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
head ไฟล์ดู 10 บรรทัดบนสุด
head -n 3 ไฟล์ดู 3 บรรทัดบนสุด
tail -n 2 ไฟล์ดู 2 บรรทัดล่างสุด

tail -f — เฝ้าดู log แบบสดๆ

option -f (follow) ทำให้ tail ค้างอยู่ที่ท้ายไฟล์และอัปเดตให้เห็นทันทีที่มีบรรทัดใหม่เข้ามา — สุดยอดเครื่องมือสำหรับดู log ของเซิร์ฟเวอร์ตอนกำลังทำงาน

⌨️ ลองดู
[student@server1 ~]$ tail -f /var/log/messages
Jun 16 10:00:01 server1 systemd: Started Session 12.
Jun 16 10:00:05 server1 sshd: Accepted password for student
_ (ค้างรออยู่ตรงนี้ — มีบรรทัดใหม่เมื่อไหร่ก็โผล่ขึ้นมาเอง)

หน้าจอจะค้างรอ ไม่กลับมาที่ prompt — เพราะมันกำลัง “เฝ้าดู” อยู่ กด Ctrl+C เพื่อหยุดและกลับมาพิมพ์คำสั่งต่อ

💡 เปรียบเทียบให้เห็นภาพ

tail -f เหมือนการ นั่งดูสายพานลำเลียงของในโรงงาน — คุณจ้องที่ปลายสายพาน พอมีของชิ้นใหม่ไหลมาถึง คุณก็เห็นมันทันที ไม่ต้องเดินไปเดินมาคอยเช็ก

5Wildcards — เลือกหลายไฟล์ทีเดียว

บางทีเราไม่อยากพิมพ์ชื่อไฟล์ทีละอัน เช่นมีไฟล์ .txt อยู่ 50 อันแล้วอยากทำกับทั้งหมดพร้อมกัน — นี่คือหน้าที่ของ wildcards (ตัวแทนชื่อ) หรือที่เรียกว่า globbing

สัญลักษณ์หมายถึง
*แทนตัวอักษร กี่ตัวก็ได้ (รวมถึงไม่มีเลย)
?แทนตัวอักษร 1 ตัวพอดี
⌨️ ลองดู
[student@server1 ~]$ ls
a.txt  b.txt  notes.txt  report1.log  report2.log  photo.jpg

[student@server1 ~]$ ls *.txt
a.txt  b.txt  notes.txt

[student@server1 ~]$ ls report?.log
report1.log  report2.log
*.txtไฟล์ทุกตัวที่ลงท้ายด้วย .txt (ชื่อข้างหน้าจะยาวแค่ไหนก็ได้)
report?.logตรงกับ report1.log, report2.log เพราะ ? แทนได้แค่ 1 ตัว
💡 เปรียบเทียบให้เห็นภาพ

* เหมือนพูดว่า “เอาเสื้อ สีอะไรก็ได้” ส่วน ? เหมือนพูดว่า “เอาเสื้อที่ชื่อยาวเท่านี้เป๊ะ ต่างกันแค่ตัวเดียว” — ใช้ร่วมกับ cp, mv, rm ได้หมด เช่น rm *.tmp ลบไฟล์ขยะ .tmp ทั้งหมดทีเดียว

⚠️ ระวัง wildcard กับ rm

การใช้ * ร่วมกับ rm ทรงพลังแต่อันตราย ก่อนลบให้ลองเปลี่ยนเป็น ls *.tmp ดูก่อนว่าตรงกับไฟล์อะไรบ้าง พอแน่ใจแล้วค่อยเปลี่ยนเป็น rm — โดยเฉพาะอย่าเผลอเว้นวรรคเป็น rm * .tmp เพราะ * เดี่ยวๆ แปลว่า “ทุกไฟล์ในโฟลเดอร์นี้”!

6Redirect & Pipe — ต่อท่อให้คำสั่งคุยกัน

หัวข้อนี้สำคัญมากและทำให้ command line ทรงพลังกว่าการคลิกเมาส์เยอะ — มันคือการ เปลี่ยนทางเดินของผลลัพธ์ ปกติคำสั่งจะพ่นผลลัพธ์ออกจอ แต่เราเปลี่ยนให้มันไหลลงไฟล์ หรือไหลต่อเข้าอีกคำสั่งได้

> เขียนลงไฟล์ (ทับของเดิม)

เครื่องหมาย > สั่งให้ผลลัพธ์ที่ปกติออกจอ ไหลลงไฟล์แทน — แต่ระวัง มันจะ ลบเนื้อหาเดิมของไฟล์ทิ้งทั้งหมด แล้วเขียนทับ

⌨️ ลองดู
[student@server1 ~]$ echo "บรรทัดแรก" > list.txt
[student@server1 ~]$ cat list.txt
บรรทัดแรก

[student@server1 ~]$ echo "เขียนใหม่" > list.txt
[student@server1 ~]$ cat list.txt
เขียนใหม่

สังเกตว่ารอบสองที่ใช้ > อีกครั้ง คำว่า “บรรทัดแรก” หายไปเลย เพราะ > เขียนทับทั้งหมด (echo = คำสั่งพ่นข้อความออกมา)

>> เขียนต่อท้าย (ไม่ลบของเดิม)

ถ้าอยาก เพิ่มบรรทัดต่อท้าย โดยไม่ลบของเดิม ให้ใช้ >> (สองตัว)

⌨️ ลองดู
[student@server1 ~]$ echo "บรรทัด A" > list.txt
[student@server1 ~]$ echo "บรรทัด B" >> list.txt
[student@server1 ~]$ cat list.txt
บรรทัด A
บรรทัด B
>เขียนทับ — ของเดิมหายหมด
>>ต่อท้าย — ของเดิมอยู่ครบ เพิ่มบรรทัดใหม่ไว้ข้างล่าง
⚠️ จำให้แม่น: > ตัวเดียว = ทับ!

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

| (Pipe) — ส่งผลลัพธ์ต่อให้คำสั่งถัดไป

เครื่องหมาย | (อ่านว่า “ไพป์”) คือพระเอกของบทนี้ — มันเอา ผลลัพธ์จากคำสั่งซ้ายมือ ส่งต่อเข้าไปเป็น “วัตถุดิบ” ให้คำสั่งขวามือ ทำงานต่อ

💡 เปรียบเทียบให้เห็นภาพ

นึกถึง ท่อส่งน้ำต่อกันเป็นทอดๆ — น้ำ (ผลลัพธ์) ไหลออกจากคำสั่งแรก ผ่านท่อ | เข้าเครื่องที่สอง แล้วไหลต่อผ่านอีกท่อเข้าเครื่องที่สามได้เรื่อยๆ แต่ละเครื่องทำหน้าที่กรอง/แปลง/นับ น้ำที่ไหลผ่าน

⌨️ ลองดู
[student@server1 ~]$ ls /etc | head -n 5
adjtime
aliases
bashrc
crontab
fstab

คำสั่งนี้อ่านว่า: เอาผลลัพธ์ของ ls /etc (ไฟล์เยอะมาก) ส่งผ่านท่อ | เข้า head -n 5 เพื่อตัดให้เหลือแค่ 5 บรรทัดแรก — เหมือนเอาน้ำจากก๊อกใหญ่ ส่งผ่านท่อไปเข้าเครื่องกรองที่ปล่อยออกมาแค่ 5 หยด

7grep — ค้นหาข้อความในไฟล์

grep คือเครื่องมือ ค้นหาคำ ที่คุณจะใช้บ่อยมาก — มันอ่านไฟล์แล้วพ่นออกมา เฉพาะบรรทัดที่มีคำที่คุณค้นหา

รูปแบบคือ grep คำที่หา ไฟล์

⌨️ ลองดู
[student@server1 ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

แสดงทุกบรรทัดในไฟล์ /etc/passwd ที่มีคำว่า root อยู่ — บรรทัดที่ไม่มีคำนี้ถูกซ่อนไปหมด ช่วยให้หาเจอเร็วในไฟล์ยาวๆ

⌨️ option ที่ใช้บ่อย
[student@server1 ~]$ grep -i error log.txt
(เจอทั้ง error, Error, ERROR — ไม่สนตัวเล็กใหญ่)

[student@server1 ~]$ grep -r "password" /etc
(ค้นหาคำว่า password ในทุกไฟล์ทั้งโฟลเดอร์ /etc)
grep -iไม่สนตัวพิมพ์เล็ก–ใหญ่ (i = ignore case)
grep -rค้นหาในทุกไฟล์ทั้งโฟลเดอร์และโฟลเดอร์ย่อย (r = recursive)

grep + pipe = คู่หูสุดแกร่ง

grep เจิดจรัสที่สุดเมื่อใช้คู่กับ pipe | — เอาผลลัพธ์ยาวๆ จากคำสั่งอื่นมา “กรอง” ให้เหลือเฉพาะบรรทัดที่สนใจ

⌨️ ลองดู
[student@server1 ~]$ ps aux | grep ssh
root  1042  0.0  0.2  /usr/sbin/sshd -D
student 2310 0.0 0.0  grep --color ssh

ps aux แสดง โปรเซสที่รันอยู่ทั้งหมด (ยาวมากเป็นร้อยบรรทัด) แล้วส่งผ่านท่อ | เข้า grep ssh เพื่อกรองเอาเฉพาะบรรทัดที่เกี่ยวกับ ssh — เป็นวิธียอดฮิตในการเช็กว่าโปรแกรมที่ต้องการกำลังทำงานอยู่หรือไม่

💡 เกร็ด: ทำไมเห็นบรรทัด grep ในผลลัพธ์

บรรทัดที่สองในตัวอย่างคือตัว grep เองที่กำลังทำงาน (มันก็มีคำว่า ssh ในคำสั่งเลยติดมาด้วย) เป็นเรื่องปกติ ไม่ต้องตกใจ

8บีบอัด & แตกไฟล์: tar

เวลาจะส่งไฟล์หลายๆ อันหรือทั้งโฟลเดอร์ การ มัดรวมเป็นก้อนเดียวแล้วบีบให้เล็กลง จะสะดวกกว่ามาก เครื่องมือมาตรฐานของ Linux ชื่อ tar

💡 เปรียบเทียบให้เห็นภาพ

tar เหมือนการ เอาของหลายชิ้นใส่กล่องแล้วปิดเทป ให้เป็นพัสดุก้อนเดียว ส่วน z (gzip) เหมือนการดูดอากาศออกให้กล่องแบนลง ขนง่ายขึ้น — ปลายทางก็แค่แกะเทปออก (extract) ก็ได้ของครบเหมือนเดิม

⌨️ สร้าง / ดู / แตก
[student@server1 ~]$ tar -czf out.tar.gz project/
(มัดโฟลเดอร์ project แล้วบีบอัดเป็นไฟล์ out.tar.gz)

[student@server1 ~]$ tar -tzf out.tar.gz
project/
project/notes.txt
project/backup.txt

[student@server1 ~]$ tar -xzf out.tar.gz
(แตกไฟล์ออกมา ได้โฟลเดอร์ project กลับมาครบ)
tar -czfสร้างและบีบอัด (c = create)
tar -tzfดูว่าข้างในมีอะไรบ้าง โดยยังไม่แตก (t = list)
tar -xzfแตกไฟล์ออกมา (x = extract)
📌 เกร็ดจำตัวอักษร tar ให้ขึ้นใจ

ตัวอักษรหลัง - แต่ละตัวมีความหมายเฉพาะ จำ 4 ตัวนี้พอ:

c = create (สร้าง)  •  x = extract (แตก)  •  t = list (ดูรายการ)
z = ใช้ gzip บีบอัด  •  f = file บอกว่าชื่อไฟล์คืออะไร (ตัว f ต้องอยู่ท้ายสุดเสมอ ตามด้วยชื่อไฟล์)

💡 เกร็ด: gzip / gunzip บีบไฟล์เดี่ยว

ถ้าอยากบีบ ไฟล์เดียว (ไม่ใช่มัดหลายไฟล์) ใช้ gzip ไฟล์ ได้ไฟล์ .gz ออกมา และคลายกลับด้วย gunzip ไฟล์.gz — ส่วน tar ใช้เมื่อต้องมัดหลายไฟล์/ทั้งโฟลเดอร์เข้าด้วยกัน

9ข้อผิดพลาดที่มือใหม่เจอบ่อย

10สรุปคำสั่งบทนี้ (Cheat Sheet)

คำสั่งทำอะไร
touch ไฟล์สร้างไฟล์เปล่า
mkdir โฟลเดอร์สร้างโฟลเดอร์
mkdir -p a/b/cสร้างโฟลเดอร์หลายชั้นรวดเดียว
cp ต้นทาง ปลายทางคัดลอกไฟล์
cp -rคัดลอกทั้งโฟลเดอร์
mv ต้นทาง ปลายทางย้าย หรือ เปลี่ยนชื่อ
rm ไฟล์ลบไฟล์ (ถาวร ไม่มีถังขยะ)
rm -r โฟลเดอร์ลบทั้งโฟลเดอร์รวมของข้างใน
rmdir โฟลเดอร์ลบโฟลเดอร์ว่างเปล่า
cat ไฟล์เทเนื้อหาไฟล์ออกจอ (ไฟล์สั้น)
less ไฟล์เปิดอ่านแบบเลื่อนได้ (กด q ออก)
head -n N ไฟล์ดู N บรรทัดบนสุด
tail -n N ไฟล์ดู N บรรทัดล่างสุด
tail -f ไฟล์เฝ้าดู log สดๆ (กด Ctrl+C หยุด)
* / ?wildcard: กี่ตัวก็ได้ / 1 ตัว
> ไฟล์เขียนทับลงไฟล์
>> ไฟล์เขียนต่อท้ายไฟล์
คำสั่ง | คำสั่งpipe: ส่งผลลัพธ์ต่อให้คำสั่งถัดไป
grep คำ ไฟล์ค้นหาบรรทัดที่มีคำนั้น
grep -iค้นหาไม่สนตัวเล็กใหญ่
grep -rค้นหาทั้งโฟลเดอร์
tar -czf out.tar.gz dir/มัด + บีบอัดเป็นก้อนเดียว
tar -tzf out.tar.gzดูว่าในก้อนมีอะไร
tar -xzf out.tar.gzแตกไฟล์ออกมา
✅ จบบทนี้คุณควรทำได้

สร้างไฟล์/โฟลเดอร์ (touch, mkdir) → คัดลอก ย้าย ลบได้ปลอดภัย (cp, mv, rm) → เปิดดูเนื้อหาไฟล์ทั้งสั้นและยาว (cat, less, tail -f) → กรองและค้นหาข้อความด้วย pipe กับ grep (ps aux | grep ssh) → และมัด/แตกไฟล์ด้วย tar ได้ เท่านี้คุณก็จัดการไฟล์บน Linux ได้คล่องแล้ว!