Go to main content

マニュアルページ セクション 1: ユーザーコマンド

印刷ビューの終了

更新: 2018年8月8日
 
 

pathchk(1)

名前

pathchk - パス名の検査

形式

pathchk [-p] path...

説明

pathchk コマンドは、1 つ以上のパス名が有効である (つまり、構文エラーを起こさずにファイルにアクセスしたりファイルを作成したりできる) こと、および移植可能である (つまり、ファイル名の切り捨てが発生しない) ことを検査します。さらに詳細な移植性検査は、–p オプションによって提供されます。

デフォルトでは、pathchk はベースとなるファイルシステムに基づいて、それぞれの path オペランドの各コンポーネントを検査します。次の特徴を持つそれぞれの path オペランドに対して、診断が書き込まれます。

  • PATH_MAX バイトより長い。

  • 要素として含むディレクトリに、NAME_MAX バイトより長いコンポーネントを含む

  • ディレクトリに含むいずれかのコンポーネントが検索可能でない

  • 要素として含むディレクトリのいずれかのコンポーネントに、有効でない文字を含む。

診断メッセージの形式は指定されませんが、検出されたエラーおよび対応する path オペランドを示します。

上記で指定したすべての検査に違反しない、欠落したコンポーネントによって指定されるパス名と一致するファイルが作成可能なかぎり、path オペランドの 1 つ以上のコンポーネントが存在しなくてもエラーとはみなされません。

オプション

次のオプションがサポートされています。

–p

ベースとなるファイルシステムに基づく検査を実行する代わりに、次の特徴を持つそれぞれの path オペランドに対して診断を書き込みます。

  • _POSIX_PATH_MAX バイトより長い

  • _POSIX_NAME_MAX バイトより長いコンポーネントを含む

  • 移植可能なファイル名文字セットに存在しない任意の文字を、いずれかのコンポーネントに含む。

–P

ファイル名が空である場合や、「-」(ハイフン) で始まるコンポーネントが含まれている場合は、エラーメッセージを出力します。

オペランド

次のオペランドを指定できます。

path

検査するパス。

使用例 1 pathchk コマンドの使用

インポートされたデータ交換アーカイブ内のすべてのパスが、現在のシステム上で正当かつ明白であることを確認するには、次のようにします。

example% pax -f archive | sed -e '/ == .*/s///' | xargs pathchk
if [ $? -eq 0 ]
then
        pax -r -f archive
else
	echo Investigate problems before importing files.
	exit 1
fi

現在のディレクトリ階層内のすべてのファイルが、X/Open 仕様に準拠し、pax(1) コマンドもサポートするシステムに移動できることを確認するには、次のようにします。

example% find . -print | xargs pathchk -p
if [ $? −eq 0 ]
then
        pax -w -f archive .
else
	echo Portable archive cannot be created.
	exit 1
fi

ユーザー指定のパスによって読み取り可能なファイルが指定されること、およびアプリケーションが所定のパスを拡張して、切り捨てや既存ファイルの上書きを行わずにファイルを作成できることを確認するには、次のようにします。

example% case $- in
	*C*)    reset="";;
	*)      reset="set +C"
		set -C;;
esac
test -r "$path" && pathchk "$path.out" &&
	rm "$path.out" > "$path.out"
if [ $? -ne 0 ]; then
	printf "%s: %s not found or %s.out fails \
creation checks.\n" $0 "$path" "$path"
	$reset	# reset the noclobber option in case a trap
		# on EXIT depends on it
	exit 1
fi
$reset
PROCESSING < "$path" > "$path.out"

この例では、次を前提としています。

  1. PROCESSING は、$path.out が意図したとおりに動作することが確認されたあと、$path を使用するアプリケーションによって使用されるコードを表します。

  2. このコードが呼び出されたとき、noclobber オプションの状態は不明で、終了時には、このコードが呼び出された時点の状態に設定する必要があります。(この例では初期状態に復元するために、reset 変数が使用されています。)

  3. 次の使用方法に注意してください。

    rm "$path.out" > "$path.out"
    a.

    pathchk コマンドは、$path.out が切り捨てられないことを、この時点ですでに確認しています。

    b.

    noclobber オプションを設定することで、シェルは rm を呼び出す前に $path.out がまだ存在していないことを検証します。

    c.

    シェルが $path.out を正しく作成できたら、rm がこれを削除することで、アプリケーションは PROCESSING ステップでファイルをふたたび作成できるようになります。

    d.

    PROCESSING ステップで、ファイルが呼び出されるときにファイルがすでに存在しているようにするには、次のようにします。

    rm "$path.out" > "$path.out"

    これを次のものに置き換えます。

    > "$path.out"

    これにより、ファイルが存在しなかったことが検証されますが、PROCESSING によって使用するための $path.out はそのままにします。

環境変数

pathchk の実行に影響を与える次の環境変数についての詳細は、environ(7) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。

終了ステータス

次の終了ステータスが返されます。

0

すべての path オペランドはすべての検査に合格しました。

>0

エラーが発生しました。

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
インタフェースの安定性
確実
標準
standards(7) を参照してください。

関連項目

pax(1), test(1), attributes(7), environ(7), standards(7)