【Linux】mvとcp+rmの違い

ファイルをmvするのと、cpしてから元ファイルをrmで消すのは一見して同じ挙動のように見えます。自分もそう思っていたのですが、微妙に挙動が異なることに気づいたので、違いをまとめます。

結論

先に結論から書いておくと、mvとcp+rmの違いは、

  • mvはinode番号が変わらない
  • cp+rmはinode番号が変わる

です。

検証

それではinode番号について、mvの場合とcp+rmの場合とで検証してみます。

mvの場合

ファイルを用意してinode番号を確認します。 inode番号は、lsコマンドのiオプション使えば確認することができます。

# ファイルを作成
$ touch hoge.txt

# inode番号を確認
$ ls -i hoge.txt 
1085901 hoge.txt

mvでファイルを移動して、移動後のファイルのinode番号を確認します。

$ mv hoge.txt fuga.txt
$ ls -i fuga.txt
1085901 fuga.txt

inode番号が変わっていないことが確認できました。

cp + rmの場合

inode番号を確認します。

# コピー前のinode番号を確認
$ ls -i fuga.txt
1085901 fuga.txt

cpでファイルをコピーして、rmでコピー前のファイルを削除します。その後、コピー後のファイルのinode番号を確認します。

$ cp fuga.txt piyo.txt
$ rm fuga.txt

$ ls -i piyo.txt 
1084259 piyo.txt

inode番号が変わったことを確認できました。

コメント