-
Notifications
You must be signed in to change notification settings - Fork 1
Упражнения_ _командите_в_Линукс
Чрез упражненията в тази лекция читателят ще затвърди знанията за основните команди в Линукс и ще свикне да използва командния ред.
Извеждането на списък с файлове е често срещана операция. Тя ни помага да разберем какво има в дадена директория и да разберем къде са данните с които искаме да работим. Използва се командата ls
(list).
Задача: Да се изведе списък на файловете в домашната директория.
Решение: Използваме командата ls
без никакви параметри (ако се намираме в домашната директория) или с параметър ~ (тилда).
$ ls Desktop
или
$ ls ~ Desktop
Задача: Да се изведе форматиран списък на всички файлове в домашната директория.
Решение: Използваме ls -al
. -a за да видим скритите файлове (започват с точка), -l за да видим форматиран списък.
$ ls -la total 280 drwx------ 23 student student 4096 Jan 1 18:04 . drwxr-xr-x 4 root root 4096 Jan 1 11:08 .. drwx------ 3 student student 4096 Jan 1 11:18 .adobe -rw------- 1 student student 323 Jan 1 14:26 .bash_history -rw-r--r-- 1 student student 33 Jan 1 11:08 .bash_logout -rw-r--r-- 1 student student 176 Jan 1 11:08 .bash_profile -rw-r--r-- 1 student student 124 Jan 1 11:08 .bashrc drwx------ 5 student student 4096 Jan 1 14:26 .config drwxr-xr-x 2 student student 4096 Jan 1 17:48 Desktop -rw------- 1 student student 26 Jan 1 11:12 .dmrc drwxr-x--- 2 student student 4096 Jan 1 11:12 .eggcups -rw-r--r-- 1 student student 515 Jan 1 11:08 .emacs -rw------- 1 student student 16 Jan 1 11:36 .esd_auth drwx------ 4 student student 4096 Jan 1 17:48 .gconf drwx------ 2 student student 4096 Jan 1 17:49 .gconfd drwxrwxr-x 3 student student 4096 Jan 1 11:12 .gnome drwx------ 9 student student 4096 Jan 1 17:49 .gnome2 drwx------ 2 student student 4096 Jan 1 11:12 .gnome2_private drwxrwxr-x 2 student student 4096 Jan 1 11:12 .gstreamer-0.10 -rw-r--r-- 1 student student 89 Jan 1 11:12 .gtkrc-1.2-gnome2 -rw------- 1 student student 161 Jan 1 17:48 .ICEauthority drwxrwxr-x 2 student student 4096 Jan 1 11:59 .icons drwxr-xr-x 3 student student 4096 Jan 1 11:08 .kde drwxrwxr-x 3 student student 4096 Jan 1 14:26 .local drwx------ 3 student student 4096 Jan 1 11:18 .macromedia drwx------ 3 student student 4096 Jan 1 11:12 .metacity drwxr-xr-x 5 student student 4096 Jan 1 11:13 .mozilla drwxr-xr-x 3 student student 4096 Jan 1 14:42 .nautilus -rw-rw-r-- 1 student student 836 Jan 1 17:49 .recently-used.xbel drwxrwxr-x 3 student student 4096 Jan 1 11:12 .redhat drwxrwxr-x 3 student student 4096 Jan 1 12:06 .themes drwx------ 3 student student 4096 Jan 1 12:12 .thumbnails drwx------ 2 student student 4096 Jan 1 11:12 .Trash -rw-r--r-- 1 student student 1302 Jan 1 17:49 .xsession-errors
Значението на колоните е следното:
- Тип на файла и права за ползване в символен вид
- Брой на твърдите връзки към файла или брой файлове в директорията
- Име на потребителя собственик на файла
- Име на групата собственик на файла
- Големина на файла в байтове
- Месец, ден, час на последена промяна
- Име на файла
man ls
за други интересни опции.
За да навигираме до определена директория в която са файлове с които искаме да работим използваме командата cd
(change directory).
Задача: Променете текущата директория на /tmp.
Решение: Използваме командата с параметър името на директорията: cd /tmp
.
Задача: Връщане в домашната директория.
Решение: Изпълнете cd
без параметри.
Задача: Променете текущата директория да бъде поддиректорията Desktop, която се намира в домашната директория.
Решение: Ако се намирате в дом. директория изпълнете cd Desktop
- използваме относителен път до директорията. Ако сте в друга директория изпълнете cd ~/Desktop
.
Използва се командата pwd
(present working directory). Тя отпечатва името на директорията в която се намираме.
Задача: Да се изпълнят упражненията за смяна на директорията като всеки път се извиква pwd
, за да определим къде се намираме.
$ pwd /home/student $ cd /tmp/ $ pwd /tmp $ cd $ pwd /home/student $ cd Desktop/ $ pwd /home/student/Desktop
Празните файлове могат да служат за флагове на някакво състояние (пр. дадена програма работи и 2-ро копие на програмата неможе да се пусне), да послужат като контейнер за бъдещи данни (пр. създаваме празен файл, след което добавяме редове текст към него). За създаване на празни файлове използваме командата touch
. С нея можем да променим и времето на модификация на даден файл, без да променяме данните в него.
Задача: Да се създадат файлове представляващи отчет за месеците в годината.
Решение: Извикваме touch
с имената на файловете, които искаме да създадем.
$ touch Jan $ touch Feb $ touch Mar $ touch Apr May Jun Jul Aug Sep Oct $ touch Nov Dec $ ls -l total 56 -rw-rw-r-- 1 student student 0 Jan 1 18:31 Apr -rw-rw-r-- 1 student student 0 Jan 1 18:31 Aug -rw-rw-r-- 1 student student 0 Jan 1 18:32 Dec drwxr-xr-x 2 student student 4096 Jan 1 17:48 Desktop -rw-rw-r-- 1 student student 0 Jan 1 18:31 Feb -rw-rw-r-- 1 student student 0 Jan 1 18:31 Jan -rw-rw-r-- 1 student student 0 Jan 1 18:31 Jul -rw-rw-r-- 1 student student 0 Jan 1 18:31 Jun -rw-rw-r-- 1 student student 0 Jan 1 18:31 Mar -rw-rw-r-- 1 student student 0 Jan 1 18:31 May -rw-rw-r-- 1 student student 0 Jan 1 18:32 Nov -rw-rw-r-- 1 student student 0 Jan 1 18:31 Oct -rw-rw-r-- 1 student student 0 Jan 1 18:31 Sep
Задача: Промяна датата на модифициране на файл.
Решение: Използваме същата команда като за създаване на файл, но този път тя ще промени само датата и часа на файла. Забележете разликата в часа.
$ ls -l May -rw-rw-r-- 1 student student 0 Jan 1 18:31 May $ touch May $ ls -l May -rw-rw-r-- 1 student student 0 Jan 1 18:34 May
Създаването на директории ни помага да организираме файловете според някакъв критерии. За тази цел използваме командата mkdir
(make directory).
Задача: Да се създадат директории за съхранение на отчетите и задачите за всеки месец.
Решение: Използваме mkdir
с имената на директориите.
$ mkdir reports todo $ ls -l total 72 -rw-rw-r-- 1 student student 0 Jan 1 18:31 Apr -rw-rw-r-- 1 student student 0 Jan 1 18:31 Aug -rw-rw-r-- 1 student student 0 Jan 1 18:32 Dec drwxr-xr-x 2 student student 4096 Jan 1 17:48 Desktop -rw-rw-r-- 1 student student 0 Jan 1 18:31 Feb -rw-rw-r-- 1 student student 0 Jan 1 18:31 Jan -rw-rw-r-- 1 student student 0 Jan 1 18:31 Jul -rw-rw-r-- 1 student student 0 Jan 1 18:31 Jun -rw-rw-r-- 1 student student 0 Jan 1 18:31 Mar -rw-rw-r-- 1 student student 0 Jan 1 18:34 May -rw-rw-r-- 1 student student 0 Jan 1 18:32 Nov -rw-rw-r-- 1 student student 0 Jan 1 18:31 Oct drwxrwxr-x 2 student student 4096 Jan 1 18:38 reports -rw-rw-r-- 1 student student 0 Jan 1 18:31 Sep drwxrwxr-x 2 student student 4096 Jan 1 18:38 todo
Задача: Да се създадат директории за съхранение на отчетите и задачите за всеки месец за двамата потребители alice и bob.
Решение: Използваме mkdir с параметър -p (make parent directories) за създаване на родителските директории.
bob/: total 16 drwxrwxr-x 2 student student 4096 Jan 1 18:50 reports drwxrwxr-x 2 student student 4096 Jan 1 18:50 todo
В примера по-горе използвахме съкратен запис на аргументите, за да избегнем повторно писане на една и съща команда. Това е възможно, т.к. обвивката разширява съкратения запис и той е еквивалентен на mkdir -p alice/reports alice/todo bob/reports bob/todo
.
Копирането на файлове се извършва чрез командата cp
(copy).
Задача: Да се копират месечните файлове в директорията с отчети и задачи на alice.
Решение: cp копира всички файлове зададени като параметър без последния. Последния параметър е името на директорията в която ще се копират файловете или новото име под което ще се копира само един файл.
alice/reports: total 48 -rw-rw-r-- 1 student student 0 Jan 1 18:59 Sep -rw-rw-r-- 1 student student 0 Jan 1 18:59 Oct -rw-rw-r-- 1 student student 0 Jan 1 18:59 Nov -rw-rw-r-- 1 student student 0 Jan 1 18:59 May -rw-rw-r-- 1 student student 0 Jan 1 18:59 Mar -rw-rw-r-- 1 student student 0 Jan 1 18:59 Jun -rw-rw-r-- 1 student student 0 Jan 1 18:59 Jul -rw-rw-r-- 1 student student 0 Jan 1 18:59 Jan -rw-rw-r-- 1 student student 0 Jan 1 18:59 Feb -rw-rw-r-- 1 student student 0 Jan 1 18:59 Dec -rw-rw-r-- 1 student student 0 Jan 1 18:59 Aug -rw-rw-r-- 1 student student 0 Jan 1 18:59 Apr
Задача: Да се копира директорията на alice в директорията на bob.
Решение: Копираме рекурсивно цялата директория чрез cp -r
.
$ cp -r alice/ bob/ $ ls -l bob/ total 24 drwxrwxr-x 4 student student 4096 Jan 1 19:02 alice drwxrwxr-x 2 student student 4096 Jan 1 18:50 reports drwxrwxr-x 2 student student 4096 Jan 1 18:50 todo
Преместването и преименуването се извършва чрез командата mv
(move). Не съществува отделна команда за преименуване, т.к. преименуването е еквивалентно на преместване на файла под ново име.
Задача: Да се преместят файловете за всички месеци от домашната директория в директорията с отчети на bob.
Решение: Използваме mv с аргументи списък на файловете, а накрая е директорията в която искаме те да бъдат преместени.
$ ls alice Apr Aug bob Dec Desktop Feb Jan Jul Jun Mar May Nov Oct reports Sep todo $ mv Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec bob/reports/ $ ls alice bob Desktop reports todo $ ls bob/reports/ Apr Aug Dec Feb Jan Jul Jun Mar May Nov Oct Sep
Задача: Да се преименуват всички файлове в директорията bob/reports като се добави разширение .txt в края.
Решение: Използваме mv с аргумент името на файла и новото име.
$ pwd /home/student/bob/reports $ ls Apr Aug Dec Feb Jan Jul Jun Mar May Nov Oct Sep $ mv Jan Jan.txt $ mv Feb Feb.txt ...
Вместо многократно повторение на горната команда можем да преименуваме всички файлове в директорията чрез следната команда (кратък скрипт на командния ред):
$ for f in `ls`; do mv $f $f.txt; done $ ls Apr.txt Aug.txt Dec.txt Feb.txt Jan.txt Jul.txt Jun.txt Mar.txt May.txt Nov.txt Oct.txt Sep.txt
За премахване на файлове използваме командата rm
(remove).
Задача: Да се премахнат файловете в директория bob/reports. Решение: Използваме rm с параметър имената на файловете, които искаме да премахнем. Използваме съкратен запис в примера по-долу:
$ pwd /home/student/bob/reports $ rm *.txt
Задача: Да се премахнат всички директории създадени в предишните упражнения.
Решение: Използваме rm -rf
, за да премахнем рекурсивно всички файлове и директории. -f (force) избягва въпроса за потвърждение дали искаме да изтрием даден файл. Използвайте ВНИМАТЕЛНО!
$ cd $ pwd /home/student $ ls alice bob Desktop reports todo $ rm -rf alice/ bob/ reports/ todo/ $ ls Desktop
Използваме командата cat
, за да отпечатаме един или няколко файла. Съдържанието им се извежда на стандартния изход. Най-често използваме тази команда, за да прочетем съдържанието на файла.
Задача: Да се изведе съдържанието на файловете /etc/redhat-release и /etc/issue по отделно.
Решение: Извикваме cat
два пъти с името на файла, който искаме да отпечатаме.
$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Задача: Да се отпечата съдържанието на двата файла едновременно.
Решение: Използваме cat
с два параметъра - имената на файловете.
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Командата echo
може да се използва за създаване на файлове с някакво съдържание и за добавяне на текст към тези файлове.
Задача: Да се създаде файл съдържащ вашето име.
Решение: Използваме echo с параметър името, заградено в кавички и пренасочваме изхода към файл.
$ echo "Alexander" > students $ cat students Alexander
Задача: Да се добавят имената на други студенти към същия файл, без да се изтрие първоначалното съдържание.
Решение: Отново използваме echo, но този път използваме оператора за добавяне към файл (двойна стрелка), вместо този за пренасочване.
$ echo "Ivan" >> students $ echo "Geogri" >> students $ cat students Alexander Ivan Geogri
Ако използваме cat
с големи файлове, съдържанието ще се отпечати на терминала много бързо и няма да можем да го прочетем. Това което остава са последните редове само. Затова използваме командата less
, която предоставя възможност за разглеждане на файловете по страници. Можем да се движим със стрелките нагоре/надолу и да прелистваме съдържанието на файла. Затваряме отворения файл с натискането на клавиш "q".
Можем също така да извършваме търсене във файла. less
се използва като подразбрана команда за преглед на файлове от много други програми, които предоставят информация за четене на потребителя.
Задача: Да се разгледа съдържанието на голям файл с cat
и less
и да се обърне внимание на разликата между тях.
Решение: Файлове, които не се събират на една страница (от екрана) са налични в документацията на почти всички програми. За примера използваме файл от документацията на Bash (версия 3.2).
-
cat /usr/share/doc/bash-3.2/FAQ
ще изведе цялото съдържание на екрана. Можем да се движим нагоре/надолу с колелцето на мишката или като използваме клавишите Shift+PgUp/Shift+PgDn. Файлът е достатъчно голям, за да неможем да прелистим чак до началото. - Използвайки
less /usr/share/doc/bash-3.2/FAQ
файлът ще бъде изведен интерактивно на екрана. Можем да се движим нагоре/надолу в текста чрез стрелките на клавиатурата или PgUp/PgDn (минава на следващата страница).
Решение
- Отворете файла с less (виж по-горе) или се придвижете в началото с натискане на клавиш Home.
- Търсенето става чрез натискане на клавиш "/" (дясно наклонена черта).
- След наклонената черта веднага напишете текста, който търсите (без кавичките) и натиснете клавиш Enter. Регистъра на буквите има значение.
- Текстът на екрана се премества т.ч. това което търсите да е най-отгоре. Самият текст, който съвпада е маркиран с различен цвят (в зависимост от терминала).
- Натиснете клавиш "n", за да проверите за следващо съвпадение. Няма такова.
Решение
- Отворете файла с less (виж по-горе) или се придвижете в началото с натискане на клавиш Home.
- Търсете за думата "bash".
- Натиснете няколко пъти клавиша "n", за да се придвижите до следващото съвпадение. Какво се случва когато стигнете до последното съвпадение?
- Придвижете се в края на файла в натискането на клавиш End.
- Търсенето в обратна посока се осъществява чрез клавиш "?" следван от текста за търсене и Enter.
- Този път с натискането на "n" ще се движите отдолу нагоре, намирайки съвпаденията.
Решение
- Отворете файла използвайки опция -N:
less -N /usr/share/doc/bash-3.2/FAQ
. Тя показва номерата на редовете. - Отидете в края на файла.
- Търсете в обратна посока думата "bash".
- В този пример последното съвпадение е на ред 1823.
Решение: За да решим задачата използваме комбинация от две команди. ls и less. Спомнете си, че командите в Линукс могат да се комбинират една с друга. ls -l /usr/bin/ | less
ще изведе списък на файловете в директорията и ще го подаде към less, където той ще бъде изведен по страници.
Командата head
се използва за извеждане на началните редове/байтове от файл. По подразбиране това са първите десет реда.
Задача: Да се изведат първите десет реда от файла /usr/share/doc/bash-3.2/FAQ.
Решение: Използваме head без допълнителни опции с параметър името на файла.
This document contains a set of frequently-asked questions concerning Bash, the GNU Bourne-Again Shell. Bash is a freely-available command interpreter with advanced features for both interactive use and shell programming. Another good source of basic information about shells is the collection of FAQ articles periodically posted to comp.unix.shell.
Задача: Да се изведе само първия ред от горния файл.
Решение: Използваме опцията -n, която контролира броя на изведените редове.
$ head -n 1 /usr/share/doc/bash-3.2/FAQ This is the Bash FAQ, version 3.34, for Bash version 3.2.
Задача: Да се изведат първите 20 байта(символа) от горния файл.
Решение: Използваме опцията -c, която контролира броя байтове (не редове), които да се изведат. От примера се вижда, че в края не се отпечатва знака за нов ред.
$ head -c 20 /usr/share/doc/bash-3.2/FAQ This is the Bash FAQ$
Командата tail
има действие обратно на head
. Тя извежда последните редове/байтове от даден файл. По подразбиране извежда последните десет реда.
Задача: Да се изведе последния 1 ред от файла /usr/share/doc/bash-3.2/FAQ
Решение: Използваме опцията -n, която контролира броя на редовете.
$ tail -n 1 /usr/share/doc/bash-3.2/FAQ contents of this document remain unaltered.
Задача: Да се изведат последните 11 байта от горния файл.
Решение: Както при head използваме опцията -c, която контролира броя байтове, които се извеждат.
$ tail -c 11 /usr/share/doc/bash-3.2/FAQ unaltered.
Задача: Да се проследи интерактивно файл, който непрекъснато се увеличава.
Решение: За тази задача са ви необходими два терминала. Използваме опцията -f (follow), за да инструктираме tail да следи файла в интерактивен режим и да отпечатва новите редове когато се появят.
- Започнете със празен файл. (touch students).
- В единия терминал изпълнете:
tail -f students
. Това ще отвори файла в интерактивен режим на показване. Файлът все още е празен. - В друг терминал изпълнете командата
for i in `seq 5`; do sleep 5; echo "student $i" >> students; done
. Тя ще добавя по един ред на всеки пет секунди във файла. Трябва да я изпълните от същата директория в която е файла. - След като напишете горната команда и натиснете Enter, веднага превключете на първия терминал. Наблюдавайте как редовете се появяват един след друг на всеки пет секунди.
- Прекратете изпълнението на tail чрез натискане на Ctrl+C
В Линукс съществуват хиляди команди, които представляват различни програми. С натискането на клавиш Tab ще бъдете попитани дали искате да се изведе информация за всички налични команди/програми, които можете да изпълните. В една стандартна инсталация те са над 3000. За всяка от наличните команди можете да потърсите описание в помощната и страница чрез man тема
или info тема
, където темата е името на командата. За повече от стандартните команди пробвайте man builtins
. Тези команди са вградени в обвивката (Bash), за да се изпълняват по-бързо.
- Основните команди в Unix/Linux
- Основни Unix команди - на бълг.
- Основни Linux команди - (първа част)
- Основни Linux команди - (втора част)
- Основни Linux команди - (трета част)
- Основни знания и средства - статии от linux-bg.org
- http://www.vias.org/linux-knowhow/lnag_07_01.html - списък с много команди и техните значения.
- Unix Toolbox - команди за компютърджии и напреднали потребители
- азбучен списък с команди от книгата Linux in a Nutshell, 5th Edition