Работа с файлами и каталогами

Автор: Пользователь скрыл имя, 21 Февраля 2013 в 20:34, доклад

Описание работы

Файловая система – это часть операционной системы, назначение которой состоит в том, чтобы организовать эффективную работу с данными, хранящимися во внешней памяти, и обеспечить пользователю удобный интерфейс при работе с такими данными.
Под файлами понимается логически связанная совокупность данных, ассоциированная с носителем информации и внешним устройством. Файл является абстрактным понятием, и его свойства не зависят от носителя информации.

Работа содержит 1 файл

Работа с файлами и каталогами.docx

— 76.22 Кб (Скачать)

 

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 используются сокращения: &> файл или, что то же самое, >& файл.

 

Перенаправление в никуда

Иногда заведомо известно, что какие-то данные, выведенные программой, не понадобятся. Например, предупреждения со стандартного вывода ошибок. В этом случае можно перенаправить стандартный  вывод ошибок в файл устройства, специально предназначенный для  уничтожения данных – /dev/null. Это устройство называется пустым или «мусорной корзиной». Все, что записывается в этот файл, будет просто  проигнорировано:

 

cat info >info_file 2> /dev/null

 

Точно таким же образом можно  избавиться и от стандартного вывода, отправив его в /dev/null.

 

Конвейер 

Нередко возникают ситуации, когда нужно обработать вывод  одной программы какой-то другой программой. Пользуясь перенаправлением ввода-вывода, можно сохранить вывод  одной программы в файле, а  потом направить этот файл на ввод другой программе. Однако то же самое  можно сделать и более эффективно: перенаправлять вывод можно не только в файл, но и непосредственно на стандартный ввод другой программе. В этом случае вместо двух команд потребуется только одна – программы передают друг другу данные «из рук в руки». В Unix такой способ передачи данных называется конвейером.

Для перенаправления стандартного вывода на стандартный ввод другой программе служит символ «|». Самый простой и наиболее распространенный случай, когда требуется использовать конвейер, возникает, если вывод программы не умещается на экране монитора и очень быстро «пролетает» перед глазами, так что человек не успевает его прочитать. В этом случае можно направить вывод в программу просмотра less, которая позволит не торопясь пролистать весь текст, вернуться к началу и т. п.:

 

cat employers.txt | less

 

Можно последовательно обработать данные несколькими разными программами, перенаправляя вывод на ввод следующей программе и организуя сколь угодно длинный конвейер для обработки данных. В результате получаются очень длинные командные строки вида cmd1 | cmd2 | ... | cmdN, которые могут показаться громоздкими и неудобными, но оказываются очень полезными и эффективными при обработке большого количества информации, как мы увидим позже при рассмотрении фильтров.

Организация конвейера устроена по той же схеме, что и перенаправление  в файл, но с использованием особого  объекта системы – канала. Если файл можно представить в виде коробки с данными, снабженной клапаном для чтения или клапаном для записи, то канал – это оба клапана, приклеенные друг к другу вообще без коробки. Для определенности между клапанами можно представить трубу, немедленно доставляющую данные от входа к выходу (английский термин 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

выводит только длину самой длинной  строки


 

По умолчанию команда вызывается с флагами -clw.

Примеры:

 

wc mytext

выводит количество символов, строк  и слов в файле mytext

wc -lL ~/texts/mytext

выводит количество строк и длину  самой длинной строки файла ~/texts/mytext

Информация о работе Работа с файлами и каталогами