Sebanyak saya suka Oli (yang banyak!) Saya tidak setuju dengan dia pada find
perintah. Saya tidak suka itu.
find
Perintah memakan waktu lebih dari tiga menit
Ambil contoh perintah sederhana ini:
$ time find / -type f -name "mail-transport-agent.target"
find: ‘/lost+found’: Permission denied
find: ‘/etc/ssmtp’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
(... SNIP ...)
find: ‘/run/user/997’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied
real 3m40.589s
user 0m4.156s
sys 0m8.874s
Butuh lebih dari tiga menit untuk find
mencari semuanya mulai dari /
. Secara default rim pesan kesalahan muncul dan Anda harus mencari melalui mereka untuk menemukan apa yang Anda cari. Masih lebih baik daripada grep
mencari seluruh drive untuk sebuah string yang membutuhkan 53 jam : `grep`ing semua file untuk sebuah string membutuhkan waktu lama
Saya tahu saya bisa mengutak-atik parameter perintah find untuk membuatnya bekerja lebih baik tetapi intinya di sini adalah jumlah waktu yang diperlukan untuk menjalankan.
locate
perintah memakan waktu kurang dari satu detik
Sekarang mari kita gunakan locate
:
$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target
real 0m0.816s
user 0m0.792s
sys 0m0.024s
The menemukan perintah mengambil kurang dari satu detik!
updatedb
hanya berjalan sekali sehari secara default
Memang benar updatedb
perintah yang memperbarui basis data lokasi hanya berjalan sekali sehari secara default. Anda dapat menjalankannya secara manual sebelum mencari file yang baru saja ditambahkan dengan menggunakan:
$ time sudo updatedb
real 0m3.460s
user 0m0.503s
sys 0m1.167s
Meskipun ini akan memakan waktu 3 detik, itu kecil dibandingkan dengan find
3+ menit perintah.
Saya telah memperbarui saya sudo crontab -e
untuk memasukkan baris di bagian bawah:
# m h dom mon dow command
0 0 1 * * /bin/journalctl --vacuum-size=200M
*/5 * * * * /usr/bin/updatedb
Sekarang setiap lima menit updatedb
dijalankan dan locate
perintah basis data hampir selalu terkini.
Tetapi tidak ada atribut?
Anda dapat mem-pipe locate
output ke perintah lain. Jika misalnya Anda menginginkan atribut file yang dapat Anda gunakan:
$ locate mail-transport-agent.target | xargs stat
File: '/lib/systemd/system/mail-transport-agent.target'
Size: 473 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 667460 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 18:11:55.091173104 -0600
Modify: 2017-10-27 04:11:45.000000000 -0600
Change: 2017-10-28 07:18:24.860065653 -0600
Birth: -
Ringkasan
Saya memposting jawaban ini untuk menunjukkan kecepatan dan kemudahan penggunaan locate
. Saya mencoba untuk mengatasi beberapa perintah singkat yang ditunjukkan oleh orang lain.
The find
perintah perlu melintasi seluruh struktur direktori untuk menemukan file. The locate
perintah memiliki itu database sendiri yang memberikan kecepatan kilat itu dibandingkan.