ซีรี่ส์ RHCSA: วิธีการจัดการไฟล์และไดเร็กทอรี - ตอนที่ 2
ในบทความนี้ RHCSA ส่วนที่ 2: การจัดการไฟล์และไดเร็กทอรี เราจะทบทวนทักษะที่จำเป็นบางประการที่จำเป็นในงานประจำวันของผู้ดูแลระบบ
สร้าง ลบ คัดลอก และย้ายไฟล์และไดเร็กทอรี
การจัดการไฟล์และไดเร็กทอรีเป็นความสามารถที่สำคัญที่ผู้ดูแลระบบทุกคนควรมี ซึ่งรวมถึงความสามารถในการสร้าง/ลบไฟล์ข้อความตั้งแต่เริ่มต้น (แกนหลักของการกำหนดค่าแต่ละโปรแกรม) และไดเร็กทอรี (ที่คุณจะจัดระเบียบไฟล์และไดเร็กทอรีอื่น ๆ) และเพื่อค้นหาประเภทของไฟล์ที่มีอยู่
คำสั่ง touch สามารถใช้ไม่เพียงแต่เพื่อสร้างไฟล์เปล่าเท่านั้น แต่ยังใช้เพื่ออัปเดตเวลาการเข้าถึงและการแก้ไขไฟล์ที่มีอยู่อีกด้วย
คุณสามารถใช้ ไฟล์ [ชื่อไฟล์]
เพื่อกำหนดประเภทของไฟล์ (ซึ่งจะมีประโยชน์ก่อนที่จะเปิดตัวโปรแกรมแก้ไขข้อความที่คุณต้องการแก้ไข)
และ rm [ชื่อไฟล์]
เพื่อลบออก
สำหรับไดเร็กทอรี คุณสามารถสร้างไดเร็กทอรีภายในพาธที่มีอยู่ด้วย mkdir [directory]
หรือสร้างพาธแบบเต็มด้วย mkdir -p [/full/path/to/directory]
เมื่อต้องการลบไดเร็กทอรี คุณต้องแน่ใจว่าไดเร็กทอรีว่างก่อนที่จะออกคำสั่ง rmdir [directory]
หรือใช้คำสั่งที่มีประสิทธิภาพมากกว่า (จัดการด้วยความระมัดระวัง!) rm -rf [ไดเร็กทอรี]
. ตัวเลือกสุดท้ายนี้จะบังคับให้ลบ [directory]
และเนื้อหาทั้งหมดออกแบบวนซ้ำ ดังนั้นคุณต้องยอมรับความเสี่ยงในการใช้งานเอง
การเปลี่ยนเส้นทางอินพุตและเอาต์พุตและการวางท่อ
สภาพแวดล้อมบรรทัดคำสั่งมีคุณลักษณะที่มีประโยชน์มากสองประการที่ช่วยให้สามารถเปลี่ยนเส้นทาง อินพุต และ เอาต์พุต ของคำสั่งจากและไปยังไฟล์ได้ และส่งเอาต์พุตของคำสั่งไปยังอีกคำสั่งหนึ่งที่เรียกว่า การเปลี่ยนเส้นทางและการวางท่อตามลำดับ
เพื่อทำความเข้าใจแนวคิดที่สำคัญทั้งสองนี้ อันดับแรกเราต้องเข้าใจสตรีม (หรือลำดับ) I/O (อินพุตและเอาท์พุต) ที่สำคัญที่สุดสามประเภท ซึ่งจริงๆ แล้วเป็นไฟล์พิเศษ ในความหมาย *nix
- อินพุตมาตรฐาน (หรือที่เรียกว่า stdin) จะแนบไปกับคีย์บอร์ดโดยค่าเริ่มต้น กล่าวอีกนัยหนึ่ง แป้นพิมพ์เป็นอุปกรณ์อินพุตมาตรฐานในการป้อนคำสั่งไปยังบรรทัดคำสั่ง
- เอาต์พุตมาตรฐาน (หรือที่เรียกว่า stdout) จะติดอยู่กับหน้าจอโดยค่าเริ่มต้น ซึ่งเป็นอุปกรณ์ที่ "รับ" เอาต์พุตของคำสั่งและแสดงผลบนหน้าจอ
- ข้อผิดพลาดมาตรฐาน (หรือที่เรียกว่า stderr) คือตำแหน่งที่ข้อความสถานะของคำสั่งถูกส่งไปโดยค่าเริ่มต้น ซึ่งก็คือหน้าจอด้วย
ในตัวอย่างต่อไปนี้ เอาต์พุตของ ls /var
จะถูกส่งไปยัง stdout (หน้าจอ) รวมถึงผลลัพธ์ของ ls /tecmint . แต่ในกรณีหลัง มันคือ stderr ที่แสดง
เพื่อให้ระบุไฟล์พิเศษเหล่านี้ได้ง่ายขึ้น แต่ละไฟล์จะได้รับมอบหมายให้อธิบายไฟล์ ซึ่งเป็นการแสดงนามธรรมที่ใช้ในการเข้าถึงไฟล์เหล่านั้น สิ่งสำคัญที่ต้องทำความเข้าใจคือไฟล์เหล่านี้สามารถเปลี่ยนเส้นทางได้เช่นเดียวกับไฟล์อื่นๆ ความหมายก็คือ คุณสามารถจับภาพเอาต์พุตจากไฟล์หรือสคริปต์ และส่งเป็นอินพุตไปยังไฟล์ คำสั่ง หรือสคริปต์อื่นได้ ซึ่งจะช่วยให้คุณสามารถจัดเก็บบนดิสก์ เช่น ผลลัพธ์ของคำสั่งเพื่อการประมวลผลหรือการวิเคราะห์ในภายหลัง
หากต้องการเปลี่ยนเส้นทาง stdin (fd 0), stdout (fd 1) หรือ stderr (fd 2) ให้ใช้ตัวดำเนินการต่อไปนี้
- Redirection Operator
เอฟเฟกต์
- >
เปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์ที่มีเอาต์พุตมาตรฐาน หากมีไฟล์ปลายทางอยู่ ไฟล์นั้นจะถูกเขียนทับ
- >>
ผนวกเอาต์พุตมาตรฐานเข้ากับไฟล์
- 2>
เปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปยังไฟล์ที่มีเอาต์พุตมาตรฐาน หากมีไฟล์ปลายทางอยู่ ไฟล์นั้นจะถูกเขียนทับ
- 2>>
เพิ่มข้อผิดพลาดมาตรฐานต่อท้ายไฟล์ที่มีอยู่
- &>
เปลี่ยนเส้นทางทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานไปยังไฟล์ หากมีไฟล์ที่ระบุอยู่ ไฟล์นั้นจะถูกเขียนทับ
- <
ใช้ไฟล์ที่ระบุเป็นอินพุตมาตรฐาน
- <>
-
ไฟล์ที่ระบุใช้สำหรับทั้งอินพุตมาตรฐานและเอาต์พุตมาตรฐาน
ตรงข้ามกับการเปลี่ยนเส้นทาง การวางท่อจะดำเนินการโดยการเพิ่มแถบแนวตั้ง (|)
หลังคำสั่งและก่อนหน้าคำสั่งอื่น
จดจำ:
- การเปลี่ยนเส้นทาง ใช้เพื่อส่งเอาต์พุตของคำสั่งไปยังไฟล์ หรือเพื่อส่งไฟล์เป็นอินพุตไปยังคำสั่ง
- Pipelining ใช้เพื่อส่งเอาต์พุตของคำสั่งไปยังคำสั่งอื่นเป็นอินพุต
ตัวอย่างของการเปลี่ยนเส้นทางและการวางท่อ
ตัวอย่างที่ 1: การเปลี่ยนเส้นทางเอาต์พุตของคำสั่งไปยังไฟล์
จะมีบางครั้งที่คุณจะต้องวนซ้ำรายการไฟล์ ในการทำเช่นนั้น คุณสามารถบันทึกรายการนั้นลงในไฟล์ก่อน จากนั้นจึงอ่านไฟล์นั้นทีละบรรทัด แม้ว่าจะเป็นเรื่องจริงที่คุณสามารถวนซ้ำผลลัพธ์ของ ls ได้โดยตรง แต่ตัวอย่างนี้ใช้เพื่อแสดงการเปลี่ยนเส้นทาง
ls -1 /var/mail > mail.txt
ตัวอย่างที่ 2: การเปลี่ยนเส้นทางทั้ง stdout และ stderr เป็น /dev/null
ในกรณีที่เราต้องการป้องกันไม่ให้ทั้ง stdout และ stderr แสดงบนหน้าจอ เราสามารถเปลี่ยนเส้นทางตัวอธิบายไฟล์ทั้งสองไปที่ /dev/null
โปรดสังเกตการเปลี่ยนแปลงของเอาต์พุตเมื่อมีการใช้การเปลี่ยนเส้นทางสำหรับคำสั่งเดียวกัน
ls /var /tecmint
ls /var/ /tecmint &> /dev/null
ตัวอย่างที่ 3: การใช้ไฟล์เป็นอินพุตของคำสั่ง
ในขณะที่ไวยากรณ์คลาสสิกของคำสั่ง cat เป็นดังนี้
cat [file(s)]
คุณยังสามารถส่งไฟล์เป็นอินพุตได้โดยใช้ตัวดำเนินการเปลี่ยนเส้นทางที่ถูกต้อง
cat < mail.txt
ตัวอย่างที่ 4: การส่งเอาต์พุตของคำสั่งเป็นอินพุตไปยังอีกคำสั่งหนึ่ง
หากคุณมีรายการไดเร็กทอรีหรือกระบวนการขนาดใหญ่ และต้องการค้นหาไฟล์หรือกระบวนการที่ต้องการได้อย่างรวดเร็ว คุณจะต้องส่งรายการไปยัง grep
โปรดทราบว่าเราใช้กับไปป์ไลน์ในตัวอย่างต่อไปนี้ รายการแรกค้นหาคำหลักที่ต้องการ ในขณะที่รายการที่สองจะลบ คำสั่ง grep
จริงออกจากผลลัพธ์ ตัวอย่างนี้แสดงรายการกระบวนการทั้งหมดที่เกี่ยวข้องกับผู้ใช้ apache
ps -ef | grep apache | grep -v grep