aliasというコマンドで、コマンドにエイリアス(別名)をつけることが出来るようになります。 よく使う長いコマンドに短い別名をつけて呼び出せるようにしておくととても便利です。 また、必ずつけるべきオプションの付け忘れを防ぐ事もできるなど、使いどころは結構あります。
例えば、CentOSのrootユーザにはデフォルトで、以下のようなエイリアスが登録されています。-iオプションは実行時にYes/Noの確認プロンプトを表示するというオプションです。 rootユーザはシステム全体に影響するような大切なデータを簡単に削除できてしまうので、このような確認プロンプトを表示するようにしてあるようです。
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
現在設定されているエイリアスのリストはaliasコマンドを引数なしで実行すると表示されます。
$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
では、ここにlhという別名を"ls -lha"につけてみます。
$ lh
bash: lh: コマンドが見つかりません <= aliasはありません
$ alias lh='ls -lha' <= aliasをつけます
$ alias <= aliasを確認します
alias l.='ls -d .* --color=auto'
alias lh='ls -lha'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
$ lh <= lhを実行します
合計 8.0K
drwxrwxr-x 2 quuzu quuzu 4.0K 12月 10 08:45 2013 .
drwxrwxr-x 4 quuzu quuzu 4.0K 12月 10 08:45 2013 ..
通常aliasの設定はターミナルから毎回設定するのではなく、.bashrcや.bash_profileなどの個人の設定ファイルにコマンドを記載して、ログインの度に毎回設定されるようにしておきます。
次に不要なエイリアスの削除方法です。エイリアスの削除にはunaliasを使用します。
$ unalias lh <= aliasを解除します。
$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
$ lh
bash: lh: コマンドが見つかりません
これで、aliasの削除ができています。
また、エイリアスを一時的に回避したい場合があります。 たとえば、rootユーザでは、以下のようにcpに-iオプションがついたものがaliasに登録されています。
alias cp='cp -i'
この時の-iオプションはコピー先にすでにファイルがあって、上書きする場合に確認を行ってくれます。ただ、毎回YES/NOを確認されては、あえて大量にファイルを上書きコピーしたいといった場合には不向きです。しかし、別名で元のコマンドが上書きされているため、オプションなしのcpの呼び方がわかりません。そのためだけにunaliasして後で戻しておくというのもなんだか面倒です。
こういう時には、コマンド(ここではcp)をフルパスで実行するとエイリアスを回避します。下で試してみます。
# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
rootユーザにはcpが"cp -i"として登録されています。このとき、上書きが発生するようなコピーをおこなうとyes/noを聞かれます。
# touch test
# touch test-copy
# cp test test-copy
cp: `test-copy' を上書きしてもよろしいですか(yes/no)? yes
whichコマンドでフルパスを調べます。
# which cp
alias cp='cp -i'
/bin/cp
cpコマンドは/bin/cpにあることが分かったので、これをフルパスで実行します。
# /bin/cp test test-copy
(なにも表示されずにコピーされます)