touch [-k] имя-файла
Команда может использоваться для создания новых пустых файлов.
Пример:
$touch fil
$ls -l
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
..................0 10:12 fil
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Следующая команда позволяет выполнить
подсчет количества строк (-l), слов (-w), или символов (-c) в указанных файлах:
wc [-lwc] список_файлов
Ключи l, w, c могут употребляться в любых комбинациях и
в любом порядке, по умолчанию - lwc. Если не указано имя файла,
то команда обрабатывает текст, введенный со стандартного ввода.
$ wc f.ddd
””””””””””””””””””””””
3 5 31 f.ddd
””””””””””””””””””””””
$
В примере файл f.ddd содержит 3 строки, 5 слов и 31 символ.
Пустой файл для последующего использования можно оргнизовать так:
$ > fil.1
$ ls -l fil.1
”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””
-rw-rw-rw- 1 lev user1 0 Mar 19 18:17 fil.1
”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””
$
Смысл команды заключается в переадресации в fil.1 пустого
значения стандартного устройства ввода. Новый пустой файл автоматически создается в текущем каталоге.
Наиболее часто используемая команда для обработки файлов:
cat [-ключи] [входной_файл1[ входной_файл2...]]
- слияние и вывод файлов на стандартное устройство вывода(конкатенация файлов).
Команда богата своими функциональными возможностями даже
без использования ключей. Рассмотрим наиболее полезные из этих
возможностей, используя два пустых файла fil.1 и fil.2.
Здесь и далее приводятся примеры протоколов работы с системой в предположении, что все файлы размещаются в текущем каталоге.
|
$>fil.1
$>fil.2
$ cat > f в файл f помещается текст, набираемый
text пользователем на клавиатуре терминала [0].
<Ctrl-D>
$ ls
”””””
f
fil.1
fil.2
”””””
$ cat f > fil.1 содержимое файла f копируется в
$ cat fil.1 файл fil.1, оставаясь также в f
”””””
text
”””””
$ cat f fil.1 > fil.2 два файла: f и fil.1 сливаются в один fil.2
$ cat fil.2
”””””
text
text
”””””
$ cat f fil.1 >> fil.2 к содержимому fil.2 добавляется fil.1 и f
$ cat f fil.2
”””””
text
text
text
text
text
”””””
Команда копирования файлов:
cp [-k] вх_файл_1 [вх_файл_2 [... вх_файл_n]] вых_файл
В самом формате команды заложено два режима ее использования:
1-й: Если вых_файл - обычный файл, то вх_файл может быть
только один; в этом случае содержимое вх_файла копируется
в вых_файл. Если вых_файл существовал, то его содержимое
полностью заменяется на новое, атрибуты защиты сохраняются. Если создается новый вых_файл, то ему присваиваются
атрибуты копируемого.
2-й: Если вых_файл - каталог, то в него последовательно ко-
пируются все указанные вх_файлы со своими атрибутами и
именами, но каталог при этом автоматически не создается.
Примеры.
$cd
$ cp fil.c FIL.c
Создается новый файл FIL.c в том же текущем головном каталоге. Для копирования в другой каталог необходимо указать маршрутное имя выходного файла.
$ mkdir petr
$ mkdir lev1
$ cp fil.c lev1/prog.c
В том и другом случаях входной файл fil.c сохраняется в
исходном текущем каталоге.
$ cp fil.c FIL.c lev1/prog.c petr
$ ls petr
”””””
fil.c
FIL.c
prog.c
”””””
$
В подкаталог petr параллельного поддерева скопируются последовательно три входных файла, имеющие одинаковое содержание и разные имена.
|
На следующем, не связанном с предыдущим примере вспомним,
как можно использовать групповые операции над файлами при копировании.
$ cp f.? fildir
$ cp f.[1-3] fildir
$ cp f.[123] fildir
Во всех трех случаях копирования выполняется одна и та же
операция (входных файлов всего 3).
Некоторые ключи: -i - вывод предупреждения, если вых-файл уже существует и его содержимое может быть заменено;
-r - для копирования каталогов.
Отметим еще раз,что команда копирования cp сохраняет неизменными входные (копируемые) файлы.
Схожие с командой cp функции выполняет команда:
mv [-k] вх_ф йл_1 [вх_ф йл_2 [... вх_ф йл_n]] вых_ф йл
- перемещение или переименование файлов
Отличия от предыдущей команды копирования заключаются в
том, что перемещаемые файлы в исходном каталоге уничтожаются.
Пример. Предположим, что существует некоторый подкаталог "a" (относительно текущего) со своими файлами.
$ ls a
””
f1
f2
f3
””
$ mv a/f? <NewLine>
$ ls -l a <NewLine>
”””””””
total 0
”””””””
$ ls <NewLine>
”””
...
f1
f2
f3
”””
$
Эту команду можно рассматривать как переименование файла. При этом для пользователя исходная копия файла теряется, новая приобретает новое имя и все значения атрибутов исходного входного файла.
$ mv f1 newf1 - файл переименован в том же текущем каталоге.
Операционная система UNIX предоставляет пользователям воз-
можность использовать общие файлы или использовать один и тот
же файл под разными именами и из разных каталогов. Это обеспе-
чивается за счет установления физических адресных ссылок на об-
|
щий файл из разных каталогов.
Организация новых ссылок на файл выполняется системой по команде:
ln [-k] вх_файл_1 [вх_файл_2 [... вх_файл_n]] вых_файл
В формате команды заложено 2 режимa ее использования:
1-й: Если вых_файл - обычный файл, то допускается только один
вх_файл_1; в этом случае на него создается ссылка с именем
вых_файл (имя каталога определяется по составу имени вых_-
файл), после чего к упомянутому файлу можно обращаться по
двум равноправным именам: вх_файл_1 и вых_файл.
Количество ссылок на файл в его описателе увеличивается на 1.
2-й: Если вых_файл - каталог, то в нем создаются элементы,
включающие имена перечисленных в команде входных файлов и
ссылки на них, после чего в каталоге вых_файл можно работать с этими файлами, как с файлами этого каталога.
Рассмотрим использование команды на примерах.
$ pwd
“”””””””””
/ /lev
“”””””””””
$ cd d1 - назначение текущим каталогом d1
$ ls../d2
'''''''''''''''' - исходное состояние параллельного каталога d2
f21
f22
f23
''''''''''''''''
$ ln../d2/f21 f1
$ ln../d2/f21
$ ls
''''''''''''' - новое состояние текущего каталога
f1
f21
''''''''''''
$ cd
$ ln d2/*
$ ls
''''''''''''''' - результирующее состояние текущего каталога d1
f1
f21
f22
f23
'''''''''''''
$
В каталоге d1 созданы элементы, содержащие ссылки на все существующие файлы каталога d2.
Обобщение свойств команды ln:
- каждая ссылка на входной файл добавляет +1 к числу ссылок входного файла;
- все связанные файлы имеют совпадающие описатели в каталогах;
- если изменяется содержимое одного из связанных файлов, то меняется содержимое всех связанных файлов, т.к. связанные файлы разделяют одни и те же данные на диске;
- если удалить один из связанных файлов, то сокращается число взаимных ссылок на -1.
Тема 17. УПРАВЛЕНИЕ ПРАВАМИ ДОСТУПА К ФАЙЛАМ
И КАТАЛОГАМ
Каждый файл принадлежит конкретному пользователю. Владелец файла имеет абсолютный контроль над теми, кто из пользователей системы может иметь доступ к файлу. Владельцу предоставлены средства командного языка, позволяющими разрешать или запрещать доступ к своим файлам и каталогам.
Права процессов пользователей при доступе к файлу кодируются в атрибутах защиты файла. Атрибуты сопровождают каждый файл, хранятся в описателях файлов, на которые в каталоге имеются ссылки, и доступны для анализа и изменения посредством
специальных команд ОС UNIX. Атрибуты защиты файла определяют права доступа трем видам процессов: процессам пользов ателя - владельца файла (u - user), процессам группы владельца файла (g - group) и процессам остальных пользователей (o - other), не попавших ни в одну из двух предыдущих категорий. Код атрибутов прав доступа пользователей трех перечисленных категорий для каждого файла отображается в полном листинге каталога символьным кодом в виде комбинации следующих символов:
r - разрешение на чтение или на выполнение файла, для каталога - просмотр содержимого каталога (список всех файлов);
w - разрешение модификации или удаления файла, для каталога - включение или удаление файлов;
x - разрешение выполнения файла (совместно с - r), для каталога - поиск по каталогу конкретных отдельных файлов или сделать каталог текущим.
Например, полный листинг каталога /udd/user1/lev может
иметь следующий вид:
-rwxr-xr-x 1 lev user1 171 Mar 4 14:20 fil1.c
drwxr-xr-x 2 lev user1 32 Mar 4 14:51 hh
Здесь файл fil1.c, владельцем которого является пользова-
тель со входным именем lev, является обычным, содержит исходный
текст программы на языке Си длиной 171 байт, доступен владельцу
для чтения, записи и выполнения, членам группы и прочим поль-
зователям - только для чтения и выполнения.
Директория hh защищена для включения новых и удаления существующих файлов.
Для изменения значений кодов защиты только указанных в команде файлов служит команда:
chmod <коды защиты> <список_файлов>
Коды защиты (r, w, x) могут быть заданы только владельцем файла в символьном или числовом виде. Атрибуты задаются для владельца (u), его группы (g) и остальных пользователей (o) или для всех категорий пользователей одновременно (a).
Над символьными атрибутами защиты можно выполнять три следующие операции отдельно для владельца, для группы-владельца и для всех остальных пользователей:
= - присвоить значения кодов доступа (замена существующих);
+ - добавить значения кодов доступа;
- - отобрать права доступа.
Необходимо отметить, что новый файл обычно создается по умолчанию как невыполняемый, со стандартным набором
прав доступа:
rw-rw-rw- - для файла;
rwxrwxrwx - для каталога.
Например, необходимо сделать некоторый файл shproc1 выполняемым, если он был создан как обычный. Для этого можно использовать следующую команду:
$ chmod u+x shproc1
$ shproc1
< Выполнение программы из файла shproc1 >
$
Эти действия необходимы, в частности, при формировании и выполнении shell-процедуры.
Еще пример:
$ ls -l f1
””””””””””””””””””””””””””
-rw-rw-r--....................... f1
””””””””””””””””””””””””””
$ chmod ug+x,o-r f1
$ ls -l f1
””””””””””””””””””””””””””
-rwxrwx---........................ f1
””””””””””””””””””””””””””
$
Еще примеры:
$ chmod u+w,go+x f2
$ chmod u=rw,g=r f3
$ chmod a+x f1 - в данном случае файл f1 становится доступным для исполнения всем пользователям;
$ chmod a=rwx f2 - предоставляются все права всем категориям пользователей.
Числовые значения кодов защиты кодируются трехразрядным восьмеричным числом, где существование соответствующего кода соответствует наличию единицы в двоичном эквиваленте восьмеричной цифры этого числа, отсутствие атрибута - нулю.
Например:
Символьное представление: rwx r-x r--
Двоичное представление: 111 101 100
Восьмеричное представление: 7 5 4
Поэтому следующая команда:
$ chmod 0754 f3
- эквивалентна, в частности, команде:
$ chmod u=rwx,g=rx,o=r f3
В результате выполнения команд в любой из приведенных форм коды доступа файла f3 приобретут следующий вид:
$ ls -l f3
”””””””””””””””””””””””””””””
-rwxr-xr--....................... f3
”””””””””””””””””””””””””””””
$
Таким образом, файл f3 является выполняемым для владельца
и группы, чтение его разрешено всем пользователям, модифицировать файл может только владелец. Подчеркнем, что для выполнения файл должен иметь права доступа r и x.
$ chmod 000 f4 -отмена всех прав доступа.
Пример:
$chmod -w fout - разрешили удалить конкретный файл
$rm fout
“”””””””””””””
fout: mode?
Y
“”””””””””””””
- файл удаляется, т.к. не защищен каталог; чтобы защитить:
$chmod -w - разрешили модификацию текущего каталога
$rm fout
<удаления нет>
Примеры управления правами доступа к каталогам:
$chmod a-rwx, u=rw dir1
$cd dir1
“”””””””
<no>
“””””””” т.к.нет права х для каталога
$ls dir1 - просмотр каталога
“”””
f1
f2
“”””
$ls -l dir1/* - поиск конкретных всех файлов“*”
“””””””””””””””””””
<файлы не найдены> т.к. не разрешен поиск по каталогу
total 0
“””””””””””””””””””
$cat dir1/f1
<no>
“”””””” - то же для конкретного файла
$
Еще пример:
$chmod u=wx dir2
$ls dir2 это каталог, а не обычный файл
“”””””
<no> т.к. нет разрешения на просмотр каталога
“”””””
$cat dir2/ff
“”””””””””””
<тект файла> т.к. есть право”х”- поиск по каталогу и назначение
его текущим
“”””””””””””
$cd dir2
$pwd
/home/lev/dir2
$
Некоторые замечания:
- все каталоги, входящие в полные маршрутные имена файлов должны иметь права на выполнение - (х);
- с целью защиты файла от удаления надо отобрать право (w) как у файла, так и у каталога, в котором находится файл.
Стандартные значения кодов прав доступа устанавливает администратор системы. Однако пользователь в rsh может изменить временно (до конца сеанса работы) значение кода для всех своих новых файлов с помощью команды:
$umask [-r] <режим-доступа>
Собственно маска - это двоичный код, с этим кодом и двоичным кодом установленным ране выполняются некоторые логические операции - в результате операции вычисляются новые коды защиты. В ksh - возможно символьное представление кодов защиты в umask, а собственно числовое значение маски просчитывается системой автоматически и используется для вычисления результирующих заданных в команде кодов доступа;
ключ -S -выводит на экран текущие символьные значения кодов
без ключа - команда выводит числовое значение маски..
Примечание: далее в приводимых примерах сообщения системы,выводимые на экран выделять не будем.
Пример изменения прав доступа для некоторого файла с использованием команды umask:
-rw- rw- rw-.............................................f5
$umask g=r, o= f5 [*]
$ls -l f5 [*]
-rw- r-- ---.................................................f5
$
Пример:
$touch testfil1
$ls -l testfil1
-rw- rw- rw-...........................0 <11:08> testfil1
$umask a-rwx, u=rw, g+r - эти права будут иметь все новые файлы
$umask -S
u=rw, g=r, o=
$umask
137 - числовое значение текущей маски
$touch testfil2
$ls -l testfil2
-rw- r-- --- 0 <11:12> testfil2 – новый файл
Ниже приведенный пример иллюстрирует - как работает команда mesg. Вспомним, что терминал пользователя это тоже файл, т.е. обрабатывается как файл типа "с" – устройство с байтовым (посимвольным) обменом информацией.
$who am i
lev tty3 - tty3 – имя терминала пользовател
$mesg y
$ls -l /dev/tty3
crw- -w- -w-...........lev user <> /dev/tty3 - это файл терминала
$mesg n
$ls -l /dev/tty3
crw- --- ---.................lev user <> /dev/tty3...........................................
Команда mesg обращается к утилите chmod для файла устройства с целью добавления или отнимания прав на запись (w) для членов группы и остальных пользователей. Именно эти достигается блокирование и разблокировагие возможности ввывода на данный экран сообщений других пользователей.
Имеются и другие возможности управления правами доступа. Рассмотрим еще две команды. Рассматриваемые ниже функции может выполнять только владелец файла или администратор.