linuxのlsコマンドについてまとめる

今回のお題
-
タイトルの通り、LinuxOSの`ls`コマンドについてまとめます。

初心者用（自分含む）です。

基本
-
オプションなしの場合には、カレントディレクトリの中身を一覧表示。

```shell
[root@1db2f41f69b3 /]# ls
# 結果
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
```

ディレクトリの指定
-

ディレクトリまでのパスを指定することで、カレントディレクトリではなくそのディレクトリの中身を表示することも可能。

```shell
[root@1db2f41f69b3 /]# ls var/www/html/
# 結果
test.php
```

オプション達
-

```shell
# . で始まるディレクトリやファイルも含めて表示
[root@1db2f41f69b3 /]# ls -a
.   .dockerenv         bin  etc   lib    media  opt   root  sbin  sys  usr
..  anaconda-post.log  dev  home  lib64  mnt    proc  run   srv   tmp  var
```
```shell
# 詳細表示
[root@1db2f41f69b3 /]# ls -l
# 結果
total 56
-rw-r--r--   1 root root 12114 Nov 13  2020 anaconda-post.log
lrwxrwxrwx   1 root root     7 Nov 13  2020 bin -> usr/bin
drwxr-xr-x   5 root root   360 Nov 27 01:47 dev
drwxr-xr-x   1 root root  4096 Nov 27 01:47 etc
drwxr-xr-x   2 root root  4096 Apr 11  2018 home
lrwxrwxrwx   1 root root     7 Nov 13  2020 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Nov 13  2020 lib64 -> usr/lib64
drwxr-xr-x   2 root root  4096 Apr 11  2018 media
drwxr-xr-x   2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x   2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 176 root root     0 Nov 27 01:47 proc
dr-xr-x---   1 root root  4096 Nov 27 01:49 root
drwxr-xr-x  11 root root  4096 Nov 13  2020 run
lrwxrwxrwx   1 root root     8 Nov 13  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x  13 root root     0 Nov 27 01:47 sys
drwxrwxrwt   7 root root  4096 Nov 13  2020 tmp
drwxr-xr-x  13 root root  4096 Nov 13  2020 usr
drwxr-xr-x   1 root root  4096 Nov 26 06:23 var
```
ログの意味については後述。

```shell
# 更新日時順に表示
[root@1db2f41f69b3 /]# ls -t
root  proc  etc  anaconda-post.log  tmp  lib    sbin  home   mnt  srv
dev   sys   var  run                bin  lib64  usr   media  opt
```
```shell
# ファイル・ディレクトリの種類を区別して表示
[root@1db2f41f69b3 /]# ls -F
anaconda-post.log  dev/  home/  lib64@  mnt/  proc/  run/   srv/  tmp/  var/
bin@               etc/  lib@   media/  opt/  root/  sbin@  sys/  usr/
```

`-F`オプションにより末尾に付加される記号の意味については以下を参照。

| 記号 | 意味 |
|:-:|:-:|
| @ | シンボリックリンク |
| / | ディレクトリ |
| * | 実行可能ファイル(.exe)など |

```shell
# サブディレクトリの中身も含めて表示
[root@1db2f41f69b3 /]# ls -R
# 結果（一部抜粋）
./usr/lib64/python2.7/lib2to3/fixes:
__init__.py         fix_getcwdu.py             fix_metaclass.py     fix_repr.py
```

オプションについては複数を組み合わせることも可能。

```shell
[root@1db2f41f69b3 /]# ls -F -R
# 結果（一部抜粋)
./usr/lib64/python2.7/site-packages:
README                   libxml2.pyo
_dbus_bindings.so*       libxml2mod.so*
_dbus_glib_bindings.so*  lzma.so*
_sqlitecache.so*         pycurl-7.19.0-py2.7.egg-info
curl/                    pycurl.so*
dbus/                    pygobject-3.22.0-py2.7-linux-x86_64.egg-info
```

ls -lの出力結果の見方
-
`ls -l`コマンドの結果は以下のようになっている。

```shell
# 結果の一例
drwxr-xr-x   5 root root   360 Nov 27 01:47 dev
# 10桁の英字（詳細は以下）" "ハードリンクの数" "作成者" "所属グループ" "容量" "最終更新日時" "プログラム名(リンクの場合はリンク先も)"
```

最初の10桁のアルファベットはプログラムの種類とユーザーごとのアクセス権を表している。

先頭の1文字はプログラムの種類であり、ファイルなら`-`, ディレクトリなら`d`, リンクなら`l`になる。

また、その後の9文字については、作成者、グループユーザー、その他のユーザーのアクセス権限を表す記号（以下参照）が3文字ごとに繰り返されており、例えば上記例の`drwxr-xr-x`であれば

```yml
プログラムの種類: ディレクトリ
作成者の実行権限: 読み込み・書き込み・実行全て可能
グループの権限: 読み込みと実行は可能。書き込みは不可。
その他のユーザーの権限: 読み込みと実行は可能。書き込みは不可。
```
となる。

【参考：アクセス権限を表す記号】
| 記号 | 意味 |
|:-:|:-:|
| r | 読み込み可能 |
| w | 書き込み可能 |
| x | 実行可能 |
| - | 権限なし |