D. Пользователь-владелец файла

E. Группа-владелец файла

Группа - это именованное множество пользователей; группы составляются администратором. Каждый пользователь является членом как минимум одной группы.

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

F. Размер файла в байтах

G. Дата последней модификации файла

H. Имя файла

%ls -a

ls -a выводит также файлы, имена которых начинаются с точки. По умолчанию эти файлы считаются "неинтересными" и не показываются. Во всех остальных аспектах это совершенно обычные файлы (кроме, конечно, файла '.' (точка), обозначающего текущий каталог, и файла '..' (две точки) обозначающего вышележащий каталог).

%ls -al

(обратите внимание на наличие символической связи)

Шелл bash для выполнения начальных установок пользователя в некоторых случаях читает файл .profile, а в некоторых - .bashrc. Создание символической связи повзоляет не создавать два одинаковых файла.

%ls b.txt

%ls -l b.txt

%ls prog

%ls -l prog

Проблема: как вывести атрибуты самого каталога, а не его содержимого. Возможные решения: ls -l (строка файла prog) и ls -al prog (строка файла '.') неудовлетворительны при большом числе файлов в текущем каталоге и в каталоге prog - получится слишком длинный листинг. Решение:

%ls -d prog

%ls -ld prog

%ls -ld .

%ls -l ..

%ls -ld ..

%cd каталог

- переход в указанный каталог. Без указания каталога - переход в домашний.

Изучение содержимого файла

%file имя_файла [имя_файла ...]

определяет тип файла путем анализа его содержимого

Определите тип всех файлов вашего домашнего каталога и каталога prog.

Расширение файла (часть имени после точки) в Unix не имеет никакого специального значения. Например, для запуска файла требуется не расширение типа .exe, а право на исполнение.

%cat имя_файла

- выводит содержимое файла на терминал.

%cat b.txt

%more имя_файла

- пейджер (выводит файл постранично, с остановом). Фактически, команда man формирует текст справки и пропускает его через more. Поэтому команды управления прокруткой текста см. выше в описании man.

%more b.txt

%tail [-число] имя_файла

выводит последние 10 строк файла или сколько указано.

%tail b.txt

%tail -2 b.txt

%head [-число] имя_файла

выводит первые 10 строк файла или сколько указано.

%head b.txt

%head -2 b.txt

%od имя_файла

выводит файл в восьмеричном виде. Ключи:

-Nчисло - вывести только указанное число первых байт,

-jчисло - пропустить указанное число первых байт,

-j0xчисло - пропустить указанное число первых байт (число является 16-ричным),

-tx - вывести в шестнадцатеричном виде,

-с - вывести каждый байт в виде символа (непечатные символы отображаются как спецсимволы языка Си: \t,\n,\b,\f,\r,\0, либо как трехзначное 8-ричное число).

%od -N10 tx b.txt

Манипулирование файлами

Создание файла

%touch имя_файла

изменяет время последней модификации файла на текущее. Побочный эффект: если файла нет, он создается с нулевым размером.

%>имя_файла

создает файл нулевого размера (буквально: в этот файл перенаправляется вывод из ниоткуда).

%touch a

%>b

%ls -l

Создание каталога

%mkdir dir

%ls -l

Копирование файла в другой файл или каталог

%cp файл-источник файл-или-каталог-приемник

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

%cp b.txt z

%ls -l

UNIX рассчитана на профессиональных пользователей. Предупреждений по поводу удаления файлов не выводится.

Рекурсивное копирование каталога в другой каталог

%cp -R каталог-источник каталог-приемник

%cp -R prog 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

Жесткие связи

В файловой системе UNIX имя файла является указателем на индексный дескриптор, который содержит атрибуты файла и массив адресов дисковых блоков, в которых находятся данные файла. Однако, индексный дескриптор не содержит ссылки на имя файла, следовательно файл может иметь несколько имен. Дескриптор содержит только счетчик числа этих имен, значение которого показывается во второй колонке листинга ls -l.

Создание жесткой связи - это создание еще одного имени, ссылающегося на тот же самый индексный дескриптор:

%ln сущетсвующее_имя_файла новое_имя_файла

%ln b.txt d.txt

%ls -l

(внимание на значение второй колонки для b.txt и d.txt и размер этих файлов, заметьте также время последней модификации)

Файлы 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 файл автоматически уничтожается.

Наши рекомендации