連載
» 2020年06月03日 05時00分 公開

Linux基本コマンドTips(400):【 pathchk 】コマンド――POSIXシステムで使用できるファイル名かどうかを確認する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はPOSIXシステムで使用できるファイル名かどうかを確認する「pathchk」コマンドです。

[西村めぐみ,@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はPOSIXシステムで使用できるファイル名かどうかを確認する「pathchk」コマンドです。

pathchkコマンドとは?

 「pathchk」は指定したファイル名やパス名がPOSIXシステムで使用できるかどうかを確認するコマンドです。

 現在利用中のOSで使用できるファイル名であっても、他のシステムでは使えないかもしれない、つまり可搬性(ポータビリティー)がないかもしれません。pathchkコマンドではPOSIXシステムで問題ないファイル名かどうかを確認できます。

 シェルスクリプトの中で、ファイル名を確認する際に使用するという使い方もあるでしょう。



コマンドの書式

pathchk [オプション] パス名

※ [ ]は省略可能な引数を示しています。




pathchkの主なオプション

短いオプション 長いオプション 意味
-p ほとんどのPOSIXシステムで使用できるかどうかを確認する
-P ファイル名やディレクトリ名が「-」で始まっていないかどうかを確認する
--portability 全てのPOSIXシステムで使用できるかどうかを確認する(「-p -P」相当)


パス名として使用できるかどうか確認する

 「pathchk パス名」で、現在使用しているファイルシステム上で使用できる名前かどうかを確認します。使用できない文字があったり、長過ぎたりといった問題がある場合は、メッセージを表示します(※1)。問題がない場合は何も表示しません。

※1 CentOS 8の場合、パス全体で4096文字、ファイル名は255文字が最大文字数となっている。それぞれ「getconf」コマンドを使って「getconf PATH_MAX /usr」「getconf NAME_MAX /usr」を実行することで、「/usr」のファイルシステムで使用できるパス名と名前の最大文字数を確認できる(linux/limits.hで定義されている)。



 ほとんどのPOSIXシステム上で問題ないかどうかを確認するには「pathchk -p パス名」を実行します。POSIXで使用できるファイル名は、アルファベットの「A〜Z」「a〜z」の他、「数字の0〜9」「.」「_」「-」だけです。これ以外の文字が使用されている場合やファイル名が14文字を超えている場合、パス名全体で255文字を超えている場合はメッセージを出力します。

 この他、「pathchk -P パス名」で、ファイルやディレクトリの名前が「-」で始まっていないかどうかを確認することができます。これは何かのコマンドでオプションを指定する場合に問題が起こらないようにするために役立ちます。

 「pathchk -pP パス名」のように、「-p」と「-P」の両方を指定することで、パス名がPOSIX上問題ないかどうかを確認できます。「-pP」の代わりにロングオプション「--portability」を使うこともできます。

コマンド実行例

pathchk パス名

(パス名が現在使用しているファイルシステム上で使用できるかどうかを確認する)

pathchk -pP パス名

(パス名がPOSIX上問題ないかどうかを確認する)


 画面1では、「デスクトップ」「/tmp/dir1/test文書」「longfilename.txt」について確認しています。3つとも、現在のOS(ここではCentOS 8)では使用できますが、他のOS(POSIXシステム)では問題があるかもしれないことが分かります。

画面1 画面1 ファイル名やパス名がPOSIXシステム互換かどうかを調べたところ

 画面2では、「/tmp/-test.txt」と「tmp-test.txt」「-test.txt」について確認しています。いずれも「-p」ではエラーになりませんが、「/tmp/-test.txt」と「-test.txt」については「-P」でエラーになりました。

 なお、「-test.txt」のようにパス名の先頭が「-」の場合、pathchkコマンドに対するオプションとして解釈されてしまうため、エラーになります。そこで、「pathchk -- -test.txt」のように、間に「--」を挟んでいます。このように、「-」から始まる名前はコマンドラインで扱いにくいため使用しないことをおすすめします。

画面2 画面2 ハイフンを含んだファイル名やパス名がPOSIX互換かどうかを調べたところ


シェルスクリプトの中で互換性を確認する

 pathchkには終了コードがあり、問題がない場合は「0」、問題がある場合は「1」を返します。そこで、シェルスクリプトの中では「if pathchk パス名」のようにif文を使って、パス名に問題がないかどうかを確認できます。

 次のif文は、変数「FILENAME」にセットされている内容がパス名として問題ないかどうかを確認し、問題がなければ「OK」、問題があれば「NG」というメッセージを表示します。

if pathchk -pP -- "$FILENAME" 2>/dev/null
then
  echo "OK"
else
  echo "NG"
fi

 if文の使い方については連載第223回“応用力”をつけるためのLinux再入門(27)を参照してください。



任意の長さの文字列を作成する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。