Въведение

1. Unix и Linux

2. Архитектура на Unix/Linux

3. Основни принципи в Unix

- Многопотребителска система

- Малки компоненти

- Какво е Linux

- Login prompt

- Обвивка (shell)

- Команден ред

- Отписване (Logging out)

- Синтаксис на командите

- Файлове и директории

- Някои команди

- Пътища и директории

- Още за командите

- Упражнения


  1. Unix и Linux

Unix философия.

Unix команди. 

Unix  стандарти, политики и конвенции.

Съществуват различни Unix системи

Различия най-вече по начина на администриране.

Има доста специфика в Linux администрацията.

Unix е клас от операционни системи производни на оригиналната  Unix OS разработена от екип ръководен от Ken Thompson и Dennis Ritchie, в  Bell Labs: History of Unix.

Unix има две основни разклонения в своята история - клонът AT&T  (System III и V family, Solaris), и клонът  BSD  (Mac OS, OpenBSD и някои други).

В периода 1980 - 1990 имаше дълга и продължителна борба за стандартизация между отделните производители на "Unixes" (Unix war), която затихна с бързото разпространение на  Linux.



Една голяма разлика между "Unixes" и "Linux" е, че ядрото на Linux е било написано изцяло отново от   Linus Torvalds  (History of Linux) без да се използва код от кой и да е от "Unixes", така че той не страда от лицензните ограничения, които спираха развититието на  Unix по време на споменатите  Unix Wars. 

От гледна точка на потребители и средства, Linux е по-близък до BSD Unix  отколкото до AT&T Unix, въпреки че има нтересни разлики на ниво ядро и от двете ОС.

  1. Архитектура на Unix/Linux



Kernel (ядро)– сърцето на операционната система. Осъществява взаимодействието с хардуера на всички програми: shell(обвивка), X графичния интерфейс и приложните програми.

Shell (обвивка) – интерпретира командите към операционната система и извиква за изпълнение програмите от ядрото. C Shell, Bourne Shell и Korn Shell са най известните обвивки .

X графичен интерфейс. Заема много ресурси и от гледна точка на администратора осигурява ограничени възможност за администриране. Задължителен за работни станции, но често не се инсталира на сървърни машини. Има голямо разннообразие от графични интерфейси, които могат да се инсталират под Linux - Gnome, KDE, Pantheon, Budgie, LXQt, Enlightenment.  Gnome и KDE са най-често използваните. Ubuntu дистрибуцията, която ще илюстрира този курс инсталира Gnome.

Приложните програми осигуряват връзката с ядрото през X графичния интерфейс , през обвивката или по-рядко - директно. Особен интерес за администратора са сървърите – FTP, Web, Mail …

  1. Основни принципи в Unix

Потребителя трябва да има акаунт (име и парола).

Потребителя трябва да се „включи“ (log in).

Пълно разделение между потребителските файлове и конфигурирането на системата.

Всяка компонента изпълнява една проста задача.

Компонентите могат да се комбинират и свързват във верига за изпълнение на по-сложни задачи.

Всяка компонента може да бъде заместена с друга без да се влияе на останалите компоненти.

Linux ядро. Първа версия създадена 17 септември 1991от Linus Torvalds и е основа на операционните системи Linux, Android, и Chrome OS.

Асоциирани системни инструменти и библиотеки(utilities), които са стандартни за (почти) всички Linux системи. Огромната част от тях са разработени и се развиват в рамките на GNU Project (разработка на свободно за ползване, разпространяване и модифициране програмно осигуряване), затова често ОС се нарича GNU/Linux.

Linux дистрибуция: ядро + системните инструменти и библиотеки + допълнително програмно осигуряване, заедно с инсталационна програма, предназначено за крайни потребители (във варианти сървър и работна станция). Някои дистрибуции: Ubuntu, Red Hat, Debian, SuSE, Mandrake ...

Изписва се след включване на компютъра или след отписване (log out) на друг потребител.

Изисква въвеждането на идентификатор и парола.

Може да бъде графичен или текстов.

Ако е текстов се влиза в обвивка (shell).

Ако е графичен се влиза в графичен десктоп. От десктопа могат директно да бъдат викани за изпълнение средства и програми. Чрез комбинация от клавиши или чрез мишката може да се изведе терминален прозорец, в който се стартира обвивка.

Обвивката (shell) се нарича се още команден интерпретатор - command-line interface -CLI. Тя осигурява връзката между потребителя и ядрото на операционната система.


Съществуват и много графични потребителски интерфейси (GUI), но всеки от тях работи по различен начин и между тях има малко стандартизация. Традиционната Unix среда е CLI, където въвеждате команди, за да кажете на компютъра какво да прави. Това е по-бърз, значително по-мощен подход, като синтаксиса на командите е практически еднакъв в различните Unix/Linux дистрибуции.

Традиционните Unix CLI се стартират автоматично при записване на потребителя (log-in) или ако ако се стартират от GUI - при стартиране на терминален прозорец. Те извеждат напомняне (prompt) и очакват въвеждане на команда..

Стартирането на терминален прозорец е различно за различните GUI, но практически при всички може да се направи с клавиатурната комбинация „Ctrl + Alt + T“.

Най популярния команден интерпретатор се нарича bash (Bourne-Again Shell), който ще бъде използван в този курс.  Той е преработена версия на интерпретатора sh създаден от Steve Bourne и е използван по подразбиране в Ubuntu и много други Linux дистрибуции. 

Други често използвани обвивки са TC shell (tcsh), Korn shell (ksh), Zsh shell, Fish (friendly interactive shell). Допълнителна информация за предимствата и недостатъците на тези командни интерпретатори може да се намери на https://www.tecmint.com/different-types-of-linux-shells/.

Кой е подразбиращия се интерпретатор може да се провери с команда в терминалния прозорец  която извежда SHELL променливата на средата.

$ echo $SHELL

А кой интерпретатор се използва в момента се проверява с команда :

$ echo $0

Една малка част от командите са вградени в ядрото (builtins commands). Те се съхраняват в оперативната памет.  Повечето команди представляват отделни програми, които се стартират от диска.

..

Командните редове се използват в обвивката.

Изписването на prompt (напомняне), който обикновено завършва с символ $ или # и е знак за очакване на команда.

Командата се стартира с клавиша Enter

Пример. Командата ls извежда на екрана всички файлове в текущата директория

vbu@vbu-VirtualBox:~$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  snap  Templates  Videos
vbu@vbu-VirtualBox:~$ 

Излизане от обвивката става с команда exit или с комбинацията от клавиши Ctrl+D.

В текстов режим излизането от обвивката е достатъчно за отписване.

В графичен режим излизането от обвивката затваря терминалния прозорец. Отписването става със специална команда на графичния десктоп.

След отписването се изписва нов Login prompt.

Повечето команди имат параметри (аргументи). За някои команди параметрите са задължителни.

Например командата echo просто извежда аргументите си:

vbu@vbu-VirtualBox:~$ echo hello world
hello world
vbu@vbu-VirtualBox:~$

Командите са “case-sensitive”, обикновено се изискват малки букви .

Файлът е именувана колекция от свързани данни , представяна на потребителя като непрекъснат блок от информация съхраняван на запаметяващо устройство.

Имената на файловете се състоят от букви, цифри, тире(-), подчертаване (_), и точка (.). Те са „case-sensitive“ – файлът myfile.txt е различен от myFile.txt.

Ако се налага в имената на файловете да се включат други символи (като например празни интервали, то името на файла се загражда в апострофи, или празния интервал се предшества от „ESCAPE” символ \:

'new file' new\ file

Директорията е колекция от файлове или други директории. Включването на директории една в друга води до дървовидна йерархия на директориите. На върха йерархията се намира root directory.

За разлика от други ОС всички устройства (дискове, принтери…) представляват файлове или директории, които са включени в една единна обща дървовидна структура

Файловете и директориите се посочват чрез път (path) - текстов низ описващ път в дървовидната структура. Върха на йерархията (root directory) се посочва с наклонена черта (/). Другите директории се посочват с имената си и се разделят с /

Ако един път указва директория той може да завършва с / .

Извежда имената на файловете от директорията зададена като параметър на командата. С различни опции могат да се изведат големината на файловете, кога са създадени, кои ги притежава и правата за ползването им.  В примера се извежда съдържанието на директория с име Downloads (в примера тя не съдържа файлове), която се намира в директория imom, която е в директория home, която от своя страна е в root directory.




Ако командата е без параметри извежда съдържанието на текущата директория:



    Поведението на една команда може да се променя с добавянето на опции с тирета към командата. Например командата  ls  има опция -s (ls -s)за  извеждане на размера на файловете. Тя има и опция -h (human readable).
     
    Опциите могат да се групират така че  "ls -sh"  е абсолютно същата команда като  "ls -s -h". Повечето опции имат и дълга версия, която се предхожда от две тирета вместо една. Командата  "ls --size --human-readable" е абсолютно същата команда.


Един от най-простите начини за създаване на файл (за завършване на файла се въвежда Ctrl+D ) . Обърнете внимание на знака „>“. С него се пренасочва резултата от изпълнението на командата (който по подразбиране за тази команда е екрана) към файл. Ако файлът не съществува той се създава. Ако съществува той се замества с нов. С командата ls се проверява наличието на файла в директорията.

 





Внимание: Файлът се изтрива окончателно, освобождава заеманото място на диска и не може да бъде възстановен. Няма аналог наrecycle bin“.


При успешно изпълнение на команда обикновено не се извежда никакво съобщение. Съобщения се извеждат само в при грешка.

Командата cp копира съществуващ файл.



    Ако трябва да се копират директории се подава опция -r (за рекурсивно копиране на всички файлове и поддиректории):

$cp -r dir1 dir2

Командата mv го преименува или премества на ново място. Еквивалентна е на копиране под ново име и изтриване на старото.




Двете команди имат два аргумента, като името на съществуващият файл е първи аргумент, а новото име – втори. Ако вторият файл съществува той се замества с новия.

При изписване на префикс, с клавиша TAB автоматично се дописва името на файла. Например след

$ls test

натискането на TAB ще доведе до


$ls test_new_informationt.txt

Имената на командите също се дописват.

С помощта на клавишите UP и DOWN на клавиатурите се повтарят изпълнени команди. Чрез клавиши LEFT и RIGHT се осъществява движение по командата и тя може да бъде редактирана. Набраната команда може да бъдат изпълнена с ENTER.

Командата mkdir създава нова директория без файлове в нея

$ mkdir Test

За изтриване на директория без файлове се използва команда rmdir:

$ rmdir OldTest

За изтриване на директории с файлове се използва командата rm с опция -r (recursive)

$ rm -r OldTest

Внимание: Това е опасна команда и при неправилно използване може да изтрие непоправимо информация


Обвивката има текуща директория – директорията в която се работи в момента. Командата ls без параметри използва текущата директория. При влизане в системата текуща директория става личната директория (home) за всеки потребител, която е поддиректория в /home и е с име съответстващо на името на потребителя. Тази директория се създава при задаването на права на потребителя за влизане в системата.

Командата pwd (print working directory) показва текущата директория. В  този случай текущата директория е личната директория на потребител imom.


Текущата директория се сменя с командата cd :

$ cd /mnt/cdrom
$ pwd
/mnt/cdrom
$

Използването на командата cd без специфициране на път прави личната директория на потребителя като текуща.

$ cd
$ pwd
/home/imom
$

Пътищата, които започват върха на йерархията (root) се наричат абсолютни и започват с / . Път който не започва с / се нарича относителен и започва от текущата директория. Така например командата:

$ cd /usr/share/info
$

е еквивалентна на последователността от команди:

$ cd /
$ cd usr
$ cd share/info
$

Относителните пътища се различават от абсолютните само по директорията, от която започват.

Kомандата:

$ cd -       се използва за връщане обратно в последната директория (преди последната команда cd)

Файловете, имената на които започват точка са разглеждани като „скрити“. Те обикновено се използват като конфигурационни файлове и не се извеждат с команда ls. Командата:

$ls -a

извежда всички файлове, включително и скритите.

Директорията .. (две последователни точки) сочи към по-горната директория в йерархията на пътя.

$cd /etc/init
$pwd
/etc/init
$cd ..
$pwd
/etc
$cd ..
$pwd
/

Директорията . (една точка) сочи към текущата директория. Например следните две команди са еквивалентни:

$cd ./init $cd init

Двете специални директории могат да използвани както всички останали директории в пътища.




Символът ~ (тилда) се използва за указване на личната (home) директория на потребителя. Например за потребител с идентификатор john

$cd ~

$pwd

/home/john

$

В Linux/Unix има SuperUser с име root.  SuperUser може да прави всичко, като по този начин ежедневната работа като SuperUser може да бъде опасна. Може да бъде въведена команда неправилно, която да унищожи системата.

По подразбиране root account е блокирана в Ubuntu. Това означава, че потребител не може да се запише (log-in) като root директно или да използва команда su за да се превърне в root.

Командата sudo изпълнява команда подадена на същия ред с административни права (root-user administrative level).  Само потребители от групата sudo могат да ползват командата.  При инсталиране на Ubuntu първият потребител притежава такива права, които може да използва с команда sudo,  като при използването й трябва отново да се подаде паролата на потребителя. Един път  подадена тя се запазва 15 минути без да е  необходимо отново да бъде въвеждана.

Само потребители от групата sudo могат да ползват командата (всеки със собствената парола).Добавянето на нов потребител към групата става с командата:

sudo adduser <username> sudo

Бъдете много внимателни при използването на тази команда. Неправилна команда с нейните права може да повреди операционната система. Препоръчва се да не се стартира графична апликация с административни права. Дори използването на графичен редактор, може да доведе до тежки последици при грешка.  Идеологията на Ubuntu включва изискването манипулацията на файловете и редактирането им с административни (root) права трябва да се извършва само от команден ред.

Допълнителна информация за командата може да се намери на rootSudo.

Командата locate извежда имената на всички файлове, които съдържат низа от символи даден като параметър на командата. Ако не е инсталиранa (инсталира се по подразбиране в сървърите но не винаги в работна станция) се инсталира с команда :  sudo apt install plocate Като завърши инсталацията  се стартира: sudo apt autoremove, за да изчисти станалите излишни след инсталацията пакети.

$locate mkdir
/snap/core18/1988/bin/mkdir
/usr/bin/gvfs-mkdir
/usr/bin/mkdir
/usr/lib/klibc/bin/mkdir
/usr/lib/python3/dist-packages/lockfile/mkdirlockfile.py
/usr/lib/python3/dist-packages/lockfile/__pycache__/mkdirlockfile.cpython-38.pyc
/usr/share/man/man1/gvfs-mkdir.1.gz
/usr/share/man/man1/mkdir.1.gz
/usr/share/man/man2/mkdir.2.gz
/usr/share/man/man2/mkdirat.2.gz


Командата е удобна за търсене на специфично име на файл. При неудачно избран низ води до извеждането на голямо количество имена на файлове.

Нека да създадем една елементарна програма с име hello:

                            $cat > hello.c
                            #include <stdio.h>
                             int main(){
                                    printf("Hello User\n");
                                    return 0;
                              }
                              ^D

И да я компилираме:

                             $ gcc hello.c -o hello

След компилацията в текущата директория се появява изпълним файл hello.

Програмите се стартират от обвивката просто задавайки името на файла (заедно с пътя където се намира) и евентуално задаване на параметри. 

                          $ /home/imom/hello

или    

                           $ ./hello

Ако зададеният за изпълнение файл е без път, то той се търси в директориите записани в променливата на средата PATH. Съдържанието на променливта може да се види с:

                                echo $PATH
                                /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Отделните пътища са разделени с ":".  Както се вижда текущата директория  (. ) не е включена в този спсисък. Ако се опитате да стартирате

                              $ hello

Ще получите съобщение

                                   Command 'hello' not found

Разбира се възможно е променливата на средата  PATH да  бъде променена като се впише в нея текущата директория.

Празен интервал се използва като разделител при задаване на няколко файла като параметри на команда:

$rm myfile.txt oldinf.txt 'new file'

изтрива трите файла от текущата директория.


$mkdir new 'new dir' new\ dir2

създава три нови директории в текущата директория. В случаите когато в имената на файловете (директориите) има интервали, те се задават с \ или цялото име се загражда в апострофи.

Извеждането на документация за командите и програмите (например за команда rm ) става с команда

$man rm

Придвижване по документацията става със стрелките от клавиатурата. За излизане от документацията се натиска q.

Документацията обикновено включва

Тези страници съдържат информация не само за командите а за цялата ОС. Документацията е разделена на 8 стандартни секции, всяка от които съответства на  различна тематика в рамките на ОС:

Секция Кратко описание
1 Общи команди
2 Системни  извиквания (функции на езика Си)
3 Библиотечни функции 
4 Специални файлове и драйвери 
5 Файлови формати и конвенции
6 Игри
7 Различни описания
8 Команди за  администриране на системата

Номера на секцията в командата man се указва преди името на командата. Ако няма номер, то се извежда  първата секция  с най-малък номер .  

$man passwd          #  секция 1

$man 1 passwd          #  секция 1

$man 5 passwd          #  секция 5

whatis -r <string>

"$man man" ще изведе документация за командата man.  

"$man intro" е особено полезно. То извежда  "Introduction to user commands", което е добре написано късо въведение към Linux CLI.

Съществуват също info страници, които обикновено са по-подробни от  man страниците. Опитайте "$info info" за информация за info страниците.

Някои софтуерни разработчици предпочитат info пред  man, така че ако не намирате за някоя команда или програма  man страница трябва да се погледне за info страница.

На практика всички команди разбират  -h (или --help) опция, която извежда кратко описание за командата и нейните опции. Опитайте  "man -h" или "man --help" .

$whatis -r <string>

              Например командата  whatis -r cpy  ще изведе информация  за всички  man страници, чиито имена сдържат низа  cpy.

Опцията -r означава, че стрингът се интерпретира не буквално, а като регулярен израз - regular expression (regex). Регулярните изрази  ще бъдат разгледани подробно по-късно

$apropos -r <string>

Забележка: може да се наложи предварителното стартиране на команда "sudo mandb" за актуализиране базата данни на  man страниците.

Символът *(Wildcard) се използва за специфициране на произволен низ в името на файла. Така например

$rm tes*

изтрива всички файлове в директорията, имената на които започват с tes, а:

$rm *

изтрива всички без скритите файлове.


Символът | прави връзка (pipe) между две команди (програми), като изхода от първата се подава като вход на втората.

ls -l |wc -l
15

Командата wc брои думите и линиите подадени като вход. С опцията -l се броят само линиите. В примера командата ls -l  извежда имената на файловете в директорията, които вместо към изхода се подават като вход към втората команда, която извежда общия брой линии.


 ls -l
total 72
drwxr-xr-x 2 imom imom  4096 мар  1 17:59 Desktop
drwxr-xr-x 2 imom imom  4096 мар  8 18:35 Documents
drwxr-xr-x 2 imom imom  4096 мар  8 18:32 Downloads
-rw-rw-r-- 1 imom imom    19 мар  8 18:16 ex2
-rw-rw-r-- 1 imom imom    19 мар  8 18:17 ex3
-rw-rw-r-- 1 imom imom    19 мар  8 18:43 ex4
-rwxrwxr-x 1 imom imom 16696 мар 15 15:25 hello
-rw-rw-r-- 1 imom imom    73 мар 15 14:56 hello.c
drwxr-xr-x 2 imom imom  4096 мар  1 17:59 Music
drwxr-xr-x 2 imom imom  4096 мар  1 17:59 Pictures
drwxr-xr-x 2 imom imom  4096 мар  1 17:59 Public
drwxr-xr-x 4 imom imom  4096 мар  6 21:02 snap
drwxr-xr-x 2 imom imom  4096 мар  1 17:59 Templates
drwxr-xr-x 2 imom imom  4096 мар  1 17:59 Videos

df: Командата показва използваното дисково пространство за всички закачени дискови дялове (partitions). df -h (human-readable) използва  мегабайти (M) и гигабайти (G) вместо блокове.

du: Командата показва използваното дисково пространство от дадена директория, заедно с включените в нея поддиректории. Например 

du -h .    или
    du - sh .

Извевда използваното дисково пространство от текущата директория. Опциите означават  -s (Summary) -h (Human Readable) :

 free: Командата показва използваната и свободната памет. Опцията -m извежда информацията в MB.
Опцията -h  (--human) извежда полетата в различни единици със съответна индикация:
                B = bytes
                Ki = kibibyte (1,024 bytes)
                Mi = mebibyte (220 or 1,048,576 bytes)
                Gi = gibibyte (230 or 1,073,741,824 bytes)
                Ti = tebibyte (240 or 1,099,511,627,776 bytes)
                Pi = pebibyte  (250 or 1,125,899,906,842,624 bytes)

top (table of processes): Командата извежда иформация за ОС, изпълняваните процеси и системни ресурси включително CPU, RAM и използването на  swap, както и общия брой на изпълняваните задачи. От командата се излиза с бутон"q". 

uname -a: Командата извежда системна информация включително името на машината, името и версията на ядрото. Използва за проверка на използваното ядро. 

 lsb_release -r: Командата извежда информация за версията на Linux дистрибуцията...