Керування файлами

Лінукс намагається бути настільки Юнікс-подібним, наскільки це можливо. Традиційно Юнікс операційні системи були орієнтованими на командний рядок. Графічний користувацький інтерфейс присутній у Slackware, але командний рядок все ще залишається основним рівнем управління системою. Саме тому важливо розуміти деякі базові команди керування файлами.

Цей розділ пояснить спільні команди управління файлами і надасть приклади по їхньому використанню. Існує велике розмаїття інших команд, але наведені тут допоможуть вам зрушити з місця. Також, тут надано лише поверховий опис команд. Ви знайдете більш детальне пояснення у сторінці посібника для кожної команди.

Навігація: ls, cd, pwd

ls

Команда ls(1) здійснює перелік файлів у певній директорії. Якщо ви більш знайомі з командним рядком DOS, то ls дещо подібна до команди dir. Сама по собі, без аргументів, ls перечислить файли у поточному каталозі. Щоб побачити, що знаходиться у вашому кореневому каталозі (/), наприклад, ви можете виконати:

$ cd /
$ ls
bin   cdr    dev  home  lost+found  proc  sbin   tmp  var
boot  cdrom  etc  lib   mnt         root  suncd  usr  vmlinuz

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

$ ls -FC 
bin/   cdr/    dev/  home/  lost+found/  proc/  sbin/   tmp/  var/
boot/  cdrom/  etc/  lib/   mnt/         root/  suncd/  usr/  vmlinuz

Завдяки опції -FC, до назв каталогів буде додано слеш під час виводу, а виконавчих файлів - зірочку.

Дуже популярною опцією являється також --color, або --color=auto. Ця опція дозволяє отримати кольоровий вивід. Так, назви каталогів будуть синього кольору, виконуючі файли - зеленого, символічні посилання - світло-блакитного, тощо.

$ ls --color

Ви можете закріпити за ls командою --color опцію, якщо створите відповідний синонім у .bashrc файлі у вашому домашньому каталозі, ви просто додайте рядок alias ls="ls --color=auto" до ~/.bashrc.

Ми можемо також перечислити те, що знаходяться у відмінній від поточної директорії. Для цього аргументом ls повинен бути каталог, який нас цікавить. Так, ми можемо перечислити що знаходиться у каталозі /boot, виконавши

$ ls /boot

ls також може вивести додаткові дані про файли, такі як дата створення, власник і права доступу, для цього слід додати опцію -l (або --long):

$ ls -l /
drwxr-xr-x   2 root     bin          4096 May  7 09:11 bin/
drwxr-xr-x   2 root     root         4096 Feb 24 03:55 boot/
drwxr-xr-x   2 root     root         4096 Feb 18 01:10 cdr/
drwxr-xr-x  14 root     root         6144 Oct 23 18:37 cdrom/
drwxr-xr-x   4 root     root        28672 Mar  5 18:01 dev/
drwxr-xr-x  10 root     root         4096 Mar  8 03:32 etc/
drwxr-xr-x   8 root     root         4096 Mar  8 03:31 home/
drwxr-xr-x   3 root     root         4096 Jan 23 21:29 lib/
drwxr-xr-x   2 root     root        16384 Nov  1 08:53 lost+found/
drwxr-xr-x   2 root     root         4096 Oct  6 12:47 mnt/
dr-xr-xr-x  62 root     root            0 Mar  4 15:32 proc/
drwxr-x--x  12 root     root         4096 Feb 26 02:06 root/
drwxr-xr-x   2 root     bin          4096 Feb 17 02:02 sbin/
drwxr-xr-x   5 root     root         2048 Oct 25 10:51 suncd/
drwxrwxrwt   4 root     root       487424 Mar  7 20:42 tmp/
drwxr-xr-x  21 root     root         4096 Aug 24 03:04 usr/
drwxr-xr-x  18 root     root         4096 Mar  8 03:32 var/

Щоб побачити також приховані файли та каталоги (ті, чия назва починається з крапки), скористайтеся з прапорця -a (--all) (~ тильда є скороченням для назви домашнього каталогу):

$ ls -a ~
.Xauthority       .bash_profile      .mc            .vimrc
.Xdefaults        .bashrc            .mozilla       docs
.bash_history     .inputrc           .viminfo       www

Крім вище вказаних опцій також існують багато інших. Обов'язково передивіться сторінку посібника ls(1).

cd

cd(1) команда використовується щоб поміняти директорію у якій ви знаходитесь. Просто введіть cd із шляхом до каталогу у який ви хочете перейти:

darkstar:~$ cd /bin
darkstar:/bin$ cd usr
bash: cd: usr: No such file or directory
darkstar:/bin$ cd /usr
darkstar:/usr$ ls
X11    adm  dict  etc    i386-slackware-linux  info  libexec  man   share  src
X11R6  bin  doc   games  include               lib   local    sbin  spool  tmp
darkstar:/usr$ cd bin
darkstar:/usr/bin$ 

Зауважте що якщо назва шляху не починається з слешу, cd перенесе нас у підкаталог поточного каталогу із такою назвою, тобто якщо ми вже знаходимося у /usr і ми вказали cd команді bin каталог, то ми опинимось у /usr/bin. Це демонструє важливий концепт абсолютних шляхів і відносних шляхів. Назви шляхів що починаються зі слешу, тобто вказується повний шлях, починаючи з кореневого каталогу, називаються абсолютним шляхом. У відносних шляхах, в свою чергу, вказується шлях до файла по відношенню до поточного каталогу. До відносних шляхів ми також можемо долучити дві крапки (..), що означає "одним каталогом вище поточного". Так, якщо ми знаходимось у /usr/bin, то cd .. перенесе нас у /usr.

Команда cd без жодних аргументів перенесе нас у наш домашній каталог.

cd відрізняється від багатьох інших команд тим що вона є вбудованою командою оболонки. Вбудовані оболонкові команди розглянуті у Розділі 8.1. Це, можливо, не є важливим у даний момент для вас, все що вас повинно цікавити, це те що cd описано у bash(1) і отримати допомогу по цій команді можна завдяки

$ help cd

pwd

Команда pwd(1) (print working directory) використовується для того щоб показати ваше поточне місцезнаходження. Просто введіть pwd на командній лінії:

$ cd /bin
$ pwd
/bin
$ cd /usr
$ cd bin
$ pwd
/usr/bin

Переглядачі: more, less, most

more

Програма ?more(1), це текстовий переглядач (пейджер). Вона вживається часто коли текст файла (або вивід команди) не вміщається на екрані тож ми повинні переглядати його по частинах. more розбиває вивід на окремі частини і очікує притиску важеля пробілу перед тим як відобразити наступну сторінку тексту. Притиск Enter клавіші перемістить вивід на одну лінію. Команда візьме як аргумент назви файлів які ви хочете переглянути:

$ more /etc/X11/xorg.conf

Також more часто вживається у конвеєрі (введення до конвеєрів ви знайдете у Розділі 5.5.3), наприклад:

$ ls /usr/bin | more

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

Під час роботи програми h клавіша (help) викличе сторінку допомоги, q клавіша (quit) припинить роботу переглядача. Як тільки more дійшла до кінця тексту, вона припиняє свою роботу. Прочитайте обов'язково сторінку посібника ?more(1) для додаткових опцій і ключів навігації.

less

Хоча more є досить зручною програмою, вона має один невеликий недолік - ви не можете прокрутити текст назад. Саме тому, напевне, більше вживають less(1). less дуже подібний на попередню програму, ви так само викликаєте less і можете вживати її в конвеєрі:

$ less /var/log/messages
$ dmesg | less

Пошук по тексту так само працює з less. Сторінку допомоги ви теж отримаєте з допомогою h клавіші. Ключі навігації додатково описані у ?lesskey(1) сторінці посібника. q ключ завершує роботу переглядача.

most

Сучасніший, цікавий оглядач тексту, ?most(1) додає нову функціональність, дозволяючи оглядати декілька файлів у окремих вікнах терміналу. Ви так само знайдете повний опис програми і різноманітних опцій у ?most(1) сторінці посібника.

view

На додаток до вищезгаданих програм перегляду тексту варто згадати view(1) переглядач, який є частиною vim(1) редактора (описаного у Розділі 9.1). Це фактично vim, запущений у режимі тільки для читання. view зручний тим що надає стандартну для vi підсвітку синтаксису, що допомагає у перегляді різноманітного коду. Також view успадковує розвинутий пошук по тексту, характерний для vim. Для припинення огляду, введіть :q команду.

Простий вивід: cat, echo

cat

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

Для того щоб поєднати декілька файлів у один більший, перечисліть необхідні файли після cat команди, після чого перенаправте вивід у інший файл (перенаправлення більш детально описане трохи нижче у Розділі 5.5.3):

$ cat file1 file2 file3 > bigfile

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

$ cat file1

Ви також можете вживати cat у поєднанні з переглядачами, такими як more або less, якщо пропустите вивід cat команди через конвеєр (5.5.3) (хоча простіше просто виконати more file1):

$ cat file1 | more

Інший поширений спосіб використання cat - для копіювання файлів (навіть бінарних):

$ cat /bin/bash > ~/mybash

Останнє скопіює bash програму у ваш домашній каталог, назвавши її mybash.

Також типовим використанням є долучення змісту одного файлу до іншого за допомогою подвійного оператора перенаправлення ">>":

$ cat file1 >> file2

В останньому випадку, file2 збереже свій зміст, до нього лише буде додано те що знаходиться у file1.

Універсальність cat робить її однією з найчастіше вживаних команд. Завдяки тому що cat широко використовує стандартний ввід і стандартний вивід, вона ідеальна для оболонкових скриптів і як частина інших, складніших команд.

echo

echo(1) команда виводить наданий їй як аргумент рядок тексту на екран.

$ echo Hello there...

Зазвичай echo виведе рядок і добавить нову лінію у кінці. Ви можете запобігти цьому якщо добавите -n прапорець до echo. Опція -e заставить echo брати до уваги любі екрановані знаки такі як \t (таб), \a (дзвоник), \e (знак екранації), тощо. Дуже радимо прочитати echo(1) і bash(1) сторінки посібника Man(1) для додаткової інформації.

Створення файлів і каталогів: touch, mkdir

touch

touch(1) використовується для зміни часу доступу або часу модифікації файла. Це у випадку якщо файл вже існує, якщо вказаного файла немає, тоді touch команда створить його. Отже, щоб створити новий порожній файл, виконайте:

$ touch file1

Існує декілька опцій touch, включаючи опції щодо який саме час змінити, модифікації (-m) чи доступу (-a), який саме час вказати (-t 200509170923) (рік, місяць, дата, година), тощо. Ви знайдете деталі у touch(1) сторінці посібника.

mkdir

Команда mkdir(1) створить новий каталог. Ви просто повинні вказати ім'я каталогу або каталогів які ви хочете створити. Наприклад, щоб створити новий каталог або каталоги у поточній директорії, виконайте:

$ mkdir documents
$ mkdir charts images

Ви також можете вказати шлях до каталогу який ви хочете створити, приміром

$ mkdir /tmp/temporary

mkdir не має багато опцій. Важливими є -m, опція що вказуватиме права доступу до каталогу (дозволи розглянуто у Розділі 14.1.2), і -p опція що дозволяє створювати директорії рекурсивно (розміщені одна в одній):

$ mkdir -m 700 noshare
$ mkdir -p www/images/banners

Перша команда створить каталог noshare із правами на читання, запис і виконання тільки користувачем, тоді як друга утворить одночасно декілька розміщених один в одному каталогів. Якщо не надати -p (parent) прапорець в останній команді, це призведе до помилки, якщо ні www ні images попередньо не існували.

Копіювання і зміна назви

cp

Команда cp(1) копіює файли і каталоги якщо надано -r або (краще) -R (recursively) прапорець. Наприклад:

$ cp processes.txt /tmp
$ cp -r charts /tmp

Багато користувачів віддають перевагу збереженню значення часу створення або модифікації а також прав виконання з допомогою -a (всерівно що -dpR) або -p опції:

$ cp -a file1 /tmp
$ cp -pR noshare /tmp
$ ls -ld /tmp/file1 /tmp/noshare

cp має ще декілька опцій. Радимо вам прочитати сторінку посібника для cp(1).

mv

mv(1) переносить файл з одного місця у інше. mv також дуже часто використовується для зміни назви файла. Власне, це єдина команда яка дозволяє це здійснити у один крок.

$ mv file1 /tmp/fileX
$ mv /tmp/fileX /tmp/fileY

Якщо ви заглянете у сторінку посібника для mv(1), ви знайдете декілька додаткових опцій цієї команди. На практиці, мало хто їх використовує.

Усунення: rm, rmdir

rm

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

Щоб видалити один або більше файлів, ви просто перечислюєте їхні назви за rm командою:

$ rm file2 /tmp/fileY

Якщо ви не маєте прав на запис, ви отримаєте "Permission denied" помилку. Це запобігає видаленню звичайними користувачами важливих системних файлів, наприклад. Серед різноманітних опцій rm команди, варто звернути увагу на -f (force) яка запобігає підтвердження наміру видалення і звісток про помилки у випадку невдачі, також -r або -R (recursively), що дозволяє рекурсивно видаляти ієрархії директорії:

$ rm -Rf /tmp/noshare

rm - це доволі потужна команда, особливо якщо вона використовується root користувачем. Так, щоб видалити всю кореневу ієрархію, необхідно лише видати rm -Rf / (звичайно ми не радимо робити цього). Також будьте особливо уважними у вживанні rm із шаблонами (шаблони розглянуто трохи нижче у Розділі 5.10). Якщо не впевнені, завжди краще вживати rm із -i (interactive) прапорцем, що вимагатиме підтвердження (y або n) вашого наміру видалити кожний файл.

rmdir

rmdir(1) як ви можливо здогадуєтесь, видаляє каталоги з файлової системи. Каталог обов'язково повинен бути пустим перед тим як його можна буде видалити за допомогою rmdir. Синтаксис команди досить простий - сама команда, за якою слідує один або більше каталогів що належать усуненню:

$ rmdir /tmp/charts

Якщо charts не є порожнім, ви отримаєте помилку "rmdir: charts': Directory not empty". В такому випадку варто або випорожнити charts каталог перед усуненням, або вжити-p(_parent_) прапорець (або скористатися з уже відомої нам **rm -Rf`**):

$ rmdir -p /tmp/charts

Остання команда може бути вжита лише звичайним користувачем, оскільки вона по ідеї повинна видалити всі каталоги із /tmp включно, але оскільки звичайні користувачі не мають права видалити /tmp, цей каталог буде збережено. У випадку root користувача, /tmp теж буде усунено (що небажано).

Жорсткі і символічні посилання: ln

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

Жорсткі посилання, це просто інша назва для того самого файла (один файл може мати різні назви). Жорсткі посилання можуть знаходитись лише у межах однієї файлової системи і бути видаленими лише коли остання назва файла видалена з системи. Ось приклад створення жорсткого посилання, мається на увазі що file1 вже існує і fileH буде жорстким посиланням до першого. Ми використовуємо ln без жодних прапорців у цьому випадку:

$ ln file1 fileH

Жорсткі посилання бувають корисними у деяких випадках, але більшість користувачів, напевне, нададуть перевагу універсальнішим символічним посиланням.

Символічні (м'які) посилання можуть вказувати на файл по-за файлової системи, навіть на вже неіснуючий файл. Це власне, невеличкий файл що утримує необхідну інформацію. Ви можете додавати і усувати символічні посилання без впливу на справжній файл. Оскільки символічні посилання, це лише файл із власною інформацією, він може вказувати також на каталоги. Це, власне, дуже поширене, мати /var/tmp як символічне посилання на /tmp каталог.

Щоб створити символічне посилання, додайте -s до ln команди:

$ ln -s file1 fileS
$ ls -l fileS
lrwxrwxrwx    1 nabis    users           5 Sep 20 23:16 fileS -> file1

Як бачите, в обох випадках, жорсткого і символічного посилань, першим аргументом ln стоїть справжній файл (file1), а потім йде назва файла-посилання що буде створено (fileH та fileS).

Монтування пристроїв

Як вже було оговорено у Розділі 4.1.1, усі диски і пристрої вашого комп'ютера являються частиною єдиної файлової системи. Різноманітні розділи твердого диску, CD-ROM і гнучкі диски - всі розміщені у тій самій деревовидній ієрархії. Для того щоб долучити ці диски до файлової системи, щоб мати змогу користуватися ними, ви повинні скористатися командами ?mount(1) та ?umount(1).

Деякі пристрої автоматично монтуються під час завантаження системи. Вони перелічені у /etc/fstab файлі. Все що ви бажаєте бути монтованим автоматично, буде привнесено у цей файл. Для решти пристроїв вам доведеться виконувати команди кожного разу як ви побажаєте використати пристрій.

fstab

Давайте подивимось на приклад /etc/fstab файлу:

$ cat /etc/fstab
/dev/sda1       /               ext2        defaults        1   1
/dev/sda2       /usr/local      ext2        defaults        1   1
/dev/sda4       /home           ext2        defaults        1   1
/dev/sdb1       swap            swap        defaults        0   0
/dev/sdb3       /export         ext2        defaults        1   1
none            /dev/pts        devpts      gid=5,mode=620  0   0
none            /proc           proc        defaults        0   0
/dev/fd0        /mnt            ext2        defaults        0   0
/dev/cdrom      /mnt/cdrom      iso9660     ro              0   0 

У першій колонці перелічені назви пристроїв. У цьому випадку, пристроями є п'ять розділів розміщених на двох SCSI твердих дисках, дві спеціальні файлові системи що не потребують пристрою, гнучкий диск і компактний диск (CD-ROM). У другій колонці вказані місця де ці пристрої будуть монтованими. Це повинно бути назвою каталогу, за виключенням, у цьому прикладі, swap розділу. Третя колонка перелічує тип файлової системи кожного приладу. Для звичайної файлової системи Лінукса, це буде ext2 (ext3, reiserfs тощо), для компактних дисків - iso9660, для Windows розділів - msdos (vfat, ntfs).

У четвертій колонці знаходяться опції що застосовуються стосовно монтованих файлових систем. Опція defaults може бути застосовано практично з кожною, тим не менш приладам тільки для читання повинна бути надана ro (read-only) опція. Існує велика кількість опцій які можна вживати. Загланьте у сторінку посібника fstab(5) додаткової інформації. Останні дві колонки використовуються ?fsck(8) і іншими командами для маніпуляції приладів. Ви також знайдете цю інформацію у посібнику по fstab(5).

Під час інсталяції Slackware, програма setup автоматично створить базовий fstab для вас.

mount і umount

Приєднати інший пристрій до вашої файлової системи досить легко, все що вам необхідно, це використати команду mount разом з декількома опціями. Використання mount може бути подалі спрощеним якщо прилад внесено у файл /etc/fstab. Так, наприклад, якщо нам потрібно монтувати CD-ROM диск і /etc/fstab виглядатиме подібно до наведеного вище, ми могли б викликати mount як:

# mount /mnt/cdrom

Оскільки вже існує запис для пункту монтування /mnt/cdrom у файлі /etc/fstab, програма mount знатиме які опції використати. У протилежному випадку нам довелося б вказати необхідні опції:

# mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom

Цей командний рядочок включає ту саму інформацію що fstab, але ми пройдемося по частинах команди, про всяк випадок. -t iso9660 - це тип файлової системи монтованого приладу. У цьому випадку, це буде iso9660, що використовується у більшості компактних дисках. Опція -o ro вказує монтувати прилад тільки для читання. Останні, /dev/cdrom і /mnt/cdrom вказують на прилад і на каталог що служитиме пунктом монтування, відповідно.

Якщо ви заглянете у директорію /dev, то дізнаєтесь що cdrom, це лише посилання на scd0, справжній вузол пристрою. Це зроблено для полегшення життя як користувачам так і програмам які шукають пристрій компактного диску.

Перед тим як вийняти компактний диск або гнучкий диск з дисководу, и обов'язково повинні попередньо розмонтувати їх. Для цього використовується команда umount. (Зверніть увагу "umount" пишеться без першої "n", куди вона поділась - залишається таємницею.) Аргументом umount може бути як монтований пристрій, так і пункт монтування, немає різниці. Так, щоб розмонтувати компактний диск з попереднього прикладу, ми можемо використати одну з двох команд:

# umount /dev/cdrom
# umount /cdrom

Монтування через NFS

NFS (Network File System) означає Мережева Файлова Система. Вона не є, насправді, частиною спаравжньої файлової системи, але, як вказує назва, дозволяє приєднати через мережу файлові системи інших машин.

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

Монтування через NFS описане у Розділі 5.6.2. Також вам варто буде заглянути у сторінки посібника exports(5), ?nfsd(8) і ?mountd(8).