21

Re: Копилка опыта

Интересно.. я вот тоже все думаю да как все систематизировать, столько всяких вещичек переделано. .а уже забываю что и делал то.. сохранения ссылок - они у меня теряются часто, уже раза 3 зарекался, а все равно ссылками храню.. печатать куда-то.. печатаю в блог, но когда есть время и не все что мог бы.. Хорошая идея!

Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com

22

Re: Копилка опыта

Блог? Ссылку в студию, может на главную добавим?

http://www.e-lug.ru/about/ -- Вся контактная информация
http://groups.google.com/group/e_lug -- Рассылка
e-lug@conference.jabber.ru -- Комната в Jabber

23

Re: Копилка опыта

tinman321 пишет:

Блог? Ссылку в студию, может на главную добавим?

Ну как бы у него в подписи чётко прописано: http://gardarea51.blogspot.com/

С уважением, Кирилл Ширшов [remalloc];
Координатор Екатеринбургской Группы Пользователей GNU/Linux [http://www.e-lug.ru/]
Главный редактор веб-проекта rusnix.ru [http://www.rusnix.ru/]
Тех. Сопровождающий Ekaterinburg Runtu Team [http://ekb.runtu.org/]

24

Re: Копилка опыта

ну как бы у меня подписи отключены

http://www.e-lug.ru/about/ -- Вся контактная информация
http://groups.google.com/group/e_lug -- Рассылка
e-lug@conference.jabber.ru -- Комната в Jabber

25

Re: Копилка опыта

А я прикупил несколько блокнотиков маленьких на 80 листов (на пружинке) в одном я пишу проблемы и их решения, во второй пишу конкретные статьи по настройке чего либо ну или синтаксис некоторых команд, а так я поставил сервачок с DocuWiki и там пишу все свои статьи в электронном виде, докувики тем хорош - его чтоб зарезервировать - достаточно просто скопировать папку с ним, ни каких баз не использует итд, при этом иногда линки кидаю кое кому, чтоб чето не разъяснять по 10 раз.

Так вот! Давно пора мыслить шире, видеть глубже и ярче,
Чем просто кидать камни в тех, кто думает иначе!
Это не значит, что нужно брататься с кем попало,
Но важно, чтобы идея объединяла и результат давала.
(с) Ю.Г.

26

Re: Копилка опыта

Как записать образ на диск


Поделюсь опытом записи дистрибутивов на CD, только сделаю это несколько шире.


Итак, вопрос первый -- где взять дистрибутив?

Диск можно заказать прислать по почте. За диском можно сбегать к другу в соседний подъезд. Но все это немного не те случаи. Я хочу поведать о закачке дистрибутива через инет. Поскольку I Love Ubuntu я буду вещать только про нее.

Я скачиваю дистрибутивы с зеркала http://mirror.yandex.ru/ . Почему отсюда -- а потому, что отсюда у меня качается довольно-таки легко. Топаем по ссылке и заходим на сайт.

Как видите, здесь до фига и более всяких дистрибутивов. Качать - не перекачать! Но нам все не нужны, нам нужен только Ubuntu. Поэтому опускаемся в директорий ubuntu-releases и там находим нужную версию. Допустим, нам нужна Ubuntu 9.10. Опускаемся в одноименный директорий и опять охреневаем от множества файлов разных версий. Как я уже говорил -- все они нам не нужны.

Во первых, нам нужен образ диска, размер которого чуть менее размера диска CD, поэтому мелкие файлы можно смело игнорировать. Кроме того, нам нужен дистрибутив только для установки на домашний комп. Поэтому, игнорируем дистрибутивы для создания серверов и дистрибутивы для установки на нетбуки. Нам также не нужны альтернативные дистрибутивы. Но оставшихся файлов все еще несколько штук!

Допустим, у нас  обычный не навороченный комп на базе Intel или AMD. Поэтому выбираем дистр в названии которого присутствует "i386". Все остальное не про нас, нам оно не подойдет. В итоге остается один единственный файл -- ubuntu-9.10-desktop-i386.iso

Смотрите, как все просто -- все отражено в названии файла:
ubuntu -- название дистрибутива
9.10 -- версия
desktop -- тип
i386 -- для какого железа
.iso -- формат файла-дистрибутива (образ, слепок 1:1, для создания CD диска-оригинала)


Вопрос второй -- как получить?

Найти-то мы нашли, но как его получить сюда? Должен вам сообщить, что самая трудная часть пройдена. Получить файл намного легче, чем найти. Допустим, у вас FireFox. Топайте правой кнопочкой мышки по файлу и в контекстном меню выбирайте пункт "Сохранить объект как...". Выскочит окно, в нем укажите место, где будете потом искать файл дистрибутива. Я обычно делаю это на "Рабочий стол" или непосредственно в свою "Домашнюю папку", но можно направить файл в директорий "Закачки". Кому как нравится. Не важно, где будет лежать файл. Важно не забыть про него потом, и важно, чтобы было удобно с ним работать.

Еще один способ копирования -- это просто взять мышкой и перетащить значок файла на "Рабочий стол" или в окно файлового менеджера. Я думаю, что способов копирования достаточно много smile

Вот мы получили файло к себе на комп "ичё дальше?" А дальше нам нужно убедиться, что файл пришел к нам неповрежденный. Ну типа всякое бывает по пути. Для гарантии того, что инфа попути не сломалась, существует способ подсчета так называемой контрольной суммы. Правило простое -- нужно просто сложить все байты вместе smile и получить какое-то характеристическое число. Бухгалтеры это дело очень любят и душевно его называют "баланс". Только мы с вами ниразу не бухгалтеры и простое суммирование нам не прет. Будем суммировать по особому алгоритму! Не пугайтесь, -- "уже все украдено до нас!" (с), нам не придется делать сто-то суперсложное.

Итак, запускаем окно консоли и набираем в нем команду
md5sum ubuntu-9.10-desktop-i386.iso

Комп, уйдет в глубокую задумчивость на некоторое время. Все зависит от мощности компа и от того, лежит-ли еще файл в буфере (в оперативе) или уже полностью записан на диск и буфер очищен. Короче, замирание будет варьироваться от нескольких секунд до минут. Ждите!

По окончании процесса комп выдаст в консоль жуткодлинноепочтинечитаемоечисло, это и есть контрольная сумма (КС). Теперь нужно найти на сайте файл MD5SUM и тоже скачать его на комп. Хотя это есть текстовый файл, но мне не удалось его открыть в браузере. Найдите в этом файле название скаченного дистрибутива и убедитесь, что КС совпадают.


Вопрос три -- И-и?

Теперь вставляем в CD-привод чистого болвана. Затем жмакаем правой кнопочкой по файлу дистрибутива. В выскочившем меню выбираем пункт "Записать на диск...". Появится окно в котором нужно выбрать CD-привод (если у вас их два и более smile ) и установить скорость записи. Я рекомендую делать скорость не выше 20х. Самые надежные записи у меня получаются при скорости 12х-16х. Записанные диски я даже не проверяю. Качество 100%.

Ну вот и все! Нажимаем кнопку "Запись" и идем пить кофе. Через 6-10 минут качественно записанный дистрибутив будет у вас готов.

Ну что, получается, что нарезать дистр на диск быстрее и проще, чем все это читать? smile

Отредактировано zhevak (2010.02.18 19:01)

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.

27

Re: Копилка опыта

Как покрасить консоль

Иногда бывает так, что надоедает черно-белая консоль и хочется в жизнь привнести немного весны.

Находим в домашнем директории конфигурационный файл .bashrc (точка в начале его имени говорит, что он скрытый).
В нем находим строку #force_color_prompt=yes. У меня это 39-я строка. Снимаем комментарий (убираем символ #).
Сохраняем. Теперь вновь открытые консоли будут подсвечены красками.

Юзайте на здоровье! smile

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.

28

Re: Копилка опыта

Начинающим: Что такое консоль?
(Кросс-пост с Образовательного Портала http://proekta.ru/html/modules.php?name … start=255)

Цитата:

yikes yikes yikes yikes перестань меня пугать, я даже не знаю куда они вводятся

Это называется -- консоль. У Венды есть, я не побоюсь этого слова, -- жалкий аналог консоли. Называется он -- командная строка. В лине, как правило шесть текстовых консолей и одна графическая, в которой, собственно Вы и работаете. Переключиться в любую консоль можно с помощью Ctrl-Alt-Fn, где n = 1..7, по номеру консоли. Графическая консоль -- седьмая. Между текстовыми консолями можно переключаться по Alt-Fn, по Atl-F7 можно вернуться в графическую консоль. Но из графической в любую другую -- только по Ctrl-Alt-Fn. Попробуйте, это несложно!

Консоли обозначаются tty1, tty2, tty2 и т.д. Вы попали на консоль, но это не значит, что вы Вы уже можете управлять компом. Консоли компа предоставляются всякому запросившему их, в т.ч. и хакерам и вирусне. Консоль -- это как дверь для входа в систему. Двери видят все, но не всякому они открываются. Консоли могут предоставляться по сети, через сетевую карту. Могут предоставляться через модем, через USB-порт, ... вообще через любой внешний интерфейс.

Более того, сила Линукса/Юникса заключается в том, что находясь где-нибудь в Канаде, вы легко попадете к себе на свой домашний комп, который вы оставили включенным и подключенным к инету на кануне отъезда. Подключившись к домашнему компу, допустим, с нотика, вы на экране нотика получите изображение домашнего компа. Дух не перехватило еще, а-а? Это не сказки. Это все реально! Другое дело, что если видео-консоль притормаживает (все-таки надо учитывать прорву промежуточных хостов), то вы можете переключиться в текстовую консоль и в ней поработать. И будьте уверены, что скорости будут таким же как, будто домашний комп стоит в соседней комнате.

Вы вероятно ожидаете попыток взлом и/или перехвата трафика? Успокойтесь, для этого нет никаких причин, если Ваш домашний комп запоролен надежным паролем, и вы используете шифрованный канал SSH. Не надо сейчас ломать голову, что это такое, просто запомните эти три буквы. Этого более чем достаточно для первого раза. А работать на удаленной консоли ничуть не сложнее, чем на локальной. Локальная консоль -- это клава, мышь и моник непосредственно подключенные к вашему компу.

Конечно, если вы работаете в графической консоли, то переключаться на текстовую консоль для выполнения одной-двух команд, -- не совсем кошерно. Поэтому были придуманы так называемые -- псевдо-терминалы. Это такие же точно консоли, с такими же точно возможностями, но "живут" они на рабочем столе (т.е. в графической консоли) и выглядят как обычные оконные проги. Количество этих консолей не ограничено.

Да, надо сказать, что понятие "консоль" и "терминал" -- эквивалентны. В одних источниках их называют консолями, в других -- терминалами. Но суть, одна и та же.

Консоли предназначены для получения (текстовых) команд от пользователя и вывода текстовой информации. Консоли -- это очень большая тема. На столько большая, что многие люди (Виндузятники) Линкус ненавидят как раз из-за его консолей. Возможности консолей (команды, скрипты и прочие ипостаси) можно изучить и изучать, и конца и края этому издевательству над человеком не видно! Многих это приводит в бешенство. Поскольку признать свою несостоятельность (и если хотите -- слабость) они не могут, поэтому они предпочитают обвинять Линкус. Вот уж воистину сказано, что не вы выбираете Линукс, а он вас! Линукс выбирает сильных. Если вы сильный, он покориться вам, и вы оседлаете его. Ан нет, так и ропщите, что "Линукс -- полный отстой!" Вы не имеете права так говорить, как не имеете права судить о том, чего не поняли.

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.

29

Re: Копилка опыта

Где в файловой системе "находится" корзина?

Да, я когда тоже задавался этим дурацким вопросом. Не так чтобы это было жизненно необходимо, скорее ради спортивного интереса -- раз корзина существует, то она ведь существует где-то на диске. Где?

Поскольку в системе может быть зарегистрировано несколько юзеров, а в целях безопасности юзеры не должны видеть корзины друг друга, то у каждого юзера должна быть своя персональная помойка. Размещаются эти помойки вот тут:

~/.local/share/Trash

Отредактировано zhevak (2010.03.05 23:07)

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.

30

Re: Копилка опыта

ok.
Во всяких гентах есть замечательный лог всего, что происходит на данный момент: Ctrl+Alt+F12.
И второе: в тех же гентах, если юзер удаляет файлы кнопкой Delete, то на данном разделе (с котрого файлы удаляются) создаётся .Trash-user_name в корне (не считая /) , где user_name=имя_пользователя, с правами примерно 700.

31

Re: Копилка опыта

О, а у меня она тоже в корне есть.. )) посмотреть от юзера не дает ))

Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com

32

Re: Копилка опыта

(С подачи cesor сайт proecta.ru)

Как создать развесистое дерево директориев

Создать один директорий можно командой:

mkdir mydir

Это легко. Создать сразу три директория, лежащие на одном уровне, тоже несложно:

mkdir dir1 dir2 dir3

Но иногда возникают задачи создать сразу целую гроздь вложенных директориев. Обычно это делается несколькими командами. Юзеры либо "опускаются" в нужный директорий (cd mydir) и там создают поддиректории, либо в команде создания задают полные пути. Например, для создания структуры

mydir
   |- subdir1
   |     |- subdir1a
   |     |- subdir1b
   |     |- subdir1c
   |- subdir2
   |     |- subdir2a
   |     |- subdir2b
   |- subdir3
   |     |- subdir3a
   |     |- subdir3b
   |     |- subdir3c
   |           |- subdir3c1
   |           |- subdir3c2

Согласно первому способу мы должны сделать так:

mkdir mydir
mkdir subdir1 subdir2 subdir3
cd subdir1
mkdir subdir1a subdir1b subdir1c
cd ../subdir2
mkdir subdir2a subdir2b
cd ../subdir3
mkdir subdir3a subdir3b subdir3c
cd subdir3
mkdir subdir3c1 subdir3c2

Что ни говори -- сложно! Написать проще, чем понять. Согласно второму способу -- мы должны сделаем так:

mkdir -p mydir/subdir1/subdir1a mydir/subdir1/subdir1b mydir/subdir1/subdir1c
mkdir -p mydir/subdir2/subdir2a mydir/subdir2/subdir2b
mkdir -p mydir/subdir3/subdir3a mydir/subdir3/subdir3b mydir/subdir3/subdir3c1 mydir/subdir3/subdir3c2

Уже легче, но ясности не добавляет.
Существует еще один способ, которым, собственно, я и хочу поделиться:

mkdir -p mydir/{subdir1/{subdir1a,subdir1b,subdir1c},subdir2/{subdir2a,subdir2b},subdir3/{subdir3a,subdir3b,subdir3c/{subdir3c1,subdir3c2}}}

Заметьте, пробелы в фигурных скобках -- не допустимы!
Все вместилось в одну команду. Дублирования нет. Написать изначально и отредактировать (добавить/удалить поддиректории) стало легче.

Сейчас вам не следует задаваться вопросом: "зачем мне это надо?" Главное, что вы уловили идею. А задачи под эту идею рано или поздно сами подкатят.

.

Отредактировано zhevak (2010.05.29 00:26)

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.

33

Re: Копилка опыта

о меня уже цитируют)))))

Силой выбитое признание не показатель раскрываемости преступлений, а показатель слабости человека и бессилия правоохранительных органов в поиске и наказании истинных преступников.

34

Re: Копилка опыта

zhevak пишет:

Заметьте, пробелы в фигурных скобках -- не допустимы!

Чутка исправим:
Можно и с пробелами сделать, если в кавычки поместить нужный фрагмент, например:

$ mkdir -p dir1/{"subdir 1","subdir 2"}

и да, оно работает:

$ ls -lA dir
итого 8
drwxr-xr-x 2 user user 4096 Май 29 02:36 subdir 1
drwxr-xr-x 2 user user 4096 Май 29 02:36 subdir 2

35

Re: Копилка опыта

Прикольная фича

Открыл крышку унитаза<зачеркнуто> ноутбука-- изменился статус в сети. Закрыл -- опять все знают smile

http://welinux.ru/post/3394/

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.

36

Re: Копилка опыта

Консоль. Легкая работа с длинными командами.


Тот, кто хотя бы раз занимался сборкой программ из исходных кодов, меня поймет. Программисты -- так, те сразу поймут!

Речь идет о написании длинных команд в консоли. Написать длинную команду непросто. Ошибки всегда присутствуют, стоит только чуть-чуть расслабиться. Отредактировать, а потом заново запустить на исполнение, конечно, можно, но иногда бывает так, что даже и редактирование команды доставляет боль. Что же делать? Я уже слышу ваши голоса!

Ну да, самое простое -- создать скриптовый файл в текстовом редакторе и не парить себе мозги. Как один из вариантов это решение очень даже не плохое, и я иногда так и делаю.

Но если бы у меня не было фиги в кармане, этого поста тоже бы не было. На самом деле, оказывается, даже не надо парить себе мозги с запуском текстового редактора, написанием скрипта и последующим его сохранением в виде файла. Оболочка bash (про другие не скажу, не знаю, не пробовал) уже предоставляет такую возможность!

Допустим, вам необходимо набрать длинючую команду с множеством опций и параметров. Или же, вы уже когда набирали и исполняли эту команду и сейчас вам нужно ее еще раз повторить, только слегка изменив в ней кое-какие параметры. В первом случае, вы сразу нажимате CTRL+XE, во втором случае вы сначала получаете команду в строку (из истории команд) и также нажимаете CTRL+XE. В результате открывается текстовый редактор nano (или что там у вас прописано в установках), и вы можете набирать или подправить в нем свою супер-пупер команду. В первом случае текст в редакторе будет отсутствовать. Для второго случая, имеющаяся команда будет передана в редактор, и вам остается ее только править.

После правки или создания текста вы должны выйти с сохранением. Да-да, именно так -- выйти с сохранением текста в файле! Файл будет создан в директории /tmp, а имя файла за вас придумает система. С одной стороны, вы знаете, что директорий /tmp чистится после завершения сеанса работы и дисковое пространство не будет замусореваться. А с другой стороны, вы также знаете, что все набранные и исполненные команды попадают в историю. Так что, беспокоиться не о чем: всегда есть возможность вызвать из истории команду и запустить ее на повторное исполнение, при необходимости, подправив ее тем или иным способом.

Итак, при выходе из редактора будет создан временный файл во временном директории, и что самое приятное -- внимание! Туш! -- созданная команда будет запущена автоматически. Ура!


Мне остается подсказать начинающим Линуксойдам, как вводить магическое заклинание CTRL+XE. Все просто, сначала вы нажимаете клавишу CTRL, а затем, не отпуская ее, нажимаете последовательно клавишу X, а потом клавишу E. После чего клавишу CTRL можно отпустить smile

Отредактировано zhevak (2010.07.24 02:39)

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.

37

Re: Копилка опыта

Где лежит файл? Как его искать? Какие параметры передавайть команде find?

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

http://find.unixpin.com/ru/

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.

38

Re: Копилка опыта

Жесткие и мягкие ссылки


Оказывается тут не все так прозрачно, как ожидалось. Поэтому я выкладываю пост на всеобщее обозрение.

С символическими ссылками все более-менее понятно. Это файлы-указатели. Аналог из жизни -- дорожные указатели типа там "Тамбов", там "Москва", а там "Крыжополь". Можно удалить указатель, но населенный пункт останется. Можно наоборот -- разбомбить населенный пункт, стереть с лица земли. Останется только указатель, который направляет в никуда.

Сложнее с жесткими ссылками. Начнем несколько из далека. Что такое файл? Согласно про-майкрософтовскому определению (FAT12, FAT16, FAT32, VFAT и в некоторой степени NTFS), файл -- это именованная область памяти, в которой могут содержаться данные. Доступ к данным осуществляется по имени файла.

В файловых системах NIX-ов (ext2, ext3, ext4 и др.) доступ к контенту файла осуществляется не по имени, а по так называемому ноду (NOD). Нод -- это, если хотите, индекс (т.е. число), которое однозначно идентифицирует файл. Точнее его содержимое (контент). Но использовать на практике числа, конечно же, будет крайне неудобно. Поэтому, так же как в FAT-ах, в ext-ах применяются имена. Разница только в том, что имена файлов несколько отдалены от контента, хотя и логически связаны. Файловая система работает примерно так: она берет имя файла, ищет в таблице соответствующий ему (имени) нод, и только потом уже по ноду идет к области, где лежит контент файла. Вот такой длинный путь.

Казалось бы, зачем это надо. Длиннее путь, дольше времени добираться до файла и т.д. На самом деле потери времени настолько мизерные, что их даже никак не померить. А вот преимущество есть!

Поскольку имя ссылается на нод, а нод ссылается на контент, то можно создать два и более имен, которые могут ссылаться на один и тот же нод. Тогда получится, что у контента будет два имени. Пример из жизни: Игорь и Гарик -- это одно и тоже лицо. Только в разных компаниях его по разному называют. Пока оставим вопрос, а зачем это надо -- иметь несколько имен, в подвешенном состоянии. Рассмотрим плюсы его применения несколько позже.

Итак, мы имеем некоторый контент и имеем два имени для этого контента. Умные книжки по Unix/Linux-ам говорят, что если открыть файл по одному из имен и изменить его контент, то во втором имени контент также изменится. Можете проверить. Создайте какой-нибудь текстовый файл. Откройте консоль и наберите команду:

cat > mytext

После чего напечатайте какую-нибудь строку, например

это первый файл

и нажмите Ctrl-D. Эта комбинация укажет системе закончить прием текста с клавиатуры. После чего система закроет файл и сохранит его под именем mytext.

Теперь создайте к этому файлу жесткую ссылку.

ln myfile myfile2

myfile2 -- это имя жесткой ссылки. Точнее, это еще одно имя файла. Оно ничем не отличается от первого. Оба имени равнозначны, ни одно из них не имеет преимущества перед другим и никак не отличается. Теперь вы можете открывать и редактировать файл как по первому имени, так и по второму. Системе это без разницы. Оба имени ссылаются на один и тот же нод.  Проверьте -- выполните команду:

ls -il

в первой колонке будут напечатан ноды файлов.

К стати говоря, ноды знать не знают об именах файлов. Но ноды ведут учет количества имен. Добавление еще одного имени увеличивает счетчик у нода, а удаление имени, уменьшает его. Когда будет удалено последнее имя и счетчик станет равен нулю, файловая система удалит так же и нод, а область памяти, где располагался файл, перейдет в общий пул памяти. Таким образом файл прекратит свое существование.

Теперь давайте вспомним о "подвешенном" вопросе. Unix/Linux-системы -- это как правило многопользовательские системы, в отличие от "многопользовательской" Венды. Допустим, у вас на компе имеются два юзера, которые работают с каким-то файлом. Допустим, используют одну  туже программу. Потом, один из юзеров решает удалить ее. и успешно удаляет. Что остается второму юзеру? Если это была Венда, то второй юзер впадает в глубокое отчаяние и начинает листать словарь нецензурных терминов. Если это Nix-ы, то ничего страшного не произойдет. Второе имя-то программы никуда не делось!

Удобно? Еще бы! Никаких танцев вокруг костра, никакого удвоенного расхода дискового пространства. После удаления проги, первый юзер уже не видит ее, и не будет переживать, что ее нужно удалить. А второй -- даже не почувствует, что прога была удалена. Она как работала для него, так и будет продолжать работать, пока он ее сам (для себя) не удалит.


А теперь пару слов скажу про грабли, на которые я только что наступил.

UPDATED следущий текст неправильный (я выделил его в цитату). Я проверил свою "хипотезу" и хочу признаться. Господа, я был не правв. Я жестоко ошибся и увел вас в не туда. Прошу простить.

Я написал прогу. И создал к ней жесткую ссылку. Убедился в том, что оба имени принадлежат одной и той же проге. А потом я решил удалить из проги отладочую информацию (для тех, кто в теме -- утилита strip). Удаление отладочной информации из бинарника уменьшает его объем, т.е. изменяет контент файла. Так должно быть... Но система повела себя не так как я ожидал.

В результате работы утилиты strip вместо одного файла с двума именами, стало два файла каждый со своим именем. Тот файл, который я "стрипал" стал меньше по объему. (Все правильно!) А тот, имя которого я не трогал, сохранился. Но вместо двух ссылок у него стала одна. Вау! Т.е. система сделала так называемую операцию "копирование при изменении".

Другими словами, если мы ссылаемся на «нечто» по двум именам, то мы обращаемся к одному и тому же этому "нечто". Оба имени равнозначны. Это так до тех пор, пока мы обращаемся только для чтения. Но стоит нам по одному из имен произвести изменения в этом "нечто", как тут же создается его клон (дубль). Любые изменения будут внесены в клон, в то время как первая копия остается нетронутой. Во как!

Я-то думал, такое возможно только при работе с объектами, размещенными в оперативной памяти, но оказывается и файловая система также следует этому принципу. Причем следует не полностью, а частично: принцип распространяется на бинарники, но не распространяется на текстовые файлы. второй раз -- во, как!

Более тщательный разбор ситуации показал, что при изменения конктента файла не происходит его дублирования. Все работает правильно! Ошибка в ДНК. И состоит она в том, что я не уделил должного внимания ситуации.

Произошло следущее. Сначала я "стрипал" файл, а потом (как я уже говорил -- по невнимателоьности) я еще раз компилировал проект. И только потом я смотрел, что получилось. При "стрипании" происходит изменение в файле. Все правильно, так и должно быть. Оба имени ссылаются на одни и тот же контент. Размер файла для обоих имен будет один и тот же. Это ж один файл!

Я не заметил капкан, который был замаскирован в процессе компиляции: компилятор сначала удаляет файл, а потом создает его за-но-во.

При удалении файла, происходило только удаление одного его из его имен (первого имени). Второе имя осталось. Затем компилятор создавал новый файл, т.е. создавал новый нод. Другое дело -- имена стертого и нового файлов совпадают. Но это ведь не есть один и тот же файл, содержимое которого меняется в процессе компиляции! Это просто другой файл с точно таким же именем, какое было у его предшественника. А раз это другой файл, то никакого отношения к старому файлу он не имеет. Еще раз мои извинения smile

Век живи, век учись!

Я -- разработчик устройств на микроконтроллерах (AVR, ARM7, MSP430). Отлично знаю электронику.
Программирую на C/C++. 2008 году перешел с Windows на Ubuntu.
Пишите свои вопросы мне в ЛС -- возможно, смогу помочь.

# хочешь насмешить Бога, расскажи ему о своих планах.