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

basename

ベースネーム・ファイル名部分抽出

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

パスからディレクトリ部分を除き、最後の名前要素だけを取り出します。シェルスクリプトで出力名を決める時や、ログ表示を簡潔にしたい時に役立ちます。

答えよく使う形

  1. 末尾要素だけを取り出します
  2. 接尾辞が一致すれば取り除けます
  3. 複数のパスを続けて処理します
visitor@goodly: ~

$ basename /var/log/syslog

syslog

$ basename /path/to/report.txt .txt

report

$ basename -a /etc/passwd /usr/bin/bash

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

どんなコマンド?

こんなときに

パスから表示名だけを取り出したい時、処理結果の出力ファイル名を組み立てたい時、ログで長いパスではなく末尾名だけを出したい時に使います。

basenameは、パス全体から最後の要素だけを取り出すコマンドです。/var/log/syslogならsyslogを返し、/usr/bin/bashならbashを返します。見た目は単純ですが、パス処理を外部コマンドへ切り出せるため、移植性のあるスクリプトで便利です。

よく似た処理はシェルのパラメータ展開でも書けますが、記事や手順書ではbasenameのほうが意図が明確です。また、サフィックス除去を使えば、report.txtからreportだけを得るような処理も簡潔に書けます。

ただしbasenameは「文字列としてのパス」を処理する道具であり、対象ファイルの存在は確認しません。実体の確認、シンボリックリンクの解決、正規化された絶対パスの取得は別の道具が必要です。

書き方とオプション

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

$ basename

使用例と実行結果

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

syslog
末尾要素だけを取り出します。
report
接尾辞が一致すれば取り除けます。

まず安全に試す

3分ミッション

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

0 / 2

つまずいたとき

basenameの結果が存在確認だと思っていた

原因basenameは文字列処理であり、ファイルの存在は確認しません。

こうする必要ならtest、ls、statなどで実体確認を別に行います。

接尾辞が消えない

原因指定した接尾辞が末尾と一致していません。

こうする対象の末尾文字列を正確に確認し、必要なら拡張子を含めて指定します。

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

$ echo $?

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

気をつけることと入れ方

気をつけること

危険度は低いですが、basenameは実体確認を行わないため、「存在するファイル名を得た」と誤解してはいけません。入力が空文字や末尾スラッシュ付きの時は、実装差や期待との差が出やすいため注意が必要です。

環境による違い

POSIXでbasenameは標準化されています。GNU実装では-aや-zなど複数入力やヌル終端向けの拡張があります。単一パスを処理する基本動作は共通ですが、特殊な入力の扱いは実装差に注意が必要です。

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

よくある質問

basenameとシェルのパラメータ展開はどちらを使うべきですか。

簡潔さならパラメータ展開、意図の分かりやすさや移植性重視ならbasenameが使いやすいです。

ファイルがなくても動きますか。

はい。パス文字列として処理するため、実体がなくても末尾要素を返します。

資格試験では

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

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

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

Goodly のメニュー