it-swarm-ru.tech

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

Разве unlink немного быстрее чем rm?

64
Marcin

Оба являются оберткой для одной и той же фундаментальной функции, которая является системным вызовом 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() как для каталогов, так и для файлов. Но если каталог является родительским для других каталогов и файлов, то ссылка на этого родительского элемента будет удалена, но дочерние элементы останутся висящими. Что меньше, чем идеал.

Edit:

Извините, уточнил разницу между unlink(1) и ​​unlink(2). Семантика все еще будет отличаться между платформами.

69
Dan Carley

На уровне спецификаций POSIX то, что rm делает, задается гораздо более точно, чем то, что nlink делает.

Переносимость результата, вероятно, будет лучше при использовании rm, если ваш скрипт должен работать в ОС.

8
Mike G.

Медленная часть удаления связана с кодом файловой системы и дисками, а не с подготовкой пользовательского пространства системным вызовом unlink ().

Т.е.: если разница в скорости имеет значение, то вам не следует хранить данные в файловой системе.

unlink это просто rm "light". У rm больше возможностей, но они делают то же самое.

4
Thomas