Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

คำสั่ง FIND ของ Linux พร้อมตัวอย่าง

คุณรู้ไหมว่าการติดตั้ง Linux ใหม่มีไฟล์กี่ไฟล์? หากใช้ PopOS! เป็นตัวอย่าง มีไฟล์มากกว่า 31,000 ไฟล์ นั่นก่อนที่คุณจะเริ่มสร้างเอกสาร จัดเก็บเพลง ดาวน์โหลด PDF หรือจัดระเบียบรูปภาพ

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

ไวยากรณ์คำสั่ง FIND ของ Linux

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

find [path] [conditions] [actions]

นี่คือความหมาย:

  • find – เริ่มต้นยูทิลิตี Find ใน Linux
  • path – ที่จะค้นหา
  • conditions – อาร์กิวเมนต์ที่คุณต้องการนำไปใช้กับการค้นหา
  • actions – สิ่งที่คุณต้องการทำกับผลลัพธ์

ตัวอย่างง่ายๆ ที่ใช้ทั้งสามอย่าง:

find . -name file-sample.rtf -print

ตามที่คุณคาดการณ์ นี่จะค้นหาชื่อไฟล์ file-sample.rtf

จุด (.) path บอก find ให้ค้นหาในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยภายใน

-name เงื่อนไข บอก find ให้หาไฟล์ด้วยชื่อเฉพาะนั้น

-print การกระทำ บอก FIND ให้แสดงผลลัพธ์บนหน้าจอ

จุดและ -print เป็นค่าเริ่มต้นของคำสั่ง find ดังนั้นมันจะทำงานเหมือนเดิมแม้คุณจะไม่ใช้ก็ได้ ดังนั้น find -name file-sample.rtf จะให้ผลลัพธ์เหมือนกัน

Linux FIND ในไดเรกทอรีอื่น

คุณสามารถค้นหาในไดเรกทอรีที่ต่างจากที่คุณอยู่ได้ เพียงแทรกพาธไปยังไดเรกทอรีหลัง FIND หากคุณอยู่ที่รูทและรู้ว่าไฟล์อยู่ในไดเรกทอรี home/user ให้ใช้:

find home/user -name file-sample.rtf

มันยังคงเป็นการค้นหาแบบ recursive ดังนั้นมันจะผ่านทุกไดเรกทอรีภายใต้ user

Linux FIND ค้นหาหลายไดเรกทอรี

หากคุณต้องการค้นหาในหลายไดเรกทอรีพร้อมกัน ให้ระบุลงในคำสั่ง คั่นด้วยช่องว่าง

find /lib /var /bin -name file-sample.rtf

Linux FIND ไม่มี Recursion หรือจำกัด Recursion

หากคุณใช้คำสั่ง FIND ข้างต้นที่ระดับรูท มันจะค้นหาทุกไดเรกทอรีในระบบ ดังนั้นหากคุณต้องการอยู่แค่ไดเรกทอรีปัจจุบัน ให้ใช้ตัวเลือก -maxdepth ตัวเลขหลัง -maxdepth บอก Find ว่าไปลึกแค่ไหนก่อนหยุด

การใช้ -maxdepth 1 หมายถึงแค่ไดเรกทอรีนี้

find -name file-sample.rtf -maxdepth 1

การใช้ -maxdepth 2 หรือตัวเลขมากกว่า หมายถึงไปลึกกว่านั้นตามจำนวนระดับ

find -maxdepth 5 -name file-sample.rtf

ตัวอย่าง Linux FIND Wildcard

คำสั่ง FIND ใช้เครื่องหมายดอกจัน (*) เป็น wildcard ใช้สำหรับส่วนใดของชื่อที่คุณไม่แน่ใจ สามารถใช้ได้มากกว่าหนึ่งครั้งในชื่อ ถ้าไม่มีประเภทไฟล์เป็นส่วนหนึ่งของชื่อไฟล์ ผลลัพธ์จะรวมไดเรกทอรีที่ตรงกันด้วย

find home/user -name file*sample*

ตัวอย่าง Linux FIND ตามประเภท

เพื่อค้นหาเฉพาะไฟล์หรือไดเรกทอรี ให้ใช้ตัวเลือก -type และตัวบ่งชี้ที่เหมาะสม มีหลายตัว แต่ไฟล์และไดเรกทอรีเป็นที่พบบ่อยสุด:

  • f – ไฟล์
  • d – ไดเรกทอรี
  • b – บล็อกอุปกรณ์
  • c – ตัวอักษรอุปกรณ์
  • l – symbolic link
  • s – socket

find home/user -name file*sample* -type d

Linux FIND แบบไม่สนใจตัวพิมพ์ใหญ่เล็ก

ต่างจาก Windows Linux สนใจว่าตัวอักษรเป็นพิมพ์ใหญ่หรือเล็ก ดังนั้นหากคุณต้องการให้ค้นหาทั้ง File-Sample.rtf และ file-sample.rtf ให้ใช้ตัวเลือก -iname

find home/user -iname File-Sample.rtf

ตัวอย่าง Linux FIND หลายไฟล์

สมมติว่าคุณต้องการหาเวอร์ชัน .rtf และ .html ของไฟล์ สามารถทำได้ในคำสั่งเดียวโดยใช้ตัวดำเนินการ -o (หรือ) ในบาง distro คุณอาจต้องใส่ชื่อในวงเล็บ เช่น ( -name file-sample.rtf -o -name file-sample.html )

find home/user -name file-sample.rtf -o -name file-sample.html

Linux FIND ไฟล์ที่ไม่ตรงกับชื่อ

คุณอาจรู้ว่ามีเวอร์ชัน .html ของไฟล์ แต่ไม่แน่ใจว่ามีอีกไหม คุณสามารถกรองเวอร์ชัน .html ออกจากการค้นหาโดยใช้ตัวเลือก -not

find home/user -name file-sample* -not -name *.html

Linux FIND โดยไม่มีผลลัพธ์ข้อผิดพลาด

ในตัวอย่าง find ไม่มี recursion สังเกตว่ามันรายการทุกไดเรกทอรีที่มันค้นหาไม่ได้และผลลัพธ์ที่ถูกต้อง นั่นรบกวน มาหยุดไม่ให้มันแสดงไดเรกทอรี "Permission denied" ทั้งหมด รวมกับคำสั่ง Linux terminal อื่นคือ grep คุณยังสามารถใช้ Find กับ grep เพื่อหาไฟล์ที่มีคำเฉพาะในตัวได้

find -maxdepth 5 -name file-sample.rtf 2>&1 | grep -v "Permission denied"

ลองแยก 2>&1:

  • 2 – แทน stderr ซึ่งเป็นข้อผิดพลาดมาตรฐาน
  • 1 – แทน stdout ซึ่งเป็นเอาต์พุตมาตรฐาน
  • > – หมายถึงการเปลี่ยนทิศทางเอาต์พุตด้านซ้ายไปด้านขวา
  • & – หมายถึงการรวมเข้าด้วยกัน

ดังนั้น 2>&1 หมายถึงนำข้อผิดพลาดมาตรฐานเปลี่ยนทิศทาง แล้วรวมเข้ากับเอาต์พุตมาตรฐานเป็นเอาต์พุตเดียว

ตอนนี้ดู | grep -v "Permission denied":

  • | (เรียกว่า pipe) – บอก Linux ให้นำผลลัพธ์ด้านซ้ายไปให้ด้านขวา ส่งให้คำสั่ง grep
  • grep – เป็นยูทิลิตีค้นหาข้อความ
  • -v – บอก grep ให้ค้นหาอะไรที่ไม่ตรงกับข้อความด้านซ้ายของ -v ในกรณีนี้ บอก grep ให้หาเฉพาะสิ่งที่ไม่มีข้อความ "Permission denied" ดังนั้น grep จะแสดงเฉพาะผลลัพธ์ที่คุณต้องการและข้อผิดพลาดที่ไม่ตรงกับ "Permission denied"

ตัวอย่าง Linux FIND ตามสิทธิ์

เพื่อใช้ได้ดี คุณต้องเรียนรู้สิทธิ์ของ Linux

ไฟล์ตัวอย่างทั้งหมดมีสิทธิ์ 664 ยกเว้นอันหนึ่งที่มีสิทธิ์ 775 ใช้ตัวเลือก -perm เพื่อหามัน

find Documents/ -name file-sample* -type f -perm 775

ตัวอย่าง Linux FIND ตามขนาด

การค้นหาไฟล์ตามขนาดมีประโยชน์สำหรับการหาไฟล์ใหญ่ที่เต็มฮาร์ดดิสก์ ใช้ตัวเลือก -size, ขนาดที่ต้องการ, และหน่วยต่อไปนี้ หากไม่ใช้หน่วย -size จะเป็นค่าเริ่มต้น b เพื่อหาไฟล์เท่ากับและใหญ่กว่าขนาดหนึ่ง ให้ใส่เครื่องหมายบวก (+) หน้าขนาด

  • M – เมกะไบต์
  • G – กิกะไบต์
  • k – กิโลไบต์
  • b – บล็อก (512 ไบต์ – ค่าเริ่มต้น)
  • c – ไบต์
  • w – คำ (สองไบต์รวมกัน)

find -size +500k

Linux FIND ตามเจ้าของ

มีสองวิธีค้นหาไฟล์ตามเจ้าของ หนึ่งคือชื่อผู้ใช้ และอีกคือกลุ่มผู้ใช้ เพื่อค้นหาตามชื่อผู้ใช้ ให้ใช้ตัวเลือก -user ตามด้วยชื่อผู้ใช้ เพื่อค้นหาตามกลุ่มผู้ใช้ ให้ใช้ -group ตามด้วยชื่อกลุ่ม

find -user groupname หรือ find -user username

ตัวอย่าง Linux FIND ไฟล์ตามเวลาที่ปรับปรุงล่าสุด

เพื่อหาไฟล์ที่ถูกปรับปรุงหรือแก้ไขใน X วันที่ผ่านมา ใช้ -mtime ตามด้วยตัวเลข การใส่เครื่องหมายลบ (-) หน้าตัวเลขจะหาอะไรที่ถูกเปลี่ยนแปลงภายในวันนั้นก่อนหน้านี้ เครื่องหมายบวก (+) หมายถึงภายในวันนั้นก่อนหน้านี้

find -name "file-sample*" -mtime +5 (มากกว่า 5 วันที่แล้ว)

find -name "file-sample*" -mtime -5 (น้อยกว่า 5 วันที่แล้ว)

เพื่อค้นหาตามเวลาปรับปรุงล่าสุดในหน่วยนาที ให้ใช้ตัวเลือก -mmin ตามด้วยจำนวนนาที ใช้ + และ - เหมือนด้านบน

find -name "file-sample*" -mmin -5

find -name "file-sample*" -mmin +5

ตัวอย่าง Linux FIND ไฟล์ตามเวลาเข้าถึงล่าสุด

ตัวเลือกที่ใช้ค้นหาไฟล์จากเวลาที่เปิดล่าสุดคือ -atime สำหรับวัน และ -amin สำหรับนาที ตามด้วยจำนวนวันหรือนาทีที่ต้องการย้อนกลับ และใช้เครื่องหมาย + และ - เป็นมากกว่าและน้อยกว่า

find -name "file-sample*" -atime -5

find -name "file-sample*" -amin -5

รวม FIND กับคำสั่ง Linux อื่นๆ

มีตัวอย่างด้านบนของการใช้ find กับคำสั่ง grep และคุณสามารถใช้กับคำสั่งอื่นๆ ได้อีกมาก คุณเห็นได้ว่าการใช้ find และคำสั่งอื่นๆ สามารถทรงพลังและประหยัดเวลาได้มาก ทưởng像一下必须删除一堆特定类型的文件。与其在文件资源管理器中四处搜索,只需编写正确的命令,几秒钟就完成了。你现在将如何使用 find 命令?