Find adalah utilitas baris perintah yang memungkinkan Anda untuk mencari file dan direktori dalam hirarki direktori, berdasarkan pada ekspresi yang diberikan pengguna dan menerapkan tindakan yang ditentukan pengguna pada setiap file yang cocok.

Perintah Find adalah salah satu senjata paling ampuh bagi  seorang sistem administrator Linux.

Anda dapat menggunakan perintah find untuk mencari file berdasarkan izin file, jenis, tanggal, kepemilikan, ukuran, dan lainnya. Perintah find juga dapat digunakan dengan kombinasi dengan alat-alat lain seperti grep atau sed untuk melakukan operasi tertentu.

Diharapkan Anda membuka konsol terminal distribusi Linux untuk mengikuti panduan di halaman ini agar Anda lebih memahami cara kerja perintah ln di Linux terminal.

Kami juga sarankan Anda untuk menguji setiap tutorial atau panduan apapun yang ada di Internet di virtual machine (vmware atau virtualbox) sebelum menerapkan ke server produksi, agar tidak mengacaukan sistem yang aktif berjalan ketika ada kesalahan.

Anda bisa melihat cara installasi VMware di Ubuntu dan CentOS, dan VirtualBox di UbuntuFedora, dan CentOS

Syntax Perintah Find di Linux

Sebelum membahas cara menggunakan perintah find, mari kita mulai dengan meninjau sintaks dasar.

Ekspresi utilitas find mengambil bentuk berikut:

find [options] [path...] [expression]
  • Atribut option mengontrol perlakuan symbolic links, opsi debugging, dan metode optimisasi.
  • Atribut path ... mendefinisikan direktori awal atau direktori tempat find akan mencari file.
  • Atribut expression terdiri dari opsi, pola pencarian, dan tindakan yang dipisahkan oleh operator.

Mari kita lihat contoh berikut:

find  -L /home/website/ -name "*.php" -exec chmod 644 {} \;

Perintah di atas memasukkan parameter -L (atribut options) yang memungkinkan perintah find untuk mengikuti symbolic links, dan mencari seluruh pohon direktori di bawah /home/projects/ (atribut path ...) untuk semua file yang diakhiri dengan .js (atribut expression) dan mengatur izin dari semua file yang cocok ke 644.

Temukan File berdasarkan Jenis

Untuk menentukan jenis file yang ingin Anda temukan gunakan parameter -type.

Anda dapat menggunakan deskriptor berikut untuk menentukan jenis file:

  • f: file reguler
  • d: direktori
  • l: symbolic link
  • c: character devices
  • b: block devices
  • p: named pipe (FIFO)
  • s: socket

Misalnya, jika Anda ingin menemukan semua direktori di direktori kerja saat ini Anda dapat menggunakan perintah:

find . -type d

Jika ingin melihat daftar semua character device di sistem, gunakan perintah.

find / -type c

Untuk mengubah semua izin file ke 644 dan semua izin direktori ke 755 secara rekursif jalankan perintah berikut:

find /var/www/proyek -type d -exec chmod 0755 {} \;
find /var/www/proyek -type f -exec chmod 0644 {} \;

Menemukan File dengan Nama File

Mencari file dengan nama mungkin adalah penggunaan yang paling umum untuk perintah find. Untuk menemukan file dengan namanya, gunakan opsi -name bersama dengan nama file yang ingin Anda cari.

Misal untuk mencari file bernama laporan.pdf di direktori /home/adhit, maka gunakan perintah berikut:

sudo find /home/adhit -type f -name laporan.pdf

Jika Anda ingin menjalankan pencarian case-insensitive maka ubah opsi -name dengan -iname:

sudo find /home/adhit -type f -iname laporan.pdf

Pencarian case-insensitive akan mencocokkan semua file karakter, tidak pedulu besar atau kecil, baik file tersebut bernama laporan.pdf, Laporan.pdf, LapOraN.pdf, LAPORAN.pdf dan seterusnya :

Temukan File dengan Ekstensi

Mencari file dengan ekstensi sama dengan mencari file dengan nama. Misalnya, jika Anda ingin menemukan semua file yang diakhiri dengan .log.gz di dalam direktori /var/log/nginx, Anda dapat menggunakan:

find /var/log/nginx -type f -name '*.log.gz'

Penting untuk menyebutkan bahwa ketika Anda menggunakan karakter wildcard Anda harus mengutip polanya atau melarikan diri dari simbol asterisk * dengan backslash \ sehingga tidak bisa ditafsirkan oleh shell.

Jika Anda ingin menemukan semua file yang tidak cocok dengan regex *.log.gz Anda dapat menggunakan parameter -not. Misalnya, untuk menemukan semua file yang tidak diakhiri dengan *.log.gz Anda akan menggunakan:

find /var/log/nginx -type f -not -name '*.log.gz'

Temukan File berdasarkan Ukuran

Untuk menemukan file berdasarkan ukuran file, berikan parameter -size bersama dengan kriteria ukuran. Anda dapat menggunakan sufiks berikut untuk menentukan ukuran file:

  • b: 512-byte blocks (default)
  • c: bytes
  • w: two-byte words
  • k: Kilobytes
  • M: Megabytes
  • G: Gigabytes

Sebagai contoh, untuk menemukan semua file dengan ukuran tepat 1024 byte di dalam direktori /tmp, Anda dapat menjalankan perintah berikut:

find /tmp -type f -size 1024c

Perintah find juga memungkinkan Anda untuk mencari file yang besar atau kurang dari ukuran yang ditentukan.

Dalam contoh berikut ini kami sedang mencari semua file kurang dari 1MB di dalam direktori kerja saat ini, perhatikan simbol minus - sebelum nilai ukuran:

find . -type f -size -1M

Jika Anda ingin mencari file dengan ukuran lebih besar dari 5 Gigabyte, maka Anda perlu menggunakan simbol plus +:

find . -type f -size +5G

Anda bahkan dapat mencari file dalam rentang ukuran. Misalnya, perintah berikut akan menemukan semua file antara 1 dan 2 MB:

find . -type f -size +1M -size 21M

Temukan File berdasarkan Tanggal Modifikasi

Perintah find juga dapat mencari file berdasarkan modifikasi terakhir, akses atau perubahan waktu.

Sama seperti saat mencari berdasarkan ukuran, Anda dapat menggunakan simbol plus dan minus untuk menentukan lebih dari atau kurang dari.

Katakanlah beberapa hari yang lalu, Anda memodifikasi file konfigurasi dovecot tetapi Anda lupa nama filenya. Anda dapat dengan mudah memfilter semua file di direktori /etc/dovecot/conf.d/ yang diakhiri dengan .conf dan telah dimodifikasi dalam 5 hari terakhir. Untuk mencari file tersebut, gunakan perintah berikut :

find /etc/dovecot/conf.d -name "*.conf" -mtime 5

Berikut adalah contoh lain dari memfilter file berdasarkan tanggal modifikasi menggunakan opsi -daystart.

Perintah di bawah ini akan mencantumkan semua file di direktori /home yang telah dimodifikasi 30 hari yang lalu atau lebih :

find /home -mtime +30 -daystart.

Temukan File Berdasar Izin File

Untuk memfilter file berdasarkan izin file, gunakan opsi -perm.

Misalnya, untuk menemukan semua file dengan izin persis 775 di dalam direktori /var/www/wordpress Anda dapat menggunakan perintah :

find /var/www/wordpress -perm 644

Anda dapat mengawali mode numerik dengan minus - atau slash /.

Ketika slash / digunakan sebagai awalan, maka setidaknya satu kategori (pengguna, grup atau yang lain) harus memiliki setidaknya masing-masing bit yang ditetapkan untuk file yang cocok.

lihat contoh perintah berikut:

find . -perm /444

Perintah di atas akan mencocokkan semua file dengan izin read (baca) yang ditetapkan untuk pengguna, grup, atau orang lain.

Jika minus - digunakan sebagai awalan maka untuk file agar cocok setidaknya bit yang ditentukan harus ditetapkan.

Perintah berikut akan mencari file yang memiliki izin read (baca) dan write (tulis) untuk pemilik dan grup dan dapat dibaca oleh pengguna lain:

find . -perm -664

Temukan File berdasarkan Pemilik

Untuk menemukan file yang dimiliki oleh pengguna atau grup tertentu, Anda dapat menggunakan opsi -user dan -group.

Misalnya, untuk mencari semua file dan direktori yang dimiliki oleh nama pengguna linux, Anda dapat menjalankan perintah :

find / -user linux

Berikut ini contoh yang lebih canggih, katakanlah Anda ingin menemukan semua file yang dimiliki oleh pengguna www-data dan mengubah kepemilikan file yang cocok dari www-data ke nginx:

find / -user www-data -type f  -exec chown nginx {} \;

Temukan dan Hapus File

Untuk menghapus semua file yang cocok tambahkan parameter -delete ke akhir ekspresi pertandingan.

Pastikan Anda menggunakan opsi ini hanya ketika Anda yakin bahwa hasilnya cocok dengan file yang ingin Anda hapus. Selalu merupakan ide yang baik untuk mencetak file yang cocok sebelum menggunakan opsi -delete.

Misalnya untuk menghapus semua file yang diakhiri dengan .temp dari /var/log/ Anda akan menggunakan:

find /var/log/ -name `*.temp` -delete

Gunakan opsi -delete dengan sangat hati-hati. Baris perintah find akan di lihat sebagai ekspresi dan jika Anda menambahkan opsi -delete terlebih dahulu, perintah akan menghapus semuanya di bawah titik awal yang Anda tentukan.

Kesimpulan

Dalam tutorial ini, Anda telah belajar cara menggunakan utilitas menemukan Linux berdasarkan berbagai kriteria dan sekarang Anda harus memiliki pemahaman mendasar tentang cara mencari file di sistem Linux Anda.

Anda juga dapat mengunjungi halaman manual resmi find dan membaca tentang semua opsi powerful lainnya dari perintah Find.