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

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

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

Linux FIND Command Syntax

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

ค้นหา [เส้นทาง] [เงื่อนไข] [การกระทำ](find [path] [conditions] [actions])

นี่คือสิ่งที่หมายถึง:

find – เริ่มต้นค้นหา(Find)ยูทิลิตี้ในLinux

เส้นทาง(path ) – จะดูที่ไหน

เงื่อนไข(conditions ) – อาร์กิวเมนต์ที่คุณต้องการนำไปใช้กับการค้นหา

การกระทำ(actions ) – สิ่งที่คุณต้องการจะทำอย่างไรกับผลลัพธ์

ตัวอย่างง่ายๆที่ใช้ทั้งสามมีลักษณะดังนี้:

หา . -name file-sample.rtf -print(find . -name file-sample.rtf -print)

ตามที่คุณเดา จะพบชื่อไฟล์  file-sample.rtf

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

เงื่อนไข-nameบอกให้ find รับไฟล์ที่มีชื่อเฉพาะนั้น

การ ดำเนินการ -printจะบอกให้ FIND แสดงผลบนหน้าจอ

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

Linux ค้นหาในไดเรกทอรีอื่น(Linux FIND In Another Directory)

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

find home/user -name file-sample.rtf

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

Linux FIND ค้นหาหลายไดเรกทอรี(Linux FIND Search Multiple Directories)

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

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

Linux FIND ไม่มีการเรียกซ้ำหรือจำกัดการเรียกซ้ำ(Linux FIND with No Recursion or Limiting Recursion)

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

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

find -name file-sample.rtf -maxdepth 1

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

ค้นหา -maxdepth 5 -name file-sample.rtf(find -maxdepth 5 -name file-sample.rtf)

Linux FIND Wildcard Example

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

find home/user -name file*sample*

Linux FIND ตามตัวอย่างประเภท(Linux FIND by Type Example)

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

f – ไฟล์

d – ไดเรกทอรี

b – บล็อกอุปกรณ์

ค – อุปกรณ์ตัวละคร

ล. – ลิงค์สัญลักษณ์

s – ซ็อกเก็ต

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

Linux FIND Case Insensitive Example

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

find home/user -iname File-Sample.rtf

Linux FIND ตัวอย่างไฟล์หลายไฟล์(Linux FIND Several Files Example)

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

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

Linux FIND ไฟล์ที่ไม่ตรงกับชื่อ(Linux FIND Files That Don’t Match a Name)

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

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

Linux ค้นหาโดยไม่มีข้อผิดพลาด ผลลัพธ์(Linux FIND Without Error Results)

ในตัวอย่างการค้นหาโดยไม่มีการเรียกซ้ำ สังเกตว่ามันแสดงรายการทุกไดเร็กทอรีที่ไม่สามารถค้นหาได้และผลลัพธ์ที่ถูกต้อง ที่น่ารำคาญ หยุดไม่ให้แสดงไดเร็กทอรี " Permission denied" ทั้งหมด รวมเข้ากับคำสั่งเทอร์มินัล Linux(Linux terminal command) อื่น grep คุณยังสามารถใช้Find with grep เพื่อค้นหาไฟล์ที่มีคำเฉพาะใน(find files with specific words in them)นั้น

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”

| (เรียกว่าไพพ์) – บอกให้ลินุกซ์(Linux)ป้อนผลลัพธ์ของสิ่งที่อยู่ทางซ้ายของมันไปยังสิ่งที่อยู่ทางขวาของมัน มันถูกป้อนไปยังคำสั่ง grep

grep - เป็นยูทิลิตี้ค้นหาข้อความ 

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

Linux FIND โดยตัวอย่างการอนุญาต(Linux FIND by Permissions Example)

ในการใช้งานให้ดี คุณต้องเรียนรู้การอนุญาตลินุก(learn Linux permissions)ซ์ 

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

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

Linux FIND โดยตัวอย่างขนาด(Linux FIND by Size Example)

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

M – เมกะไบต์

G – กิกะไบต์

k – กิโลไบต์

b – บล็อก (512 ไบต์ – ค่าเริ่มต้น)

c – ไบต์

w - คำ (สองไบต์รวมกัน)

find -size +500k

Linux ค้นหาโดยเจ้าของ(Linux FIND by Owner)

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

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

Linux FIND Files โดย Last Modified Example(Linux FIND Files by Last Modified Example)

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

find -name “file-sample*” -mtime +5 (greater than 5 days ago)

find -name “file-sample*” -mtime -5 (less than 5 days ago)

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

find -name “file-sample*” -mmin -5

find -name “file-sample*” -mmin +5

Linux FIND Files โดย Last Accessed TIME Example(Linux FIND Files by Last Accessed TIme Example)

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

find -name “file-sample*” -atime -5

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

รวม FIND กับคำสั่ง Linux อื่น ๆ(Combine FIND with Other Linux Commands)

มีตัวอย่างหนึ่งข้างต้นของการใช้ find กับคำสั่ง grep และคุณสามารถใช้กับคำสั่งอื่นๆ ได้ คุณจะเห็นว่าการใช้คำสั่ง find และคำสั่งอื่นๆ นั้นมีประสิทธิภาพมากและช่วยประหยัดเวลาได้มาก ลองนึกภาพว่า(Imagine)ต้องลบไฟล์บางประเภทออกเป็นจำนวนมาก แทนที่จะค้นหาใน file explorer เพียงแค่สร้างคำสั่งที่ถูกต้อง และทำเสร็จภายในไม่กี่วินาที คุณจะใช้คำสั่ง find อย่างไรในตอนนี้



About the author

ฉันเป็นผู้เชี่ยวชาญด้านความปลอดภัยคอมพิวเตอร์ที่มีประสบการณ์มากกว่า 10 ปี เชี่ยวชาญด้านแอปและไฟล์ของ Windows ฉันได้เขียนและ/หรือทบทวนบทความหลายร้อยเรื่องในหัวข้อต่างๆ ที่เกี่ยวข้องกับความปลอดภัยของคอมพิวเตอร์ ซึ่งช่วยให้บุคคลต่างๆ ออนไลน์ได้อย่างปลอดภัย ฉันยังเป็นที่ปรึกษาที่มีประสบการณ์สำหรับธุรกิจที่ต้องการความช่วยเหลือในการปกป้องระบบของตนจากการละเมิดข้อมูลหรือการโจมตีทางไซเบอร์



Related posts