Операції з файлами

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

Файл – один з базових елементів будь-якої операційної системи, і Linux тут не виняток. Але в цій ОС файлу надається особливе значення, адже їм описується будь-який об’єкт – від текстового документа до пристрою. А технології розмежування прав доступу до файлів є основою концепції безпеки Linux. Стало бути, об’єкт заслуговує окремої розмови.


Операції з файлами

Для створення файлів простіше всього звернутися до команди cat, використовуючи перенаправлення виводу: cat> [ім'я файлу]. В цьому випадку в об’єкт буде поміщено все, що вводиться з клавіатури (закінчення операції – Одночасне натискання клавіш Ctrl і Z). Зрозуміло, на практиці даний метод використовується рідко – хіба що при необхідності створити невеликий текстовий файл, що складається з одного-двох рядків.

Дивитись щойно створений файл можна за допомогою тієї ж самої команди. Тільки при цьому ніякого перенаправлення не буде, оскільки здійснюється стандартний висновок: cat [ім'я файлу]. Зверніть увагу, як елегантно і економно тут працюють консольні команди.

Втім, на практиці частіше застосовуються інші програми: more і less. Синтаксис їх досить простий, в чому ви переконаєтеся, набравши в консолі команду man [назва програми].

Для копіювання, перейменування або переміщення файлів ви можете використовувати будь-який файловий менеджер. Однак тим, хто встиг оцінити переваги командного рядка, пропонуються інші рішення.

Для копіювання файлів в Linux існує команда cp. Набирати її слід так:

cp [параметри] [джерело] [приймач]. У ролі приймача виступає або ім’я файлу, або назву каталогу, в якому об’єкт буде продубльований з тим же найменуванням.

Для скорочення набору як у цій, так і в інших командах можна використовувати спеціальні символи. Наприклад, точка позначає посилання на поточний каталог, тильда вказує на домашню директорію.

За переміщення або перейменування файлів відповідає команда mv. Скажімо, якщо треба перенести кілька об’єктів з одного каталогу в іншій, то слід набрати в консолі mv ~ / *. [Розширення] / [каталог призначення].

З цією командою треба звертатися особливо уважно. Якщо в каталозі призначення є файл з точно таким же ім’ям, то він буде змінений без попередження. З незвички це здається не зовсім зручним, проте це всього лише інша концепція інтерфейсу: тут програма є не стільки партнером, скільки безмовним слугою. Таким чином, від користувача вимагається більш високий рівень відповідальності.

Видалення об’єктів системи здійснюється командою rm. Якщо набрати її без параметрів, то ніякого попередження видаватися не буде. Враховуючи, що використання цієї команди (особливо від імені суперкористувача) потенційно небезпечно, краще ввести в консолі наступне: rm -i [файл чи група файлів]. В цьому випадку у вас буде шанс передумати, оскільки система зажадає підтвердження.

Для пошуку файлу призначена команду locate. При цьому замість повного імені можна вказувати його частину. Дуже корисна можливість для розсіяних людей, які не можуть утримати все в пам’яті.

Якщо мова йде про команду (програмі), то в командному рядку потрібно набрати which [ім'я]. Цей підхід зручний не тільки для знаходження файлу. Зокрема, таким методом можна швидко дізнатися, встановлено або не встановлено додаток. Втім, тієї ж мети можна досягти більш коротким шляхом.

Оскільки система Linux підтримує функцію автозаповнення командного рядка, то користувачеві досить ввести кілька перших символів і натиснути на клавішу Tab. Вам буде запропоновано кілька варіантів назви – згадати слово, надруковане на дисплеї, завжди простіше, ніж витягнути його з пам’яті (природно, не з оперативної, а зі своєї власної).

Посилання

Посилання – це спеціальні файли, що дозволяють зберігати в системі один і той же об’єкт під різними іменами. Навіщо це потрібно? Уявіть собі, що у вас є великий неструктурований архів документації. Працювати з ним незручно, а порядок його з якихось причин не можна.

В цьому випадку розумно створити кілька робочих каталогів, куди будуть поміщатися об’єкти, вибрані з архіву. Але банальне копіювання не тільки призведе до неефективного витрачання дискового простору, але і додасть головного болю, пов’язаного зі створенням системи синхронізації. Більш зручний метод – створення файлів-посилань. Вони бувають символічними (іноді їх називають м’якими) і жорсткими. Щоб розібратися у відмінностях між ними, доведеться заглибитися в тонкощі організації файлової системи.

Кожен файл в системі Linux має індексний дескриптор – якийсь унікальний номер, під яким він і відомий системі (складне і значуще з людської точки зору ім’я – всього лише трюк, що дозволяє користувачеві краще орієнтуватися у файловій системі). Каталог в Linux – не більш ніж список індексних дескрипторів, тобто фактично точно такий же файл, як і всі інші. Деяка специфіка, звичайно, є, але вона не настільки принципова.

Таким чином, індексного дескриптора цілком достатньо для ідентифікації тієї самої іменованої області диска, яка і називається файлом. А звичне нам найменування файлу лише вказує на конкретний індексний дескриптор. Зрозуміло, таких імен може бути кілька (одне або більше).

Для створення жорсткого посилання слід набрати в командному рядку ln [ім'я файлу] [ім'я посилання]. Якщо і до вихідного файлу, і до файлу-посилання застосувати команду ls-i, яка дозволяє показати індексний дескриптор, то результат, як неважко здогадатися, буде абсолютно однаковим.

З формальної точки зору жорстке посилання – це просто ще одне ім’я файлу. Якщо внести зміни в один об’єкт, то автоматично зміниться й інший, адже по суті справи операція проводиться над однією і тією ж областю.

Видалення жорсткого посилання не призводить до видалення файлу лише в тому випадку, коли у нього є ще хоча б одне посилання. При цьому байдуже, яке ім’я з’явилося першим, а яке – другим або третім.

Символічне посилання дуже схоже на жорстке. Різниця лише в тому, що вона має на увазі не індексний дескриптор, а звичайне ім’я файлу. У ній просто міститься вказівка, що системі слід звернутися до іншого об’єкту.

До речі, звідси і наслідок: операції з символічними посиланнями виконуються трохи повільніше. Адже система звертається не прямо по індексному дескриптору, а робить одну “зайву” дію, викликаючи батьківський файл.

Створюється символічна посилання командою ln-s [ім'я вихідного файлу] [ім'я символічної посилання]. При її видаленні вихідний файл зберігається. А от якщо прибрати з системи основний об’єкт, то посилання стає непотрібним, хоча і залишиться в системі.


Права доступу

Права доступу – одне з основних понять концепції безпеки Linux. Вони визначають операції, які кожен користувач може проводити над об’єктом (файлом або каталогом). Основних дій може бути три – читання, запис, виконання.

Важливо розуміти, що права не мають ієрархії – вони рівноцінні і незалежні один від одного. Наприклад, можлива конфігурація, коли користувач, у якого немає права читання файлів-якого каталогу, може вносити в нього запис. Причому саме цей варіант часто застосовується на практиці при організації FTP-сервера: в ньому повинна бути директорія, куди користувачі могли б викладати будь-які об’єкти. Але скачати їх буде не можна до тих пір, поки адміністратор не перенесе матеріали у спеціально призначений для цього розділ, попередньо перевіривши вміст.

Дивитись права, визначені для будь-якого об’єкта, можна командою ls-l [ім'я файлу або каталогу]. Вона поверне набір символів приблизно такого вигляду:-rwxr-xr-x (зрозуміло, в кожному конкретному випадку порядок символів може відрізнятися від інших). Застосуємо її до вже відомого нам файлу cat. Вийде така послідовність:-rwxr-xr-x. Що ж означають ці символи?

Перша група складається всього з одного символу і визначає тип файлу. Цей символ у відповідності з можливими типами файлів, розглянутими у попередньому розділі, може приймати наступні значення:

- – Звичайний файл;

d – каталог;

b – файл блочного пристрою;

c – файл символьного пристрою;

s – файл типу socket;

p – іменований канал;

l – символічна посилання.

Далі йдуть три набори, в кожному з яких по три символи. Перший описує права творця файлу, другий – групу користувачів, в яку входить творець, третій – всіх інших. Знаки, що застосовуються для позначення прав доступу, повинні входити в безліч {-, r, w, x}.

Символ “r” означає, що користувач має право читати файл, “w” говорить про те, що допускається його запис, і “x” вказує на те, що файл є виконуваним і користувач може його запускати. Риска, зрозуміло, означає, що право, відповідне місцем розташування символу, відсутня.

Таким чином, з нашого прикладу видно, що cat – це програма (звичайний виконуваний файл), творець якої (root) може все, а інші мають права тільки на читання і виконання. Як то кажуть, коротко і ясно. Звідси до того ж видно, що, працюючи від імені простого користувача, стерти або видозмінити об’єкт ніяк не можна. До речі, саме так і досягається висока захист системних програм.

Для зміни прав доступу до будь-якого файлу використовується команда chmod [символ, який вказує на користувача] [символ, який вказує на дію] [символ, що позначає вид права] [ім'я файлу].

Символом, що вказує на користувача, може бути:

u – власник файлу;

g – група, до якої належить власник;

o – користувачі, що не входять в групу, до якої належить власник;

a – всі користувачі системи.

Символом, що вказує на дію, може бути:

+ – Надання права;

- – Позбавлення права;

= – Встановлення нового права замість уже наявного.

Крім такої форми запису на практиці часто використовується так зване цифрове надання прав. При цьому символ “r” кодується цифрою 4, символ “w” – цифрою 2, а символ “x” – цифрою 1. Склавши будь комбінації цих значень, можна отримати число від нуля до семи, при цьому кожна з них буде однозначно описувати необхідну конфігурацію.

Повернемося до нашого прикладу. Набір “rwx” відповідає семи, “rx” – п’яти і “rx” – теж п’яти. Якщо ви хочете призначити файлу аналогічні права, то команда буде виглядати так: chmod 755 [ім'я файлу]. Коротко і витончено, адже такий запис – це всього лише вісімкова запис тієї самої інформації розміром в 9 біт, яка задає права доступу до файлу.

Якщо робота в командному рядку здається складною, то можна скористатися допомогою програми Midnignt Commander. На основній панелі треба вибрати пункт “Файл” і в спадаючому меню – “Права доступу”. Активуйте потрібні вам опції і клацніть на кнопці “Зберегти”.

Користувач, що зазнає труднощі при роботі в “чистій” консолі, може звернутися до програми Midnignt Commander
Графічний інтерфейс KDE надає користувачеві інструмент для зміни прав доступу
Штатні засоби оболонки GNOME дозволяють працювати з правами доступу через графічний інтерфейс