Jawaban:
Keduanya adalah pembungkus untuk fungsi dasar yang sama yaitu unlink()
panggilan sistem.
Untuk menimbang perbedaan antara penggunaan pengguna lahan.
rm(1)
:
unlink(1)
:
rm(1)
banyak argumen.Anda dapat menunjukkan perbedaannya dengan:
$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'
$ touch $(seq 1 100)
$ time rm $(seq 1 100)
real 0m0.048s
user 0m0.004s
sys 0m0.008s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done
real 0m0.207s
user 0m0.044s
sys 0m0.112s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done
real 0m0.167s
user 0m0.048s
sys 0m0.120s
Namun jika kita berbicara tentang panggilan yang tidak tercemar ke unlink(2)
fungsi sistem , yang sekarang saya sadari mungkin bukan apa yang Anda perhitungkan.
Anda dapat melakukan sistem unlink()
pada direktori dan file yang sama. Tetapi jika direktori tersebut adalah induk dari direktori dan file lain, maka tautan ke induk tersebut akan dihapus, tetapi anak-anak akan dibiarkan menggantung. Yang kurang ideal.
Sunting:
Maaf, diklarifikasi perbedaan antara unlink(1)
dan unlink(2)
. Semantik masih akan berbeda antar platform.
mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1
. Jika Anda membatalkan tautan direktori induk, maka ruang yang dikonsumsi oleh anak-anak harus hilang sampai saat fsck menemukan perbedaan tersebut.
Bagian lambat dari penghapusan adalah kode sistem file dan hal-hal disk, bukan persiapan userspace dari pemutusan sistem ().
Yaitu: jika perbedaan kecepatan penting, maka Anda tidak boleh menyimpan data pada sistem file.
batalkan tautan hanya "cahaya" rm. rm memiliki lebih banyak fitur tetapi mereka melakukan hal yang sama.