GNU/Linux >> Belajar Linux >  >> Linux

Findmnt - Cara Lebih Baik untuk Menemukan Sistem File Terpasang di Linux

Saya telah mengerjakan proyek skrip bash untuk membangun Linux secara otomatis dari awal. Setiap kali saya membaca kode, saya menemukan cara untuk membuatnya lebih bersih. Saya mengambil bagian kecil dari kode dan membuatnya lebih baik.

Suatu hari saya membuat modifikasi untuk memeriksa apakah sistem file sudah terpasang sebelum memasangnya. Saya sedang mencari cara yang lebih baik untuk melakukannya. Saya tidak ingin menggunakan mount | . yang biasa grep atau kode apa pun seperti itu. Saya menginginkan sesuatu yang lebih bersih.

Pasang vs Temukan

Saya tidak tahu mengapa, tetapi pada saat itu saya menemukan diri saya bertanya-tanya mengapa saya begitu sering terhubung ke internet untuk mencari informasi yang sudah ada di laptop saya. Jadi, saya jalankan man mount, Saya dengan cepat melirik halaman manual dan memperhatikan ini:

Dan di sana saya mendapatkan jawaban saya. Pertama saya telah menggunakan perintah yang salah untuk sementara waktu sekarang. Kedua, Google tidak selalu memiliki jawaban terbaik.

Ironisnya di sini adalah bahwa ini tidak disebutkan di halaman manual online yang biasanya saya lihat. Lihat sendiri, di halaman manual mount, findmnt hanya dirujuk di akhir. Jika saya telah melalui saluran reguler saya untuk menemukan jawaban, saya tidak akan menulis artikel ini.

Segera saya menjadi sangat ingin tahu, seberapa jauh lebih baik penemuan ini ? Berapa banyak pipa yang dapat saya hapus dari skrip saya? Ternyata jauh lebih baik daripada mount daftar. Pertama, mari kita bandingkan output default dari setiap perintah.

Pasang keluaran default

Melihat daftar sistem file yang dipasang di atas, mudah untuk melihat mengapa grep menjadi sangat populer. Semua informasi ada di sana, tetapi format yang lebih baik akan membuatnya lebih mudah dibaca. Untuk mencapai itu, Anda sudah memerlukan pipa dan perintah eksternal. Sekarang mari kita lihat findmnt .

Temukan keluaran default

Itu terlihat jauh lebih baik. Menjadi lebih baik, dengan findmnt Anda tidak perlu menggunakan kombinasi alat lagi. Ini sangat fleksibel dan memberi Anda kesempatan untuk menulis kode yang lebih bersih saat digunakan dalam skrip.

Penggunaan praktis perintah findmnt di Linux

Memeriksa apakah sistem file dipasang dengan findmnt jauh lebih mudah. Anda dapat memeriksa sumber atau target tanpa menggunakan opsi apa pun. Berikan titik pemasangan (target ) atau perangkat (sumber ) tanpa opsi dan findmnt akan mencoba mencocokkan argumen yang Anda berikan terhadap keduanya.

findmnt /boot

Findmnt benar-benar berfungsi seperti perintah pencarian untuk sistem file. Jika kecocokan ditemukan, mereka akan dicetak dan findmnt mengembalikan 0. Jika tidak ada yang cocok dengan kueri Anda, findmnt tidak mencetak apa pun dan mengembalikan 1.

Daftar panjang opsi hadir dengan findmnt . Anda memiliki 2 kategori pilihan utama, mempersempit pencarian Anda dan memformat output.

Sukai temukan untuk menemukan file, findmnt adalah untuk menemukan sistem file. Anda sudah tahu bagaimana membatasi pencarian Anda dengan memberikan string yang akan dicocokkan dengan SOURCE dan TARGET. Jika Anda perlu mempersempit pencarian ke SUMBER atau TARGET, gunakan opsi -S dan -T.

Sudah pada titik ini, saya dijual menggunakan findmnt bukannya mount . Saya dapat menanyakan partisi yang saya inginkan. Dan saya tidak menggunakan pipa. Findmnt tidak berhenti di situ, ia memiliki banyak pilihan yang dirancang untuk memberi Anda pencarian yang kuat dari sistem file.

Saya pikir salah satu opsi yang paling menarik adalah -O , –opsi . -O options memungkinkan Anda menulis daftar opsi yang cocok dengan pencarian Anda. Mencari sistem file read-only sekarang semudah findmnt -O ro.

-O opsi juga dapat mengambil daftar yang dipisahkan koma. Ini memungkinkan Anda menelusuri beberapa opsi dan hanya mencantumkan sistem file yang memiliki semua opsi yang diinginkan.

Mencari jenis sistem file tertentu juga tidak memerlukan penggunaan alat eksternal. Cukup gunakan -t pilihan. Dalam contoh di bawah ini saya mencantumkan semua tmpfs pasang.

Dalam semua contoh di atas, findmnt mencari /etc/fstab, /etc/mtab dan /proc/self/mountinfo. Anda dapat dengan mudah membatasi pencarian luas ini dengan opsi berikut:

  • –fstab (Pencarian sempit ke /etc/fstab saja)
  • –mtab (Pencarian sempit ke /etc/mtab saja)
  • –kernel (Telusuri di /proc/self/mountinfo saja)

Opsi menarik lainnya adalah -i , –balik . Yang membalikkan rasa kecocokan. Pada contoh sebelumnya, kami mencantumkan semua tmpfs dengan -t pilihan. Contoh di bawah ini akan mencantumkan semua sistem file jenis swap hanya dari fstab.

findmnt --fstab -t swap

Yang ini akan mencantumkan semua sistem file kecuali jenis swap apa pun.

findmnt --fstab -t swap -i

Sudah dengan opsi yang diberikan, Anda dapat menghindari penggunaan banyak pipa dan program eksternal. Dan itu tidak berhenti di sini. Temukan menyediakan serangkaian opsi yang bagus untuk menyesuaikan keluaran hasil penelusuran Anda.

Menyesuaikan output dari perintah findmnt

Anda tidak perlu menggunakan perintah head untuk menghapus header. Cukup hubungi findmnt dengan -n pilihan:

Saya tidak mengharapkan opsi berikutnya bahkan menjadi opsi. Findmnt dapat meniru output dari perintah df. Menelepon findmnt dengan -D atau –df akan memberi tahu findmnt untuk menampilkan informasi tentang ruang untuk setiap sistem file yang terdaftar.

Opsi dapat digabungkan untuk pencarian yang lebih spesifik. Dalam contoh berikut ini, saya menggunakan findmnt untuk membuat daftar semua sistem file dari /etc/fstab dan meminta untuk menampilkan informasi df.

findmnt --fstab --df

Saya tidak tahu tentang Anda, tetapi saya mulai menikmati findmnt . Kecuali untuk UUID . tersebut dengan perintah terakhir. Saya mengerti, ini adalah cara yang baik untuk mengidentifikasi perangkat untuk OS. Saya, saya ingin cara yang lebih mudah dibaca manusia. Anda melakukannya dengan -e pilihan.

-e atau –evaluasi opsi dengan mengonversi semua tag seperti UUID, LABEL, PARTLABEL, PARTUUID ke nama perangkat yang sesuai. Lihat hasilnya ketika saya menjalankan perintah yang sama dengan -e pilihan.

Saya suka cara menemukan memformat outputnya. Itu lebih ramah manusia. Di sisi lain, format ini bila digunakan dalam skrip bisa lebih sulit untuk dimanipulasi. Kumpulan data baris demi baris sederhana yang dipisahkan ruang akan lebih mudah. Ini mudah dilakukan dengan -r , –mentah pilihan.

Opsi selanjutnya ini sangat bagus. Saya pikir itu menghilangkan kebutuhan untuk | grep hampir seluruhnya. Anda dapat memberi tahu findmnt tepatnya kolom mana yang akan dicetak dengan -o , –keluaran . Opsi ini mengambil daftar kolom yang dipisahkan koma untuk dicetak. Dengan menggunakan perintah berikut, Anda hanya bisa mendapatkan ruang yang tersedia dari partisi root Anda tanpa header.

findmnt -T / --df -o AVAIL -n

Yang harus Anda lakukan dalam skrip Anda adalah menghapus karakter terakhir. Pada perintah di atas, saya memberikan –df pilihan. Itu tidak perlu, hasil yang sama akan dicetak bahkan tanpa opsi itu.

Findmnt menyediakan daftar kolom keluaran yang cukup luas. Saya memberi Anda di bawah ini daftar kolom singkat yang menurut saya akan menarik. Anda dapat melihat daftar lengkapnya dengan findmnt –help

  • Perangkat sumber SUMBER
  • Target titik pemasangan
  • Jenis sistem file FSTYPE
  • OPSI semua opsi pemasangan
  • LABEL label sistem file
  • UUID sistem file UUID
  • MAJ:MIN mayor:nomor perangkat minor
  • SIZE ukuran sistem file
  • Tersedia ukuran sistem file AVAIL
  • Ukuran sistem file yang digunakan digunakan
  • GUNAKAN% persentase penggunaan sistem file
  • root sistem file FSROOT

Daftar default kolom yang dicetak dapat diperpanjang alih-alih diganti. Cukup berikan daftar menggunakan format berikut:+daftar . Perintah berikut akan memberikan informasi yang sama seperti menggunakan –df , kecuali kolom akan ditambahkan di akhir.

findmnt -T / -o +SIZE,USE%,AVAIL

Saya sudah jatuh cinta dengan findmnt . Ini akan menghemat banyak perpipaan dan baris perintah yang panjang. Dan menemukan tidak berhenti di situ. Ada satu lagi fungsi yang ingin saya bicarakan. Jajak Pendapat .

Ya, temukan dapat digunakan untuk memantau perubahan dalam file /proc/self/mountinfo. Ini secara efektif memungkinkan Anda mengawasi sistem Anda untuk memasang aktivitas terkait. Tidak ada lagi while loop dalam skrip bash.

Temukan akan mendengarkan tindakan berikut, mount , jumlah , pasang ulang dan bergerak . Anda dapat membatasi ini dengan memberikan daftar tindakan yang dipisahkan koma untuk didengarkan. Misalnya, berikut ini hanya akan memantau pemasangan sistem file.

Pada gambar di atas, Anda melihat output yang dicetak oleh findmnt ketika partisi baru dipasang. Anda melihat kolom baru TINDAKAN ? Dengan –jajak pendapat pilihan Anda memiliki 3 kolom baru yang dapat ditampilkan:

  • TINDAKAN:Tersedia untuk mount, umount, remount dan move
  • TARGET LAMA:Tersedia untuk tindakan umount dan pemindahan.
  • OPSI LAMA:Tersedia untuk umount dan remount.

Saat digunakan dalam mode ini, findmnt akan memblokir, jika digunakan dalam skrip, skrip akan "hang". Waktu –jajak pendapat akan memblokir dan mendengarkan tindakan dapat dibatasi dengan 2 opsi

  • –hanya pertama :Findmnt akan berhenti setelah tindakan pertama terdeteksi.
  • –waktu habis X :Findmnt akan berhenti setelah X milidetik.

Saat Anda menggabungkan semuanya, findmnt adalah salah satu alat yang ampuh. Saat digunakan dalam skrip, Anda akan menghilangkan banyak kode tambahan. Kebutuhan untuk menyalurkan ke perintah eksternal telah sangat berkurang.

Opsi yang tercantum sebelumnya juga dapat digunakan dengan –jajak pendapat . Pada contoh di bawah, findmnt akan mendengarkan tindakan pemasangan dan mencetak SUMBER, TARGET, UKURAN dan % GUNAKAN. Tetapi hanya jika target pemasangan cocok dengan -T pilihan.

findmnt -T /mnt/lfs --poll=mount -o SOURCE,TARGET,SIZE,USE%

Kiat Bonus:Contoh nyata dari findmnt

Saya telah bekerja pada lingkungan skrip bash untuk mengkompilasi Linux dari Awal untuk sementara waktu sekarang. Menggunakan findmnt dalam skrip saya menghasilkan kode yang lebih baik dan lebih bersih.

Selama permulaan awal skrip saya, saya memeriksa untuk melihat apakah partisi LFS dipasang, jika bukan skrip yang memasangnya. Kode yang digunakan terlihat seperti ini:

if [[ `grep "$pd on $pm" < <(mount) | wc -l` < 1 ]]; 
then   
...   
... 
fi

Proyek ini untuk tujuan pendidikan, inilah mengapa saya menggunakan substitusi proses dan pipa dalam pengujian di atas. Sepanjang kode saya, saya menampilkan beberapa cara untuk melakukan tugas yang sama. Menggunakan findmnt Saya menemukan cara yang lebih bersih untuk melakukan hal yang sama.

findmnt -S $pd -T $pm > /dev/null || (
  ...
  ...
)

Saya mengarahkan output ke /dev/null, saya tidak perlu memiliki findmnt keluaran dicetak pada konsol. Temukan akan mengembalikan 1 jika pencarian gagal, yang akan menyebabkan kode di dalam ( … ) dijalankan.

Saya harap Anda menikmati dan mempelajari perintah baru. Jika Anda mendapatkan penggunaan yang menarik untuk itu, silakan bagikan di komentar. Ada juga pendapat lain tentang artikel ini:pencarian online tidak selalu yang terbaik. Kita cenderung lupa bahwa Linux dilengkapi dengan manual.


Linux
  1. Gunakan anacron untuk crontab yang lebih baik

  2. Linux vs Windows:OS Mana yang Lebih Baik untuk Game PC

  3. csplit:Cara yang Lebih Baik untuk Membagi File di Linux Berdasarkan Kontennya

  1. Opsi pemasangan NFS umum di Linux

  2. Opsi Perintah nohup di Linux

  3. pekerjaan Opsi Perintah Di Linux

  1. 10 artikel untuk belajar Linux dengan cara Anda

  2. Apakah Kami Memiliki Undo Di Linux?

  3. Apakah lebih baik melakukan boot ganda atau menjalankan VM?