ファイルシステムがスクリプトでマウントされているかどうかを確認する方法


19

私はスクリプトを書くのは初めてです...私は非常に基本的なことをすることができますが、今は手が必要です。

バックアップが必要なときにのみマウントされるローカルファイルシステムがあります。

私はこれから始めています。

#!/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

私が言ったように、私はスクリプト作成は非常に基本的です。mountリターンコードを見ることで、コマンドのステータスを確認できると聞きました。

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

それを確認する方法がわかりません。ガイダンスはありますか?


2
; thenスクリプトに面白いぶら下がりがあります。
マット

MOUNT変数をエクスポートし、「;」も削除する理由
マイクQ

同様の質問は、サーバー障害スタックオーバーフローに関するものですUnixおよびLinuxスタック交換に関するものです。
サーシャ

回答:


19

mountシェルの特殊パラメーターを使用して、のステータスコード、および最も適切に記述された実行可能ファイルを確認できます?

からman bash

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

mountコマンドを実行した後、すぐに実行するecho $?と、前のコマンドのステータスコードが出力されます。

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

すべての実行可能ファイルのステータスコードが明確に定義されているわけではありません。少なくとも、成功(0)または失敗(1)コードで終了する必要がありますが、常にそうであるとは限りません。

サンプルスクリプトを拡張(および修正)するifために、わかりやすくするためにネストされた構造を追加しました。ステータスコードをテストしてアクションを実行する唯一の方法ではありませんが、学習するときに読むのが最も簡単です。

#!/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

「終了および終了ステータス」の詳細については、高度なBashスクリプトガイドを参照してください。


1
エクスポートする必要はありません$MOUNT。このスクリプトは、ファイルシステムに単語分割(スペースなど)を受ける文字がある場合にも壊れます。常に展開を引用する必要があります。
クリスダウン

@ChrisDownそうですね。明らかなぶら下がり '; then'のみを削除しました。将来は、回答を編集してより正確なものにすることができます。
ジョージM

えー...これはまだ壊れます。あなたはまだ拡張を引用していません。あなたのアドバイスで、私は今それをします。
クリスダウン

また、悪名高い「高度な」Bashスクリプティングガイドへのリンクはお勧めしません。エラーでいっぱいであり、スクリプトではなくバグを書くことを人々に教えます。BashGuideは、はるかに優れた代替手段です。
クリスダウン

2
@ChrisDown「物事を適切に引用しないと、単語の分割は赤ちゃんを食べてしまいます。」生きるための言葉。
ジョージM

35

多くのLinuxディストリビューションにはmountpointコマンドがあります。ディレクトリがマウントポイントかどうかを確認するために明示的に使用できます。これのように簡単です:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi

1
encfsをチェックしようとすると、root以外のユーザーが実行するとアクセス許可拒否エラーに遭遇するため、このアプローチは失敗します。
Sを拒否します。

私のソリューションはencfsで動作します。
セオドアR.スミス

3

もう1つの方法:

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

こんにちは@sungtm; 新しい別のアカウントでログインしているようです。あなた以来、「日」のアカウントがあまり活性を有していない、私はあなたがあなたの新しい使用し続けることを示唆しているよ「sungtm」それは単純であるとして、アカウントを。ただし、アカウントをマージする場合は、このコメントにフラグを付けてお知らせください。StackExchangeチームに連絡します。ありがとうございました!
ジェフシャラー

encfsの場合findmnt、パラメータ--source encfsを指定する必要があります。指定しない場合、親マウントにフォールバックするため、ディレクトリは常にマウントされていると見なされます。
バーカート

2

ルートを必要としない最も簡単な方法は次のとおりです。

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

fi

または、マウントされていないかどうかを確認するには:

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

fi

mountこのコマンドは、rootアクセスを必要としませんdf...上のポイントをマウントしないディスクスペースに焦点を当てている
フィリップGachoud

1

短い

マウントされているかどうかを確認します

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

マウントされていないか確認してください:

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

0

私は以下のスクリプトで試しました

#!/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

入力する必要があるのはファイルシステムの名前のみです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.