Автор: Пользователь скрыл имя, 21 Февраля 2013 в 20:34, доклад
Файловая система – это часть операционной системы, назначение которой состоит в том, чтобы организовать эффективную работу с данными, хранящимися во внешней памяти, и обеспечить пользователю удобный интерфейс при работе с такими данными.
Под файлами понимается логически связанная совокупность данных, ассоциированная с носителем информации и внешним устройством. Файл является абстрактным понятием, и его свойства не зависят от носителя информации.
2. Команда less имя_файла/список_имен_файлов осуществляет вывод содержимого одного или нескольких указанных файлов на экран и позволяет просматривать его в обоих направлениях. Возврат на предыдущую страницу выполняется после нажатия клавиши [b].
3. Команда cat имя_файла/список_имен_файлов осуществляет конкатенацию (объединение) содержимого указанных файлов и вывод его на экран. Ее можно применять для просмотра содержимого небольших файлов. При попытке просмотра больших файлов, а тем более объединения их содержимое быстро промелькнет на экране. Поэтому для просмотра больших файлов лучше пользоваться командами less и more.
Некоторые флаги команды cat :
-b, --number-nonblank |
при выводе содержимого файлов нумерует все непустые строки, начиная с 1 |
-n, --number |
при выводе содержимого файлов нумерует все строки, начиная с 1 |
-s, --squeeze-blank |
заменяет последовательность пустых строк одной пустой строкой |
Ввод и вывод
Любая программа – это автомат, предназначенный для обработки данных: получая на входе одну информацию, они в результате работы выдают другую. Хотя входящая и/или выходящая информация может быть и нулевой, т. е. попросту отсутствовать. Те данные, которые передаются программе для обработки – это ее ввод, то, что она выдает в результате работы – вывод. Организация ввода и вывода для каждой программы – это задача ОС.
Для того чтобы записать данные в файл или прочитать их оттуда, процессу необходимо сначала открыть этот файл (при открытии на запись, возможно, придется предварительно создать его). При этом процесс получает дескриптор (описатель) открытого файла – уникальное для этого процесса число, которое он и будет использовать во всех операциях записи. Первый открытый файл получит дескриптор 0, второй – 1 и так далее. Закончив работу с файлом, процесс закрывает его, при этом дескриптор освобождается и может быть использован повторно. Если процесс завершается, не закрыв файлы, за него это делает система. Строго говоря, только в операции открытия дескриптора указывается, какой именно файл будет задействован. В качестве «файла» используются и обычные файлы, и файлы устройств (чаще всего – терминалы), и каналы, описанные далее. Дальнейшие операции – чтение, запись и закрытие – работают с дескриптором, как с потоком данных, а куда именно ведет этот поток, неважно.
Каждый процесс Unix получает при старте три «файла», открытых для него системой.
Первый из них (с дескриптором 0) открыт на чтение, это стандартный ввод процесса. Именно со стандартным вводом работают все операции чтения, если в них не указан дескриптор файла.
Второй «файл» (с дескриптором 1) открыт на запись, это стандартный вывод процесса. С ним работают все операции записи, если дескриптор файла не указан в них явно.
Наконец, третий поток данных (с дескриптором 2) предназначается для вывода диагностических сообщений, он называется стандартный вывод ошибок.
Поскольку эти три дескриптора уже открыты к моменту запуска процесса, первый файл, открытый самим процессом, будет, скорее всего, иметь дескриптор 3.
Стандартный вывод (standard output, STDOUT) – это поток данных, открываемый системой для каждого процесса в момент его запуска и предназначенный для данных, выводимых процессом.
Стандартный ввод (standard input, STDIN) – это поток данных, открываемый системой для каждого процесса в момент его запуска и предназначенный для ввода данных.
Стандартный вывод ошибок (standard error, STDERR) – это поток данных, открываемый системой для каждого процесса в момент его запуска и предназначенный для диагностических сообщений, выводимых процессом.
Перенаправление ввода и вывода
В Unix стандартный ввод осуществляется с клавиатуры, стандартный вывод направлен на терминал, на него же направлен и стандартный вывод ошибок. Вместо этого можно путем переназначения записать выходную информацию любой команды в файл, ввод команде передать также из файла, и ошибки также можно записать в файл. Для этого существуют специальные операторы перенаправления ввода и вывода:
> файл |
Перенаправление вывода. Поместить выходную информацию в файл, а не посылать ее на экран. То, что находилось в файле раньше, будет уничтожено. |
>> файл |
Перенаправление вывода. Дописать выходную информацию в файл следом за его содержимым. |
< файл |
Перенаправление ввода. Взять входную информацию из файла, а не с клавиатуры. |
Примеры:
1s -l >> filelist |
список файлов текущего каталога дописать в файл filelist |
cat f1 f2 f3 > f4 |
содержимое файлов f1, f2 и f3 поместить в файл f4 |
> textfile |
создание файла textfile |
sort < mylist.txt |
сортировка файла mylist.txt (если вызвать команду sort без параметра, она будет читать строки со стандартного ввода) |
Перенаправление вывода ошибок
Использование стандартного вывода ошибок наряду со стандартным выводом позволяет отделить собственно результат работы программы от разнообразной сопровождающей информации, например, направив их в разные файлы. Стандартный вывод ошибок может быть перенаправлен так же, как и стандартный ввод/вывод, для этого используется комбинация символов «2>» или «2>>» . Например, при выполнении команды
cat info 2>>cat.err
в случае, если файл info не существует, ошибка не будет выдана на экран, а допишется в файл cat.err.
Иногда, однако, требуется объединить стандартный вывод и стандартный вывод ошибок в одном файле, а не разделять их. В командной оболочке bash для этого имеется специальная последовательность «2>&1». Это означает «направить стандартный вывод ошибок туда же, куда и стандартный вывод»:
cat info >info_file 2>>&1
В данном примере сначала указано, куда перенаправить стандартный вывод (>info_file) и только потом указано направить туда же стандартный вывод ошибок (2>>&1). Если бы было указано перенаправление потока ошибок перед перенаправлением вывода (2>&1 > info_file), в файл попал бы только стандартный вывод, а диагностические сообщения появились бы на терминале. Однако логика здесь железная: на момент выполнения операции 2>&1 стандартный вывод был связан с терминалом, значит, после ее выполнения стандартный вывод ошибок тоже будет связан с терминалом. А последующее перенаправление стандартного вывода в файл, конечно, никак не отразится на стандартном выводе ошибок. Номер в конструкции &номер – это номер открытого дескриптора. Чтобы не набирать громоздкую конструкцию > файл 2>&1 в bash используются сокращения: &> файл или, что то же самое, >& файл.
Перенаправление в никуда
Иногда заведомо известно,
что какие-то данные, выведенные программой,
не понадобятся. Например, предупреждения
со стандартного вывода ошибок. В этом
случае можно перенаправить
cat info >info_file 2> /dev/null
Точно таким же образом можно избавиться и от стандартного вывода, отправив его в /dev/null.
Конвейер
Нередко возникают ситуации,
когда нужно обработать вывод
одной программы какой-то другой
программой. Пользуясь перенаправлением
ввода-вывода, можно сохранить вывод
одной программы в файле, а
потом направить этот файл на ввод
другой программе. Однако то же самое
можно сделать и более
Для перенаправления стандартного вывода на стандартный ввод другой программе служит символ «|». Самый простой и наиболее распространенный случай, когда требуется использовать конвейер, возникает, если вывод программы не умещается на экране монитора и очень быстро «пролетает» перед глазами, так что человек не успевает его прочитать. В этом случае можно направить вывод в программу просмотра less, которая позволит не торопясь пролистать весь текст, вернуться к началу и т. п.:
cat employers.txt | less
Можно последовательно обработать
данные несколькими разными
Организация конвейера устроена по той же схеме, что и перенаправление в файл, но с использованием особого объекта системы – канала. Если файл можно представить в виде коробки с данными, снабженной клапаном для чтения или клапаном для записи, то канал – это оба клапана, приклеенные друг к другу вообще без коробки. Для определенности между клапанами можно представить трубу, немедленно доставляющую данные от входа к выходу (английский термин pipe основан как раз на этом представлении, а в роли трубы выступает, конечно же, сама ОС Unix). Каналом пользуются сразу два процесса: один пишет туда, другой читает. Связывая две команды конвейером, командная оболочка открывает канал (заводится два дескриптора – входной и выходной), подменяет по уже описанному алгоритму стандартный вывод первого процесса на входной дескриптор канала, а стандартный ввод второго процесса – на выходной дескриптор канала. После чего остается запустить по команде в этих процессах, и стандартный вывод первой попадет на стандартный ввод второй. Таким образом, канал – это неделимая пара дескрипторов (входной и выходной), связанных друг с другом таким образом, что данные, записанные во входной дескриптор, будут немедленно доступны на чтение с выходного дескриптора.
Некоторые полезные команды
echo – выводит на стандартный вывод указанную строку символов и осуществляет перевод строки. Например:
echo My name is John |
выводит текст My name is John на экран |
echo My name is John > f |
выводит текст My name is John в файл f |
date – вызванная без параметров, выводит текущую дату/время.
who – вызванная без параметров, выводит информацию о пользователях, в данный момент зарегистрировавшихся в системе (по столбцам: имя пользователя, терминал, время регистрации, имя удаленного компьютера).
users – вызванная без параметров, выводит информацию о пользователях, в данный момент зарегистрировавшихся в системе (только их имена в строку).
hostname – вызванная без параметров, выводит информацию об имени текущего сетевого узла
uname - выводит информацию о компьютере и запущенной операционной системе. Флаги:
-a, --all |
выводит подробную информацию в виде следующих столбцов: SYSNAME – имя ОС NODENAME – имя узла RELEASE – релиз ОС OSVERSION – версия ОС, включая дату выпуска MACHINE – сведения о компьютере |
-m, --machine |
выводит тип компьютера |
-n, --nodename |
выводит имя сетевого узла |
-p, --processor |
выводит тип процессора данного компьютера |
-r, --release |
выводит релиз ОС |
-s, --sysname |
выводит наименование ОС |
-v |
выводит версию ОС |
wc – (от англ. word count - подсчет слов). используется для подсчета числа строк, символов и слов в указанных файлах или стандартном вводе, если имя файла не задано или вместо него стоит дефис. Если указано более одного файла, выводятся их имена и значения счетчиков, а в конце вывода выводится итоговая сумма накопленных счетчиков.
Флаги:
-c, --chars |
выводит только количество символов |
-l, --lines |
выводит только количество строк |
-w, --words |
выводит только количество слов |
-L, --max-line-length |
выводит только длину самой длинной строки |
По умолчанию команда
Примеры:
wc mytext |
выводит количество символов, строк и слов в файле mytext |
wc -lL ~/texts/mytext |
выводит количество строк и длину самой длинной строки файла ~/texts/mytext |