- サーバー
Linux alias設定と.bashrcの書き方|おすすめエイリアス50選
alias(エイリアス)とは、長いコマンドに短い別名を付けるシェルの機能で、alias 名前='コマンド' と書き、~/.bashrc に保存すると次回以降も使えます。 たとえば alias ll='ls -alF' と1行書くだけで、ll と打てば ls -alF が実行されます。
この記事では、設定の基本に加えて、用途別(ls・移動・安全策・git・docker・ネットワーク・検索)にそのまま貼れるエイリアス50個を一覧表にしました。50個はすべて Ubuntu 24.04 の bash 5.2.21 で定義し、動きを確かめています。さらに「設定したのに反映されない」ときの原因を、実際のエラーメッセージを再現しながら1つずつ確認します。zsh は 5.9 で確かめました。
aliasの早見表
やりたいこと別のコマンド
| やりたいこと | 書き方 | 補足 |
|---|---|---|
| エイリアスを作る | alias ll='ls -alF' |
= の前後に空白を入れない。値はシングルクォートで囲む |
| 一覧を見る | alias |
引数なしで全件表示 |
| 1つだけ中身を見る | alias ll または type ll |
type は関数や実体のパスも教えてくれる |
| 1つ消す | unalias ll |
今のシェルだけ。.bashrc の行は残る |
| 全部消す | unalias -a |
今のシェルだけ |
| 一時的に元のコマンドを使う | \rm file / command rm file |
エイリアスを通さずに実行 |
| 次回以降も使う | ~/.bashrc(または ~/.bash_aliases)に書く |
書いたあと source ~/.bashrc |
| zsh で使う | ~/.zshrc に書く |
書式は bash と同じ |
| 引数を途中に入れたい | 関数にする mkcd() { mkdir -p "$1" && cd "$1"; } |
エイリアスは末尾にしか引数を足せない |
| sudo の後ろでも効かせる | alias sudo='sudo ' |
末尾の空白がポイント |
| スクリプト内で使う | shopt -s expand_aliases |
関数にするほうが読みやすい |
「反映されない」ときの原因早見表
| 症状 | 主な原因 | 直し方 |
|---|---|---|
.bashrc に書いたのに command not found |
source していない |
source ~/.bashrc か、端末を開き直す |
| SSH でログインすると効かない | ~/.bash_profile が ~/.bashrc を読んでいない |
.bash_profile に読み込みの3行を足す |
alias: +%F: not found などと出る |
クォート不足、= の前後に空白 |
値全体を '...' で囲み、空白を取る |
| 変数が定義時の値のまま | ダブルクォートで囲んだ | シングルクォートにする |
sudo ll が command not found |
sudo の後ろは展開されない | alias sudo='sudo ' |
| スクリプト内で効かない | 非対話シェルは展開しない | shopt -s expand_aliases か関数にする |
ssh host ll で効かない |
非対話なので .bashrc が途中で終わる |
コマンドをそのまま書く |
| 同じ行で定義してすぐ使えない | 1行を読み終えてから展開される | 定義と使用を別の行にする |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Linux alias設定と.bashrcの書き方|おすすめエイリアス50選」
aliasの基本:作る・確認する・消す
検証環境は次のとおりです。
| 項目 | バージョン |
|---|---|
| OS | Ubuntu 24.04.4 LTS |
| bash | 5.2.21 |
| zsh | 5.9 |
| ls(GNU coreutils) | 9.4 |
| git | 2.43.0 |
作る:alias 名前='コマンド'
alias ll='ls -alF'
alias gs='git status -sb'
書式のポイントは3つです。
=の前後に空白を入れない- 値にスペースが含まれるならクォートで囲む(基本はシングルクォート)
- 名前には英数字のほか
.や-も使える(..やl.など)
確認する:alias と type
alias # 全件
alias ll # ll だけ
type ll gs # 種類つきで表示
実行結果です。
ll is aliased to `ls -alF'
gs is aliased to `git status -sb'
type -a を使うと、エイリアスと実体の両方を順番に見られます。「いま打ったコマンドは何が動くのか」を調べるときに便利です。
alias ls='ls --color=auto'
type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls
消す:unalias
unalias rm # rm のエイリアスだけ消す
type rm
alias rm
unalias -a # すべて消す
alias | wc -l
rm is hashed (/usr/bin/rm)
bash: alias: rm: not found
0
unalias は今開いているシェルだけに効きます。~/.bashrc に書いた行はそのままなので、次に端末を開けばまた定義されます。完全にやめたいときは .bashrc の該当行を消すか、行頭に # を付けます。
一時的にエイリアスを通さない4つの方法
alias rm='rm -i' を入れていると、毎回確認が出ます。「今回だけ確認なしで消したい」ときは、次のどれかで元のコマンドを呼べます。
alias rm='rm -i'
touch a.tmp b.tmp c.tmp d.tmp
echo n | rm a.tmp # エイリアス経由:確認が出る(n と答える)
ls a.tmp # 残っている
\rm a.tmp # 1. 先頭にバックスラッシュ
command rm b.tmp # 2. command を前に付ける
/usr/bin/rm c.tmp # 3. フルパスで呼ぶ
'rm' d.tmp # 4. クォートで囲む
\ls *.tmp
実行結果です。
rm: remove regular empty file 'a.tmp'? a.tmp
ls: cannot access '*.tmp': No such file or directory
1行目は rm -i の確認に n と答えたので a.tmp が残っている様子、2行目は4つの方法ですべて消えたことを示しています。
| 方法 | 書き方 | 特徴 |
|---|---|---|
| バックスラッシュ | \rm file |
いちばん短い。エイリアスだけを避ける(同名の関数は通る) |
| command | command rm file |
エイリアスも関数も避けて、組み込みか実体を呼ぶ |
| フルパス | /usr/bin/rm file |
何が動くかが最もはっきりする |
| クォート | 'rm' file |
単語の一部でもクォートされていれば展開されない |
エイリアスは「コマンドの先頭の単語が、クォートされずに書かれたとき」だけ展開されるので、バックスラッシュやクォートを付けると素通りします。
.bashrcの書き方:次回も使えるように保存する
端末で alias を打っただけでは、その端末を閉じると消えます。次回以降も使うには ~/.bashrc に書きます。
.bashrc に追記する手順
# 1. バックアップを取る
cp ~/.bashrc ~/.bashrc.bak
# 2. エディタで開いて末尾に追記する(nano でも vim でも可)
nano ~/.bashrc
# 3. 今のシェルに読み込ませる
source ~/.bashrc
# 4. 確認する
type ll
追記する内容の例です。
# ---- 自分用エイリアス ----
alias ll='ls -alF'
alias ..='cd ..'
alias gs='git status -sb'
source ~/.bashrc(. ~/.bashrc でも同じ)は、ファイルの内容を今のシェルで実行するコマンドです。端末を開き直しても同じ効果になります。
~/.bash_aliases に分けると管理しやすい
Ubuntu の初期状態の ~/.bashrc(/etc/skel/.bashrc)には、次の記述が最初から入っています。
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
つまり ~/.bash_aliases というファイルを作るだけで、自動で読み込まれます。 エイリアスが10個を超えてきたら、.bashrc 本体と分けておくと見通しがよくなります。
| 置き場所 | 向いている場面 |
|---|---|
~/.bashrc に直接 |
数個だけのとき |
~/.bash_aliases |
数が増えたとき。Ubuntu・Debian 系は初期状態で読み込まれる |
~/.bashrc.d/*.sh など自作の分割 |
用途ごとにファイルを分けたいとき(読み込みループを自分で書く) |
/etc/profile.d/*.sh や /etc/bash.bashrc |
全ユーザー共通にしたいとき(管理者権限が必要) |
RHEL 系など、初期の .bashrc に上の3行が入っていないディストリビューションでは、同じ3行を自分で .bashrc に足せば同じ運用ができます。
Ubuntu の初期 .bashrc には、すでに次のエイリアスが定義されています。自分で足す前に alias で確認しておくと重複を避けられます。
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
.bashrc・.bash_profile・.profile の関係
エイリアスが「あるときは効いて、あるときは効かない」のは、bash が起動のしかたによって読むファイルを変えるためです。
| 起動のしかた | 種類 | 読まれるファイル |
|---|---|---|
SSH でログイン、su - user、bash -l |
ログインシェル | ~/.bash_profile → なければ ~/.bash_login → なければ ~/.profile(最初に見つかった1つだけ) |
デスクトップで端末アプリを開く、bash と打つ |
対話シェル(非ログイン) | ~/.bashrc |
bash script.sh、ssh host コマンド、cron |
非対話シェル | 原則どちらも読まない |
ログインシェルは ~/.bashrc を直接は読みません。Ubuntu では ~/.profile の中に「.bashrc があれば読む」という記述があるので、結果としてどちらでもエイリアスが使えます。
# Ubuntu の ~/.profile(抜粋)
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
エイリアスは ~/.bashrc(またはそこから読まれる ~/.bash_aliases)に、環境変数は ~/.profile に、と分けて覚えるとすっきりします。エイリアスは環境変数と違って子プロセスに引き継がれないため、対話シェルが起動するたびに読まれる .bashrc が置き場所として合っています。読み込み順をさらに細かく確かめたい方は、別記事「Linux環境変数PATHの設定方法」で cron や ssh を含めた実測結果を載せています。
おすすめエイリアス50選(用途別・コピペ用)
ここからが本題の一覧です。まずコピペ用の全文、その後に用途別の解説表を載せます。50個すべてを bash 5.2.21 で定義し、alias | wc -l が 50 を返すこと、type で展開内容が意図どおりであることを確かめました。docker 以外の各エイリアスは実際に実行して動きを見ています(docker は後述)。
コピペ用:~/.bash_aliases の全文
# ~/.bash_aliases
# ---- ls ----
alias ls='ls --color=auto'
alias ll='ls -alF'
alias la='ls -A'
alias lt='ls -ltrh'
alias lS='ls -lSrh'
alias l.='ls -d .*'
alias tree2='tree -L 2'
# ---- 移動 ----
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias -- -='cd -'
alias cdd='cd ~/Downloads'
alias mkdirp='mkdir -pv'
# ---- 安全策 ----
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias chmod='chmod --preserve-root'
alias chown='chown --preserve-root'
alias sudo='sudo '
# ---- git ----
alias g='git'
alias gs='git status -sb'
alias ga='git add'
alias gc='git commit'
alias gcm='git commit -m'
alias gd='git diff'
alias gds='git diff --staged'
alias gl='git log --oneline --graph --decorate -20'
alias gsw='git switch'
alias gp='git push'
alias gpl='git pull --ff-only'
# ---- docker ----
alias d='docker'
alias dps='docker ps'
alias dpsa='docker ps -a'
alias di='docker images'
alias dex='docker exec -it'
alias dlog='docker logs -f --tail=100'
alias dc='docker compose'
alias dprune='docker system prune'
# ---- ネットワーク ----
alias ports='ss -tulnp'
alias myip='ip -br addr'
alias ping5='ping -c 5'
alias headers='curl -sI'
# ---- 検索・その他 ----
alias grep='grep --color=auto'
alias h='history | tail -30'
alias hg='history | grep'
alias dfh='df -hT'
alias duh='du -sh * | sort -h'
alias path='echo "$PATH" | tr ":" "\n"'
alias now='date "+%Y-%m-%d %H:%M:%S"'
alias reload='source ~/.bashrc'
全部を入れる必要はありません。自分がよく打つコマンドから数個ずつ足していくのがおすすめです。history | awk '{print $2}' | sort | uniq -c | sort -rn | head で、自分がよく使うコマンドの上位を調べられます。
ls 系(7個)
| No. | エイリアス | 動き |
|---|---|---|
| 1 | ls='ls --color=auto' |
種類ごとに色分け。パイプに渡すときは色を付けない |
| 2 | ll='ls -alF' |
隠しファイルを含む詳細表示。ディレクトリに / などの印を付ける |
| 3 | la='ls -A' |
. と .. を除いた隠しファイルを含む一覧 |
| 4 | lt='ls -ltrh' |
更新が新しいものを下に。直近に変わったファイルを探す |
| 5 | lS='ls -lSrh' |
サイズが大きいものを下に |
| 6 | l.='ls -d .*' |
隠しファイルだけを表示 |
| 7 | tree2='tree -L 2' |
2階層までのツリー表示(tree のインストールが必要) |
ll と lS の実行例です。
$ ll
total 20
drwxr-xr-x 3 root root 4096 Oct 2 10:19 ./
drwxr-xr-x 3 root root 4096 Oct 2 10:19 ../
-rw-r--r-- 1 root root 0 Oct 2 10:19 .hid
(以下略)
$ lS | tail -2
drwxr-xr-x 3 root root 4.0K Oct 2 10:19 a
-rw-r--r-- 1 root root 4.9K Oct 2 10:19 big
alias ls='ls --color=auto' のように自分自身の名前を値に含めても、無限ループにはなりません。bash は、展開中のエイリアスと同じ名前の単語を2度は展開しないためです。また ll の値に含まれる ls は、さらに ls --color=auto に展開されます(エイリアスの値の先頭の単語は、もう一度エイリアスとして調べられます)。
移動系(6個)
| No. | エイリアス | 動き |
|---|---|---|
| 8 | ..='cd ..' |
1つ上へ |
| 9 | ...='cd ../..' |
2つ上へ |
| 10 | ....='cd ../../..' |
3つ上へ |
| 11 | -- -='cd -' |
直前にいたディレクトリへ戻る(- 1文字で実行) |
| 12 | cdd='cd ~/Downloads' |
よく行く場所へ。パスは自分用に変える |
| 13 | mkdirp='mkdir -pv' |
途中のディレクトリも作り、作ったものを表示 |
11番の alias -- -='cd -' は、名前が - で始まるため、オプションの終わりを示す -- を前に置いて定義します。type - の結果は次のとおりです。
- is aliased to `cd -'
mkdirp p/q/r の実行結果です。
mkdir: created directory 'p'
mkdir: created directory 'p/q'
mkdir: created directory 'p/q/r'
安全策(6個)
| No. | エイリアス | 動き |
|---|---|---|
| 14 | rm='rm -i' |
消す前に1つずつ確認する |
| 15 | cp='cp -i' |
上書きの前に確認する |
| 16 | mv='mv -i' |
上書きの前に確認する |
| 17 | chmod='chmod --preserve-root' |
/ に対する再帰的な変更を止める |
| 18 | chown='chown --preserve-root' |
同上 |
| 19 | sudo='sudo ' |
sudo の後ろでもエイリアスを効かせる(後述) |
17番を入れた状態で、誤って / を指定した場合の表示です(実際に実行して確認しました。変更は行われません)。
$ chmod -R 000 /
chmod: it is dangerous to operate recursively on '/'
chmod: use --no-preserve-root to override this failsafe
rm -i は便利ですが、エイリアスのないサーバーに入ったときも同じ感覚で打つと、確認なしで消える点は覚えておきたいところです。「確認が出るはず」に頼りすぎず、消す前に ls で対象を見る習慣と組み合わせると安心です。大量に消すときは \rm -r dir のようにバックスラッシュで素の rm を呼べます。
git 系(11個)
| No. | エイリアス | 動き |
|---|---|---|
| 20 | g='git' |
g status のように使う |
| 21 | gs='git status -sb' |
短い形式の状態表示+ブランチ名 |
| 22 | ga='git add' |
ステージに追加 |
| 23 | gc='git commit' |
エディタを開いてコミット |
| 24 | gcm='git commit -m' |
gcm "メッセージ" でコミット |
| 25 | gd='git diff' |
作業ツリーの差分 |
| 26 | gds='git diff --staged' |
ステージ済みの差分 |
| 27 | gl='git log --oneline --graph --decorate -20' |
直近20件を1行ずつグラフ表示 |
| 28 | gsw='git switch' |
ブランチ切り替え |
| 29 | gp='git push' |
プッシュ |
| 30 | gpl='git pull --ff-only' |
早送りできるときだけ取り込む |
新しいリポジトリで ga → gcm → gs → gl と続けた結果です。
$ ga f
$ gcm "first" -q
$ gs
## master
$ gl
* 51ab955 (HEAD -> master) first
シェルのエイリアスと、git 自身のエイリアス(git config --global alias.st status)は別の仕組みです。シェルのエイリアスは git の後ろでは展開されないので、git gcm "first" と打つと次のようになります。
git: 'gcm' is not a git command. See 'git --help'.
| 種類 | 定義場所 | 呼び方 |
|---|---|---|
| シェルのエイリアス | ~/.bashrc |
gs |
| git のエイリアス | ~/.gitconfig |
git st |
docker 系(8個)
| No. | エイリアス | 動き |
|---|---|---|
| 31 | d='docker' |
d ps のように使う |
| 32 | dps='docker ps' |
動いているコンテナ |
| 33 | dpsa='docker ps -a' |
停止中も含めたコンテナ |
| 34 | di='docker images' |
イメージ一覧 |
| 35 | dex='docker exec -it' |
dex コンテナ名 bash で中に入る |
| 36 | dlog='docker logs -f --tail=100' |
末尾100行から追いかける |
| 37 | dc='docker compose' |
dc up -d のように使う |
| 38 | dprune='docker system prune' |
使っていないデータの掃除(確認あり) |
docker 系は、エイリアスの定義と展開(type dps が docker ps を返すこと)までを確認しました。検証環境では Docker デーモンを起動できなかったため、コンテナを相手にした実行は行っていません。dc version はデーモンなしで動くため実行でき、Docker Compose version v5.1.3 と表示されました。各コマンドの意味は Docker の公式ドキュメントで確認しています。
ネットワーク系(4個)
| No. | エイリアス | 動き |
|---|---|---|
| 39 | ports='ss -tulnp' |
待ち受け中のポートとプロセスを表示 |
| 40 | myip='ip -br addr' |
インターフェースごとの IP アドレスを1行ずつ |
| 41 | ping5='ping -c 5' |
5回で止まる ping |
| 42 | headers='curl -sI' |
headers URL でレスポンスヘッダーだけ見る |
ports と myip の実行結果です(一部)。
$ ports
Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
tcp LISTEN 0 200 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=390,fd=6))
$ myip
lo UNKNOWN 127.0.0.1/8
検索・その他(8個)
| No. | エイリアス | 動き |
|---|---|---|
| 43 | grep='grep --color=auto' |
一致した部分に色を付ける |
| 44 | h='history | tail -30' |
直近30件の履歴 |
| 45 | hg='history | grep' |
hg ssh で履歴を検索 |
| 46 | dfh='df -hT' |
ディスクの空きを読みやすい単位で。種類も表示 |
| 47 | duh='du -sh * | sort -h' |
今いる場所の中身をサイズ順に |
| 48 | path='echo "$PATH" | tr ":" "\n"' |
PATH を1行ずつ表示 |
| 49 | now='date "+%Y-%m-%d %H:%M:%S"' |
現在時刻を決まった形式で |
| 50 | reload='source ~/.bashrc' |
設定を読み直す |
実行結果です(dfh は列の間隔を詰めて掲載しています)。
$ now
2026-10-02 10:19:17
$ path | head -2
/home/claude/.npm-global/bin
/root/.local/bin
$ dfh | head -2
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 7.9G 17M 7.9G 1% /dev/shm
45番の hg は、バージョン管理ツールの Mercurial(コマンド名 hg)を使っている場合は名前が重なるので、hgrep など別の名前にしてください。エイリアスは同名のコマンドより先に選ばれるため、既存のコマンド名と重ならないかを type 名前 で確かめてから決めると安心です。
引数を取りたいときは関数にする
エイリアスは文字列の置き換えです。打った引数は、置き換えた文字列の後ろにそのまま続きます。$1 のような引数の受け取りはできません。
直す前:エイリアスで $1 を使う
alias findname='find . -name $1 -type f'
cd /etc/skel
findname '.b*'
実行結果です。
find: paths must precede expression: `f'
$1 は空として展開され、引数の '.b*' は末尾に付くため、実際に動いたのは find . -name -type f '.b*' です。意図と違う並びになっています。
直した後:関数にする
fn() { find . -name "$1" -type f; }
cd /etc/skel
fn '.b*'
./.bashrc
./.bash_logout
よく使われる「ディレクトリを作ってそのまま入る」も、2か所で引数を使うので関数向きです。
mkcd() { mkdir -p "$1" && cd "$1"; }
cd /tmp
mkcd t152x/y
pwd
type mkcd | head -1
/tmp/t152x/y
mkcd is a function
関数も ~/.bashrc や ~/.bash_aliases にそのまま書けます。
エイリアスと関数の使い分け
| 比べる点 | エイリアス | 関数 |
|---|---|---|
| 書き方 | alias ll='ls -alF' |
ll() { ls -alF "$@"; } |
| 引数 | 末尾に付くだけ | $1、$2、"$@" で自由に使える |
| 複数行・条件分岐 | 向かない | 書ける |
| スクリプト内 | 既定では展開されない | そのまま使える |
| 確認方法 | alias 名前 |
declare -f 名前 |
| 向いている用途 | オプションを固定する、名前を短くする | 引数を途中に入れる、処理を組み合わせる |
「オプションを足すだけならエイリアス、引数の位置を変えるなら関数」と覚えておけば迷いません。
zshでのalias設定:置き場所は ~/.zshrc
macOS の標準シェルは zsh です。Linux でも zsh を使う人は増えています。zsh ではエイリアスを ~/.zshrc に書きます。書式は bash と同じです。
# ~/.zshrc
alias ll='ls -alF'
alias gs='git status -sb'
# bash と共用したいときは、共通ファイルを読み込む
[ -f ~/.aliases ] && source ~/.aliases
上の50個を ~/.aliases に置き、~/.zshrc から読み込んで zsh 5.9 で確認した結果です。
$ type ll
ll is an alias for ls -alF
$ which gs
gs: aliased to git status -sb
bash と zsh の両方を使うなら、共通のエイリアスを1つのファイル(例:~/.aliases)にまとめ、.bashrc と .zshrc の両方から source すると二重管理を避けられます。zsh は ~/.bash_aliases を自動では読みません。
| 項目 | bash | zsh |
|---|---|---|
| 置き場所 | ~/.bashrc(~/.bash_aliases) |
~/.zshrc |
| 読み直し | source ~/.bashrc |
source ~/.zshrc |
type ll の表示 |
ll is aliased to ... |
ll is an alias for ... |
| グローバルエイリアス | なし | alias -g(行のどこでも展開) |
| 拡張子エイリアス | なし | alias -s(拡張子で開くコマンドを決める) |
zsh 独自の2つも確認しました。
# ~/.zshrc
alias -g G='| grep' # 行の途中でも展開される
alias -s log=cat # .log ファイル名を打つだけで cat する
$ echo abc G b
abc
$ ~/a.log
hi
reload エイリアス(50番)は、zsh では alias reload='source ~/.zshrc' に読み替えてください。
「aliasが反映されない」原因別チェック
ここからは、よくある8つの原因を実際に再現して、表示と直し方を確認します。
原因1:.bashrc に書いたあと source していない
.bashrc はシェルの起動時に1回読まれるだけです。ファイルを書き換えても、開いている端末には自動では反映されません。
source ~/.bashrc # または端末を開き直す
原因2:.bash_profile が .bashrc を読んでいない
SSH で入ったときだけ効かない場合は、これが多いパターンです。ホームディレクトリに ~/.bash_profile があると、ログインシェルは ~/.profile を読まなくなり、結果として .bashrc も読まれません。
再現します。.bashrc にエイリアスの読み込みを書き、.bash_profile には環境変数だけを書いた状態です。
# ~/.bash_profile(直す前)
export EDITOR=vim
$ bash -l -i -c 'type ll' # ログインシェル
bash: type: ll: not found
$ bash -i -c 'type ll' # ログインではない対話シェル
ll is aliased to `ls -alF'
同じホームディレクトリでも、起動のしかたで結果が分かれました。.bash_profile に読み込みを足します。
# ~/.bash_profile(直した後)
export EDITOR=vim
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
$ bash -l -i -c 'type ll'
ll is aliased to `ls -alF'
原因3:クォートの付け忘れ・= の前後の空白
alias now=date "+%F"
alias now = 'date'
実行結果です。
bash: alias: +%F: not found
alias now='date'
bash: alias: =: not found
bash: alias: date: not found
1行目は「now=date を定義し、+%F というエイリアスを表示して」という意味に解釈されています。2行目は now、=、date の3つを「表示して」という意味になります。値全体をシングルクォートで囲み、= の前後は詰めると解決します。
alias now='date "+%F"'
エイリアスの値は、展開されたあとにもう一度コマンドとして読まれます。値の中でシングルクォート(アポストロフィ)を使いたいときは、値そのものが正しいコマンドになるよう、内側もクォートで囲みます。
alias say="echo \"it's ok\""
say
alias say
it's ok
alias say='echo "it'\''s ok"'
原因4:ダブルクォートで変数が定義時に展開される
cd /tmp
alias here1="echo $PWD" # ダブルクォート
alias here2='echo $PWD' # シングルクォート
cd /usr
here1
here2
alias here1 here2
/tmp
/usr
alias here1='echo /tmp'
alias here2='echo $PWD'
ダブルクォートでは、定義した瞬間の値(/tmp)が埋め込まれます。実行するときの値を使いたいなら、シングルクォートで囲みます。迷ったらシングルクォート、と決めておくと扱いやすいです。
原因5:sudo の後ろで効かない
alias ll='ls -alF'
sudo ll /etc/hostname
sudo: ll: command not found
エイリアスが展開されるのはコマンドの先頭の単語だけです。sudo ll では先頭が sudo なので、ll はそのまま sudo に渡り、sudo は ll という実行ファイルを探して見つけられません。
bash のマニュアルには「エイリアスの値の最後の文字が空白なら、次の単語もエイリアス展開の対象になる」という決まりがあります。これを使います。
alias sudo='sudo ' # 末尾に空白
sudo ll /etc/hostname
-rw-r--r-- 1 root root 3 Oct 2 10:17 /etc/hostname
対象になるのは直後の1単語だけです。sudo -u root ll のようにオプションを挟むと、次の単語は -u なので ll は展開されません(実行すると sudo: ll: command not found になりました)。
原因6:シェルスクリプトの中で効かない
#!/bin/bash
alias ll='ls -alF'
ll /etc/hostname
sc1.sh: line 3: ll: command not found
bash は、対話シェルでないときはエイリアスを展開しません。また、スクリプトは別のプロセスで動くので、.bashrc のエイリアスも引き継がれません。スクリプト内で使うには expand_aliases を有効にします。
#!/bin/bash
shopt -s expand_aliases
alias ll='ls -alF'
ll /etc/hostname
-rw-r--r-- 1 root root 3 Oct 2 10:17 /etc/hostname
とはいえ、スクリプトは他の人も読むものです。スクリプトの中では、エイリアスより関数、または省略しないコマンドを書くほうが、読み手にも動作環境にもやさしくなります。
原因7:ssh host コマンド や bash -c で効かない
$ bash -c 'type ll'
bash: line 1: type: ll: not found
ssh host ll や bash -c 'll' は非対話シェルです。Ubuntu の .bashrc は冒頭に次の記述があり、非対話のときはそこで読み込みを終えます。
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
リモートで実行するときは、ssh host 'ls -alF' のようにエイリアスを使わない形で書くのが確実です。
原因8:定義した同じ行・同じ関数の中で使っている
alias hi='echo hello'; hi
hi
bash: hi: command not found
hello
bash は1行をすべて読み終えてから実行します。エイリアスの展開は読む段階で行われるため、同じ行の後半ではまだ定義が存在しません。次の行からは使えます。関数の中で定義した場合も同じ理由で、その関数の中では使えません。定義と使用は別の行に分けましょう。
確認の順番(チェックリスト)
| 順番 | 確認すること | コマンド |
|---|---|---|
| 1 | 今のシェルに定義があるか | alias 名前 / type 名前 |
| 2 | 使っているシェルは何か | echo $0 / echo $SHELL |
| 3 | ファイルに書いた行は正しいか | grep -n 'alias 名前' ~/.bashrc ~/.bash_aliases |
| 4 | 読み直したか | source ~/.bashrc |
| 5 | 読み込み時にエラーが出ていないか | bash -n ~/.bashrc(文法チェック) |
| 6 | ログインシェルか | shopt -q login_shell && echo login |
| 7 | .bash_profile があるか |
ls -la ~/.bash_profile ~/.profile |
| 8 | 対話シェルか | echo $-(i が含まれていれば対話) |
よくある質問
Q. alias と関数、シェルスクリプトはどう使い分けますか? A. オプションを固定したり名前を短くしたりするだけならエイリアス、引数を途中で使ったり複数のコマンドを組み合わせたりするなら関数が向いています。処理が長くなったり、他の人やcronからも使ったりするなら、独立したスクリプトファイルにして PATH の通った場所に置くとよいでしょう。
Q. エイリアスと同じ名前のコマンドがあると、どちらが動きますか?
A. エイリアスが先に選ばれます。bash がコマンドを探す順番は、エイリアス → 関数 → 組み込みコマンド → PATH 上の実行ファイルです。type -a 名前 で候補をすべて確認でき、\名前 や command 名前 でエイリアスを通さずに実行できます。
Q. .bashrc を書き間違えて端末が使いにくくなりました。どう戻せますか?
A. bash --norc で .bashrc を読まずに bash を起動できます。その状態でバックアップ(cp ~/.bashrc.bak ~/.bashrc)を戻すか、エディタで該当行を直してください。編集前に cp ~/.bashrc ~/.bashrc.bak を取り、保存後に bash -n ~/.bashrc で文法を確かめておくと安心です。
Q. 全ユーザーに同じエイリアスを配りたいときは?
A. Ubuntu・Debian 系では /etc/bash.bashrc が対話シェルの起動時に全ユーザーで読まれます。ログインシェル向けには /etc/profile.d/ に .sh ファイルを置く方法もあります。どちらも管理者権限が必要で、利用者全員に影響するため、rm -i のように動作を変えるものは個人の .bashrc に留めるのがおすすめです。
まとめ
alias 名前='コマンド'で定義し、~/.bashrcか~/.bash_aliasesに書いてsource ~/.bashrcで反映します。- 値はシングルクォートで囲み、
=の前後に空白を入れないのが基本です。 - 確認は
type 名前、解除はunalias 名前、一時的に避けるなら\名前かcommand 名前を使います。 - 引数を途中で使いたいときは関数にします。エイリアスは末尾に引数が付くだけです。
- zsh では
~/.zshrcに書きます。共通ファイルを両方からsourceすると管理が1か所で済みます。 - 反映されないときは「source したか」「.bash_profile が .bashrc を読んでいるか」「対話シェルか」の順に確かめます。
sudoの後ろで使うならalias sudo='sudo '、スクリプト内で使うならshopt -s expand_aliasesです。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Linux alias設定と.bashrcの書き方|おすすめエイリアス50選」
株式会社RJCでは、Linuxのalias設定や.bashrcの書き方を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。