Каково различие между, удаляют связь и комната?

Я сказал бы, что здание, Ваше собственное стоит своего веса в изучении значения - но для чего-то, что работает бесшумно, Вам, вероятно, придется провести некоторое исследование на играющих/разгоняющих сайтах для нахождения наилучших вариантов в тихих вентиляторах и источниках питания.

pricewatch.com является отличным способом соответствовать затратам, после того как Вы знаете, какие части Вы берете.

64
задан 10 July 2009 в 11:49
3 ответа

Оба - обертка к той же фундаментальной функции, которая является 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). Семантика все еще собирается отличаться между платформой.

68
ответ дан 28 November 2019 в 19:31
  • 1
    Это означает, что в файловых системах Unix, удаляющих каталог и рекурсивно, все файлы под ним всегда будут операцией, которая пропорциональна количеству файлов/директоров, которые это содержит? Когда происходит, когда я удаляю связь с каталогом, который является родителем другим директорам/файлам? Это никогда не вытирается, и я потерял это пространство навсегда? –  Marcin 10 July 2009 в 12:46
  • 2
    Это - технически возможный отпуск осиротевшие каталоги/файлы на большинстве если не все файловые системы. Фиксация этого обычно означает выполнять инструмент восстановления файловой системы. На Unix/Linux эти инструменты известны как ' fsck' и некоторые определенные изменения для различных файловых систем. Если они действительно восстанавливают что-то, что они будут обычно оставлять его в каталоге названным ' lost+found' –  ConcernedOfTunbridgeWells 10 July 2009 в 13:01
  • 3
    Корректный. комната рекурсивно вызовет от нижней части дерева. Можно продемонстрировать как с: mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1. Если Вы удалили связь с родительским каталогом, затем располагают с интервалами использованный детьми, должен быть потерян до такого времени, когда fsck находит несоответствие. –  Dan Carley 10 July 2009 в 13:03
  • 4
    О чем Вы? $ mkdir-p 1/2/3$ удаляют связь 1, удалите связь: не может удалить связь '1': каталог Users, вызывающий " memory" утечка, требующая fsck? Вряд ли! –  Thomas 10 July 2009 в 14:36
  • 5
    И страницы справочника Linux и FreeBSD явно указывают, что это перестанет работать, когда попытка работать удаляет связь () на каталоге. –  Thomas 10 July 2009 в 14:44

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

Мобильность результата кажется вероятной лучше использовать комнату, если Ваш сценарий должен натыкаться на ОС.

8
ответ дан 28 November 2019 в 19:31

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

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

удалите связь просто комната "свет". комната имеет больше функций, но они делают то же самое.

4
ответ дан 28 November 2019 в 19:31

Теги

Похожие вопросы