ค้นหาเว็บไซต์

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]

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