Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: маркетинг, реклама, торговля" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Страницы справочного руководства ОС UNIX на русском : Основы ОС UNIX (4)
Информационный Канал Subscribe.Ru |
Выпуск 114
Уважаемые подписчики!
Сегодня вашему вниманию предлагается
четвертая часть, посвященная основым командам для работы с файлами,
а также правам доступа к файлам в ОС UNIX.
Ваши отзывы об этих учебных материалах шлите мне по почте, в гостевую или оставляйте в комментариях на соответствующей странице проекта "Хроника бегства от безопасности".
Основы ОС UNIX. Учебный курс. Часть 4
Copyleft (no c) - Fuck copyright! 1999-2003 В. Кравчук, OpenXS Initiative, идея, составление, перевод, примеры
Основные команды для работы с файлами
К основным операциям для работы с файлами, помимо создания и просмотра характеристик, можно отнести копирование, удаление, перемещение и переименование, а также просмотр содержимого. Команды для выполнения этих действий представлены в следующих подразделах.
Копирование файлов
Команда cp копирует исходный файл в целевой файл или каталог. Она имеет следующий синтаксис:
-
cp [-p] исходный целевой
cp [-r] [-p] исходный... каталог
Исходный файл не должен совпадать с целевым. Если целевой файл является каталогом, то исходные файлы копируются в него под теми же именами. Только в этом случае можно указывать несколько исходных файлов. Если целевой файл существует и не является каталогом, его старое содержимое теряется. Права доступа, владелец и группа целевого файла при этом не меняются.
Если целевой файл не существует или является каталогом, новые файлы создаются с теми же правами доступа, что и исходные. Время последнего изменения целевого файла (последнего доступа, если он не существовал), а также время последнего доступа к исходным файлам устанавливается равным времени копирования. Если целевой файл был связью на другой файл, все связи сохраняются, а содержимое файла изменяется.
Команда cp поддерживает следующие основные опции:
- -р
-
сохраняет информацию о владельце, по возможности - права доступа и
времена доступа для нового файла;
- -r
- копирует рекурсивно, включая подкаталоги.
Два дефиса (--) позволяют явно указать конец опций командной строки, что дает возможность команде cp работать с именами файлов, начинающимися с дефиса (-). Если в одной командной строке указаны -- и -, второй дефис будет интерпретироваться как имя файла.
Рассмотрим ряд простых примеров копирования. Вот как, независимо от типа, копируется в каталог несколько файлов:
[kravchuk@arturo 16:53:35 /tmp]$ mkdir d1 [kravchuk@arturo 16:53:37 /tmp]$ rm f* [kravchuk@arturo 16:54:08 /tmp]$ ls >f1.txt [kravchuk@arturo 16:54:24 /tmp]$ ln f1.txt f2.txt [kravchuk@arturo 16:54:39 /tmp]$ ln -s f1.txt f3.txt [kravchuk@arturo 16:54:45 /tmp]$ cp f1.txt f2.txt f3.txt d1 [kravchuk@arturo 16:54:58 /tmp]$ ls -l d1 total 24 -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:54 f1.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:54 f2.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:54 f3.txt
Вот пример обычного копирования файлов "один в один":
[kravchuk@arturo 16:55:22 /tmp]$ cp f1.txt f5.txt [kravchuk@arturo 16:55:29 /tmp]$ ls -l f*.txt -rw-r--r-- 2 kravchuk 50 639 Мар 26 16:54 f1.txt -rw-r--r-- 2 kravchuk 50 639 Мар 26 16:54 f2.txt lrwxrwxrwx 1 kravchuk 50 6 Мар 26 16:54 f3.txt -> f1.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:55 f5.txt
Рекурсивное копирование:
[kravchuk@arturo 16:55:34 /tmp]$ cp -r d1 d2 [kravchuk@arturo 16:56:47 /tmp]$ ls -l d2 total 24 -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:56 f1.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:56 f2.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:56 f3.txt
Копирование файлов, имена которых начинаются с дефиса:
[kravchuk@arturo 16:56:50 /tmp]$ ls > -1 [kravchuk@arturo 16:58:44 /tmp]$ cp -1 1.txt cp: illegal option -- 1 cp: Insufficient arguments (1) Usage: cp [-f] [-i] [-p] f1 f2 cp [-f] [-i] [-p] f1 ... fn d1 cp -r|R [-f] [-i] [-p] d1 ... dn-1 dn [kravchuk@arturo 16:58:48 /tmp]$ cp -- -1 1.txt [kravchuk@arturo 16:58:53 /tmp]$ ls -l ?.txt -rw-r--r-- 1 kravchuk 50 666 Мар 26 16:58 1.txt
Удаление файлов
Для удаления файлов используется команда rm со следующим синтаксисом:
- rm [ -firR] файл...
При этом происходит удаление записи файла из соответствующего каталога и уменьшение на 1 количества связей в индексном дескрипторе. Если количество связей в результате становится равным 0, файл уничтожается (после его закрытия всеми открывшими процессами) - соответствующий индексный дескриптор становится свободным, и блоки данных файла также освобождаются.
Для удаления файла пользователь должен обладать правом записи в соответствующий каталог. Если нет права на запись в файл и входной поток связан с терминалом, на терминал выдаются (в восьмеричном виде) права доступа к файлу и запрашивается подтверждение; если введен ответ y - файл удаляется, иначе - нет.
Команда rm воспринимает следующие основные опции:
- -f
-
Удаляет без запросов подтверждения все файлы, независимо от прав
доступа к ним, если имеется право записи для каталога.
- -i
-
Запрашивает подтверждения, прежде чем удалить файл. Опция -i
отменяет действие опции -f; она действует даже тогда, когда стандартный
входной поток не связан с терминалом.
- -r
-
Рекурсивное удаление, с подкаталогами, в том числе, не пустыми.
- -R
- То же, что и опция -r.
Команда rm без опций рекурсивного удаления не удаляет каталоги. Для удаления пустых каталогов предназначена команда rmdir. Если в каталоге есть другие файлы, кроме ссылок на текущий и родительский каталог, команда rmdir его не удаляет. Эта команда имеет следующий синтаксис:
- rmdir [-p][-s] каталог...
Команда rmdir воспринимает следующие опции:
- -p
-
Позволяет удалить каталог и его родительские каталоги, если они -
пустые. В стандартный выходной поток выдается сообщение об удалении
всех указанных каталогов или о сохранении части из них по каким-либо
причинам.
- -s
- Подавляет выдачу сообщений при использовании опции -p.
Рассмотрим ряд примеров удаления файлов и каталогов (продолжая предыдущие примеры):
[kravchuk@arturo 17:23:09 /tmp]$ ls f* d* dogovor_trg.sql f1.txt f3.txt dtdbcache_:0 f2.txt f5.txt d1: f1.txt f2.txt f3.txt d2: f1.txt f2.txt f3.txt [kravchuk@arturo 17:23:17 /tmp]$ rm -r d1 [kravchuk@arturo 17:23:28 /tmp]$ rm f1.txt f2.txt [kravchuk@arturo 17:23:47 /tmp]$ ls -l f* lrwxrwxrwx 1 kravchuk 50 6 Мар 26 16:54 f3.txt -> f1.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:55 f5.txt [kravchuk@arturo 17:23:51 /tmp]$ mkdir d2/d3 [kravchuk@arturo 17:24:12 /tmp]$ rm d2/* rm: d2/d3 is a directory [kravchuk@arturo 17:24:19 /tmp]$ ls -l d2 total 8 drwxr-xr-x 2 kravchuk 50 69 Мар 26 17:24 d3 [kravchuk@arturo 17:24:26 /tmp]$ rmdir -p d2/d3 [kravchuk@arturo 17:25:24 /tmp]$ ls -l d2 d2: No such file or directory
Перемещение и переименование файлов
Команда mv перемещает (переименовывает) исходный файл (или файлы) в целевой файл (или каталог). Она имеет следующий синтаксис:
-
mv [-f][-i] исходный_файл целевой_файл
mv [-f][-i] исходный_файл ... каталог
Имя исходного файла не должно совпадать с именем целевого файла. Если целевой файл является каталогом, то исходные файлы перемещаются в него под теми же именами. Только в этом случае можно указывать несколько исходных файлов. Если целевой файл существует и не является каталогом, его старое содержимое теряется. Если при этом обнаруживается, что в целевой файл не разрешена запись, то выводится информация о правах доступа к этому файлу и с терминала запрашивается подтверждение его перезаписи.
Для перемещения файла необходимо иметь права записи в исходном и целевом каталоге.
Команда mv поддерживает следующие опции:
- -f
-
Принудительное перемещение - если целевой файл уже существует, то
он удаляется.
- -i
- Запрашивает подтверждение удаления существующего файла.
Рассмотрим примеры:
[kravchuk@arturo 17:37:52 /tmp]$ ls -l f* lrwxrwxrwx 1 kravchuk 50 6 Мар 26 16:54 f3.txt -> f1.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:55 f5.txt [kravchuk@arturo 17:37:56 /tmp]$ mv f5.txt f4.txt [kravchuk@arturo 17:38:09 /tmp]$ mv f4.txt f4.txt mv: f4.txt and f4.txt are identical [kravchuk@arturo 17:38:14 /tmp]$ mv f4.txt f3.txt [kravchuk@arturo 17:38:20 /tmp]$ ls -l f* -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:55 f3.txt [kravchuk@arturo 17:38:24 /tmp]$ mkdir d1 [kravchuk@arturo 17:38:54 /tmp]$ mv f3.txt d1 [kravchuk@arturo 17:39:00 /tmp]$ ls -l d1 total 8 -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:55 f3.txt
Просмотр содержимого файлов
Стандартным средством просмотра содержимого файлов (помимо редакторов или команд типа od), является команда cat. Она читает файлы из командной строки в заданной последовательности и помещает их содержимое в стандартный выходной поток. Команда cat имеет следующий синтаксис:
- cat [-u][-s][-v][-t][-e] [файл ...]
Если ни один файл не указан или указан символ дефиса (-), то команда читает стандартный входной поток.
Команда cat - полезный инструмент для конкатенации нескольких файлов.
Команда cat воспринимает следующие основные опции:
- -u
-
Вывод не буферизуется (по умолчанию - буферизуется).
- -s
-
Не сообщается о несуществующих файлах.
- -v
- Визуализация непечатных символов (кроме табуляций, переводов строк и переходов к новой странице). Управляющие символы изображаются в виде ^X (CTRL+X); символ DEL (восьмеричное 0177) - в виде ^?. Символы, не входящие в набор ASCII (то есть с ненулевым восьмым битом) выдаются в виде M-x, где x - определяемый младшими семью битами символ.
Рассмотрим несколько примеров использования команды cat:
[kravchuk@arturo 17:55:26 /tmp]$ ls *.txt > 1.txt [kravchuk@arturo 17:55:36 /tmp]$ cat 1.txt 1.txt [kravchuk@arturo 17:55:39 /tmp]$ cp 1.txt 2.txt [kravchuk@arturo 17:55:48 /tmp]$ cat 1.txt 2.txt > 3.txt [kravchuk@arturo 17:56:00 /tmp]$ ls -l *.txt -rw-r--r-- 1 kravchuk 50 6 Мар 26 17:55 1.txt -rw-r--r-- 1 kravchuk 50 6 Мар 26 17:55 2.txt -rw-r--r-- 1 kravchuk 50 12 Мар 26 17:56 3.txt [kravchuk@arturo 17:56:05 /tmp]$ cat 3.txt 1.txt 1.txt [kravchuk@arturo 17:56:10 /tmp]$ cat >4.txt Hello! ^D [kravchuk@arturo 17:56:29 /tmp]$ cat 4.txt Hello!
Права доступа к файлам
Каждый пользователь UNIX (не говоря уже о системном администраторе) должен управлять дисковым пространством. Пользователь несет ответственность за содержимое своего начального каталога и обеспечение целостности любых имеющихся у него данных. Целостность данных обеспечивается проверкой и изменением прав доступа. Защищая файлы и каталоги, пользователь предотвращает неавторизированный доступ.
Каждый файл в ОС UNIX содержит набор прав доступа, по которому определяется, как пользователь взаимодействует с данным файлом. Этот набор хранится в индексном дескрипторе данного файла в виде целого значения, из которого обычно используется 12 битов. Причем каждый бит используется как переключатель, разрешая (значение 1) или запрещая (значение 0) тот или иной доступ.
Три первых бита устанавливают различные виды поведения при выполнении. Оставшиеся девять делятся на три группы по три, определяя права доступа для владельца, группы и остальных пользователей. Каждая группа задает права на чтение, запись и выполнение.
Базовые биты прав доступа представлены в табл. 11. Там дано восьмеричное значение, задающее соответствующий бит, вид этого бита в первом столбце длинного листинга и право, задаваемое этим битом.
Таблица 11. Права доступа к файлам в ОС UNIX
Восьмеричное значение | Вид в столбце прав доступа | Право или назначение бита |
4000 | ---s------ | Установленный эффективный идентификатор владельца (бит SUID) |
2000 | ------s--- | Установленный эффективный идентификатор группы (бит SПID) |
1000 | ---------t ---------T | Клейкий (sticky) бит. Вид для каталогов и выполняемых файлов, соответственно. |
0400 | -r-------- | Право владельца на чтение |
0200 | --w------- | Право владельца на запись |
0100 | ---x------ | Право владельца на выполнение |
0040 | ----r----- | Право группы на чтение |
0020 | -----w---- | Право группы на запись |
0010 | ------x--- | Право группы на выполнение |
0004 | -------r-- | Право всех прочих на чтение |
0002 | --------w- | Право всех прочих на запись |
0001 | ---------x | Право всех прочих на выполнение |
Бит чтения для всех типов файлов имеет одно и то же значение: он позволяет читать содержимое файла (получать листинг каталога командой ls).
Бит записи также имеет одно и то же значение: он позволяет писать в этот файл, включая и перезапись содержимого. Если у пользователя отсутствует право доступа на запись в каталоге, где находится данный файл, то пользователь не сможет его удалить. Аналогично, без этого же права пользователь не создаст новый файл в каталоге, хотя может сократить длину доступного на запись файла до нуля.
Если для некоторого файла установлен бит выполнения, то файл может выполняться как команда. В случае установки этого бита для каталога, этот каталог можно сделать текущим (перейти в него командой cd).
Установленный бит SUID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) владельца, а не пользователя, вызвавшего файл (как это обычно происходит).
Установленный бит SGID означает, что доступный пользователю на выполнение файл будет выполняться с правами (с эффективным идентификатором) группы-владельца, а не пользователя, вызвавшего файл (как это обычно происходит).
Если бит SGID установлен для файла, не доступного для выполнения, он означает обязательное блокирование, т.е. неизменность прав доступа на чтение и запись пока файл открыт определенной программой.
Установленный клейкий бит для обычных файлов ранее (во времена PDP-11) означал необходимость сохранить образ программы в памяти после выполнения (для ускорения повторной загрузки). Сейчас при установке обычным пользователем он сбрасывается. Значение этого бита при установке пользователем root зависит от версии ОС и иногда необходимо. Так, в ОС Solaris необходимо устанавливать клейкий бит для обычных файлов, используемых в качестве области подкачки.
Установка клейкого бита для каталога означает, что файл в этом каталоге может быть удален или переименован только в следующих случаях:
- пользователем-владельцем файла;
- пользователем-владельцем каталога;
- если файл доступен пользователю на запись;
- пользователем root.
Для расчета прав доступа необходимо сложить восьмеричные значения всех необходимых установленных битов. В результате получится четырехзначное восьмеричное число. Если старший разряд имеет значение 0, его можно не указывать.
Например, если необходимо задать права доступа на чтение, запись и выполнение для владельца, на чтение и выполнение для группы и на выполнение для всех остальных пользователей, получаем следующее восьмеричное значение:
Чтение для владельца: | 0400 |
Запись для владельца: | 0200 |
Выполнение для владельца: | 0100 |
Чтение для группы: | 0040 |
Выполнение для группы: | 0010 |
Выполнение для прочих: | 0001 |
Сумма: | 0751 |
Итак, соответствующие права доступа - 751. В длинном листинге эти права будут представлены в виде "-rwxr-x--x" (при "сложении" буквы с дефисом в символьном представлении остается буква).
В следующем выпуске
Следующая часть учебного курса "Основы ОС UNIX". Следите за новостями на сайте рассылки.С наилучшими пожеланиями,
В.К.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||