概要
パスからディレクトリ部分を除き、最後の名前要素だけを取り出します。シェルスクリプトで出力名を決める時や、ログ表示を簡潔にしたい時に役立ちます。
基本構文
basename 文字列 [接尾辞]
basename -a 文字列...詳細解説
basenameは、パス全体から最後の要素だけを取り出すコマンドです。/var/log/syslogならsyslogを返し、/usr/bin/bashならbashを返します。見た目は単純ですが、パス処理を外部コマンドへ切り出せるため、移植性のあるスクリプトで便利です。
よく似た処理はシェルのパラメータ展開でも書けますが、記事や手順書ではbasenameのほうが意図が明確です。また、サフィックス除去を使えば、report.txtからreportだけを得るような処理も簡潔に書けます。
ただしbasenameは「文字列としてのパス」を処理する道具であり、対象ファイルの存在は確認しません。実体の確認、シンボリックリンクの解決、正規化された絶対パスの取得は別の道具が必要です。
このコマンドを使う場面
パスから表示名だけを取り出したい時、処理結果の出力ファイル名を組み立てたい時、ログで長いパスではなく末尾名だけを出したい時に使います。
まず安全に試す方法
1. basename /var/log/syslog
2. basename /path/to/report.txt .txt
3. basename -a /etc/passwd /usr/bin/bash
実体の有無に関係なく文字列処理として動くことを確認してください。
3分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
複数のパスに対してbasenameを試し、どこまでが末尾要素になるか確認します。
-
basename パス .txtの形で拡張子除去を試し、文字列処理であることを理解します。
資格試験との関連
-
LinuC レベル1
範囲: 1.02.2 基本的なファイル管理の実行根拠: officialbasenameは、LinuCレベル1の基本的なファイル管理を理解するうえで重要なコマンドです。
-
LPIC-1
範囲: 103.3 基本的なファイル管理の実行根拠: officialbasenameは、LPIC-1のファイルとディレクトリの基本操作に関わる代表的なコマンドです。
-
共通基礎
範囲: Linuxコマンド基礎根拠: editorialbasenameは、ファイル操作またはテキスト処理の基本を支えるため、試験横断の共通知識として価値があります。
実行結果サンプル
-
basename /var/log/syslogsyslog -
basename /path/to/report.txt .txtreport
戻り値コード
- 0 正常終了。結果を出力できました。
- >0 引数不足や不正なオプション指定などで失敗しました。
使用例
basename /var/log/syslogbasename /path/to/report.txt .txtbasename -a /etc/passwd /usr/bin/bash
よくあるエラー
-
basenameの結果が存在確認だと思っていた 原因: basenameは文字列処理であり、ファイルの存在は確認しません。対処: 必要ならtest、ls、statなどで実体確認を別に行います。
-
接尾辞が消えない 原因: 指定した接尾辞が末尾と一致していません。対処: 対象の末尾文字列を正確に確認し、必要なら拡張子を含めて指定します。
導入・互換性情報
POSIXでbasenameは標準化されています。GNU実装では-aや-zなど複数入力やヌル終端向けの拡張があります。単一パスを処理する基本動作は共通ですが、特殊な入力の扱いは実装差に注意が必要です。
注意点 / セキュリティリスク
危険度は低いですが、basenameは実体確認を行わないため、「存在するファイル名を得た」と誤解してはいけません。入力が空文字や末尾スラッシュ付きの時は、実装差や期待との差が出やすいため注意が必要です。
FAQ
-
Q. basenameとシェルのパラメータ展開はどちらを使うべきですか。 A. 簡潔さならパラメータ展開、意図の分かりやすさや移植性重視ならbasenameが使いやすいです。
-
Q. ファイルがなくても動きますか。 A. はい。パス文字列として処理するため、実体がなくても末尾要素を返します。
参照リンク
- カテゴリー: File And Directory
- レベル: Basic
- 対応試験: LinuC, LinuC レベル1, LPIC, LPIC-1, 共通基礎