wizzard: (Default)
wizzard ([personal profile] wizzard) wrote2009-09-12 02:26 pm
Entry tags:

И еще про линукс…

Вот там можно удалить запущенный executable. В этом, в общем-то, ничего страшного нет. Но.

1. Как при этом работает memory mapping?

2. Если там нету memory mapping, то как там работают SFX архивы и просто тяжелые бинарники?

[identity profile] lionet.livejournal.com 2009-09-12 11:50 am (UTC)(link)
Удаление файла на юниксовских файловых системах — это просто удаление каталожной записи и декремент ссылки на inode. Файл при этом остаётся, его просто нельзя адресовать (найти командой find, echo, ls; открыть через open/fopen). Как только последний пользователь этого файла исчезает (закрывается последний файловый дескриптор, ассоциированный с этим файлом), то количество ссылок уменьшается до нуля и файл удаляется уже полностью. inode переходит в список свободных.

[identity profile] lionet.livejournal.com 2009-09-12 12:04 pm (UTC)(link)
Это ок. А я правда могу создать много файлов, открыть их, удалить и забить место на диске?


Да.

Как при этом работают квоты?

По размеру живых инодов, которые являются ассоциированными с квотируемым пользователем (uid'ом).

[identity profile] lionet.livejournal.com 2009-09-12 11:52 am (UTC)(link)
Что касается SFX архивов, то их в юниксах традиционно нет.

Тяжелые бинарники — с ними плоховато. Если он скомпилирован статически, то ещё ничего, но если он скомбинирован динамически (да ещё написан на C++, с кучей зависимых символов), то есть вероятность что динамическая линковка в рантайме перелопатит столько страниц, что шаринг остальных практически перестанет иметь смысл.

[identity profile] lionet.livejournal.com 2009-09-12 12:09 pm (UTC)(link)
Don't get me started on windows. Там фичи не умножаются друг с другом, а делятся друг на друга.

[identity profile] lionet.livejournal.com 2009-09-12 12:20 pm (UTC)(link)
Don't get me started on linux as well ;)

BSD (FreeBSD, Mac OS X) и Solaris — наше всё.

wrt зоопарк конфигов — вот микрозадачка: засунь "Group Policy" в систему контроля версий.

[identity profile] lionet.livejournal.com 2009-09-12 12:53 pm (UTC)(link)
насколько OpenSolaris хуже\лучше просто солярки?

Нет first hand experience. По описаниям — одно и то же.

GPO, в принципе, это версионник унутре и есть. Т.е. он же не весь тупо копируется, если в домене менять настройки и пропагандировать их машинам :)

Вопрос в контроле и аудите изменений, а не в распространении.

Когда-то видел 3rd party редактор этих конфигов, значит, в худшем случае (бинарные) можно их конвертить туда-сюда в что-то текстовое.

Вот так всё в виндах. Пока какой-то чел бинарник с GUI не прикрутит, автоматизировать детали "на коленке" не представляется возможным. Unix — существенно более пластичный конструктор для нестандартных задач, чем не-юникс.

BTW2. А какие есть утилиты, которые умеют делать непострочный diff\merge?

К сожалению, одной, охватывающей всё, как (sdiff -Bb) утилиты нет, потому что это очень завязано на синтаксис.

Для XML/JSON, например.

xmldiff, diffxml, jsondiff, json-diff

[identity profile] lionet.livejournal.com 2009-09-12 02:31 pm (UTC)(link)
"На коленке" имеет существенный недостаток - отсутствие документированного API.

У твоего решения или у конфигов? У конфигов очень документированный API. Не путай API доступа к конфигурации (доступ к registry, например) к API самой конфигурации (что именно и на что именно там менять). В этом отношении, конфиги в юниксе гораздо более покрыты документацией, чем эти все policies. Причём, описание идёт от множества разработчиков: это в правилах хорошего тона, да и без описания нифига не заработает — конфиг пишется человеком. Но вот найди описание настроек для абстрактной виндовой программы? Не будет его: только ручки в GUI и какой-то птичий крап в сеттингах, который нужно реверс-инжинирить.

Толку с того, что есть униформный API к этому регистри?

Вплоть до того, что текстовый аутпут консольных программ становится интерфейсом, и локализация ломает все к чертям

LC_ALL=C никто никогда нигде не отменял.

[identity profile] sashman.livejournal.com 2009-09-12 02:47 pm (UTC)(link)
соляра = уг the unix way.

зы. экспириенс босса моего.

[identity profile] lionet.livejournal.com 2009-09-12 12:08 pm (UTC)(link)
1. Afair, Unix haters это не затрагивает, она слишком стара, чтобы современную систему линковки успеть включить.

2. Это не так страшно, как это малюют. Unix настолько более эффективен в других своих аспектах (например, зачем ему два раза бинарник запускать, если можно сделать fork()?), что эта деталь мало кому доставляет статистически заметные проблемы.

[identity profile] slobin.livejournal.com 2009-09-20 02:12 pm (UTC)(link)
Что касается SFX архивов, то их в юниксах традиционно нет.

Они там традиционно есть. На шелле. ;-) Ну да, так ходит гораздо меньше пакетов, чем rpm, deb или tar.gz, но периодически встречаются.

Ответ на исходный вопрос: файл жив, пока он кому-то нужен (суммарное количество записей о нём в разных каталогах плюс суммарное количество открытых с ним дескрипторов больше нуля). Может, ещё что-то в эту сумму входит, не соображу. Более того: если из всех каталогов вы его потёрли, а открытый дескриптор остался, то файл всё ещё можно восстановить (то есть дать ему имя в каком-нибудь каталоге).

... Бесплатный сюр бывает только в мюшеловке ...

[identity profile] lionet.livejournal.com 2009-09-20 02:16 pm (UTC)(link)
Они там традиционно есть. На шелле.

Ты про shar? ;) Юморист! Но да, таки-self-extracting ;)

[identity profile] slobin.livejournal.com 2009-09-20 08:57 pm (UTC)(link)
Ну, не только именно shar ;-) Например, нвидия раздаёт свои драйвера в формате, близком к шару, но сделанному какой-то другой паковалкой. Смысл именно такой, как у селф-экстракторов в винде -- отдать пользователю инсталлятор, который сам всё сделает.

... Вот жизнь - и миросозерцнуть некогда ...

[identity profile] lionet.livejournal.com 2009-09-20 02:17 pm (UTC)(link)
Более того: если из всех каталогов вы его потёрли, а открытый дескриптор остался, то файл всё ещё можно восстановить (то есть дать ему имя в каком-нибудь каталоге).

Тут я не соглашусь: стандартных средств это сделать нет. Можно, разве что, вытащить из открытого, но "стёртого" файла данные и записать в новый файл.

[identity profile] slobin.livejournal.com 2009-09-20 08:59 pm (UTC)(link)
Да, вы правы. Восстановить тот же самый файл вроде как нельзя без ухищрений, это я неправду сказал. А копирование открытого, если его по ошибке убили, делается стандартно:

cp /proc/процесс/fd/дескриптор новый.файл

... Я не волшебник, я уже научился ...

[identity profile] lionet.livejournal.com 2009-09-12 12:06 pm (UTC)(link)
Для обзорного ознакомления с юниксами на русском языке рекомендую книгу

http://www.ozon.ru/context/detail/id/2419365/