【Linux】lsコマンド

いまさらですが、lsコマンドについてまとめます。

#lsコマンド
list segmentsの略。
ファイルやディレクトリの情報を表示する。

```bash
$ ls
a.txt  b.txt  c.txt  test  test2
```
上記コマンドでカレントディレクトリ内のファイルの一覧を表示する。


###ls -a : すべてのファイルやディレクトリを表示する
```bash
$ ls -a 
.  ..  a.txt  b.txt  c.txt  test  test2
```

`-a`オプションをつけることで、ピリオド始まりのファイルやフォルダも表示される。

`-A`オプションを付けると、カレントディレクトリ(.)と親ディレクトリ(..)以外のピリオド始まりのファイルやフォルダも表示される。

###ls -l：ファイルの詳細を表示する 
```bash
$ ls -l
-rw-r--r-- 1 root root   11 Dec 23 13:11 a.txt
-rw-r--r-- 1 root root   36 Dec 23 13:12 b.txt
-rw-r--r-- 1 root root    0 Dec 23 13:07 c.txt
drwxr-xr-x 2 root root 4096 Dec 23 13:14 test
drwxr-xr-x 2 root root 4096 Dec 23 13:15 test2
```

| 項目 | 説明 |
|:--|:--|
| -rw-r--r-- | ファイルの種類(一番左の一文字) + パーミッション |
| 1 | ハードリンクの数 |
| root root | 所有者(左)と所有グループ(右) |
| 12030 | ファイルサイズ |
| Oct  6 19:15 | タイムスタンプ |
| test.txt | ファイル名 |

ファイルの種類として通常使われるのは以下の3つです。
- : ファイル
d : ディレクトリ
l : シンボリックリンク

###ls -F：名前の後ろにファイル識別子を付ける 
```bash
$ ls -F
a.txt  b.txt  c.txt  test/  test2/　
```
ファイル識別子は以下のようになる。
/ : ディレクトリ
@ : シンボリックリンク
* : 実行可能形式ファイル(実行可能パーミッションがついているもの)

###ls -d：ディレクトリに含まれているものの情報ではなく、ディレクトリ自体の情報を表示する 
```bash
$ ls -ld
drwxr-xr-x 4 root root 4096 Dec 23 13:15 .
```

###ls -i：iノード番号も含んだ情報を表示する 
```bash
$ ls -li
14724 -rw-r--r-- 1 root root   11 Dec 23 13:11 a.txt
14720 -rw-r--r-- 1 root root   36 Dec 23 13:12 b.txt
14722 -rw-r--r-- 1 root root    0 Dec 23 13:07 c.txt
 6103 drwxr-xr-x 2 root root 4096 Dec 23 13:14 test
14721 drwxr-xr-x 2 root root 4096 Dec 23 13:15 test2
```

###ls -1：情報を1行に1件表示する 
```bash
$ ls -1
a.txt
b.txt
c.txt
test
test2
```

通常は横1列に表示されますが、縦に1つずつ表示されます。

###ls -r：逆順に表示する 
```bash
$ ls
a.txt  b.txt  c.txt  test  test2
$ ls -r
test2  test  c.txt  b.txt  a.txt
```

###ls -R：再帰的にディレクトリの中身も表示する 
```bash
$ ls -R
.:
a.txt  b.txt  c.txt  test  test2

./test:
test.txt  test1.txt

./test2:
```

###ls -t：更新時間順に情報を表示する 
```bash
$ ls -lt
drwxr-xr-x 2 root root 4096 Dec 23 13:24 test
drwxr-xr-x 2 root root 4096 Dec 23 13:15 test2
-rw-r--r-- 1 root root   36 Dec 23 13:12 b.txt
-rw-r--r-- 1 root root   11 Dec 23 13:11 a.txt
-rw-r--r-- 1 root root    0 Dec 23 13:07 c.txt
```

###ls -S：ファイルサイズ順に情報を表示する 
```bash
$ ls -lS
drwxr-xr-x 2 root root 4096 Dec 23 13:24 test
drwxr-xr-x 2 root root 4096 Dec 23 13:15 test2
-rw-r--r-- 1 root root   36 Dec 23 13:12 b.txt
-rw-r--r-- 1 root root   11 Dec 23 13:11 a.txt
-rw-r--r-- 1 root root    0 Dec 23 13:07 c.txt
```

###ls -X：拡張子のアルファベット順に情報を表示する 
```bash
$ ls -l
-rw-r--r-- 1 root root   11 Dec 23 13:11 a.txt
-rw-r--r-- 1 root root   36 Dec 23 13:12 b.txt
-rw-r--r-- 1 root root    0 Dec 23 13:07 c.txt
drwxr-xr-x 2 root root 4096 Dec 23 13:24 test
drwxr-xr-x 2 root root 4096 Dec 23 13:15 test2
$ ls -lX
drwxr-xr-x 2 root root 4096 Dec 23 13:24 test
drwxr-xr-x 2 root root 4096 Dec 23 13:15 test2
-rw-r--r-- 1 root root   11 Dec 23 13:11 a.txt
-rw-r--r-- 1 root root   36 Dec 23 13:12 b.txt
-rw-r--r-- 1 root root    0 Dec 23 13:07 c.txt
```


###ls -x：縦方向ではなく横方向に情報を並べる 
```bash
$ ls
a.txt  test
b.txt  test2
c.txt
$ ls -x
a.txt  b.txt
c.txt  test
test2
```

###ls -m：情報をカンマ区切りで表示する 
```bash
$ ls -m
a.txt, b.txt, c.txt, test, test2
```

###ls -Q：情報をダブルクォートで囲んで表示する 
```bash
$ ls -Q
"a.txt"  "b.txt"  "c.txt"  "test"  "test2"
```

###ls -h：ファイルサイズの形式をわかりやすい単位で表示する 
```bash
$ ls -l
-rw-r--r-- 1 root root   11 Dec 23 13:11 a.txt
-rw-r--r-- 1 root root   36 Dec 23 13:12 b.txt
-rw-r--r-- 1 root root    0 Dec 23 13:07 c.txt
drwxr-xr-x 2 root root 4096 Dec 23 13:24 test
drwxr-xr-x 2 root root 4096 Dec 23 13:15 test2
$ ls -lh
-rw-r--r-- 1 root root   11 Dec 23 13:11 a.txt
-rw-r--r-- 1 root root   36 Dec 23 13:12 b.txt
-rw-r--r-- 1 root root    0 Dec 23 13:07 c.txt
drwxr-xr-x 2 root root 4.0K Dec 23 13:24 test
drwxr-xr-x 2 root root 4.0K Dec 23 13:15 test2
```

###ls --ignore=PATTERN：PATTERNに一致する情報以外の情報を表示する 
```bash
$ ls
a.txt  b.txt  c.txt  test  test2
$ ls --ignore=*.txt
test  test2
```