Разве unlink быстрее, чем rm?
Оба являются оболочкой одной и той же фундаментальной функции, которая является unlink()
системный вызов.
Чтобы взвесить различия между утилитами пользовательского пространства.
rm(1)
:
unlink(1)
:
rm(1)
несколько аргументов.Вы можете продемонстрировать разницу с помощью:
$ 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
Если же мы говорим о неподдельном звонке в систему unlink(2)
функция, которую я теперь понимаю, вероятно, не то, что вы учитываете.
Вы можете выполнить систему unlink()
в каталогах и файлах. Но если каталог является родительским для других каталогов и файлов, тогда ссылка на этот родительский элемент будет удалена, а дочерние элементы останутся висящими. Что далеко не идеально.
Редактировать:
Извините, уточнил разницу между unlink(1)
и unlink(2)
. Семантика по-прежнему будет отличаться для разных платформ.
На уровне спецификации POSIX, что rm действительно определяется гораздо точнее, чем то, что разорвать связь делает.
Переносимость результата, вероятно, будет лучше при использовании rm, если ваш сценарий должен работать в ОС.
Медленная часть удаления - это код файловой системы и дисковый материал, а не подготовка пользовательского пространства к системному вызову unlink ().
То есть: если разница в скорости имеет значение, вы не должны хранить данные в файловой системе.
unlink - это просто рм "свет". У rm больше возможностей, но они делают то же самое.