GNU/Linux >> Belajar Linux >  >> Linux

Linux find command tutorial (dengan contoh)

Ketika datang untuk mencari file atau direktori di sistem Anda, perintah find di Linux tidak ada bandingannya. Ini mudah digunakan, namun memiliki banyak opsi berbeda yang memungkinkan Anda menyempurnakan pencarian file.

Baca terus untuk melihat contoh bagaimana Anda dapat menggunakan perintah ini untuk menemukan apa pun di sistem Anda. Setiap file hanya berjarak beberapa penekanan tombol setelah Anda mengetahui cara menggunakan perintah find di Linux.

Temukan direktori

Anda dapat memberi tahu perintah find untuk mencari direktori secara khusus dengan opsi -type d. Ini akan membuat perintah find hanya mencari nama direktori yang cocok dan bukan nama file.

$ find /path/to/search -type d -name "name-of-dir"

Temukan file tersembunyi

Karena file dan direktori tersembunyi di Linux dimulai dengan titik, kita dapat menentukan pola pencarian ini dalam string pencarian kita untuk membuat daftar file dan direktori tersembunyi secara rekursif.

$ find /path/to/search -name ".*"

Menemukan file dengan ukuran tertentu atau lebih besar dari X

Opsi -size pada find memungkinkan kita untuk mencari file dengan ukuran tertentu. Ini dapat digunakan untuk menemukan file dengan ukuran yang tepat, file yang lebih besar atau lebih kecil dari ukuran tertentu, atau file yang sesuai dengan rentang ukuran tertentu. Berikut beberapa contohnya:

Cari file yang berukuran lebih dari 10 MB:

$ find /path/to/search -size +10M

Cari file yang berukuran lebih kecil dari 10MB:

$ find /path/to/search -size -10M

Cari file yang berukuran persis 10MB:

$ find /path/to/search -size 10M

Cari file yang berukuran antara 100MB dan 1GB:

$ find /path/to/search -size +100M -size -1G

Temukan dari daftar file

Jika Anda memiliki daftar file (dalam file .txt, misalnya) yang perlu Anda cari, Anda dapat mencari daftar file Anda dengan kombinasi perintah find dan grep. Agar perintah ini berfungsi, pastikan bahwa setiap pola yang ingin Anda cari dipisahkan oleh baris baru.

$ find /path/to/search | grep -f filelist.txt

Opsi -f pada grep berarti "file" dan memungkinkan kita untuk menentukan file string yang akan dicocokkan. Ini menghasilkan perintah find yang mengembalikan nama file atau direktori apa pun yang cocok dengan yang ada dalam daftar.

Temukan tidak ada dalam daftar

Dengan menggunakan daftar file yang sama yang kami sebutkan dalam contoh sebelumnya, Anda juga dapat menggunakan perintah find untuk mencari file apa pun yang tidak sesuaikan pola di dalam file teks. Sekali lagi, kita akan menggunakan kombinasi perintah find dan grep; kita hanya perlu opsi tambahan yang ditentukan dengan grep:

$ find /path/to/search | grep -vf filelist.txt

Opsi -v pada grep berarti “kecocokan terbalik” dan akan mengembalikan daftar file yang tidak cocok dengan pola apa pun yang ditentukan dalam daftar file kami.

Setel kedalaman maksimum

Perintah find akan mencari secara rekursif secara default. Ini berarti bahwa ia akan mencari direktori yang ditentukan untuk pola yang Anda tentukan, serta setiap dan semua subdirektori dalam direktori yang Anda perintahkan untuk dicari.

Misalnya, jika Anda memberi tahu find untuk mencari direktori root Linux (/), ia akan mencari seluruh hard drive, tidak peduli berapa banyak subdirektori dari subdirektori yang ada. Anda dapat menghindari perilaku ini dengan opsi -maxdepth.

Tentukan angka setelah -maxdepth untuk menginstruksikan find tentang berapa banyak subdirektori yang harus dicari secara rekursif.

Cari file hanya di direktori saat ini dan jangan mencari secara rekursif:

$ find . -maxdepth 0 -name "myfile.txt"

Cari file hanya di direktori saat ini dan satu subdirektori lebih dalam:

$ find . -maxdepth 1 -name "myfile.txt"

Temukan file kosong (panjang nol)

Untuk mencari file kosong dengan find, Anda dapat menggunakan flag -empty. Cari semua file kosong:

$ find /path/to/search -type f -empty

Cari semua direktori kosong:

$ find /path/to/search -type d -empty

Juga sangat berguna untuk menggabungkan perintah ini dengan opsi -delete jika Anda ingin secara otomatis menghapus file atau direktori kosong yang dikembalikan oleh find.

Hapus semua file kosong di direktori (dan subdirektori):

$ find /path/to/search -type f -empty -delete

Temukan direktori atau file terbesar

Jika Anda ingin dengan cepat menentukan file atau direktori apa di sistem Anda yang menggunakan ruang paling banyak, Anda dapat menggunakan find untuk mencari secara rekursif dan menampilkan daftar file dan/atau direktori yang diurutkan berdasarkan ukurannya.

Cara menampilkan file terbesar dalam direktori:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -1

Perhatikan bahwa perintah find diurutkan ke dua utilitas Linux praktis lainnya:sort dan tail. Perintah sort akan mengurutkan daftar file berdasarkan ukurannya, dan perintah tail hanya akan menampilkan file terakhir dalam daftar, yang juga terbesar.

Anda dapat menyesuaikan perintah ekor jika Anda ingin menampilkan, misalnya, 5 file terbesar teratas:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -5

Atau, Anda dapat menggunakan perintah head untuk menentukan file terkecil:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | head -5

Jika Anda ingin mencari direktori alih-alih file, cukup tentukan "d" di opsi jenis. Cara menampilkan direktori terbesar:

$ find /path/to/search -type d -printf "%s\t%p\n" | sort -n | tail -1

Temukan setuid set file

Setuid adalah singkatan dari "set user ID on execution", yang merupakan izin file yang memungkinkan pengguna normal untuk menjalankan program dengan hak istimewa yang ditingkatkan (seperti root).

Ini bisa menjadi masalah keamanan karena alasan yang jelas, tetapi file ini dapat dengan mudah diisolasi dengan perintah find dan beberapa opsi.

Perintah find memiliki dua opsi untuk membantu kami mencari file dengan izin tertentu:-user dan -perm. Untuk menemukan file yang dapat dieksekusi dengan hak akses root oleh pengguna biasa, Anda dapat menggunakan perintah ini:

$ find /path/to/search -user root -perm /4000

Pada tangkapan layar di atas, kami menyertakan opsi -exec untuk menampilkan lebih banyak keluaran tentang file yang dikembalikan. Seluruh perintah terlihat seperti ini:

$ find /path/to/search -user root -perm /4000 -exec ls -l {} \;

Anda juga dapat mengganti "root" dalam perintah ini untuk pengguna lain yang ingin Anda cari sebagai pemiliknya. Atau, Anda dapat mencari semua file dengan izin SUID dan tidak menentukan pengguna sama sekali:

$ find /path/to/search -perm /4000

Temukan file set sgid

Menemukan file dengan set SGID hampir sama dengan menemukan file dengan SUID, kecuali izin untuk 4000 perlu diubah menjadi 2000:

$ find /path/to/search -perm /2000

Anda juga dapat mencari file yang memiliki SUID dan SGID yang disetel dengan menentukan 6000 dalam opsi perms:

$ find /path/to/search -perm /6000

Daftar file tanpa izin ditolak

Saat mencari file dengan perintah find, Anda harus memiliki izin baca pada direktori dan subdirektori yang Anda cari. Jika tidak, find akan menampilkan pesan kesalahan tetapi terus mencari di seluruh direktori yang Anda miliki izinnya.

Meskipun ini bisa terjadi di banyak direktori yang berbeda, itu pasti akan terjadi saat mencari direktori root Anda.

Artinya, saat Anda mencoba mencari file di seluruh hard drive, perintah find akan menghasilkan banyak sekali pesan kesalahan.

Untuk menghindari melihat kesalahan ini, Anda dapat mengarahkan ulang keluaran stderr dari find ke stdout dan menyalurkannya ke grep.

$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"

Perintah ini menggunakan opsi -v (inverse) dari grep untuk menampilkan semua output kecuali baris yang mengatakan “Izin ditolak.”

Temukan file yang dimodifikasi dalam X hari terakhir

Gunakan opsi -mtime pada perintah find untuk mencari file atau direktori yang dimodifikasi dalam X hari terakhir. Ini juga dapat digunakan untuk mencari file yang lebih lama dari X hari, atau file yang diubah tepat X hari yang lalu.

Berikut adalah beberapa contoh cara menggunakan opsi -mtime pada perintah find:

Cari semua file yang diubah dalam 30 hari terakhir:

$ find /path/to/search -type f -mtime -30

Cari semua file yang diubah lebih dari 30 hari yang lalu:

$ find /path/to/search -type f -mtime +30

Cari semua file yang diubah tepat 30 hari yang lalu:

$ find /path/to/search -type f -mtime 30

Jika Anda ingin perintah find mengeluarkan lebih banyak informasi tentang file yang ditemukannya, seperti tanggal modifikasi, Anda dapat menggunakan opsi -exec dan menyertakan perintah ls:

$ find /path/to/search -type f -mtime -30 -exec ls -l {} \;

Urutkan menurut waktu

Untuk menyortir hasil pencarian berdasarkan waktu file yang dimodifikasi, Anda dapat menggunakan opsi -printf untuk membuat daftar waktu dengan cara yang dapat diurutkan, dan menyalurkan output tersebut ke utilitas pengurutan.

$ find /path/to/search -printf "%T+\t%p\n" | sort

Perintah ini akan mengurutkan file yang lebih lama ke yang lebih baru. Jika Anda ingin file yang lebih baru muncul terlebih dahulu, cukup berikan opsi -r (mundur) untuk mengurutkan.

$ find /path/to/search -printf "%T+\t%p\n" | sort -r

Perbedaan antara mencari dan menemukan

Perintah locate di Linux adalah cara lain yang baik untuk mencari file di sistem Anda. Itu tidak dikemas dengan banyak opsi pencarian seperti perintah find, jadi ini sedikit kurang fleksibel, tetapi tetap berguna.

$ locate myfile.txt

Perintah locate bekerja dengan mencari database yang berisi semua nama file pada sistem. Perintah updatedb memperbarui database ini.

Karena perintah locate tidak harus melakukan pencarian langsung dari semua file di sistem, itu jauh lebih efisien daripada perintah find. Namun selain kurangnya opsi, ada kelemahan lain:basis data file hanya diperbarui sekali sehari.

Anda dapat memperbarui database file ini secara manual dengan menjalankan perintah updatedb:

$ updatedb

Perintah locate sangat berguna ketika Anda perlu mencari file di seluruh hard drive karena perintah find secara alami akan memakan waktu lebih lama, karena harus melintasi setiap direktori secara real-time.

Jika mencari direktori tertentu, yang diketahui tidak mengandung banyak subdirektori, lebih baik tetap menggunakan perintah find.

CPU memuat perintah find

Saat mencari melalui banyak direktori, perintah find bisa memakan banyak sumber daya. Seharusnya secara inheren memungkinkan proses sistem yang lebih penting untuk diprioritaskan, tetapi jika Anda perlu memastikan bahwa perintah find menggunakan lebih sedikit sumber daya di server produksi, Anda dapat menggunakan perintah ionice atau Nice.

Pantau penggunaan CPU dari perintah find:

$ top

Kurangi prioritas Input/Output dari perintah find:

$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"

Kurangi prioritas CPU dari perintah find:

$ nice -n 19 find /path/to/search -name "myfile.txt"

Atau gabungkan kedua utilitas untuk benar-benar memastikan I/O rendah dan prioritas CPU rendah:

$ nice -n 19 ionice -c2 -n7 find /path/to/search -name "myfile.txt"

Saya harap Anda menemukan tutorial yang bermanfaat. Terus kembali.


Linux
  1. 25 Berguna menemukan Contoh Praktis Perintah di Linux

  2. Cara Menemukan File dengan Perintah fd di Linux

  3. Perintah rsync Linux dengan contoh praktis

  1. Perintah JQ di Linux dengan Contoh

  2. Menggunakan perintah find Linux – Penggunaan dengan contoh

  3. temukan Contoh Perintah di Linux

  1. Tutorial Perintah Ping Linux dengan Contoh

  2. Perintah wc Linux dengan Contoh

  3. Perintah sortir Linux dengan Contoh