с развитието на информационните технологии в научните среди неизменно се стига до срещи на представители от различни светове, които при други, различни обстоятелства, биха били абсолютно невъзможни.
като резултат от тези ‘срещи’, в дигиталното пространство най-неочаквано се изтъпанчват нов вид текстове, чиято жанрова принадлежносг трудно може да се определи, но във всички случаи те съвсем нагледно илюстрират бездънната пропаст, зееща между света на it-технологиите и света на т. нар. ‘селските пръчки’, с тяхната ярко изразена идентичност, неизчерпаема жажда за нови знания и първичен нагон за живот без голямо изоставане от върховите информационни разработки.
предлагаме на вниманието ви един типичен в това отношение пример, чудесно презентиращ куриозните комуникационни ситуации, произтичащи след един такъв титаничен сблъсък.
***
в тази лекция ще разгледаме няколко основни терминологични термина, които стоят в основата на всяка linux и unix™ система.
(‘терминологични термина’!? батка, ако някой студент по журналистика, (или не дай боже преподавател) та чуе да произнасяш това словосъчетание без да си най-малко на третата ракия, или го прочете у таа лекция напрауу … мноо ша ти са зарадва, да знаш!)
първото от тях е понятието конзола.
това е исторически термин зад който стои дългогодишната история на компютъра въобще.
в началото под конзола се е разбирало терминала на който е стоял администратора на машината и на който са излизали системните съобщения.
най-общо казано конзолата е текстово изходно устройство, което прихваща системните съобщения идващи от ядрото на операционната система или от програмата за системни съобщения.
(тъй, начи сига, батка, дан забрайш, чи от ядрото идват системни съобщения!)
в големите компютри, конзолата най-често е била свързана със серийна връзка, работеща по стандарта rs-232 (серийния порт на компютъра).
(‘серийния порт’ – туй нещо кат букса ли ша е, димек хардуеър? а стандартът rs-232 е некакъв софтуеър нели, а, нещо кат драйвер, а? eй, ма как та усещам, как та усещам!)
(‘била е свързана … ‘ свързана с какво – с процесоря или с ядрото на ос, а? ари малку по-конретно, моля ви са!)
в съвременните персонални компютри под конзола се разбира монитора на компютъра.
в линукс съществува и понятието виртуална конзола, като това са шесте терминални прозореца, които може да се превключват с alt+f1 до f6.
важно е да се отбележи, че системните съобщения излизат на първа виртуална конзола даже и никой да е логнат в нея.
типичен пример за това са системните съобщения на ядрото, които се появяват при стартирането на системата.
друго важно понятие е терминал. (а, слушай сиги и си записувай!)
терминал с устройство (най-често хардуерно), което позволява комуникацията с компютъра.
(‘най-често хардуерно’ начи можи и софтуеърно, ас тъй гу фащам, ма то на сигашнити кумпутри тирминала е се софтуерен кът чили!)
по принцип терминала е комбинация от монитор и клавиатура.
това не е така, обаче когато се говори за отдалечен терминал.
отдалечения терминал представлява специална програма съставена от клиент и сървър, чрез която потребителя може да се свързва отдалечено към компютър в който има валидно потребителско име и парола. като за начало трябва да знаете, че най-често използваните програми са telnet и ssh.
(искаш да ми кайш, чи ас ут растуяние, от друг град, ут софия да ричем, мога да вляза, да са свържа с моя комп в овча могъла? игасиму! даже и да е изключен? ам ко жа стани аку някуй, дет има инсталирана таквази пруграма ‘telnet’ или ssh, земи чи риче да са включи в моа комп, а? те тес пруграми да ни би да му показват списък с вклучените и онлайн компютри в момента и тези от тях дето работят с линукс? и той спукойно да си улязя у тес компютри и да си прай кот си иска? знам сига ша ми ричеш, чи моа комп си има путрибителску име и парола, пък оня кът ни ги знай ни мой да влези. убачи язека чух дека имало ени таквизи спициални пруграми дету разбивали пароли! аку оня има и такава пруграма тугива ко прайм, ъ?)
най-общо терминала е това което стои между потребителя и шела (командния интерпретатор).
(тъй, начи имами три … неща потрб. – терминал – шел програма и ‘шела’ е нещу кат посредник)
шел се нарича програмата с помощта, на която системата комуникира с потребителя. (а – ха, ясну!)
тя чете въведените от терминала редове и изпълнява различни операции в зависимост от това, което е въведено.
след това, шела се опитва да преобразува въвежданите конструкции в инструкции, които ядрото е в състояние да разбере.
всеки потребител при логическото си включване в системата стартира свое копие на шел в паметта.
това се прави, за да може той да работи без да пречи на останалите потребители на системата.
(чакай ва, ей! какви ‘останали путрибитили на системата’, ва!? ас ни съм ли идинствиния путрибител!? ко ма напрай ти, ва!?)
шела възприема всичко до първия интервал като команда, а всичко останало, като аргументи на тази команда, като аргументите също се разделят с интервали.
всички (или поне повечето) линукс системи имат повече от един валиден шел.
те са описани във файла /etc/shells. той има следния прост вид:
/bin/bash
/bin/tcsh
/bin/csh
/bin/ash
/bin/ksh
/bin/zsh
/bin/rbash
линукс система може да има повече инсталирани командни интерпретатори, но те са недостъпни за използване ако не са описани в този файл.
всеки потребител може да промени своя шел чрез командата chsh.
(как да го променя, ва? за како да го променям?)
без параметри командата влиза в интерактивен режим на работа, а чрез опцията -s, този режим се изключва. формата на командата е следния:
#chsh -s login_shell user
или само
#chsh
в някои дистрибуции е възможно проверка на валидните шелове чрез ключа -l към командата chsh, но slackware не поддържа този ключ.
въпреки, че съществуват множество командни интерпретатори, то не всички се използват масово. най-често използваните командни интерпретатори са:
bash – bash е команден интерпретатор съвместим с шела sh. той може да изпълнява команди, както от ред, така и от файл. bash притежава мощен скриптов език, чрез който може да се пишат програми, изпълнявани директно от командния интерпретатор. освен това bash притежава и функции, които са присъщи на други командни интерпретатори като ksh и csh.
csh – това е шел, който обединява типичните функции за един команден интерпретатор като автоматично завършване на файлов имена при натискането на tab, управление на задачите и поддръжка на история на командите със синтаксиса на с.
tcsh – подобрена версия на csh, включваща допълнително корекция на синтаксиса и др., като запазва пълна съвместимост с оригиналния csh. повечето дистрибуции създават символична връзка csh, сочеща към tsch.
ksh – kornshell e команден интерпретатор, поддържащ собствен език за програмиране и позволява изпълнение на команда както от команден ред, така и от файл.
zsh – подобрена версия на ksh. притежва множество предимства пред него, като функции, вградена синтактична проверка. за разлика от tcsh и csh, то zsh не е напълно съвместим с ksh.
повечето от изброените командни интерпретатори (bash, ksh, zsh) създават символична връзка, която започва с r и завършва с името на шела (rbash, rksh, rzsh), която указва на командния интерпретатор да превключи в защитен режим.
(ут како са защитава ‘шела’, ва, ут мени ли? ам чи нъл аз съм собственика на компа, ва!?)
в този режим потребителя е силно ограничен, като ограниченията зависят от конкретния шел. ( и що? )
описанието на restricted шеловете в /etc/shells не се препоръчва, защото след преминаване към такъв шел, потребителя не може да се върне към обичайния за него команден интерпретатор.
най-използвания от гореизброените командни интерпретатори е bash. той е и шела по-подразбиране в linux.
bash е абревиатура от bourne again shell, създаден от free software foundation на базата на bourne shell от unix™.
всяка обвивка (обкръжение) има свои променливи на обкръжението.
техните стойности се установяват от командния интерпретатор при стартирането му и имат различни стойности за различните потребители.
ето ви още една причина за всеки потребител да се стартира отделно копие на интерпретатора.
стойностите на тези променливи могат да се променят в процеса на работа.
например ако не ви харесва знака $ за промпт достатъчно е да смените променливата на обкръжението PS1.
променливите на обкръжението може да се променят чрез командата:
$export PS1=%
%
само за текущата сесия или чрез промяна на файла .bash_profile или само .profile, като в този случай промяната става активна след като потребителя се логне и е постоянна. Slackware използва файла .bash_profile за въвеждане на команди или настройка на bash.
този файл се зарежда винаги когато потребителя влезе в системата.
по-важните опции на bash са:
-r, –restricted – указва на шела да влезе в ограничен режим. В този режим на потребителя са забранени следните операции: промяната на директории с командата cd; промяна на променливите на обкръжението SHELL, PATH, ENV и BASH_ENV; изпълнението на команди съдържащи знака /; задаването на / като аргумент на вградената команда .; задаване на файл съдържащ / като аргумент на вградената команда hash; импортиране на дефиниции на функции при стартиране; пренасочване на изхода с >, >|, <>, >& и >>; изпълнението на командата exec; изключване на режима на ограничения чрез командите set +r или set +o restricted. Освен по този начин режима на ограничения може да се включи и чрез изпълнението на rbash.
-rcfile file – изпълнява командите от файла, вместо от стандартния .bashrc.
всички командни интерпретатори има множество променливи на обкръжението.
(искаш да кайш ‘имат’, разбирам та!)
променливи на обкръжението на командните интерпретатори
тези променливи описват различни характеристики на системата.
те се четат от останалите програми, които ги използват за настройка на вътрешните си параметри, като
– език на интерфейса,
– локализация, (туй кой, ва? локализира са географското положение на крайния десктоп, на който е инсталиран линукса ли, ва?)
– тип на системата,
– версия на операционната система,
– текуща директория и др.
bash притежава множество променливи на обкръжението, по-важните от които са:
BASH – указва пълното име на файла използвано за извикването на това копие на bash.
BASH_VESRION – показва версията на командния интерпретатор.
GROUPS – показва списък с групите на които е член потребителя. (ас на кви групи сам член, ва, пич?)
HOSTNAME – показва името на компютъра.
OSTYPE – показва на каква операционна система се изпълнява копието на bash
(чи усвен на Линукс на друга можи ли?)
PWD – показва текущата директория
RANDOM – при всяко извикване този параметър се променя от 1 до 32767 по случаен признак.
(кое, ва, куе са пруменя? и как?)
UID – показва уникалния идентификационен номер на потребителя, който е стартирал копието на bash.
(и пу тос UID другити могат да ма пузнаят!? начи усвен отдалечен терминал то аз кат имам такъв UID, оня можи да инструктира неговия комп да му показва секи път кугат са включвам в интернета и да му светвам на екрана кат колидна илха! има ма върти как си иска!? охоо!!!)
***
… и т. н. , и т. н.
куминтарът е, разбира се, излишен, но ако някой все пак много държи, може да заповяда!