fsck
起動ファイルシステムが読み取り専用であることを確認し、その場合は、権限を変更して再起動するために実行される起動時に実行されるスクリプトを作成しようとします。
ls
ポイント1:コマンドから権限行をgrepする方法がわかりません。
ポイント2:コマンドがそれを含まない文字列を返すかどうかを確認する方法もわかりませんw
。
たとえば、ls -l コマンドは次のような行を返します。
drwx-----+ 5 Admin staff 170 Oct 12 05:41 Documents
私はちょうど次の文字列を取得したいと思います:
drwx-----+
その後、書き込み権限がないことを確認します。
以下はこれまでのスクリプトです。
#!/bin/bash
$DIR='home'
#If $DIR has only read permissions run loop
if [[ #point 1 = #point 2 ]] then
#fix permissions on $DIR
umount ${DIR}
fsck
reboot
fi
答え1
if ! [[ -w "$DIR" ]]; then
# $DIR is not writeable
fi
これが適用されます現在のユーザー用しかし。それがあなたが望むものかどうかわかりません。
編集:権限文字列を本当に抽出する必要がある場合は、簡単な方法はstatを使用することです。
stat -c %A "$DIR"
次のようなものを返します。
-rwxr-xr-x
答え2
出力を解析しないエルエス。スクリプティング 101.
man find
man findmnt
システムがマルチユーザーターゲットまたは実行レベルに達すると、ルートファイルシステムは読み取り専用でマウントされません。これは、読み取り専用でマウントされたルートファイルシステムを見つけることができる唯一のユーザーがルートであることを意味します。そして、ルートは権限に関係なくどこでも書くことができます。したがって、ルートファイルシステムが読み取り専用であることを確認するには、単にファイルをタッチしてください。
if touch /testfile ; then
# The root filesystem is read-write
rm /testfile
else
# The root filesystem is read-only
# Do something about it
fi
しかし、これは必須ではありません。システムがルートファイルシステムの読み書きをマウントできない場合、システムはシングルユーザーシェルに入る必要があります。