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