Операционная система UNIX

Права доступа к файлам и управление ими и другими атрибутами. Значения прав доступа для файлов и директорий. Набор файловых флагов. Команды управления процессами в операционной системе UNIX. Опции и значения программ архивации и сжатия - tar и gzip.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 16.01.2014
Размер файла 234,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Обнинский институт атомной энергетики - филиал

федерального государственного бюджетного образовательного учреждения высшего профессионального образования национальный исследовательский ядерный университет «мифи»

Факультет заочного обучения

Операционная система UNIX

Выполнил: Скрынник А.А.

Обнинск 2013 г.

1. Права доступа к файлам и управление ими и другими атрибутами

Как и в любой многопользовательской системе, в операционных системах Unix, есть механизм управления доступом пользователей к тем или иным ресурсам системы (процессорное время, память, файлы, директории и прочее). Основными участниками данного механизма являются: Пользователь (user), Группа (group), Другие (Other), основными правами доступа в Unix, являются:

· права доступа на чтение;

· права доступа на запись;

· права доступа на выполнение;

Соответственно, в Unix, права доступа и участники, сгруппированы три по три, read/write/execution для user/group/other.

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

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

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

Каждый процесс в операционной системе Unix, имеет не два, а четыре идентификатора, это, реальный UserID (UID) и эффективный UserID (UID) а так-же реальный и эффективный идентификатор группы GroupID (GID). Реальный UserID (Реальный GroupID) - реальные номера применяются для учета использования системных ресурсов. Эффективный UserID (Эффективный GroupID) - новый идентификатор, полученный процессом уже во время выполнения, применяются для определения прав доступа.

Процессы запущенные автоматически (например при старте системы), также получают UserID, какой именно, определяется запускающей программой (cron, inetd и т.д.), в обычных случаях, UserID наследуется от родительского процесса. Некоторые процессы - "родители", могут присваивать, дочернему процессу - "потомку", UserID, не совпадающий со своим.

Иногда, запущенный процесс, может во время выполнения, менять свои идентификаторы. Это происходит, когда в правах доступа на файл, установлены дополнительные биты, SUID (Set user ID - бит смены идентификатора пользователя) и SGID (Set group ID - бит смены идентификатора группы). Когда пользователь или процесс запускает файл, у которого установлен один из этих битов, процессу, временно присваиваются права владельца данного файла (а не того, кто его запускает). Таким образом, обычный пользователь, может выполнять команды от имени пользователя root.

Как было упомянуто выше, права доступа к файлам и директориям, определяются по Реальному UserID и Реальному GroupID. Если идентификатор не меняется в процессе выполнения программы, Реальный UserID (реальный GroupID) и Эффективный UserID (эффективный GroupID) совпадают.

Система обеспечения прав доступа в операционных системах Unix, имеет числовое и символическое, выражения. Числовое выглядит следующим образом:

Плюс к этому, биты смены идентификаторов SUID и SGID, восьмеричные значения 4000 и 2000, как было сказано выше, они обеспечивают программам, доступ к файлам и процессам, к которым в обычных условиях, пользователь доступа не имеет. В случае установки бита SGID для директории, созданные в ней файлы, при запуске, будут принимать идентификатор группы каталога, а не группы в которую входит владелец файла.

Существует еще один бит с восьмеричным значением 1000, так называемый Stiky-bit (липучка). Если данный бит установлен на директорию, содержащиеся в ней файлы, разрешено удалять и переименовывать, только в случае, если пользователь является, владельцем каталога, владельцем файла или это пользователь root.

Символические выражения для установки прав доступа. В качестве аргументов команды chmod, вместо восьмеричных значений, используются буквенные эквиваленты.

Чтобы посмотреть права доступа и владельцев на файлы и директории в режиме листинга, можно использовать команду ls с флагом -l.

1 - тип объекта

2 - права доступа для пользователя (744)

3 - права доступа для группы (744)

4 - права доступа для других (755)

5 - владелец объекта

6 - группа владелец объекта

Таким макаром идет пересчет.

В нашем случае:

(4+2+1) + (4) + (4) = 744

(4+2+1) + (4) + (4) = 744

(4+2+1) + (4 + 1) + (4 + 1) = 755

В данном листинге видно, что владельцем всех файлов является пользователь root и группа wheel. Первый символ слева в колонке прав доступа, означает тип объекта, объекты могут быть следующих типов:

- Обычный файл. b Специальный файл блочного устройства. c Файл символьного устройства. d Директория. l Символьная ссылка. p FIFO. s Сокет. w Whiteout (скрытый).

В вышеприведенном примере: file.txt и file.sh - являются файлами, test_dir - директория.

Начиная со второго бита, запись делится по 3 символа, для пользователя, для группы, для других, в нашем случае:

· Файл file.txt, доступен на чтение и запись - пользователя, только для чтения - группой и для чтения - другим;

· Файл file.sh, доступен на чтение, запись и выполнение - пользователем, только для чтения - группой, для чтения - другим;

· test_dir, является директорией и имеет следующие права доступа, для пользователя: чтение, запись, выполнение; для группы: чтение, выполнение; для других: чтение, выполнение;

Если установлен бит SUID, то в секции 2 (права доступа для пользователя), вместо значения "х", будет стоять "s", если установлен бит SGID, так-же будет поставлен символ "s", но уже в секции 3 (права доступа для группы), ну и если установлен Styky-bit, в последней позиции, секции 4 (права доступа для других), будет установлен символ "t".

В случае, если какой-либо из этих битов был установлен, и при этом не был установлен соответствующий бит выполнения, будут установлены символы "S" для SUID и SGID и "T" для Stiky-bit, что сигнализирует об ошибке и данные атрибуты будут проигнорированы.

Не лишним будет заметить, что в операционных системах Unix, значения прав доступа для файлов и директорий, несколько различаются.

Для файлов:

· r (Read) - чтение. Соответствующий пользователь (процесс), имеет права на чтение содержимого данного файла, и копирования этого файла.

· w (Write) - запись. Соответствующий пользователь (процесс), имеет права редактировать, изменять, удалять содержимое файла, добавлять в него что-либо (например содержимое другого файла). Однако, это не дает прав на удаление или переименование самого файла, это определяется правами доступа на директорию, в которой этот файл находится.

· x (eXecute) - выполнение. Дает право, соответствующему пользователю (процессу), запускать данный файл, при условии что он является исполняемой программой или скриптом.

Для директорий:

· r (Read) - чтение. Разрешает получение списка содержимого данной директории (файлов, поддиректорий), однако, это еще не означает, что можно получить доступ к содержимому данной директории, читать, изменять или запускать файлы, находящиеся в ней, даже при условии, что права на самих файлах это разрешают. Как правило, данный атрибут устанавливается совместно с правами доступа на запуск, "x" (eXecute).

· w (Write) - запись. Атрибут, позволяющий менять содержимое директории, то есть, создавать в ней новые файлы, копировать в нее файлы из других директорий, переименовывать и удалять файлы.

· x (eXecute) - выполнение. Данный атрибут, в контексте директории, означает, что соответствующий пользователь, может зайти в директорию, получив доступ к файлам и поддиректориям и выполнять с ними какие-либо действия, при условии что права на самих файлах, это позволяют.

Важно помнить, что система полностью проверяет путь до конкретной поддиректории или файла, на наличие прав доступа, к каждому участку данного пути, и если на кокой-либо участок пути, не установлен соответствующий бит прав доступа (x), пользователю будет отказано в доступе. Проще говоря, есть путь: /usr/home/vds-admin/public_html/, даже если пользователь имеет достаточные права на поддиректории public_html, но на вышестоящую директорию, home, бит x не установлен, при попытке зайти в поддиректорию, ему будет отказано в доступе.

2. Флаги файлов

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

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

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

· Пользовательские - флаги доступные для изменения владельцу фала и пользователю root.

· Суперпользовательские - флаги доступные для изменения, только пользователю root.

В операционных системах Unix, используются следующие флаги:

Суперпользовательские флаги

· arch (archived) - архивный файл.(только пользователь root)

· sappnd (sappend) - в данный файл можно только дописывать, то есть уже имеющуюся информацию изменить нельзя. Если флаг установлен на директорию, нельзя удалять или переименовывать файлы, но можно создавать или копировать (только пользователь root)

· schg (schange, simmutable) - неизменяемый файл, нельзя ни переименовывать, ни изменять, ни удалять. Если данный флаг установлен на директории, то вы не сможете добавлять или удалять файлы, но менять содержимое уже имеющихся, сможете.(только пользователь root)

· sunlnk (sunlink) - файл не может быть переименован или удален. Содержимое изменить можно при соответствующих правах доступа. (только пользователь root)

Пользовательские флаги

· nodump - не включать данный файл в дамп. (владелец файла и пользователь root)

· uappnd (uappend) - то-же что и для пользователя root, плюс для владельца файла.

· uchg (uchange, uimmutable) - то-же, что и для пользователя root, плюс для владельца файла.

· uunlnk (uunlink) - то-же, что и для пользователя root, плюс для владельца файла.

Например, чтобы установить на файл флаг schg (неизменяемый), нужно выполнить следующую команду:

vds-admin /test# chflags schg test_file

Посмотреть установленные флаги можно командой ls c опциями -lo.

vds-admin /test# ll -lo

total 0

-rw-r--r-- 1 root wheel schg 0 Jun 21 07:33 test_file

Кроме того, можно установить сразу несколько флагов, перечислив их через запятую:

vds-admin /test# chflags schg, arch, suppnd test_file

vds-admin /test# ll -lo

total 0

-rw-r--r-- 1 root wheel sappnd,arch,schg 0 Jun 21 07:33 test_file

Снять флаг можно, добавив к его названию, приставку "no":

vds-admin /test# ll -lo

total 0

-rw-r--r-- 1 root wheel schg 0 Jun 21 07:33 test_file

vds-admin /test# chflags noschg test_file

vds-admin /test# ll -lo

total 0

-rw-r--r-- 1 root wheel - 0 Jun 21 07:33 test_file

Так-же есть возможность сбросить все флаги, для этого вместо флага, достаточно просто поставить "0" (ноль).

vds-admin /test# ll -lo

total 0

-rw-r--r-- 1 root wheel sappnd,arch,schg 0 Jun 21 07:33 test_file

vds-admin /test# chflags 0 test_file

vds-admin /test# ll -lo

total 0

-rw-r--r-- 1 root wheel - 0 Jun 21 07:33 test_file

Основные команды для установки и изменения прав доступа и работы с флагами в операционных системах Unix

Основными утилитами для работы с правами доступа и флагами, в операционной системе Unix, являются следующие:

· ls -l, ls -lo Листинг каталога, без флагов и с флагами

· chown Изменение владельца объекта

· chmod Установка, удаление, изменения прав доступа к объекту

· chflags Установка, удаление, изменение файловых флагов

3. Команды управления процессами

В UNIX (и большинстве современных операционных систем, как-то Microsoft® Windows®, Mac OS X, FreeBSD и Linux®) каждая задача представляется как процесс. UNIX способен выполнять много задач одновременно, потому что процессы поочередно выполняются на центральном процессоре в течение очень непродолжительного промежутка времени.

Процесс - это нечто вроде контейнера, объединяющего выполняемое приложение, его переменные среды, состояние потоков ввода/вывода приложения и параметры процесса, включающие в себя его приоритет и степень использования ресурсов системы. Рисунок 1 иллюстрирует понятие процесса.

Рисунок 1. Концептуальная модель процесса в UNIX

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

Каждый процесс имеет своего владельца. Задачи, инициализируемые пользователем, например, его shell и командами, обычно принадлежат этому пользователю. Системные процессы могут принадлежать пользователям с особыми правами или системному администратору root. Например, для повышения безопасности Apache HTTP Server обычно принадлежит выделенному пользователю с именем www, который предоставляет Web-серверу только доступ к файлам, которые ему необходимы для работы.

Владелец процесса может меняться. У одного процесса не может быть одновременно двух владельцев.

Наконец, каждый процесс имеет привилегии. Обычно привилегии процесса соответствуют статусу его владельца в ОС. Например, если пользователь не может получить доступ к какому-либо файлу через команду shell, то программы, которые он запустит при помощи этой оболочки, наследуют то же ограничение на доступ к этому файлу. Правило наследования привилегий можно обойти, т.е. процесс может получить большие привилегии, чем его владелец, если запустить процесс командой, в которой помимо всех прочих действий активируется специальный бит setuid или setgid, как показано на примере ls.

Бит setuid можно задать при помощи chmod u+s. Права доступа, заданные при помощи setuid, выглядят так:

$ ls -l /usr/bin/top

-rwsr-xr-x 1 root wheel 83088 Mar 20 2005 top

Бит setgid может быть задан при помощи chmod g+s:

$ ls -l /usr/bin/top

-r-xr-sr-x 1 root tty 19388 Mar 20 2005 /usr/bin/wall

Процесс setuid-, например запускаемый процесс top, выполняется с привилегиями пользователя, которому принадлежит. Следовательно, если запустить top, то у пользователя будут привилегии администратора. Соответственно, процесс setgid выполняется с привилегиями группы владельцев файла.

Например, в Mac OS X, утилита wall, укороченное от "write all", сокращение от write all (отправляет сообщение на каждый физический или виртуальный терминал), задана с setgid tty (как показано выше). Когда пользователь зашел в систему и выбрал терминал, с которого будет вводить команды (терминал становится стандартным каналом ввода для shell), то он становится владельцем терминала, а tty становится группой владельцев. Ввиду того что wall выполняется с привилегиями группы tty, он может открывать и писать вывод на любой терминал.

Получение информации о процессах

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

Например, если пользователю нужно вывести список процессов, которыми он владеет, то нужно ввести ps -w --user username :

$ ps -w --user mstreicher

Полностью список процессов можно увидеть при помощи команды ps -a -w -x. Флаги для команды ps отличаются в зависимости от версии UNIX. Для подробной информации по этой команде изучите документацию к своей системе. Флаг -a выбирает все процессы, выполняющиеся на терминале tty. Флаг -x выводит все процессы, не ассоциированные с tty, которые, обычно являются всевозможными системными службами, например, сервер Apache HTTP, утилита-планировщик cron и прочее. Флаг -w предоставляет расширенный набор информации, в который входит, в частности, полный путь к приложению, ассоциированному с каждым процессом.

Утилита ps имеет множество опций, а некоторые версии ps позволяют настраивать отображение результатов работы команды. Например, ниже представлен специальным образом настроенный список процессов:

$ ps --user mstreicher -o pid,uname,command,state,stime,time

PID USER COMMAND S STIME TIME

14138 mstreic sshd: mstreicher S 09:57 00:00:00

14139 mstreic -bash S 09:57 00:00:00

14937 mstreic ps --user mstrei R 10:23 00:00:00

Флаг -o настраивает отображение результатов работы команды ps согласно названиям столбцов, переданных параметрами на вход. Параметры pid, uname и command соответствуют столбцам process ID, user name и command соответственно. Параметр state показывает состояние процесса, например, ждущий режим (S) или выполняемый процесс (R), про состояния процесса мы еще поговорим позже. Параметр stime показывает, когда процесс стартовал, и time показывает, как много времени процесс использовал центральный процессор.

Создание новых процессов

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

Каждый новый процесс в UNIX является перевоплощением существующего процесса. Или, по другому, каждый новый процесс - давайте называть его дочерним - является клоном своего процесса-родителя хотя бы на мгновенье, пока дочерний процесс не начнет выполняться самостоятельно. (Если каждый новый процесс является потомком уже существующего процесса, появляется вопрос "Откуда появился первый процесс?" Посмотрите на врезке ниже ответ на этот вопрос.)

4. Курица или яйцо

Некоторые споры бесконечны: быть или не быть? PC или Mac? Есть и более старый вопрос: что появилось первым, курица или яйцо?

Если каждый новый процесс в UNIX порождается уже существующим и выполняющимся процессом, откуда берется первый процесс? Ответ: ядро ОС UNIX порождает первый процесс по ходу процесса загрузки.

Имя первого процесса - init, он является "предком" всех других системных процессов. Номер процесса init - 1. Определить статус выполнения этого процесса можно при помощи команды ps -l 1:

F S UID PID PPID C PRI

4 S 0 1 0 0 68 0 -

NI ADDR SZ WCHAN TTY TIME CMD

373 select ? 0:02 init [2]

Как можно увидеть, владельцем (UID) процесса init является системный администратор (0). В отличие от любого другого процесса init не имеет процесса-родителя, так как идентификатор родительного процесса (Parent Process ID (PPID)) соответствует 0.

На рисунках 1 - 4 детально описан механизм создания процесса:

1. На рисунках 2 и 3, процесс A (Process A) соответствует программе, представленной фиолетовым прямоугольником. Он выполняет инструкции, пронумерованные как 10, 11, 12 и так далее. Процесс A имеет свои собственные данные, свою собственную копию программы, набор открытых файлов, и свою собственную коллекцию переменных среды, которые были собраны, как только процесс А начал свое выполнение.

Рисунок 2. Процесс А

В UNIX системный вызов fork() (называется так потому, что является вызовом или запросом к операционной системе) используется для создания нового процесса. Когда процесс A выполнит вызов fork() в 13-й инструкции, система немедленно создаст точный клон процесса A - процесс Z. Процесс Z имеет те же переменные среды, что и A, то же содержимое памяти, то же состояние выполнения программы и те же самые открытые файлы. Состояние процессов A и Z сразу после того, как процесс А породил процесс Z, показано на рисунке 3.

Процесс A клонирует себя

Рисунок 3.

2. В самом начале своего существования процесс Z начинает выполняться с того самого места, где прекратил свое выполнение процесс A. После этого процесс Z начинает выполнение инструкции 14. Процесс A продолжает выполнение той же самой инструкции.

3. Обычно программная логика инструкции 14 проверяет, является ли текущий процесс дочерним или родительским, таким образом, инструкция 14 для каждого из процессов A и Z выяснит, является ли он дочерним или родительским. Системный вызов fork() вернет 0 дочернему процессу и вернет идентификатор процесса (process ID) процесса Z родительскому процессу.

4. После предыдущего теста процесс A и процесс Z расходятся, и каждый начинает выполнять свою собственную задачу. Итак, системный вызов для создания процесса называется fork(), что в переводе означает "разветвление".

После разветвления процесс A может продолжить выполнять все то же приложение. Однако процесс Z может немедленно приступить к выполнению другого приложения. Последняя операция по изменению процесса программой называется исполнением (execution), но более подходит к ней название перевоплощение. Хотя ID процесса остается тем же, инструкции внутри процесса целиком заменяются на новую программу. Рисунок 4 показывает состояние процесса Z на этом этапе.

Рисунок 4. Процесс Z теперь полностью независим от своего предка, процесса A

Более подробно о разветвлении процессов

Процессы можно разветвлять прямо из командной строки. Для начала откроем xterm (мы знаем, что xterm - это наш собственный процесс и в пределах xterm оболочка shell является отдельным процессом, созданным xterm). Далее введем:

ps -o pid,ppid,uname,command,state,stime,time

Результат этой команды будет примерно таким:

PID PPID USER COMMAND S STIME TIME

16351 16350 mstreic -bash S 11:23 00:00:00

16364 16351 mstreic ps -o pid,ppid,u R 11:24 00:00:00

Согласно полю PPID в этом списке, команда ps является дочерней командой оболочки bash. (Дефис в -bash означает, что данная оболочка является оболочкой входа в систему.) Для выполнения команды ps bash путем разветвления создает новый процесс; новый процесс изменяет себя, превращаясь в новый экземпляр команды ps.

Ниже представлен другой пример. Введем:

sleep 10 & sleep 10 & sleep 10 & ps -o pid,ppid,uname,command,state,stime,time

Результат работы этой команды должен быть примерно таким:

Командная строка создает четыре новых процесса. Вставьте знак амперсанд (&) после каждой команды sleep, тогда эти команды будут работать в фоновом режиме (параллельно с оболочкой). Команда ps - это другой порожденный процесс, но он является высокоприоритетным, что не позволяет оболочке запустить другой процесс до тех пор, пока ps не закончит свое выполнение. Повторюсь, что все четыре процесса порождены оболочкой, о чем говорят значения в столбце PPID. Три процесса sleep имеют метку S и не потребляют ресурсов, пока находятся в спящем режиме.

Для удобства оболочка следит за всеми фоновыми процессами, которые порождает. Список задач можно вывести командой jobs:

Отобразились три процесса, пронумерованные 1, 2, и 3 для удобства. Числа 16843, 16844, и 16845 являются числовыми идентификаторами каждого процесса. Таким образом, идентификатор фонового процесса 1 является 16843.

Можно управлять фоновыми процессами из командной строки, используя их числовые псевдонимы. Например, для завершения команды введем kill %N , где N является числовым псевдонимом процесса (его меткой). Чтобы повысить приоритет команды, которая работает в фоновом режиме, нужно ввести fg %N :

Одновременный асинхронный запуск команд из командной строки является эффективным способом контролировать процессы. Задачи, которые работают долго, например, сложные вычисления или компиляцию большого объема кода, лучше всего делать фоновыми. Для получения результата работы фоновой команды надо перенаправить ее вывод в файл при помощи операторов переадресации >, >&, >> и >>&. Как только фоновая команда закончит свою работу, оболочка выведет результаты ее работы, а потом уже предоставит возможность ввода новой команды:

5. Команды архивации и сжатия

При работе с Linux вы, может быть, еще не скоро встретитесь с необходимостью работать с большинством консольных команд, поскольку имеются такие оболочки, как Midnight Commander или графические оболочки типа KDE. Но с командами архивирования (точнее, разархивирования) вам работать придется обязательно, хотя бы потому, что вы будете часто встречать архивированные файлы в Интернете.

Основным средством архивирования в UNIX (а, следовательно, и в Linux) является комплекс из двух программ -- tar и gzip. Хотя никто не запрещает пользоваться arj, pkzip, lha, rar и т. д. -- версии этих программ для Linux общедоступны. Просто уж исторически сложилось, что пользователи Unix чаще применяют именно tar и gzip, и именно в таком формате распространяется большая часть программного обеспечения для Unix. Поэтому овладеть работой с tar и gzip -- дело чести любого пользователя Linux.

Программа tar

У читателя, привыкшего к архиваторам типа arj, которые собирают файлы в единый архив и сразу "сжимают" их, может возникнуть вопрос "А зачем использовать две программы?” Все дело в том, что tar расшифровывается как Tape ARchiver, он не сжимает данные, а лишь объединяет их в единый файл с последовательным доступом для последующей записи на ленту. По умолчанию этот архивный файл создается на ленточном накопителе, точнее на устройстве /dev/rmt0. Если вы хотите создать архивный файл на диске, то необходимо использовать команду tar с опцией f, после которой указывается имя архивного файла.

У программы tar имеется 8 опций, отличающихся от остальных тем, что при вызове программы должна обязательно задаваться одна из этих опций. Эти опции определяют основные функции программы.

Таблица 1

Опция

Значение

-A, --catenate, --concatenate

Добавляет файлы в существующий архив

-c, --create

Создает новый архив

-d, --diff, --compare

Найти различия между архивом и файловой системой

--delete

Удалить из архива (не может использоваться с магнитной лентой!)

-r, --append

Дописывает файлы в конец архива

-t, --list

Выводит список файлов архива

-u, --update

Добавляет только файлы, которые новее, чем имеющаяся в архиве копия

-x, --extract, --get

Извлечь файлы из архива

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

Однобуквенные опции программы tar могут перечисляться друг за другом (вы увидите это в приводимых ниже примерах).

Чтобы создать один tar-архив из нескольких файлов, используется команда:

[user]$ tar -cf имя_архива файл1 файл2 ...,

где опция -c сообщает программе, что необходимо создать (create) архив, а опция f говорит о том, что архив должен создаваться в виде файла (имя которого должно следовать сразу за этой опцией).

В именах файлов, которые сохраняются в архиве, можно использовать шаблоны имен файлов, в том числе просто символы-заместители * и ?. Благодаря этому можно очень короткой командой отправить в архив сразу много файлов. Например, для того, чтобы создать архив, содержащий все файлы одного из подкаталогов (пусть это будет sub_dir) текущего каталога, достаточно дать команду

[user]$ tar -cvf имя_архива ./sub_dir/*

или даже просто

[user]$ tar -cvf имя_архива sub_dir

По этой команде в архиве будут сохранены не только файлы, расположенные непосредственно в подкаталоге sub_dir, но и рекурсивно все файлы из подкаталогов каталога sub_dir. При этом в архиве сохраняется вся структура подкаталогов каталога sub_dir.

Заметим, что если в только что приведенном примере вместо * поставить *.*, то будут сохранены только те файлы, которые расположены непосредственно в подкаталоге sub_dir, а подкаталоги каталога sub_dir архивированы не будут. Если в том же примере не указать имя подкаталога, то будут архивироваться все файлы (и подкаталоги) текущего каталога. Но если вы дадите команду следующего вида

[user]$ tar -cvf имя_архива ./.*

то в архиве будут сохранены не только все файлы (и подкаталоги) текущего каталога, но и файлы из родительского каталога, а хотели ли вы этого?

Теперь вы знаете как создать архив, а для того, чтобы распаковать (извлечь) файлы из архива, нужно дать команду:

[user]$ tar -xvf имя_архива файлы

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

[user]$ tar -tf имя_архива | less

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

[user]$ tar -Mcvf /dev/fd0H1440 /каталог

Такая команда создаст на дискетах архив с содержимым каталога, разбивая его на тома. Монтировать дискеты перед запуском команды не нужно, программа просто пишет на устройство потоком (в данном случае на дискету по секторам). При этом никакой файловой системы на дискете не создается. После заполнения дискеты вам будет выдан запрос на смену дискеты. Только, прежде чем запускать такую команду на выполнение, приготовьте достаточное число свободных дискет (помните, что tar не сжимает файлы), которые лучше всего соответствующим образом пометить и обязательно пронумеровать. Кроме того, имейте в виду, что вся информация на дискетах будет молча уничтожена.

Чтобы восстановить сохраненные данные, воспользуйтесь командой:

[user]$ tar -Mxpvf /dev/fd0H1440

В заключение заметим, что всегда можно получить подсказку по использованию программы tar, дав команду

[user]$ tar -help

При этом, если вы используете русифицированный дистрибутив Linux, например, Black Cat 6.02, то подсказка будет выдаваться по-русски.

Программа gzip

Хотя программа tar создает архивы, она, как было сказано, не сжимает архивы, а просто соединяет отдельные файлы в единый архивный файл. Для сжатия этого файла часто применяют команду gzip. В простейшем случае она вызывается в следующем формате:

[user]$ gzip файл

В командной строке можно указать сразу несколько имен файлов или шаблон имени файла. Но в этом случае каждый из указанных файлов будет заархивирован отдельно (общий архив не создается).

Для того, чтобы распаковать архив, используйте команду

[user]$ gzip -d файл_архива

или

[user]$ gunzip файл_архива

Исходные файлы после сжатия удаляются, остается только архивный файл (файлы перемещаются в архив), а при разархивации удаляется архив.

Перечислим кратко другие полезные опции программы gzip.

Таблица 2

Опция

Значение

-h, --help

Вызов краткой помощи по использованию программы

-l, --list

Выдает имя файла, содержащегося в архиве, его объем и степень сжатия

-L, --license

Отображает номер версии и лицензию на программу

-N, --name

Сохранять (или восстанавливать) исходное имя и время создания файла

-n, --no-name

Не сохранять (не восстанавливать) исходное имя и время создания файла

-q, --quiet

Подавляет выдачу на экран предупреждающих сообщений

-r, --recursive

Рекурсивно обрабатывать подкаталоги (используется в случае. когда задан шаблон имен обрабатываемых файлов)

-S .suf,

--suffix .suf

Добавить суффикс .suf к имени сжатого файла (вместо добавляемого по умолчанию суффикса gz; но учтите, что при разархивации файлов с суффиксами, отличными от gz, программа вас не поймет)

-t, --test

Протестировать архивный файл

-v, --verbose

Выдача дополнительных сообщений в процессе работы программы

-V, --version

Отобразить версию программы

-1, --fast

Быстрое сжатие

-9, --best

Более высокая степень сжатия

Поскольку программа gzip не умеет сохранять в одном архиве несколько файлов, то обычно ее применяют для сжатия архивов, созданных программой tar. Более того, среди опций программы tar имеется специальная опция -z, позволяющая сразу после создания сжать его с помощью программы gzip. Для выполнения такого сжатия надо использовать команду tar примерно следующим образом:

[user]$ tar -czf имя_архива шаблон_имен_файлов (или имя_каталога)

Только имейте в виду, что в этом случае суффикс .gz не добавляется автоматически к имени создаваемого архива, поэтому лучше сразу задать имя архива с указанием обеих суффиксов: имя.tar.gz.

Программа bzip2

В последнее время все чаще вместо программы gzip используется архиватор bzip2, который обеспечивает более высокую степень сжатия и работает несколько быстрее. Команда bzip2 обычно не устанавливается автоматически при инсталляции Linux. Но она имеется на дистрибутивном диске в виде rpm-пакета и ее легко установить. (Как это сделать, см. в гл. 10.)

Работает bzip2 примерно так же, как команда gzip, т. е. замещает каждый файл, имя которого задано в командной строке, сжатой версией, добавляя к имени файла суффикс .bz2.

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

В некоторых случаях сжатый файл может оказаться даже больше по размеру, чем исходный. Это происходит, например, для файлов длиной менее 100 байт, потому что механизм сжатия использует заголовок длиной около 50 байт. Для файлов, представляющих собой случайную последовательность символов (в том числе для выходных файлов большинства файловых архиваторов) длина файла увеличивается примерно на 0.5%.

Команда bunzip2 (или bzip2 -d) разархивирует указанные в командной строке файлы. Если эти файлы не были созданы программой bzip2, они не будут разархивироваться, будет выдано соответствующее предупреждение. При разархивации bzip2 пытается угадать имя разархивируемого файла по следующим правилам:

· filename.bz2 заменяется на filename;

· filename.bz заменяется на filename;

· filename.tbz2 заменяется на filename.tar;

· filename.tbz заменяется на filename.tar;

· любое другое "имя" заменяется на "имя.out".

Опции командной строки для bzip2 очень похожи на опции команды gzip, но все же они не идентичны. Приведу краткую сводку наиболее необходимых в работе опций.

файл директория unix архивация

Таблица 3

Опция

Значение

-d, --decompress

Принудительная разархивация. Эта опция необходима в силу того, что bzip2, bunzip2 и bzcat -- это на самом деле одна и та же программа, которая сама по расширению имени файла принимает решение о том, какое действие надо выполнить над указанным файлом. Опция -d отключает этот механизм и заставляет программу разархивировать указанные файлы

-z, --compress

Принудительная архивация

-t, --test

Проверка целостности указанного файла(ов) без разархивации

-f, --force

Перезапись существующего файла. По умолчанию bzip2 не перезаписывает существующие файлы. Если вы хотите перезаписать существующий файл, надо задать опцию -f

-k, --keep

Сохранять (не удалять) исходные файлы при архивации или разархивации

-s, --small

Снижает требования к объему используемой оперативной памяти за счет снижения скорости архивации. Эту опцию рекомендуется применять на компьютерах с малым объемом ОЗУ (8 Мбайт и меньше)

-q, --quiet

Не выводить малосущественные сообщения

-v, --verbose

Выводить дополнительную информацию в процессе работе (представляет интерес в диагностических целях)

-L, --license,

-V, --version

Отобразить версию программы и лицензионное соглашение

Аргументы командной строки, которым предшествует двойное тире и пробел, трактуются как имена файлов, даже если они начинаются с тире. Например,

[user]$ bzip2 -- -myfilename

Размещено на Allbest.ru


Подобные документы

  • Характеристика дискретного управления доступом. Особенности модели тип-домен, основанной на концепции минимальных привилегий. Unix-система права доступа файлов. Контролирование администратором доступа в мандатной системе, проблемы ее использования.

    реферат [253,2 K], добавлен 09.01.2012

  • История появления операционной системы Unix. Перекомпиляция Unix в коды любой аппаратной платформы, ее многозадачность и многотерминальность. Основные отличия Unix от других операционных систем. Использование Unix в качестве сервера и рабочей станции.

    реферат [28,1 K], добавлен 05.04.2010

  • История создания, назначение ОС UNIX. Функциональные характеристики: управление процессами, памятью и файлами, коммуникационные средства и программный интерфейс. Особенности архитектуры ОС UNIX. Способы управления процессами и условия эксплуатации.

    контрольная работа [20,6 K], добавлен 21.02.2009

  • Unix - полноценная, изначально многопользовательская, многозадачная и многотерминальная операционная система. Особенности архитектуры Unix, ее два кита - файлы и процессы. Ядро операционной системы, ее файловая система, работа устройств, драйверы.

    реферат [1,0 M], добавлен 22.03.2016

  • История развития ОС UNIX, ее достоинства. Управление компьютером под управлением UNIX. Интерпретация командной строки и структура файловой системы. Команды управления процессами. Средства системного администрирования и учетные записи пользователей.

    презентация [78,1 K], добавлен 12.05.2014

  • Основные структуры процессов в операционной системе Unix. Возможные состояния процесса в Unix и способы перехода между ними. Планирование и выполнение процессов. Различия между родительским и дочерним процессом. Ожидание завершения и выполнения процесса.

    курсовая работа [673,0 K], добавлен 24.02.2012

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

    реферат [599,5 K], добавлен 18.09.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.