マウントとシンボリックリンクのコピー

引き続き、シンボリックリンクと、マウントです。
マウントから。

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内のファイルは、別ファイルなので、変更されませんでした。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA