Тази част разглежда няколко основни
терминологични понятия, които се в същината на
всяка UNIXTM и Linux система. За някои от
тях има теоретични спорове, за други няма
общоприети дефиниции и те често се използват
интуитивно. Не искам текста по-долу да се приема
като дефиниционен - това е моето тълкувание на
тези понятия.
Терминът е исторически. Идва от
времето, когато компютрите са заемали огромни
помещения и в средата на залата е имало един
терминал, на който са излизали системните
съобщения и на който можел да седне
администратора или да се намеси при определена
ситуация. Сега може би най-точната дефиниция е, че
на конзолата излизат системните съобщения. Често
се казва, че root-а или системния администратор
работят на конзолата, обикновено се визира
работното място. Това строго погледнато не е
много точно, но не може и да се твърди, че е
погрешно. Друга съвсем некоректна употреба на
понятието е, че когато не използваме графична
среда работим на конзола. Съществува и
приложение X конзола, която може да прихване
конзолата - т.е. системните съобщения.
Съществува още едно понятие т. нар.
виртуална конзола - това са (обикновено) шестте
терминални прозореца, които превключвате с
клавишните комбинации Alt+F1 до F6. Струва ми се, че
по-доброто название е виртуални терминали.
Обърнете внимание, че системните съобщения
излизат на първа "виртуална конзола" дори и
никой да не е log-нат в системата.
Терминал е интерфейса, който стои между шела (обвивката) и потребителя.
Названието също е историческо. Терминал се
нарича работното място на потребителя. Това може
да бъде нормален компютър или само (много грубо
казано) монитор с клавиатура. Много популярни
терминали са DASI 300, Tektronix 401X, HP2645A и др. Това като
хардуерно понятие. Когато говорим за терминал
обаче в общия случай трябва да си представяте не
хардуер, а именно програма, която по някакъв
начин подпомага шела да комуникира с
вас - седящия пред клавиатурата.
Командата telnet позволява да
остановите връзка с отдалечена система по telnet
протокол. След логическо включване към тази
система вие можете да използвате ресурсите и
така, както и ако стояхте пред неин терминал.
Протоколът telnet осигурява двустранната
комуникация между двете системи по TCP/IP. Telnet
протокола се описва от RFC 854 и RFC 855 (RFC-Request for Comment са
стандартизационните документи на всички
протоколи върху TCP/IP, т.е. за всичко в Интернет.
Публикуват се от консултантската група за
създаване на Интернет стандарти Internet Architecture Board -
IAB).
Как можем да направим telnet до
отдалечена машина? Първото необходимо условие е
да бъдем потребители на тази машина, в противен
случай не, че няма да можем да направим telnet, но
няма да можем да се включим логически към
системата, което обезсмисля опитите ни. Второто е
да знаем името на машината (или нейният IP адрес).
Да допуснем, че сме потребители на машината
grex.cyberspace.org, която има IP адрес 204.212.46.130. Всичко,
което трябва да направим е следното:
telnet grex.cyberspace.org
или
telnet 204.212.46.130
След осъществяване на връзката ще
получите login-промпт, подканящ ви да въведете
потребителското си име, а след това и паролата.
Ако нямате account в друга машина можете
да пробвате telnet и до своята собствена. Просто
напишете
telnet 127.0.0.1
и ще видите познатия ви login-промпт на своята
собствена машина. IP адресът 127.0.0.1 е специален -
нарича се loopback и сочи към вашата система.
Можете да направите telnet и до порт,
различен от стандартния за telnet протокол. Ако
например напишете
telnet 127.0.0.1:80
всъщност изпращате заявка към порт 80, където
обичайно "подслушва" вашият web-сървър Apache,
ако разбира се сте си го инсталирали. Е - той
обикновено отказва telnet сесията.
Ядрото на операционната система
комуникира с вас благодарение на обвивката си,
английският термин, за която е шел (shell). Това
всъщност представлява програма, която се нарича
още и команден интерпретатор. Тя чете въведените
редове от терминала и изпълнява различни
операции в зависимост от това, какво е въведено.
Обвивката се опитва да преобразува въвежданите
конструкции в инструкции, които ядрото е в
състояние да разбере.
Всеки потребител при логическото си
включване в системата стартира свое копие на шел
в паметта. Това се прави за да може той да работи
без да пречи на останалите потребители на
системата.
Обвивката възприема всичко до първия
интервал като команда, а всичко останало като
аргументи на командата. Аргументите също се
разделят с интервал.
Повечето версии на Linux позволяват на
потребителя да променя своя шел с командата chsh
или passwd -s. Когато подавате такава команда Linux
търси файла /etc/shells. Само тези команди, които
съществуват в този файл ще бъдат изпълнени. Това
е направено от съображения за сигурност. Разбира
се този файл трябва да не може да бъде редактиран
от обикновените потребители.
Можете да проверите кои са възможните
обвивки с командата:
chsh -l
Някои версии не поддържат опцията -l
на командата chsh и в този случай ще трябва да
погледнете направо във файла /etc/shells. Ето
съдържанието на един примерен /etc/shells файл:
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
/bin/bash2
Шелът по подразбиране в Linux се нарича bash -
това е абревиатура от Bourne Again Shell, създаден от Free
Software Foundation и както личи от името е имал за база
Bourne shell от UNIXTM.
По какво можете да познаете, че bash е
стартиран и очаква вашите команди - ако сте root
вашият промпт е #, a ako сте "простосмъртен"
потребител той е $. Това е само за да ви напомня
значимостта на командите, които подавате, но не
означава, че root стартира по-различно копие на bash
от това на всички останали потребители.
Всяка обвивка (обкръжение) има свои
променливи на обкръжението. Техните стойности се
установяват от командния интерпретатор при
стартирането му и имат различни стойности за
различните потребители. Ето ви още една причина
за всеки потребител да се стартира отделно копие
на интерпретатора. Стойностите на тези
променливи могат да се променят в процеса на
работа.
Например ако не ви харесва знака $ за
промпт достатъчно е да смените променливата на
обкръжението PS1.