LPIC・ファイルの管理

個人的なメモです。

##ファイルのパーミッション

###☆パーミッション

・ファイルやディレクトリに「誰に」「どのような操作を」許可するのかをそれぞれ個別に設定すること
・設定されたパーミッションは、**「ls－l」コマンド**で調べることができる

**(例)「ls－l」コマンド実行**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/59597ebc-a961-e888-f313-8e14ab8bfe77.png)
・上記のように「ls－l」コマンドを実行すると、パーミッション(アクセス権)、ファイルの所有者、所有するグループ名などが表示される

####パーミッションの内容

パーミッションで表示される内容には、主に以下のような種類がある

**(例)パーミッション(アクセス権)**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/6f47c6df-2dbb-ae92-844e-cc202f5c2cf9.png)

**①ファイルの種別**･･･ファイルの種類を表すもので、パーミッションそのものではない。主な種類は以下

**(表)ファイルの種別**

| 主な種類 | 説明 | 
|:-----------:|:------------:|
| - | 通常ファイル | 
| d | ディレクトリ | 
| l | シンボリックリンク | 

**②ユーザー(所有者)のパーミッション(アクセス権)**
**③グループのパーミッション(アクセス権)**
**④その他のユーザーのパーミッション(アクセス権)**

どのような操作を許可するのかを表すのに、**「r」「w」「x」**を使用する。これらは、ファイルかディレクトリかによって意味が異なる

**(表)「r」「w」「x」**

| 種類 | ファイルの場合 | ディレクトリの場合 | 
|:-----------:|:------------:|:------------:|
| 読み取り権(r) | ファイルの内容を読むことができる。more,cat,cpなどが使用可能 | ディレクトリの内容を表示することができる。lsなどが実行可能 | 
| 書き込み権(w) | ファイルの内容を編集することができる。viなどが使用可能　| ディレクトリ内のファイルやディレクトリを作成や削除する子tができる。mkdir,touch,rmなどが使用可能 | 
| 実行権(x) | 実行ファイルとして実行ができる | ディレクトリへ移動することができる。cdなどが使用可能 |  

※ディレクトリに対する実行権では、他のディレクトリからcdコマンドで移動する際に、その移動先のディレクトリに実行権が付与されていないと移動できない
※許可しないことを表すには「-」

####重要なコマンド

**groupsコマンド**･･･自分の所属グループを表示するコマンド

**idコマンド**･･･自分がどのユーザでログインしているか、またどのグループに所属しているのかを調べるコマンド

**chmodコマンド**･･･既存のファイルやディレクトリに設定されているパーミッションを変更するコマンド。変更できるのは、所有者またはユーザのみ

**chownコマンド**･･･指定されたファイルの所有者とグループを変更するコマンド。実行できるのはrootユーザのみ

**chgrpコマンド**･･･グループのみの変更するコマンド。rootユーザ以外でもそのグループに属しているユーザであれば実行可能

※rootユーザは、所有者が自分以外のファイルもグループを変更できる。また変更先のグループ名は、自分が所属していないグループでも指定可能である
※一般ユーザは、所有者が自分のファイルのみグループを変更できる。また変更先のグループ名は、自分が所属しているグループのみ指定可能である

(表)chmod、chown、chgrpコマンドで使用されるオプション

| 主なオプション | オプション | 
|:-----------:|:------------:|
| -R | ディレクトリに指定した場合、サブディレクトリを含め再帰的にパーミッションが変更される |


####シンボリックモードとオクタルモード

コマンドの引数で指定するモードは、**シンボリックモード**と**オクタルモード**の2種類がある

**シンボリックモード**･･･文字や記号を用いてパーミッションを変更する

`chmod (①ユーザ) (②操作) (③パーミッション)　　ファイル名`

①ユーザ

| 文字 | 説明 | 
|:-----------:|:------------:|
| u | 所有者 |
| g | グループ |
| o | その他 |
| a | 全てのユーザ |

②操作

| 記号 | 説明 | 
|:-----------:|:------------:|
| + | 許可を与える |
| - | 許可を削除する |
| = | 許可を設定する |

③パーミッション

| 文字 | 説明 | 
|:-----------:|:------------:|
| r | 読み取り |
| w | 書き込み |
| x | 実行権 |

**オクタルモード**･･･目的のパーミッションを8進数の数値を使って変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/225d8709-5e35-b289-cf99-97bfb01ebcc8.png)

###☆umask値
・アプリケーションによって指定されたパーミッションに対し、「ユーザ」「グループ」「その他」ごとに割り当てたくないパーミッションを指定したもの
・ユーザの**デフォルトパーミッション**はシェルに設定されたumask値で決まる
・umaskの値は親プロセスから子プロセスに引き継がれる

**(表)デフォルトパーミッション**

|              | ファイル | ディレクトリ | 
|:-----------------:|:-----------------:|:-----------------:|
| 作成時にアプリケーションが指定するパーミッション | 666　rw- rw- rw- | 777　rwx rwx rwx |
| umask値 | 002　--- --- -w- | 002　--- --- -w- |
| デフォルトのパーミッション | 664　rw- rw- r-- | 775　rwx rwx r-x |

**umaskコマンド**･･･現在設定されているumask値を確認する

###☆SUID、SGID、スティッキービット

| 種類 | 数値表現 | 文字列表現 | ファイルの場合 | ディレクトリの場合 | 使用例 |
|:----:|:------:|:-------:|:---------:|:-----------:|:-----:|
| SUID | 4000 | u+s | コマンドが所有者の権限で実行される | ✖ | /usr/bin/passwd |
| SGID | 2000 | g+s | コマンドが所有グループの権限で実行される | 作成されるファイルやディレクトリはそのグループを継承する | /usr/bin/write |
| スティッキービット | 1000 | o+t | ✖ | アクセス権が許可されていてもファイルの削除は行えないようにする設定 | /tmp |

##ハードリンクとシンボリックリンク

**lnコマンド**･･･ファイルへのリンクを作成する。同一ファイルに異なる2つの名前を持たせることができる。したがって、データのコピーが行われているのではなく、**同じデータ**を指している。リンクには**ハードリンク**と**シンボリックリンク**の2種類がある

###☆ハードリンク

**(構文)**
``ln オリジナルファイル名 リンク名``

・リンクファイルが使用するiノード番号はオリジナルファイルと同じ番号
・ディレクトリをもとにリンクファイルを作成することはできない
・iノード番号は同一ファイルシステム内でユニークな番号なので、異なるパーティションのハードリンクを作成することはできない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/de819432-4962-dccf-6ac6-f96d8c963d23.png)

###☆シンボリックリンク

**(構文)**
``ln -s オリジナルファイル名 リンク名``

・リンクファイルが使用するiノードはオリジナルファイル
・ディレクトリをもとにリンクファイルを作成可能
・オリジナルファイルと別のパーティションにリンクファイルを作成可能
・パーミッションの先頭は、ファイルタイプとしてシンボリックリンクファイルを表す「l」が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447762/8838fc82-00b3-bc10-6d93-f044337349f8.png)

##コマンドとファイルの検索

###☆ファイル検索コマンド

**findコマンド**･･･指定したディレクトリ以下で、指定した検索条件に合致するファイルを検索する。**式**を利用することで様々な条件を指定できる。式は、オプション、条件式アクションから構成される

**(構文)**
``find [オプション] [path] [式]``

| 主な式 | 説明 | 
|:----------------:|:--------------:|
| -name | 指定ファイル名で検索する |
| -type | ファイルのタイプで検索する。d(ディレクトリ)、f(通常ファイル)、l(シンボリックリンクファイル) |
| -size | 指定したブロックサイズで検索する |
| -atime | 指定した日時をもとに、最終アクセスがあったファイルを検索する |
| -mtime | 指定した日時をもとに、最終更新されたファイルを検索する |
| -uid | ファイルの所有者のユーザIDを指定 |
| -user | ファイルの所有者のユーザ名またはユーザIDを指定 |
| -perm | ファイルのパーミッションを指定。パーミッションが完全に一致したファイルを検索 |
| -print | 検索結果を標準出力する |
| -exec command \; | 検索後、コマンド(command)を実行する |

※空白文字が入ってるファイル名をxargsコマンドに渡すときは、-print0オプションを使用

**locateコマンド**･･･findコマンドでは、オプションを指定する必要があるが、locateコマンドは、データベースを使用してインデックス検索を行っているため高速に検索できる。しかし、日々データベースの更新を行わないと検索対象外になるので、**updatedbコマンド**を使用する

**(構文)**
``locate [オプション] パターン``

**updatedbコマンド**･･･データベースの更新を行う。設定ファイルは**/etc/updatedb.confファイル**

(表)オプション

| 主なオプション | 説明 |   
|:-----------------:|:-----------------:|
| -e | データベースのファイルの一覧に取り込まないディレクトリパスを指定する |
| -o | 更新対象のデータベース名を指定する。独自に作成したデータベースを指定したい場合に使用 |

※特定のディレクトリをデータベース作成の対象から外す場合は、「updatedb -e ディレクと名」とするか、**/etc/updatedb.confファイル**に記載する

###☆その他検索コマンド

**whichコマンド**･･･指定されたコマンドがディレクトリに格納されいるかを、**PATH環境変数**で指定されたディレクトリをもとに探す

**whereisコマンド**･･･指定されたコマンドのバイナリ・ソース・マニュアルページの場所を表示する

**typeコマンド**･･･コマンドのタイプ(バイナリなのか、エイリアスなのか等の情報)を表示する