Значение nice устанавливается для каждого процесса в момент порождения этого процесса и при обычном запуске команд или программ принимается равным приоритету родительского процесса. Приоритет процесса определяется так называемым "значением nice", которое лежит в пределах от -20 (максимальный приоритет), до 19 (минимальный приоритет). Приоритет по умолчанию равен 10. программа nice — она позволяет запустить любую программу с указанным приоритетом. Ясно — чем выше приоритет, тем быстрее будет выполняться программа. Формат вызова команды следующий:
nice -n <приоритет> команда аргументы
Отрицательные значения может устанавливать только суперпользователь. Если значение приоритета не задано, то по умолчанию для процесса-потомка устанавливается значение nice, увеличенное на 10 по сравнению со значением nice родительского процесса.
Если процесс уже запущен, тогда для изменения его приоритета можно использовать команду renice: renice – n <приоритет> - pPID
renice priority [[-p] PID] [[-g] grp] [[-u] user]
Например, команда
[root]# renice -1 987 -u daemon -p 32 - увеличивает на 1 приоритет процессов с PID 987 и 32, а также всех процессов пользователя daemon.
Суперпользователь может изменить приоритет любого процесса в системе. Другие пользователи могут изменять значение приоритета только для тех процессов, для которых данный пользователь является владельцем. При этом обычный пользователь может только уменьшить значение приоритета (увеличить значение nice), но не может увеличить приоритет, даже для возврата значения nice к значению, устанавливаемому по умолчанию. Поэтому процессы с низким приоритетом не могут породить "высокоприоритетных детей".
Контрольные вопросы:
1) Для чего служит команда ps?
2) Для чего служит команда top?
3) По каким значениям можно отсортировать вывод команды top?
4) В каком диапазоне задается приоритет процесса?
5) Чем отличается команда nice от renice?
Литература:
1. Э. Таненбаум. Современные операционные системы. 4-е изд. Питер 2015
2. Д. Колисниченко. Linux от новичка до профессионала 4-е издание «БХВ - Петербург» 2012
Лекция 22. Механизм контроля доступа в ОС UNIX.
План занятия:
1. Управление доступом в Linux
2. Виды доступа
3. Модификаторы доступа
Ход лекции
Управление доступом в Linux
Классическая система управления доступом в Linux несколько отличается от рассмотренной выше системы в Windows, хотя присутствуют и общие черты.
В отличие от Windows большинство объектов разграничения доступа представлено в Linux в виде файлов, т.о. образом разграничение доступа к файловой системе является в данной ОС важнейшей задачей системы управления доступом.
Управление доступом к файловой системе
Каждый пользователь в системе имеет свой уникальный идентификационный номер (user ID, или UID). Группы также имеют такой идентификатор, который называется group ID, или GID.
В свою очередь файлы имеют двух владельцев: пользователя (user owner) и группу пользователей (group owner). Для каждого файла есть индивидуальные права доступа, которые разбиты на три группы:
1. Доступ для пользователя-владельца файла (owner).
2. Доступ для группы-владельца файла (group).
3. Доступ для остальных пользователей (others).
Виды доступа
Для каждой категории устанавливаются три вида доступа: (x) - право на запуск файла, (r) - право на чтение файла, (w) - право на изменение (редактирование) файла. Т.е. права доступа можно представить в виде битовой строки, в которой каждые 3 бита определяют права доступа для соответствующей категории пользователей. Эти биты отвечают за право на чтение, запись и исполнение файла или каталога. Если бит установлен в 1 – операция разрешена, если в 0 – запрещена, т.о. права доступа к файлу или каталогу описываются тремя восьмеричными цифрами, самая левая из которых – права доступа владельца, средняя – права группы, правая – права доступа для всех остальных.
Право на чтение файла позволяет пользователю читать содержимое файла. Для каталога установка права на чтение позволяет читать файлы, находящиеся в этом каталоге.
Право на запись файла позволяет пользователю изменять его содержимое. Для каталога - создавать файлы внутри каталога.
Право на выполнение для файла позволяет запускать файл на выполнение в качестве программы. Для каталога установка этого права дает возможность пользователю входить в каталог и просматривать его содержимое.
Помимо прав доступа существуют так называемые модификаторы доступа. К наиболее используемым модификаторам доступа относятся SUID и SGID.
Модификаторы доступа
SUID. Если файлу установлен модификатор доступа SUID и файл исполняемый, то файл при запуске на выполнение получает не права пользователя, запустившего его, а права владельца файла. Такие приемы используются для того, чтобы пользователь мог работать с некоторыми системными файлами, владельцем которых является привилегированный пользователь. К примеру, для того, чтобы пользователь мог самостоятельно изменить свой пароль при помощи программы passwd, у этой программы, владельцем которой является пользователь root, должен быть установлен бит SUID, поскольку она работает с файлом shadow, модификацию которого имеет право производить только пользователь root.
SGID. Если файл имеет модификатор доступа SGID, то это аналогично установке бита SUID, только вместо владельца файла используется группа, которой принадлежит файл. В случае установки SGID для каталога файлы, содержащиеся в этом каталоге, будут иметь установки группы такие же, как у каталога.
Модификаторы доступа при правильном использовании представляют очень мощное и гибкое средство. С другой стороны, неправильная настройка системы с использованием этих модификаторов может свести все действия по обеспечению безопасности к нулю. Особенно опасной представляется ситуация, когда тот же SUID установлен на исполняемый файл, принадлежащий привилегированному пользователю. При выполнении файла запустивший его пользователь получает право выполнять операции, доступные только пользователю root. Если даже файл не выполняет никаких системных операций и не работает с системными файлами, неправильное его использование может привести к очень неприятным последствиям.
Контрольные вопросы:
1. Как осуществляется управление доступом в Linux?
2. Какие есть виды доступа?
3. Для чего предназначены модификаторы доступа?
Литература:
1. А. В. Гордеев. Операционные системы. Питер 2009 г
2. Д. Колисниченко. Linux от новичка до профессионала 4-е издание «БХВ - Петербург» 2012
Лекция 23. Права доступа в ОС Linux.
План занятия:
4. Права доступа к файлам
5. Права доступа к каталогам
6. Изменение прав доступа
Ход лекции
Права доступа к файлам
Для каждого объекта в файловой системе Linux существует набор прав доступа, определяющий взаимодействие пользователя с этим объектом. Такими объектами могут быть файлы, каталоги, процессы, а также специальные файлы (например, устройства). Так у каждого объекта в Linux имеется владелец, то права доступа применяются относительно владельца файла. Они состоят из набора 3 групп по три атрибута:
- чтение(r), запись(w), выполнение(x) для владельца;
- чтение, запись, выполнение для группы владельца;
- чтение, запись, выполнение для всех остальных.
Такие права можно представить краткой записью:
rwxrwxrwx – разрешено чтение, запись и выполнение для всех
rwxr-xr-x – запись разрешена только для владельца файла, а чтении и выполне-ние для всех.
rw-rw-r-- – запись разрешена для владельца файла и группы владельца файла, а чтение – для всех.
Такое распределение прав позволяет гибко управлять ресурсами, доступными пользователям.
Права доступа к каталогам
Права доступа распространяются и на каталоги. Они означают:
r – если установлено право на чтение из каталога, то можно увидеть его содержимое командой ls.
w – если установлено право записи в каталог, то пользователь может создавать и удалять файлы из текущего каталога. Причем удалить файл из каталога пользователь может даже если у него нет прав на запись в файл. Есть возможность исправить эту ситуацию. Об этом я скажу позже.
х – если установлено право исполнения на каталог, то пользователь имеет право перейти в такой каталог командами наподобие cd.
Таким образом появляется возможность создания так называемых “скрытых” каталогов, когда невозможно получить список файлов, но пользователь точно знающий имя файла может скопировать его из “скрытого“ каталога.
Изменение прав доступа
Для распределения прав доступа в Linux существует множество команд. Основные из них – это chmod, chown и chgrp.
Команда chmod (ChangeMODe – сменить режим) – изменяет права доступа к файлу. Для использования этой команды также необходимо иметь права владельца файла или права root. Синтаксис команды таков:
chmodmodefilename, где
filename – имя файла, у которого изменяются права доступа;
mode – права доступа, устанавливаемые на файл. Права доступа можно записать в 2 вариантах – символьном и абсолютном.
В символьном виде использование команды chmod будет выглядеть следующим образом:
|r|
|u| |w|
|g| |+| |x|
chmod |o| |-| |X| filename,
|a| |=| |u|
|g|
|o|
где:
u,g,o,a – установка прав для пользователя, группы, остальных пользователей, всех групп прав доступа соответственно.
+,-,= – добавить, удалить, установить разрешениесоответственно.
r,w,x,X,u,g,o – право чтения, записи, выполнения, выполнения если есть такое право еще у какой либо из групп доступа, такие же как у владельца, такие же как у группы, такие же как у остальных пользователей.
filename - Имя файла, у которого изменяются права.
[student@ns student]$ ls -l lesson5.txt
-rw------- 1 student student 39 Nov 19 15:17 lesson5.txt
[student@ns student]$ chmod g+rw lesson5.txt
[student@ns student]$ ls -l lesson5.txt
-rw-rw---- 1 student student 39 Nov 19 15:18 lesson5.txt
[student@ns student]$ chmod o=u lesson5.txt
[student@ns student]$ ls -l lesson5.txt
-rw-rw-rw- 1 student student 39 Nov 19 15:18 lesson5.txt
[student@ns student]$ chmod o-w lesson5.txt
[student@ns student]$ ls -l lesson5.txt
-rw-rw-r-- 1 student student 39 Nov 19 15:19 lesson5.txt
[student@nsstudent]$_
Для использования абсолютного режима необходимо представить права доступа к файлу в виде 3-х двоичных групп. Так например:
rwxr-xr-- будет выглядеть как:
111 101 100
Теперь каждую двоичную группу перевести в 8-ричное число:
111 – 7, 101 – 5, 100 – 4.
Для перевода можно воспользоваться таблицей:
| Двоичная система | Восьмеричная система | Двоичная система | Восьмеричная система |
| 000 | 0 | 100 | 4 |
| 001 | 1 | 101 | 5 |
| 010 | 2 | 110 | 6 |
| 011 | 3 | 111 | 7 |
Чтобы задать файлу такие права необходимо выполнить команду:
[student@ns student]$ ls -l lesson5.txt
-rw-rw-r-- 1 student student 39 Nov 19 15:19 lesson5.txt
[student@ns student]$chmod 755 lesson5.txt
[student@ns student]$ ls -l lesson5.txt
-rwxr-xr-- 1 student student 39 Nov 19 15:19 lesson5.txt
Задание для обучаемых: попробовать изменить права файлу lesson5.txt и задать следующие: rwxr- - r - - (744), r - - - w- - - x(421), - - x - w - r - -(124).
Также предложить им проделать то же самое в символьном виде.
Команда chown (CHangeOWNer – сменить владельца) – позволяет сменить владельца файла. Для использования этой команды необходимо либо иметь права владельца текущего файла или права root. Синтаксис команды прост:
chownusername:groupnamefilename, где
username – имя пользователя – нового владельца файла;
groupname – имя группы – нового владельца файла;
filename – имя файла, у которого сменяется владелец.
Имя группы в синтаксисе команды можно не указывать, тогда будет изменен только владелец файла.
Команда chgrp используется для изменения владельца-группы файла. Синтаксис ее таков:
chgrpgroupnamefilename,
где:
groupname – имя группы, которой будет принадлежать файл
filename – имя изменяемого файла
Имейте в виду, что использовать команды chown и chmod может только пользователь-владелец файла и root, а команду chgrp - пользователь-владелец файла, группа-владелец файла и root.
Контрольные вопросы:
1) Какие существуют типы прав доступа к файлам и каталогам?
2) С помощью какой команды можно изменять права доступа?
3) С помощью какой команды можно изменить группу-владельца файла?
4) Как можно изменить владельца файла или каталога?
Литература:
1. Э. Таненбаум. Современные операционные системы. 4-е изд. Питер 2015
2. Д. Колисниченко. Linux от новичка до профессионала 4-е издание «БХВ - Петербург» 2012
Лекция 24. Работа с текстовыми данными в ОС Linux.
План занятия:
1. Стандартный ввод-вывод
2. Регулярные выражения
3. Команда grep
Ход лекции
В Linux широко используются около десятка текстовых редакторов. Каждый из них хорош для своих целей. Но наиболее часто используемыми все же являются редакторы vi и emacs.
Стандартный ввод-вывод
Оболочка, не должна открывать терминал (клавиатуру и монитор), чтобы прочитать с него или сделать на него вывод. Вместо этого запускаемые программы автоматически получают доступ для чтения к файлу, называемому стандартным устройством ввода (standard input - 0), а для записи — к файлу, называемому стандартным устройством вывода (standard output - 1), и к файлу, называемому стандартным устройством для вывода сообщений об ошибках (standard error - 2). По умолчанию всем этим трем устройствам соответствует терминал, то есть чтение со стандартного ввода производится с клавиатуры, а запись в стандартный вывод (или в вывод для ошибок) попадает на экран. Многие Linux-программы читают данные со стандартного устройства ввода и пишут на стандартное устройство вывода. Например, команда
sort
запускает программу sort, читающую строки с терминала (пока пользователь не нажмет комбинацию клавиш Ctrl+D, чтобы обозначить конец файла), а затем сортирует их в алфавитном порядке и выводит результат на экран.
Стандартные ввод и вывод можно перенаправить, что является очень полезным свойством. Для этого используются символы «<» и «>» соответственно. Разрешается их одновременное использование в одной командной строке.
Операторы перенаправления способны изменять направление вывода и ввода информации. Так оператор:
> - перенаправляет стандартный поток в файл (другой поток). При этом если файл существует, то он перезаписывается, если не существует – создается (перенаправляет поток вывода в файл)
>> - перенаправляет стандартный поток в файл. При этом если файл существует, то информация добавляется в конец, если не существует – файл создается.
< - перенаправляет содержимое указанного файла на стандартный ввод программе (перенаправление ввода из файла)
&> — перенаправляет оба потока в файл
2> — перенаправляет поток ошибок в файл
Например, команда
sort <in >out
заставляет программу sort взять в качестве входного файл in и направить вывод в файл out. Поскольку стандартный вывод сообщений об ошибках не был перенаправлен, то все сообщения об ошибках попадут на экран. Программа, которая считывает данные со стандартного устройства ввода, выполняет определенную обработку этих данных и записывает результат в поток стандартного вывода, называется фильтром.
Рассмотрим следующую командную строку, состоящую из трех отдельных команд:
sort <in >temp; head –30 <temp; rm temp
Сначала запускается программа sort, которая принимает данные из файла in и записывает результат в файл temp. Когда она завершает свою работу, оболочка запускает программу head, дав ей указание вывести первые 30 строк из файла temp на стандартное устройство вывода, которым по умолчанию является терминал. Наконец, временный файл temp удаляется. При этом он удаляется безвозвратно и уже не может быть восстановлен.
Часто используются командные строки, в которых первая программа в командной строке формирует вывод, используемый второй программой в качестве входа. В приведенном ранее примере для этого использовался временный файл temp. Однако система Linux предоставляет для этого более простой способ. В командной строке
sort <in | head –30
используется вертикальная черта, называемая символом канала (Канал – программный интерфес, позволяющий процессам обмениваться данными (односторонний поток), она означает, что вывод программы sort должен использоваться в качестве входа для программы head, что позволяет обойтись без создания, использования и удаления временного файла. Набор команд, соединенных символом канала, называется конвейером (pipeline) и может содержать произвольное количество команд.
$ catfile | tail -n 3 | less
Рассмотрим поподробнее все, что произошло при выполнении данной нами группы команд:
- Команда cat прочитала файл file и передала его содержание на стандартный ввод команды tail
- Команда tail исходя из заданных ей параметров взяла 3 последние строки текстового файла и передала их на стандартный ввод команде less
- Команда less вывела информацию со стандартного ввода на экран и стала ожидать действий пользователя.
Таким образом одна команда передавала по каналу информацию другой команде.
Регулярные выражения
Иногда необходимо вывести информацию, содержание которой вы знаете, а вот расположение – нет. Именно для таких случаев существуют регулярные выражения. Перечислим наиболее используемые из них, хотя оговорюсь сразу, что на самом деле регулярных выражений намного больше.
Регулярное выражение – средство указания шаблона для поиска его в тексте.
^ - начало строки
$ - конец строки
[] - любой символ из заключённых в скобки. Поддерживает диапазоны, например [0-9] – цифры, [a-zA-Z] -все буквы латинского алфавита
[^] - любой симвло за исключением заключенных в скобки
\ - отменяет действие любого метасимвола. Например \$ - обозначает символ $, а не \ в конце строки, а \\$ - символ \ в конце строки.
. - любой один символ.
* - 0 или более раз в тексте встречается предыдущий шаблон. Так
например выражение.* означает любой набор символов.
Регулярные выражения поддержкиваются практически всеми текстовыми редакторами Linux. Существует также программа фильтрации текста grep. Она также использует регулярные выражения. Её мы с Вами и рассмотрим.
Команда grep
| grep, fgrep, egrep | Ищут во входном файле или данных со стандартного ввода строки, содержащие указанный шаблон, и выдают их на стандартный вывод |
Использование grep вместе с потоками
Ls - l | greprwxrwxrwx
Часть greprwxrwxrwx фильтрует результат полученый от ls -l и выводит только те директории у которых установлены соответствующие права доступа. В данном случае это открытый доступ на чтение, запись и поиск для всех пользователей и групп. Так что вместо того чтобы увидеть полный список файлов вы увидите только те файлы у которых установлены нужные вам права доступа.
Вывод от команды grep может также быть направлен потоком в другую команду, например как в следующем примере:
Du | grep ' mp 3' | more
Выводит постранично список mp3 файлов найденых в текущей директории.
(Команда du выводит информацию о файле (файлах), имена которых заданы в качестве параметров.)






