2012年8月24日金曜日

fstab-decode

fstab-decode program requires at least one argument. The first argument is a command that can be executed by execvp() function (execvp() function is a front-end of execve() system call). For example, 'ls' can be specified as the first argument of fstab-decode program.

fstab-decode ls

fstab-decode program executes the command specified as the first argument. Therefore, the example above has the same effect as 'ls' command.

The second and subsequent arguments given to fstab-decode program are, if any, treated as arguments for the command specified as the first argument of fstab-decode program. The example below

fstab-decode ls -l -a

does the same thing as 'ls -l -a' does.

So, what is the purpose of fstab-decode program?

The purpose of fstab-decode program is just to replace specific text patterns contained in the second and subsequent arguments before passing the arguments to the specified command.

The replacement table that fstab-decode program internally uses is as follows.


BeforeAfterDescription
\\\backslash
\011\ttab
\012\nnewline
\040
space
\134\backslash


If you type at your command prompt like this,

fstab-decode echo "a\040b\012c\134d"

you will get the following result.

a b
c\d

As the name of fstab-decode implies, the mappings listed in the replacement table above match the ones that can be used in /etc/fstab file. The second field of each line in /etc/fstab is a mount point and if it contains a space like "My Documents", the space should be written as '\040'. That is, you should see "My\040Documents" in /etc/fstab.

As described in the man page, fstab-decode program is useful when /etc/fstab needs to be processed.

fstab-decode umount $(awk '$3 == "vfat" { print $2 }' /etc/fstab)


fstab-decode には少なくとも一つの引数が必要です。最初の引数は execvp() 関数で実行することができるコマンドです (execvp() 関数は execve() システムコールのフロントエンドです)。例えば、fstab-decode プログラムの第一引数として「ls」を指定することができます。

fstab-decode ls

fstab-decode プログラムは第一引数に指定されたコマンドを実行します。ですので、上記の例は「ls」コマンドと同じ効果があります。

fstab-decode プログラムに与えられた二番目以降の引数は、fstab-decode プログラムの第一引数に指定されたコマンドに対する引数として扱われます。下記の例

fstab-decode ls -l -a

は「ls -l -a」と同じことを実行します。

とするならば、fstab-decode プログラムの目的とは何でしょうか?

fstab-decode プログラムの目的は、二番目以降の引数を指定されたコマンドに渡す前に、それらに含まれる特定のテキストパターンを置き換えることです。

fstab-decode プログラムが内部的に使用している置換テーブルは下記のとおりです。


置換前置換後説明
\\\バックスラッシュ
\011\tタブ
\012\n改行
\040
スペース
\134\バックスラッシュ


コマンドラインで次のようにタイプしたとすると、

fstab-decode echo "a\040b\012c\134d"

次の結果が得られます。

a b
c\d

fstab-decode という名前からもわかるように、前述の置換テーブルに列挙されているマッピングは、/etc/fstab ファイルで使用可能なものと一致しています。/etc/fstab 内の各行の第二フィールドはマウントポイントであり、もしもそれが「My Documents」というようにスペースを含むものであれば、そのスペースは「\040」と記述しなければなりません。つまり、/etc/fstab には「My\040Documents」と書かれることになります。

man ページに書かれているように、fstab-decode プログラムは /etc/fstab を処理する必要があるときに役に立ちます。


fstab-decode umount $(awk '$3 == "vfat" { print $2 }' /etc/fstab)