ファイルを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番号が変わったことを確認できました。
コメント