引き続き、シンボリックリンクと、マウントです。
マウントから。
takk@deb9:~/tmp$ ls takk@deb9:~/tmp$ mkdir a b takk@deb9:~/tmp$ sudo mount --bind a b takk@deb9:~/tmp$ echo HELLO >a/file1
aをbにマウントします。
(ん? bをaにマウント? まあ、どちらから見ても装着には違いないから、aをbにマウントってことにしておきます)
マウントポイントであるbを、コピーして、cを生成。
takk@deb9:~/tmp$ cp -r b c takk@deb9:~/tmp$
statで確認すると、
takk@deb9:~/tmp$ stat a b c File: a Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ Device: 801h/2049d Inode: 814704 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:12:04.550007000 +0900 Modify: 2018-06-26 22:11:50.350911000 +0900 Change: 2018-06-26 22:11:50.350911000 +0900 Birth: - File: b Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ Device: 801h/2049d Inode: 814704 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:12:04.550007000 +0900 Modify: 2018-06-26 22:11:50.350911000 +0900 Change: 2018-06-26 22:11:50.350911000 +0900 Birth: - File: c Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ Device: 801h/2049d Inode: 815735 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:12:04.550007000 +0900 Modify: 2018-06-26 22:12:04.550007000 +0900 Change: 2018-06-26 22:12:04.550007000 +0900 Birth: - takk@deb9:~/tmp$
aとbは、同一Inodeですが、cは別Inodeです。
各ディレクトリのファイルは、すでにcの下のファイルのタイムスタンプがずれています。
takk@deb9:~/tmp$ ls -l */* -rw-r--r-- 1 takk takk 6 6月 26 22:11 a/file1 -rw-r--r-- 1 takk takk 6 6月 26 22:11 b/file1 -rw-r--r-- 1 takk takk 6 6月 26 22:12 c/file1 takk@deb9:~/tmp$
a内のfile1の名前を変更してみます。当然、b内のファイルも名前が変更されます。c内のファイルは、最初から別ファイルなので、変更されてません。
takk@deb9:~/tmp$ mv a/file1 a/file999 takk@deb9:~/tmp$ takk@deb9:~/tmp$ ls -l */* -rw-r--r-- 1 takk takk 6 6月 26 22:11 a/file999 -rw-r--r-- 1 takk takk 6 6月 26 22:11 b/file999 -rw-r--r-- 1 takk takk 6 6月 26 22:12 c/file1 takk@deb9:~/tmp$ takk@deb9:~/tmp$
では、作成したディレクトリを削除して、次はシンボリックリンクを確認します。
takk@deb9:~/tmp$ sudo umount b takk@deb9:~/tmp$ ls a b c takk@deb9:~/tmp$ rm -rf * takk@deb9:~/tmp$ ls takk@deb9:~/tmp$
前回同様にディレクトリaを作り、シンボリックリンクbを作り、a内に適当にファイルを作成。
takk@deb9:~/tmp$ mkdir a takk@deb9:~/tmp$ ln -s a b takk@deb9:~/tmp$ echo HELLO >a/file1 takk@deb9:~/tmp$
bを、cにコピーします。
takk@deb9:~/tmp$ cp -r b c takk@deb9:~/tmp$
各statを確認。
takk@deb9:~/tmp$ stat a b c File: a Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ Device: 801h/2049d Inode: 814704 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:17:47.073183000 +0900 Modify: 2018-06-26 22:17:54.833060999 +0900 Change: 2018-06-26 22:17:54.833060999 +0900 Birth: - File: b -> a Size: 1 Blocks: 0 IO Block: 4096 シンボリックリンク Device: 801h/2049d Inode: 547072 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:17:59.351318999 +0900 Modify: 2018-06-26 22:17:49.226259001 +0900 Change: 2018-06-26 22:17:49.226259001 +0900 Birth: - File: c -> a Size: 1 Blocks: 0 IO Block: 4096 シンボリックリンク Device: 801h/2049d Inode: 547074 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:17:59.351318999 +0900 Modify: 2018-06-26 22:17:59.351318999 +0900 Change: 2018-06-26 22:17:59.351318999 +0900 Birth: - takk@deb9:~/tmp$
bは当然、aのシンボリックリンクですが、コピーしたcも、aのシンボリックリンクとなりました。
現在の各ディレクトリのファイル。
takk@deb9:~/tmp$ takk@deb9:~/tmp$ ls -l */* -rw-r--r-- 1 takk takk 6 6月 26 22:17 a/file1 -rw-r--r-- 1 takk takk 6 6月 26 22:17 b/file1 -rw-r--r-- 1 takk takk 6 6月 26 22:17 c/file1 takk@deb9:~/tmp$
同じように、a内のfile1の名前を変更します。
takk@deb9:~/tmp$ mv a/file1 a/file999 takk@deb9:~/tmp$
bもcも、aのシンボリックリンクなので、同じように変更されました。
takk@deb9:~/tmp$ ls -l */* -rw-r--r-- 1 takk takk 6 6月 26 22:17 a/file999 -rw-r--r-- 1 takk takk 6 6月 26 22:17 b/file999 -rw-r--r-- 1 takk takk 6 6月 26 22:17 c/file999 takk@deb9:~/tmp$
では、作ったディレクトリを削除します。
takk@deb9:~/tmp$ rm -rf *
次は、b を cにコピーする際、シンボリックリンクを辿ってコピーします。
takk@deb9:~/tmp$ mkdir a takk@deb9:~/tmp$ ln -s a b takk@deb9:~/tmp$ echo HELLO >a/file1 takk@deb9:~/tmp$ takk@deb9:~/tmp$ cp -rH b c takk@deb9:~/tmp$
各statを確認。
takk@deb9:~/tmp$ stat a b c File: a Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ Device: 801h/2049d Inode: 814704 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:20:10.304763000 +0900 Modify: 2018-06-26 22:19:59.587406999 +0900 Change: 2018-06-26 22:19:59.587406999 +0900 Birth: - File: b -> a Size: 1 Blocks: 0 IO Block: 4096 シンボリックリンク Device: 801h/2049d Inode: 547072 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:20:10.304763000 +0900 Modify: 2018-06-26 22:19:54.977103000 +0900 Change: 2018-06-26 22:19:54.977103000 +0900 Birth: - File: c Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ Device: 801h/2049d Inode: 815731 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-26 22:20:10.304763000 +0900 Modify: 2018-06-26 22:20:10.304763000 +0900 Change: 2018-06-26 22:20:10.304763000 +0900 Birth: - takk@deb9:~/tmp$
cは、シンボリックリンクではなく、ディレクトリとなりました。
c内のファイルは、コピーされたものなので、タイムスタンプがコピー時点に更新されていますね。
takk@deb9:~/tmp$ takk@deb9:~/tmp$ ls -l */* -rw-r--r-- 1 takk takk 6 6月 26 22:19 a/file1 -rw-r--r-- 1 takk takk 6 6月 26 22:19 b/file1 -rw-r--r-- 1 takk takk 6 6月 26 22:20 c/file1 takk@deb9:~/tmp$
a内のfile1の名前を変更。
takk@deb9:~/tmp$ mv a/file1 a/file999 takk@deb9:~/tmp$ takk@deb9:~/tmp$ ls -l */* -rw-r--r-- 1 takk takk 6 6月 26 22:19 a/file999 -rw-r--r-- 1 takk takk 6 6月 26 22:19 b/file999 -rw-r--r-- 1 takk takk 6 6月 26 22:20 c/file1 takk@deb9:~/tmp$
c内のファイルは、別ファイルなので、変更されませんでした。
コメント