Linux & Mac　ファイルタイプ一覧

# ファイルタイプは全部で7種類

ふと、ファイルタイプは全部でどれだけあるのか気になったので調べてみました。
macで用意されているファイルタイプを調べましたが、出てこなかったので、情報の多かったlinuxでまとめます。

おそらくmacでも同じ設定だと思います。

abb | description | macでの表記
--- |--- | ---
\- | regular file | regular file
d | directory |directory
c | character device file | character special
b | block device file | block special
s | local socket file | socket
p | named pipe | FIFO
l | symbolic link | symbolic link

これらの略称はfindコマンドの-typeオプションでも指定できます！

Linuxカーネルは/(スラッシュ)という名前のルートディレクトリを根とする単一のディレクトリ階層ですべてのファイルをまとめています。


## Regular file　(通常ファイル)

通常のファイルは、Linuxシステムで見られる最も一般的なファイルタイプです。
テキストファイル、画像、バイナリファイル、共有ライブラリなど、さまざまなファイルすべてを管理します。

lsコマンドでは`-`で表示されます。

```
$ touch linuxcareer.com
$ ls -ld linuxcareer.com 
-rw-rw-r-- 1 lubos lubos 0 Jan 10 12:52 linuxcareer.com
```

アプリケーションプログラムは、テキストファイルとバイナリファイルを区別することが多い。カーネルはその2つを区別しない。

ファイル|説明
-|-
テキストファイル|ASCII文字またはUnicode文字のみを含んだ通常ファイルである。
バイナリファイル|テキストファイル以外のすべて

## Directory　(ディレクトリ)

ディレクトリは、Linuxで2番目に一般的なファイルタイプです。

lsコマンドでは`d`で表示されます。

```
$ mkdir FileTypes
$ ls -ld FileTypes/
drwxrwxr-x 2 lubos lubos 4096 Jan 10 13:14 FileTypes/
```

リンクの配列からなるファイルであり、各リンクはファイル名をファイルにマッピングします。マップされるファイルは他のディレクトリの場合もあります。各ディレクトリは少なくとも2つのエントリを含みます。.(dot)はそのディレクトリ自身へのリンクであり、..(dot dot)はディレクトリ階層における親ディレクトリへのリンクです。


## Character device

> データの入出力をバイト（1文字）単位で扱うデバイスです。データの読み出しや書き込みが一方向（シーケンシャル・アクセス）であり，基本的に一度読み書きしたデータを後戻りして再び読み書きすることはできません。キャラクタ・デバイスは，キーボードやマウス，シリアル・インタフェースなどです。

[キャラクタ・デバイス | 日経クロステック（xTECH）](https://xtech.nikkei.com/it/article/Keyword/20081128/320380/)

```
$ ls -ld /dev/vmmon 
crw------- 1 root root 10, 165 Jan  4 10:13 /dev/vmmon
```

## Block Device

主にハードドライブ、メモリなどのハードウェアを管理します。

> そのほかのデバイスとして，ある大きさ（ブロック）単位でランダムに読み出せる「ブロック・デバイス」もあります。ブロック・デバイスは，メモリーやハード・ディスク，フロッピ・ディスクなどです。

[キャラクタ・デバイス | 日経クロステック（xTECH）](https://xtech.nikkei.com/it/article/Keyword/20081128/320380/)

```
$ ls -ld /dev/disk1
brw-r-----   1 root  operator         1,   3 12  9 12:29 disk1
```

## Local domain sockets (ソケット)

ローカルドメインソケットは、プロセス間の通信に使用されます。ネットワークを介して、他のプロセスと通信するために用いられるファイルです。
通常、これらはXウィンドウやsyslogなどのサービスで使用されます。

> LinuxなどのUNIX系OSは、各種デバイスの入出力にデバイスファイルというインターフェースを利用するため、一般のファイルを読み書きするのと同じ手順で周辺機器を操作できる。ところが、プロセス同士がネットワーク経由で通信するときには、ファイル・インターフェースを拡張した「ソケット」というインターフェースが必要になる。通常インターネットで利用しているソケット通信（INETドメインソケット通信）とは異なり、ネットワーク経由ではないローカルマシン上のプロセスが利用するソケットが、UNIXドメインソケットである。

[UNIXドメインソケット | IT用語辞典 | 大塚商会](https://www.otsuka-shokai.co.jp/words/unix-domain-socket.html)

```
$ ls -ld /dev/log
srw-rw-rw- 1 root root 0 Jan  4 10:13 /dev/log
```

## Named Pipes

ローカルソケットと同様に、名前付きパイプは2つのローカルプロセス間の通信を可能にします。
これらは、mknodコマンドで作成し、rmコマンドで削除できます。

> 名前付きパイプとは、同じコンピュータ上で動作しているプログラム同士がデータをやり取りするプロセス間通信（IPC）の有力な方式の一つ。UNIX系OSでよく利用される。

[名前付きパイプ（ネームドパイプ）とは - IT用語辞典 e-Words](http://e-words.jp/w/%E5%90%8D%E5%89%8D%E4%BB%98%E3%81%8D%E3%83%91%E3%82%A4%E3%83%97.html)

## Symbolic Links

シンボリックリンクを使用すると、管理者はファイルまたはディレクトリに複数のIDを割り当てることができます。
シンボリックリンクは、元のファイルへのポインタと考えることができます。

シンボリックリンクには次の2つのタイプがあります。

- hard links
- soft links

ハードリンクとソフトリンクの違いは、ソフトリンクは参照としてファイル名を使用し、ハードリンクは元のファイルへの直接参照を使用することです。
さらに、ハードリンクはファイルシステムとパーティションを横断できません。
シンボリックソフトリンクを作成するには、ln-sコマンドを使用できます。


> 「ソフトリンク」は削除を指示するとシンボリックリンクが削除され、本体は影響を受けない。別の装置やファイルシステムにある対象を参照したり、存在しない（か存在するか不明な）対象に対しても作成できる。本体が元の場所から移動したり改名すると参照できなくなる。

> 「ハードリンク」は、一つのファイルやディレクトリに対してファイルシステム内で複数の名称（パス）を設定することができる。ハードリンクはリンクファイルを介さず直接本体を指し示すため本体の削除ができ、本体を移動・改名しても参照は維持されるが、同じファイルシステム上に現に存在するファイルにしか設定できない。

[シンボリックリンク（ソフトリンク）とは - IT用語辞典 e-Words](http://e-words.jp/w/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF.html)

```
$ echo file1 > file1
$ ln -s file1 file2
$ cat file2 
file1
$ ls -ld file2 
lrwxrwxrwx 1 lubos lubos 5 Jan 10 14:42 file2 -> file1
```

シンボリックリンクを削除するには、unlinkまたはrmコマンドを使用できます。

## 参考

[Identifying File types in Linux - LinuxConfig.org](https://linuxconfig.org/identifying-file-types-in-linux)