No.029ファイルとフォルダ

dirname

ディアネーム・ディレクトリ名部分抽出

知識レベル 基礎安全に試せる一般ユーザーで使える

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

答えよく使う形

  1. 親ディレクトリ側だけを返します
  2. 相対パスも文字列として処理します
  3. 改行ではなくヌル文字で区切って出力します
visitor@goodly: ~

$ dirname /var/log/syslog

/var/log

$ dirname ./config/app.yml

./config

$ dirname /usr/bin/bash

覚える順番の中でLPIC-1・6 駅め / 106

どんなコマンド?

こんなときに

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

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

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

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

書き方とオプション

組み立ててみるオプションを押すと、下の1行に足されます。もう一度押すと外れます。

$ dirname

使用例と実行結果

行を押すとコピーできます。

/var/log
親ディレクトリ側だけを返します。
./config
相対パスも文字列として処理します。

まず安全に試す

3分ミッション

手を動かすと覚えやすくなります。できたものに印を付けてください(この端末に残ります)。

0 / 2

つまずいたとき

dirnameの結果が実体パスだと思っていた

原因dirnameは文字列処理であり、正規化や存在確認はしません。

こうする必要ならrealpathで正規化してからdirnameへ渡します。

相対パスの基準を見失った

原因現在位置を意識せずに相対パスを扱っています。

こうするpwdで基準を確認し、必要なら絶対パスへ変換してから処理します。

終わったときの数(戻り値)

$ echo $?

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

気をつけることと入れ方

気をつけること

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

環境による違い

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

確かめた環境2026-04-09 に確認

よくある質問

basenameとの違いは何ですか。

basenameは末尾要素を返し、dirnameは親ディレクトリ部分を返します。

存在しないパスでも使えますか。

はい。文字列として計算するため、実体がなくても結果は返ります。

資格試験では

  • LinuC レベル1大事1.02.2 基本的なファイル管理の実行dirnameは、LinuCレベル1の基本的なファイル管理を理解するうえで重要なコマンドです。
  • LPIC-1大事103.3 基本的なファイル管理の実行dirnameは、LPIC-1のファイルとディレクトリの基本操作に関わる代表的なコマンドです。
  • 共通基礎大事Linuxコマンド基礎

dirname を最後まで読みました。

Linux コマンド辞典に戻る22 / 144

Goodly のメニュー