8.1. Командный интерпретатор Shell

Командный язык shell (в переводе - раковина, скорлупа) фактически есть язык программирования очень высокого уровня. На этом языке пользователь осуществляет управление компьютером. Обычно, после входа в систему вы начинаете взаимодействовать с командной оболочкой. Признаком того, что оболочка (shell) готова к приему команд служит выдаваемый ею на экран промптер. В простейшем случае это один доллар ("$"). Shell не является необходимым и единственным командным языком (хотя именно он стандартизован в рамках POSIX [POSIX 1003.2] - стандарта мобильных систем). Например, немалой популярностью пользуется язык cshell, есть также kshell, bashell и другие. Более того, каждый пользователь может создать свой командный язык. Может одновременно на одном экземпляре операционной системы работать с разными командными языками. shell - это одна из многих команд UNIX. То есть в набор команд оболочки "shell" входит команда "sh" - вызов интерпретатора "shell". Первый "shell" вызывается автоматически при вашем входе в систему и выдает на экран промтер. После этого вы можете вызывать на выполнение любые команды, в том числе и снова сам "shell", который вам создаст новую оболочку внутри прежней. [1]

Все версии интерпретатора обеспечивают интерфейс "пользователь-ядро" и выполняют следующие функции:

  • Интерпретация команды
  • Обработка имен файлов, определяемых через мета-символы
  • Осуществление переадресации ввода/вывода
  • Создание среды пользователя
  • Поддержка командного языка

Интерпретация команды - проверка команды на синтаксис. Команды shell реализуются обычными программами, находящимися в одном из каталогов файловой системы UNIX. Интерпретация команд осуществляется согласно интерактивному режиму работы.

Обработка имен файлов разрешает использование большого набора мета-символов (например, «*»), для сокращения записи имен файлов.

Осуществление переадресации ввода/вывода. Если требуется, shell легко перераспределяет устройства ввода/вывода, например: ls > file - вывод команды ls будет осуществлен в файл с именем file (вместо экрана монитора). Операция ‘>’ – это переадресация вывода. Чтобы добавлять информацию в конец уже существующего файла, определена операция слабой переадресации ‘>>’.

Аналогично переадресация вывода осуществляется переадресация ввода ‘<<’, ‘<’, например при выполнении команды mail tty01 tty02 tty03 < let все данные из файла let поступят на три терминала tty01, tty02, tty03; последовательность команд who > temp, sort < temp позволит получить список пользователей, работающих в настоящий момент в системе, в алфавитном порядке.

Сообщения об ошибках, возникающих при выполнении команд, выводятся на экран. Поток ошибок обозначается 2.

Его можно перенаправить в какой-либо файл: grep 3 * 2> /dev/null – сообщения о том, что в каких-то файлах не найдены строки с 3, отправлены в файл /dev/null домашнего каталога; ls –l D1 2>error – поток ошибок отправлен в файл текущего каталога.

Shell также допускает объединение нескольких команд в конвейер для их совместного последовательного выполнения. В этом случае связь между командами осуществляется через межпроцессный канал. Результат выполнения одной команды сразу поступает на вход другой. По сути, конвейер является простейшей программой на командном языке, которая позволяет, используя ряд синтаксических конструкций, объединять команды с программой, интерпретируемой, как единое целое. Например, с помощью операции конвейера ‘|’ последнюю последовательность команд можно записать в следующем виде who | sort.

С помощью операций «и» ‘&&’ и «или» ‘||’ можно формировать условную последовательность выполнения. Например: cc – o a.exe a.c && ./a.exe - ./a.exe будет выполняться только если компиляция исходной программы прошла успешно.

Создание среды пользователя. Для каждого пользователя shell организует доступ к любой команде.

Поддержка командного языка. Для эффективного взаимодействия команд в рамках программ на командном языке интерпретатор разрешает использование специальных переменных, обычных идентификаторов, которые объявляются и инициализируются присваиванием и, к которым при использовании добавляется символ $ или %. Помимо переменных, вводимых пользователем, shell позволяет использовать специальные системные переменные, такие как $# - число внешних аргументов (позиционных параметров) выполняемой команды, $ - все переменные shell, символ `(«тупое» ударение) или {} - подстановка результата выполнения команды и др. [2]

8.2. Команды работы с файлами

В командной строке команда вводится следующим образом:

						команда –ключи параметры (через пробел)
					

Ключи – символы, уточняющие значение команды.

Параметры – имена файлов.

Основные команды:

1) man команда (команда --help) - справка ОС UNIX по команде и её ключам. Практически каждая команда имеет достаточно больной набор ключей, расширяющий её функционал.

2) ls -ключи имя - Просмотр содержимого каталога (списка файлов).

Примеры:

ls –l /usr/sbin – получить подробную информацию о содержимом каталога /usr/sbin с атрибутами файлов;

ls –l *.c – получить сведения о файлах текущего каталога, имена которых заканчиваются на «.с» (* обозначаются все файлы каталога).

ls –R – рекурсивный просмотр текущего каталога.

3) cd каталог - смена текущего каталога на указанный.

Примеры:

cd /usr/sbin – перейти в каталог /usr/sbin;

cd .. – перейти в каталог выше (parental);

cd text – перейти в каталог text, расположенный в текущем каталоге.

cd ~ - перейти в свой домашний каталог.

4) mkdir каталог - создание каталога с указанным именем.

5) pwd - Выдает полное имя текущего каталога.

6) rmdir каталог - Удаление указанного каталога (без ключа удаляет только пустой каталог).

7) touch файл - Создать пустой файл с указанным именем.

8) cat файл (less файл – просмотр вверх и вниз) - Выдает содержимое указанного файла на экран.

Примеры:

cat a1 – посмотреть содержимое файла а1.

cat > файл –создать файл. (CTRL+c (z) – прекращение работы с командой.)

9) head, tail –n файл - Посмотреть только первые n строк (head) или последние n строк (tail) файла.

10) cp файл(ы) куда - Копирование файла в указанный файл или каталог.

Примеры:

cp ~/а1 а2– копирование файла а1 в файл а2;

cp а1 /home/john/D1 – файла а1, в указанный каталог D1.

11) mv файл(ы) куда - Переименование или перемещение файлов.

Примеры:

mv a1 a2 – переименовать файл а1 в а2.

mv a1 ~/D1 – переместить а1 в каталог D1

12) rm файл(ы) - Удаление указанного файла или группы файлов, заданных шаблоном имени.

Примеры:

rm а1– удаление файла а1;

rm -rf * - очистка текущего каталога.

13) ln файл имя_ссылки - Создание жёсткой ссылки на указанный файл с указанным именем.

14) ln –s файл имя_ссылки - Создание символической ссылки.

15) vi файл (vim-tiny файл) - Редактирование файла (если указанный файл существует, он будет открыт в редакторе, иначе редактор создаст новый файл с заданным именем).

Клавишы:

  • i, а – режим редактирования;
  • ESC – выход из режима редактирования;
  • :w – сохранение текущего файла;
  • :w file – сохранение файла под именем file;
  • :wq - сохранение файла и выход из vi;
  • :r file - вставить в текущий файл содержимое файла file.

16) nano файл – тоже редактор файла.

Клавишы:

  • ctrl+o enter – сохранить изменения;
  • ctrl+x – выход из редактора.

17) chmod mode file - Изменяет права доступа к файлу.

Три базовых класса доступа к файлу:

  • User access (u) -для владельца-пользователя;
  • Group access (g)-для членов группы, являющейся владельцем файла;
  • Other access (о) - для остальных пользователей (кроме root).

Три типа прав доступа для каждого класса:

  • на чтение (read - r);
  • на запись (write - w);
  • на выполнение (execute - х).

Примеры:

chmod g-wx а1 – у группы забрать права на запись и исполнение файла а1.

chmod a+w а1 – всем добавить право на запись

chmod go=r а1 – для файла а1 присвоить права только для группы и остальных на чтение

chmod 777 а1 – у всех все права.

Числовой способ изменения прав доступа:

1 – право есть; 0 – права нет.

Пример: хотим rwxr-xr--, т.е. все права владельцу (rwx = 111), группе – чтение и запуск (r-x = 101), остальным – только чтение (r-- = 100).

Переводим полученные двоичные числа в десятичные: 111 = 7, 101 = 5, 100 = 4.

Вводим команду chmod 754 file.

18) grep “образец” файл - Поиск образца в строках текста файла. В качестве «образца» может выступать некое регулярное выражение, посредством которого можно отыскать текст или фразу определённой структуры.

Примеры:

grep 3 * - найти 3 в строках всех файлов текущего каталога.

grep vova a1 – показать строки файла а1 с «vova».

grep –E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}“ /etc/resolv.conf – поиск строк с IP-адресами в тексте файла /etc/resolv.conf.

19) cut –fn –d”разделитель” файл - Вывести содержимое n-го столбца файла с указанным разделителем.

Примеры:

cut –f2,5 -d” ” а1 – вырезать 2-й и 5-й столбцы файла а1, отделённые пробелом.

cut –f2 -d”:” а1 – вырезать 2-й столбец, отделённый двоеточием.

20) sort файл - Сортирует строки файла (по алфавиту).

Ключи:

  • -r - сортирует в обратном порядке;
  • -o файл - сохраняет результат сортировки в выходном файле;
  • -u - выводит повторяющие строки только один раз;
  • -n - сортирует по числовому коду символа;
  • -kn - по указанному номеру поля (столбцу).

Примеры:

sort -r a1 –o a2 – отсортировать файл а1 в обратном порядке, результат вывести в файл а2

21) find где_искать что_искать - Поиск файла (каталога) в файловой системе. Можно искать файлы по имени, размеру, по типу, правам доступа и т.д.

Пример:

find /usr –name “*.html” –type f – поиск обычных файлов с расширением html в каталоге /usr.

22) wc -ключ файл - Подсчет символов, строк и слов.

Ключи:

  • -l – количество строк,
  • -w – количество слов,
  • – количество символов.

Примеры:

wc –l /etc/passwd – вывести число строк в файле /etc/passwd (число зарегистрированных в системе пользователей).

23) еcho параметры - Выдает на экран свои параметры.

Пример:

еcho “Hello People”– выдать на экран «Hello people».

24) du каталог – показывает размер каталога.

Источники:

1. Командный язык shell. - URL: http://housecomputer.ru/programming/shell/shell_faq.html

2. StudFiles. Интерпретатор команд shell. – URL: https://studfiles.net/preview/1049721/page:7/