Cara Menggunakan Find dan Locate untuk Mencari Berkas di Linux

Pengantar

Satu masalah yang dialami pengguna saat kali pertama berhadapan dengan mesin Linux adalah cara menemukan berkas yang mereka cari.

Panduan ini akan membahas cara menggunakan perintah aptly bernama find. Ini akan membantu Anda mencari berkas di VPS menggunakan berbagai filter dan parameter. Kita juga akan membahas secara singkat perintah locate, yang dapat digunakan untuk mencari berkas dengan cara lain.

Mencari menurut Nama

Cara paling mudah dimengerti untuk mencari berkas adalah menurut namanya.

Untuk mencari berkas menurut nama, ketikkan:

  • find -name "query"

Perintah ini peka huruf kapital, yang berarti mencari berkas berbeda dengan mencari Berkas.

Untuk mencari berkas menurut nama, tetapi mengabaikan huruf kapital kueri, ketikkan:

  • find -iname "query"

Jika Anda ingin menemukan semua berkas yang tidak mematuhi pola tertentu, Anda dapat membalik pencarian dengan -not atau!. Jika menggunakan!, Anda harus meloloskan karakter agar bash tidak mencoba menafsirkannya sebelum find bertindak:

  • find -not -name "query_to_avoid"

Atau

  • find ! -name "query_to_avoid"

Menemukan menurut Tipe

Anda dapat menentukan tipe berkas yang ingin ditemukan dengan parameter -type. Cara kerjanya seperti ini:

  • find -type type_descriptor query

Beberapa deskriptor paling umum yang dapat Anda gunakan untuk menentukan tipe berkas adalah:

  • f: berkas reguler

  • d: direktori

  • l: tautan simbolis

  • c: perangkat karakter

  • b: perangkat blok

Misalnya, jika ingin menemukan semua perangkat karakter di sistem, kita dapat memberikan perintah ini:

  • find / -type c
Output/dev/parport0 /dev/snd/seq /dev/snd/timer /dev/autofs /dev/cpu/microcode /dev/vcsa7 /dev/vcs7 /dev/vcsa6 /dev/vcs6 /dev/vcsa5 /dev/vcs5 /dev/vcsa4 . . . 

Kita dapat mencari semua berkas yang berakhiran .conf seperti ini:

  • find / -type f -name "*.conf"
Output/var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf /usr/share/base-files/nsswitch.conf /usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf /usr/share/rsyslog/50-default.conf /usr/share/adduser/adduser.conf /usr/share/davfs2/davfs2.conf /usr/share/debconf/debconf.conf /usr/share/doc/apt-utils/examples/apt-ftparchive.conf . . . 

Memfilter menurut Waktu dan Ukuran

Find memberi Anda beragam cara untuk memfilter hasil menurut ukuran dan waktu.

Ukuran

Anda dapat memfilter menurut ukuran dengan parameter -size.

Kita menambahkan akhiran di belakang nilai yang menentukan cara perhitungan. Inilah beberapa opsi yang populer:

  • c: bita

  • k: Kilobita

  • M: Megabita

  • G: Gigabita

  • b: blok 512-bita

Untuk menemukan semua berkas yang persis 50 bita, ketikkan:

  • find / -size 50c

Untuk menemukan semua berkas yang kurang dari 50 bita, kita dapat menggunakan bentuk ini sebagai gantinya:

  • find / -size -50c

Untuk menemukan semua berkas yang lebih dari 700 Megabita, kita dapat menggunakan perintah ini:

  • find / -size +700M

Waktu

Linux menyimpan data waktu tentang waktu akses, waktu modifikasi, dan waktu perubahan.

  • Waktu Akses: Terakhir kali berkas dibaca atau ditulis.

  • Waktu Modifikasi: Terakhir kali isi berkas dimodifikasi.

  • Waktu Perubahan: Terakhir kali metadata inode berkas diubah.

Kita dapat menggunakannya dengan parameter -atime, -mtime, dan -ctime. Simbol plus dan minus dapat digunakan untuk menentukan lebih dari atau kurang dari, seperti yang kita lakukan dengan ukuran.

Nilai parameter ini menentukan jumlah hari lampau yang ingin Anda cari.

Untuk menemukan berkas yang memiliki waktu modifikasi sehari yang lalu, ketikkan:

  • find / -mtime 1

Jika kita ingin berkas yang diakses kurang dari sehari yang lalu, kita dapat mengetikkan:

  • find / -atime -1

Untuk mendapatkan berkas dengan informasi meta yang diubah lebih dari 3 hari yang lalu, ketikkan:

  • find / -ctime +3

Ada juga beberapa parameter pendamping yang dapat kita gunakan untuk menentukan dalam menit, bukan dalam hari:

  • find / -mmin -1

Parameter ini akan memberikan berkas yang telah dimodifikasi di sistem dalam menit terakhir.

Find juga dapat melakukan perbandingan terhadap berkas referensi dan menampilkan berkas yang lebih baru:

  • find / -newer myfile

Menemukan menurut Pemilik dan Izin

Anda juga dapat mencari berkas menurut pemilik berkas atau pemilik grup.

Anda melakukannya masing-masing dengan menggunakan parameter -user dan -group. Temukan berkas yang dimiliki oleh pengguna “syslog” dengan memasukkan:

  • find / -user syslog

Demikian pula, kita dapat menentukan berkas yang dimiliki oleh grup “shadow” dengan mengetikkan:

  • find / -group shadow

Kita juga dapat mencari berkas dengan izin tertentu.

Jika kita ingin mencocokkan dengan seperangkat izin secara persis, kita gunakan bentuk ini:

  • find / -perm 644

Perintah ini akan mencocokkan secara persis berkas dengan beberapa izin yang ditentukan.

Jika ingin menentukan sesuatu setidaknya dengan izin itu, Anda dapat menggunakan bentuk ini:

  • find / -perm -644

Bentuk ini akan mencocokkan berkas yang memiliki izin tambahan. Berkas dengan izin “744” akan cocok dengan instans ini.

Memfilter menurut Kedalaman

Untuk bagian ini, kita akan membuat struktur direktori dalam suatu direktori sementara. Isinya akan berupa tiga tingkat direktori, dengan sepuluh direktori di tingkat pertama.mprovemenimprovement. Setiap direktori (termasuk direktori sementara) akan berisi sepuluh berkas dan sepuluh subdirektori.

Buatlah struktur ini dengan mengeluarkan perintah berikut:

  • cd
  • mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}
  • touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}
  • cd ~/test

Silakan periksa struktur direktori dengan ls dan cd untuk mengatur cara mengorganisirnya. Bila Anda selesai, kembalilah ke direktori pengujian:

  • cd ~/test

Kita akan membahas cara menghasilkan berkas tertentu dari struktur ini. Mari kita coba suatu contoh terlebih dahulu dengan mencari nama reguler untuk perbandingan:

  • find -name file1
Output./level1dir7/level2dir8/level3dir9/file1 ./level1dir7/level2dir8/level3dir3/file1 ./level1dir7/level2dir8/level3dir4/file1 ./level1dir7/level2dir8/level3dir1/file1 ./level1dir7/level2dir8/level3dir8/file1 ./level1dir7/level2dir8/level3dir7/file1 ./level1dir7/level2dir8/level3dir2/file1 ./level1dir7/level2dir8/level3dir6/file1 ./level1dir7/level2dir8/level3dir5/file1 ./level1dir7/level2dir8/file1 . . . 

Ada banyak hasilnya. Jika kita menyalurkan keluaran ke dalam penghitung, kita dapat melihat bahwa seluruhnya ada 1111 hasil:

  • find -name file1 | wc -l
Output1111 

Hasil ini mungkin terlalu banyak untuk Anda gunakan dalam keadaan umum. Mari kita coba mempersempitnya.

Anda dapat menentukan kedalaman maksimum pencarian di direktori pencarian tingkat teratas:

  • find -maxdepth num -name query

Untuk menemukan direktori “file1” hanya dalam direktori “level1” ke atas, Anda dapat menentukan kedalaman maksimum sebesar 2 (1 untuk direktori tingkat teratas dan 1 untuk direktori level1):

  • find -maxdepth 2 -name file1
Output./level1dir7/file1 ./level1dir1/file1 ./level1dir3/file1 ./level1dir8/file1 ./level1dir6/file1 ./file1 ./level1dir2/file1 ./level1dir9/file1 ./level1dir4/file1 ./level1dir5/file1 ./level1dir10/file1 

Daftar itu menjadi jauh lebih mudah diatur.

Anda juga dapat menentukan direktori minimum jika mengetahui bahwa semua berkas yang ada melewati titik tertentu dalam direktori saat ini:

  • find -mindepth num -name query

Kita dapat menggunakan ini untuk menemukan berkas yang ada di akhir cabang direktori saja:

  • find -mindepth 4 -name file
Output./level1dir7/level2dir8/level3dir9/file1 ./level1dir7/level2dir8/level3dir3/file1 ./level1dir7/level2dir8/level3dir4/file1 ./level1dir7/level2dir8/level3dir1/file1 ./level1dir7/level2dir8/level3dir8/file1 ./level1dir7/level2dir8/level3dir7/file1 ./level1dir7/level2dir8/level3dir2/file1 . . . 

Sekali lagi, karena struktur direktori pencabangan, ini akan mengembalikan hasil yang sangat banyak (1000).

Anda dapat mengombinasikan parameter kedalaman minimum dan maksimum untuk memfokuskan pada rentang yang sempit:

  • find -mindepth 2 -maxdepth 3 -name file
Output./level1dir7/level2dir8/file1 ./level1dir7/level2dir5/file1 ./level1dir7/level2dir7/file1 ./level1dir7/level2dir2/file1 ./level1dir7/level2dir10/file1 ./level1dir7/level2dir6/file1 ./level1dir7/level2dir3/file1 ./level1dir7/level2dir4/file1 ./level1dir7/file1 . . . 

Mengeksekusi dan Mengombinasikan Perintah Find

Anda dapat mengeksekusi perintah pembantu arbiter atas segala sesuatu yang dianggap cocok menggunakan parameter -exec. Parameter itu dipanggil seperti ini:

  • find find_parameters -exec command_and_params {} ;

{} digunakan sebagai penampung berkas yang dianggap cocok. ; digunakan agar mengetahui akhir perintah.

Misalnya, kita dapat menemukan berkas di bagian sebelumnya yang memiliki 644 izin dan memodifikasinya agar memiliki 664 izin:

  • cd ~/test
  • find . -type f -perm 644 -exec chmod 664 {} ;

Kita nanti dapat mengubah izin direktori seperti ini:

  • find . -type d -perm 755 -exec chmod 700 {} ;

Jika ingin merangkai hasil yang berbeda, Anda dapat menggunakan perintah -and atau -or. -and dianggap ada jika tidak disertakan.

  • find . -name file1 -or -name file9

Menemukan Berkas Menggunakan Locate

Alternatif penggunaan find adalah perintah locate. Perintah ini sering kali lebih cepat dan dapat mencari ke seluruh sistem berkas dengan mudah.

Anda dapat menginstal perintah di Debian atau Ubuntu dengan apt:

  • sudo apt install mlocate

Di CentOS, gunakan dnf sebagai gantinya:

  • sudo dnf install mlocate

Alasan locate lebih cepat daripada find adalah karena mengandalkan basis data berkas di sistem berkas.

Basis data biasanya diperbarui sekali sehari dengan skrip cron, tetapi Anda dapat memperbaruinya secara manual dengan mengetikkan:

  • sudo updatedb

Jalankan perintah ini sekarang. Ingat, basis data harus selalu diperbarui jika Anda ingin menemukan berkas yang baru-baru ini diperoleh atau dibuat.

Untuk menemukan berkas dengan locate, cukup gunakan sintaks ini:

  • locate query

Anda dapat memfilter keluaran dalam beberapa cara.

Misalnya, agar hanya mengembalikan berkas yang berisi kueri itu sendiri, bukan mengembalikan setiap berkas yang memiliki kueri dalam direktori yang mengarah ke sana, Anda dapat menggunakan -b untuk mencari “basename"saja:

  • locate -b query

Agar locate hanya mengembalikan hasil yang masih ada di sistem berkas (yang belum dihapus di antara panggilan updatedb dan panggilan locate saat ini), gunakan bendera -e:

  • locate -e query

Untuk melihat statistik tentang informasi yang dikatalogkan oleh locate, gunakan opsi -S:

  • locate -S
OutputDatabase /var/lib/mlocate/mlocate.db: 3,315 directories 37,228 files 1,504,439 bytes in file names 594,851 bytes used to store database 

Kesimpulan

Find dan locate adalah cara bagus untuk menemukan berkas di sistem Anda. Anda bebas memilih untuk menentukan alat yang sesuai dengan setiap situasi.

Find dan locate adalah perintah berguna yang dapat diperkuat dengan mengombinasikannya dengan utilitas lain melalui berbagai saluran. Bereksperimenlah dengan melakukan filter menggunakan perintah seperti wc, sort, dan grep.