399 文字
2 分
【Linux】mvとcp+rmの違い
2019-10-27

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

結論#

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

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

です。

検証#

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

mvの場合#

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

Terminal window
# ファイルを作成
$ touch hoge.txt
# inode番号を確認
$ ls -i hoge.txt
1085901 hoge.txt

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

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

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

cp + rmの場合#

inode番号を確認します。

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

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

Terminal window
$ cp fuga.txt piyo.txt
$ rm fuga.txt
$ ls -i piyo.txt
1084259 piyo.txt

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