Файловий простір qnx
У QNX облік файлів організований у вигляді деревовидної структури (дерева), яку називають файловим простором. Коренем цього дерева є кореневий каталог, який має ім'я </>. Все доступне користувачам файловий простір об'єднує в єдине дерево каталогів, коренем якого є каталог з ім'ям </>. Тому повне (абсолютне) ім'я будь-якого файлу починається з </>. QNX в своєму арсеналі має засоби, що дозволяють об'єднувати різні файлові системи, що знаходяться на різних пристроях в єдиний файловий простір. Тому файловий простір в загальному випадку не є однорідним. Єдине дерево файлового простору, таке, яким його бачить користувач системи, може будуватися з окремих файлових систем в загальному випадку різних типів, які можуть розташовуватися на різних пристроях і мати різну внутрішню організацію.
Для кожного процесу ОС веде два атрибути, пов'язаних з файловою системою - атрибут, який вказує на каталог, який розглядається для процесу в якості кореневого, і атрибут, який вказує на каталог, який розглядається для процесу в якості поточного робочого. У зв'язку з цим процес може адресуватися до файлу по імені або в абсолютному, або у відносному форматі. Назва файлу складається з послідовності компонентів - локальних імен, розділених символами '/'. Каталог, що містить локальне ім'я, вважається батьківським каталогом цього імені.Послідовність імен каталогів, що передує останньому локальному імені в імені файлу, вважається префіксом імені файлу. Абсолютна ім'я файлу починається із символу "/", що позначає кореневий каталог. Наприклад, /user/bin/sh є абсолютним ім'ям файлу sh, а /user/bin/- його префікс. Якщо ім'я файлу не починається з символу '/', то воно означає шлях у файловій системі від поточного каталогу процесу до зазначеного файлу. Таке ім'я вважається відносним. Наприклад, вказавши ім'я файлу як mydir/test1.c, слід вважати, що в поточному каталозі процесу присутній каталог з ім'ям MyDir.
Базова структура файлового простору qnx
Спочатку файловий простір QNX не є порожнім (що складається з одного кореневого каталогу файлової системи QNX з ім'ям /) Файлова система QNX має базову структуру системних каталогів і файлів, що забезпечує роботу ОС і її адміністрування. Порушення цієї структури може привести до непрацездатності системи або окремих її компонентів. Типова базова структура файлової системи QNX включає в себе наступні каталоги:
Кореневий каталог
Кореневий каталог </> є основою файлової системи. Всі інші каталоги і файли розташовуються в структурі кореневого каталогу незалежно від їх фізичного місцезнаходження. Розглянемо основні системні каталоги, до яких належать такі каталоги:
/bin
В каталозі /bin знаходяться найбільш часто вживані команди і утиліти системи, як правило, загального користування.
/dev
Каталог /dev містить файли пристроїв. Каталог може містити підкаталоги, що групують файли пристроїв одного типу.
/etc
В цьому каталозі знаходяться системні конфігураційні файли і багато утиліт адміністрування, а також скрипти ініціалізації системи.
/lib
В каталозі /lib знаходяться бібліотечні файли мови С.
/root
Каталог користувача з ім'ям root. При вході в систему під цим ім'ям цей каталог стає поточним каталогом.
/fs
Це стандартний каталог для монтування файлових систем фізичних пристроїв до структури кореневого каталогу для отримання єдиного дерева логічної файлової системи.
/home
Каталог спільного використання для розміщення домашніх каталогів користувачів при їх реєстрації в системі.
/usr
В цьому каталозі знаходяться підкаталоги різних сервісних підсистем, виконувані файли утиліт QNX, файли заголовків мови C і т.д.
/var
Цей каталог використовується для зберігання тимчасових файлів різних сервісних підсистем.
/tmp
Каталог зберігання тимчасових файлів, необхідних для роботи різних підсистем QNX, а також користувачів системи.
/X86
У структурі цього каталогу містяться засоби, що забезпечують розробку програм на мові С для виконання на базі платформи Intel. У ньому, зокрема, знаходиться утиліта-компілятор gcc.
Монтування файлових систем
Як правило, програми не працюють з блочними пристроями безпосередньо (як з фізичним носієм). Вважається, що в кожному фізичному розділі блочного пристрою (наприклад, жорсткого диска) міститься файлова система деякого типу. Для доступу до її вмісту вона повинна бути вбудована в дерево кореневої файлової системи QNX у вигляді новостворюваного каталогу. Ця операція вбудовування називається підключенням або монтуванням файлової системи пристрою. Після монтування доступ до файлової системи пристрою здійснюється у вигляді доступу до вмісту даного каталогу.
При завантаженні QNX автоматично підключає файлові системи, що знаходяться в розділах НЖМД, поміщаючи їх в каталог /fs у вигляді підкаталогів з автоматично формованими іменами. Вхід в такий підкаталог призводить до потрапляння в корінь відповідної файлової системи. Однак перш ніж зможе відбутися робота з файлами на пристроях з мобільними носіями (CD-ROM, НГМД, флеш-пам'ять і т.д.), файлова система відповідного пристрою зі встановленим на ньому мобільним носієм повинна бути "вручну" підключена до дерева файлового простору QNX. Процедура підключення називається монтування файлової системи пристрою.
Монтування проводиться командою <mount>, де вказується тип файлової системи (зі списку типів файлових систем, відомих QNX: душ, QNX4, CD і т.д.), повне ім'я файлу пристрою (зареєстрованого в QNX) та повне ім'я формованого каталогу, асоційованого з монтує файлової системою. Наприклад, для монтування файлової системи типу DOS на НГМД (йому відповідає в QNX файл пристрої з ім'ям - /dev/fd0) необхідно виконати у вікні терміналу наступну команду shell:
# mount –t dos /dev/fd0 <повне ім'я каталогу>
Якщо необхідність в мобільному носії відпала, його можна демонтувати і відповідний каталог у файловому просторі буде анульовано. Наприклад, для демонтування НГМД потрібно виконати команду
# umount /dev/fd0
або
# umount /home/A:
Командний рядок
З командним інтерпретатором можна працювати як в "чорному екрані", так і в графічному середовищі. Для використання командного інтерпретатора в графічній оболонці Photon потрібно запустити псевдотермінал pterm. Командний інтерпретатор виведе на екран запрошення (для "простого" користувача - $, для суперкористувача - #). У відповідь на це запрошення можна надрукувати команду і натиснути клавішу Enter. Інтерпретатор виконає команду (або повідомить про помилку, якщо йому це не вдалося) і знову виведе запрошення для введення наступної команди. І так до тих пір, поки не отримає команду exit(вихід).
Командний інтерпретатор - це програма. Є кілька програм такого призначення:
□ Bourne Shell (sh) - інтерпретатор, стандартизований в рамках POSIX 1003.2;
□ Korn Shell (ksh) - розширення sh;
□ Bourne Again Shell (bash) - модернізований інтерпретатор sh;
□ C-Shell (csh) - інтерпретатор з "Сі"-подібним синтаксисом сценаріїв.
В ОС Linux, наприклад, інтерпретатором за умовчанням є bash, в QNX - ksh.Оскільки KSH повністю реалізує функціональні можливості sh, заради економії місця, з одного боку, і за традицією, з іншого, в QNX файл /bin/sh- символічне посилання на /bin/ksh. В одній системі можна одночасно використовувати будь-які інтерпретатори.
Буває, що використовувати інтерпретатор ksh в системах з обмеженими ресурсами - "дороге" задоволення. Тому в складі QNX є і "урізані" інтерпретатори:
□ esh - вбудований командний інтерпретатор (Embedded Shell). Надає множину функціональних можливостей ksh, при запуску виконує прості команди з файлу /etc/esh. Цей інтерпретатор не дозволяє писати програми з умовними операторами і т. п.
□ uesh-малий вбудований інтерпретатор (Micro-embedded Shell),отриманий в результаті урізання esh;
□ fesh, "жирний" вбудовується інтерпретатор (Fat embedded shell). На противагу uesh, fesh є розширенням esh. Цей варіант shell з'явився відносно недавно через те, що апаратура сучасних вбудованих систем досить продуктивна, щоб не використовувати настільки "кволі" інтерпретатори, як esh і uesh.
Команди командної стрічки
Подивимося, в якому місці файлової системи ми знаходимося, т. е. введемо команду PWD у відповідь на запрошення # і натиснемо клавішу <Enter>:
# pwd /root
У відповідь на екрані з'явиться ім'я каталогу, в якому він знаходиться (/root).
Файлова система операційних систем сімейства QNX має загальноприйняту для UNIX-подібних систем деревоподібну структуру. Коренем цього дерева є каталог, що позначається символом / (слеш) і називається"root".
Шляхове ім'я - це повне ім'я каталогу або файлу, однозначно вказує місце каталогу (файлу) в дереві файлової системи починаючи від каталогу "root". Ім'я можна вказувати і відносне, тобто щодо поточного каталогу. Якщо ім'я починається не з /, то Neutrino вважає, що зазначено відносне ім'я. Це означає, що якщо б ми в попередньому прикладі ввели таку команду cd tmp то операційна система вирішила б, що ми хочемо перейти до каталогу /root/ tmp.
Щоб з будь-якого місця файлової системи повернутися в домашній каталог, треба ввести команду cd без аргументів. Щоб перейти до вищого каталог, треба ввести таку команду: cd ..
Можна створювати свої каталоги, наприклад, створимо каталог /tmp/myfolder. Якщо ми знаходимося в каталозі /tmp, то досить вказати відносний шлях: mkdir myfolder
Значення всіх змінних оточення можна подивитися за допомогою команди set без аргументів.
Тепер створимо в новому каталозі файл MyFile. З каталогу /tmp це можна зробити так:
touch myfolder/myfile або виконати дві команди: cd myfolder touch myfile
Подивитися на вміст каталогу можна за допомогою команди ls,наприклад для перегляду каталогу /usr/bin потрібно виконати команду ls /usr/bin
Команди для роботи з каталогами та файлами
$ pwd - вивiд повного iменi каталога;
$ ls - вивiд бiжучого каталога;
$ ls -al - a(all) - всi файли та каталоги; - l(long) - повна iнформацiя;
$ ls / - вивiд кореневого каталога;
$ ls /dev - вивiд каталога драйверiв;
$ ls /users/user1 - вивiд каталога користувача 1;
$ cd /dev - (change directory) - перехiд у каталог dev;
$ cd - повернення до власного (home) каталога;
[$ cd;] $ mkdir pc pf - створення пiдкаталогiв pc та pf у власному каталозi;
$ cat /users/user1/file1 - вивiд файла file1;
$ cat file1 - вивiд файла file1 з власного каталога;
$ tail /file1 - вивiд кiнця файлу file1(10 останнiх стрiчок);
$ tail -7 /file1 - вивiд останнiх 7 стрiчок файлу file1;
$ tail +5 /file1 - вивiд решти стрiчок файлу file1, починаючи з п'ятої;
$ file /file1 - вивiд типу файлу file1;
$ cp [/users/user1/]prog1 [/users/user1/]prog2 - копiювання файлу prog1 в prog2;
$ mv prog1 user2/prog1 - перенос файла prog1 з бiжучого каталога в каталог user2 без перейменування;
$ mv prog1 prog2 - перейменування файла prog1 в prog2;
$ rm [-i] prog1 - видалення файла prog1 (-i -запит пiдтвердження);
$ rmdir user1 - видалення порожнього каталога user1;
Встановлення прав доступу до файлiв та каталогiв
Встановлено три категорiї користувачiв файлами та каталогами:
- власник (user - u);
- користувачi з групи власника (group - g);
- всi iншi (other - o).
Встановлено три рiвнi доступу до файлiв та каталогiв:
- тiльки читання файла чи каталога (read - r);
- читання та запис (write - w);
- виконання файла як команди (execute -x).
Встановленi три операцiї змiни режиму доступу:
- призначити (=);
- дозволити (+);
- заборонити (-).
Режим доступу встановлюється по категорiях користувачiв в такому порядку: власник- група-решта. Наприклад: власник - повний доступ, група - тiльки читання та виконання, iншi- тiльки читання.
$ chmod <режим> <файли> - встановлення режиму доступу;
$ chmod rwxr----- prog1 prog2;
$chmod u-w,g+x,o=r prog1 prog2 - змiна режиму доступу.