Документация по ОС FreeBSD Четверг, 30.01.2025, 21:33
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Установка и настройка

Основы ОС 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" (при "сложении" буквы с дефисом в символьном представлении остается буква).

Категория: Установка и настройка | Добавил: oleg (10.12.2007)
Просмотров: 837 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2025