Главная страница
Навигация по странице:

  • ОС Linux

  • ОС Linux: Использование терминала для управления правами доступа к файлам и директориям

  • ОС Linux: Классификация системных вызовов, «зомби» процессы

  • ОС Linux: Использование терминала для управления процессами

  • Ответы к операционным системам. Вопросы по дисциплине Операционные системы


    Скачать 1.44 Mb.
    НазваниеВопросы по дисциплине Операционные системы
    АнкорОтветы к операционным системам
    Дата25.10.2019
    Размер1.44 Mb.
    Формат файлаdocx
    Имя файлаotvetymez (1).docx
    ТипДокументы
    #91797
    страница11 из 14
    1   ...   6   7   8   9   10   11   12   13   14


    ОС Linux: Логическая организация файловой системы

    Структура магнитного диска

    Файловая система современных ОС, таких как MS Windows,UNIX, Linux, Mac OS, предполагает определенную организацию носителя данных.



    В операционной системе MS Windows на носителе данных можно выделить следующие области (рис. 9.1):

    - загрузочная запись;

    - таблица размещения файлов;

    - корневой каталог;

    - область данных.

    Область данных жесткого диска может быть поделена на разделы. Таким разделам присваиваются буквы латинского алфавита. Буквы A и В зарезервированы для дисководов гибких дисков – дискет. Внастоящее время такие носители данных практически полностью вы шли из употребления. Таким образом, первый раздел получает буквуC. При подключении к ЭВМ внешних носителей данных они также

    рассматриваются как разделы и им присваивается буква.

    Элементы файловой системы

    В области данных носителей формируется логическая структураданных.

    - файл – именованная область на диске для хранения информации;

    - каталог – именованная область на диске для хранения каталогов и других файлов;

    - корневой каталог – главный каталог верхнего уровня, от которого строятся все остальные каталоги.

    В результате возникает разветвленная древовидная структурахранения информации.


    1. ОС Linux:Использование терминала для создания файлов

    При задании имен файлов в командах следует учитывать рядособенностей команд Bash.Перед пробелами в имени файла следует использовать символ\. Другой вариант – имя файла или каталога должно быть взято вдвойные кавычки.

    Пример:

    “Мой файл”

    Мой\ файл

    В ОС Linux, в отличие от ОС Windows, нет понятия раздела жесткого диска. ОС использует единую файловую систему. Файловаясистема представляет собой дерево каталогов – директорий. В основании иерархии каталогов находится корневой каталог, который имеетусловное обозначение /. При присоединении сменных носителей кЭВМ их файловая система (если она совместима с ОС) присоединяется (монтируется) к файловой системе ОС. Доступ к файловой системе сменного носителя, открывается через директорию, которая создается либо в директории mnt, либо в директории media в зависимости от типа сборки Linux. Эта директория получает системное имя.

    Полная спецификация имени файла имеет вид:

    /путь/имя_файла

    Имена директорий и файлов регистр зависимы.

    Пример:

    /home/user/myDir/my.lst

    Задание полного имени файла, расположенного в директории myDir, которая находится в домашней директории пользователя user. Создание файла может быть выполнено с помощью команды cat и символа переадресации ввода >. Команда cat выполняет вывод байтов – символов из системного устройства или файла.

    Формат команды:

    cat > имя_файла

    Такая команда означает передачу байтов при их вводе в консоли в файл. Если файла нет, то он создается. Если он существует, то перезаписывается. Добавить байты к файлу можно с помощью операции переадресации >>.

    Затем вводятся байты строк. Каждая строка завершается нажатием клавиши ENTER. Заканчивается процесс создания файла вводом признака конца файла путем нажатия комбинации клавиш CTRL+D.

    Просмотреть содержание файла можно, подав команду:

    cat имя_файла

    Создать файл можно также, используя команду echo. Команда выводит строку аргумента на терминал, используя переадресацию строку отправляют в файл:

    echo текст > имя_файла

    Пример создания файла:

    user@ubuntu:

    $ echo Это мой файл > myfile

    user@ubuntu:$ cat myfile

    Это мой файл

    Создание файла в директории home/user/Documents:

    user@ubuntu:$ echo Test ! > /home/user/Documents/testfile

    user@ubuntu:$ cat /home/user/Documents/testfile

    Test !

    Создать файл можно, используй команду touch. Формат команды:

    touch имя_файла – команда создания пустого файла.

    Если файл существует, то изменяются две временные метки. Первая метка – дата и время изменения файла; вторая метка – дата и время доступа.

    Изменение временных меток:

    touch –d “November 23 2012” myfile

    touch –t 211506181500.55 myfile

    При использовании ключа –t временная метка задается по определенному шаблону:

    [[CC]YY]MMDDhhmm[.ss]

    CC – век

    YY – год

    MM – месяц

    DD – дата

    hh – часы

    mm – минуты

    ss – секунды

    Так, во второй команде была задана метка:

    21 – век

    2015 – год

    Месяц: июнь

    18 – число

    15:00:55 – время.


    1. ОС Linux:Терминал, управление выводом из текстовых файлов

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

    Команда tac. Формат команды:

    tac имя_файла – вывод содержимого файла на консоль в обратном порядке следования строк.

    Команда more. Формат команды:

    more имя_файла – постраничный вывод содержания.

    Команда less. Формат команды:

    less имя_файла – постраничный вывод с пролистыванием в обе стороны.

    Команда head. Формат команды:

    head -n имя_файла – вывод от начала файла n строк.

    Команда tail. Формат команды:

    tail -n имя_файла – вывести с конца файла n строк.


    1. ОС Linux: Использование терминала для управления правами доступа к файлам и директориям

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

    r (4) – чтение;

    w (2) – запись;

    x (1) – исполнение.

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

    Владелец файла (user) – пользователь, создавший этот файл.

    Группа (group) – группа, в состав которой входит владелец.

    Остальные (other) пользователи.

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

    В начале набора символьных атрибутов указывается символидентификации объекта файловой системы:

    d – директория.

    - файл.

    Другая буква – системный объект. Числовой код прав доступа поумолчанию имеет значение 0644. Этому коду соответствует наборсимвольных атрибутов -rw-r--r--.

    Просмотреть атрибуты любого файла можно с помощью команды:

    ls -l имя_файла

    Смена атрибутов выполняется командой:

    chmod числовой_код newfile

    Примериспользования команды:

    chmod 744 myfile

    Файл получит маску прав доступа:

    rwxr--r–

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

    Опции:

    u – владелец;

    g – группа;

    o – остальные;

    a – все пользователи.

    Права:

    r – чтение;

    w – запись;

    x – выполненные.

    Команды:

    + добавить право;

    - удалить право;

    = установить абсолютные права, игнорируя существующие.

    Для директории право x означает возможность использования

    команды cd!

    Примерыиспользования команды:

    сhmod g+x myfile

    сhmod u+x,g-r,o+r myfile

    сhmod a-r myfile

    сhmod u=x myfile

    1. ОС Linux: Классификация системных вызовов, «зомби» процессы

    – Вызов System():Копия программной оболочки вызывается с помощью системного вызова system. Вызов реализуется функцией:

    int system (const char *string);

    где string – строка, представляющая собой строку запуска программы (командаLinux).

    Для использования функции необходимо подключить заголовочный файл stdlib.h.

    В результате вызова функции запускается процесс - копия командной оболочки, в которой выполняется команда, текст которой передан константе string. Если выполнение системного вызова невозможно возвращается значение -1, при ошибке запуска оболочки возвращается код 127, при удачном запуске код завершения выполненной команды.

    – Вызов exec():Замещение процессов выполняется вызовом с помощью системного вызова exec(). В качестве аргумента нужно указать имя файла, в котором хранится код исполняемой программы. Реализуется вызов семейством функций. Рассмотрим следующие виды функций:

    • execlp();

    • execl();

    • execle();

    Последняя буква в названии функции определяет правила ее использования:

    p – функция выполняет поиск пути для запуска программы

    l – можно задать список аргументов для запускаемой программы

    e - при запуске программы используются переменные окружения операционной системы.

    После вызова функции текущий процесс заменяется новым, активизированным из файла программы.

    Функцию можно использовать для выполнения системных команд операционной системы Linux, так как каждая команда – вызов одноименной системной программы, имя файла которой совпадает с названием команды.

    – Вызов fork():Разделить исходный процесс на два можно путем обращения к функции fork(). Если вызов функции не удался, то она возвращает значение -1. Для дочернего процесса функция возвращает PID равный 0, а для родительского процесса - его новый PID. Такая процедура называется также клонированием процесса.

    Чтобы упорядочить работу программы родительский процесс должен сделать «паузу», чтобы дождаться дочернего процесса. Для этого выполняется вызов системной функции wait(). В качестве аргумента указывают адрес переменной целого типа, в которую записывается состояние процесса. Функция возвращает PID дочернего процесса. Для использования функции необходимо подключение двух заголовочных файлов sys/types.h и sys/wait.h

    Для анализа статуса завершения дочернего процесса можно использовать макросы:

    WIFEXITED(stat_val). Если дочерний процесс завершился нормально, то возвращает ненулевой результат

    WEXITSTATUS(stat_val). Если макрос 1 вернул ненулевой результат, возвращает код завершения дочернего процесса

    WIFSIGNALED(sta_val). Возвращает результат отличный от нуля, если дочерний процесс завершился не перехватываемым сигналом

    «Зомби» процессы – процессы без «хозяина»

    Их появление связано с выполнением системного вызова fork(). Они обнаруживаются системным процессом ОС Linux init для закрытия, при этом может проходить довольно большой период времени.

    Нужно подать команду ps -al после завершения дочернего процесса, но до завершения родительского. В таблице процессов можно наблюдать «Зомби» процесс:

    - «Зомби» процесс отмечен статусом Z;

    - в строке команд он помечен ключевым словом .

    Процесс «зомби» – дочерний процесс, который закончился раньше родительского. Запись о таком процессе не исчезает из таблицы процессов немедленно. Его код завершения должен быть сохранен на случай вызова родительским процессом функции wait(). Для завершения работы программы нужно нажать клавишу Enter.

    1. ОС Linux: Использование терминала для управления процессами

    Процесс – некоторая деятельность в среде операционной системы. Например – выполняющаяся программа. Следует различатьпоток от процесса. Поток – деятельность внутри процесса.Для просмотра информации о процессах служит команда ps.Полная информация о процессах выводится после подачи команды

    ps –ef.

    Процессы в ОС Linux имеют специальный атрибут – статус. Дляпросмотра статуса процессов подают команду:

    ps ax

    Просмотр процессов пользователя выполняется командой:

    ps –U имя_пользователя



    Каждый процесс имеет свой уникальный идентификатор PID(Process Identificator). Операционная система Linux связывает системное имя c идентификатором пользователя в системе – UID (User ID). UID – это положительное целое число, по которому система и отслеживает пользователей. Значение UID позволяет определить пользователя, который вызвал к жизни процесс. Кроме того, характеристикой процесса является значение PPID (Process Parent ID) – идентификатор процесса – родителя (предка) данного процесса.

    Узнать UID можно командами:

    id – код текущего пользователя;

    id имя_пользователя – код конкретного пользователя.

    Приоритеты процессов

    Приоритет процесса – nice («Привлекательность»). По умолчанию он равен нолю, изменяется системой. При параллельной работе нескольких процессов тому процессу, у которого значение nice больше отдается меньше процессорного времени. Такой процесс будет обрабатываться ЭВМ дольше, чем остальные. Это значение может изменяться в пределах от -20 до +19. По умолчанию значение niceравно нулю.

    Назначить приоритет, порождаемым по команде, процессам

    можно командами:

    nice –число_nice команда

    nice –n число_nice команда

    Пользователи системы могут только понижать приоритет своих процессов, задавая значения от 0 до 19.

    Суперпользователь системы может повышать и понижать приоритет своих задач.

    Пример.Первая команда создает процесс с приоритетом 9, а вторая – с приоритетом -10.

    nice -9 команда

    nice --10 команда

    Чтобы вывести на экран терминала список процессов с указанием их nice значения, нужно использовать команду ps с ключом –l.

    Уничтожение процесса
    Для взаимодействия с процессами используется команда kill.

    Команда посылает процессу сигнал. Прервать процесс можно командами:

    kill PID

    kill –KILL PID

    Во втором случае процессу подается сигнал KILL – прекратить работу.
    Фоновые процессы

    Общий формат запуска фонового процесса имеет вид:

    команда_запуска &

    После запуска процесса можно продолжать запускать в терминале новые процессы – программы.

    Пример.Фоновой процесс выводящий сообщение Process active !с интервалом в 20 секунд. Процесс реализуем в виде скрипта tpr.sh:

    #Bash

    while true; do

    echo "Process activ !"

    sleep 20

    done

    Запуск скрипта в фоновом режиме:

    $./tpr.sh &

    На фоне этого процесса можно продолжать работу в терминале и через каждые 20 секунд работа будет прерываться выводом сообщения.

    1. 1   ...   6   7   8   9   10   11   12   13   14


    написать администратору сайта