[LPIC勉強]lsコマンドについての勉強記録(よく使うオプション編)

## はじめに
今回はLinuxを使う人であればだれでも知っているだろうコマンドのうち、
lsコマンドについてよく使うオプションを備忘録のように記載いたします。

```
#実行環境
Red Hat Enterprise Linux release 8.2 (Ootpa)
4.18.0-193.el8.x86_64
```
## lsコマンドはなにができる？
lsコマンドはファイル・ディレクトリに関する情報を一覧で表示させることができます。
例えば、ファイルの更新時刻を確認したり、対象のディレクトリの下にどんなファイルが存在するかなどを確認できます。

## lsコマンドの書式
```
ls [オプション] [ファイル名orディレクトリ名]
```

## lsコマンドのバージョン情報の事前確認
以降、オプションの説明をしていきますが、その前に今回使用するlsコマンドのバージョンは下記になります。

#### --version オプション
lsコマンドのバージョン、著作権、manページの著作者の情報を表示する。
```
# ls --version
ls (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

作者 Richard M. Stallman および David MacKenzie。
```

## よく使うlsコマンドのオプション
以下では自分がよく使用するlsコマンドのオプションについて記載していきます。

#### -l オプション
ファイルまたはディレクトリの詳細な情報を表示します。

まず、lsコマンドをオプションを使用せずにルートディレクトリに対して、実行してみます。
※ルートディレクトリはディレクトリがいっぱいある中の最初のディレクトリです。
　「/」で表します。
```
# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
```
上記のようにルートディレクトリ配下にある次のディレクトリの名前が横並びで表示されます。

これを「-l」オプションを使用してみると下記のようになります。
```
# ls -l
合計 16
lrwxrwxrwx.   1 root root    7  8月 12  2018 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096  4月 17 20:17 boot
drwxr-xr-x.  20 root root 3200  5月 17 17:58 dev
drwxr-xr-x.  80 root root 8192  4月 17 21:13 etc
drwxr-xr-x.   3 root root   19  4月 17 21:12 home
lrwxrwxrwx.   1 root root    7  8月 12  2018 lib -> usr/lib
lrwxrwxrwx.   1 root root    9  8月 12  2018 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6  8月 12  2018 media
drwxr-xr-x.   3 root root   18  4月 17 20:14 mnt
drwxr-xr-x.   2 root root    6  8月 12  2018 opt
dr-xr-xr-x. 202 root root    0  5月 17 17:58 proc
dr-xr-x---.   2 root root  167  5月  9 06:24 root
drwxr-xr-x.  24 root root  700  5月 17 17:58 run
lrwxrwxrwx.   1 root root    8  8月 12  2018 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6  8月 12  2018 srv
dr-xr-xr-x.  13 root root    0  5月 17 17:58 sys
drwxrwxrwt.   4 root root  119  5月 17 18:13 tmp
drwxr-xr-x.  12 root root  144  4月 17 20:13 usr
drwxr-xr-x.  20 root root  278  4月 17 20:20 var
```
ディレクトリ数やパーミッション、サイズ、更新日が表示されるようになりました。
また、横並びだったファイル名orディレクトリ名が縦並びになるので見やすくなると個人的には思っています。

なお、ただ縦並びにしたいだけであれば、「-1」オプションを使用すると以下のようにファイル名orディレクトリ名だけが縦並びに表示することができます。
```
# ls -1 /
bin
boot
dev
etc
home
<省略>
```
「-1」オプションはシェルスクリプトでファイル名だけ抽出してリスト化したいなぁと思ったときに便利だった記憶があり、記載させていただきました。


#### -dオプション (--directory オプション)
このオプションを使用すると引数にしたファイルorディレクトリ自体を表示することができます。
```
# ls -d /
/
```

上記では引数に指定した「/」のディレクトリ名のみを表示することが出来ましたが、
詳細情報を確認することができないため、通常は下記のように「-l」と併用して使用することが多いです。
```
# ls -ld /
dr-xr-xr-x. 17 root root 224  4月 17 20:13 /
```
「-d」オプションが存在しなければ一番上の場所にいるファイルやディレクトリの情報を確認することができないので、意外とありがたいと感じるオプションです。

#### -h オプション (--human-readable オプション)
通常、「-l」オプションを使用した場合、ファイルorディレクトリのファイルサイズはbytes(バイト)表記で表示されます。bytes(バイト)表記だと詳細なサイズを確認することはできますが、通常そこまで詳細なファイルサイズが必要となることは多くありません。
その場合、サイズを確認したい場合に「-h」オプションを使用することで、KB(キロバイト)やMB(メガバイト)、GB(ギガバイト)などの分かりやすいサイズ表示にすることができます。
ただし、使用する場合は、「-l」オプションなどと併用しないとそもそもサイズを表示することができないので注意が必要です。

```
# -hオプションのみでlsコマンドを実行した場合
# ls -h /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# -hオプションを-lオプションと併用した場合のサイズ表示
# ls -lh /
lrwxrwxrwx.   1 root root    7  8月 12  2018 bin -> usr/bin
dr-xr-xr-x.   5 root root 4.0K  4月 17 20:17 boot
drwxr-xr-x.  20 root root 3.2K  5月 17 17:58 dev
drwxr-xr-x.  80 root root 8.0K  4月 17 21:13 etc
drwxr-xr-x.   3 root root   19  4月 17 21:12 home
lrwxrwxrwx.   1 root root    7  8月 12  2018 lib -> usr/lib
lrwxrwxrwx.   1 root root    9  8月 12  2018 lib64 -> usr/lib64
<省略>

# -hオプションを使用しない場合のサイズ表示
# ls -l /
lrwxrwxrwx.   1 root root    7  8月 12  2018 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096  4月 17 20:17 boot
drwxr-xr-x.  20 root root 3200  5月 17 17:58 dev
drwxr-xr-x.  80 root root 8192  4月 17 21:13 etc
drwxr-xr-x.   3 root root   19  4月 17 21:12 home
lrwxrwxrwx.   1 root root    7  8月 12  2018 lib -> usr/lib
lrwxrwxrwx.   1 root root    9  8月 12  2018 lib64 -> usr/lib64
<省略>
```
「K」=キロバイト、「M」=メガバイト、「G」=ギガバイトで表示されます。

#### -a オプション(--all オプション)
このオプションでは、「.」から始まるファイルも表示することができます。
通常、「.」は自分が今いるディレクトリ、「..」は一つ上の場所にあるディレクトリとして使用されているため、lsコマンド単体では表示されることはありません。
しかし「-a」オプションを使用すると、それらも含めて表示することができます。
また、ファイルorディレクトリの先頭に「.」を使用することで、隠しファイルつまり通常では表示することができないファイルorディレクトリを存在させることができます。
通常自分の用途としてはこれをの情報を表示するために「-a」オプションを使用します。
なお、デフォルトでは「/」配下に隠しディレクトリは存在しないため、下記では事前に「.test」ディレクトリを作成したものを表示しています。
```
# -a オプションを使用しない場合
# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# -a オプションを使用した場合
# ls -a /
.  ..  .test  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
```
上記のように隠しファイルを含めたディレクトリ一覧情報が表示されました。

なお、自分のディレクトリ(カレントディレクトリ)「.」と一つ上の場所のディレクトリ「..」を表示させたくない場合は「-A」オプションを使用します。
```
# ls -A /
.test  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
```
上記のように隠しディレクトリを含む情報のみを表示させることができます。

## まとめ
今回記載したlsコマンドのオプションをまとめると下記になります。
|オプション名|内容|
|:---|:---|
|--version|コマンドのバージョン、著作権、著作者等の情報を表示|
|-l|引数に指定したファイルorディレクトリ配下の詳細情報を表示|
|-1|ファイルorディレクトリ名だけを縦並びに表示|
|-d|引数に指定したファイルorディレクトリの詳細情報を表示|
|-h|ファイルorディレクトリのサイズを見やすい単位で表示|
|-a|「.」、「..」および隠しファイル(ディレクトリ)の詳細情報も表示|
|-A|「.」、「..」を除いた隠しファイル(ディレクトリ)の情報も表示|


## 終わりに
今回は自分がよく使用するlsコマンドのオプションを書きました。
manコマンドや--helpでコマンド説明を表示させると
lsコマンドは長い文章が出てくるので一瞬読むのを躊躇しそうですが、
実際には上記ぐらいしか仕事で使ってないなと思い、本記事を書きました。
あまり使わないけどlsコマンドにはこんなオプションがあるよみたいなのは
勉強のため別の記事でまとめたいと思います。

## 参考文献
「man -a ls」コマンドでオプションをLinuxマシン内で参照しました。