ファイルシステム コンピュータリテラシ 2016 年 5 月 2 日 建 部 修 見
ファイルシステム ファイルを 管 理 するシステム ハードディスク USBなど 階 層 的 な 名 前 空 間 UNIXは/(ルートディレクトリ)から 始 まる 単 一 な 名 前 空 間 / ディレクトリ ファイル /usr/bin/cal アクセス 制 御 所 有 者 所 有 グループ その 他 読 込 可 書 込 可 実 行 可 usr bin home bin local foo cal
リモートファイルシステム ネットワークで 接 続 したファイルサーバが 管 理 するファイルシステム Network File System (NFS; 1984 Sun Microsystems), CIFS (Microsoft) 複 数 の 計 算 機 でファイルシステムを 共 有 マウント 他 のファイルシステムを 使 えるようにする 操 作 マウントポイント /home
パス 名 ディレクトリ 名 を / で 区 切 る Windowsは 絶 対 パス(/で 始 まる) /usr/bin/cal 現 在 のディレクトリからの 相 対 パス bin/cal 現 在 のディレクトリは. 親 ディレクトリは.. で 表 す../bin/cal,../../bin/cal,./bin/cal
リンク 同 一 のファイル(エントリ)を 指 す ハードリンク 同 一 エントリへのリンク リンクカウント ファイルを 移 動 してもリンクは 切 れない 同 一 ファイルシステム 内 しかリンクできない シンボリックリンク 別 エントリ リンク 先 エントリへのパス 名 を 保 持 ファイルを 移 動 するとリンク 切 れ 別 ファイルシステムにもリンク 可 能 home foo bar baz file home foo bar baz file file 以 下 のパス 名 を 保 持../../foo/file
アクセス 制 御 ファイルやディレクトリに 対 するアクセス 制 御 UNIXでは 基 本 的 にはuser( 所 有 者 ) group(グループ) other(そ れ 以 外 )に 対 しアクセス 制 御 読 込 可 / 不 可 書 込 可 / 不 可 実 行 可 / 不 可 ディレクトリの 実 行 権 限 はディレクトリへのアクセス 可 / 不 可 setuid (set user ID on execution), setgid (set group ID on execution) 所 有 者 グループの 権 限 でプログラムを 実 行 sticky bit(ディレクトリに 対 する 特 別 なアクセス 制 御 ) 所 有 者 しか 移 動 削 除 不 可 アクセス 制 御 リスト(ACL)でより 詳 細 に 制 御 特 定 ユーザ 特 定 グループに 対 しアクセス 制 御 Mac OS Xでは 削 除 可 / 不 可 アペンド 可 / 不 可 なども
拡 張 属 性 拡 張 属 性 名 と 値 Linuxでは 属 性 名 に 名 前 空 間 があり user 名 前 空 間 は 設 定 可 能 Mac OS Xは 名 前 空 間 はない
典 型 的 なUNIXのディレクトリ 構 造 /bin 最 低 限 の 実 行 プログラム /dev デバイスファイル /etc 各 種 設 定 ファイル /home 各 自 のホームディレクトリ /sbin 最 低 限 の 管 理 用 実 行 プログラム /tmp 一 時 ファイル /usr ユーザ 共 通 のプログラムなど /var ログファイルなど
COINSのマウント 状 況 $ df -PH Filesystem Size Used Avail Capacity Mounted on /dev/disk0s6 200G 124G 75G 63% / devfs 190k 190k 0B 100% /dev map -hosts 0B 0B 0B 100% /net map auto_nfs 0B 0B 0B 100% /home map auto_nfs 0B 0B 0B 100% /usr/local3 pentas-fs.coins.tsukuba.ac.jp:/vol0/home 3.7G 692M 3.0G 19% /home pentas-fs.coins.tsukuba.ac.jp:/vol0/local3 107G 23G 85G 22% /usr/local3 /はローカルディスク(/dev/disk0s6) /homeと/usr/local3はpentas-fsをマウント 全 計 算 機 がマウントしているためどの 計 算 機 でも 同 一 ファイルにアクセス 可 能
ホームディレクトリ loginしたときのディレクトリ ユーザが 読 み 書 き 可 能 なディレクトリ ~(チルダ)で 表 される
ディレクトリリスティングとパミッション lsコマンド ディレクトリリスティング $ ls -l total 23626 drwx------ 2 tatebe prof 6144 Apr 18 17:16 Desktop drwx------ 2 tatebe prof 2048 Apr 18 17:25 Documents drwx------ 2 tatebe prof 1024 Apr 26 16:42 Downloads drwx------@ 25 tatebe prof 1024 Apr 19 20:26 Library drwx------ 8 tatebe prof 1024 Apr 26 18:00 Mail drwx------ 10 tatebe prof 1024 Apr 26 17:33 Maildir drwxr-xr-x 2 tatebe prof 80 Apr 18 17:22 Music... パミッション drwxr-xr-x user group other d ディレクトリ - ファイル r 読 込 可 w 書 込 可 x 実 行 可
-aオプション $ ls -la total 23760 drwxr-xr-x 38 tatebe prof 4096 Apr 30 11:23. drwxr-xr-x 98 root wheel 4096 Apr 12 10:03.. -rw-r--r-- 1 tatebe prof 5 Feb 25 2014.CFUserTextEncoding -rw------- 1 tatebe prof 930 Apr 18 17:22.ICEauthority drwx------ 2 tatebe prof 2048 Apr 13 11:43.Trash -rw------- 1 tatebe prof 130 Apr 13 12:29.Xauthority -rw------- 1 tatebe prof 4096 Apr 13 11:30._Library drwxr-xr-x 2 tatebe prof 80 Apr 13 11:52.abrt -rw------- 1 tatebe prof 6502 Apr 30 11:25.bash_history -rw-r--r-- 1 tatebe prof 164 Feb 25 2014.bash_logout -rw-r--r-- 1 tatebe prof 218 Feb 25 2014.bash_profile -rw-r--r-- 1 tatebe prof 161 Apr 19 17:33.bashrc... パミッション 所 有 者 グループ リンクカウント サイズ 修 正 日 時 エントリ 名
パミッション 変 更 chmodコマンド パミッション 変 更 $ chmod g+w entry #groupに 書 込 許 可 $ chmod o+w entry #otherに 書 込 許 可 $ chmod u-w entry #userに 書 込 不 許 可 $ chmod 755 entry #rwxr-xr-xに 変 更 パミッションを8 進 数 で 表 現 7 5 5 111 101 101
ファイル ディレクトリ 操 作 コマンド 操 作 コマンド 例 cp src dest ファイルコピー cp a b cp src dest-dir 複 数 ファイルをコピー cp a1 a2 a3 dir mv src dest ファイルを 移 動 mv a b mv src dest-dir 複 数 ファイルを 移 動 mv a1 a2 a3 dir rm file ファイルを 削 除 rm a mkdir dir ディレクトリ 作 成 mkdir foo rmdir dir 空 ディレクトリ 削 除 rmdir foo ln target linkname ハードリンク 作 成 ln a b ln -s target symlinkname シンボリックリンク 作 成 ln -s a b コピーとリンクの 違 い コピーは 同 一 ファイルがコピーされ ストレージ 容 量 を 余 分 に 必 要 とするが リンクは 同 一 ファイルが 参 照 され 余 分 なストレージ 容 量 は 必 要 ない
ファイル 操 作 コマンド 操 作 コマンド 例 cat file1... ファイルを 結 合 して 出 力 cat a head file ファイルの 先 頭 10 行 (デ フォルト)を 出 力 tail file ファイルを 後 ろ10 行 (デフォ ルト)を 出 力 head a tail a echo string 指 定 された 文 字 列 を 表 示 echo hello, world echo string > file echo string >> file 指 定 された 文 字 列 をファイ ルに 書 き 込 み 指 定 された 文 字 列 をファイ ルに 追 記 (アペンド) echo hello, world > file echo hello, world >> file
演 習 (1) 手 引 きの2.2 節 から2.7 節 を 読 もう ホームディレクトリに 対 しls ls -l ls -a ls -alを 実 行 して みよう オプションの 意 味 をマニュアルページで 確 認 しよう ディレクトリfooを 作 成 してみよう cdコマンドでディレクトリを 移 動 することができる cd fooで 先 ほど 作 ったディレクトリに 移 動 してみよう そこで ls ls -l ls -a ls -alを 実 行 してみよう cdコマンドをディレクトリを 指 定 しないで 実 行 すると ホームディレクトリに 移 動 する ホームディレクトリに 移 動 してみよう
演 習 (2) whichコマンドで 実 行 するプログラムがどこに 格 納 さ れているか 分 かる which lsを 実 行 して lsコマンドの 格 納 先 を 調 べよう lsコマンドを 先 ほど 作 成 したディレクトリfooにmylsとい う 名 前 でコピーしてみよう 今 コピーしたmylsコマンドを 実 行 してみよう 実 行 する ためには パス 名 でmylsを 指 定 する ホームディレクトリにいる 場 合 は mylsはディレクトリfooに あるので foo/mylsで 指 定 できる ディレクトリfooに 移 動 した 場 合 は いまいるディレクトリは. で 表 されるので./mylsで 指 定 できる いまいるディレクトリはpwdコマンドで 分 かる
演 習 (3) lsコマンドへのハードリンクls1をディレクトリfooに 作 成 してみよう エラーが 出 る 場 合 はどのような エラーが 出 るか?どうしてそのエラーが 出 るか 考 えてみよう mylsコマンドへのハードリンクls1をディレクトリfoo に 作 成 してみよう ls1を 実 行 してみよう lsコマンドへのシンボリックリンクls2をディレクトリ fooに 作 成 してみよう ls2を 実 行 してみよう
演 習 (4) mylsの 実 行 権 限 を 落 としてみよう 実 行 権 限 がなくなっているか 確 認 しよう mylsを 実 行 するとどのようなエラーがでるか ディレクトリfooでls -laを 実 行 して リンクカウ ントを 調 べよう ハードリンクしたファイルのリ ンクカウントが 増 えていることを 確 認 しよう ls -laの 出 力 を>(リダイレクト)を 用 いてファイ ルfoo.txtに 書 き 出 し ファイルfoo.txtを 提 出 し よう
オプション 演 習 (1) ホームディレクトリでls -lを 実 行 すると@が 表 示 されるエントリがある この 意 味 を 調 べよう その 内 容 を 表 示 しよう ファイルを 作 成 して 任 意 の 拡 張 属 性 をつけ てみよう
オプション 演 習 (2) ディレクトリのリンクカウントは 何 を 表 している か 調 べよう そのために ディレクトリを 作 成 しリンクカウントを 調 べる そのディレクトリにファイルを 作 成 してリンクカウン トを 調 べる そのディレクトリにディレクトリを 作 成 してリンクカ ウントを 調 べる
オプション 演 習 (3) lsコマンドに-iオプションをつけるとiノード 番 号 が 表 示 される iノードとはファイルやディレク トリの 情 報 を 格 納 するデータ 構 造 であり iノー ド 番 号 はその 番 号 である iノード 番 号 が 同 じ であれば 同 一 エントリ( 同 一 ファイル)である mylsとls1のiノード 番 号 が 等 しいことを 確 かめ よう
オプション 演 習 (4) 以 下 の 内 容 のファイルgeteuid.cを 作 成 しよう #include <unistd.h> #include <sys/types.h> #include <stdio.h> main() { printf("%d n", geteuid()); } このCプログラムをコンパイルして 実 行 ファイルgeteuidを 作 成 しよう $ cc -o geteuid geteuid.c 実 行 してみよう 他 の 人 に 実 行 してもらおう setuid (set user ID on execution) bitをつけよう ls -lで 確 かめよう 他 の 人 に 実 行 してもらおう