From 17873a0a78ce08660d804c7123adfda3629f86f8 Mon Sep 17 00:00:00 2001 From: Vasiliy Date: Mon, 13 Sep 2021 00:57:40 +0300 Subject: [PATCH 1/2] fix output in example --- content/lab02.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/content/lab02.rst b/content/lab02.rst index 17c1a8e..9fedbbb 100644 --- a/content/lab02.rst +++ b/content/lab02.rst @@ -87,7 +87,7 @@ man чтобы выйти из man, нажмите клавишу «q». -Иногда имена команд интерпретатора и системных вызовов или какие-либо еще имена совпадают. Тогда чтобы найти интересующую вас информацию, необходимо задать утилите `man` категорию, к которой относится эта информация (номер раздела). Деление информации по категориям может слегка отличаться от одной версии UNIX к другой. В Linux, например, принято следующее разделение: +Иногда имена команд интерпретатора и системных вызовов или какие-либо еще имена совпадают. Тогда, чтобы найти интересующую вас информацию, необходимо задать утилите `man` категорию, к которой относится эта информация (номер раздела). Деление информации по категориям может слегка отличаться от одной версии UNIX к другой. В Linux, например, принято следующее разделение: #. Исполняемые файлы или команды интерпретатора. #. Системные вызовы. @@ -116,9 +116,9 @@ man Директории. Команды pwd, ls, c ------------------------------- -Каждая выполняемая программа «работает» в строго определённой директории файловой системы. Такая директория называется текущей директорией, можно представлять, что программа во время работы «находится» именно в этой директории, это её «рабочее место». В зависимости от текущей директория может меняться поведение программы: зачастую программа будет по умолчанию работать с файлами, расположенными именно в текущей директория — до них она «дотянется» в первую очередь. Текущая директория есть у любой программы, в том числе и у командной оболочки пользователя. Поскольку взаимодействие пользователя с системой обязательно опосредовано командной оболочкой, можно говорить о том, что пользователь «находится» в той директория, которая в данный момент является текущей директорией его командной оболочки. +Каждая выполняемая программа «работает» в строго определённой директории файловой системы. Такая директория называется текущей директорией, можно представлять, что программа во время работы «находится» именно в этой директории, это её «рабочее место». В зависимости от текущей директории может меняться поведение программы: зачастую программа будет по умолчанию работать с файлами, расположенными именно в текущей директории — до них она «дотянется» в первую очередь. Текущая директория есть у любой программы, в том числе и у командной оболочки пользователя. Поскольку взаимодействие пользователя с системой обязательно опосредовано командной оболочкой, можно говорить о том, что пользователь «находится» в той директории, которая в данный момент является текущей директорией его командной оболочки. -Все команды, отдаваемые пользователем при помощи `bash`, наследуют текущую директорию `bash`, т. е. «работают» в той же директория. По этой причине пользователю важно знать текущую директория `bash`. Для этого служит утилита `pwd`: +Все команды, отдаваемые пользователем при помощи `bash`, наследуют текущую директорию `bash`, т. е. «работают» в той же директории. По этой причине пользователю важно знать текущую директорию `bash`. Для этого служит утилита `pwd`: .. code-block:: bash @@ -130,7 +130,7 @@ man Утилиты, которые мы рассмотрим далее, по умолчанию читают и создают файлы в текущей директории. -Для вывода содержимого текущей директории испольузется команда `ls`: +Для вывода содержимого текущей директории используется команда `ls`: .. code-block:: bash @@ -174,7 +174,7 @@ man drwxrwsr-x 6 root src 4096 Sep 8 21:25 src [user@comp ~]$ -В первой колонке показана информация о правах доступа к каждому файлу в списке. Следующая колонка показывает количество ссылок на каждый элемент списка. Третья и четвертая колонки — владелец и группа файла соответственно. Пятая колонка — размер. Шестая — время последнего изменения файла ('last modified time' или mtime). Последняя колонка — имя файла или директории (Если это ссылка, то после знака «–>» стоит имя объекта на который она ссылается). +В первой колонке показана информация о правах доступа к каждому файлу в списке. Следующая колонка показывает количество ссылок на каждый элемент списка. Третья и четвертая колонки — владелец и группа файла соответственно. Пятая колонка — размер. Шестая — время последнего изменения файла ('last modified time' или mtime). Последняя колонка — имя файла или директории (Если это ссылка, то после знака «–>» стоит имя объекта, на который она ссылается). Иногда возникает потребность посмотреть информацию только о директориях, а не о всем их содержимом. С этой задачей поможет справиться опция `-d`, которая указывает команде выводить информацию только о директориях. @@ -509,11 +509,11 @@ Vim (сокр. от Vi Improved, произносится Вим) — текст .. code-block:: bash - [user@comp ~]$ export ENV_VAR=Bye + [user@comp ~]$ export ENV_VAR=Goodbye [user@comp ~]$ echo $ENV_VAR Goodbye [user@comp ~]$ env | grep ENV_VAR - ENV_VAR=Bye + ENV_VAR=Goodbye [user@comp ~]$ Интерпретация значений переменных полностью возлагается на программу. Чтобы вывести на экран значение какой-нибудь переменной окружения, достаточно набрать `echo $ИМЯ_ПЕРЕМЕННОЙ`: @@ -551,11 +551,11 @@ Var — это любая переменная, которую вы хотите .. code-block:: bash - [user@comp ~]$ export ENV_VAR=Bye + [user@comp ~]$ export ENV_VAR=Goodbye [user@comp ~]$ echo $ENV_VAR Goodbye [user@comp ~]$ env | grep ENV_VAR - ENV_VAR=Bye + ENV_VAR=Goodbye [user@comp ~]$ unset ENV_VAR [user@comp ~]$ env | grep ENV_VAR [user@comp ~]$ From ec70d7091192636bca99f7aad35ceef4db66a340 Mon Sep 17 00:00:00 2001 From: Vasiliy Date: Tue, 14 Sep 2021 13:59:15 +0300 Subject: [PATCH 2/2] =?UTF-8?q?not=20-=20but=20=E2=80=94=20in=20lab=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/lab02.rst | 64 +++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/content/lab02.rst b/content/lab02.rst index 9fedbbb..1a3af02 100644 --- a/content/lab02.rst +++ b/content/lab02.rst @@ -24,7 +24,7 @@ Введение ======== -Kомандный интерпретатор (или командная оболочка) – это программа, принимающая и выполняющая программы. Командный интерпретатор также поддерживает конструкции программирования, позволяя составлять сложные команды из более простых. Эти сложные команды, или сценарии можно сохранять в виде файлов, которые могут становиться новыми самостоятельными командами. В действительности многие команды в обычной Linux-системе являются сценариями. +Kомандный интерпретатор (или командная оболочка) — это программа, принимающая и выполняющая программы. Командный интерпретатор также поддерживает конструкции программирования, позволяя составлять сложные команды из более простых. Эти сложные команды, или сценарии можно сохранять в виде файлов, которые могут становиться новыми самостоятельными командами. В действительности многие команды в обычной Linux-системе являются сценариями. Мы рассмотрим командный интерпретатор bash – это один из нескольких интерпретаторов, доступных в Linux. Для ввода данных и вывода результатов интерпретаторы используют три стандартных потока ввода/вывода: @@ -382,7 +382,7 @@ Shell скрипты Код возврата последней команды хранится в специальной переменной `$?`. После исполнения кода функции, переменная `$?`` хранит код завершения последней команды, исполненной в функции. Таким способом в bash передается "значение, возвращаемое" функцией. После завершения работы сценария, код возврата можно получить, обратившись из командной строки к переменной `$?`, т.е. это будет код возврата последней команды, исполненной в сценарии. -Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней команды. Команде `exit` можно явно указать код возврата, в виде: `exit nnn`, где `nnn` -- это код возврата (число в диапазоне 0 - 255). +Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней команды. Команде `exit` можно явно указать код возврата, в виде: `exit nnn`, где `nnn` — это код возврата (число в диапазоне 0 - 255). Когда работа сценария завершается командой `exit` без параметров, то код возврата сценария определяется кодом возврата последней исполненной командой. @@ -404,9 +404,9 @@ Vim (сокр. от Vi Improved, произносится Вим) — текст [user@comp ~]$ vi <имя файла> Затем можно нажать клавишу `i` (или `insert`) и внести нужные изменения. -Если вместо `i` нажать `a`, текст будет вставляться за символом на котором стоит курсор (обычно используется при редактировании файлов этот метод), если нажать `o` - будет вставлена новая строка. +Если вместо `i` нажать `a`, текст будет вставляться за символом на котором стоит курсор (обычно используется при редактировании файлов этот метод), если нажать `o` — будет вставлена новая строка. -Стирать текст следует выйдя из режима редактирования клавишей `Esc` и затем можно использовать клавишу `x` - она работает как клавиша `del` - стирает вперед, если нажимать `shift+x`, то будет стирать назад (по аналогии с `backspace`) +Стирать текст следует выйдя из режима редактирования клавишей `Esc`, и затем можно использовать клавишу `x` — она работает как клавиша `del`: стирает вперёд; если нажимать `shift+x`, то будет стирать назад (по аналогии с `backspace`). После редактирования нажмите `(esc):wq` чтобы выйти с сохранением текста. @@ -421,7 +421,7 @@ Vim (сокр. от Vi Improved, произносится Вим) — текст Переменные окружения в Linux набор пар ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ, которые могут использоваться программами во время выполнения. Удобно, когда программа "угадывает" имя пользователя или домашний каталог пользователя. Чаще всего такая информация "добывается" из переменных окружения USER и HOME соответственно. Переменные могут определяться системой и пользователем. Системные переменные окружения Linux определяются системой и используются программами системного уровня. Пользовательские переменные окружения устанавливаются пользователем, для текущей оболочки, временно или постоянно. Переменные окружения могут формироваться как из заглавных, так и из строчных символов, однако исторически сложилось именовать их в верхнем регистре. Значение каждой переменной окружения изначально представляет собой строковую константу (строку). -Командные оболочки, такие как bash, располагают собственным набором пар ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ - это переменные оболочки. Набор таких переменных называют окружением (или средой) оболочки. Эти переменные чем-то напоминают локальные переменные в языке C. Они недоступны для других программ и используются в основном в сценариях оболочки. Чтобы задать переменную оболочки, достаточно написать в командной строке ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. +Командные оболочки, такие как bash, располагают собственным набором пар ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ — это переменные оболочки. Набор таких переменных называют окружением (или средой) оболочки. Эти переменные чем-то напоминают локальные переменные в языке C. Они недоступны для других программ и используются в основном в сценариях оболочки. Чтобы задать переменную оболочки, достаточно написать в командной строке ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. Для того, чтобы посмотреть список переменных, определенных в текущей оболочке запустите в терминале команду `set`: @@ -541,7 +541,7 @@ Var — это любая переменная, которую вы хотите После запуска такого окружения, не будет доступно никаких переменных, но после выхода все вернется на свои места. -Существует другой способ удаления переменных окружения Linux - команда unset, удаляет переменную по имени до конца текущей сессии: +Существует другой способ удаления переменных окружения Linux — команда unset, удаляет переменную по имени до конца текущей сессии: .. code-block:: bash @@ -582,7 +582,7 @@ PATH или [user@comp ~]$ PATH=<путь к директории>:$PATH -В первом случае поиск в добавленной директории будет происходить в последнюю очередь (только если запускаемый файл не найден в директориях, перечисленных в исходном значении `$PATH`), во втором случае - сначала в добавленной директории, а потом в исходном значении `$PATH`. +В первом случае поиск в добавленной директории будет происходить в последнюю очередь (только если запускаемый файл не найден в директориях, перечисленных в исходном значении `$PATH`), во втором случае — сначала в добавленной директории, а потом в исходном значении `$PATH`. Отметим, что можно включить в этот список и текущий каталог, добавив в переменную `PATH` точку. Однако этого не рекомендуется делать по соображениям безопасности: злоумышленник может положить в общедоступный каталог команду, имя которой совпадает с одной из часто выполняемых суперпользователем команд, но выполняющую совершенно другие действия (особенно если текущий каталог стоит в начале перечня путей поиска). @@ -593,14 +593,17 @@ PATH Для входа в операционную систему UNIX каждый пользователь должен быть зарегистрирован в ней под определенным именем. Все пользователи в системе делятся на группы пользователей. Например, все студенты одной учебной группы могут составлять свою собственную группу пользователей. Группы пользователей также получают свои имена. Для получания информации об активных пользователях сущестует несколько команд: -#. `users` - выводит информацию о пользователях, подключенных к системе данный момент. -#. `w` - список пользователей, подключенных к системе: виртуальный терминал, с которого работает пользователь; время входа в систему для каждого пользователя, статистику использования системы (IDLE - время простоя, JCPU - использование процессора), выполняемые каждым пользователем задачи. -#. `who` - список пользователей, подключенных к системе; время и дату входа каждого пользователя. -#. `whoami` - имя пользования, который ввел команду. -#. `ps` - выдает информацию об активных процессах. По умолчанию информация дается только о процессах, ассоциированных с данным терминалом. Выводятся идентификатор процесса, идентификатор терминала, истраченное к данному моменту время ЦП и имя команды. Если нужна иная информация, следует вопользоваться опцией `-e`. +#. `users` — выводит информацию о пользователях, подключенных к системе данный момент. +#. `w` — список пользователей, подключенных к системе: виртуальный терминал, с которого работает пользователь; время входа в систему для каждого пользователя, статистику использования системы (IDLE — время простоя, JCPU — использование процессора), выполняемые каждым пользователем задачи. +#. `who` — список пользователей, подключенных к системе; время и дату входа каждого пользователя. +#. `whoami` — имя пользования, который ввел команду. +#. `ps` — выдает информацию об активных процессах. По умолчанию информация дается только о процессах, ассоциированных с данным терминалом. Выводятся идентификатор процесса, идентификатор терминала, истраченное к данному моменту время ЦП и имя команды. Если нужна иная информация, следует вопользоваться опцией `-e`. -Для каждого файла, созданного в файловой системе запоминаются имена его хозяина и группы хозяев. Заметим, что группа хозяев не обязательно должна быть группой, в которую входит хозяин. В операционной системе Linux при создании файла его хозяином становится пользователь, создавший файл, а его группой хозяев - группа, к которой он принадлежит. Впоследствии хозяин файла или системный администратор может передать его в собственность другому пользователю или изменить его группу хозяев с помощью команд `chown` и `chgrp`, описание которых можно найти в UNIX Manual. +Для каждого файла, созданного в файловой системе запоминаются имена его хозяина и группы хозяев. +Заметим, что группа хозяев не обязательно должна быть группой, в которую входит хозяин. +В операционной системе Linux при создании файла его хозяином становится пользователь, создавший файл, а его группой хозяев — группа, к которой он принадлежит. +Впоследствии хозяин файла или системный администратор может передать его в собственность другому пользователю или изменить его группу хозяев с помощью команд `chown` и `chgrp`, описание которых можно найти в UNIX Manual. Таким образом, для каждого файла выделяется три категории пользователей: @@ -611,7 +614,14 @@ PATH #. Все остальные пользователи. -Для каждой из этих категорий пользователей владелец файла может определить различные права доступа к файлу, используя команду `chmod`. Различают три вида прав доступа: право на чтение файла - r(read), право на модификацию файла - w (write) и право на исполнение файла - x (execute). Для регулярных файлов смысл этих прав совпадает с указанным выше. Для директорий он несколько меняется. Право чтения для каталогов позволяет читать имена файлов, находящихся в этом каталоге (и только имена). Поскольку "исполнять" директорию бессмысленно (как, впрочем, и не исполняемый регулярный файл) право доступа на исполнение для директорий меняет смысл: наличие этого права позволяет получить дополнительную информацию о файлах, входящих в каталог: их размер, кто их хозяин, дата создания и т.д. Право на исполнение также требуется для директории, чтобы сделать ее текущей, а также для всех директорий по пути к указанной. Право записи для директории позволяет изменять ее содержимое: создавать и удалять в ней файлы, переименовывать их. Отметим, что для удаления файла достаточно иметь право записи для директории, в которую непосредственно входит данный файл, независимо от прав доступа к самому файлу. +Для каждой из этих категорий пользователей владелец файла может определить различные права доступа к файлу, используя команду `chmod`. +Различают три вида прав доступа: право на чтение файла - r(read), право на модификацию файла - w (write) и право на исполнение файла - x (execute). +Для регулярных файлов смысл этих прав совпадает с указанным выше. +Для директорий он несколько меняется. +Право чтения для каталогов позволяет читать имена файлов, находящихся в этом каталоге (и только имена). +Поскольку "исполнять" директорию бессмысленно (как, впрочем, и не исполняемый регулярный файл) право доступа на исполнение для директорий меняет смысл: наличие этого права позволяет получить дополнительную информацию о файлах, входящих в каталог: их размер, кто их хозяин, дата создания и т.д. +Право на исполнение также требуется для директории, чтобы сделать ее текущей, а также для всех директорий по пути к указанной. +Право записи для директории позволяет изменять ее содержимое: создавать и удалять в ней файлы, переименовывать их. Отметим, что для удаления файла достаточно иметь право записи для директории, в которую непосредственно входит данный файл, независимо от прав доступа к самому файлу. chmod ----- @@ -626,23 +636,23 @@ chmod References определяют пользователей, которым будут меняться права. References определяются одной или несколькими буквами: -#. u (user) - Владелец файла -#. g (group) - Пользователи, входящие в группу владельца файла -#. o (others) - Остальные пользователи -#. a (all) - Все пользователи (или ugo) +#. `u` (user) — Владелец файла +#. `g` (group) — Пользователи, входящие в группу владельца файла +#. `o` (others) — Остальные пользователи +#. `a` (all) — Все пользователи (или ugo) Operator определяет операцию, которую будет выполнять `chmod`: -#. \+ - добавить определенные права -#. \- - удалить определенные права -#. = - установить определенные права +#. `\+` — добавить определенные права +#. `\-` — удалить определенные права +#. `=` — установить определенные права Modes определяет какие именно права будут установлены, добавлены или удалены: -#. r (read) -чтение файла или содержимого каталога -#. w (write) - запись в файл или в каталог -#. x (execute) - выполнение файла или чтение содержимого каталога +#. `r` (read) — чтение файла или содержимого каталога +#. `w` (write) — запись в файл или в каталог +#. `x` (execute) — выполнение файла или чтение содержимого каталога Например: @@ -652,7 +662,7 @@ Modes определяет какие именно права будут уст [user@comp ~]$ chmod u+rx,g-x,o-wx -В числовом виде, права задаются в виде трехзначного числа, каждая цифра которого задает права файла для определенной категории пользователей - первая для владельца, вторая - группы, третья - остальных. +В числовом виде, права задаются в виде трехзначного числа, каждая цифра которого задает права файла для определенной категории пользователей — первая для владельца, вторая — группы, третья — остальных. Варианты записи прав пользователя @@ -822,9 +832,9 @@ Cигналы и команда kill .. code-block:: bash - [user]$ kill [-сигн] PID [PID..] + [user]$ kill [-signal] PID -где сигн — это номер сигнала, причем если указание сигнала опущено, то посылается сигнал 15 (`TERM` — программное завершение процесса). Чаще всего используется сигнал 9 (`KILL`), с помощью которого суперпользователь может завершить любой процесс. Но сигнал этот очень "грубый", если можно так выразиться, поэтому его использование может привести к нарушению порядка в системе. Поэтому в большинстве случаев рекомендуется использовать сигналы TERM или QUIT, которые завершают процесс более "мягко". +где signal — это имя или номер сигнала, причём если указание сигнала опущено, то посылается сигнал 15 (`TERM` — программное завершение процесса). Чаще всего используется сигнал 9 (`KILL`), с помощью которого суперпользователь может завершить любой процесс. Но сигнал этот очень "грубый", если можно так выразиться, поэтому его использование может привести к нарушению порядка в системе. Поэтому в большинстве случаев рекомендуется использовать сигналы TERM или QUIT, которые завершают процесс более "мягко". Естественно, что наиболее часто команду `kill` вынужден применять суперпользователь. Он должен использовать ее для уничтожения процессов-зомби, зависших процессов (они показываются в листинге команды `ps` как ), процессов, которые занимают слишком много процессорного времени или слишком большой объем памяти и т. д.