dirname ディアネーム

英語表記dirname

日本語表記ディレクトリ名部分抽出

正式名称dirname

危険度安全

What does it mean?

パスから末尾要素を除き、親ディレクトリ側の文字列を返します。設定ファイルの配置元や、スクリプト自身の近くにある資源を扱う時の基準作りに向きます。

Command Quest

dirname を今日の道具にする

パスから末尾要素を除き、親ディレクトリ側の文字列を返します。...

$ dirname 文字列... dirname -z 文字列...
関連用語0
次のコマンド0
FAQ2
参照5

概要

パスから末尾要素を除き、親ディレクトリ側の文字列を返します。設定ファイルの配置元や、スクリプト自身の近くにある資源を扱う時の基準作りに向きます。

基本構文

dirname 文字列...
dirname -z 文字列...

詳細解説

dirnameは、パス文字列の末尾要素を取り除き、ディレクトリ部分だけを返すコマンドです。/var/log/syslogなら/var/log、/usr/bin/bashなら/usr/binを返します。basenameと対になる道具として理解すると覚えやすいです。

実務では、スクリプトが置かれたディレクトリの近くにある設定や補助ファイルを探す時、出力先ディレクトリを組み立てる時、パスの親側だけをログへ出したい時に役立ちます。シェルの文字列展開でも書けますが、dirnameを使うと意図が明確になります。

ただしdirnameも実体確認は行いません。文字列として親ディレクトリ部分を計算するだけなので、そこが本当に存在するか、相対パスなのか、シンボリックリンクを含むのかは別に考える必要があります。

このコマンドを使う場面

パスから親側の文字列を取り出したい時、スクリプトの基準ディレクトリを計算したい時、保存先のディレクトリ名だけを別に扱いたい時に使います。

まず安全に試す方法

1. dirname /var/log/syslog
2. dirname /usr/bin/bash
3. dirname ./config/app.yml

結果が存在確認ではなく、文字列としての親側抽出であることを確認してください。

3分ミッション

少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。

  1. 絶対パスと相対パスでdirnameの結果を比較します。

  2. realpathで正規化した結果にdirnameを適用し、文字列処理と実体解決の違いを確認します。

資格試験との関連

  • LinuC レベル1
    範囲: 1.02.2 基本的なファイル管理の実行
    根拠: official
    dirnameは、LinuCレベル1の基本的なファイル管理を理解するうえで重要なコマンドです。
  • LPIC-1
    範囲: 103.3 基本的なファイル管理の実行
    根拠: official
    dirnameは、LPIC-1のファイルとディレクトリの基本操作に関わる代表的なコマンドです。
  • 共通基礎
    範囲: Linuxコマンド基礎
    根拠: editorial
    dirnameは、ファイル操作またはテキスト処理の基本を支えるため、試験横断の共通知識として価値があります。

オプション

  • -z
    改行ではなくヌル文字で区切って出力します。
    dirname -z /a/b /c/d

実行結果サンプル

  • dirname /var/log/syslog
    /var/log
  • dirname ./config/app.yml
    ./config

戻り値コード

  • 0 正常終了。結果を出力できました。
  • >0 引数不足や不正なオプション指定などで失敗しました。

使用例

  • dirname /var/log/syslog
  • dirname /usr/bin/bash
  • dirname ./config/app.yml

よくあるエラー

  • dirnameの結果が実体パスだと思っていた
    原因: dirnameは文字列処理であり、正規化や存在確認はしません。
    対処: 必要ならrealpathで正規化してからdirnameへ渡します。
  • 相対パスの基準を見失った
    原因: 現在位置を意識せずに相対パスを扱っています。
    対処: pwdで基準を確認し、必要なら絶対パスへ変換してから処理します。

導入・互換性情報

POSIXでdirnameは標準化されています。GNU実装では-zなどの拡張があります。末尾スラッシュや空に近い入力の扱いは、記事では必ず実際に確認しながら説明するのが安全です。

注意点 / セキュリティリスク

危険度は低いですが、文字列上の親ディレクトリと、実際に正規化した実体パス上の親ディレクトリは一致しないことがあります。相対パスやシンボリックリンクを含む時はreadlinkやrealpathの併用を検討してください。

FAQ

  • Q. basenameとの違いは何ですか。
    A. basenameは末尾要素を返し、dirnameは親ディレクトリ部分を返します。
  • Q. 存在しないパスでも使えますか。
    A. はい。文字列として計算するため、実体がなくても結果は返ります。

参照リンク

関連記事