คุณรู้หรือไม่ว่ามีไฟล์จำนวนเท่าใดในการติดตั้ง Linux ใหม่? หากคุณใช้ PopOS! การกระจายลินุกซ์ เป็นตัวอย่าง มีมากกว่า 31,000 ไฟล์ นั่นคือก่อนที่คุณจะเริ่มสร้างเอกสาร จัดเก็บเพลง ดาวน์โหลด PDF หรือจัดระเบียบรูปภาพ
ด้วยเหตุนี้ การค้นหาไฟล์หรือโฟลเดอร์ที่ถูกต้องใน Linux เมื่อคุณต้องการจึงกลายเป็นเรื่องท้าทาย ในบทความนี้ คุณจะได้เรียนรู้วิธีใช้คำสั่ง Linux FIND และเราจะยกตัวอย่างทั้งหมดที่เราสามารถทำได้
ไวยากรณ์คำสั่ง Linux FIND
ไวยากรณ์หมายถึงวิธีการรวมคำหรือคำสั่งเข้าด้วยกัน เช่นเดียวกับประโยคปกติที่อาจกลายเป็นเรื่องไร้สาระเพียงสับเปลี่ยนคำ คำสั่งก็อาจล้มเหลวได้หากไม่ได้ใช้ในรูปแบบที่เหมาะสม
ค้นหา [เส้นทาง] [เงื่อนไข] [การกระทำ]
ความหมายคือ:
ค้นหา – เริ่มต้นยูทิลิตี้ค้นหาใน Linux
เส้นทาง – ตำแหน่งที่จะดู
เงื่อนไข – อาร์กิวเมนต์ที่คุณต้องการใช้กับการค้นหา
การกระทำ – สิ่งที่คุณต้องการทำกับผลลัพธ์
ตัวอย่างง่ายๆ ที่ใช้ทั้งสามดูเหมือนว่า:
ค้นหา -ชื่อไฟล์-sample.rtf -พิมพ์
ตามที่คุณคาดเดา สิ่งนี้จะค้นหาชื่อไฟล์ file-sample.rtf
เส้นทางจุด (. ) บอกให้ find ค้นหาในไดเร็กทอรีปัจจุบันและไดเร็กทอรีใด ๆ ที่อยู่ภายใน
-name เงื่อนไข บอกให้ find รับไฟล์ที่มีชื่อเฉพาะนั้น
การดำเนินการ -print บอกให้ FIND แสดงผลลัพธ์บนหน้าจอ
จุดและ -print เป็นค่าเริ่มต้นสำหรับคำสั่ง find ดังนั้นมันจะยังคงทำสิ่งเดียวกันหากคุณไม่ใช้มัน ดังนั้น find -name file-sample.rtf จะให้ผลลัพธ์เดียวกัน
Linux ค้นหาในไดเรกทอรีอื่น
คุณสามารถค้นหาในไดเร็กทอรีที่แตกต่างจากไดเร็กทอรีที่คุณอยู่ เพียงใส่เส้นทางไปยังไดเร็กทอรีหลัง FIND หากคุณอยู่ที่ระดับรูทและรู้ว่าไฟล์นั้นอยู่ในไดเร็กทอรี home/user คุณจะใช้:
ค้นหาบ้าน/ผู้ใช้ -name file-sample.rtf
ยังคงเป็นการค้นหาแบบเรียกซ้ำ ดังนั้นจะผ่านทุกไดเรกทอรีภายใต้ ผู้ใช้ .
Linux ค้นหาหลายไดเรกทอรี
หากคุณต้องการค้นหาหลายไดเรกทอรีพร้อมกัน เพียงแสดงรายการไว้ในคำสั่งโดยคั่นด้วยช่องว่าง
ค้นหา /lib /var /bin -name file-sample.rtf
Linux FIND ที่ไม่มีการเรียกซ้ำหรือจำกัดการเรียกซ้ำ
หากคุณใช้คำสั่ง FIND ด้านบนที่ระดับรูท คำสั่งจะตรวจดูทุกไดเร็กทอรีในระบบ ดังนั้น หากคุณต้องการใช้เฉพาะไดเร็กทอรีปัจจุบัน ให้ใช้ตัวเลือก -maxdeep ตัวเลขหลัง -maxdeep บอกหาว่าจะไปลึกแค่ไหนก่อนหยุด
การใช้ -maxledge 1 หมายถึงเพียงไดเรกทอรีนี้
ค้นหา -name file-sample.rtf -maxdeep 1
การใช้ -maxdeep 2 หรือตัวเลขที่มากกว่าหมายถึงการไปลึกลงไปหลายระดับ
ค้นหา -maxdeep 5 -name file-sample.rtf
Linux FIND ตัวอย่างไวด์การ์ด
คำสั่ง FIND ใช้เครื่องหมายดอกจัน (* ) เป็นไวด์การ์ด ใช้กับส่วนใดส่วนหนึ่งของชื่อที่คุณไม่แน่ใจ สามารถใช้ได้มากกว่าหนึ่งครั้งในชื่อ หากไม่มีประเภทไฟล์เป็นส่วนหนึ่งของชื่อไฟล์ ผลลัพธ์ก็จะรวมไดเรกทอรีที่ตรงกันด้วย
ค้นหาบ้าน/ผู้ใช้ -name file*sample*
Linux ค้นหาตามประเภทตัวอย่าง
หากต้องการค้นหาเฉพาะไฟล์หรือไดเร็กทอรี ให้ใช้ตัวเลือก -type และคำอธิบายที่เหมาะสม มีบางส่วน แต่ไฟล์และไดเร็กทอรีเป็นเรื่องธรรมดาที่สุด:
ฉ – ไฟล์
d – ไดเรกทอรี
b – บล็อกอุปกรณ์
ค – อุปกรณ์อักขระ
l – ลิงก์สัญลักษณ์
s – ซ็อกเก็ต
ค้นหาบ้าน/ผู้ใช้ -name file*sample* -type d
Linux FIND ตัวอย่างที่ไม่คำนึงถึงตัวพิมพ์
ไม่เหมือนกับ Windows ตรงที่ Linux ให้ความสำคัญกับว่าตัวอักษรเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก ดังนั้นหากคุณต้องการให้ค้นหาทั้ง File-Sample.rtf และ file-sample.rtf ให้ใช้ตัวเลือก -iname
ค้นหาบ้าน/ผู้ใช้ -iname File-Sample.rtf
Linux ค้นหาไฟล์หลายไฟล์ตัวอย่าง
สมมติว่าคุณต้องการค้นหาไฟล์เวอร์ชัน .rtf และ .html ซึ่งสามารถทำได้ในคำสั่งเดียวโดยใช้ตัวดำเนินการ -o (หรือ) ในดิสโทรบางตัว คุณอาจต้องใส่ชื่อไว้ในวงเล็บ เช่น ( -name file-sample.rtf -o -name file-sample.html ) .
ค้นหาบ้าน/ผู้ใช้ -name file-sample.rtf -o -name file-sample.html
Linux ค้นหาไฟล์ที่ไม่ตรงกับชื่อ
บางทีคุณอาจรู้ว่ามีไฟล์เวอร์ชัน .html แต่จะไม่ทราบหากมีไฟล์อื่นอยู่ด้วย คุณสามารถกรองเวอร์ชัน .html ออกจากการค้นหาได้โดยใช้ตัวเลือก -ไม่ใช่
ค้นหาบ้าน/ผู้ใช้ -ชื่อไฟล์-ตัวอย่าง* -ไม่ใช่ -ชื่อ *.html
Linux FIND โดยไม่มีผลลัพธ์ข้อผิดพลาด
ในการค้นหาที่ไม่มีตัวอย่างการเรียกซ้ำ โปรดสังเกตว่าจะแสดงทุกไดเรกทอรีที่ไม่สามารถค้นหาได้และผลลัพธ์ที่ถูกต้อง นั่นน่ารำคาญ เรามาหยุดไม่ให้แสดงไดเร็กทอรี "การอนุญาตถูกปฏิเสธ" ทั้งหมด รวมเข้ากับ คำสั่งเทอร์มินัล Linux อีกอันหนึ่ง grep คุณยังสามารถใช้ Find กับ grep เพื่อ ค้นหาไฟล์ที่มีคำเฉพาะอยู่ในนั้น
ค้นหา -maxdeep 5 -name file-sample.rtf 2>&1 | grep -v “การอนุญาตถูกปฏิเสธ”
มาดูรายละเอียด 2>&1 กันดีกว่า
2 – หมายถึง stderrซึ่งย่อมาจากเอาต์พุตข้อผิดพลาดมาตรฐาน
1 – หมายถึง stdoutซึ่งย่อมาจากเอาต์พุตมาตรฐาน
> – หมายถึงการเปลี่ยนเส้นทางเอาต์พุตใดก็ตามที่อยู่ทางด้านซ้ายไปยังสิ่งใดก็ตามที่อยู่ทางด้านขวาของมัน
& – หมายถึง ประกอบเข้าด้วยกัน
ดังนั้น 2>&1 หมายถึงนำข้อผิดพลาดมาตรฐานและเปลี่ยนเส้นทาง จากนั้นรวมข้อผิดพลาดเหล่านั้นเข้ากับเอาต์พุตมาตรฐานเป็นเอาต์พุตเดียว
ตอนนี้มาดูที่ | grep -v “การอนุญาตถูกปฏิเสธ” .
| (เรียกว่าไปป์) – บอกให้ Linux ป้อนผลลัพธ์ของสิ่งใดก็ตามที่อยู่ทางซ้ายไปยังสิ่งใดก็ตามที่อยู่ทางขวา กำลังป้อนคำสั่ง grep
grep – เป็นโปรแกรมค้นหาข้อความ
-v – บอกให้ grep ค้นหาสิ่งใดก็ตามที่ไม่ตรงกับข้อความทางด้านซ้ายของ -v ในกรณีนี้ เป็นการบอก grep ให้ค้นหาเฉพาะสิ่งใดก็ตามที่ไม่มีข้อความหรือสตริง “Permission ถูกปฏิเสธ” ดังนั้น grep จะแสดงเฉพาะผลลัพธ์ที่คุณต้องการและข้อผิดพลาดใดๆ ที่ไม่ตรงกับ “Permission rejected”
Linux FIND ตามตัวอย่างสิทธิ์
.หากต้องการใช้สิ่งนี้ให้ดี คุณต้อง เรียนรู้สิทธิ์ Linux
ไฟล์ตัวอย่างทั้งหมดมีสิทธิ์ 664 ยกเว้นไฟล์ที่มีสิทธิ์ 775 ใช้ตัวเลือก -perm เพื่อค้นหา
ค้นหาเอกสาร/ -name file-sample* -type f -perm 775
Linux ค้นหาตามตัวอย่างขนาด
การค้นหาไฟล์ตามขนาดมีประโยชน์ในการทำให้ไฟล์ขนาดใหญ่มาเต็มฮาร์ดไดรฟ์ของคุณ ใช้ตัวเลือก -size ขนาดที่ต้องการ และส่วนต่อท้ายอย่างใดอย่างหนึ่งต่อไปนี้ หากไม่มีการใช้ส่วนต่อท้าย -size จะมีค่าเริ่มต้นเป็น b หากต้องการค้นหาไฟล์ที่เท่ากับและใหญ่กว่าขนาดที่กำหนด ให้ใส่เครื่องหมายบวก (+) ข้างหน้าขนาดดังกล่าว
M – เมกะไบต์
G – กิกะไบต์
k – กิโลไบต์
b – บล็อก (512 ไบต์ – ค่าเริ่มต้น)
ค – ไบต์
w – คำ (สองไบต์รวมกัน)
ค้นหา -ขนาด +500k
Linux ค้นหาโดยเจ้าของ
มีสองวิธีในการค้นหาไฟล์ตามเจ้าของ รายการหนึ่งเป็นไปตามชื่อผู้ใช้ของเจ้าของ และอีกรายการเป็นไปตามกลุ่มของผู้ใช้ หากต้องการค้นหาด้วยชื่อผู้ใช้ ให้ใช้ตัวเลือก -ผู้ใช้ ตามด้วยชื่อผู้ใช้ หากต้องการค้นหาตามกลุ่มผู้ใช้ ให้ใช้ -group ตามด้วยชื่อกลุ่ม..
ค้นหา -ชื่อกลุ่มผู้ใช้ หรือ ค้นหา -ชื่อผู้ใช้
Linux ค้นหาไฟล์ตามตัวอย่างที่แก้ไขล่าสุด
หากต้องการค้นหาไฟล์ที่ถูกแก้ไขหรือแก้ไขในช่วง X จำนวนวันที่ผ่านมา ให้ใช้ -mtime ตามด้วยตัวเลข การใส่เครื่องหมายลบ (– ) หน้าตัวเลขจะพบสิ่งที่เปลี่ยนแปลงไปภายในไม่กี่วันก่อนหน้านั้น เครื่องหมายบวก (+ ) หมายถึงภายในหลายวันก่อนหน้านั้น
ค้นหา -name “file-sample*” -mtime +5 (มากกว่า 5 วันที่ผ่านมา)
ค้นหา -name “ไฟล์ตัวอย่าง*” -mtime -5 (น้อยกว่า 5 วันที่ผ่านมา)
หากต้องการค้นหาโดยการแก้ไขล่าสุดในหน่วยนาที ให้ใช้ตัวเลือก -mmin ตามด้วยจำนวนนาที ใช้เครื่องหมาย + และ – เหมือนด้านบน
ค้นหา -ชื่อ “ตัวอย่างไฟล์*” -mmin -5
ค้นหา -name “ไฟล์ตัวอย่าง*” -mmin +5
Linux ค้นหาไฟล์ตามตัวอย่าง TIme ที่เข้าถึงล่าสุด
.ตัวเลือกที่ใช้ในการค้นหาไฟล์ตามเวลาที่ถูกเปิดครั้งล่าสุดคือ -atime สำหรับวัน และ -amin สำหรับนาที ตามด้วยจำนวนวันหรือนาทีเพื่อย้อนกลับและใช้เครื่องหมาย + และ – มากกว่าและน้อยกว่า
ค้นหา -name “ไฟล์ตัวอย่าง*” -atime -5
ค้นหา -name “ไฟล์ตัวอย่าง* -amin -5
รวม FIND เข้ากับคำสั่ง Linux อื่นๆ
มีตัวอย่างหนึ่งของการใช้ find กับคำสั่ง grep ที่ด้านบน และคุณสามารถใช้กับคำสั่งอื่นๆ ได้อีกมากมาย คุณจะเห็นว่าการใช้คำสั่ง find และคำสั่งอื่นๆ มีประสิทธิภาพมากและประหยัดเวลาได้มาก ลองนึกภาพว่าต้องลบไฟล์บางประเภทออกไป แทนที่จะค้นหาไปรอบๆ ใน file explorer เพียงแค่สร้างคำสั่งที่ถูกต้อง และมันก็เสร็จสิ้นภายในไม่กี่วินาที คุณจะใช้คำสั่ง find ตอนนี้อย่างไร
.