(Linux)実写のガミラス星人はハードリンクで作れると思った(ln)

『SPACE BATTLESHIP ヤマト』(2010)
宇宙戦艦ヤマト世代としては、別物として見た方がよい映画ですね。アニメ版を知ってるなら、比較しながら楽しむってこともできるかもしれません。実写版を見たら懐かしくなって、アニメ版を見たくなったので今度レンタルに走ります。アニメ版での好きなシーンは、荒廃した褐色の地球が、何光年も離れたところからみると、まだ美しい青い地球ってところ。映像だけはタイムスリップできるって神秘です。私の宇宙への興味ってこういうところから生まれたかもしれません。

『SPACE BATTLESHIP ヤマト』のガミラス星人は、個と全体が同一で統一された意思で動くロボットみたいな星人でした。まるで、linuxのハードリンクだなあと思いましたので、今回はlnコマンドです。
上達の近道は土台づくりってことで、「左から右へ処理する」や「コピーいろいろ」ではcpコマンドの使い方を見直していましたが、今回も基礎ですね。lnコマンドは、
ln -s ファイル リンク名
で使うことが多いですが、今回は -sオプションを使うシンボリックリンクではなく、ハードリンクです。

~$ echo AAAAA>a
~$ cat a
AAAAA
~$ ls -l
合計 4
-rw-rw-r-- 1 takk takk 6  7月 30 22:35 a
~$ 

まずはハードリンクです。

~$ date +%T
22:37:43
~$ ln a b
~$ ls -l
合計 8
-rw-rw-r-- 2 takk takk 6  7月 30 22:35 a
-rw-rw-r-- 2 takk takk 6  7月 30 22:35 b
~$ head *
==> a <==
AAAAA

==> b <==
AAAAA
~$ stat *
  File: `a'
  Size: 6         	Blocks: 8          IO Block: 4096   通常ファイル
Device: 801h/2049d	Inode: 7745746     Links: 2
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    takk)   Gid: ( 1001/    takk)
Access: 2016-07-30 22:35:51.948811685 +0900
Modify: 2016-07-30 22:35:48.128811753 +0900
Change: 2016-07-30 22:39:56.184807346 +0900
 Birth: -
  File: `b'
  Size: 6         	Blocks: 8          IO Block: 4096   通常ファイル
Device: 801h/2049d	Inode: 7745746     Links: 2
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    takk)   Gid: ( 1001/    takk)
Access: 2016-07-30 22:35:51.948811685 +0900
Modify: 2016-07-30 22:35:48.128811753 +0900
Change: 2016-07-30 22:39:56.184807346 +0900
 Birth: -
~$ 

aもbも同じ内容になりました。
bの内容を書き換えてみます。

~$ date +%T
22:41:52
~$ vi b
~$ date +%T
22:42:13
~$ echo BBBBB>>b
~$ head *
==> a <==
AAAAA
BBBBB

==> b <==
AAAAA
BBBBB
~$ stat *
  File: `a'
  Size: 12        	Blocks: 8          IO Block: 4096   通常ファイル
Device: 801h/2049d	Inode: 7745746     Links: 2
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    takk)   Gid: ( 1001/    takk)
Access: 2016-07-30 22:42:17.824804829 +0900
Modify: 2016-07-30 22:42:15.908804863 +0900
Change: 2016-07-30 22:42:15.908804863 +0900
 Birth: -
  File: `b'
  Size: 12        	Blocks: 8          IO Block: 4096   通常ファイル
Device: 801h/2049d	Inode: 7745746     Links: 2
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    takk)   Gid: ( 1001/    takk)
Access: 2016-07-30 22:42:17.824804829 +0900
Modify: 2016-07-30 22:42:15.908804863 +0900
Change: 2016-07-30 22:42:15.908804863 +0900
 Birth: -
~$ 

ファイルbの内容を変えると、aの内容も変わりました。タイムスタンプも両方更新されています。

ファイルbを削除してみます。

~$ rm b
~$ head *
AAAAA
BBBBB
~$ stat *
  File: `a'
  Size: 12        	Blocks: 8          IO Block: 4096   通常ファイル
Device: 801h/2049d	Inode: 7745746     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    takk)   Gid: ( 1001/    takk)
Access: 2016-07-30 22:44:04.304802937 +0900
Modify: 2016-07-30 22:42:15.908804863 +0900
Change: 2016-07-30 22:43:59.740803018 +0900
 Birth: -
~$ 

ファイルbを消してもファイルaは残りました。
Linksが1に戻りました。
リンクファイルを増やしてみます。

~$ for i in b c d e;do ln a $i;done
~$ ls -l
合計 20
-rw-rw-r-- 5 takk takk 12  7月 30 22:42 a
-rw-rw-r-- 5 takk takk 12  7月 30 22:42 b
-rw-rw-r-- 5 takk takk 12  7月 30 22:42 c
-rw-rw-r-- 5 takk takk 12  7月 30 22:42 d
-rw-rw-r-- 5 takk takk 12  7月 30 22:42 e
~$ head * | pr -t5
==> a <==     ==> b <==	    ==> c <==	  ==> d <==	==> e <==
AAAAA	      AAAAA	    AAAAA	  AAAAA		AAAAA
BBBBB	      BBBBB	    BBBBB	  BBBBB		BBBBB
~$ stat -t *
a 12 8 81b4 1001 1001 801 7745746 5 0 0 1469886487 1469886135 1469886476 0 4096
b 12 8 81b4 1001 1001 801 7745746 5 0 0 1469886487 1469886135 1469886476 0 4096
c 12 8 81b4 1001 1001 801 7745746 5 0 0 1469886487 1469886135 1469886476 0 4096
d 12 8 81b4 1001 1001 801 7745746 5 0 0 1469886487 1469886135 1469886476 0 4096
e 12 8 81b4 1001 1001 801 7745746 5 0 0 1469886487 1469886135 1469886476 0 4096
~$ 

9番目のフィールドがLinksです。全ファイル数の5となっています。
もともとのファイルaを削除するとどうなるでしょう。

~$ rm a
~$ stat -t *
b 12 8 81b4 1001 1001 801 7745746 4 0 0 1469886487 1469886135 1469886668 0 4096
c 12 8 81b4 1001 1001 801 7745746 4 0 0 1469886487 1469886135 1469886668 0 4096
d 12 8 81b4 1001 1001 801 7745746 4 0 0 1469886487 1469886135 1469886668 0 4096
e 12 8 81b4 1001 1001 801 7745746 4 0 0 1469886487 1469886135 1469886668 0 4096
~$ head * | pr -t4
==> b <==	  ==> c <==	    ==> d <==	      ==> e <==
AAAAA		  AAAAA		    AAAAA	      AAAAA
BBBBB		  BBBBB		    BBBBB	      BBBBB
		  		    
~$ 

aが削除されても、他ファイルはそのままです。
もちろん、残ったファイルで内容は共有されます。

~$ echo CCCCC>>e
~$ head * | pr -t4
==> b <==	  ==> c <==	    ==> d <==	      ==> e <==
AAAAA		  AAAAA		    AAAAA	      AAAAA
BBBBB		  BBBBB		    BBBBB	      BBBBB
CCCCC		  CCCCC		    CCCCC	      CCCCC
		  		    
~$ 

コメント

タイトルとURLをコピーしました