Touch - замена времени модификации на текущее, если файл не существует, то создается новый пустой файл




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) для членов группы и остальных пользователей. Именно эти достигается блокирование и разблокировагие возможности ввывода на данный экран сообщений других пользователей.

 

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: