Home    Решения    Услуги    Download    Публикации    Работа    Продукти    Документи
 

 

 
Print this page/Отпечатай тази страница  

 

Конзола, терминал, telnet и шел

от Йовко Ламбрев ([email protected])

(Статията е включена в първия български online Учебник за Linux, написан от доброволци от българското Linux общество)




 

    Тази част разглежда няколко основни терминологични понятия, които се в същината на всяка UNIXTM и Linux система. За някои от тях има теоретични спорове, за други няма общоприети дефиниции и те често се използват интуитивно. Не искам текста по-долу да се приема като дефиниционен - това е моето тълкувание на тези понятия.

    Конзола

    Терминът е исторически. Идва от времето, когато компютрите са заемали огромни помещения и в средата на залата е имало един терминал, на който са излизали системните съобщения и на който можел да седне администратора или да се намеси при определена ситуация. Сега може би най-точната дефиниция е, че на конзолата излизат системните съобщения. Често се казва, че root-а или системния администратор работят на конзолата, обикновено се визира работното място. Това строго погледнато не е много точно, но не може и да се твърди, че е погрешно. Друга съвсем некоректна употреба на понятието е, че когато не използваме графична среда работим на конзола. Съществува и приложение X конзола, която може да прихване конзолата - т.е. системните съобщения.
    Съществува още едно понятие т. нар. виртуална конзола - това са (обикновено) шестте терминални прозореца, които превключвате с клавишните комбинации Alt+F1 до F6. Струва ми се, че по-доброто название е виртуални терминали. Обърнете внимание, че системните съобщения излизат на първа "виртуална конзола" дори и никой да не е log-нат в системата. 

    Терминал

   Терминал е интерфейса, който стои между шела (обвивката) и потребителя. Названието също е историческо. Терминал се нарича работното място на потребителя. Това може да бъде нормален компютър или само (много грубо казано) монитор с клавиатура. Много популярни терминали са DASI 300, Tektronix 401X, HP2645A и др. Това като хардуерно понятие. Когато говорим за терминал обаче в общия случай трябва да си представяте не хардуер, а именно програма, която по някакъв начин подпомага шела да комуникира с вас - седящия пред клавиатурата.

    Telnet

    Командата 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

    

    BASH шел

   Шелът по подразбиране в Linux се нарича bash - това е абревиатура от Bourne Again Shell, създаден от Free Software Foundation и както личи от името е имал за база Bourne shell от UNIXTM.
   По какво можете да познаете, че bash е стартиран и очаква вашите команди - ако сте root вашият промпт е #, a ako сте "простосмъртен" потребител той е $. Това е само за да ви напомня значимостта на командите, които подавате, но не означава, че root стартира по-различно копие на bash от това на всички останали потребители.
    Всяка обвивка (обкръжение) има свои променливи на обкръжението. Техните стойности се установяват от командния интерпретатор при стартирането му и имат различни стойности за различните потребители. Ето ви още една причина за всеки потребител да се стартира отделно копие на интерпретатора. Стойностите на тези променливи могат да се променят в процеса на работа.
    Например ако не ви харесва знака $ за промпт достатъчно е да смените променливата на обкръжението PS1.