Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зачет по UNIX.docx
Скачиваний:
7
Добавлен:
02.08.2019
Размер:
50.16 Кб
Скачать

Зачет по UNIX

  1. Командный интерпретатор, внешние и внутренние команды, интерпретация командной строки.

Shell

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

Shell — это специальная программа, предоставляющая удобные средства вызова других программ и передачи им параметров, а также выполняющая некоторые команды самостоятельно. Список внутренних команд оболочки вы можете просмотреть набрав команду help

$ help

; просмотреть список команд shell

Любая введённая строка разбивается на части по пробелам. Первая часть считается собственно командой, всё остальное — параметрами. Если команда из числа поддерживаемых оболочкой (см. выше), то shell выполняет её, иначе ищется и запускается соответствующая программа (исполняемый файл с совпадающим именем), а параметры передаются этой программе.

Внутренняя команда — это команда, которая встроена непосредственно в Bash. Команды делаются встроенными либо из соображений производительности — встроенные команды исполняются быстрее, чем внешние, которые, как правило, запускаются в дочернем процессе, либо из-за необходимости прямого доступа к внутренним структурам командного интерпретатора. Внутренние команды могут иметь внешние аналоги. Например, внутренняя команда Bash — echo имеет внешний аналог /bin/echo и их поведение практически идентично.

Действие, когда какая либо команда или сама командная оболочка инициирует (порождает) новый подпроцесс, что бы выполнить какую либо работу, называется ветвлением (forking) процесса. Новый процесс называется "дочерним" (или "потомком"), а породивший его процесс -- "родительским" (или "предком"). В результате и потомок и предок продолжают исполняться одновременно -- параллельно друг другу.

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

2. Формат команды linux, ключи, параметры, ключи с параметрами, длинные и короткие ключи

Большинство команд Linux имеют следующую структуру:

$ команда флаги параметры

Параметры задают необходимые файлы, пути, и т.п. в зависимости от команды. Флаги изменяют поведение команды, например изменяют режим вывода, включают рекурсивный обход папок и т.п. Флаги могут иметь две формы записи - короткую (-f), где вместо f может стоять любая другая буква, и длинную (--flag), где вместо flag может стоять любое название флага. Флаги могут иметь параметры. В этом случае параметр пишется после флага. В короткой форме - через пробел или сразу за буквой флага без разделителей. В длинной - через знак равенства (=).

Пример:

$ ls -h -w60 --sort=time /etc

; Команда ls (список содержимого каталога) получает параметр /etc (какой каталог вывести), и три флага - -h без параметра, -w с параметром 60 и --sort с параметром time.

Флаги в коротком формате могут быть записаны друг за другом (если у них нет параметров). Например вышеприведённая команда может выглядеть так: $ ls -hw60 --sort=time /etc.

Пробелы являются разделителями между командой, флагами и параметрами. Если параметр содержит пробел, он будет проинтерпретирован как два разных параметра, разделённых пробелом. Чтобы заставить интерпретатор считать пробел обычным символом (а не специальным символом-разделителем), необходимо этот пробел экранировать, это можно сделать взяв параметр в кавычки ($ ls "Рабочий стол") или лучше поставив обратный слэш (\) перед экранируемым символом ($ ls Рабочий\ стол).

Необязательные параметры -- это дополнительные ключи (опции), которые оказывают влияние на поведение сценария и/или командной оболочки.

3.история команд, дополнение команд, справка по командам (внешним, внутренним), другие источники информации.

4. работа с файловой системой - просмотр и смена каталога, операции над файлами и каталогами (создание, удаление, перемещение и т.п.)

5. псевдонимы (alias), файловые псевдонимы . .. ~

Псевдонимы в Bash — это ни что иное, как "горячие клавиши", средство, позволяющее избежать набора длинных строк в командной строке. Если, к примеру, в файл ~/.bashrc вставить строку alias lm="ls -l | more", то потом вы сможете экономить свои силы и время, набирая команду lm, вместо более длинной ls -l | more. Установив alias rm="rm -i" (интерактивный режим удаления файлов), вы сможете избежать многих неприятностей, потому что сократится вероятность удаления важных файлов по неосторожности.

Псевдонимы в сценариях могут иметь весьма ограниченную область применения. Было бы здорово, если бы псевдонимы имели функциональность, присущую макроопределениям в языке C, но, к сожалению, Bash не может "разворачивать" аргументы в теле псевдонима. [54] Кроме того, попытка обратиться к псевдониму, созданному внутри "составных конструкций", таких как if/then, циклы и функции, будет приводить к появлению ошибок. Практически всегда, действия, возлагаемые на псевдоним, более эффективно могут быть выполнены с помощью функций.

6. шаблоны ? * , экранирование \ ' ", поиск файлов

* используется для обозначения любого объекта. Например, просто * обозначает любой файл каталога; *.txt - все имена файлов с расширением txt; gorilla.* - все имена файлов, начинающиеся со слова gorilla.

? обозначает любой (но только один) символ. Например, source.? обозначает source.h, source.c, source.y и т.д.

Кавычки, ограничивающие строки с обеих сторон, служат для предотвращения интерпретации специальных символов, которые могут находиться в строке. (Символ называется "специальным", если он несет дополнительную смысловую нагрузку, например символ шаблона — *.)

Вообще, желательно использовать двойные кавычки (" ") при обращении к переменным. Это предотвратит интерпретацию специальных символов, которые могут содержаться в именах переменных, за исключением $, ` (обратная кавычка) и \ (escape — обратный слэш). [14] То, что символ $ попал в разряд исключений, позволяет выполнять обращение к переменным внутри строк, ограниченных двойными кавычками ("$variable"), т.е. выполнять подстановку значений переменных (см. Пример 4-1, выше).

Двойные кавычки могут быть использованы для предотвращения разбиения строки на слова. [15] Заключение строки в кавычки приводит к тому, что она передается как один аргумент, даже если она содержит пробельные символы - разделители.

Одиночные кавычки (' ') схожи по своему действию с двойными кавычками, только не допускают обращение к переменным, поскольку специальный символ "$" внутри одинарных кавычек воспринимается как обычный символ. Внутри одиночных кавычек, любой специальный символ, за исключением ', интерпретируется как простой символ. Одиночные кавычки ("строгие, или полные кавычки") следует рассматривать как более строгий вариант чем двойные кавычки ("нестрогие, или неполные кавычки").

Экранирование — это способ заключения в кавычки одиночного символа. Экранирующий (escape) символ (\) сообщает интерпретатору, что следующий за ним символ должен восприниматься как обычный символ.