Следующие после типа файла 9 символов представляют собой права на использование файла: первая тройка символов - для пользователя-владельца файла, вторая - для группы-владельца, третья - для всех остальных. Наличие буквы в каждой тройке означает наличие соответствующего права:
для обычных файлов:
r - право на чтение содержимого файла
w - право на изменение содержимого файла
x - право на исполнение (запуск) файла
для каталогов:
r - право на получение списка файлов каталога
w - право на создание и удаление файлов в каталоге
x - право на "поиск" в каталоге
Набор прав --x для каталога позволяет войти в него и прочитать файл, имя которого заранее известно (при условии наличия прав чтения этого файла). Можно также выполнить команды ls и ls -l для этого файла. При этом получить список файлов (ls (-l) для каталога), а также создать или удалить файл нельзя.
Право r-- для каталога позволяет произвести чтение каталога, то есть получить список имен его файлов. При этом ни войти в каталог, ни узнать атрибуты файлов (ls -l), ни прочесть файл (даже при наличии прав чтения этого файла) нельзя. Создать или удалить файл, естественно, нельзя.
Модификация файла требует прав на запись в файл, так как это операция над файлом. Удаление файла требует прав на запись в каталог, в котором находится этот файл - это операция над каталогом. Наличие права записи в файл не обязательно означает возможность его удалить (хотя можно размер файла уменьшить до нуля).
%ls -a
ls -a выводит также файлы, имена которых начинаются с точки.
%ls -al
%ls.bashrc
%ls -l.bashrc
%ls /bin
%ls -l /bin
Проблема: как вывести атрибуты самого каталога, а не его содержимого. Возможные решения: ls -l (строка файла bin) и ls -al bin (строка файла '.') неудовлетворительны при большом числе файлов в текущем каталоге и в каталоге bin - получится слишком длинный листинг.
|
Решение:
%ls -d /bin
%ls -ld /bin
%ls -ld.
%ls -l..
%ls -ld..
Команда
%cd каталог
- переход в указанный каталог. Без указания каталога - переход в домашний.
Каждый пользователь при входе в систему помещается в свой домашний каталог. Все файлы в этом каталоге принадлежат ему - это его собственное дисковое пространство в системе.
Изучение содержимого файла
Команда
%file имя_файла [имя_файла...]
определяет тип файла путем анализа его содержимого
Определите тип всех файлов вашего домашнего каталога и каталога /tmp.
Расширение файла (часть имени после точки) в Unix не имеет никакого специального значения. Например, для запуска файла требуется не расширение типа.exe, а право на исполнение.
Команда
%cat имя_файла
- выводит содержимое файла на терминал.
%cat /tmp/bash.info
Команда
%more имя_файла
- пейджер (выводит файл постранично, с остановом). Фактически, команда man формирует текст справки и пропускает его через more.
%more /tmp/bash.info
Команда
%tail [-число] имя_файла
выводит последние 10 строк файла или сколько указано.
%tail /tmp/bash.info
%tail -2 /tmp/bash.info
Команда
%head [-число] имя_файла
выводит первые 10 строк файла или сколько указано.
%head /tmp/bash.info
%head -2 /tmp/bash.info
Команда
%od имя_файла
выводит файл в восьмеричном виде. Ключи:
-Nчисло - вывести только указанное число первых байт,
-jчисло - пропустить указанное число первых байт,
-j0xчисло - пропустить указанное число первых байт (число является 16-ричным),
-tx - вывести в шестнадцатеричном виде,
|
-с - вывести каждый байт в виде символа (непечатные символы отображаются как спецсимволы языка Си: \t,\n,\b,\f,\r,\0, либо как трехзначное 8-ричное число).
%od -N10 -tx /tmp/bash.info
Манипулирование файлами
Создание файла
Команда
%touch имя_файла
изменяет время последней модификации файла на текущее. Побочный эффект: если файла нет, он создается с нулевым размером.
%>имя_файла
создает файл нулевого размера (буквально: в этот файл перенаправляется вывод из ниоткуда).
Копирование файла в другой файл или каталог
%cp файл-источник файл-или-каталог-приемник
Если файл приемник существует, он будет удален (т.е. копирование производится поверх). Каталог-приемник должен существовать.
%cp /tmp/bash.info b.txt
%cp b.txt z
%ls -l
%cp b.txt tmp
%ls –l tmp
UNIX расчитана на профессиональных пользователей. Предупреждений по поводу удаления файлов не выводится.
Рекурсивное копирование каталога в другой каталог
%cp -R каталог-источник каталог-приемник
%cp -R tmp dir
%ls -l
%ls -l dir
Перемещение/переименование файла или каталога
%mv файл-или-каталог-источник файл-или-каталог-приемник
%mv z y
%ls
%mv y dir
%ls
%ls dir
%mv dir ddd
%ls
%ls ddd
Символические связи
Символическая связь - особый тип файла, содержащий имя другого файла (в листинге ls -l такие файлы обозначаются буквой l в первой колонке). Чтение-запись в файл-связь на самом деле приводят к чтению-записи в файл, на который он ссылается.
Создание символической связи:
%ln -s сущетсвующий_файл файл_связь
(Файл с именем файл_связь не должен существовать.)
%ln -s b.txt c.txt
%ls -l
(внимание на файл c.txt и его размер: 5 - это число символов в имени "b.txt")
|
%more c.txt
Жесткие связи
Создание жесткой связи - это создание еще одного имени, ссылающегося на тот же самый индексный дескриптор:
%ln сущетсвующее_имя_файла новое_имя_файла
%ln b.txt d.txt
%ls -l
Файлы b.txt и d.txt абсолютно равноправны, т.к. это два разных имени одного и того же физического файла.
%touch d.txt
%ls -l b.txt d.txt
(внимание на время последней модификации у обоих файлов)
%ls -i b.txt d.txt
(выводит номера индексных дескрипторов - видим, что это один и тот же файл)
Удаление файлов и каталогов
% rm имя_файла
- удаляет файл, но не к;
% rmdir имя_каталога
- удаляет каталог, только если он пуст;
%rm -r имя_каталога
- удаляет каталог рекурсивно (т.е. со всеми подкаталогами), но просит подтверждения при удалении файлов, в которые у вас нет права записи (поскольку для удаления файла достаточно иметь право записи в его каталог);
% rm -rf имя_каталога- удаляет каталог рекурсивно и молча.
%ls ddd
%rm ddd/y
%ls ddd
%rm ddd
%rmdir ddd
%rm -r ddd
%ls -l
%rm c.txt
%ls -l b.txt d.txt
%rm d.txt
%rm a b
%ls -l
Удаление файла на самом деле представляет собой уменьшение на 1 счетчика его имен в индексном дескрипторе; соответствующий системный вызов называется unlink(2). Физически файл удаляется системой если он закрыт и если счетчик имен равен нулю. Это свойство используется программистами при создании временных файлов: после создания файла функцией open сразу же вызывается unlink, сбрасывающий счетчик имен в 0. Пока файл открыт, его можно использовать (через файловую переменную, возвращенную функцией open; имени у файла уже нет). После вызова close файл автоматически уничтожается.
Что представляют собой команды UNIX?
Большинство команд представляют собой программы, находящиеся в каталоге /usr/bin. Чтобы выяснить, что понимает шелл под той или иной командой, используйте команду type. Шелл либо укажет путь к исполняемому файлу, либо сообщит, что это - его встроенная команда.
%type ls
%type rm
%type cd
%type type
%type cat
%type od
%type head
%type pwd
%type ln
Поиск исполняемого файла производится в каталогах, установленных переменной окружения PATH (переменные окружения будут изучаться в этом курсе позже). Чтобы определить в каком каталоге находится программа, используйте команду which:
%which ls
%which qwerty
%which cd
3.Задание:
Сценарии (скрипт) bash
1. Напишите сценарий, проверяющий имя текущего каталога и выводящий сообщение об ошибке, если оно короче пяти символов.
2. Требуется проверить, является ли файл обычным или он является каталогом. Если это обычный файл, то сценарий должен выводить имя файла и его размер.
3. Напишите сценарий, выводящий посекундно в цикле имена файлов текущего каталога и их порядковый номер.
4. Напишите сценарий, который генерирует тысячу файлов 1.txt …. 1000.txt, и в каждый файл записывает подряд 100 чисел N, где N = порядковый номер файла.
Работа с файловой системой
1. Создайте пустой файл и сожмите его gzip.
2. Создайте небольшой каталог testarch с файлами в домашнем каталоге. Выполните резервное копирование этого каталога командой rsync. Создайте в каталоге testarch новый файл newfile.
4.Содержание отчета:
1. Цель работы.
2. Краткое описание теории
3. В рабочем отчете зафиксировать задание, результат его выполнения.
4. Сделать выводы по работе.