лекция3

advertisement
Операционная система
Linux
Лекция №3
Текстовые файлы и потоки
●
●
Процесс взаимодействия с пользователем
выполняется в терминах записи и чтения в файл.
То есть вывод на экран представляется как запись
в файл, а ввод — как чтение файла. Файл, из
которого осуществляется чтение, называется
стандартным потоком ввода, а в который
осуществляется запись — стандартным потоком
вывода.
Стандартные потоки привязаны к файловым
дескрипторам с номерами 0, 1 и 2.
●
Стандартный поток ввода (stdin) — 0;
●
Стандартный поток вывода (stdout) — 1;
●
Стандартный поток ошибок (stderr) — 2.
2
3
Каналы
●
Стандартные потоки можно перенаправлять не только в
файлы, но и на вход других программ. Если поток вывода
одной программы соединить с потоком ввода другой
программы, получится конструкция, называемая каналом,
конвейером или пайпом (от англ. pipe, труба).
4
Программы фильтры
●
В UNIX/Linux существует целый класс команд, которые принимают данные
со стандартного потока ввода, каким-то образом обрабатывают их, и выдают
результат на стандартный поток вывода. Такие программы называются
программами-фильтрами.
man, - -help - информация!
●
●
●
●
●
●
●
cat, head, tail — см. первую лекцию
cut — вырезает столбец (по символам или полям) из потока ввода и
передаёт на поток вывода.
sort — отсортировать данные в соответствии с какими-либо критериями,
например, арифметически по второму столбцу.
uniq — удалить повторяющиеся строки. Или (с ключом -с) не просто удалить,
а написать сколько таких строк было.
bc — вычислить каждую отдельную строку потока и записать вместо неё
результат вычисления.
strings — вычленить и показать в стандартном потоке (или файле) то, что
напоминает строки.
5
wc — считает количество символов, слов и строк в файле или стандартном
потоке ввода
●
●
●
●
●
●
du -s /home/student/* | sort -nr | head -1
Вывести название и размер пользовательского каталога,
занимающего наибольшее место на диске.
Программа du, при вызове ее с ключом -s, сообщает суммарный
объем каждого каталога или файла, перечисленного в ее параметрах.
Ключ -n команды sort означает, что сортировка должна быть
арифметической, т.е. строки должны рассматриваться как числа, а не
как последовательности символов (Например, 12>5 в то время как
строка '12'<'5' т.к. сравнение строк производится посимвольно и
'1'<'5'). Ключ -r означает изменения порядка сортировки — с
возрастающего на убывающий.
Команда head выводит несколько первых строк поступающего на ее
вход потока, отбрасывая все остальные. Ключ -1 означает, что надо
вывести только одну строку.
Таким образом, список пользовательских каталогов с их суммарным
объемом арифметически сортируется по убыванию, и из полученного
списка берется первая строка, т.е. строка с наибольшим числом,
соответствующая самому объемному каталогу.
6
Поиск файлов - команда find
find опции места_поиска критерии модификаторы
●
●
●
места_поиска - каталоги, в которых будет идти поиск,
поиск рекурсивный (включает подкаталоги). По
умолчанию поиск производится в текущем каталоге.
критерии - любые атрибуты файла (имя, размер, тип,
владелец, права доступа и т.д.). Но find не обеспечивает
поиска по содержимому.
опции и модификаторы - как искать и выводить
информацию
7
Критерии поиска команды find
●
-name по имени файла или по шаблону
●
-type
по типу файла
●
-size
по размеру или диапозону размеров
●
-empty пустые файлы и каталоги
●
-mtime по дате модификации
●
-perm по правам доступа
●
-user и -group
Пример
по принадлежности
Точка . указывает на текущий каталог
[student@debian ~]$ find . -name “copy*”
./copy2.txt
●
Если в критерии используется шаблон подстановки, то его
8
надо заключать в двойные кавычки “”
Поиск по типу
●
Для поиска по типу надо задавать критерий -type тип, где тип идин из:
●
b
файл блочного устройства
●
c
файл символьного устройства
●
d
каталог
●
f
обычный файл
●
p
именованный канал
●
s
сокет
●
l
символическая ссылка
Пример
Поиск по типу и имени
[student@debian ~]$ find -type d -name "t*"
./test1
./test2
●
Если критерии поиска надо объединить по логическому условию ИЛИ, то
используется -о
Пример
Имя начинается с t или пустые
[student@debian ~]$ find -name "t*" -o -empty
9
Специальные типы файлов
●
●
В ОС Linux файл представляет собой просто поток байтов.
Такой подход позволяет распространить концепцию файла
на физические устройства и некоторые другие объекты.
Это позволяет упростить организацию данных и обмен
ими, потому что аналогичным образом осуществляется
запись данных в файл, передача их на физические
устройства и обмен данными между процессами. Во всех
этих случаях используется один и тот же подход,
основанный на идее байтового потока.
Поэтому наряду с обычными файлами и каталогами,
файлами с точки зрения Linux являются также:
●
файлы физических устройств (блочные и символьные);
●
именованные каналы (named pipes);
●
гнезда (sockets);
●
символические ссылки (symlinks).
10
Файлы физических устройств
●
●
●
●
●
В ОС Linux все подключаемые к компьютеру устройства (жесткие и съемные
диски, терминал, принтер, модем и т. д.), представляются файлами. Если,
например, надо вывести на экран какую-то информацию, то система
производит запись в файл /dev/tty01.
Физические устройства бывают двух типов: символьными (или байториентированными) и блочными (или блок-ориентированными). Различие
между ними состоит в том, как производится считывание и запись
информации в эти устройства.
Взаимодействие с символьными устройствами производится посимвольно,
в режиме потока байтов. К таким устройствам относятся, например,
терминалы.
На блок-ориентированных устройствах информация записывается (и,
соответственно, считывается) блоками. Примером устройств этого типа
являются жесткие диски. На диск невозможно записать или считать с него
один байт: обмен с диском производится только блоками.
Файл устройства - это не драйвер устройства. Это специальный механизм,
при помощи которого программы могут общаться с драйверами устройств.
Находятся в каталоге /dev, подробная иноформация ls -l /dev
11
Примеры специальных файлов
/dev/console Системная консоль, т. е. монитор и клавиатура, физически
подключенные к компьютеру
/dev/hd Жесткие диски с IDE-интерфейсом. Устройство /dev/hda1 соответствует
первому разделу на первом жестком диске (/dev/hda), т. е. на диске,
подключенном как Primary Master
/dev/sd
Жесткие диски с SCSI-интерфейсом
/dev/tty Файлы поддержки пользовательских консолей. Название сохранилось с
тех пор, когда к системе UNIX подключались телетайпы в качестве терминалов. В
Linux эти файлы устройств обеспечивают работу виртуальных консолей
(переключаться между которыми можно с помощью <Alt>+<F1> — <Alt>+<F6>)
/dev/pty Файлы поддержки псевдо-терминалов. Применяются для удаленных
рабочих сессий с использованием telnet
/dev/ttyS Файлы, обеспечивающие работу с последовательными портами.
/dev/ttyS0 соответствует COM1 в MS-DOS, /dev/ttyS1 — COM2. Если ваша мышь
подключается через последовательный порт, то /dev/mouse является
символической ссылкой на соответствующий /dev/ttySN
/dev/null Нулевое устройство. Все, что записывается в /dev/null, навсегда
потеряно. На это устройство можно перенаправить вывод ненужных сообщений.
Если /dev/null используется как устройство ввода, то оно ведет себя как файл
нулевой длины
12
Именнованные каналы
●
●
Еще один тип специальных файлов — именованные каналы, или
буферы FIFO (First In — First Out). Файлы этого типа служат в
основном для того, чтобы организовать обмен данными между
разными приложениями.
Канал — это очень удобное и широко применяемое средство
обмена информацией между процессами. Все, что один процесс
помещает в канал, другой может оттуда прочитать. Если два
процесса, обменивающиеся информацией, порождены одним и
тем же родительским процессом (а так чаще всего и происходит),
канал может быть неименованным. В противном случае
требуется создать именованный канал, что можно сделать с
помощью программы mkfifo. При этом собственно файл
именованного канала участвует только в инициации обмена
данными.
13
Доменные гнезда (sockets)
●
●
Гнезда — это соединения между процессами, которые
позволяют им взаимодействовать, не подвергаясь влиянию
других процессов. Вообще гнезда (и взаимодействие программ
при помощи гнезд) играют очень важную роль во всех Unixсистемах, включая и Linux: они являются ключевым понятием
TCP/IP и соответственно на них целиком строится Интернет.
Однако с точки зрения файловой системы гнезда практически
неотличимы от именованных каналов: это просто метки,
позволяющие связать несколько программ. После того как связь
установлена, общение программ происходит без участия файла
гнезда: данные передаются ядром ОС непосредственно от
одной программы к другой.
Несмотря на то, что другие процессы могут видеть файлы гнезд
как элементы каталога, процессы, не участвующие в данном
конкретном соединении, не могут осуществлять над файлами
гнезд операции чтения/записи. Среди стандартных средств,
использующих гнезда — система X Window, система печати и 14
система syslog.
Действия над файлами,
найденными командой find
●
-exec <команда> \;
Выполнить команду. Обратите внимание, что после команды
ставится обратный слеш и точка с запятой.
●
-ok <команда> \;
То же самое, что и exec, но перед обработкой очередного
файла будет выводится запрос на выполнение команды.
●
-print
Вывод имени файла на экран (действие по умолчанию).
●
-ls
Выполнение команды ls -dils над текущим файлом.
В выполняемых командах можно использовать параметр {} в
качестве аргумента, который заменяется путем к текущему 15
найденному файлу.
●
Примеры
find ~ -name “file*” -print
Выведет на экран список файлов домашнего
каталога, начинающихся на file, знак ~ указывает
на домашний каталог пользователя, двойные
кавычки закрывают шаблон от интерпретации
Аргументы,
оболочкой.
●
●
●
find . -size +50k -size -100k -ls
которые ожидает
команда rm
Найти файлы текущего каталога с размерами от
5 до 100кБ, вывести информацию о них
find /home/student -type l -exec rm -i {} \;
Найти все символические ссылки ниже
указанного каталога (/home/student) и удалить16их
с подтверждением (y -да, n - нет).
Команда xargs
●
Команда xargs использует данные, передаваемые ей
из стандартного потока ввода в качестве аргументов
для конструирования команды.
●
find . -type f -name “file*” -exec ls -li {} \;
●
find . -type f -name “file*” | xargs ls -li
●
Обе эти команды делают одно и то же - ищут файлы,
подходящие под шаблон имени (в двойных кавычках)
и выводят расширенную информацию по ним,
включая номер i-node. В первом случае обработка
найденных файлов производится командой find,
которая вызывает команду ls. Во втором случае
имена найденных файлов отправляются через
конвейер команде ls.
17
Команда tar
●
tar предназначена для архивации групп файлов и каталогов. Эта команда
позволяет объединять группу файлов и каталогов со всеми атрибутами в
единый файл, который имеет расширение «.tar».
tar [-c | -x] [-z | -j] -f имя_tar_файла имена_файлов_и_каталогов
●
●
●
●
●
●
Опция -c соответствует созданию архива, -x — разворачивание архива.
Созданный архив можно также сжать с помощью архиваторов gzip или bzip2.
Для этого применяются соответственно опции -z и -j. Здесь хорошо видна
разница между понятием «архивирование», которое выполняет команда tar,
и «сжатием», которое производят специализированные программы.
Имя архива, который создаётся или разворачивается передаётся после
параметра -f.
Опция -t – просмотр содержимого архива.
Создание архива etc.tar.gz (расширения архива .tar.gz надо указывать самим)
каталога /etc с использованием сжатия gzip:
tar -czf etc.tar.gz /etc
Разворачивание архива etc.tar. gz в текущий каталог с использованием
разсжатия gzip :
tar -xzf etc.tar.gz
18
Задание на практику
●
●
●
Выполнить команды, набранные жирным шрифтом
Вывести название и размер трех подкаталогов каталога
/lib, занимающих наименьшее место на диске.
Найти файлы каталога /dev, которые являются файлами
блочных устройств, символьных устройств,
именованными каналами, сокетами. Для них
●
●
●
●
вывести на экран подробную информацию;
подсчитать их количество с помощью передачи по
конвейеру программе wc.
Подсчитать количество сокетов в каталоге /tmp.
Найти все файлы своего домашнего каталога, которые
были модифицированы на прошлом занятии. Создать из
них сжатый gzip архив (использовать xargs).
19
Download