Текущий каталог и относительные пути




Лабораторная работа № 5: Знакомство с процессором командного языка ОС семейства Linux. Командные файлы.

 

Цель работы: ознакомление с основными концепиями ОС Linux, её архитектурой и средствами разработки программного обеспечения.

 

Основные понятия: командный процессор shell (структура команд), команды shell, компилятор GCC

 

Вы были знакомы с таким видом взаимодействия (т.е. интерфейсом) между человеком и компьютером, как GUI – графическим пользовательским интерфейсом. В этом случае команды компьютеру отдавались с помощью нажатий мышью на различные графические изображения на экране (кнопки, значки, пункты меню и др. картинки). На самом деле такие щелчки запускают различные системные программы, которые скрыты за графическим пользовательским интерфейсом.

Однако давать команды компьютеру можно не только с помощью разных кнопок и меню. Можно вызывать команды с помощью записи слова-вызова в специальной программе-интерпретаторе (переводчике) команд. Такой способ взаимодействия между человеком и компьютером называется интерфейсом командной строки (CLI – command line interface). Следует отметить, что в компьютерной истории командная строка появилась намного раньше, чем графический интерфейс.

Несмотря на древность текстового метода взаимодействия с компьютером, он широко распространен и сегодня. Для этого есть причины, например:

1. Командная строка обеспечивает более быстрый доступ к некоторым возможностям операционной системы, а иногда — это единственный способ запустить тот или иной процесс.

2. Текстовый интерфейс менее требовательный к ресурсам компьютера, чем графический.

3. Бывает, что графический интерфейс просто не нужен (например, на части серверов).

4. Программируемость работы операционной системы и программ. Командная оболочка позволяет загружать файл с последовательностью команд и, затем, выполняет их. Т.е. от человека не требуется постоянного ввода команд.

 

Что такое «консоль»

Под консолью (она же «терминал», «shell») понимается программное обеспечение, реализующее общение с компьютером при помощи текстовых команд (Command-line interface, CLI). Аналог в Windows: cmd.

В Linux имеется несколько реализаций командной строки. Самая ранняя из популярных реализаций, появившаяся еще в операционных системах-предках Linux, называлась Bourne shell (sh). На сегодняшний день самой популярной и поставляемой в составе большинства дистрибутивов является Bourne-Again shell (bash).

Существуют и другие реализации, такие как Korn shell (ksh), Z shell (zsh), Almquist shell (ash), Debian Almquist shell (dash) и другие.

Обычно на одной машине установлено несколько реализаций командной строки, но только одна используется по умолчанию. Чтобы узнать, какая работает у вас, введите команду: echo $SHELL. Если вы еще не знаете, куда ее ввести, читайте дальше.

Большинство реализаций совместимы с sh, но не обязательно совместимы между собой. Например, скрипты и команды для bash не всегда работают на dash. Есть и такие интерпретаторы команд, которые не совместимы с sh (например, C Shell [csh]). Такие интерпретаторы не рекомендуется (скорее всего, вообще невозможно) использовать как интерпретаторы по умолчанию.

 

Как запустить консоль

Существует два способа получить доступ к консоли: виртуальные консоли и эмуляторы терминала.

Виртуальные консоли доступны практически в любом дистрибутиве Linux для настольных компьютеров и серверов. Каждая виртуальная консоль позволяет вести отдельный сеанс работы с компьютером. Если у вас есть, скажем, семь виртуальных консолей, то семь пользователей могут совершить вход в систему и работать с ней (правда, по очереди, поскольку монитор и клавиатура у вас одна). Один пользователь может работать в нескольких консолях одновременно.

Чтобы открыть виртуальную консоль, используйте сочетание клавиш Ctrl+Alt+ FN, где N — номер консоли. Например, Ctrl+Alt+F1 — первая консоль, Ctrl+Alt+F2 — вторая, и так далее. Если вы уже находитесь в виртуальной консоли, то на другую можно переключиться этой же комбинацией но без Ctrl: Alt+F1, Alt+F2, и т. д. Обычно настраивают шесть виртуальных консолей, а X-сервер, графическая система GNU/Linux, работает в седьмой.

Когда вы переключаетесь между виртуальными консолями, сеансы не сбрасываются: вы в любой момент можете вернуться к любой консоли, где вы выполнили вход, и продолжить работу.

Консоли называются виртуальными, поскольку изначально консолью назывался терминал, с помощью которого подключались к мощному компьютеру-серверу и работали. Таким образом, на одном сервере работало сразу несколько пользователей. Виртуальные консоли симулируют работу таких терминалов.

Эмулятор терминала — это почти то же, что виртуальная консоль, только в графическом режиме. Кроме того, обычно для работы в нем не требуется выполнять вход. Консоль отображается в отдельном окне. В большинстве случаев при работе в графическом режиме не требуется обращаться к виртуальным консолям, консольные команды выполнятся с помощью эмулятора терминала.

Существует много реализаций эмуляторов. Наиболее часто используемыми являются: gnome-terminal (в среде Gnome), Konsole (в среде KDE), xterm, rxvt. Для работы можно пользоваться любым из установленных.

Если вы считаете, что эмулятор терминала у вас не установлен, то вам либо следует поискать еще раз, либо ваш дистрибутив очень странный. Во втором случае можете воспользоваться пакетным менеджером и установить его (для этого может потребоваться знание вашего пароля/пароля супер-пользователя »root«).

Внимание! Эмулятор терминала (например, Konsole) и интерпретатор команд (например, bash) — разные программы. Интерпретатор команд (он же shell) — это та программа, с которой вы работаете в консоли, она исполняет ваши команды и запускает другие программы. Эмулятор терминала выводит окно для работы в консоли, подготавливает сеанс работы и запускает интерпретатор команд.

 

Как работать в консоли

Подсказка (prompt)

Подсказка появляется, когда интерпретатор команд ждёт команду. Подсказка может быть настроена как угодно, но обычно так:

user@computer:/current/directory$

Где:

· user — имя пользователя

· computer — имя компьютера

· /current/directory — текущий каталог. Обычно если текущий каталог — домашний каталог пользователя, то он сокращенно обозначается тильдой (~).

· $ — этот знак обозначает, является ли текущий пользователь суперпользователем (root) или не является. Если является, то это решетка (#), и если не является, то доллар ($).

Кроме того, интерпретатор может выводить особую подсказку, если он ждет продолжения предыдущей команды, а не новую команду. Обычно это просто символ >.

Внешний вид подсказки можно настроить под себя.

Как устроена команда

Команда устроена так:

<команда> [параметры]

Где: <команда> — одно из следующих:

1. Встроенная команда интерпретатора (например, export или alias). Такую команду интерпретатор выполняет сам.

2. Имя исполнимого файла, находящегося в известных директориях. Список известных директорий содержится в переменной среды PATH, разделенный двоеточием (а не точкой с запятой, как в Windows). Интерпретатор найдет и запустит этот исполнимый файл, передав ему параметры для обработки. Например, awk.

3. Путь к исполнимому файлу (прямой или относительно текущего каталога). Интерпретатор запустит этой файл, передав ему параметры для обработки. Например, /usr/bin/gcc.

[параметры] зависят от команды.

Продвинутые интерпретаторы, такие как bash, ради высокой скорости исполнения поддерживают многие встроенные команды, которые обычно реализуются при помощи внешних программ (например, pwd, echo, test). Но это иногда может привести к неожиданным результатам, если пользователь пытается вызвать известную ему программу, а вместо этого интерпретатор сам обрабатывает команду.

Обращаем внимание пользователей DOS и Windows. Возможно, вы знаете, что интерпретаторы команд command.com и cmd.exe при вводе имени исполняемого файла ищут его не только в каталогах из переменной PATH, но также в текущей директории. Кроме того, они автоматически присоединяют расширение к имени исполняемого файла, если оно не указано. Интерпретаторы команд в Linux не делают ни того, ни другого. Если вам нужно запустить файл в текущей директории, можно это сделать, например, так:

./program

Это будет уже относительный путь к файлу, т.е. пункт 3.

Примеры простых команд

Команда echo выводит указанную строку на экран

echo This is a test line

 

Команда cp (от copy) копирует файл или несколько файлов в указанный каталог. Например, файлы /boot/grub/menu.lst /etc/inittab и /etc/mtab в каталог /tmp:

cp /boot/grub/menu.lst /etc/inittab /etc/mtab /tmp

...а также может поменять имя файла (/boot/grub/menu.lst -> /boot/grub/menu.lst.bak:

cp /boot/grub/menu.lst /boot/grub/menu.lst.bak

 

Команда cat (от catenate, 'соединять') используется для вывода содержимого файла или нескольких файлов:

cat ~/Документы/Отчет

Или:

cat ~/Документы/Первая_половина_отчета ~/Документы/Вторая_половина_отчета

Тильда обозначает домашний каталог пользователя.

Текущий каталог и относительные пути

Скорее всего, вам уже понятно, как указать путь к файлу от корня (например /boot/grub/menu.lst — в корневой директории папка boot, в ней папка grub, в ней файл menu.lst). Такой путь называется абсолютным путем. В нем указана вся цепочка каталогов, которую надо пройти, чтобы дойти до нужного файла или каталога.

Некоторые пути в этой статье начинаются с "~". Это тоже абсолютные пути, просто "~" заменятся на абсолютный путь домашнего каталога пользователя. Например: ~/Документы/Письмо/home/vasya/Документы/Письмо.

Но пользоваться только абсолютными путями было бы неудобно. Поэтому существуют также относительные пути. Они указывают, как дойти до каталога или файла X из каталога Y. Например:

Подняться на одну директорию вверх, оттуда пойти в директорию «Музыка», там будет файл justin_bieber.ogg:

../Музыка/justin_bieber.ogg

Или: найти директорию subdir в текущем каталоге, там файл text.txt:

subdir/text.txt

Пути указываются относительно текущего каталога. При работе в консоли текущий каталог обычно отображается в подсказке, но его можно узнать простой командой: pwd

Можно легко сменить текущий каталог (обычно говорят: «перейти в другой каталог») командой: cd "Другой каталог"

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

Внимание, пользователи DOS/Windows! Если вы привыкли пользоваться командной строкой в этих системах, то обратите внимание: команда cd без параметров значит «перейти в домашний каталог», а не что-либо другое.

Вот так можно скопировать файл file1 в текущем каталоге в file2:

cp file1 file2

А так можно переместить file1 на каталог вверх, т.е. в родительский каталог текущего каталога:

mv file1..

Еще можно перейти в родительский каталог и переместить файл после этого. Допустим, мы находимся в каталоге mydir:

cd..

mv mydir/file1.

Отметим два специальных символа, использующихся в путях:

·. (точка) — текущий каталог

· .. (две точки) — родительский каталог

 

А где мой диск C:?

В ОС Windows имеется несколько корневых каталогов, по одному на каждый диск: C:, D:, E: и так далее.

В Linux используется только один корневой каталог (/). В нём "находится" содержимое одного из разделов жёсткого диска. Все прочие файловые системы, в т.ч. другие разделы на жёстких дисках, CD/DVD-диски, флешки и прочие сменные накопители монтируются (т.е. подключаются) в подкаталоги. В этих подкаталогах и будет отображаться их содержимое.

О монтировании вручную см. команду mount.

В современных десктопных дистрибутивах сменные диски монтируются автоматически, обычно в каталоги /media/имя_пользователя/название_диска или /var/media/имя_пользователя/название_диска. Например, если вставить флешку с названием TOSHIBA TransMemory в компьютер с Ubuntu и ваше имя пользователя — vasya, файлы на ней будут в каталоге "/media/vasya/TOSHIBA TransMemory". Это вовсе не значит, что они автоматически скопируются на жёсткий диск, они будут на флешке, но доступны по этому пути.

Обратите внимание, что автомонтирование дисков может быть настроено так, что диски будут определяться автоматически, но не монтироваться. В этом случае откройте менеджер файлов, кликните по нужному диску, и он примонтируется. Скорее всего, директория, куда он примонтировался, автоматически откроется.

 

Системные каталоги

Корневой каталог, являющийся началом файловой структуры ОС Linux, содержит ряд системных каталогов. Системные каталоги содержат файлы и программы, служащие для управления системой и ее сопровождения. Многие из этих каталогов содержат подкаталоги с программами, предназначенными для выполнения конкретных задач.

/bin

bin - это сокращенно от `binaries' (т.е. двоичные или выполняемые файлы). Здесь находится много важных системных программ. Большинство основных команд Unix находятся в этом каталоге.

/dev

"Файлы" в dev известны как драйверы устройств - они используются для доступа к устройствам и ресурсам системы, таким как диски, модемы, память и т.д. Например, вы можете читать данные из файла, точно также вы можете читать входные сигналы от мыши, имея доступ к /dev/mouse. Имена файлов, начинающиеся на fd - это дисководы гибких дисков. fd0 - первый дисковод, fd1 - второй. Различные /dev/ttys, /dev/cua устройства используются для доступа к последовательным портам. Например, /dev/ttys0 относится к `COM1' под MS-DOS.

Устройства /dev/cua относятся к "звонящим" (``callout'') устройствам, которые используются совместно с модемами.

Устройства, имена которых начинаются с hd, имеют доступ к жестким дискам. /dev/hda относится ко всему первому жесткому диску, а hda1 только к первому разделу /dev/hda.

Устройства с именами /dev/tty относятся к "виртуальным консолям" вашей системы (доступ путем нажатия alt-F1, alt-F2 и т.д.). /dev/tty1 соответствует первой, /dev/tty2 соответствует второй и т.д.

Устройства, чьи имена начинаются на /dev/pty, это "псевдотерминалы". Они используются для входа с удаленных "терминалов". Например, если ваша машина в сети, вход к вам по telnet будет использовать одно из устройств /dev/pty.

/etc

etc содержит файлы конфигурации системы. Например /etc/passwd(файл паролей), /etc/groups(файл групп), /etc/rc (командный файл инициализации) и т.д.

/sbin

В sbin находятся важные исполняемые системные файлы, используемые системным администратором.

/home

home содержит домашние каталоги пользователей.

/lib 4

lib содержит образы разделяемых библиотек (shared library images). Эти файлы содержат код, который могут использовать многие программы. Вместо того, чтобы каждая программа имела свою собственную копию этих выполняемых файлов, они хранятся в одном общедоступном месте – в /lib. Это позволяет сделать выполняемые файлы меньше и сэкономит место в системе.

/proc

proc - это "виртуальная файловая система" procfs, в которой файлы хранятся в памяти, а не на диске. Они связаны с различными процессами, происходящими в системе, и позволяют получить информацию о том, что делают программы и процессы в указанное время.

/tmp

Многие программы нуждаются в создании рабочих файлов, которые нужны короткое время. Каноническое место для этих файлов в /tmp (там обычно чаще проводится уборка мусора).

/usr

usr - состоит из ряда подкаталогов, которые в свою очередь содержат наиболее важные и полезные программы и файлы конфигурации, используемые системой. Различные каталоги, описанные выше, необходимы для нормального функционирования системы, но большинство вещей, содержащихся в /usr необязательны для системы. Но это такие необязательные вещи, которые делают систему полезной и интересной.

/usr/X11R6 - содержит The X Window System, если вы ее инсталлировали.

/usr/bin - для различных программ UNIX. Он содержит большинство выполняемых программ, которых нет ни в каких других местах, например, в том же /bin их нет.

/usr/etc – также как и /etc, содержит всевозможные системные программы и конфигурационные файлы.

/usr/include - содержит include-файлы(header - файлы) для компилятора Си.

/usr/lib - содержит библиотеки -"заглушки" и "статические" библиотеки, эквивалентные файлам из /lib. При компиляции программа "связывается" с библиотеками, находящимися в /usr/lib, которые в свою очередь направляют программы обращаться в

/lib, если им нужен актуальный код. Кроме того, многие другие программы хранят в /usr/lib свои конфигурационные файлы.

/usr/local - в большой степени похож на /usr - он содержит различные программы и файлы, несущественные для системы /usr/man - содержит страницы Руководства. Здесь два подкаталога для каждого "раздела" Руководства. (С помощью команды "man man" вы можете получить более подробную информацию). Например, /usr/man/man1 содержит исходные тексты (неотформатированный оригинал) страниц Руководства в разделе 1 и usr/man/cat1 содержит отформатированные страницы для раздела 1.

/usr/src - содержит исходные коды (неоткомпилированные программы) для различных программ вашей системы. Наиболее важная вещь здесь это каталог /usr/src/linux, в котором содержатся исходные коды ядра Linux.

/var

var содержит каталоги, которые часто меняются в размере или имеют тенденцию быстро расти. К числу таких каталогов относятся:

/var/adm - содержит различные файлы, интересные системному администратору, специфические системные файлы, фиксирующие ошибки и проблемы, возникающие в системе. Другие файлы фиксируют входы в систему, как и неудачные попытки войти.

/var/spool - содержит файлы, которые предварительно формируются для других программ. Например, если ваша машина подключена к сети, входная почта будет помещаться в /var/spool/mail до тех пор, пока вы не прочитаете ее или не удалите. 5

Входящие и исходящие новости помещаются в /var/spool/news и т.д.

Зарегистрировавшись системе, пользователь попадает в свой начальный каталог. Имя, присвоенное этому каталогу системой, совпадает с регистрационным именем пользователя. Все файлы, создаваемые для нового пользователя, помещаются в начальный каталог. В этом каталоге можно создавать подкаталоги и размещать в них файлы.

 

Автодополнение

Кроме того, в консоли существует такая вещь, как автодополнение. Она полезна в тех случаях, когда необходимо набрать длинную команду или написать имя файла, содержащее много символов, которые необходимо экранировать. Работает она очень просто. При наборе части команды необходимо нажать [TAB] один или два раза и консоль либо дополнит команду/имя файла, либо выдаст список для уточнения.

[20:41:52][alex][~]: cd /home/alex/Ра

[TAB]

[20:41:52][alex][~]: cd /home/alex/Рабочий\ стол/

Однократное нажатие [TAB] дополнит имя программы/файла в том случае, если его уже можно определить однозначно. Двойное нажатие выведет список возможных "продолжений" команды:

[20:41:52][alex][~]: ls /usr/share/ic

[TAB][TAB]

iceweasel/ icons/



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: