Cara memeriksa apakah sistem file dipasang dengan skrip

19

Saya baru di scripting ... Saya bisa melakukan hal-hal yang sangat mendasar, tetapi sekarang saya perlu bantuan.

Saya memiliki sistem file lokal yang hanya akan di-mount ketika saya perlu melakukan backup.

Saya mulai dengan ini.

#!/bin/bash
export MOUNT=/myfilesystem

if grep -qs $MOUNT /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."; then
  mount $MOUNT;
fi

Seperti yang saya katakan, saya sangat mendasar dalam scripting. Saya mendengar bahwa Anda dapat memeriksa status mountperintah dengan melihat kode kembali.

RETURN CODES
       mount has the following return codes (the bits can be ORed):
       0      success
       1      incorrect invocation or permissions
       2      system error (out of memory, cannot fork, no more loop devices)
       4      internal mount bug
       8      user interrupt
       16     problems writing or locking /etc/mtab
       32     mount failure
       64     some mount succeeded

Saya tidak tahu bagaimana memeriksanya. Ada panduan?

maniat1k
sumber
2
Anda memiliki menggantung lucu ; thendi skrip Anda.
Mat
mengapa kita mengekspor var MOUNT dan juga menghapus ";"
Mike Q
Pertanyaan serupa ada di Server Fault , Stack Overflow dan Unix & Linux Stack Exchange .
sasha

Jawaban:

19

Anda dapat memeriksa kode status mount, dan sebagian besar executable yang ditulis, dengan parameter khusus shell ?.

Dari man bash:

? Expands to the exit status of the most recently executed foreground pipeline.

Setelah Anda menjalankan mountperintah, segera mengeksekusi echo $?akan mencetak kode status dari perintah sebelumnya.

# mount /dev/dvd1 /mnt
  mount: no medium found on /dev/sr0
# echo $?
  32

Tidak semua executable memiliki kode status yang didefinisikan dengan baik. Minimal, harus keluar dengan kode sukses (0) atau gagal (1), tetapi tidak selalu demikian.

Untuk memperluas (dan memperbaiki) contoh skrip Anda, saya menambahkan ifkonstruksi bersarang untuk kejelasan. Ini bukan satu-satunya cara untuk menguji kode status dan melakukan suatu tindakan, tetapi itu yang paling mudah dibaca ketika belajar.

#!/bin/bash
mount="/myfilesystem"

if grep -qs "$mount" /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
  fi
fi

Untuk informasi lebih lanjut tentang "Keluar dan Keluar Status", Anda dapat merujuk ke Panduan Script Bash Lanjutan .

George M
sumber
1
Tidak perlu mengekspor $MOUNT. Script ini juga akan pecah jika sistem file memiliki karakter yang akan mengalami peletakan kata (spasi, dll.). Anda harus selalu mengutip ekspansi Anda.
Chris Down
@ChrisDown Kamu benar. Saya hanya menghapus menggantung jelas '; lalu'. Di masa depan, silakan edit jawaban saya untuk membuatnya lebih benar.
George M
Er ... ini masih akan rusak. Anda masih belum mengutip ekspansi. Atas saran Anda, saya akan melakukannya sekarang.
Chris Down
Saya juga tidak akan merekomendasikan tautan ke panduan skrip Bash "Tingkat Lanjut" yang terkenal, penuh dengan kesalahan dan akan mengajar orang untuk menulis bug, bukan skrip. BashGuide adalah alternatif yang jauh lebih baik.
Chris Down
2
@ChrisDown "Pemisahan kata akan memakan bayi Anda jika Anda tidak mengutip sesuatu dengan benar." Kata-kata untuk dijalani.
George M
35

Banyak distro Linux yang memiliki mountpointperintah. Secara eksplisit dapat digunakan untuk memeriksa apakah direktori adalah sebuah mountpoint. Sesederhana ini:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi
grosshat
sumber
1
Pendekatan ini akan gagal jika Anda mencoba untuk memeriksa encfs, karena Anda akan tersandung kesalahan izin ditolak, ketika dijalankan oleh pengguna non-root.
Denys S.
Solusi saya berfungsi dengan encfs.
Theodore R. Smith
3

Satu lagi cara:

if findmnt ${mount_point}) >/dev/null 2>&1 ; then
  #Do something for positive result (exit 0)
else
  #Do something for negative result (exit 1)
fi
Matahari
sumber
Hello @sungtm; tampaknya Anda masuk dengan akun baru yang terpisah. Karena akun "Sun" Anda tidak memiliki banyak aktivitas, saya sarankan Anda terus menggunakan akun "sungtm" baru Anda , karena itu lebih sederhana. Namun, jika Anda ingin menggabungkan akun, beri tahu saya dengan menandai komentar ini dan kami akan menjangkau tim Stack Exchange. Terima kasih!
Jeff Schaller
Perhatikan bahwa untuk encf, findmntharus disertakan dengan parameter --source encfs, jika tidak maka akan selalu mempertimbangkan direktori untuk dipasang karena jatuh kembali ke mount induk.
Burkart
2

Cara termudah yang tidak memerlukan root adalah:

if $(df | grep -q /mnt/ramdisk); then

fi

atau untuk melihat apakah itu tidak dipasang:

if ! $(df | grep -q /mnt/ramdisk); then

fi
Theodore R. Smith
sumber
yang mountperintah tidak perlu akses root, dfdifokuskan pada ruang disk tidak di mount point ...
Philippe Gachoud
1

Pernyataan singkat

Periksa apakah sudah terpasang :

mount|grep -q "/mnt/data" && echo "/mnt/data is mounted; I can follow my job!"

Periksa apakah tidak dipasang :

mount|grep -q "/mnt/data" || echo "/mnt/data is not mounted I could probably mount it!"
Philippe Gachoud
sumber
0

Saya sudah mencoba dengan skrip di bawah ini

#!/bin/bash
echo "enter the file system to check whether its mounted or not"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p is mounted"
else
echo "$p is not mounted"
fi
done

Hanya input yang perlu Anda berikan adalah nama sistem file

Praveen Kumar BS
sumber