ファイル・ディレクトリのアクセス権限
≫ パーミッション
アクセス権限の事
≫ 所有者・グループ
所有者 =作成したアカウント
グループ=作成したアカウントのプライマリグループ
≫ パーミッションの記号
記号 | 数値 | 対応する権限 |
r | 4 | 読み込み可能 |
w | 2 | 書き込み可能 |
x | 1 | 実行可能 |
- | 0 | 権限なし |
≫ アクセス権の変更 - chmod シンボルモードと数値モードの2つのモードがある。
シンボルモードではアクセス権の追加、削除、指定ができる。 数値モードは指定したアクセス権へ固定する事しかできない。
グループに実行権限を与える
$ ls -l -rw-rw-r-- 1 vagrant vagrant 0 3月 21 23:42 2017 test.txt $ chmod g+x test.txt $ ls -l -rw-rwxr-- 1 vagrant vagrant 0 3月 21 23:42 2017 test.txt |
≫SUID(Set User ID) - 特殊なアクセス権
通常、実行ファイルを実行すると、そのファイルを実行したユーザーの権限で実行されるが、
SUIDが設定されたファイルでは、その実行ファイルの所有者のアカウント権限で実行される。
※セキュリティ上の理由でスクリプトにsetuidは使用できない。
パーミッションの所有者の実行権が「s」となっている。passwdコマンドはroot権限で実行される。
$ ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 2月 22 20:48 2012 /usr/bin/passwd |
≫ スティッキービット(Sticky Bit) - 特殊なアクセス権
スティッキービットが設定されたディレクトリでは、すべてのユーザーが
ファイル・ディレクトリを書き込めるが、所有者だけ(rootは除く)しか削除できなくる。
スティッキービットの確認。パーミッションのその他の実行権が「t」となっている。
$ ls -ld /tmp drwxrwxrwt. 3 root root 4096 3月 25 14:11 2017 /tmp |
スティッキービットを設定
# mkdir /sticky # chmod 1777 /sticky # logout $ touch /sticky/test.txt $ ls -l /sticky -rw-rw-r-- 1 vagrant vagrant 0 3月 25 19:27 2017 test.txt |
≫ デフォルトのアクセス権 - umask
新規にファイルや、ディレクトリを作成したときのアクセス権を設定。
/etc/bashrcの中にumaskの値をユーザーに割り当てる為の記述がある。
ファイルと、ディレクトリでは計算の仕方が異る。
umask値 | ディレクトリのデフォルトアクセス権 | ファイルのデフォルトアクセス権 |
0 | rwx | rw- |
1 | rw- | rw- |
2 | r-x | r-- |
現在のumask値を確認
$ umask 0002 $ umask -S シンボルモードで確認 u=rwx,g=rwx,o=rx $ touch test.txt $ mkdir test $ ls -l drwxrwxr-x 2 vagrant vagrant 4096 3月 25 19:53 2017 test -rw-rw-r-- 1 vagrant vagrant 0 3月 25 19:53 2017 test.txt |
ディスク管理
≫パーティション - fdisk
ハードディスクは、内部の領域を論理的に複数の領域(パーティション)に区切る事ができ、
それぞれをひとつのハードディスクとして利用する事ができる。
パーティションの確認。 IDEディスクであれば/dev/hd[a-h]という名前のデバイス名、 SCSIディスクや、SATAディスクであれば/dev/sd[a-p]という名前になる。 # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 477M 57M 396M 13% /boot ディスク1のデバイス名は、/dev/sda
# fdisk -l /dev/sda fdisk -l にデバイス名をわたす ディスク /dev/sda: 10.5 GB, 10485760000 バイト
デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 1 64 512000 83 Linux パーティション1のデバイス名が/dev/sda1 |
≫ファイルシステム - mkfs
ファイルシステムにはいくつか種類(ext2,ext3,ext4)があり、使用しているファイルシステムによって、
1ファイルの最大サイズ、ファイル名の文字数、圧縮などさまざまな機能の違いがある。ハードディスク
を利用する際は、最低限なんらかのファイルシステムをパーティション上に作成する必要がある。
ファイルシステムの確認
$ df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda1 ext4 487652 57550 404502 13% /boot
ext4の特徴 ボリュームサイズは最大1EB。ファイルサイズは最大16TB 認識できる日付範囲が1901年12月14日から2514年4月25日 タイムスタンプがナノ秒をサポート。ext3よりレスポンスが良い |
≫マウント - mount
接続した記憶装置を、ツリー状のディレクトリ構造のどこかのディレクトリとして登録する事をいう。
ハードディスク、DVDドライブ等を利用するためにも/ディレクトリ配下のどこかへ必ずマウントする必要がある。
ext4でマウントされているファイルシステムのリストを表示
$ mount -t ext4 /dev/mapper/VolGroup-lv_root on / type ext4 (rw) /dev/sda1 on /boot type ext4 (rw) |
パーティションやデバイスをどのようにファイルシステムにマウントするかを記述した設定ファイル
$ cat /etc/fstab /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 UUID=7c4fdf62-70a0-4e4c-8e2f-816d1871c8f9 /boot ext4 defaults 1 2 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 |
≫UUID
機器を管理・識別ためのユニークID。
UUIDの確認
$ sudo blkid /dev/sda1: UUID="7c4fdf62-70a0-4e4c-8e2f-816d1871c8f9" TYPE="ext4" /dev/sda2: UUID="hTIxaE-XcZT-GoSQ-sIy7-jD2T-vHZE-MvgwTM" TYPE="LVM2_member" /dev/mapper/VolGroup-lv_root: UUID="65f03bc0-09ae-431a-bf08-189ed7e49f45" TYPE="ext4" /dev/mapper/VolGroup-lv_swap: UUID="02d0154f-6841-49f0-8096-54cfd5668052" TYPE="swap" |
≫アンマウント - umount
マウント(mount)されたハードディスクを解除する
アンマウント対象のファイルシステム上のファイルがオープンされていて umountできない時の対処 - いまファイルを開いている人を確認する手順
ファイルを開いておく $ vi test.txt
1.ファイルシステムを確認 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 8.1G 1.2G 6.5G 16% / tmpfs 309M 0 309M 0% /dev/shm /dev/sda1 477M 57M 396M 13% /boot
2. デバイスファイルを使用しているユーザーやプログラムを調べる $ fuser -vm /dev/mapper/VolGroup-lv_root USER PID ACCESS COMMAND /dev/mapper/VolGroup-lv_root: vagrant 1345 .rce. bash vagrant 1443 .rce. bash vagrant 1500 Frce. vi vagrantユーザがviでファイルをオープンしている
3 PIDからそのプロセスがどのファイルを使っているか調べる事ができる $ lsof -p 1500 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME vi 1500 vagrant cwd DIR 253,0 4096 134108 /home/vagrant vi 1500 vagrant rtd DIR 253,0 4096 2 / vi 1500 vagrant txt REG 253,0 907248 130496 /bin/vi vi 1500 vagrant mem REG 253,0 65928 130395 /lib64/libnss_files-2.12.so vi 1500 vagrant mem REG 253,0 99158576 267401 /usr/lib/locale/locale-archive vi 1500 vagrant mem REG 253,0 18712 130426 /lib64/libattr.so.1.1.0 vi 1500 vagrant mem REG 253,0 19536 130385 /lib64/libdl-2.12.so vi 1500 vagrant mem REG 253,0 1920936 130379 /lib64/libc-2.12.so vi 1500 vagrant mem REG 253,0 31280 130442 /lib64/libacl.so.1.1.0 vi 1500 vagrant mem REG 253,0 132408 130422 /lib64/libtinfo.so.5.7 vi 1500 vagrant mem REG 253,0 122040 130448 /lib64/libselinux.so.1 vi 1500 vagrant mem REG 253,0 154664 134118 /lib64/ld-2.12.so vi 1500 vagrant 0u CHR 136,1 0t0 4 /dev/pts/1 vi 1500 vagrant 1u CHR 136,1 0t0 4 /dev/pts/1 vi 1500 vagrant 2u CHR 136,1 0t0 4 /dev/pts/1 vi 1500 vagrant 4u REG 253,0 12288 130412 /home/vagrant/.test.txt.swp オープンしているファイル |
≫スワップ領域
メイン・メモリー(実メモリー)を使い切りそうになり,空き容量が不足した場合、
実メモリーから使用中の内容の一部を取り出して退避するためのハード・ディスク上の領域
実メモリーと比べると、ハード・ディスクへのアクセス速度は格段に遅くなる。また、
スワップアウトやスワップインが頻繁に発生すると、CPUの処理能力の多くがそれらの
処理に割り当てられてしまいシステム全般の処理性能は大幅に低下る。
スワップ領域は実メモリーの容量不足による実行中プロセスの強制終了を発生させないため、
あるいはシステムを停止させないための“保険”とみなす。
実メモリーの容量が足りなければ、スワップ領域を増やすのではなく、実メモリーの搭載量を増やす
スワップ領域の容量確認
# free total used free shared buffers cached Mem: 630888 308056 322832 176 16408 225700 -/+ buffers/cache: 65948 564940 Swap: 1023996(*1) 0(*2) 1023996 *1:スワップ領域の容量(k) *2:使用容量 |
スワップ領域の追加
1. スワップ用ファイルを作成する # dd if=/dev/zero of=/swapfile bs=1M count=50 中身が0で埋め尽くされた50Mbyteのswapfileという名前のファイルが作成される
2. ファイルをスワップ領域とする # mkswap /swapfile
3. スワップ領域の有効化 # swapon /swapfile
4. スワップ領域を確認 # cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 1023996 0 -1 /swapfile file 51196 0 -2 スワップ領域の容量が50Mbyte増加された。元サイズ 1023996 + 追加 51196 = 1075192
# free total used free shared buffers cached Mem: 630888 308056 322832 176 16408 225700 -/+ buffers/cache: 65948 564940 Swap: 1075192 0 1075192
5. スワップ領域の無効化 # swapoff /swapfile |
ファイル管理
≫iノード(inode)
ファイルが作成される際、データ領域にファイルの実データが記録されるとともに、iノード領域に
ファイル情報(作成者、グループ、作成日時、サイズ等々の属性的な情報)が書き込まれる
ファイルやディレクトリが作成される際はiノード番号が割り振られる。iノード番号には上限がある
ディスク容量に余裕があっても、これを超えてファイルを作成することは出来ない
iノード番号の確認
$ ls -li anaconda-ks.cfg 134112 -rw-------. 1 root root 1486 11月 2 23:52 2015 anaconda-ks.cfg |
iノード領域の使用状況の確認
# df -i Filesystem Inodes IUsed IFree IUse% Mounted on Inodes列がiノード番号の上限 /dev/mapper/VolGroup-lv_root 544576 53641 490935 10% / tmpfs 78861 1 78860 1% /dev/shm /dev/sda1 128016 44 127972 1% /boot |
≫ハードリンク
「ファイル」の実態というのは、inodeと実データの部分の事だけで、「ファイル名」はディレクトリが管理している。
「inodeとファイル名とのつながり」の事をハードリンクといい、inodeに対してハードリンクは複数つくる事ができる。
ハードリンクを作成
$ ln test.txt test_ln.txt
$ ls -i1 test*.txt ファイルの実態を指すinode番号は同じ 142077 test.txt 142077 test_ln.txt
$ echo "test" > test.txt $ cat test_ln.txt inode番号(実態)が同じなので、どのファイル名で操作してもOK test
$ rm test.txt リンク元ファイルを削除しても $ ls -i 実態は消えない 142077 test_ln.txt |
≫シンボリックリンク
シンボリックリンクとは、Windowsでいうところのショートカットのようなもの
シンボリックリンクの作成
$ ln -s test.txt symlink.txt sオプションを付ける $ ls -l lrwxrwxrwx 1 vagrant vagrant 8 4月 9 15:06 2017 symlink.txt -> test.txt -rw-rw-r-- 1 vagrant vagrant 5 4月 9 14:43 2017 test.txt
シンボリックリンクのコピー $ cp -d symlink.txt symlink_cp.txt dオプションを付ける $ ls -l lrwxrwxrwx 1 vagrant vagrant 8 4月 9 15:06 2017 symlink.txt -> test.txt lrwxrwxrwx 1 vagrant vagrant 8 4月 9 15:09 2017 symlink_cp.txt -> test.txt -rw-rw-r-- 1 vagrant vagrant 5 4月 9 14:43 2017 test.txt |