Работа с файлами и каталогами в UNIX

Как и следовало ожидать, файлы и каталоги в UNIX выглядят во многом так же, как в Windows. Вы узнаете все о файловой системе и структуре каталогов в UNIX и том, какие каталоги в UNIX являются наиболее важными, а также познакомитесь с рядом основных команд, которые можно использовать в UNIX для работы с файлами.

Файлы в системе UNIX

Файлы являются в большинстве компьютерных систем базовой единицей хранения данных и применяются для хранения списков пользователей, сценариев оболочки и т.п. Все элементы в UNIX и Linux, даже аппаратные устройства, интерпретируются как файлы. Файловая система UNIX имеет иерархическую структуру, в самом верху которой находится корневой каталог, обозначаемый символом левой косой черты (/).


Совет. В Oracle все данные хранятся в таблицах, а в UNIX — в файлах.


В типичной системе UNIX файлы могут представлять собой файлы одного из следующих трех типов.

Связывание файлов

Команда link позволяет создавать так называемый указатель (pointer), или ссылку, на любой существующий файл. При использовании этой команды никакого нового файла в действительности не создается; вместо этого создается виртуальная копия исходного существующего файла за счет указания для него нового имени. Символические ссылки позволяют легко обращаться к файлам из другого каталога без предоставления полного пути к ним. В общем случае ссылки бывают двух типов: символические и жесткие. Жесткие ссылки (hard links) могут создаваться между файлами, находящимися в одном и том же каталоге, в то время как символические (symbolic) могут создаваться между любыми файлами, находящимися в любом каталоге. Пример символической ссылки приведен ниже. Жесткая ссылка обычно применяется для создания копии файла, а символическая — просто для указания на другой файл (или каталог). При управлении базами данных Oracle часто создаются символические ссылки для файлов параметров для обеспечения возможности легко ссылаться на них без указания полного пути.

При создании символической ссылки применяется такой синтаксис: 

 
$ ln –s <текущее_имя_файла> <имя_ссылки>

Ниже приведен пример создания символической ссылки по имени test.sql для файла monitor.sql:

 $ ln -s /u01/app/oracle/admin/dba/sql/monitor.sql /u01/app/oracle/test.sql

После создания символической ссылки test.sql,проверить состояние нового файла из каталога /u01/app/oracle можно следующим образом:

 $ cd /u01/app/oracle
$ ls -altr test.sql
lrwxr-xr-x 1 oracle dba 41 Mar 30 10:13 test.sql -> /u01/app/
oracle/admin/dba/sql/monitor.sql
$

Управление файлами

Команда ls позволяет отображать список всех имеющихся в каталоге файлов.Добавляя к ней параметр -al (ls -al) можно получать длинный список всех файлов со всеми их разрешениями и прочей информацией, а добавляя параметра -altr (ls -altr) — упорядоченный список всех файлов с новейшими или недавно отредактированными в конце. Ниже приведено несколько примеров: 

$ ls
catalog.dbf1 tokill.ksh consumer
$ ll
total 204818
-rw-rw-r--- 1 oracle dba 104867572 Nov 19 13:23 catalog.dbf1
-rw-r------ 1 oracle dba 279 Jan 04 2008 tokill.ksh
drwrxr-xr-x 1 oracle dba 1024 Sep 17 11:29 consumer
$ ls -altr
-rw-r------ 1 oracle dba 279 Jan 04 2008 tokill.ksh
drwrxr-xr-x 1 oracle dba 1024 Sep 17 11:29 consumer
-rw-rw-r--- 1 oracle dba 104867572 Nov 19 13:23 catalog.dbf1
$

Команда cat позволяет просматривать содержимое любого файла, как показано в следующем фрагменте кода. Чуть позже вы узнаете, как просматривать и изменять файлы с помощью редактора vi.

 
$ cat test.txt
This is a test file.
This file shows how to use the cat command.
Bye!
Это тестовый файл.
Он просто показывает, как можно использовать команду cat.
До свидания!
$

Но что если файл, который требуется просмотреть, имеет очень большие размеры? В случае использования обычной команды cat его содержимое промелькнет на экране настолько быстро, что его невозможно будет исследовать. Поэтому для просмотра длинных файлов лучше дополнительно использовать команду more, которая позволяет отображать содержимое файлов по одной странице за раз и переходить на следующую страницу нажатием клавиши пробела:

$ cat abc.txt | more

Команда cp позволяет копировать файл в другое место. Обратите внимание, что в случае использования вместе с параметром -i она будет спрашивать разрешения, прежде чем перезаписывать уже существующий и сохраненный ранее файл с таким же именем: 

$ pwd
$ /u10/oradata
$ cp test.txt /u09/app/oracle/data
$ cp -i sqlnet.log output.txt
overwrite output.txt? (y/n) y

Команда mv позволяет перемещать исходный файл в другое место, изменять его имя или делать и то и другое. В следующем примере команда mv используется для изменения имени файла test.txt на abc.txt:

 $ ls
$ test.txt
$ mv test.txt abc.txt
$ ls
abc.txt

Если по какой-то причине нужно избавиться от файла, для этого служит команда rm.При этом, однако, следуют соблюдать особую осторожность, поскольку команда rm удаляет файлы навсегда. Для безопасности лучше использовать команду rm с параметром –i, в случае чего она будет отображать перед безвозвратным удалением файла соответствующее предупреждение. Будьте предельно аккуратны с командой rm, поскольку с ее помощью можно очень легко случайно удалить даже всю файловую систему!

$ ls
abc.txt careful.txt catalog.txt sysinfo.txt
$ rm abc.txt
$ rm -i careful.txt
careful.txt: ? (y/n) y
$ ls
$ catalog.txt sysinfo.txt

Разрешения на чтение и запись данных в файлы в UNIX

Способность пользователя считывать и записывать данные в файлы в системе UNIX зависит от разрешений, которые были предоставлены владельцем этого файла или каталога (владельцем файла автоматически считается пользователь, который его создал).

Для каждого файла и каталога могут предоставляться разрешения трех типов.

Разрешение на чтение является самым базовым. От разрешения на выполнение без разрешения на чтение мало толку, так как выполнить файл, который изначально невозможно прочитать, не получится.

Просмотр разрешений файлов

С помощью команды ls -al можно отображать перечень разрешений и имен всех имеющихся в каталоге файлов. Например, рассмотрим вывод следующей команды:

 
$ ls -al
-rwxrwxrwx 1 oracle dba 320 Jan 23 09:00 test.ksh
-rw-r---r- 1 oracle dba 152 Jul 18 13:38 updown.ksh
-rw-r---r- 1 oracle dba 70 Nov 22 01:30 tokill.ksh
$

Здесь видно, что в начале каждой строки для каждого файла отображается комбинация, состоящая из десяти разных букв и символа дефиса (-).

Первым может отображаться как символ дефиса, так и буква d. Если отображается буква d, значит, речь идет о каталоге, а если символ дефиса — значит, речь идет об обычном файле.

Следующие девять позиций занимают три набора букв rwx, под которыми подразумеваются, соответственно, предоставляемые для файла разрешения на чтение (r —read), на запись (w — write) и на выполнение (e — execution). Первый набор указывает на разрешения, предоставляемые владельцу файла, второй — на разрешения, предоставляемые группе, к которой принадлежит пользователь-владелец, а последний, третий — на разрешения, предоставляемые всем остальным пользователям в системе.

Для примера рассмотрим следующую строку:

 
$ -rwxr-x--x 1 oracle dba Nov 11 2001 test.ksh

Первым здесь идет символ дефиса (-), а это значит, что test.ksh является файлом,а не каталогом. Следующие три символа, rwx, указывают на то, что владелец файла test.ksh обладает всеми тремя разрешениями для доступа к этому файлу (чтение, запись и выполнение). Идущие далее символы, r-x, означают, что все пользователи, которые находятся в той же группе, что и владелец файла, имеют разрешения на чтение и выполнение этого файла, но не имеют разрешение на запись в него. То есть изменять содержимое этого файла они не могут. И, наконец, последний набор символов, --x, указывает на то, что всем остальным пользователям в системе разрешено выполнять файл,но не разрешено изменять его.

Установка и изменение разрешений для файлов

Для любого создаваемого файла первоначально устанавливаются разрешения -rw-r--r--. То есть всем разрешено читать этот файл, но никому — выполнять его.В случае помещения внутрь файла исполняемой программы, однако, может возникать необходимость в предоставлении кому-то разрешения на его выполнение. Устанавливать разрешения для файлов в UNIX можно с помощью команды chmod, у которой имеется два возможных способа применения.

Во-первых, в этой команде можно использовать символические обозначения, а именно: o — для владельца, g — для группы и u — для остальных пользователей в системе.В таком случае необходимые разрешения предоставляются так: сначала указывается интересующая сущность вместе со знаком плюс (+), а затем — символ, представляющий разрешение, которое ей требуется предоставить. В приведенном ниже примере обозначение go+x означает, что группе и всем остальным пользователями предоставляется разрешение на выполнение (x) сценария оболочки test.ksh:

$ chmod go+x test.ksh

Следующий пример показывает, как с помощью символического обозначения лишить группу разрешений на чтение и запись:

$ chmod g-rw test.ksh 

Во-вторых, в команде chmod можно также использовать для изменения разрешений файлов восьмеричные числа. Каждому разрешению соответствует разный цифровой “вес”: разрешению на чтение — вес 4, разрешению на запись — вес 2, а разрешению на выполнение — вес 1. Чтобы установить то или иное разрешение, достаточно просто добавить соответствующее ему число. Наибольшим числом, которое может ассоциироваться с каждой из трех сущностей (владельцем, группой и всеми остальными пользователями) является 7, равнозначное наличию разрешения на чтение, на запись и на выполнение файла. Например, рассмотрим следующий случай:

 
$ ls
$ -rw-r--r-- 1 oracle dba 102 Nov 11 15:20 test.txt
$ chmod 777 test.txt
$ ls
$ -rwxrwxrwx 1 oracle dba 102 Nov 11 15:20 test.txt

Первоначально разрешения файла test.txt выглядели как 644 (rw, r, r). Выполнение команды chmod 777 привело к выдаче всех разрешений (чтение, запись и выполнение) всем трем сущностям, т.е. владельцу, группе и всем остальным пользователям. При желании изменить это и сделать так, чтобы у владельца были все права, а у всех остальных пользователей — ни одного, достаточно просто указать восьмеричное число 700 (означающее, что у владельца должны быть права на чтение, запись и выполнение, а у группы, к которой он принадлежит, и у все остальных пользователей не должно быть вообще никаких прав) и использовать его в команде chmod следующим образом:

 

$ chmod 700 test.txt
$ ls -altr test.txt
-rwx------ 1 oracle dba 0 Mar 28 11:23 test.txt
$

В табл. 3.3 приведен краткий перечень команд, которые можно использовать для изменения разрешений файлов. По умолчанию все файлы поставляются с включенными привилегиями только на чтение и запись, а каталоги — на чтение, запись и выполнение.

За предоставляемые по умолчанию разрешения для доступа к файлам и каталогам отвечает переменная среды UMASK. Поэтому просматривать, как в текущий момент на сервере выглядят предоставляемые по умолчанию разрешения можно с помощью следующей команды: 

$ umask
022
Символическое обозначение Восьмеричное число Описание привилегий
--- 0 Никаких привилегий
--x 1 Только выполнение
-w- 2 Только запись
-wx 3 Запись и выполнение, но не чтение
r-- 4 Только чтение
r-x 5 Чтение и выполнение, но не запись
rw- 6 Чтение и запись, но не выполнение
rwx 7 Чтение, запись и выполнение (все привилегии)

При создании новый файл по умолчанию получает разрешения, наличие которых допускает переменная UMASK. В предыдущем примере вывод показал, что переменная UMASK имеет значение 022, а это значит, что к новым файлам пользователя ни его группа, ни другие пользователи системы не смогут получать доступ для записи.

Изменение группы

Команда chgrp позволяет изменять группу, к которой принадлежит файл. Изменять группу может только владелец файла, причем только на ту, к которой принадлежит сам.Синтаксис команды chgrp выглядит так: 

$ chgrp имя_группы имя_файла

Управление каталогами

Тема управления каталогами имеет два направления. Одно требует разбираться в командах, которые необходимо выполнять для создания, перемещения и удаления каталогов, а второе — в определенных стандартных каталогах, которые встречаются в практически каждой системе UNIX или Linux.

Манипулирование каталогами

Существует несколько важных команд, которые позволяют создавать, перемещать и удалять каталоги.

В частности, команда mkdir позволяет создавать новый каталог:

 
$ mkdir newdir

Путем добавления к ней параметра -p можно также создавать и любые необходимые промежуточные каталоги, если таковых еще не существует. В следующем примере с помощью всего одной команды создается сразу три каталога — /u01/, /u01/app и /u01/app/oracle:

$ mkdir -p /u01/app/oracle 

Команда для удаления каталогов выглядит не так, как команда для удаления файлов.Для удаления каталога нужно использовать команду rmdir, как показано в следующем примере (но перед этим все равно обязательно удалять из него все файлы с помощью команды rm): 

$ rmdir testdir

Команда rmdir позволяет удалять только пустые каталоги. Для удаления каталога,в котором содержатся файлы, нужно использовать команду rmdir вместе параметром -R (или -r), тогда перед удалением самого каталога, сначала рекурсивно удаляются все его содержимое: 

$ rmdir -r newdir

Для перемещения по иерархической структуре каталогов UNIX можно использовать команду cd (которая расшифровывается как “change directory” — “сменить каталог”):

 

 
$ pwd
/u01/app/oracle
$ cd /u01/app/oracle/admin
$ cd /u01/app/oracle
$ cd admin
$ pwd
/u01/app/oracle/admin
$

Обратите внимание, что в команде cd можно указывать как полный абсолютный путь, так и более короткий относительный путь. Кроме того, вместо пути к каталогу можно указывать имя той переменной среды, которая на него ссылается. Например,выполнение команды cd $ORACLE_HOME приведет к переходу из текущего каталога в каталог, на который ссылается переменная ORACLE_HOME.

Важные каталоги UNIX

Существует несколько каталогов, с которыми администратору баз данных Oracle приходится регулярно иметь дело при использовании системы UNIX.

Вас заинтересует / Intresting for you:

Отображение содержимого файлов...
Отображение содержимого файлов... 1480 просмотров Алексей Вятский Tue, 21 Nov 2017, 13:19:25
Поиск файлов и каталогов в Uni...
Поиск файлов и каталогов в Uni... 2545 просмотров Алексей Вятский Tue, 21 Nov 2017, 13:19:25
Подключение к серверу UNIX с Б...
Подключение к серверу UNIX с Б... 2784 просмотров Алексей Вятский Tue, 21 Nov 2017, 13:19:25
Сравнение файлов в Linux и Uni...
Сравнение файлов в Linux и Uni... 2014 просмотров Andrew Tue, 21 Nov 2017, 13:19:25
Печать
Войдите чтобы комментировать