Шрифт:
Интервал:
Закладка:
Вместо размера файла команда ls выдает два числа. Это так называемые старший и младший номера устройства. Старший номер несет информацию о драйвере, к которому относится данный файл, а младший номер указывает, к какому именно из однотипных устройств следует обращаться.
Жесткие и символические ссылкиЖесткая ссылка является просто другим именем для исходного файла. После создания такой ссылки ее невозможно отличить от исходного имени файла. «Настоящего» имени у файла нет, точнее, все такие имена будут настоящими. Команда ls показывает количество именно таких жестких ссылок. Удаление файла по любому из его имен уменьшает на единицу количество ссылок, и окончательно файл будет удален только тогда, когда это количество станет равным нулю. Поэтому удобно использовать жесткие ссылки для того, чтобы предотвратить случайное удаление важного файла.
Создадим жесткую ссылку на файл README и посмотрим, что изменилось в его свойствах:
$ln /home/den/README /home/den/readme_too
$ls -l /home/den/README
-rwxr-xr-- 2 den users 0 Feb 14 19:08 /home/den/README
Жесткую ссылку можно создавать в любом каталоге, но обязательно на том же физическом носителе (то есть в той же файловой системе), что и исходный файл. О причине этого будет сказано в п. 2.2.1.
Другой тип ссылок представляют собой символические ссылки. По назначению они аналогичны ярлыкам в ОС Windows: указывают на файл, расположенный где угодно (например, на съемном носителе), и после удаления такого файла или размонтирования съемного носителя становятся бесполезны.
Символическая ссылка создается той же командой ln с ключом -s:
$ln -s /home/den/README /home/den/do.not.readme
$ls -l /home/den/do.not.readme
lrwxrwxrwx 1 den users 16 Feb 14 19:17 /home/den/do.not.readme -> /home/den/README
В поле имени файла после стрелки указано его настоящее имя. Права доступа у всех символических ссылок одинаковы и не значат ничего: возможность доступа к файлу определяется правами исходного файла. Заметьте, что в отличие от файла-оригинала файл-ссылка имеет ненулевую длину: в нем хранится абсолютное имя исходного файла. Попытайтесь вывести файл-ссылку на экран с помощью команды cat, и вы увидите содержание исходного, пустого, файла:
$ cat /home/den/do.not.readme
$
Значение самой ссылки, то есть имя файла, на который она ссылается, можно узнать с помощью команды readlink.
Символические ссылки на каталог создаются и выглядят точно так же, как символические ссылки на обычный файл. Можно создать и цепочку ссылок на ссылки: ядро ОС проследует по всей цепочке и в итоге подставит вместо ссылки имя исходного файла.
Можно даже закольцевать такую цепочку:
$ touch a1
$ ln -s a1 a2; rm a1
$ ln -s a2 a1
$ ls -l a? # это шаблон имени. Ему соответствуют все имена из двух букв, первая «а»
a1 -> a2
a2 -> a1
$ cat a1
cat: a1: Too many levels of symbolic links
Практический смысл этого упражнения — убедить вас в том, что Linux корректно справляется с разрешением ссылок даже в намеренно некорректной ситуации.
Символическая ссылка на каталог может участвовать в образовании полного имени файла, но есть одна тонкость: по ссылке нельзя проследовать обратно в направлении корня дерева каталогов. Вместо псевдоподкаталога «..» подставляется родительский каталог каталога-оригинала. Так, если в домашнем каталоге пользователя ivan есть ссылка на домашний каталог пользователя den, то путь /home/ivan/link_to_den_home/.. эквивалентен не /home/ivan, a /home/den/.., то есть /home.
Именованные каналыЭтот тип файла еще называется буфером FIFO (First In — First Out). Через файлы такого типа два независимых процесса (две работающих программы) могут обмениваться данными: все, что записано в файл одним процессом, может быть прочитано оттуда другим. Именованный канал создается командой mkfifo.
ГнездаМеханизм гнезд (сокетов, sockets) впервые появился в версии 4.3 BSD UNIX (ветвь UNIX, начавшая развиваться в калифорнийском университете Беркли). Позже он превратился в одну из самых популярных систем сетевого обмена сообщениями, реализованную во многих, не только UNIX-подобных, операционных системах. В честь создателей этот механизм до сих пор называют Berkeley Sockets.
Собственно гнездо — это абстрактная конечная точка сетевого соединения. Процесс отправляет данные в сеть, записывая их в файл гнезда. При этом процессы, установившие связь через пару гнезд, могут быть запущены как на разных компьютерах, так и на одном.
Межпроцессный обмен через гнезда используется такими стандартными компонентами Linux, как служба учета syslog и оконная система X Window.
2.1.4. Команды работы с файлами и каталогами
Предварительно замечу, что командой в ОС Linux называется все, что может быть выполнено: исполняемый файл, встроенная команда текущей программы и даже формируемая на ходу последовательность символов. Синтаксис обычной команды:
имя_команды [короткие_ключи] [длинные_ключи] [аргументы]
где в квадратные скобки взяты необязательные данные. Ключи можно указывать в любом порядке, разделяя их пробелами. Аргументы тоже отделяются друг от друга пробелами.
Имена коротких ключей, или опций, состоят из одной буквы, перед которой стоит символ «-» (дефис). У ключа может быть свой аргумент. Короткие ключи, у которых нет аргументов, можно соединять под одним дефисом: так, команда ls -l -a -d эквивалентна команде ls -lad.
Имена длинных ключей — это осмысленные слова, перед которыми стоят два символа «-» (дефис). Большинство команд понимают ключи --help и --usage, требующие вывести краткую справку об использовании команды. Необязательный ключ «--» сигнализирует об окончании списка ключей и начале аргументов.
Справку о ключах и аргументах команды можно получить по команде man.
Текущий каталогТекущий каталог — это каталог, от которого отсчитываются относительные пути. В каждый момент времени с каждой работающей программой, в том числе с командной оболочкой, связан единственный такой каталог. Узнать, какой каталог сейчас является текущим, можно с помощью команды pwd без аргументов.
Сменить текущий каталог можно командой
cd [новый_каталог]
Для смены текущего каталога на домашний каталог пользователя можно вместо имени нового каталога указать специальный символ ~: cd ~.Разрешается переходить также в псевдоподкаталоги «.» и «..». В первом случае ничего не изменится, а во втором текущим каталогом станет родительский.
Просмотр содержимого каталогаУже знакомая команда ls [имя_каталога] выводит его содержимое на экран. Если не указывать имя каталога, команда выведет содержание текущего каталога.
Вместо имени каталога можно указать шаблон имен файлов: например, ls my* покажет все файлы и подкаталоги, имена которых начинаются с «my».
Подробнее об аргументах и ключах команды ls (как, впрочем, и любой другой команды) можно узнать у справочной системы, набрав команду man ls.
Создание и удаление файлаСоздать пустой файл можно командой
touch <имя_файла>
Вообще-то она предназначена для того, чтобы для всех заинтересованных программ (например, утилиты сборки проекта make) файл выглядел новее, чем на самом деле: она меняет время последнего изменения файла на текущее время. Но если файла с таким именем не существует, то она его создаст.
Текстовые файлы можно создавать, вводя текст с консоли:
$ cat > hello.world
Привет!
Оказывается, команду cat можно заставить не только выводить файл на консоль, но и вводить с нее. Это достигается перенаправлением ввода-вывода, о котором подробнее будет сказано в главе 8. В таком режиме команда cat считает своими входными данными поток байтов, поступающий с клавиатуры, и выводит его в указанный файл. Иными словами, в файл записывается все, что вы после этой команды введете с клавиатуры. Чтобы закончить ввод, нажмите Ctrl+D.
Если файл с указанным именем существует, то команда cat перепишет его. Чтобы вместо этого добавить данные в конец файла, перенаправьте ее вывод с помощью символов >>:
$ cat >> hello.world
Каталог создается командой
mkdir <имя_каталога>
Чтобы операция создания файла или подкаталога прошла успешно, вы должны иметь право записи в каталог, в котором вы его создаете.
Удалить пустой каталог можно командой
rmdir <имя_каталога>
Удаляется файл командой
rm <имя_файла>
При этом наличие прав на запись и даже чтение этого файла не требуется: достаточно иметь право на запись в каталог, где находится этот файл. Ключи команды rm:
- Операционная система UNIX - Андрей Робачевский - Программное обеспечение
- Разработка приложений в среде Linux. Второе издание - Майкл Джонсон - Программное обеспечение
- Искусство программирования для Unix - Эрик Реймонд - Программное обеспечение
- Linux - Алексей Стахнов - Программное обеспечение
- Fedora 8 Руководство пользователя - Денис Колисниченко - Программное обеспечение
- Недокументированные и малоизвестные возможности Windows XP - Роман Клименко - Программное обеспечение
- Изучаем Windows Vista. Начали! - Дмитрий Донцов - Программное обеспечение
- Windows Vista - Виталий Леонтьев - Программное обеспечение
- Архитектура операционной системы UNIX - Морис Бах - Программное обеспечение
- Windows Vista. Трюки и эффекты - Юрий Зозуля - Программное обеспечение