Анотація
Порівняно з Windows® і більшістю інших операційних систем, в GNU/Linux роботу з файлами організовано зовсім інакше. У цьому розділі ми розглянемо найбільш очевидні відмінності. Для отримання додаткової інформації прочитайте, будь ласка, Розділ 4, Файлова система Linux.
Основні відмінності є прямим результатом того факту, що Linux є багатокористувацькою системою: кожен файл є виняткової власністю одного користувача й однієї групи. Ще один момент про користувачів і групи, який ми не згадали, полягає в тому, що кожен з них володіє особистим каталогом (під назвою домашній каталог). Користувач є власником цього каталогу і всіх створюваних у ньому файлів. Також зверніть увагу, що з ними також асоціюється група, яка є основний групою, до якої належить користувач. Як було сказано раніше (див. Параграф 1, “Користувачі та групи”), користувач може бути членом кількох груп одночасно.
Проте, якби це було єдиним поняттям володіння файлом, користі від цього було б мало. Як власник файла, користувач може встановлювати права доступу до файлів. Ці права розподіляються між трьома категоріями користувачів: власником файла; всіма користувачами, що є членами групи, асоційованої з файлом (також званої групою власника), але які не є його власниками; та іншими, до котрих відносять всіх інших користувачів, які не є ані власниками, ані членами групи власника.
Існує три різновиди прав доступу:
Права на читання (Read, r
): користувачеві дозволяється читати вміст файла. Стосовно до каталогів це означає, що користувач може переглянути його вміст (тобто список файлів цього каталогу).
Права на запис (Write, w
): дозволяє змінювати вміст файла. Стосовно до каталогів право на запис дає користувачеві можливість додавати чи видаляти файли з цього каталогу, навіть якщо він не є власником цих файлів.
Права на виконання (eXecute, x
): дозволяє запуск файла (зазвичай лише виконувані файли мають цей тип прав доступу). Стосовно до каталогів це надає користувачеві можливість проходити крізь нього, що означає ввійти в цей каталог чи пройти крізь нього. Зверніть увагу, що це відрізняється від доступу на читання: ви в змозі пройти через каталог, але прочитати його вміст все-таки не зможете!
Можливі будь-які комбінації цих прав доступу. Наприклад, ви можете дозволити лише читання файла для себе і заборонити доступ для всіх інших користувачів. Як власник файла ви також можете змінити його групу (тільки якщо ви є членом нової групи).
Давайте розглянемо приклад файла і каталогу. Нижче представлено виконання команди ls -l в командному рядку:
$ ls -l total 1 -rw-r----- 1 queen users 0 Jul 8 14:11 a_file drwxr-xr-- 2 peter users 1024 Jul 8 14:11 a_directory/ $
Результати виконання команди ls -l (зліва направо):
Перші десять символів визначають тип файла і призначені йому права доступу. Перший символ - це тип файла: якщо це звичайний файл, ви побачите тире (-
). Якщо це каталог, крайнім зліва символом буде d
. Існують інші типи файлів, які ми обговоримо пізніше. Наступні дев'ять символів визначають права доступу для цього файла. Ці дев'ять символів насправді є трьома групами з трьох прав. Перша група визначає права власника файла; наступні три символи стосуються всіх користувачів, які належать до групи власника; останні три символи відносяться до всіх інших. Знак тире (-
) означає, що права доступу не встановлені.
Далі йде кількість посилань на файл. Пізніше ми побачимо, що унікальний ідентифікатор файла - це не ім'я, а його номер (номер inode), і існує можливість мати на диску кілька імен для одного файла. Для каталогу кількість посилань має спеціальне значення, що також буде розглянуто трохи пізніше.
Наступна частина інформації - це ім'я власника файла і ім'я групи.
І, нарешті, далі показані розмір файла (в байтах), час останньої його зміни та ім'я самого файла чи каталогу наприкінці рядка.
Давайте ближче розглянемо права доступу для кожного з цих файлів: спочатку ми повинні відкинути перший символ, який означає тип файла, і для файла a_file
ми отримаємо такі права: rw-r-----
. Нижче представлена схема організації прав:
перші три символи (rw-
) - це права власника, яким в даному випадку є queen. Отже, queen може читати файл (r
), змінювати його вміст (w
), але не може запускати його (-
).
наступні три символи (r--
) відносяться до будь-якого користувача, крім queen, але який є членом групи users
. Він буде в змозі прочитати файл (r
), але не зможе ані записати, ані виконати його (--
).
останні три символи (---
) відносяться до будь-якого користувача, крім queen і всіх, хто входять до групи users
. Ці користувачі взагалі не мають ніяких прав на цей файл. Для них цей файл є “невидимим”.
Для каталогу a_directory
права виглядають так rwxr-xr--
, тож звідси:
peter, як власник каталогу, може отримати список файлів, що знаходяться в ньому (r
), додати чи видалити файли з цього каталогу (w
) і може пройти крізь нього (x
);
Кожен користувач, крім peter, що входить до групи users
, буде в змозі отримати список файлів в цьому каталозі (r
), але не зможе видалити чи додати файли (-
), а також зможе проходити крізь нього (x
).
Будь-який інший користувач зможе лише отримати список вмісту цього каталогу (r
). Та позаяк в нього немає прав wx
, він не зможе записати файли чи ввійти в каталог.
Є одне виключення з цих правил - root
. root
може змінювати атрибути (права доступу, власника і групу) всіх файлів, навіть якщо він не є власником, і зможе зробити себе власником файла! root
може читати файли, для яких у нього немає прав на читання, проходити через каталоги, до яких у нього (якби він звичайним користувачем) не було б доступу тощо. І якщо root
'ові бракує прав, йому потрібно лише додати їх. root
має повний контроль над системою, що має викликати певний рівень довіри до людині, яка знає його пароль.
І нарешті не слід тривожитися через відмінності між іменами файлів в світах UNIX® і Windows®. Перший - UNIX® - надає значно більшу гнучкість і має менше обмежень.
Ім'я файла може містити будь-які символи, включаючи ті, що не друкуються, за винятком ASCII-символу 0, який означає кінець рядка, і /, який є роздільником каталогу. Крім того, внаслідок чутливості до регістру в UNIX® файли readme
і Readme
будуть різними, бо літери r
і R
в системах на базі UNIX® розглядаються як два різних символи.
Як ви могли помітити, ім'я файла не обов'язково повинно мати розширення, якщо тільки вам не заманеться так називати свої файли. У GNU/Linux розширення файлів не визначають їх вмісту, а також на більшості операційних систем. Проте так звані “розширення файлів” досить зручні. У UNIX® точка (.
) - це просто один символів, але він також має спеціальне призначення. В UNIX® файли з іменами, що починаються з точки, є “прихованими”[1]; це також стосується й каталогів, чиї імена починаються з .
[1] За умовчанням приховані файли не будуть відображатися у файловому менеджері доти, доки ви не скажете йому зробити це. У терміналі ви повинні набрати команду ls -a
, щоб побачити всі файли, включаючи приховані. Найчастіше в них міститься конфігураційна інформація. В якості прикладу погляньте на файли .mozilla
чи .openoffice
свого каталогу home/
.