ターミナルの便利機能「エイリアス」をサクッと登録してみる

ターミナル(シェル)のエイリアス登録という便利機能をご存知でしょうか？？
エイリアスとはショートカットのようなもので、
いつものコマンドの短縮コマンドを登録しておくことができます。

Linuxのコマンド自体は短いものが多いですが、
よく使うオプションまで含めて登録してしまうと**とても便利**です。


#サクッとやってみる
##例①：常にディレクトリの中身をわかりやすく表示したい
例えばディレクトリの中身を表示する**lsコマンド**[^1]には`-F`というオプションがあります。

これはファイル種別を表示するオプションです。

`-F`オプションはよく使うので、ターミナルを開いて

```sh
$ alias ls='ls -F'
```
を実行し、`$ ls`としてエイリアスを登録すると..

```shell
$ ls
app/            bootstrap/      composer.lock   database/       phpunit.xml     readme.md       routes/         storage/        vendor/
artisan         composer.json   config/         package.json    public/         resources/      server.php      tests/          webpack.mix.js
```
という感じにディレクトリ名には`/`が表示され、
`$ ls`を実行しただけで、ファイルなのかディレクトリなのか分かりやすく表示することができるようになりました。
(このほうが見やすいですよね..?)

※追記
コマンドで登録した場合、PCをシャットダウンするとエイリアスがリセットされるので、
永続化する方法も後述しています。

##例②：隠しファイルを簡単に表示したい

`$ ls -a`は隠しファイルも含めてディレクトリ内の全てのファイルとディレクトリを表示するオプションです。
こちらもよく使うので、

```sh
$ alias la='ls -a'
```
のように今度は`$ la`としてエイリアスを登録すると..

```shell
$ la
./              .env*           .gitattributes  app/            composer.json   database/       public/         routes/         tests/
../             .env.example    .gitignore      artisan         composer.lock   package.json    readme.md       server.php      vendor/
.editorconfig   .git/           .styleci.yml    bootstrap/      config/         phpunit.xml     resources/      storage/        webpack.mix.js
```
というように、`$ la`を実行するだけで.envファイルや.gitディレクトリなどの隠しファイルが表示されるようになりました。

##登録したエイリアスを削除したい
登録したエイリアスを削除するには、

```sh
$ unalias ls
$ unalias la
```
のように登録したエイリアス名を引数にして、`$ unalias`というコマンドを実行すればエイリアスの登録が削除されます。

##登録したエイリアスを一時的に無視したい
エイリアスの登録は削除したくないけど、
一時的に解除して元のコマンドを実行したい場合は、コマンドの前に`\`を付けて実行するだけでOKです。

```sh
$ \ls
app             bootstrap       composer.lock   database        phpunit.xml     readme.md       routes          storage         vendor
artisan         composer.json   config          package.json    public          resources       server.php      tests           webpack.mix.js
```
普通に`$ ls`を実行したときと同じ結果になりました。(ディレクトリ名に`/`が表示されない)
<br>
蛇足ですがこの`\ls`は、

```sh
$ command ls
#または
$ /bin/ls
```
のようにしても同様です。

##補足：シャットダウンすると消えてしまう..永続化したい場合
先程までのようにターミナルのコマンドでサクッと登録もできるのですが、
<font color='crimson'>留意点としてPCをシャットダウンせっかく登録したエイリアスが消えて無くなってしまいます。。</font>

しかしviエディタ等で設定ファイルを直接編集してあげれば、
エイリアスを永続的にマシンに登録することもできます。



ログインシェルがbash(2019年秋以前のMacの標準)なら

```sh
$ vi ~/.bashrc
```
で、
ログインシェルがzsh(2019年秋以降のMacの標準)なら

```sh
% vi ~/.zshrc
```
で編集することができます。

そこに、

```sh
# User specific aliases and functions
alias ls='ls -F'
alias la='ls -a'
```
のように追記して保存した後、

```sh
$ source ~/.bashrc
#または
$source ~/.zshrc
```
で反映させてあげればOKです。(これ自身をエイリアス登録しても良いかも)

####viエディタ補足
「`vi`って何？」という方に簡単に使い方だけざっくり補足すると、、

1. 開いた時はコマンドモード(移動できるモード)になっています。
1. `h, j, k, l`キーが、それぞれ十字キーの左上下右として使えます。(十字キーも使えるけど)
1. これで移動して、`i`キーで編集モード(文字入力できるモード)にできます。
1. 普通に打ち込んで、編集が完了したら`esc`キーを押して、最初の移動のモードに戻します。
1. `:wq`と打ち込んでEnterで、保存して終了することができます。
1. 保存したくない場合は`:q!`と打ち込むんでEnterで、保存せずに終了することができます。


##おまけ
同様に、基本コマンドでエイリアス登録しておくと便利なオプションを少し紹介しておきます。

```sh
# ディレクトリ内の詳細を表示する
alias ll='ls -l'

# rmコマンドで削除前に常に確認するようにする
alias rm='rm -i'

# cpコマンドで上書き前に常に確認するようにする
alias cp='cp -i'

# mvコマンドで上書き前に常に確認するようにする
alias mv='mv -i'

# mkdirコマンドで深い階層のディレクトリも一気に作成できるようにする
alias mkdir='mkdir -p'
```
こんな感じで、
間違えたらまずいコマンドは`-i`オプションで常に確認するようにすると安全です。

また最後のmkdir -pが分かりづらいので例を示すと、
例えば`/parent`や`/child`というディレクトリが存在しない状態で、
「parent/child/grandchild」というディレクトリ構成を一気に作りたい場合。

普通に、

```sh
$ mkdir parent/child/grandchild
```
と実行すると「そんなディレクトリは存在しないよ〜」というエラーになるかと思います。

この場合は`-p`オプションを付けて、

```sh
$ mkdir -p parent/child/grandchild
```
とするとエラーにならずに一撃で「parent/child/grandchild」という構成を作れます。
<br>
なので、常に`-p`オプション付きで実行されるように

```sh
alias mkdir='mkdir -p'
```
でエイリアス登録してしまうと便利ですね。
<br>
以上、初歩的な記事ではありますが、
良かったらLGTMもしていただけると今後の励みになります(^_^)

[^1]: 以降では、`$ コマンド名`で実行するコマンドを示します。