Назад | Перейти на главную страницу

В чем разница между unlink и rm?

Разве 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 больше возможностей, но они делают то же самое.