デバイス、Linuxファイルシステム、FHS ③忘備録　（ファイルのパーミッションと所有者の管理・ハードリンクとシンボリックリンクの作成・システムファイルの検索、適切なファイル配置）

ファイルやディレクトリに対する権限をパーミッションと言う。
権限は読み取り・書き取り・実行の3つ。
①読み取り
cat moreなどのファイルの内容を参照する。
ディレクトリ内の内容を参照。ls find

②ファイルに書き込み
vi ディレクトリに新規のファイルを作成.削除する→touch mv rm

③実行
ファイルを実行する。ディレクトリ内のファイルへのアクセスをする
cd

rwxrwxrwx 421421421だけど　７７７で表すっぽいで。

##ls　ーl
ファイルやディレクトリには所有ユーザ、グループ、パーミッション（アクセス権）などが設定されている
これらの情報を確認するのがls -lコマンド

# ls -l /etc/passwd
-rw-r--r--. 1 root root 1929 Jan 18 14:17 /etc/passwd
これは決まり文句だから覚える。所有ユーザーとグループはroot
グループとそのほかのユーザーは読み取り権がある。

-rw-r--r-- 1 test staff 24 Jul 21 13:38 index.html
テストユーザー　スタッフグループってことか


##chmodコマンド
プログラムをどのユーザが実行しても、プログラムを所有するグループの権限で実行されるようにするにはSGIDを設定します。SGIDは特殊なパーミッションの1つです。chmodコマンドで通常のパーミッションの値に2000を加えた値を設定するか、グループに「s」という権限を追加します(g+s)。


・SUID
実行ファイルに設定する事で、そのプログラムをどのユーザが実行しても、プログラムの:point_up:所有ユーザの権限で実行されます。
設定はchmodコマンドで、通常のパーミッションの値に4000を加えた値を設定するか、所有ユーザに「s」という権限を追加します(u+s)。
これが設定された代表的なプログラムに「passwd」コマンドがあります。

・SGID
実行ファイルに設定する事で、そのプログラムをどのユーザが実行しても、プログラムの:point_up:所有グループの権限で実行されます。
設定はchmodコマンドで、通常のパーミッションの値に2000を加えた値を設定するか、所有グループに「s」という権限を追加します(g+s)。

・スティッキービット
ディレクトリに設定する事で、そのディレクトリに対して書き込み権限を持つユーザでも、自分が所有する以外のファイルを削除できなくなります。
設定方法はchmodコマンドで、通常のパーミッションの値に1000を加えた値を設定するか、その他ユーザに「t」という権限を追加します(o+t)。
これが設定された代表的なディレクトリに「/tmp」ディレクトリがあります。


![名称未設定.png３３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/00b58a37-84a6-c47f-f69d-12628708b65b.png)



##umask
ファイルやディレクトリを新規作成した際のデフォルトのパーミッションを設定するにはこれ。
666 - マスク値 = ファイルのデフォルトのパーミッション
777 - マスク値 = ディレクトリのデフォルトのパーミッション

##chown　＝　chgrp
指定したファイルやディレクトリの所有ユーザーやグループ変更をする際に使用する。
chown [-R] ユーザ名:グループ名 ファイルまたはディレクトリ
：の部分は.でもOK
グループとユーザで行ける！

こっちはグループのみ
＝chgrp [-R] グループ名 ファイルまたはディレクトリ

-R」オプションを使用すると、指定したディレクトリおよびその配下にあるファイルの所有ユーザやグループを再帰的に変更することが出来ます。


## lnコマンド
リンクの作成にはこれ。ln　リンク元　リンク先
シンボリックリンクを作成するにはオプションで-sをつける。

①ハードリンク
あるファイルを複製する。さらにそのできたファイルに名前をつける。
元ファイルを消してもあだ名の方は消えない。あだ名と元ファイルを消すことで両方削除される。
②シンボリックリンク
間に入って中継してくれる感じ
こいつを通して命令・注文する感じ

ハードリンクを作成した際に、inode番号は変わらない。
ハードリンクの数は増える。

リンクの作成にはlnコマンドを利用します。

lnコマンドの書式は以下のとおりです。
ln [-s] リンク元 リンク先

シンボリックリンクを作成するには「-s」オプションを使用します。
##ls -l で表示される先頭の文字
先頭に出るパーミッションの文字はファイルの種別を出す。
- ファイル
d　ディレクトリ　
l　シンボリックファイル
ハードリンクに関してはでない。inode番号で出る。ハードリンクを観たい時はls -liで。

##findコマンド
指定したディレクトリ以下からファイルやディレクトリを検索するにはこのコマンド

-typeでファイル種類を検索　lがシンボリックリンク　dはディレクトリ　fはファイル
-maxdepth　階層　指定した階層まで検索
-mindepth 階層　指定した階層から下を検索
-atime 最終アクセス日で検索
-mtime 最終更新日で検索
-print 検索結果を改行で区切って表示
-print0 検索結果をNULL文字（￥０）で改行で区切って表示
-name ファイル名　でファイルを検索する。
-perm アクセス権　アクセス権を検索
-size サイズ　ファイルサイズの検索
-exec コマンド名　検索結果のファイルに対してコマンドを実行

![名称未設定.png123456.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/47d8a52d-82ff-fcc4-36b7-a1336440079b.png)



##which whereis
指定したコマンドの場所を検索する
which 環境変数PATHで設定しているディレクトリから検索する
whereis Linuxでコマンドの格納される標準的なディレクトリの中から検索します。
つまり2つとも絶対パスで表示してくれる

##locate
検索用DBを使用して高速でファイル検索をするコマンド
locate httpd.conf などで検索をかける
※updatedb locateコマンドが利用するファイルデータベースを更新するコマンドです。

##/usrディレクトリ
起動には不要なプログラムなどが格納されている。
/usr/shere/man マニュアル
/usr/bin システムの起動には必須でない、一般ユーザーのコマンド
/usr/sbin システム起動には必須ではない、システム管理用のコマンド

##umask　＝デフォルトのパーミッションを変更する
ファイルやディレクトリを新規作成した際のデフォルトのパーミッションを設定するコマンド
マスク値というものを設定して、新規に作成するファイルとディレクトリのデフォルトのパーミッションを決定します。マスク値はユーザ毎に設定します。

マスク値が0の場合に使用されるデフォルトのパーミッションは、ファイルが「666」、ディレクトリが「777」です。これらの値から指定したマスク値を引いた値が新たなデフォルトのパーミッションとして設定されます。
例えばマスク値が022の場合、ファイルとディレクトリのデフォルトのパーミッションはそれぞれ「644(666-022)」と「755(777-022)」です。

マスク値で０以下は全て０になる。

##ハードリンク
ハードリンクとは、ファイルシステムの機能の一つで、あるファイルやディレクトリの実体に複数の名前を付け、それぞれが実際のファイル名/ディレクトリ名として等しく機能するようにしたもの。UNIX系OSやWindowsなどで利用できる。

ディレクトリのハードリンクの作成はできない。ディレクトリのシンボリックリンクであれば作成可能。

##updatedb
設定ファイルは/etc/updatedb.confです！
locateコマンドが利用する検索用のデーターベースを更新する。

##FHS
ディストリビューションに依存しない、Linuxの標準的なディレクトリ構造を定めた規格のこと。
ディストリビューション→OSとしてのLinux、もしくはその配布形態のこと。（カーネルだけもらっても困る）

昔は、ディストリビューションがそれぞれに定めたディレクトリ構造を使用していた。
そのため、インストールしたものがそれぞれのディストリビューションで違うこともあった。このような問題をなくすためにできたのがFSH。
どこに置いたかはきちんと把握しないといけないけど、前みたいに勝手にどこかにおかれることはないということか。

以下はFHSで規定されている「/usr」以下のディレクトリ配置をまとめたものです。
![名称未設定.png 11111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/94dd1273-5cef-9ab3-20b1-c6761d0c1834.png)


##シンボリックリンク
シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクの事です。
シンボリックリンクが持っている情報は「元ファイル（ディレクトリ）がどこにあるのか」というパス情報のみです。

File1を削除すると（他に同じinode番号を持つハードリンクが無ければ）、ファイルの実体は削除されますが、File2は残ります。ただその場合、File2にアクセスすると、リンクしているFile1が無いためエラーになります。

①異なったファイルシステム間でも作成可能
シンボリックリンクは元ファイルの位置（パス）情報をもつだけなので、異なったファイルシステムを作成することも可能！
②lsコマンドで確認すると、先頭にlが出る。
③inode番号
シンボリックリンクはファイルの実態を指しませんので、inode番号は元ファイルとは異なります。

##/etc/ld.so.cache
プログラムの実行時に、共有ライブラリの場所を検索するために使用されるファイル

##chownとchgrp
chown [-R] :グループ名 ファイルまたはディレクトリ
chgrp [-R] グループ名 ファイルまたはディレクトリ

所有グループのみを変更するにはchownまたはchgrpコマンドを利用します。
設問のようにrootユーザであればどちらも実行できますが、ユーザが所属しているグループであれば、一般ユーザでも変更できます。

・chown -R :staffgroup dir →所有グループだけでなく所有ユーザも変更可能なコマンド
・chgrp -R staffgroup dir　→所有グループのみ