GNU/Linux >> Belajar Linux >  >> Linux

Periksa apakah direktori terpasang dengan bash

Anda tidak repot-repot menyebutkan O/S.

Ubuntu Linux 11.10 (dan mungkin versi Linux yang paling mutakhir) memiliki mountpoint perintah.

Berikut adalah contoh di salah satu server saya:

$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint

Sebenarnya, dalam kasus Anda, Anda seharusnya dapat menggunakan -q opsi, seperti ini:

mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar

Semoga itu bisa membantu.


Panduan mountpoint mengatakan bahwa itu:

memeriksa apakah direktori atau file yang diberikan disebutkan dalam file /proc/self/mountinfo.

Panduan mount mengatakan bahwa:

Mode daftar dipertahankan hanya untuk kompatibilitas mundur. Untuk keluaran yang lebih kuat dan dapat disesuaikan, gunakan findmnt(8), terutama di skrip Anda.

Jadi perintah yang benar untuk digunakan adalah findmnt , yang merupakan bagian dari util-linux paket dan, menurut manual:

dapat mencari di /etc/fstab, /etc/mtab atau /proc/self/mountinfo

Jadi itu sebenarnya mencari lebih banyak hal daripada mountpoint . Ini juga menyediakan opsi yang nyaman:

-M, --mountpoint jalur

Secara eksplisit mendefinisikan file atau direktori mountpoint. Lihat juga --target.

Singkatnya, untuk memeriksa apakah sebuah direktori dipasang dengan bash, Anda dapat menggunakan:

if [[ $(findmnt -M "$FOLDER") ]]; then
    echo "Mounted"
else
    echo "Not mounted"
fi

Contoh:

mkdir -p /tmp/foo/{a,b}
cd /tmp/foo

sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing

[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"

Solusi saya:

is_mount() {
    path=$(readlink -f $1)
    grep -q "$path" /proc/mounts
}

Contoh:

is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/

Untuk jawaban Mark J. Bobak, mountpoint tidak berfungsi jika dipasang dengan bind opsi dalam sistem file yang berbeda.

Untuk jawaban Christopher Neylan, tidak perlu mengarahkan keluaran grep ke /dev/null, cukup gunakan grep -q sebagai gantinya.

Yang paling penting, kanonikkan jalur dengan menggunakan readlink -f $mypath :

  • Jika Anda memeriksa jalur seperti /path/to/dir/ diakhiri dengan garis miring terbalik, jalur di /proc/mounts atau mount hasilnya adalah /path/to/dir
  • Di sebagian besar rilis linux, /var/run/ adalah symlink dari /run/ , jadi jika Anda memasang bind untuk /var/run/mypath dan periksa apakah sudah terpasang, itu akan ditampilkan sebagai /run/mypath di /proc/mounts .

Menjalankan mount perintah tanpa argumen akan memberi tahu Anda tunggangan saat ini. Dari skrip shell, Anda dapat memeriksa titik pemasangan dengan grep dan pernyataan if:

if mount | grep /mnt/md0 > /dev/null; then
    echo "yay"
else
    echo "nay"
fi

Dalam contoh saya, pernyataan if memeriksa kode keluar dari grep , yang menunjukkan jika ada kecocokan. Karena saya tidak ingin hasilnya ditampilkan ketika ada kecocokan, saya mengarahkannya ke /dev/null .


Linux
  1. Bagaimana Cara Memeriksa Apakah Direktori Tertentu Dipasang??

  2. Bash -c Dengan Parameter Posisi?

  3. File Cat Dengan Direktori?

  1. Bagaimana Cara Memeriksa Apakah Sebuah Partisi Dipasang Sebagai 'noexec'?

  2. The Magic ~:Ekspansi Bash Tilde dengan 5 Contoh

  3. Alias ​​​​dengan variabel di bash

  1. Jalankan Skrip Bash Saat Memasuki Direktori?

  2. Periksa Berapa Lama Skrip Bash Dijalankan Dengan Perintah Waktu

  3. Bash:tunggu dengan batas waktu