Чтение онлайн

ЖАНРЫ

UNIX — универсальная среда программирования
Шрифт:
Сводка команд файловой системы

В табл. 1.1 дана краткая сводка описания команд, которые были рассмотрены выше.

ls
Вывод списка имен файлов текущего каталога
ls filenames
Вывод списка только поименованных файлов
ls -t
Вывод списка, упорядоченного по времени создания файла (сначала более новые)
ls -l
Вывод данного списка, содержащего большую информацию; допустимо также
ls -lt
ls -u
Вывод списка, упорядоченного по времени последнего использования; допустимо также
ls -lu
,
ls -lut
ls -r
Вывод
списка с обратным порядком; допустимо также
ls -rt
,
ls -rit
и т.п.
ed filename
Редактирование поименованного файла
cp file1 file2
Копирование
file1
в
file2
, старое содержимое
file2
пропадает, если оно было
mv file1 file2
Переименование
file1
в
file2
; старый
file2
исчезает, если он был
rm filenames
Удаление поименованных файлов безвозвратно
cat filenames
Вывод содержимого поименованных файлов
pr filenames
Печать содержимого файлов с заголовком, по 66 строк на странице
pr -n filenames
Печать в
n
столбцов
pr -m filenames
Печать поименованных файлов в несколько столбцов
wc filenames
Подсчет числа строк, слов и символов для каждого файла
ws -l filenames
Подсчет числа строк для каждого файла
grep pattern filenames
Вывод строк, соответствующих шаблону
grep -v pattern files
Вывод строк, не соответствующих шаблону
sort filenames
Сортировка файлов по строкам в алфавитном порядке
tail filename
Вывод 10 последних строк файла
tail -n filename
Вывод
n
последних строк файла
tail +n filename
Вывод файла, начиная со строки
n
cmp file1 file2
Вывод места первого расхождения
diff file1 file2
Вывод всех расхождений между файлами

Таблица 1.1: Сводка команд файловой системы

1.3 Продолжаем изучать файлы: каталоги

Система отличит ваш файл с именем

junk
от "нужного" файла с тем же именем. Это обеспечивается за счет группировки файлов в каталоги подобно тому, как книги помещаются на полках в библиотеке, так что файлы могут иметь одинаковые имена в разных каталогах без конфликтов.

В общем случае каждый пользователь имеет свой личный каталог, иногда называемый начальным каталогом, который содержит только принадлежащие ему файлы. Входя в систему, вы оказываетесь в вашем личном (начальном) каталоге. Можно сменить каталог, с которым вы работаете (его часто называют рабочим или текущим каталогом), но ваш личный каталог останется тем же. Если не предпринять специальных действий, новый файл, создаваемый вами, попадает в текущий каталог. Так как вначале текущим является личный каталог, ваш файл никак не связан с файлом, имеющим то же имя, в чужом каталоге.

Каталог может содержать и другие каталоги как обычные файлы. Естественным способом представления такой организации каталогов служит дерево файлов и каталогов. В процессе обхода дерева — от корня вдоль нужных ветвей — можно найти любой файл системы. Можно поступить и наоборот: начать в произвольном месте и двигаться по направлению к корню.

Рассмотрим первый способ. Основным нашим средством будет команда

pwd
("print working directory" — печать рабочего каталога), которая выведет имена файлов каталога, с которым вы работаете:

$ pwd

/usr/you

$

Команда выведет сообщение о том, что вы находитесь в каталоге you, а сам каталог —

в каталоге
usr
, который в свою очередь находится в корневом каталоге, традиционно обозначаемом как
'/'
. Символ
'/'
разделяет компоненты имени: каждый компонент ограничен по длине 14 символами. Во многих системах каталог
/usr
содержит имена каталогов всех пользователей. (Даже если ваш личный каталог не
/usr/you
, команда
pwd
выдаст нечто аналогичное, так что вы сможете следить за последующими примерами.) Введя

$ ls /usr/you

вы получите тот же самый список файлов, который выдает только

ls
. Если в команде
ls
нет аргументов, то она выводит содержимое текущего каталога; если же ей присвоить имя каталога, то она выдает содержимое указанного каталога. Далее вводите

$ ls /usr

Это приведет к появлению длинного списка имен, среди которых есть и ваш начальный каталог

you
.

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

$ ls /

bin

boot

dev

etc

lib

tmp

unix

usr

$

(Пусть вас не смущает то, что символ

'/'
имеет два назначения одновременно: имя корневого каталога и разделитель в именах файлов.) Большую часть приведенного списка составляют имена каталогов, но
unix
на самом деле является файлом, содержащим в готовом к выполнению виде ядро системы UNIX (более подробно об этом см. в гл. 2).

Теперь попробуйте ввести

$ cat /usr/you/junk

(если файл

junk
все еще хранится в вашем каталоге). Имя
/usr/you/junk
называется путевым, или абсолютным, именем файла. Путевое имя имеет интуитивный смысл: оно представляет путь по дереву каталогов от корня к отдельному файлу. В системе UNIX есть универсальное правило: всюду, где можно использовать обычное имя файла, можно использовать и абсолютное имя.

Файловая система имеет структуру, подобную генеалогическому дереву:

Рис. 1.1: Карта файловой системы UNIX

Ваш файл с именем

junk
никак не связан с файлами пользователей
paul
или
mary
.

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

junk
с помощью команды

$ cat /usr/you/junk

Соответственно вы можете выяснить, какие файлы есть у

mary
:

$ ls /usr/mary

data

junk

$

или скопировать один из ее файлов:

$ cp /usr/mary/data data

Вы можете редактировать ее файл:

$ ed /usr/mary/data

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

ls -l
.) В нашей системе большинство пользователей, как правило, считают, что открытая система более полезна, чем защищенная, но ваша политика может быть иной; мы вернемся к этому вопросу в гл. 2.

Завершая серию экспериментов с абсолютными именами, попробуйте ввести

$ ls /bin /usr/bin

Не кажутся ли имена вам знакомыми? Когда вы запускаете команду, задавая ее после приглашения, система ищет файл с указанным именем. Вначале поиск ведется в вашем рабочем каталоге (где его, вероятно, найти не удается), затем в каталоге

/bin
и, наконец, в
/usr/bin
. Нет ничего особенного в командах, подобных
cat
или
ls
, за исключением того, что для удобства поиска и управления они находятся в нескольких каталогах. Чтобы убедиться в этом, попытайтесь выполнить некоторые из них, используя абсолютные имена:

$ /bin/date

Mon Sep 26 23:39:32 EDT 1983

$ /bin/who

srm tty1 Sep 26 22:20

cvw tty4 Sep 26 22:40

you tty5 Sep 26 23:04

$

Упражнение 1.3

Попробуйте выполнить команду

$ ls /usr/games

а затем что-либо из предложенного ею. Большее удовольствие это доставит вам в нерабочее время.

Поделиться с друзьями: