Linux / コマンド / alias - コマンドの別名を作成する

aliasは、Bashで長いコマンドやよく使うオプションの組み合わせに短い名前を付ける組み込みコマンドです。現在のシェルに定義されているエイリアスを確認したり、新しいエイリアスを作成することができ、繰り返し入力を減らし、対話型作業を一貫して行うのに便利です。

エイリアスはコマンドを実行するプログラムではなく、シェルがコマンドラインを読むときに文字列を置き換える機能です。引数を処理したり、複数ステップのロジックが必要な場合は、エイリアスよりもシェル関数の方が適しています。

aliasコマンドとは?

Bashでは、単純なコマンドの最初の単語がエイリアス名と一致すると、その単語を登録された文字列に置き換えた後でコマンドを解釈します。例えばllをls -alFとして定義すると、ll /var/logはls -alF /var/logのように実行されます。

alias自体はBashの組み込みコマンドです。この記事はBashを基準としており、Zshのような他のシェルでは拡張ルールや設定ファイルが異なる場合があります。

基本的な文法

設定を試すだけなら、bash --noprofile --norc で別の対話型 Bash を開いてから操作します。終了時に exit すれば、その練習用シェルで作った別名や関数は残りません。実行ファイルやそのオプションは環境に依存するため、定義しただけで実行できると決めつけず、実際のコマンドも確認してください。

alias [-p] [名前[=値] ...]

引数なしで実行すると、現在のシェルに定義されているすべてのエイリアスを出力します。名前だけを指定するとそのエイリアスを確認でき、名前=値を指定すると新しいエイリアスを作成したり既存の値を変更します。

alias
alias ll
alias ll='ls -alF'

現在のエイリアスを確認する

すべてのエイリアスを出力

alias

出力は大体再入力できる alias 名前='値' 形式です。 alias -p も同じ目的で使用できます。

特定のエイリアスを確認

alias ls
alias grep

指定した名前がエイリアスとして定義されていない場合、エラーメッセージを出力して失敗状態を返します。コマンド名がエイリアスか、関数か、実行ファイルかを一緒に確認するには type 名前 を使用してください。

エイリアスを作成

値に空白やシェルのメタ文字が含まれる可能性があるため、通常はシングルクォートで囲むことが安全です。

alias ll='ls -alF'
alias grep='grep --color=auto'
alias ..='cd ..'
alias logs='journalctl -xe'

= の前後にはスペースを入れないでください。 alias ll = 'ls -alF' のように書くとエイリアス定義として解釈されません。

エイリアスを引き続き使用するために保存

コマンドラインで定義したエイリアスは、現在のシェルプロセスでのみ有効です。新しいターミナルでも使用するには、Bash の開始ファイルに定義する必要があります。

alias ll='ls -alF'
alias update='sudo apt update && sudo apt upgrade'

対話型Bashでは通常、ユーザーのホームの~/.bashrcに追加します。ディストリビューションによっては~/.bash_aliasesを~/.bashrcから読み込むこともあるため、既存の設定構造をまず確認してください。

編集前に設定ファイルをバックアップします。例の update は apt を使う Debian・Ubuntu 系向けで、呼び出すと実際にパッケージ情報の更新とアップグレードを行います。ログインシェルでは ~/.bash_profile などから ~/.bashrc を読み込む構成かも確認してください。修正後は新しい対話型シェルを開くか、次のコマンドで再適用できます。ただし source はファイル全体の命令を再実行するため、他の初期化処理への影響も確認します。

source ~/.bashrc

実用的なエイリアス例

例 用途
alias la='ls -A' .と..を除いた隠しファイルまで表示します。
alias c='clear' 端末画面を短いコマンドで整理します。
alias gs='git status' Git作業ツリーの状態を素早く確認します。
alias dfh='df -h' ファイルシステムの使用量を読みやすい単位で表示します。
alias mkdir='mkdir -p' 必要な上位ディレクトリまで作成します。既存のコマンドの動作を変更するため、チーム環境では注意が必要です。

元のコマンドを実行する方法

現在の候補を調べるには type による種類と実行候補の確認、関数を避けて呼び出すには command の関数検索を省く動作が役立ちます。バックスラッシュで避けられるのは別名展開であり、同名の関数までは避けられません。

エイリアスが適用された名前で一時的にエイリアスをスキップするには、コマンドの前にバックスラッシュを付けることができます。

\ls

commandはシェル関数の検索をスキップする目的で便利ですが、エイリアスの展開はそれより先に行われるため、通常はcommand lsのcommand自身がエイリアスでない限り、2番目の単語であるlsはエイリアス展開の対象にはなりません。実行ファイルを確実に指定するには、/usr/bin/lsのように絶対パスを使用することもできます。

引数が必要な場合はシェル関数を使う

エイリアスは渡された最初の引数を途中に挿入する機能を持っていません。位置引数を次のように扱う場合は、関数を定義する方が明確です。

mkcd() {
  mkdir -p -- "$1" && cd -- "$1"
}

この関数を定義した同じ練習用シェルで mkcd "practice dir" を実行し、pwd で移動先を確認します。作成可能な練習用の親ディレクトリで試し、空でないパスを引数として渡してください。エイリアスの後に入力した引数は、展開されたコマンドの末尾にそのまま付きます。単にデフォルトのオプションを追加する用途であればエイリアスに適していますが、条件文・ループ・引数の検証が必要な場合は関数を使ってください。

エイリアスが展開されない場合

非対話型シェルとスクリプト

Bashは基本的に非対話型シェルではエイリアスを展開しません。shopt -s expand_aliasesで展開を有効にできますが、スクリプトではエイリアスよりも関数や明示的なコマンドを使用する方が移植性と予測可能性が高いです。

同じ行で定義してすぐ実行

エイリアスは実行時ではなく、Bashがコマンドを読み取る時点で展開されます。したがって、同じ行や1つの複合コマンド内で定義したエイリアスが直後のコマンドに適用されない場合があります。

alias hi='printf "hello\n"'; hi

混乱を避けるために、エイリアスの定義は別の行に置き、スクリプトのロジックでは関数やコマンドを使用してください。

安全に使用する基準

  • 削除や上書きのような危険な操作を隠すエイリアスは避けます。
  • 基本コマンドと同じ名前を使用する場合は、動作が変わることを認識します。
  • サーバ運用手順や共有スクリプトが個人のエイリアスに依存しないようにします。
  • 複雑な引用符、パイプラインおよび引数処理が必要な場合は関数を使用します。
  • エイリアスの実際の定義は alias 名前 または type 名前 で確認します。

alias、関数、スクリプトの比較

方式 適した用途 注意点
alias 対話型シェルで短い名前や基本オプションを追加 位置引数や複雑なロジックを直接処理するのは難しいです。
シェル関数 引数、条件文および複数のコマンドが必要な繰り返し作業 現在のシェルの種類と関数定義が必要です。
実行スクリプト 他のシェル・ユーザー・システムでも再利用する作業 ファイル配置、実行権限とPATHの管理が必要です。

よくある質問

エイリアスを作ったのに新しいターミナルで消えます。

コマンドラインで作ったエイリアスは現在のシェルにのみ存在します。~/.bashrc またはディストリビューションで使用されるエイリアス設定ファイルに保存して、新しいシェルを開始してください。

エイリアス名に引数を入れることはできますか?

エイリアスの後に入力した引数は展開結果の最後に付きますが、$1 のように位置を指定することはできません。引数の位置や検証が必要な場合は、シェル関数を使用してください。

エイリアスを削除するにはどうすればよいですか?

現在のシェルではunalias 名前を使用しています。スタートアップファイルに保存されたエイリアスであれば、その定義も削除するかコメントアウトしてください。定義を残すと、新しいシェルで再び作成されます。

参考資料