Linux лабораторная работа процессы

Лабораторная работа №7.Процессы в операционной системе Linux

Цель работы: Ознакомиться на практике с понятием процесса в операционной системе. Приобрести опыт и навыки управления процессами в операционной системе Linux.

План проведения занятия

1. Используя теоретические сведения изучить порядок работы с текстовым редактором Vi и создать два сценария для исследования процессов.

2. Следуя указаниям ознакомиться на практике с командами и сигналами для управления процессами: запуском, остановкой, переводом на передний план, удалением процесса и др.

3. Составить отчет.

Краткие теоретические сведения

1. Устройство Linux: ядро и процессы

Главная, постоянно находящаяся в оперативной памяти, часть ОС Linux называется ядром (Kernel). Ядро ОС обрабатывает прерывания от устройств, выполняет запросы системных процессов и пользовательских приложений, распределяет виртуальную память, создает и уничтожает процессы, обеспечивает многозадачность посредством переключения между ними, содержит драйверы устройств, обслуживает файловую систему (см. рис. 34).

Пользовательские процессы не могут непосредственно, например, порождать другие процессы, производить чтение или запись на диск, выводить данные на экран или создавать гнездо (socket) для обмена по сети. Для выполнения этих действий они должны воспользоваться сервисами ядра. Обращения за такими услугами называются системными

Рис. 34. Устройство Linux

Начальная загрузка системы состоит в том, что файл с образом ядра счи-тывается в оперативную память, начиная с нулевого адреса. Этот файл находится в каталоге /boot и называется vmlinuz-x.y.z, где x.y.z — это номер версии ядра. На текущий момент большинство дистрибутивов основано на ядре версии 2.4, хотя уже вышло ядро 2.6 и коегде еще встречается версия 2.2.

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

цели применяются многочисленные утилиты, выступающие в качестве посредников между пользователем и ядром. Только в комплекте с ними ядро образует полноценную операционную систему.

Ядро обслуживает запросы процессов. Что же такое процесс? Это понятие является базовым в UNIX-подобных системах. Процесс можно представить себе как виртуальную машину, отданную в распоряжение одной задачи. Каждый процесс считает, что он на машине один и может распоряжаться всеми ее ресурсами. На самом же деле процессы надежно изолированы друг от друга, так что крушение одного не может повредить всей системе

Каждый процесс выполняется в собственной виртуальной памяти, в которую никакой другой процесс вмешаться не может. Этим и обеспечивается устойчивость всей системы.

Напомним, что такое виртуальная память. Каждому процессу разрешено считать, что его адреса начинаются с нулевого адреса и далее наращиваются. Таким образом, в 32разрядной ОС процесс может адресовать 4 гигабайта оперативной памяти. Механизм виртуальной памяти позволяет процессу считать, что именно столько ему и выделено, хотя физически объем ОЗУ вашей машины может быть значительно меньше. Недостающую память заменяет жесткий диск путем записи временно не используемых страниц памяти в раздел подкачки (свопинга).

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

С точки зрения ядра процесс представляет собой запись в таблице процессов. Эта запись содержит сведения о состоянии процесса и данные, существующие в течение всего времени его жизни. Размер таблицы процессов позволяет запускать несколько сотен процессов одновременно. Другая важная информация о процессе — например, таблица всех открытых процессом файлов — хранится в его адресном пространстве. Запись в таблице процессов и пространство процесса вместе составляют контекст, или окружение, процесса. В него входят:

♦ PID — идентификатор процесса. Он принудительно назначается планировщиком при запуске процесса.

♦ PPID — идентификатор родительского процесса.

♦ TTY — имя управляющего терминала — терминала, с которого запущен процесс.

♦ WD — текущий каталог процесса, от которого отсчитываются относительные пути.

♦ RID, RGID — реальные ID и групповой ID пользователя, запустившего процесс.

♦ EUID, EGID — эффективные ID и GID.

♦ NICE — показатель уступчивости. Процессы выполняются в режиме разделения времени, то есть время центрального процессора делится между готовыми к выполнению процессами с учетом их приоритета. Чем выше показатель уступчивости, тем ниже приоритет.

Системные вызовы fork() и ехес() или как размножаются процессы

Каждый процесс порождается другим процессом, использующим для этого системный вызов fork(). Таким образом, структура процессов, подобно файловой системе, древовидна. Корнем этого дерева служит init — процесс инициализации системы (см. рис. 35). Он запускается ядром первым, получает идентификатор 1 и порождает еще несколько процессов (сколько и каких, можно узнать из его конфигурационного файла /etc/inittab), которые, в свою очередь, при участии пользователя порождают другие процессы.

В результате системного вызова fork() родительский процесс полностью копирует свое окружение, включая адресное пространство, в дочерний, так что в момент

рождения дочерний процесс отличается только своим ID. Потом дочерний процесс с помощью вызова ехec() загружает в свое адресное пространство какой-нибудь исполняемый файл и начинает исполнять содержащуюся в нем программу.

Каждый процесс, завершившись, возвращает родительскому процессу какое-то значение, называемое кодом завершения или кодом возврата. По соглашению разработчиков, нулевой код возврата означает успешное завершение, а ненулевые — разнообразные ошибки. Процесс-родитель может приостановить свое выполнение до завершения потомка и выполнить разные действия в зависимости от возвращенного дочерним процессом значения, а может и не делать этого.

Рис. 35. Иерархия процессов.

Процессы делятся на три категории:

♦ Системные . Они порождаются ядром особым образом в процессе загрузки и выполняют системные функции (например, планирование процессов или смену страниц виртуальной памяти). Выполняемая имипрограммаберетсянеизисполняемогофайла, аявляетсячастью ядра.

• Пользовательские . Как правило, они порождаются во время сеанса работы пользователя

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

• Демоны ( daemon, сокращение от Disk And Execution MONitor ). Запускаются после инициализации ядра. Выполняются в фоновом режиме, не связаны ни с одним пользователем, обеспечивают работу различных служб (например, управление сетью). Главным демоном считается init — процесс инициализации системы.

2. Сценарии в Linux. Активные и фоновые процессы

Исполняемые файлы в Linux бывают двух видов. Первый – это файлы в собственно исполняемом (executable) формате. Как правило, такие файлы – результат компиляции программ, написанных на одном из языков программирования. В Linux используется несколько форматов исполняемых файлов, состоящих из машинных кодов и служебной информации, необходимой операционной системе для запуска программы: согласно этой информации, ядро Linux выделяет для запускаемой программы оперативную память, загружает программу из файла и передает ей управление. Большинство утилит Linux – программы именно такого, «двоичного» формата.

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

Запустить сценарий на исполнение можно командой sh имя_сценария

Для того чтобы запустить процесс сценария параллельно, достаточно добавить в конец командной строки символ » & «:

Процесс, запускаемый параллельно, называется фоновым (background). Фоновые процессы не имеют возможности вводить данные с того же терминала, что и породивший их shell (только из файла), зато выводить данные на этот терминал могут (правда, когда на одном и том же терминале вперемежку появляются сообщения от нескольких фоновых процессов, начинается неразбериха). При каждом терминале в каждый момент времени может быть не больше одного активного (foreground) процесса, которому разрешено вводить данные с этого терминала. На время, пока команда работает в активном режиме, породивший ее командный интерпретатор «уходит в фон», и там, в фоне, выполняет свой wait().

Активный процесс, foreground process — процесс, имеющий возможность вводить данные с терминала. В каждый момент у каждого терминала может быть не более одного активного процесса.

Фоновый процесс, background process — процесс, не имеющий возможности вводить данные с терминала. Пользователь может запустить любое, но не превосходящее заранее заданного в системе, число фоновых процессов.

Сигналы в Linux

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

Всего в Linux 63 сигнала, обозначаемых своими номерами или символическими именами. Имена всех сигналов начинаются с SIG, и эту приставку часто опускают: так, сигнал, требующий прекратить выполнение процесса, называется SIGKILL, или KILL, или сигнал

Получив сигнал, процесс может: игнорировать его; вызвать для обработки установленную по умолчанию функцию; вызвать собственный обработчик (перехватить сигнал). Некоторые сигналы (например, KILL) перехватить или игнорировать невозможно.

Пользователь может послать сигнал процессу с идентификатором PID командой $ kill [-s ]

где — это номер или символическое имя.

Несколько часто встречающихся сигналов перечислены в таблице 1. Полный список можно получить по команде kill -l (list) .

Источник

Лабораторная работа 3

Работа в CLI ОС Linux

Теоретический материал

CLI — Command-Line Interface

Для его изучения включите терминал (Приложения > Стандартные > Терминал).

Работу ОС LINUX можно представить в виде функционирования множества взаимосвязанных процессов. При загрузке системы сначала запускается ядро (процесс 0), которое в свою очередь запускает командный интерпретатор shell (процесс 1). Взаимодействие пользователя с системой LINUX происходит в интерактивном режиме посредством командного языка. Оболочка операционной системы – shell – интерпретирует вводимые команды, запускает соответствующие программы (процессы), формирует и выводит ответные сообщения.

Shell — это интерфейс, обеспечивающий взаимодействие между ядром и пользователем. Интерфейс shell очень прост. Обычно он состоит из приглашения, по которому пользователь вводит команды и нажимает клавишу Enter . Строка, в которой вы набираете команду, называется командной строкой. Shell не только интерпретирует команды, но и создает среду, которую вы можете конфигурировать и программировать. У shell есть свой язык программирования, который позволяет писать программы, содержащие достаточно сложные последовательности команд Linux. Язык программирования shell обладает многими свойствами обычного языка программирования, в частности в нем предусмотрено использование циклов и условных переходов. Каждому пользователю системы Linux предоставляется свой собственный пользовательский интерфейс, или shell. Пользователи могут модифицировать свои shell в соответствии с конкретными потребностями. В этом смысле shell пользователя функционирует скорее как операционная среда, которой пользователь может управлять по своему усмотрению.

Файловая структура: каталоги и файлы

В операционной системе Linux все файлы организованы в каталоги, которые, в свою очередь, иерархически соединены друг с другом, образуя одну общую файловую структуру. При обращении к файлу необходимо указывать не только его имя, но и место, которое он занимает в этой файловой структуре. Можно создавать любое количество новых каталогов, добавляя их к файловой структуре. Команды работы с файлами ОС Linux могут выполнять сложные операции, например, перемещение и копирование целых каталогов вместе с их подкаталогами. Такие команды, как find , ср , mv и ln , позволяют находить файлы, копировать их и перемещать из одного каталога в другой, а также создавать ссылки.

Файлы в операционной системе Linux организованы в иерархическую систему каталогов. Каталог может содержать файлы и другие каталоги. В этом смысле каталоги выполняют две важные функции. Во-первых, в каталоге хранятся файлы, подобно папкам в ящике картотеки, а во-вторых, каталог соединяется с другими каталогами, как ветвь дерева соединяется с другими ветвями. По отношению к файлам каталоги выполняют роль ящиков картотеки, в каждом из которых хранится несколько папок. Для того чтобы взять одну из них, нужно открыть ящик. Следует отметить, однако, что, в отличие от ящиков картотеки, каталоги могут содержать не только файлы, но и другие каталоги. Именно таким образом каталог может соединяться с другим каталогом. Из-за сходства с деревом такую структуру часто называют древовидной структурой. Если быть более точным, то эта структура скорее похожа не на дерево, а на перевернутый вверх корнями куст. Ствола здесь нет, и изображается дерево перевернутым, при этом корень находится наверху. Вниз от корня отходят ветви. Каждая ветвь отходит только от одной ветви, а от нее самой может отходить множество ветвей нижнего уровня. В этом смысле данную структуру можно назвать структурой «родители-потомки». Аналогичным образом любой каталог является подкаталогом другого каталога.

Читайте также:  Hyper v поколение 2 linux

Каждый каталог может содержать множество подкаталогов, но сам должен быть потомком только одного родительского каталога. Вверху файловой системы находится корневой каталог (обозначается символом «косая черта»), от которого ответвляются другие каталоги. Каждый каталог может содержать несколько других каталогов или файлов, но родительский каталог у него всегда бывает только один.

Файловая структура ОС Linux разветвляется на несколько каталогов, начиная с корневого, / . В корневом каталоге имеется несколько системных каталогов, которые содержат файлы и программы, относящиеся к самой ОС Linux. Корневой каталог, кроме того, содержит каталог home , который может содержать домашние каталоги всех пользователей системы. Домашний каталог каждого пользователя, в свою очередь, будет включать в себя каталоги, который пользователь создает для своих нужд. Каждый из этих каталогов тоже может содержать каталоги. Все эти вложенные каталоги ответвляются от домашнего каталога пользователя.

Получить доступ к каталогу можно либо по имени, либо сделав его каталогом по умолчанию. Каждому каталогу при создании присваивается имя. Этим именем можно пользоваться для доступа к файлам, находящимся в данном каталоге. Если при проведении какой-либо операции над файлами имена каталогов не указываются, то используется каталог по умолчанию, который называют рабочим каталогом. В этом смысле рабочий каталог — это каталог, в котором вы в данный момент работаете. При регистрации в системе в качестве рабочего принимается ваш домашний каталог, имя которого обычно совпадает с вашим регистрационным именем. Рабочий каталог можно заменить с помощью команды cd . В процессе замены рабочего каталога вы переходите из одного каталога в другой. Каталог можно рассматривать как коридор, в который выходит множество дверей с табличками. Некоторые двери ведут в комнаты, а некоторые — в другие коридоры. Двери, ведущие в комнаты, — это файлы, находящиеся в каталоге, а двери, ведущие в коридоры, — это другие каталоги. Переходя из одного коридора в другой, вы меняете рабочий каталог. Проходя по нескольким коридорам, вы перемещаетесь по нескольким каталогам.

Путевые имена

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

В ОС Linux путевое имя каталога состоит из имен всех каталогов, образующих путь. Эти имена отделяются друг от друга символами «косая черта». Косая черта перед первым каталогом пути обозначает корневой каталог( / ). Путевые имена могут быть абсолютными и относительными. Абсолютное путевое имя — это полное имя файла или каталога, начинающееся символом корневого каталога. Относительное путевое имя начинается символом рабочего каталога и представляет собой обозначение пути к файлу относительно вашего рабочего каталога.

Системные каталоги

Корневой каталог, являющийся началом файловой структуры ОС Linux, содержит ряд системных каталогов. Системные каталоги содержат файлы и программы, служащие для управления системой и ее сопровождения. Многие из этих каталогов содержат подкаталоги с программами, предназначенными для выполнения конкретных задач.

  • /bin — это сокращенно от binaries (т.е. двоичные или выполняемые файлы). Здесь находится много важных системных программ. Большинство основных команд Unix находятся в этом каталоге.
  • /dev . «Файлы» в dev известны как драйверы устройств — они используются для доступа к устройствам и ресурсам системы, таким как диски, модемы, память и т.д. Например, вы можете читать данные из файла, точно также вы можете читать входные сигналы от мыши, имея доступ к /dev/mouse . Имена файлов, начинающиеся на fd — это дисководы гибких дисков. fd0 — первый дисковод, fd1 — второй. Различные /dev/ttys , /dev/cua устройства используются для доступа к последовательным портам. Например, /dev/ttys0 относится к COM1 под MS-DOS. Устройства /dev/cua относятся к «звонящим» ( callout ) устройствам, которые используются совместно с модемами. Устройства, имена которых начинаются с hd , имеют доступ к жестким дискам. /dev/hda относится ко всему первому жесткому диску, а hda1 только к первому разделу /dev/hda . Устройства с именами /dev/tty относятся к «виртуальным консолям» вашей системы (доступ путем нажатия alt-F1 , alt-F2 и т.д.). /dev/tty1 соответствует первой, /dev/tty2 соответствует второй и т.д. Устройства, чьи имена начинаются на /dev/pty , это «псевдотерминалы». Они используются для входа с удаленных «терминалов». Например, если ваша машина в сети, вход к вам по telnet будет использовать одно из устройств /dev/pty .
  • /etc — содержит файлы конфигурации системы. Например /etc/passwd (файл паролей), /etc/groups (файл групп), /etc/rc (командный файл инициализации) и т.д.
  • /sbin . В sbin находятся важные исполняемые системные файлы, используемые системным администратором.
  • /home — содержит домашние каталоги пользователей.
  • /lib — содержит образы разделяемых библиотек (shared library images). Эти файлы содержат код, который могут использовать многие программы. Вместо того, чтобы каждая программа имела свою собственную копию этих выполняемых файлов, они хранятся в одном общедоступном месте – в /lib . Это позволяет сделать выполняемые файлы меньше и сэкономит место в системе.
  • /proc — это «виртуальная файловая система» procfs , в которой файлы хранятся в памяти, а не на диске. Они связаны с различными процессами, происходящими в системе, и позволяют получить информацию о том, что делают программы и процессы в указанное время.
  • /tmp . Многие программы нуждаются в создании рабочих файлов, которые нужны короткое время. Каноническое место для этих файлов в /tmp (там обычно чаще проводится уборка мусора).

/usr — состоит из ряда подкаталогов, которые в свою очередь содержат наиболее важные и полезные программы и файлы конфигурации, используемые системой. Различные каталоги, описанные выше, необходимы для нормального функционирования системы, но большинство вещей, содержащихся в /usr необязательны для системы. Но это такие необязательные вещи, которые делают систему полезной и интересной.

  • /usr/X11R6 — содержит The X Window System, если вы ее инсталлировали.
  • /usr/bin — для различных программ UNIX. Он содержит большинство выполняемых программ, которых нет ни в каких других местах, например, в том же /bin их нет.
  • /usr/etc – также как и /etc , содержит всевозможные системные программы и конфигурационные файлы.
  • /usr/include — содержит include-файлы (header — файлы) для компилятора Си.
  • /usr/lib — содержит библиотеки -«заглушки» и «статические» библиотеки, эквивалентные файлам из /lib . При компиляции программа «связывается» с библиотеками, находящимися в /usr/lib , которые в свою очередь направляют программы обращаться в /lib , если им нужен актуальный код. Кроме того, многие другие программы хранят в /usr/lib свои конфигурационные файлы.
  • /usr/local — в большой степени похож на /usr — он содержит различные программы и файлы, несущественные для системы.
  • /usr/man — содержит страницы Руководства. Здесь два подкаталога для каждого «раздела» Руководства. (С помощью команды «man man» вы можете получить более подробную информацию). Например, /usr/man/man1 содержит исходные тексты (неотформатированный оригинал) страниц Руководства в разделе 1 и usr/man/cat1 содержит отформатированные страницы для раздела 1.
  • /usr/src — содержит исходные коды (неоткомпилированные программы) для различных программ вашей системы. Наиболее важная вещь здесь это каталог /usr/src/linux , в котором содержатся исходные коды ядра Linux.

/var — содержит каталоги, которые часто меняются в размере или имеют тенденцию быстро расти. К числу таких каталогов относятся:

  • /var/adm — содержит различные файлы, интересные системному администратору, специфические системные файлы, фиксирующие ошибки и проблемы, возникающие в системе. Другие файлы фиксируют входы в систему, как и неудачные попытки войти.
  • /var/spool — содержит файлы, которые предварительно формируются для других программ. Например, если ваша машина подключена к сети, входная почта будет помещаться в /var/spool/mail до тех пор, пока вы не прочитаете ее или не удалите. Входящие и исходящие новости помещаются в /var/spool/news и т.д.

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

Команды

Прежде чем перейти к рассмотрению конкретных команд, дадим определение команде. Пользователям, вышедшим из среды DOS , это понятие знакомо: команда — основа главных функций операционной системы. Из команд DIR , COPY или ATTRIB составляются довольно сложные процедуры, оформляемые в виде bat-файлов (командных файлов). Однако в DOS, как и в других операционных системах, количество команд ограниченно и статично — пользователь не может вводить собственные команды. В мире Unix (следовательно, и Linux) понятие команды несколько иное. Здесь команда — это любой выполняемый файл. Командой является любой файл, предназначенный для выполнения, а не для хранения данных или конфигурационных параметров. Любой выполняемый файл, записанный в систему, становится ее командой.

Коротко перечислим средства группирования команд:

  • cmd1 arg . ; cmd2 arg . ; . cmdN arg . — последовательное выполнение команд;
  • cmd1 arg . & cmd2 arg . & . cmdN arg . — асинхронное выполнение команд;
  • cmd1 arg . && cmd2 arg . — зависимость последующей команды от предыдущей таким образом, что последующая команда выполняется, если предыдущая выдала нулевое значение;
  • cmd1 arg . || cmd2 arg . — зависимость последующей команды от предыдущей таким образом, что последующая команда выполняется, если предыдущая выдала ненулевое значение.

Управление каталогами

Создание и удаление каталогов: mkdir и rmdir

Каталоги создаются и удаляются соответственно командой mkdir и командой rmdir . В том и другом случае можно использовать путевые имена каталогов. В следующем примере пользователь сначала создает каталог reports , а затем, используя абсолютное путевое имя — каталог letters . (Здесь и далее символ $ означает приглашение ко вводу и не относится к командам).

Для удаления каталога нужно дать команду rmdir с именем этого каталога. В приведенном ниже примере пользователь сперва удаляет командой rmdir каталог reports , а затем — указав абсолютное путевое имя — каталог letters .

Просмотр содержимого каталогов: ls

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

Для того чтобы имена файлов и имена каталогов различались между собой, эту команду нужно дать с опцией -F . В этом случае после каждого имени каталога в списке ставится косая черта.

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

Переход в другой каталог: команда cd

Переход из одного каталога в другой осуществляется командой cd . Переход в каталог делает его рабочим. Файловые команды, например ls , будут манипулировать файлами, находящимися именно в рабочем каталоге, если иного не указано. В качестве аргумента команда cd использует имя каталога, в который вы хотите перейти.

Все создаваемые каталоги будут находиться в рабочем каталоге. Рабочий каталог является для вновь созданного каталога родительским. Для обозначения родительского каталога можно пользоваться двумя точками ( .. ). Этот специальный символ обозначает путевое имя родительского каталога. Его допускается использовать в команде cd для перехода обратно в родительский каталог, таким образом вновь делая этот каталог рабочим. Если вы хотите вернуться в начальный каталог, нужно ввести команду cd без аргумента. Вы вернетесь прямо в свой начальный каталог, и он вновь станет рабочим.

Путевые имена: команда pwd

В каждом каталоге можно создавать другие каталоги, осуществляя, по сути дела, вложение одного каталога в другой. Команда cd позволяет переходить из одного каталога в другой, однако, никакого указателя на то, в каком каталоге вы в данный момент находитесь, нет. Для того чтобы определить, в какой каталог вы перешли, дайте команду pwd , которая сообщит абсолютное путевое имя рабочего каталога, как показано в следующем примере. Путевое имя состоит из имен рабочего каталога dylan и каталога, частью которого он является, home . Имена каталогов разделены косой чертой. Корневой каталог обозначен первой косой чертой.

Обращение к рабочему и родительскому каталогам: . и ..

Каждый каталог обязательно имеет родительский каталог (за исключением, естественно, корневого каталога). При создании каталога в нем сразу же делаются две записи. Одна из них будет представлена точкой ( . ), а вторая — двумя точками ( .. ). Точка обозначает путевое имя данного каталога, а две точки — путевое имя его родительского каталога. Две точки, используемые как аргумент команды, обозначают родительский каталог. Одна точка обозначает рабочий каталог. Точка используется для обозначения рабочего каталога вместо указания его путевого имени. Например, для копирования файла в рабочий каталог с сохранением имени файла можно вместо путевого имени рабочего каталога поставить точку. В этом смысле точка — еще одно имя рабочего каталога. Символ .. часто используется для обозначения файлов родительского каталога. Используя команду cd с символом .. , можно возвращаться из каталога нижнего уровня, последовательно переходя в родительские каталоги по дереву каталогов. Во многих случаях в команде допускается использование обоих символов. Например, если letters — рабочий каталог и нужно скопировать в него файл weather , то каталог chris можно обозначить двумя точками, а каталог letters — одной:

Читайте также:  Каталог приложений для linux

Использование абсолютных и относительных путевых имен:

Как упоминалось выше, файлы и каталога можно обозначать абсолютными и относительными путевыми именами. У обоих вариантов, однако, есть свои недостатки. Абсолютное путевое имя пригодно для обозначения любого файла и каталога, но такие имена, как правило, очень длинные и сложные, что затрудняет работу с ними. Относительное путевое имя короче и проще в работе, но число файлов, которые им можно обозначить, ограниченно. Как правило, относительные путевые имена нужно использовать при каждой возможности, а абсолютные — только в случае необходимости. В некоторых shell предусмотрена возможность сокращения абсолютных путевых имен. Относительные путевые имена применяют для обозначения только файлов, находящихся в подкаталогах рабочего каталога. Этих подкаталогов, вложенных один в другой, может быть сколь угодно много, но их пути должны ответвляться от рабочего каталога. Допустим, вам нужно обратиться к каталогу, расположенному по дереву каталогов выше рабочего или в другой ветви, тогда необходимо использовать абсолютное путевое имя.

Диалоговое руководство

В системе Linux используются различные утилиты, среди которых редакторы, программы-почтальоны и руководства. Эти утилиты представляют собой отдельные программы, имеющие собственные интерфейсы с собственными наборами команд. Примером такой утилиты является диалоговое руководство man , которое позволяет пользователю получить информацию о любой команде и программе ОС Linux. Для обращения к диалоговому руководству введите команду man и имя команды, информация о которой вам нужна. Ниже приведен пример, в котором пользователь вызывает из диалогового руководства информацию о команде ls ,

После нажатия клавиши Enter вы попадаете в утилиту man , которая выдает первую страницу документа о команде ls . В утилите man используется собственный набор команд, для задания которых, как правило, достаточно нажатия одной клавиши. Нажатие клавиши пробела или клавиши f выводит следующую страницу. Нажатие клавиши b возвращает вас на предыдущую страницу. Закончив работу, выйдите из утилиты и вернитесь в командную строку (нажатием клавиши q ). Описание команд в руководстве состоит из нескольких частей. Чаще всего их пять: синопсис, описание, опции, файлы и перекрестные ссылки. Синопсис содержит синтаксис команды с указанием ее опций и аргументов. В описании команды рассказывается, для чего конкретно она применяется в системе. Затем перечисляются и поясняются опции. В следующей части перечисляются системные файлы, которые использует команда, а в списке перекрестных ссылок указываются родственные команды и пункты руководства. Ниже приведен сокращенный вариант страницы руководства, посвященной команде ls .

Утилита man имеет несколько полезных особенностей, в частности она позволяет проводить поиск. Эта функция активизируется нажатием либо клавиши / , либо клавиши ? . Первый вариант предусматривает поиск вперед, а второй — поиск назад. После нажатия клавиши / в нижней части экрана появляется строка, в которую нужно ввести искомое слово. Затем нужно нажать Enter . Поиск осуществляется по образцу, поэтому можно ввести часть слова или практически любой набор символов. Повторение поиска осуществляется нажатием клавиши n . Повторно вводить образец не нужно.

Команды whatis и apropos

Команды whatis и apropos обеспечивают поиск в базе данных заголовков man-страниц и выдают все найденные заголовки с кратким описанием каждого.

Команда whatis позволяет искать заголовки по целым словам. Например, если вы хотите увидеть все пункты руководства, в которых есть отдельно стоящая буква х, необходимо дать следующую команду (она выдаст вам все пункты руководства, в названиях которых упоминается Х Window):

С помощью этих команд осуществляется постраничный вывод результатов поиска. Если выводимые данные занимают несколько страниц можно перемещаться по ним с помощью клавиш f и Ь . Допускается и выполнение поиска по образцу (клавишами / и ? ). Для выхода нажмите клавишу q . Лишь после этого вы вернетесь в командную строку.

Команда apropos выполняет ту же задачу, что и команда whatis но поиск выполняется по образцу, а не по целым словам. Скажем, команда apropos x выдаст несколько страниц с данными, в которых будут перечислены все пункты руководства, начинающиеся с буквы x, например xwpe и xloadimage . В следующем примере выдается перечень пунктов руководства начинающихся с комбинации ls . Сюда входит команда ls и другие команды, например lseek и lsearch .

Отображение файлов: cat и more

Во многих случаях бывает необходимо просматривать содержимое файла. Команды cat и more выводят содержимое файла на экран. Название команды cat образовано путем сокращения слова concatenate. Это очень сложная и универсальная команда. В нижеследующем примере употребляется в очень узких рамках, только для вывода текста файла на экран:

Команда cat выводит на экран сразу весь текст файла. Если файл имеет большой размер, то текст очень быстро мелькает на экране. Для устранения этого недостатка служит команда more , с помощью которой текст на экран можно выводить порциями. Эта команда вызывается с именем файла, который вы хотите просмотреть:

Когда more вызывает файл, отображается его первый фрагмент, умещающийся на экране. Для отображения следующего фрагмента нажимается клавиша f или клавиша пробела. Для возврата к предыдущему тексту используется клавиша b . Нажав клавишу q , можно в любой момент выйти из данной программы.

Печать файлов: команды lpr , lpq и lprm

Если нужно напечатать файл, перешлите его на принтер, подключенный к вашей системе. Это делается при помощи команды lpr . В следующем примере пользователь дает команду печатать файл mydata .

Если вы хотите одновременно напечатать несколько файлов, укажите их имена в командной строке. В следующем примере пользователю необходимо печатать файлы mydata и preface :

Задания на печать ставятся в очередь и выполняются в фоновом режиме. Пока они выполняются, вы делаете другую работу. Команда lpq позволяет в любой момент проверить ход выполнения заданий на печать. С ее помощью на экран выводятся имя владельца задания (регистрационное имя пользователя, который послал это задание), идентификатор задания, его размер в байтах и имя временного файла, в котором оно в данный момент находится. В нашем примере владелец — chris , а идентификатор задания 00015 :

Операции с файлами и каталогами: find , ср , mv , rm , ln

По мере создания файлов возникает необходимость снятия с них резервных копий, изменения их имен, удаления некоторых из них и даже присваивания им дополнительных имен. В ОС Linux предусмотрен набор команд, которые обеспечивают поиск, копирование, переименование и удаление файлов. Команды представляют собой сокращенную форму слов, состоящую из двух символов. Команда ср обозначает «copy» и позволяет копировать файл, mv обозначает «move» и дает возможность перемещать либо переименовывать файл, rm обозначает «remove» и приводит к удалению файла и, наконец ln обозначает «link» и позволяет дать файлу еще одно имя. Исключение из этого правила — команда find , с помощью которой осуществляется поиск файла в списке имен.

Поиск в каталогах: команда find

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

Копирование файлов

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

В следующем примере пользователь копирует файл proposal в новый файл, oldprop .

Когда пользователь запросит перечень файлов, содержащихся в каталоге, среди них будет новая копия.

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

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

Копирование файлов в каталоги

Для того чтобы скопировать файл из рабочего каталога в другой каталог, нужно указать имя этого каталога команде ср в качестве второго аргумента. Имя новой копии будет таким же, как у оригинала, но находиться она будет в другом каталоге. Файлы в разных каталогах могут иметь одинаковые имена.

Для того чтобы скопировать файл из начального каталога в подкаталог, просто укажите имя этого каталога. В следующем примере файл newprop копируется из рабочего каталога в каталог props .

Команда ср может использовать в качестве аргументов имена многих файлов, заданные в виде списка, поэтому можно одновременно копировать в каталог несколько файлов. Введите имена этих файлов в командной строке, причем имя каталога должно быть последним аргументом. Все эти файлы копируются в указанный каталог. В следующем примере пользователь копирует файлы preface и doc1 в каталог props .
Обратите внимание: props — последний аргумент.

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

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

Допускается использование и других специальных символов, например ? и [ ] . В приведенном ниже примере пользователь копирует файлы исходного кода и файлы объектного кода ( .с и .о ) в каталог projbk .

При копировании файла можно дать копии имя, отличное от имени оригинала. Для этого нужно поместить новое имя файла после косой черты, следующей вслед за именем каталога.

В следующем примере файл newprop копируется в каталог props и копии присваивается имя version1 . Затем пользователь переходит в каталог props и получает список файлов. В нем имеется только один файл, который называется version1 .

Если нужно скопировать файл из дочернего каталога, например, из props , в родительский каталог, нужно указать имя этого дочернего каталога. Первый аргумент команды ср — имя копируемого файла. Перед ним должно через косую черту стоять имя дочернего каталога. Второй аргумент — имя, которое файл будет иметь в родительском каталоге.

Читайте также:  Linux или windows для php

В следующем примере файл version1 копируется из каталога props в начальный каталог:

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

Например, если props — ваш текущий рабочий каталог и вы хотите скопировать файл version1 из props в его родительский каталог (в данном случае в начальный каталог пользователя), нужно вместо второго аргумента команды ср использовать двойную точку.

Если вы хотите дать копии файла version1 новое имя, добавьте его ко второму аргументу через косую черту:

Перемещение файлов

С помощью команды mv можно либо изменить имя файла, либо переместить файл из одного каталога в другой. Используя mv для переименования файла, в качестве второго аргумента нужно указать новое имя файла. Первый аргумент — текущее имя файла.

В следующем примере имя файла proposal меняется на version1 .

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

Файл можно перенести из одного каталога в другой. Для этого нужно в качестве второго аргумента в команде mv поставить имя каталога. В данном случае можно считать, что команда mv не переименовывает файл, а просто перемещает его из одного каталога в другой. После перемещения файла у него останется то имя, которое он носил в исходном каталоге (если вы не укажете иного).

В следующем примере файл newprop перемещается из начального каталога в каталог props .

Если при перемещении файла вы хотите переименовать его, укажите новое имя файла после имени каталога. Имя каталога отделяется от нового имени файла косой чертой. В следующем примере файл newprop перемещается в каталог props и получает имя version1 .

Указав имя дочернего каталога перед именем файла, его можно переместить из этого каталога обратно в родительский.

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

Например, если props — ваш текущий рабочий каталог и вы хотите переместить файл version1 из props в его родительский каталог (в данном случае в начальный каталог пользователя), нужно вместо второго аргумента команды mv использовать две точки.

Если вы хотите дать файлу version1 в родительском каталоге новое имя, добавьте его ко второму аргументу через косую черту:

Фактически имя файла — это имя, предваренное путевым именем его каталога. При перемещении файла tuesday в каталог reports путевое имя изменилось. Полное имя файла tuesday изменилось с /home/chris/tuesday на /home/chris/reports/tuesday . Теперь его путевое имя включает название каталога reports .

Столь же свободно можно использовать абсолютное путевое имя. В следующем примере файл today перемещается в каталог reports и получает новое имя, tuesday . Обратите внимание: абсолютное путевое имя используется в качестве аргумента и в команде mv , и в команде ls .

Как и команда ср , команда mv позволяет одновременно переместить из одного каталога в другой несколько файлов. Нужно только ввести имена этих файлов в командной строке. Последним всегда должно стоять имя нового каталога. В следующем примере пользователь перемещает файлы wednesday и friday в каталог lastweek .

При создании списка имен файлов для команды mv можно использовать любые специальные символы. В следующем примере пользователь перемещает все файлы исходных текстов программ из текущего каталога в каталог newproj .

Если вы хотите переместить все файлы из данного каталога в другой каталог, можно использовать обозначение *.* и получить список всех этих файлов. В следующем примере пользователь перемещает все файлы из каталога reports в каталог repbks .

Перемещение и копирование каталогов

Система Linux позволяет копировать и перемещать целые каталоги. В качестве первого аргумента команды ср и mv могут использовать имя каталога, позволяя копировать и перемещать подкаталоги из одного каталога в другой. Первый аргумент — имя перемещаемого или копируемого каталога, а второй — имя каталога, в который он будет помещен. При перемещении и копировании каталогов действует та же структура путевых имен, что и при соответствующих операциях с файлами. Подкаталоги можно так же легко, как и файлы, копировать из одного каталога в другой. Для копирования каталога команду ср необходимо использовать с опцией -r (сокращение от recursive, т.е. «рекурсивный»). Эта опция дает команде ср указание копировать каталог вместе со всеми его подкаталогами. Другими словами, копируется все поддерево каталогов, начиная с указанного. В следующем примере каталог thankyou копируется в каталог oldletters . После завершения этой операции начинают равноправно сосуществовать два подкаталога thankyou : один в каталоге letters , другой в oldletters .

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

Если вы хотите, чтобы операция копирования осуществлялась и над подкаталогами, нужно указать опцию -r .

Специальный символ

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

Для того чтобы при копировании файла в начальный каталог дать ему новое имя, поставьте новое имя после пары символов

/ . В следующем примере файл monday копируется в начальный каталог, и копия получает имя today .

В аргументах команды mv тильда используется точно так же. Ниже показано, как файл monday перемещается из каталога reports в начальный каталог.

Если при перемещении файла из нижестоящего каталога в начальный вы меняете его имя, то перед новым именем файла ставится тильда с косой чертой,

/ . В следующем примере пользователь переходит в каталог reports , а затем перемещает файл monday в начальный каталог и дает ему имя today .

Тильду можно использовать во всех случаях, когда речь идет о путевом имени начального каталога. В приведенном ниже примере описанные ранее команды mv и ls выполняются с тильдой.

Удаление файла: команда rm

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

Команда rm может быть использована с любым числом аргументов, что позволяет одновременно удалять несколько файлов. Имена этих файлов указываются в командной строке после имени команды.

Командой rm следует пользоваться осторожно, так как отменить ее действие нельзя. Если файл удален, восстановить его не удастся. Предположим, что вы случайно ввели эту команду вместо какой-то другой, например, ср или mv . Когда вы опомнитесь, будет слишком поздно — файлы пропали. Для того чтобы избежать таких ошибок, используйте команду rm с опцией -i , которая инициирует выдачу запроса на подтверждение удаления. Теперь перед удалением каждого файла система будет спрашивать, действительно ли вы хотите удалить его. Если вы введете у , файл будет удален. При любом ином ответе файл не удаляется. В следующем примере посредством команды rm система получает указание удалить файлы proposal и oldprop , а затем запрашивает подтверждение по каждому из них. Пользователь решает удалить oldprop , а proposal оставить.

Управление файлами

В операционной системе Linux используются разнообразные средства управления файлами и каталогами. Пользователь имеет возможность получить подробную информацию о файлах. Он может, например, узнать, когда они в последний раз корректировались и сколько на них имеется ссылок. Пользователь может управлять доступом к своим файлам. С каждым файлом в ОС Linux связаны права доступа, которые определяют круг лиц, имеющих к нему доступ, и вид доступа. Вы можете разрешить доступ к файлам другим пользователям либо не разрешить такового. Файлы располагаются на физических устройствах — жестких дисках, CD-ROM, дискетах — и на каждом устройстве организуются в файловую систему.

Для того чтобы получить доступ к файлам, находящимся на каком-либо устройстве, необходимо присоединить его файловую систему к определенному каталогу. Эта операция называется монтированием файловой системы. Например, для работы с файлами, расположенными на дискете, нужно сначала смонтировать ее файловую систему в определенном каталоге. В данной главе рассказывается о том, как работать с компакт-дисками, дискетами и разделами жестких дисков. Можно даже обращаться к разделу жесткого диска MS-DOS, дискете MS-DOS, а также к файловым системам, находящимся на удаленном сервере. В системе предусмотрена возможность создания резервных архивов файлов и передачи архивов по сети в другие системы. Файлы можно сжимать, что позволяет повысить эффективность передачи и обеспечивает экономию дискового пространства. Архивирование и сжатие широко применяются при получении программных пакетов из удаленных источников. Сжатый заархивированный пакет программ переписывается на жесткий диск, а затем распаковывается и разархивируется. После этого его можно инсталлировать в систему. Именно таким образом пользователи получают большинство новых программных средств ОС Linux.

Вывод информации о файлах: команда ls -l

Команда ls -l позволяет получить подробную информацию о файле. Сначала указываются права доступа, затем количество ссылок, имя владельца файла, имя группы, к которой он относится, размер файла в байтах, дата и время последнего изменения и, наконец, имя файла. Имя группы обозначает группу, которой предоставляется доступ по категории «группа». Например (см. ниже), тип файла mydata — обычный файл. У него всего одна ссылка; это говорит о том, что у файла нет других имен. Имя владельца — chris , оно совпадает с регистрационным именем данного пользователя. Имя группы — weather . Вероятно, есть и другие пользователи, входящие в эту группу. Размер файла — 207 байт . Последний раз его корректировали 20 февраля в 11:55 . Имя файла — mydata .

Задание

  1. Определить путевое имя рабочего каталога. Как обозначается корневой каталог? Какое путевое имя получили (относительное или абсолютное)?
  2. Создать в начальном каталоге два подкаталога. Просмотреть содержимое рабочего каталога. Просмотреть содержимое родительского каталога, не переходя в него.
  3. Перейти в системный каталог. Просмотреть его содержимое. Просмотреть содержимое начального каталога. Вернуться в начальный каталог.
  4. Удалить созданные ранее подкаталоги.
  5. Получить информацию по командам ls и cd с помощью утилиты man. Изучить структуру man-документа.
  6. Получить краткую информацию по командам ls и cd с помощью команды whatis и apropos . В чем различие?
  7. То же, что и в п.5, только с помощью команды info .

Создайте в домашнем каталоге следующую структуру подкаталогов (существующие каталоги не удаляйте!)

Скопируйте файл /etc/group в каталог 1 используя абсолютные имена копируемого файла и каталога назначения.

Скопируйте файл /etc/group в каталог 2 используя абсолютное имя копируемого файла и относительное имя каталога назначения.

  • Скопируйте файл /etc/group в каталог 3 используя относительные имена копируемого файла и каталога назначения.
  • Скопируйте файл /etc/group в каталог 4 используя абсолютные имена копируемого файла и относительное имя каталога назначения с использованием специального символа

    .

  • При помощи одной команды зайдите в каталог 3 .
  • Удалите файл group из каталога 4 при помощи одной команды.
  • Перейдите в свой домашний каталог. Удалите каталоги 1 и 4 .
  • Выведите первые и последние 13 строк файла /etc/group .
  • Источник

    Оцените статью