Права доступа к файлам и каталогам
В ОС Linux для каждого файла и каталога задаются права доступа, определяющие, кто и какие операции может осуществлять над данным файлом. Эти права позволяют ограничить доступ к файлу трем категориям пользователей (владелец, группа, остальные).
Кроме этого, можно управлять типом прав доступа к данному файлу или каталогу. Для файла или каталога может быть установлено право на чтение, запись и выполнение (для каталога - это право на вход в него). Наличие соответствующего права на чтение кодируется символом r (от англ. read), право на запись - w (write), право на выполнение - x (execute), отсутствие соответствующего права обозначают дефисом (-).
Эти три типа прав доступа для трех категорий пользователей образуют набор из девяти символов, однозначно задающий все права доступа к файлу (каталогу), например, rwxrwxr-x.
Обратите внимание, что для удаления файла необходимо обладать правом на запись в директорию, его содержащую.
При создании файла или каталога права устанавливаются автоматически, чем впрочем, тоже можно управлять. Владелец файла может изменять его права доступа как угодно.
Команда ls -l выдает подробную информацию о файле, включая права доступа к нему. С файлом, имеющим, например, код доступа rwxr-xr-x его хозяин может производить любые операции (читать, изменять и выполнять), а все остальные - только читать и выполнять.
Связывание файлов с разными именами
Файловая система ОС LUNIX обеспечивает возможность связывания одного и того же файла с разными именами. Осуществляется это с помощью ссылок. Различаются «жесткие» и «мягкие» ссылки.
Жесткие ссылки (link) на один и тот же файл могут располагаться в одном и том же каталоге, тогда локальные их имена обязательно должны быть разными, или в разных каталогах, тогда локальные их имена могут совпадать.
Они представляют собой ссылки на один и тот же физический файл. Удаление файла по одной из ссылок приводит к удалению только элемента каталога, сам же файл сохраняется и может быть доступен по другим ссылкам. Физический файл удаляется только при удалении последней ссылки на него.
Жесткие ссылки могут существовать только в рамках определенной файловой системы. Они не могут связывать несколько файловых систем, так как ссылка на файл происходит по элементу дескриптора файла, который уникален только в рамках файловой системы.
"Символическая" связь или "мягкая" ссылка представляет собой ссылку не на физический файл, а на другой элемент каталога. При установлении символических связей только один элемент каталога ссылается на физический файл, и при удалении по этому имени физический файл также удаляется (если у него нет помимо этого жестких связей), а элементы каталога, ссылающиеся на удаленный, остаются, но становятся "неразрешенными ссылками", обращения по этим именам приводят к ошибкам.
Удаление ссылки не влияет на файл, на который она ссылается. Символическая ссылка не защищает файл от удаления; в случае, если файл, на который указывает ссылка, перемещается или удаляется, эта ссылка будет испорчена. По этой причине во многих системах для обозначения символических ссылок в листинге каталогов используются различные цвета, чаще всего – светло-голубой для хороших ссылок и красный для испорченных.
Первое существенное отличие файла-ссылки – отсутствие прав.
Второе - размер файла символических ссылок равен длине имени файла, на который указывает эта ссылка.
Cимволические ссылки существуют благодаря тому, что они преодолевают несколько ограничений, присущих («жестким») ссылкам:
Можно создать ссылку на файл, который находится в другой файловой системе.
Можно создать ссылки на каталоги.
Поэтому символические ссылки очень полезны в различных ситуациях, и очень часто люди стремятся их использовать для связывания файлов даже тогда, когда могла бы быть использована обычная ссылка. Одно из преимуществ обычного связывания состоит в том, что вы не потеряете файл, если удалите «оригинальный».
СИНТАКСИС
ln [-f] файл1 [файл2 ...] целевой_файл
ОПИСАНИЕ
Команда ln делает целевой_файл ссылкой на файл1. Файл1 не должен совпадать с целевым_файлом.
Если целевой_файл является каталогом, то в нем создаются ссылки на файл1, файл2,... с теми же именами. Только в этом случае можно указывать несколько исходных файлов. Если целевой_файл существует и не является каталогом, его старое содержимое теряется.
ОПЦИИ
-f
удаление существующего целевого файла
-s
создание символической ссылки (по умолчанию создается жесткая ссылка)
Создание жестких ссылок
:~$ echo testing > file1
:~$ ls -l file*
-rw-r--r-- 1 ian ian 8 2005-12-26 15:35 file1
:~$ ln file1 file2
i:~$ ls -l file*
-rw-r--r-- 2 ian ian 8 2005-12-26 15:35 file1
-rw-r--r-- 2 ian ian 8 2005-12-26 15:35 file2
:~$ rm file1
:~$ ls -l file*
-rw-r--r-- 1 ian ian 8 2005-12-26 15:35 file2
:~$ cat file2
testing
Создание мягких ссылок
:~$ touch file5
:~$ ln -s file5 file6
:~$ ln -s file5 file7
:~$ ls -l file*
-rw-r--r-- 2 ian ian 8 2005-12-26 15:35 file2
Поиск жестких ссылок
Для наождения жеских ссылок на определенный файл можно использовать команду find и параметр -samefile с указанием имени файла
:~$ ln file2 file3
:~$ ls -il file2
172 -rw-r--r-- 2 ian ian 8 2005-12-26 15:35 file2
:~$ find . -samefile file2
./file2
./file3
Поиск мягких ссылок
Можно использовать команду find и параметр -lname с указанием имени файла,
В ссылках могут использоваться относительные и абсолютные пути, поэтому полезно поставить подстановочный символ «звездочка» перед именем искомого
:~$ mkdir linktest1
:~$ ln -s ~/file3 linktest1/file8
:~$ find . -lname "*file3"
./linktest1/file8
:~$ find . -lname "*file5"
./file7
./file6
Пример
Создание рабочей копии файла и внесение в нее
версионных изменений.
$ cp Hum-Dum.txt HD
$ ed HD
201
1i
Версия 1
.
w
210
q
Создание подкаталога D1 и новой версии файла в нем.
$ mkdir D1
$ cd D1
$ cp ../HD HD
$ ed HD
210
1c
Версия 2
.
w
210
q
Создание подкаталога D3 и мягкой ссылки в нем.
$ mkdir D3
$ cd D3
$ ln -s ../HD HD
Создание подкаталога D6 и жесткой ссылки в нем.
$ mkdir D6
$ cd D6
$ ln ../../../HD HD
Возврат в домашний каталог.
$ cd
Создание подкаталога D2 и подкаталогов в нем.
$ mkdir D2
$ cd D2
$ mkdir D4
$ mkdir D5
Создание файла и жесткой ссылки в подкаталоге D4.
$ cp ../../HD HD
$ ed HD
210
1c
Версия 3
.
w
210
q
$ ln HD HD1
Создание мягкой ссылки в подкаталоге D5.
$ cd ../D4
$ ln -s HD HD1
Возврат в домашний каталог.
$ cd