1. ファイルのアクセス許可を理解する
Linux システムでは、すべてが ファイル であり、ディレクトリもディレクトリ ファイルと呼ばれるファイルの形式であり、その属性には主に索引节点(inode),类型、权限属性、链接数、所归属的用户和用户组、最近修改时间
次のものが含まれます。
ルートディレクトリ直下のディレクトリは以下のとおりです。
$ ls -lih
total 60K
263121 lrwxrwxrwx 1 root root 7 Jun 2 2017 bin -> usr/bin
263122 dr-xr-xr-x 2 root root 4.0K Dec 7 2017 boot
1 drwxr-xr-x 5 root root 360 Aug 11 14:36 dev
1315847 drwxr-xr-x 1 root root 4.0K Aug 11 14:36 etc
263621 drwxr-xr-x 5 root root 4.0K Nov 29 2019 home
264862 lrwxrwxrwx 1 root root 7 Jun 2 2017 lib -> usr/lib
264863 lrwxrwxrwx 1 root root 9 Jun 2 2017 lib64 -> usr/lib64
264864 drwx------ 2 root root 4.0K Jun 2 2017 lost+found
264865 drwxr-xr-x 2 root root 4.0K Dec 13 2015 media
264866 drwxr-xr-x 2 root root 4.0K Dec 13 2015 mnt
264867 drwxr-xr-x 3 root root 4.0K Nov 29 2019 opt
1 dr-xr-xr-x 373 root root 0 Aug 11 14:36 proc
4851238 dr-xr-x--- 1 root root 4.0K Dec 11 2019 root
4851241 drwxr-xr-x 1 root root 4.0K Feb 14 11:17 run
264881 lrwxrwxrwx 1 root root 8 Jun 2 2017 sbin -> usr/sbin
264882 drwxr-xr-x 2 root root 4.0K Dec 13 2015 srv
1 dr-xr-xr-x 13 root root 0 Aug 11 14:36 sys
4851264 drwxrwxrwx 1 root root 4.0K Feb 14 11:17 tmp
4851265 drwxr-xr-x 1 root root 4.0K Nov 29 2019 usr
4852397 drwxr-xr-x 1 root root 4.0K Jun 4 2019 var
1.1. インデックスノード
Linux ファイル システムでは、各ファイルには、ファイルの識別と管理に使用される一意の i ノード番号があります。インデックス ノードはファイル システムのメタデータ領域にあり、ファイルの所有者、権限、サイズ、作成時刻、変更時刻、アクセス時刻など、ファイルのすべてのメタデータ情報が含まれています。
i ノード番号はファイルを識別する一意の番号です。Linux ファイル システムでは、各ファイルとディレクトリには一意のインデックス ノード番号があり、ファイル システム内で一意です。
ファイル ディレクトリ インデックス ノードを表示するには、次のコマンドを使用します。
$ ls -i
total 12528
266890 locale-archive
# 266890 即为文件locale-archive的索引节点
ファイルには複数のハード リンクを含めることができ、各ハード リンクは異なるファイル名を持ちますが、同じ i ノード番号を共有します。したがって、複数のファイル名がハード リンクを通じて同じ物理ファイルを指すことができます。
ハードリンクとソフトリンク
ハード リンクは、同じ物理ファイルを指す複数のファイル名を持つリンクを指します。複数のハード リンクは同じ i ノード番号を共有するため、ファイル システム内の同じ場所に違いはありません。各ハード リンクは完全なファイル名であり、元のファイル名として使用でき、ファイルの読み取りと書き込みが可能です。
シンボリック リンク (ソフト リンクとも呼ばれる) は、別のファイルを指すパス名を含む特殊なタイプのファイルを指します。シンボリック リンク自体は、別のファイルを指すパス名を含むファイルです。シンボリック リンクにアクセスすると、そのリンクが指すファイルが実際にアクセスされます。ハード リンクとは異なり、シンボリック リンクは物理ファイルではなくファイル名を指します。
ハード リンクとシンボリック リンクの主な違いは次のとおりです。
- ハード リンクは同じファイル システム内のファイルのみをリンクできますが、シンボリック リンクは複数のファイル システムにまたがることができます。
- ハード リンクは同じ i ノードを共有するため、同じ物理ファイルを指す必要がありますが、シンボリック リンクは任意のファイルまたはディレクトリを指すことができます。
- 元のファイルを削除しても、同じ i ノードを共有しているため、ハード リンクには影響しませんが、元のファイルを削除すると、シンボリック リンクが無効になります。
例は次のとおりです。
# 新建文件file.txt, 写入“Hello World!”
$ vim file.txt
# 分别对file.txt 建立硬链接和软链接
$ ln file.txt hard_file.txt
$ ln -s file.txt soft_file.txt # 与硬链接区别在于加 -s
$ ll
total 8
-rw-r--r-- 2 root root 13 Aug 11 16:35 file.txt
-rw-r--r-- 2 root root 13 Aug 11 16:35 hard_file.txt
lrwxrwxrwx 1 root root 8 Aug 11 16:36 soft_file.txt -> file.txt
# 查看文件内容
$ cat file.txt
Hello World!
$ cat hard_file.txt
Hello World!
$ cat soft_file.txt # 有文章说符号链接无法查看内容,只是显示文件名,这里无法确认
Hello World!
# 删除原始文件后查看文件内容
$ rm -rf file.txt
$ cat hard_file.txt
Hello World!
$ cat soft_file
cat: soft_file: No such file or directory
1.2. タイプ
1.2.1. 通常のファイル:
-
次のように通常のファイルを表します。
$ ll /etc/passwd
-rw-r--r-- 1 root root 1690 Aug 14 04:46 /etc/passwd
1.2.2. ディレクトリファイル
d
ディレクトリ ファイルは次のように表されます。
$ ll /home/
drwx------ 3 admin admin 4096 Mar 21 10:32 admin
1.2.3. デバイスファイルのブロック
b
ディレクトリ ファイルは次のように表されます。
brw-rw---- 1 root disk 253, 0 Nov 30 2022 vda
brw-rw---- 1 root disk 253, 1 Nov 30 2022 vda1
brw-rw---- 1 root disk 253, 2 Nov 30 2022 vda2
brw-rw---- 1 root disk 253, 16 Nov 30 2022 vdb
Linux システムでは、ブロック デバイス ファイルは、ディスクや光ディスクなどのブロック デバイスにアクセスするために使用される特別なファイル タイプです。ブロック デバイス ファイルは通常、/dev/sdX
またはの形式で存在します/dev/hdX
。X はドライブの文字番号を表し、a から始まり増加します。たとえば、/dev/sda
システムの最初のハードディスク、/dev/sdb
システムの 2 番目のハードディスクなどを意味します。
ブロック デバイス ファイルは、デバイス セクター データを直接読み書きできる基本的なデバイス ファイルです。Linux システムでは、ブロック デバイス ドライバーがブロック デバイスをファイル システムにマップし、ユーザーがファイル システムを通じてディスクを管理できるようにします。
ブロック デバイス ファイルは通常、ハードディスクのパーティション化、フォーマット、マウント、アンマウントなどの操作に使用されます。たとえば、fdisk コマンドを使用してブロック デバイス ファイルをパーティション化することができ、mkfs コマンドを使用してパーティションをフォーマットすることができ、mount および umount コマンドを使用してファイル システムをブロック デバイスにマウントし、ブロック デバイスが存在しない場合は削除することができます。ファイル システムへのアクセスが必要です。アンインストールします。
1.2.4、キャラクターデバイスファイル
c
次のように、キャラクタ デバイス ファイルを表します。
crw-rw-rw- 1 root tty 5, 0 Aug 4 14:25 tty
crw--w---- 1 root tty 4, 0 Nov 30 2022 tty0
crw--w---- 1 root tty 4, 1 Nov 30 2022 tty1
crw--w---- 1 root tty 4, 10 Nov 30 2022 tty10
Linux システムでは、キャラクタ デバイス ファイルは、キーボード、マウス、シリアル ポートなどのキャラクタ デバイスにアクセスするために使用される特別なファイル タイプです。キャラクタ デバイス ファイルは通常/dev/ttyX
、 または/dev/ttySX
の形式で存在します。X はデバイスの番号を表します。
ブロック デバイス ファイルとは異なり、キャラクタ デバイス ファイルはブロックではなく文字単位で読み書きされます。したがって、通常、キャラクタ デバイス ファイルは、テキスト ファイル、シリアル ポート データなどのストリーム データを処理するために使用されます。キャラクタ デバイス ファイルには、ファイルの読み取りおよび書き込み速度を向上させ、ランダム アクセスをサポートできるキャッシュ メカニズムが備わっています。
Linux システムでは、キャラクタ デバイス ファイルの動作モードは通常のファイルと同様であり、open、read、write、ioctl などのシステム コールを使用してデバイスにアクセスできます。たとえば、cat コマンドを使用してキーボードに入力された文字を読み取り、echo コマンドを使用してデータをシリアル ポートに送信します。
1.2.5、シンボリックリンクファイル
l
次のようにシンボリック リンク ファイルを表します。
lrwxrwxrwx. 1 root root 7 Nov 11 2020 python -> python2
lrwxrwxrwx. 1 root root 9 Nov 11 2020 python2 -> python2.7
lrwxrwxrwx 1 root root 16 Nov 11 2020 python2-config -> python2.7-config
lrwxrwxrwx. 1 root root 9 Apr 12 2022 python3 -> python3.6
1.2.6. パイプラインファイル
p
次のようにパイプライン ファイルを表します。
prw------- 1 root root 0 Nov 30 2022 dmeventd-client
prw------- 1 root root 0 Nov 30 2022 dmeventd-server
パイプ ファイルは、プロセス間の通信に使用される特殊なファイル タイプです。パイプライン ファイルは名前付きパイプ ファイル (名前付きパイプ) とも呼ばれ、通常のファイルとは異なり、データの保存には使用できませんが、データのストリーミングに使用されます。
パイプ ファイルは、mkfifo コマンドで作成し、rm コマンドで削除できます。パイプ ファイルの作成と削除は既存のプロセスには影響しませんが、すべてのプロセスがパイプ ファイルを閉じると、パイプ ファイルも削除されます。
Linuxシステムでは通常、プロセス間のデータ伝送にはパイプラインファイルが使用され、例えばあるプロセスの出力をパイプラインを通じて他のプロセスの入力に直接渡すことでデータ処理を実現する。たとえば、次のコマンドを使用して、あるプロセスの出力を別のプロセスにパイプ接続できます。
$ command1 | command2
このように、command1の出力がcommand2の入力に渡されることで、データ処理が実現されます。
1.2.7. ソケットファイル
s
次のようにソケット ファイルを表します。
srwxr-xr-x 1 root root 0 Apr 12 16:43 dockershim.sock
srw-rw---- 1 root docker 0 Jul 27 16:47 docker.sock
Linux システムでは、ソケット ファイルはプロセス間のネットワーク通信に使用される特別なファイル タイプです。ソケット ファイルは通常、ファイル パスとして存在します/var/run/docker.sock
。
ソケット ファイルは複数のプロセスで共有できるため、プロセス間の通信と調整を実装するために使用できます。Linux システムでは、通常、ソケット ファイルは、Web サーバー、データベース サーバーなどのネットワーク サービスを実装するために使用されます。
ソケット ファイルの作成と使用には、Socket API
ネットワーク プログラミングで使用される一連のシステム コールの助けが必要です。Socket API では、socket、bind、listen、accept
他の関数を使用してソケット ファイルを作成および操作できます。
ソケット ファイルは、ストリーム ソケットとデータグラム ソケットの 2 つのタイプに分けることもできます。ストリーム ソケットは、データを確実に送信するために使用される接続指向のソケットです。データグラム ソケットは、小さなデータ パケットの高速送信に使用されるコネクションレス型ソケットです。
つまり、ソケット ファイルは Linux システムにおいて非常に重要なファイル タイプであり、ネットワーク通信とプロセス間の調整に使用されます。ソケット ファイルの仕組みとその使用方法を理解することは、システム管理者と開発者の両方にとって非常に重要です。
1.3. 権限
ファイルのアクセス許可は、3 桁の 3 つのグループに分かれており、それぞれファイル所有者のアクセス許可、ファイル所有者が属するグループのアクセス許可、および他のユーザーのアクセス許可を表します。
権限と番号の対応表:
番号 | シンボル | 権限 |
---|---|---|
0 | — | 許可が拒否されました |
1 | -バツ | 埋め込む |
2 | -w- | 書く |
3 | -wx | 書いて実行する |
4 | r– | 読む |
5 | 処方箋 | 読んで実行する |
6 | rw- | 読み書き |
7 | rwx | 読み取り、書き込み、実行 |
1.4. リンク数
リンクの数は、ファイルを指すハード リンクの数を示します。新しいハード リンクが作成されると、ファイルへのリンクの数が自動的に増加し、ハード リンクが削除されると、それに応じてリンクの数が減少します。
たとえば、file.txt という名前のファイルがあり、2 つのハード リンク link1 と link2 を作成した場合、ファイルのリンク数は 3 (元のファイル名 file.txt と 2 つのハード リンク link1 と link2) になります。
リンク数は Linux ファイル システムの重要な概念であり、次の機能があります。
1) ファイルが削除できるかどうかを確認します。
リンク数が 0 の場合は、ファイルを指すハード リンクがなく、ファイルを削除できることを意味します。
2) ファイルを変更できるかどうかを判断します。
ファイルへのすべてのハードリンクが削除されるまで、ファイルを変更することはできません。ハード リンクが存在する場合、いずれかのリンクを変更すると他のリンクに影響します。
3) ファイルの名前を変更できるかどうかを確認します。
ファイルに複数のハード リンクがある場合、ハード リンクの 1 つの名前を変更すると、他のハード リンクに影響します。したがって、ファイルの名前を変更できるのは、ファイルへのすべてのハード リンクが削除された後だけです。
4) ファイルが占有するディスク容量を確認します。
リンク番号の値は、ファイルのハード リンクの数に 1 を加えた値に等しくなります。ここで、+ 1 はファイル自体が占有するスペースを表します。したがって、ファイルに複数のハード リンクがある場合、実際にディスク領域を使用するのは 1 回だけです。
ファイルリンク数の確認方法
ls -l
$ ls -l
total 4
-rw-r--r-- 1 root root 5 Aug 14 14:11 test.txt
# 其中链接数为 1
stat
注文
stat test.txt
File: ‘test.txt’
Size: 5 Blocks: 8 IO Block: 4096 regular file
Device: 2000d8h/2097368d Inode: 1315730 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-08-14 14:11:57.865926283 +0800
Modify: 2023-08-14 14:11:57.865926283 +0800
Change: 2023-08-14 14:11:57.865926283 +0800
Birth: -
2. ファイル権限を変更する
2.1.chmod
コマンド
2.1.1. デジタル方式
数値方式を使用する場合、各権限は 3 つの数字で表され、所有者、所有者が属するグループ、およびその他のユーザーの権限を表します。1.3 と組み合わせて、コマンドを使用してchmod 700 file.txt
ファイル file.txt にアクセス許可を追加します。rwx------
2.1.2. シンボル方式
+
またはを使用し-
て権限を追加または削除できu
、g
と はo
それぞれ所有者、グループ、およびその他のユーザーを表します。
$ chmod u+rw file.txt
# 此命令以为着给所有者增加读写权限,所属组合其他用户权限不变。
2.2.chown
コマンド
chown コマンドは、ファイルの所有者を変更するために使用されます。ユーザー名またはユーザー ID によって新しい所有者を指定できます。
$ chown admin test.py
$ ll | grep test.py
-rw-r--r-- 1 admin root 1997 Jun 27 16:59 test.py
2.3.chgrp
コマンド
chgrp コマンドは、ファイルが属するグループを変更するために使用します。グループ名またはグループ ID によって、所属する新しいグループを指定できます。
$ chgrp admin test.py
$ ll | grep test.py
-rw-r--r-- 1 admin admin 1997 Jun 27 16:59 test.py
2.4.umask
コマンド
Linux オペレーティング システムでは、umask コマンドを使用して、新しく作成されたファイルまたはディレクトリのデフォルトのアクセス許可を設定します。umask コマンドは、現在のユーザーの umask 値、つまりデフォルトの権限マスクを設定できるユーザーレベルのコマンドです。
umask 値は、022 などの 3 つの 8 進数の形式です。各数値は、ファイル許可マスクの 3 ビット値を表します。このうち、最初の数字は新しく作成されたファイルの許可マスクの所有者部分を表し、2 番目の数字はグループ部分を表し、3 番目の数字はその他のユーザー部分を表します。
デフォルトでは、umask 値は通常 022 です。つまり、新しいファイルのデフォルトの権限は で-rw-r--r--
、新しいディレクトリのデフォルトの権限は ですdrwxr-xr-x
。
たとえば、umask 値が 002 の場合、新しいファイルのデフォルトのアクセス許可は-rw-rw-r--
、新しいディレクトリのデフォルトのアクセス許可は ですdrwxrwxr-x
。
umask 値は、umask コマンドを使用して変更できます。コマンドの構文は次のとおりです。
$ umask [mode]
このうち、モード パラメータには 8 進数またはシンボリック モードを指定できます。mode パラメーターが指定されていない場合、umask コマンドは現在の umask 値を表示します。
$ umask
0022
chmod と同様に、シンボリック モードを使用してデフォルトのアクセス許可を設定することもできます。デフォルトのアクセス許可マスクを に設定する場合は-rwxr-xr-x
、次のコマンドを使用できます。
$ umask u=rwx,g=rx,o=rx
上記のコマンドでは、u は所有者、g は所属するグループ、o は他のユーザー、= は設定権限を表します。したがって、u=rwx は所有者の権限を読み取り可能、書き込み可能、および実行可能に設定することを意味し、g=rx はグループの権限を読み取り可能および実行可能に設定することを意味し、o=rx は他のユーザーの権限を読み取り可能に設定することを意味しますそして実行可能。
umask 値は現在のセッションで設定され、既存のファイルまたはディレクトリの権限には影響せず、新しく作成されたファイルまたはディレクトリのデフォルトの権限にのみ影響することに注意してください。
umask 値を永続的に変更したい場合は、それをシェル設定ファイル ( ~/.bashrc、~/.bash_profile 或 /etc/profile
etcなど) に追加できます。
つまり、umask コマンドは、新しく作成されたファイルまたはディレクトリのデフォルトのアクセス許可マスクを設定するために使用されます。umask 値は 3 つの 8 進数の形式であり、8 進数またはシンボリック モードを使用して変更できます。デフォルトでは、umask 値は通常 022 です。
参照文書
1、https://www.cnblogs.com/bluestorm/p/16806954.html