Александър Иванов
Когато нещата не вървят
Символична връзка!
Ако си помислил, че най-сетне ще прочетеш тук нещо клюкарско, сбъркал си.
Аз пак ще говоря за калпав превод (толкова калпав, че чак поставя под съмнение мисловните способности на превеждащия).
Но, както ми е обичай, ще започна отдалече.
Информатиката възниква в библиотеките, далече преди да се появи дори идея за компютър. Там, в библиотеките, е „изобретен“ азбучният ред, там са създадени каталозите, индексите, десетичната класификация на Дюи (Melvil Dewey), която скоро прераства в универсална десетична класификация. Така че с появата на компютрите информатиката стъпва върху вече натрупан много богат опит за работа с големи количества и разнообразна по характер информация.
Затова моите сравнения и аналогии с библиотеките съвсем не са произволни — те са мотивирани исторически, а често и етимологично.
Така че да започнем пак с едно такова сравнение.
Търсиш в библиотеката Бояджиев, Т., И. Куцаров, Й. Пенчев. Съвременен български език. Фонетика, лексикология, словообразуване, морфология, синтаксис. „Петър Берон“, София, 1999.
Ще приемем, че библиотеката няма още компютърен каталог.
Дъщеря ми разказва случка отпреди петнадесетина години. Водят в Националната библиотека група японски студенти, очевидно по някакъв обменен между университетите.
Влизат те във входното фоайе на библиотеката, където е азбучният каталог. Азбучният каталог е дълга редица от шкафове с чекмеджета. Във всяко чекмедже има около 2000 картонени фиша, а на предната му стена има етикет, който показва началото на първия и на последния фиш в чекмеджето.
И започва голямо цвърчене — младежите за това са учили, ама никога не са го виждали. И започват да отварят чекмедженцата, да ровят из фишовете, да се мъчат да разберат как е организирана работата.
Най-лесният начин е да отидеш на азбучния каталог, да намерите Бояджиев, Тодор. Ама проф. Бояджиев е автор на доста книги, така че накрая ще трябва да прелистиш последователно няколко картички в каталога, докато намериш това издание.
Това е общ принцип — колкото и оптимизирано да е търсенето (търсенето по азбучен ред е много оптимизирано), накрая трябва да се премине към последователно търсене. Идеалният случай е, разбира се, последователното търсене да се сведе до един елемент (тоест, до липса на последователно търсене). Ама това не винаги е възможно — зависи от структурата и подредбата на данните.
След като си намерил търсената картичка в азбучния каталог, ти трябва внимателно да си препишеш сигнатурата. Това е поредица от цифри и букви, която нищо не ти говори. Но библиотекарите знаят как да я разчитат — това е инструкция за тях къде в хранилищата ще намерят книгата. Тоест, сигнатурата представлява препратка от каталога към хранилищата.
След като си свършиш работата с тази книга и я върнеш, библиотекарите правят една невидима за теб работа — разпределят книгите обратно в хранилищата съобразно със сигнатурата им. Точно затова на корицата на книгата има етикетче със сигнатурата й.
Нали си представяш какво ще стане, ако при тази работа библиотекарят сбърка?
Книгата ще потъне някъде из хранилищата и може да стане недостъпна с години, докато грешката бъде открита и отстранена. Така че не подценявай работата на библиотекаря — тя е далеч по-отговорна, отколкото ти се струва.
Да си представим сега, че не разполагаш с точната библиография на изданието. Само си спомняш, че Пенчев, Бояджиев и Куцаров имаха една граматика. Как може да я намериш?
Именният каталог (той също е подреден по азбучен ред) ще ти помогне. Там може да намериш Пенчев, Йордан, например, и да видиш всичките му налични в библиотеката публикации. На картончето с тази граматика може да има сигнатура (препратка), а може и да няма. Но има библиографско описание на изданието и ти трябва да съобразиш, че това е препратка към азбучния каталог, където ще намериш сигнатурата (на Бояджиев. Т.).
И най-накрая може да намериш тази граматика през тематичния каталог, докато търсиш информация по тема граматики на българския език или морфология, или словообразуване. Търсенето в тематичния каталог може малко да те позатрудни — посъветвайте се с библиотекаря.
Нали е ясно? Към една и съща книга в каталозите има много препратки. Едни от тях са преки (посочват сигнатурата, тоест мястото в хранилищата, където е книгата), други са косвени — посочват каталога, където ще намериш сигнатурата.
Във Файлове и директории аз споменах, че при организацията на файловите системи информатиците са заели много идеи от библиотекарите. Когато гледаш името на файл в някоя директория, ти всъщност гледаш „заглавката“ на библиотечния фиш.
Наистина, във файловата системи с името на файла (или директорията) се свързва и някакъв „библиотечен фиш“. Най-важната информация в този „фиш“ все пак е „сигнатурата“ — препратката към онова място на диска, където действително се намират данните от файла, тоест — към „хранилището“, или към нова поддиректория, тоест към друг каталог.
И точно тази най-важна информация ти (потребителят) обикновено не виждаш, с нея се занимава файловата система. Точно както в библиотеката с това се занимава библиотекарят.
Тази препратка може да не е пряко към файла, а може да е към таблица, в която последователно се описват къде по диска са части, парчетии от файла. Защото един файл може да не е записан на едно място на диска, а да е разхвърлян на различни места, където е имало място да бъде записан — точно това наричат фрагментация на файловата система. Ясно е, че фрагментацията забавя работата на файловата система. Затова информатиците полагат много старания да я премахнат или поне да я ограничат.
„Каталожният фиш“ може да е организиран по много различни начини в различните файлови системи. В подобните на UNIX® системи (значи и в линукс) това е inode (съкращение от index-node, тоест индексен възел), във файловите системи на Windows това е запис в специално отделена таблица за описание на файловете (MFT — Master File Table).
Тук внимателният читател ще забележи прилагателно master (главна), значи има и „неглавни“ таблици?! Точно така! При необходимост файловата система създава и „подчинени“ таблици.
При всички случай в този „каталожен фиш“ се отбелязва дължината на файла, отбелязва се „собственикът“ — доста объркваш термин за потребителя, който е създал файла, отбелязват се правата за достъп на другите потребители в системата, отбелязва се режимът за работа с файла — той може да бъде обявен за скрит (hidden) файл или да му бъде определен режим само за четене (read-only), или пък да бъде определен като съдържащ програма, а не данни. Включен е тук още и набор от двойки дата/час, за които англоезичните информатици използват пощенския термин timestamp: тук се отбелязва времето, когато е създаден файлът или „каталожният фиш“, времето, когато файлът е променян или четен за последен път.
Както виждаш, файловите системи включват в „каталожния фиш“ и полета, които нямат аналог в каталожния фиш на библиотеката. Във файловите системи, където се използват индексни възли, това е и броячът на „каталожните фишове“, които сочат към един и същи файл.
Вече обясних — в различните каталози на библиотеката може да има каталожни фишове, които сочат една и съща книга.
Ясно е защо се прави това: различните каталози осъществяват различен вход към данните в библиотеката: в единия ще намерите книгата по азбучния ред на авторите в библиографското й описания, във втория ще я намерите по който и да било от авторите, в третия — по тематика. И т. н.
Различните видове речници съществуват точно по същата причина — осъществяват различен вход към езиковите данни.
Свикнали сме с азбучния ред в тълковните и в преводните речници.
Но да подредим по азбучен ред, например, речник на пословици, е доста глупаво: ще отидат на различни места дори варианти на една и съща пословица, например "Тебе думам дъще, сещай се снахо!" и "Думам ти щерко, сещай се снахо!". Затова съставители на такива речници организират някакъв друг, по-удобен вход към данните в речника — по тематика, по област на употреби, по основни думи или там както го измислят.
Майсторлък се изисква тук, за да направиш добър, удобен речник, който да става за работа.
Входът към данните в речника Мирослав Янакиев обясняваше на студентите си много нагледно: преведи българския израз „клозетна чиния“ на руски.
И ти честно отваряш двуезичните речници, ровиш, търсиш на чиния, търсиш на клозет — няма! Клозетната чиния я няма и туй то!
Ей затова са измислени картинните речници — входът към езиковите данни там все пак е зрителен, през картинката. Намираш картинка на банята, до клозетната чиния има номерче и намираш по номерчето в списъка отстрани унитаз.
И руските лексикографи не са сигурни откъде се е взела тази дума в руския език. Може би е фирмено наименование като нашето ксерокс за копирна машина.
Да се върна към файловите системи — картинката по-долу илюстрира как към един и същи файл може да има два „фиша“, две препратки:

Разбира се, ако двете препратки са в един и същ каталог (директория), имената на файловете („заглавките“ на „каталожния фиш“) трябва да бъдат различни; ако препратките са в различни директории, те могат да носят едно и също име на файл.
От цялата разнообразна информация, която се съдържа в „каталожния фиш“, тук аз съм показал само брояча на препратки. Ако направиш трета препратка към този файл, и броячът ще се увеличи с единица. Във всичките препратки.
Ако изтриеш едно от имената на файл („заглавката на фиша“), изтрива се препратката към файла, а във всички останали препратки броячът се намалява с единица. Тоест не изтриваш файла, докато съществува поне една препратка към него.
Този механизъм (с брояч) се използва във всички файлови системи, които разчитат на индексни възли (inodes).
В Windows, когато един файл се изтрива, „фишът“ (записът във таблиците с описание на файловете) не се премахва, само се отбелязва файлът като изтрит (фактически се губи само първата буква от името на файла).
Затова по-опитен потребител на Windows би могъл да възстанови изтрит файл. Ако не е препълнен дискът, ако не е мазал много по диска след изтриването, ако си струва загубеното време и трудът…
В MacOS и в линукс възстановяването на изтрит файл просто е невъзможно. Та прави си моля редовно резервни копия!
Този механизъм на препратки е сложноват, рядко се използва от редовия потребител (като мене и тебе) и има много ограничения.
Не може, например, да се направи препратка към друг дял на диска или към друг диск — ама там има друга файлова система със собствен каталог, няма начин да се следи броят на препратките. Просто този „библиотечен“ механизъм не може да работи. Та затова действието е забранено.
Не е възможно да се направи и препратка към директория. При директориите броячът се използва по друг начин, той отразява броя на подчинените директории. Затова, като създадеш директория, макар и празна, тя вече съдържа два фиша препратки (спомняш ли си специалните имена на директории „една точка“ и „две последователни точки“?).
Така че този механизъм на препратки е дълбоко вграден във файловата система. И ограничен от разумните действия в нея.
Та англоезичните информатици наричат тези препратки hard link — сякаш принадлежат на хардуера, макар да са очевидно софтуерни. Ама за приложния програмист (пак като мене и тебе) операционната система е като Господ-Бог, направо си е hard.
Нашенците го калкират като „твърда връзка“.
Да преведеш в този контекст link като връзка не е много находчиво.
Преводачите ни имат за такъв превод неласкав израз: „превод по първо речниково значение“, тоест превод аджамийски, калпав, приблизителен, неточен. Отворил човекът речника, ама прочел само първия ред.
Та май препратка е далеч по-точно в този контекст. Придържай се към препратка вместо към „връзка“, когато става дума за препратки във файловата система.
Отдавна във файловите системи съществува още един начин да се изгради препратка.
Създава се най-обикновен текстов файл, в който се описва пътят, по който да се намери даден файл или директория. Тоест, този текстов файл съдържа описание за достъп до този файл или директория. Ако не си наясно какво е описание за достъп до файл, не е лошо да прочетеш по-внимателно Файлове и директории.
Само че този текстов файл не е точно най-обикновен — във „фиша“ му файловата система си отбелязва, че това е файл препратка. И когато я насочиш към този файл, тя знае: няма да показва текста на екрана или в текстовия редактор, няма да се опитва да изпълни програмка от този текстов файл, а ще проследи (ако е възможно) пътя, описан тук, и ще се опита да изпълни действията с посочения файл или директория.
Англоезичните информатици наричат това symbolic link (препратка със символи, символна препратка; за разлика от „твърдата“ препратка, чиято „сигнатура“ представлява някакво много голямо цяло число, което файловата система разчита като някакъв адрес на диска).
И правилно. Не могат да я нарекат буквена препратка (*letter link), защото в текста се съдържат и небуквени символи: точка, двоеточие, наклонени черти (slash и backslash).
Но тук започва голяма смешка, за която загатвам в заглавието.
Нашите уж божем информатици масово превеждат symbolic link като „символична връзка“!
Абе аланкоолу!
Аз знам, че не можеш да превеждаш от английски. Ако си започнал да учиш на английски в седми–осми клас, ти дори училищните термини не знаеш на български. Провери се сам — преведи без речник latitude и hydrogen на български. Пък сега провери в речника, за да разбереш как си се справил. Тия неща се учат в училище още преди гимназията.
Ама когато ми говориш за „символична връзка“, ти ми казваш нещо много, много по-лошо. Ти ми казваш: „Аз имам претенциии, но всъщност нищо не разбирам от информатика!“. Да, не разбираш!
Информатиката е наука за съхраняване, обработка и предаване на информация посредством символи. Но символика в информатиката няма и няма как да има.
Защото, драги приятелю, символен и символичен са доста различни думи. И ако ти не си наясно с разликата, това значи, че не знаеш български — ми седни го учи.
И докато още се учиш и не си много сигурен, превеждай symbolic link като текстова препратка. Това хем няма да те обърква, хем точно отговаря на действителността.
Добре, де — здоброзъбих пишман информатика. Ама да се върнем към темата.
Текстовите препратки са много приятно и полезно нещо. Та искам да кажа няколко думи за употребата им.
В Windows текстовите препратки се появиха късно, май чак във Vista. Ама и Windows е по-млада операционна система, която полека-лека пораства.
Политика на Windows е да държи „простия“ потребител (тебе и мене, демек) по-далече от тези възможности. Но тази статия в How-To Geek добре обяснява как се правят тези неща.
В линукс и в подобните на UNIX системи текстови препратки се използват отдавна. Те нямат ограниченията на твърдите („хардуерните“) препратки: може да направиш препратка и към директория, и към страница в интернет, и към друг диск, даже към външен диск или флашка.
Като си откачиш външния диск, операционната система ще отбележи препратката като „мъртва“; като си включиш пак диска, препратката оживява.
Само че свободата поставя пред теб отговорности: трябва да мислиш какво правиш. Ако направиш препратка към директория, по-високо в йерархията на директориите, можеш да зациклиш програмите, които обхождат дървото на директориите. С две противоположни препратки (от директория A към директория B и от директория B към директория A) ще получиш същия ефект.
А програмите, които обхождат дървото на директориите, са много: това са всички търсещи, копиращи и архивиращи програми. Затова те имат някакви настройки какво да правят с препратките — да ги проследяват ли, или не. И тези неща ще трябва да ги поразучиш.
В графичните среди се използват още един тип файлове препратки: тези, които показват на екрана иконка, пък като чукнеш с мишката върху нея, стартира се някоя програма.
В Windows това са файлове с разширение .LNK, бинарни файлове и не е предвидено „простият“ потребител да се занимава с тях. Наричат ги Windows shortcuts, ама това е опасен термин, защото лесно се бърка с keyboard shortcuts (бързите клавиши). Дори умната търсачка на Google ги бърка.
В линукс това са текстови файлове с разширение .desktop — отвори го с текстовия редактор, разглеждай го, редактирай го, прави с него каквото си искаш. Щото умният все пак си ти, нали?