LFCS #1: วิธีใช้คำสั่ง 'sed' สำหรับการจัดการไฟล์ใน Linux
Linux Foundation ประกาศการรับรอง LFCS (Linux Foundation Certified Sysadmin) ซึ่งเป็นโปรแกรมใหม่ที่มุ่งช่วยเหลือบุคคลทั่วโลกให้ได้รับการรับรองในงานการดูแลระบบขั้นพื้นฐานถึงระดับกลางสำหรับระบบ Linux
ซึ่งรวมถึงการสนับสนุนระบบและบริการที่ทำงานอยู่ ตลอดจนการแก้ไขปัญหาและการวิเคราะห์โดยตรง และการตัดสินใจอย่างชาญฉลาดเพื่อขยายปัญหาไปยังทีมวิศวกร
ในการแก้ไขครั้งล่าสุดในวันที่ 11 สิงหาคม 2023 เราได้คำนึงถึงโดเมนและความสามารถอย่างพิถีพิถัน โดยสอดคล้องกับวันที่มีผลบังคับใช้ของ 11 พฤษภาคม 2023 ตามที่ประกาศอย่างเป็นทางการโดย มูลนิธิลินุกซ์
ซีรีส์นี้จะมีชื่อว่า Preparation for the LFCS (Linux Foundation Certified Sysadmin) ส่วน 1 ถึง 33 และครอบคลุมถึง หัวข้อต่อไปนี้:
- Part 1
วิธีใช้คำสั่ง 'Sed' เพื่อจัดการไฟล์ใน Linux
- Part 2
-
วิธีการติดตั้งและใช้งาน Vi/Vim ใน Linux
- Part 3
วิธีบีบอัดไฟล์และไดเร็กทอรีและค้นหาไฟล์ใน Linux
- Part 4
การแบ่งพาร์ติชันอุปกรณ์จัดเก็บข้อมูล การจัดรูปแบบระบบไฟล์ และการกำหนดค่า Swap Partition
- Part 5
เมานต์/ถอนเมานต์ระบบไฟล์ท้องถิ่นและเครือข่าย (Samba & NFS) ใน Linux
- Part 6
การประกอบพาร์ติชันเป็นอุปกรณ์ RAID – การสร้างและการจัดการการสำรองข้อมูลระบบ
- Part 7
การจัดการกระบวนการและบริการการเริ่มต้นระบบ (SysViit, Systemd และ Upstart
- Part 8
วิธีจัดการผู้ใช้และกลุ่ม การอนุญาตไฟล์ และการเข้าถึง Sudo
- Part 9
การจัดการแพ็คเกจ Linux ด้วย Yum, RPM, Apt, Dpkg, Aptitude และ Zypper
- Part 10
การเรียนรู้การเขียนสคริปต์เชลล์ขั้นพื้นฐานและการแก้ไขปัญหาระบบไฟล์
- Part 11
วิธีจัดการและสร้าง LVM โดยใช้คำสั่ง vgcreate, lvcreate และ lvextend
- Part 12
-
วิธีสำรวจ Linux ด้วยเอกสารวิธีใช้และเครื่องมือที่ติดตั้งไว้
- Part 13
วิธีกำหนดค่าและแก้ไขปัญหา Grand Unified Bootloader (GRUB)
- Part 14
ตรวจสอบการใช้ทรัพยากรกระบวนการ Linux และตั้งค่าขีดจำกัดกระบวนการตามผู้ใช้แต่ละราย
- Part 15
วิธีการตั้งค่าหรือแก้ไขพารามิเตอร์รันไทม์เคอร์เนลในระบบ Linux
- Part 16
การใช้การควบคุมการเข้าถึงภาคบังคับด้วย SELinux หรือ AppArmor ใน Linux
- Part 17
วิธีการตั้งค่ารายการควบคุมการเข้าถึง (ACL) และโควต้าดิสก์สำหรับผู้ใช้และกลุ่ม
- Part 18
การติดตั้งบริการเครือข่ายและการกำหนดค่าการเริ่มต้นอัตโนมัติเมื่อบู๊ต
- Part 19
คำแนะนำขั้นสูงสุดในการตั้งค่าเซิร์ฟเวอร์ FTP เพื่ออนุญาตการเข้าสู่ระบบโดยไม่ระบุชื่อ
- Part 20
ตั้งค่าเซิร์ฟเวอร์ DNS แคชแบบเรียกซ้ำขั้นพื้นฐานและกำหนดค่าโซนสำหรับโดเมน
- Part 21
วิธีการติดตั้ง การรักษาความปลอดภัย และการปรับแต่งประสิทธิภาพของเซิร์ฟเวอร์ฐานข้อมูล MariaDB
- Part 22
-
วิธีการติดตั้งและกำหนดค่าเซิร์ฟเวอร์ NFS สำหรับการแชร์ระบบไฟล์
- Part 23
วิธีการตั้งค่า Apache ด้วยโฮสติ้งเสมือนตามชื่อพร้อมใบรับรอง SSL
- Part 24
วิธีการตั้งค่าไฟร์วอลล์ Iptables เพื่อเปิดใช้งานการเข้าถึงบริการระยะไกลใน Linux
- Part 25
วิธีเปลี่ยน Linux ให้เป็นเราเตอร์เพื่อจัดการการรับส่งข้อมูลแบบคงที่และไดนามิก
- Part 26
วิธีการตั้งค่าระบบไฟล์ที่เข้ารหัสและสลับโดยใช้เครื่องมือ Cryptsetup
- Part 27
วิธีตรวจสอบการใช้งานระบบ การหยุดทำงาน และการแก้ไขปัญหาเซิร์ฟเวอร์ Linux
- Part 28
วิธีการตั้งค่าพื้นที่เก็บข้อมูลเครือข่ายเพื่อติดตั้งหรืออัปเดตแพ็คเกจ
- Part 29
วิธีตรวจสอบประสิทธิภาพเครือข่าย ความปลอดภัย และการแก้ไขปัญหา
- Part 30
วิธีติดตั้งและจัดการเครื่องเสมือนและคอนเทนเนอร์
- Part 31
เรียนรู้พื้นฐานของ Git เพื่อจัดการโปรเจ็กต์อย่างมีประสิทธิภาพ
- Part 32
คู่มือสำหรับผู้เริ่มต้นใช้งานเพื่อกำหนดค่าที่อยู่ IPv4 และ IPv6 ใน Linux
- Part 33
คู่มือสำหรับผู้เริ่มต้นในการสร้างการเชื่อมโยงและเชื่อมโยงเครือข่ายใน Ubuntu
โพสต์นี้เป็นส่วนที่ 1 ของ ชุดบทช่วยสอน 33 รายการ ซึ่งจะครอบคลุมโดเมนและความสามารถที่จำเป็นซึ่งจำเป็นสำหรับการสอบรับรอง LFCS ดังที่กล่าวไปแล้ว ให้เปิดเครื่องเทอร์มินัลของคุณแล้วเริ่มกันเลย
การประมวลผลสตรีมข้อความใน Linux
Linux ถือว่าอินพุตและเอาต์พุตจากโปรแกรมเป็นเหมือนกระแส (หรือลำดับ) ของอักขระ เพื่อเริ่มทำความเข้าใจการเปลี่ยนเส้นทางและไปป์ อันดับแรกเราต้องเข้าใจสตรีม I/O (อินพุตและเอาต์พุต) ที่สำคัญที่สุดสามประเภท ซึ่งจริงๆ แล้วคือไฟล์พิเศษ (ตามแบบแผนใน UNIX และ Linux สตรีมข้อมูลและอุปกรณ์ต่อพ่วง หรือไฟล์อุปกรณ์ จะถือเป็นไฟล์ธรรมดาเช่นกัน)
ความแตกต่างระหว่าง >
(ตัวดำเนินการเปลี่ยนเส้นทาง) และ |
(ตัวดำเนินการไปป์ไลน์) คือในขณะที่คำสั่งแรกเชื่อมต่อคำสั่งกับไฟล์ ส่วนอย่างหลังเชื่อมต่อเอาต์พุตของคำสั่งกับอีกคำสั่งหนึ่ง สั่งการ.
command > file
command1 | command2
เนื่องจากตัวดำเนินการเปลี่ยนเส้นทางสร้างหรือเขียนทับไฟล์โดยไม่โต้ตอบ เราจึงต้องใช้ด้วยความระมัดระวังอย่างยิ่ง และอย่าเข้าใจผิดว่าเป็นไปป์ไลน์
ข้อดีอย่างหนึ่งของไพพ์บนระบบ Linux และ UNIX คือไม่มีไฟล์ระดับกลางที่เกี่ยวข้องกับไพพ์ - stdout ของคำสั่งแรกจะไม่ถูกเขียนลงในไฟล์แล้วอ่านโดยคำสั่งที่สอง
สำหรับแบบฝึกหัดฝึกหัดต่อไปนี้ เราจะใช้บทกวี “เด็กมีความสุข ” (ผู้เขียนที่ไม่ระบุชื่อ)
การใช้คำสั่ง sed
ชื่อ sed ย่อมาจากโปรแกรมแก้ไขสตรีม สำหรับผู้ที่ไม่คุ้นเคยกับคำนี้ ตัวแก้ไขสตรีมจะใช้ในการแปลงข้อความพื้นฐานบนสตรีมอินพุต (ไฟล์หรืออินพุตจากไปป์ไลน์)
เปลี่ยนตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ในไฟล์
การใช้งาน sed ขั้นพื้นฐานที่สุด (และเป็นที่นิยม) คือการทดแทนอักขระ เราจะเริ่มต้นด้วยการเปลี่ยนแปลงทุกครั้งของตัวพิมพ์เล็ก y
เป็น UPPERCASE Y
และเปลี่ยนเส้นทางเอาต์พุตไปที่ ahappychild2.txt
ธง g
ระบุว่า sed ควรดำเนินการทดแทนสำหรับอินสแตนซ์ทั้งหมดของคำในทุกบรรทัดของไฟล์ หากละเว้นแฟล็กนี้ sed จะแทนที่เฉพาะคำที่เกิดขึ้นครั้งแรกในแต่ละบรรทัด
ไวยากรณ์พื้นฐานของ Sed:
sed ‘s/term/replacement/flag’ file
ตัวอย่างของเรา:
sed ‘s/y/Y/g’ ahappychild.txt > ahappychild2.txt
ค้นหาและแทนที่ Word ในไฟล์
หากคุณต้องการค้นหาหรือแทนที่อักขระพิเศษ (เช่น /
, \
, &
) คุณต้องหลีกเลี่ยงอักขระดังกล่าว ในระยะนี้ หรือสตริงทดแทนโดยมีเครื่องหมายทับย้อนกลับ
ตัวอย่างเช่น เราจะแทนที่คำ และ แทนเครื่องหมายและ ในเวลาเดียวกัน เราจะแทนที่คำว่า ฉัน
ด้วย คุณ
เมื่อพบคำแรกที่ต้นบรรทัด
sed 's/and/\&/g;s/^I/You/g' ahappychild.txt
ในคำสั่งข้างต้น ^
(เครื่องหมายคาเร็ต) เป็นนิพจน์ทั่วไปที่รู้จักกันดีซึ่งใช้เพื่อแสดงจุดเริ่มต้นของบรรทัด
อย่างที่คุณเห็น เราสามารถรวมคำสั่งการแทนที่สองคำสั่งขึ้นไป (และใช้นิพจน์ทั่วไปภายในคำสั่งเหล่านั้น) โดยแยกคำสั่งเหล่านั้นด้วยเครื่องหมายอัฒภาคและปิดชุดไว้ในเครื่องหมายคำพูดเดี่ยว
พิมพ์บรรทัดที่เลือกจากไฟล์
การใช้ sed อีกอย่างคือการแสดง (หรือการลบ) ส่วนที่เลือกของไฟล์ ในตัวอย่างต่อไปนี้ เราจะแสดง /var/log/messages 5 บรรทัดแรกตั้งแต่วันที่ 8 มิถุนายน
sed -n '/^Jun 8/ p' /var/log/messages | sed -n 1,5p
โปรดทราบว่าตามค่าเริ่มต้น sed จะพิมพ์ทุกบรรทัด เราสามารถแทนที่พฤติกรรมนี้ได้ด้วยตัวเลือก -n จากนั้นบอกให้ sed พิมพ์ (ระบุโดย p) เฉพาะส่วนของไฟล์ (หรือไปป์) ที่ตรงกับรูปแบบ (8 มิ.ย. ที่จุดเริ่มต้นของบรรทัดในกรณีแรก และบรรทัดที่ 1 ถึง 5 รวมในกรณีที่สอง)
สุดท้ายนี้ จะมีประโยชน์ในขณะที่ตรวจสอบสคริปต์หรือไฟล์การกำหนดค่าเพื่อตรวจสอบโค้ดเองและแสดงความคิดเห็น sed one-liner ต่อไปนี้ลบ (d
) บรรทัดว่างหรือที่ขึ้นต้นด้วย #
(อักขระ |
บ่งชี้ถึงบูลีน หรือ< ระหว่างนิพจน์ทั่วไปทั้งสอง)
sed '/^#\|^$/d' apache2.conf
คำสั่งยูนิค
คำสั่ง uniq ช่วยให้เราสามารถรายงานหรือลบบรรทัดที่ซ้ำกันในไฟล์ โดยเขียนไปที่ stdout ตามค่าเริ่มต้น เราต้องทราบว่า uniq ตรวจไม่พบบรรทัดที่ซ้ำกัน เว้นแต่จะอยู่ติดกัน
ดังนั้น uniq จึงมักใช้ควบคู่กับ sort ที่นำหน้า (ซึ่งใช้ในการจัดเรียงบรรทัดของไฟล์ข้อความ) ตามค่าเริ่มต้น sort จะใช้ฟิลด์แรก (คั่นด้วยช่องว่าง) เป็นฟิลด์หลัก เพื่อระบุฟิลด์คีย์อื่น เราจำเป็นต้องใช้ตัวเลือก -k
ตัวอย่างคำสั่ง Uniq
คำสั่ง du -sch /path/to/directory/* ส่งคืนการใช้พื้นที่ดิสก์ต่อไดเร็กทอรีย่อยและไฟล์ภายในไดเร็กทอรีที่ระบุในรูปแบบที่มนุษย์สามารถอ่านได้ (แสดงจำนวนรวมต่อไดเร็กทอรีด้วย) และไม่ เรียงลำดับเอาต์พุตตามขนาด แต่ตามไดเร็กทอรีย่อยและชื่อไฟล์
เราสามารถใช้คำสั่งต่อไปนี้เพื่อเรียงลำดับตามขนาด
du -sch /var/* | sort –h
คุณสามารถนับจำนวนเหตุการณ์ในบันทึกตามวันที่โดยบอกให้ uniq ทำการเปรียบเทียบโดยใช้อักขระ 6 ตัวแรก (-w 6)
ของแต่ละบรรทัด (โดยที่วันที่ ถูกระบุ) และนำหน้าแต่ละบรรทัดเอาต์พุตด้วยจำนวนครั้งที่เกิดขึ้น (-c
) ด้วยคำสั่งต่อไปนี้
cat /var/log/mail.log | uniq -c -w 6
สุดท้าย คุณสามารถรวม sort และ uniq ได้ (ตามปกติ) พิจารณาไฟล์ต่อไปนี้พร้อมรายชื่อผู้บริจาค วันที่บริจาค และจำนวนเงิน สมมติว่าเราต้องการทราบว่ามีผู้บริจาคที่ไม่ซ้ำกันกี่ราย
เราจะใช้คำสั่ง cat ต่อไปนี้เพื่อตัดฟิลด์แรก (ฟิลด์จะถูกคั่นด้วยเครื่องหมายทวิภาค) จัดเรียงตามชื่อ และลบบรรทัดที่ซ้ำกัน
cat sortuniq.txt | cut -d: -f1 | sort | uniq
คำสั่ง grep
คำสั่ง grep ค้นหาไฟล์ข้อความหรือ (เอาต์พุตคำสั่ง) สำหรับการเกิดขึ้นของนิพจน์ทั่วไปที่ระบุ และเอาต์พุตบรรทัดใดๆ ที่ตรงกับเอาต์พุตมาตรฐาน
ตัวอย่างคำสั่ง Grep
แสดงข้อมูลจาก /etc/passwd สำหรับผู้ใช้ gacanepa โดยไม่สนใจตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
grep -i gacanepa /etc/passwd
แสดงเนื้อหาทั้งหมดของ /etc ที่ชื่อขึ้นต้นด้วย rc ตามด้วยตัวเลขตัวเดียว
ls -l /etc | grep rc[0-9]
การใช้คำสั่ง tr
คำสั่ง tr สามารถใช้เพื่อแปล (เปลี่ยน) หรือลบอักขระจาก stdin และเขียนผลลัพธ์ไปที่ stdout
เปลี่ยนตัวพิมพ์เล็กทั้งหมดเป็นตัวพิมพ์ใหญ่ในไฟล์ sortuniq.txt
cat sortuniq.txt | tr [:lower:] [:upper:]
บีบตัวคั่นในเอาต์พุตของ ls –l ให้เหลือเพียงช่องว่างเดียว
ls -l | tr -s ' '
การใช้คำสั่งตัด
คำสั่ง cut แยกส่วนของบรรทัดอินพุต (จาก stdin หรือไฟล์) และแสดงผลลัพธ์ในเอาต์พุตมาตรฐาน ขึ้นอยู่กับจำนวนไบต์ (ตัวเลือก -b
) อักขระ (-c
) หรือฟิลด์ (-f
)
ในกรณีสุดท้ายนี้ (ขึ้นอยู่กับฟิลด์) ตัวคั่นฟิลด์เริ่มต้นคือแท็บ แต่สามารถระบุตัวคั่นอื่นได้โดยใช้ตัวเลือก -d
ตัวอย่างคำสั่งตัด
แยกบัญชีผู้ใช้และเชลล์เริ่มต้นที่กำหนดให้กับพวกเขาจาก /etc/passwd (ตัวเลือก –d
ช่วยให้เราสามารถระบุตัวคั่นฟิลด์และ –f
สวิตช์ ระบุว่าฟิลด์ใดจะถูกแตกออกมา
cat /etc/passwd | cut -d: -f1,7
โดยสรุป เราจะสร้างสตรีมข้อความที่ประกอบด้วยไฟล์ที่ไม่ว่างเปล่าไฟล์แรกและไฟล์ที่สามของเอาต์พุตของคำสั่ง สุดท้าย เราจะใช้ grep เป็นตัวกรองแรกเพื่อตรวจสอบเซสชันของผู้ใช้ gacanepa จากนั้นบีบตัวคั่นให้เหลือเพียงช่องว่างเดียว (tr -s ' '
).
ต่อไป เราจะแยกฟิลด์ที่หนึ่งและสามด้วย ตัด และสุดท้ายจะเรียงลำดับตามฟิลด์ที่สอง (ที่อยู่ IP ในกรณีนี้) ที่ไม่ซ้ำกัน
last | grep gacanepa | tr -s ' ' | cut -d' ' -f1,3 | sort -k2 | uniq
คำสั่งด้านบนแสดงให้เห็นว่าสามารถรวมคำสั่งและไพพ์หลายคำเข้าด้วยกันเพื่อให้ได้ข้อมูลที่กรองตามความต้องการของเราได้อย่างไร อย่าลังเลที่จะรันทีละส่วนเพื่อช่วยให้คุณเห็นผลลัพธ์ที่ถูกส่งจากคำสั่งหนึ่งไปยังอีกคำสั่งหนึ่ง (นี่อาจเป็นประสบการณ์การเรียนรู้ที่ยอดเยี่ยม!)
สรุป
แม้ว่าตัวอย่างนี้ (รวมถึงตัวอย่างที่เหลือในบทช่วยสอนปัจจุบัน) อาจดูเหมือนไม่มีประโยชน์มากนักตั้งแต่แรกเห็น แต่ก็เป็นจุดเริ่มต้นที่ดีในการเริ่มทดลองใช้คำสั่งที่ใช้ในการสร้าง แก้ไข และจัดการไฟล์จาก Linux บรรทัดคำสั่ง.
อย่าลังเลที่จะฝากคำถามและความคิดเห็นของคุณไว้ด้านล่าง - พวกเขาจะยินดีเป็นอย่างยิ่ง!
LFCS eBook มีวางจำหน่ายแล้วในขณะนี้ สั่งซื้อสำเนาของคุณวันนี้และเริ่มต้นการเดินทางสู่การเป็นผู้ดูแลระบบ Linux ที่ได้รับการรับรอง!
Product Name | Price | Buy |
---|---|---|
The Linux Foundation’s LFCS Certification Preparation Guide | $19.99 | [Buy Now] |
สุดท้ายนี้ โปรดพิจารณาซื้อบัตรกำนัลการสอบของคุณโดยใช้ลิงก์ต่อไปนี้เพื่อรับค่าคอมมิชชันเล็กน้อย ซึ่งจะช่วยให้เราอัปเดตหนังสือเล่มนี้ได้