Командный интерпретатор bash. Изучение команд командного интерпретатора bash в ос linux. Что такое иноды

Командный интерпретатор bash. Изучение команд командного интерпретатора bash в ос linux. Что такое иноды

01.04.2019

Пока мы рассматривали одну сложную структуру (сложный тип) - массив; одним из основных свойств массива является однотипность его компонент. Многие информационно-логические задачи связаны с обработкой документов, содержащих в себе информация разного типа (числовую, символьную и т. д.) Примеры таких документов: пла­тежные ведомости (фамилии и имена - символьная информация, де­нежные суммы - числовая), карточки больных в поликлинике, библио­течная информация. Для программирования алгоритмов обработки такой информации необходимо иметь сложный тип, объединяющий разнотипные компоненты. Таким типом является структура в Си (в Паскале запись).

Структурная переменная, или просто структура, состоит из не­скольких переменных (называемых полями), возможно, разного типа.

Структура

тип "структура" (шаблон)

переменная типа "структура "

Описание шаблона :

Описание структурной переменной

typedef struct { Тип1 Список1ИменПолей;

struct ИмяШаблона ИмяПеременной

Тип2 Список2ИменПолей;

ТипN СписокNИменПолей;

ключевое struct слово не нужно пpи

} ИмяШаблона

использовании typedef

или struct ИмяШаблона

{ Тип1 Список1ИменПолей;¦

Тип2 Список2ИменПолей;

ТипN СписокNИменПолей;

typedef struct {char author; char title;/*описание*/

int year; float price} BOOK; /*шаблона BOOK*/

/*или можно описать тот же самый шаблон так:

struct BOOK {char author; char title;

int year; float price} ;*/

struct BOOK b;/*описание структурной переменной b*/

Память, занимаемая структурой, равна сумме объемов памяти полей (если исключить из рассмотрения особенности, связанные с выравниванием). В любом случае для определения размера памяти структуры можно использовать операцию sizeof(). Шаблон ВООК, на­пример, описывает структуру размером памяти 70.

Обращение к полю структурной переменной:

ИмяСтруктуры.ИмяПоля или АдресСтруктуры ->ИмяПоля

. (точка) и ->являются операциями, соответственно, прямого и косвенного выбора компоненты структурированной переменной.

Например,

struct BOOK a,*pnta=&a;...

a.author="Byron"; pnta->author="Byron"; /*эквивалентные опера­торы*/

Пример. Задача примера 2 п.3.1.4 в нижеприведенной про­грамме выполнена с использованием структур (а не строк).

#include

#include

#include

{ /*структура сведений об игрушках*/

typedef struct {int nu;/*номер*/

char name;/*наименование*/

int minage,maxage;/*мин. и макс. возраст ребенка*/

double rub /*стоимость*/;}TOYS;

TOYS toy;/*переменная типа записьTOYS */

double max; /*максимальная стоимость*/

char namemax;/*название самого дорогого конструктора*/

int n /*число игрушек*/,i/*номер игрушки*/;

puts("Введите число наименований игpушек");

for (i=0; i

/*в цикле ввод сведений об игрушках и проверка условий*/

fflush(stdin); /*очистка буфера устройства ввода послеscanf */

printf(" Введите сведения об игpушке с номеpом %2d\n",toy.nu);

puts("наименование");

puts("мин. и макс. возpаст и стоимость");

scanf("%d%d%lf",&toy.minage,&toy.maxage,&toy.rub);

if ((strstr(toy.name,"констpуктоp")!=NULL ||

strstr(toy.name,"Констpуктоp")!=NULL) &&

(toy.maxage <= 7) &&

(toy.rub>max))

strcpy(namemax,toy.name);

puts(" Констpуктоpов для детей до семи лет нет");

{ printf("Cамый доpогой констpуктоp для детей до семи лет\n");

printf(" %s стоит %8.0f pублей\n",namemax,max);

В Си существует еще один сложный тип, описание которого формально похоже на структуру. Это тип (и переменная) объедине­ние .

Объединение - это переменная, содержащая поля разного типа, помещаемые в одно и то же место памяти. По существу объедине­ние дает способ различной интерпретация содержимого памяти. Описание шаблона (типа) объединения и переменной этого типа выполняется также, как для структуры, только вместо ключевого слова struct используетсяunion . Размер памяти, занимаемой объе­динением, равен максимальному из размеров полей.

Структуры

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

Для разрешения подобных затруднений в C# предусмотрена структура , которая подобна классу, но относится к типу значения, а не к ссылочному типу данных. Т.е. структуры отличаются от классов тем, как они сохраняются в памяти и как к ним осуществляется доступ (классы - это ссылочные типы, размещаемые в куче, структуры - типы значений, размещаемые в стеке), а также некоторыми свойствами (например, структуры не поддерживают наследование). Из соображений производительности вы будете использовать структуры для небольших типов данных. Однако в отношении синтаксиса структуры очень похожи на классы.

Главное отличие состоит в том, что при их объявлении используется ключевое слово struct вместо class. Ниже приведена общая форма объявления структуры:

struct имя: интерфейсы { // объявления членов }

где имя обозначает конкретное имя структуры.

Как и у классов, у каждой структуры имеются свои члены: методы, поля, индексаторы, свойства, операторные методы и события. В структурах допускается также определять конструкторы, но не деструкторы. В то же время для структуры нельзя определить конструктор, используемый по умолчанию (т.е. конструктор без параметров). Дело в том, что конструктор, вызываемый по умолчанию, определяется для всех структур автоматически и не подлежит изменению. Такой конструктор инициализирует поля структуры значениями, задаваемыми по умолчанию. А поскольку структуры не поддерживают наследование, то их члены нельзя указывать как abstract, virtual или protected.

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

Давайте рассмотрим пример использования структур:

Using System; namespace ConsoleApplication1 { // Создадим структуру struct UserInfo { public string Name; public byte Age; public UserInfo(string Name, byte Age) { this.Name = Name; this.Age = Age; } public void WriteUserInfo() { Console.WriteLine("Имя: {0}, возраст: {1}",Name,Age); } } class Program { static void Main() { UserInfo user1 = new UserInfo("Alexandr", 26); Console.Write("user1: "); user1.WriteUserInfo(); UserInfo user2 = new UserInfo("Elena",22); Console.Write("user2: "); user2.WriteUserInfo(); // Показать главное отличие структур от классов user1 = user2; user2.Name = "Natalya"; user2.Age = 25; Console.Write("\nuser1: "); user1.WriteUserInfo(); Console.Write("user2: "); user2.WriteUserInfo(); Console.ReadLine(); } } }

Обратите внимание, когда одна структура присваивается другой, создается копия ее объекта. В этом заключается одно из главных отличий структуры от класса. Когда ссылка на один класс присваивается ссылке на другой класс, в итоге ссылка в левой части оператора присваивания указывает на тот же самый объект, что и ссылка в правой его части. А когда переменная одной структуры присваивается переменной другой структуры, создается копия объекта структуры из правой части оператора присваивания.

Поэтому, если бы в предыдущем примере использовался класс UserInfo вместо структуры, получился бы следующий результат:

Назначение структур

В связи с изложенным выше возникает резонный вопрос: зачем в C# включена структура, если она обладает более скромными возможностями, чем класс? Ответ на этот вопрос заключается в повышении эффективности и производительности программ. Структуры относятся к типам значений, и поэтому ими можно оперировать непосредственно, а не по ссылке. Следовательно, для работы со структурой вообще не требуется переменная ссылочного типа, а это означает в ряде случаев существенную экономию оперативной памяти.

Структура — это агрегатный тип данных, так как может содержать в себе разнотипные элементы. Синтаксис объявления структуры в С++ отличается от C. Хотя версия C остается правильной для C++. Получается, что в С++ можно двумя стилями объявления структур пользоваться, а в языке C — только одной. Смотрим синтаксис объявления структуры в языке С++:

Struct Name { type atrib; // остальные элементы структуры } structVar1, structVar2, ...;

  • struct — ключевое слово, которое начинает определение структуры
  • Name — имя структуры
  • type — тип данных элемента структуры
  • atrib — элемент структуры
  • structVar1-2 — структурные переменные

Объявление структуры всегда должно начинаться с ключевого слова struct . Необязательно, чтобы структура имела имя, но тогда такая структура обязательно должна иметь структурные переменные, объявленные между закрывающей фигурной скобкой и точкой с запятой, строка 5. Обязательно в объявлении структуры должны присутствовать фигурные скобочки, они обрамляют тело структуры, в котором объявляются её атрибуты (элементы), строка 3. Структурные переменные, при объявлении структуры, указывать необязательно, строка 5.

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

struct_name structVariable;

Синтаксис объявления структуры в языке Си:

Typedef struct name { type atrib1; type atrib2; // остальные элементы структуры... } newStructName structVar;

Синтаксис объявления структуры в языке Си предполагает два варианта. Первый, опустить ключевое слово typedef , при этом имя newStructName тоже не используется, и имя структуры, тогда обязательно необходимо при объявлении структуры использовать структурные переменные — structVar , строка 6. Смотрим пример:

Struct name structVar;

Или вы можете воспользоваться typedef , для объявления псевдонима структуры newStructName , псевдоним:

NewStructName structVar;

В любом случае, если вы хотите, объявить указатель на структуру внутри структуры, вы должны использовать первый синтаксис:

Struct name *struct_instance; // указатель на структуру

Объявление указателя на структуру

Синтаксис объявления указателя на структуру в Си неоднозначен. В Си, если вы не используете typedef при определении структуры, то, в обязательном порядке необходимо использовать структурные переменные, между закрывающейся фигурной скобочкой и точкой с запятой.
В C++, этого не требуется. Чтобы объявить указатель на структуру, в С++ вы просто перед именем структурной переменной ставите символ указателя — * .

StructName *structVar; // указатель на структуру structName

NewStructName *structVar; // newStructName должно быть объявлено с typedef

или так, тоже для СИ:

Struct name *structVar;

Доступ к элементам структуры

Доступ к элементам структуры так же прост, как использование символа «точка». Предположим. что у нас есть структурная переменная с именем car и у нее есть элемент с именем speed , к которому, мы сейчас получим доступ:

Car.speed;

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

Доступ к элементам указателя на структуру

Чтобы получить доступ к элементам структуры, через указатель на структуру, вместо оператора «точка», используйте оператор стрелка -> :

CarPtr->speed;

P.S.: Всем владельцам Android-смартфонов представляю хорошую подборку программ GPS навигаторов для android . В списке представлено около 20 программных продуктов, вы можете любой скачать и установить на свой девайс. Все программы абсолютно бесплатные.

Последнее обновление: 02.10.2018

Наряду с классами структуры представляют еще один способ создания обственных типов данных в C#. Более того многие примитивные типы, например, int, double и т.д., по сути являются структурами.

Например, определим структуру, которая представляет человека:

Struct User { public string name; public int age; public void DisplayInfo() { Console.WriteLine($"Name: {name} Age: {age}"); } }

Как и классы, структуры могут хранить состояние в виде переменных и определять поведение в виде методов. Так, в данном случае определены две переменные - name и age для хранения соответственно имени и возраста человека и метод DisplayInfo для вывода информации о человеке.

Используем эту структуру в программе:

Using System; namespace HelloApp { struct User { public string name; public int age; public void DisplayInfo() { Console.WriteLine($"Name: {name} Age: {age}"); } } class Program { static void Main(string args) { User tom; tom.name = "Tom"; tom.age = 34; tom.DisplayInfo(); Console.ReadKey(); } } }

В данном случае создается объект tom. У него устанавливаются значения глобальных переменных, и затем выводится информация о нем.

Конструкторы структуры

Как и класс, структура может определять констукторы. Но в отличие от класса нам не обязательно вызывать конструктор для создания объекта структуры:

User tom;

Однако если мы таким образом создаем объект структуры, то обязательно надо проинициализировать все поля (глобальные переменные) структуры перед получением их значений или перед вызовом методов структуры. То есть, например, в следующем случае мы получим ошибку, так как обращение к полям и методам происходит до присвоения им начальных значений:

User tom; int x = tom.age; // Ошибка tom.DisplayInfo(); // Ошибка

Также мы можем использовать для создания структуры конструктор по умолчанию, при вызове которого полям структуры будет присвоено значение по умолчанию (например, для числовых типов это число 0):

User tom = new User(); tom.DisplayInfo(); // Name: Age: 0

Также мы можем определить свои конструкторы. Например, изменим структуру User:

Using System; using System.Reflection; namespace HelloApp { struct User { public string name; public int age; public User(string name, int age) { this.name = name; this.age = age; } public void DisplayInfo() { Console.WriteLine($"Name: {name} Age: {age}"); } } class Program { static void Main(string args) { User tom = new User("Tom", 34); tom.DisplayInfo(); User bob = new User(); bob.DisplayInfo(); Console.ReadKey(); } } }

Важно учитывать, что если мы определяем конструктор в структуре, то он должен инициализировать все поля структуры, как в данном случае устанавливаются значения для переменных name и age.

Также, как и для класса, можно использовать инициализатор для создания структуры:

User person = new User { name = "Sam", age = 31 };

Но в отличие от класса нельзя инициализировать поля структуры напрямую при их объявлении, например, следующим образом:

Struct User { public string name = "Sam"; // ! Ошибка public int age = 23; // ! Ошибка public void DisplayInfo() { Console.WriteLine($"Name: {name} Age: {age}"); } }

Московский государственный институт электронной техники

(Технический университет)

Кафедра Интегральной электроники и микросистем

ЛАБОРАТОРНЫЙ ПРАКТИКУМ

ПО КУРСУ:

ОПЕРАЦИОННАЯ СИСТЕМА LINUX

Составил: ассистент каф. ИЭМС Козлов А.В.

Москва, 2007

Лабораторный практикум предназначен в первую очередь для магистров техники и технологии, обучающихся по программе Synopsys первого года обучения по направлению 210100.68, для освоения операционной системы Red Hat Enterprise Linux (RHEL) 4.0. Он также рассчитан для студентов компании FreeScale и всех пользователей, имеющих начальный уровень подготовки Linux или не имеющих его вовсе, и желающих освоить командную среду Linux и основные его приложения, которые требуются пользователю при работе с системами автоматизированного проектирования.

Данный практикум состоит из восьми лабораторных работ, позволяющих эффективно освоить пользователем команды командного интерпретатора, а также постепенно научиться писать файлы – сценария Shell, Gawk, Perl и Tcl. Каждая лабораторная работа включает следующие разделы: название, задание и цель работы; теоретические сведения с контрольными вопросами; пример выполнения лабораторной работы; порядок выполнения лабораторной работы; лабораторное задание и форму отчета по работе. Синтаксис написания команд в командном интерпретаторе совместно с опциями, параметрами, действиями, выражениями и путями к объектам рассчитан на командную среду BASH. В конце лабораторного практикума приведен список литературы.

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОННОЙ ТЕХНИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

ЛАБОРАТОРНАЯ РАБОТА № 1

ПО КУРСУ «ОПЕРАЦИОННАЯ СИСТЕМА LINUX»

Изучение команд командного интерпретатора bash в ос linux

ОПИСАНИЕ СОСТАВИЛ:

КОЗЛОВ А.В.

МОСКВА 2007

Лабораторная работа №1 Изучение команд командного интерпретатора bash в ос Linux

Цель работы : на основе командного интерпретатора BASH освоить навыки работы с командами в операционной системе Red Hat Enterprise Linux 4.0.

Продолжительность работы – 4 ч.

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

Операционная система Linux изначально разрабатывалась как бесплатная гибкая многофункциональная многопользовательская высокопроизводительная платформа, призванная служить и решать задачи ученых по всему миру. В связи с “научной направленностью” такая платформа изначально не имела расширенного графического интерфейса, который широко применяется при решении домашних задач – компьютерные игры, Интернет, интерактивные программы для связи пользователей, а также при решении офисных задач – работа с системами баз данных, построение графиков и гистограмм. Зачастую работа ученых с операционной системой Linux сводилась просто к обычному взаимодействию пользователя (человек, работающий на ЭВМ) с консолью (терминальное окно на экране монитора с текстовой информацией). Для понимания команд вводимых пользователем в Linux разработаны командные интерпретаторы, которые представляют собой трансляторы команд, понятных человеку, в управляющие сигналы, понятные ядру операционной системы. Основная задача операционной системы заключается в посредничестве при передаче команд от человека к ЭВМ. И, не смотря на то, что сегодня операционная система Linux применяется повсеместно не только в институтах, Design центрах, вычислительных центрах, но также в домашних и офисных целях, консоли (терминальные окна), по-прежнему, широко используются, а многим они кажутся даже более удобными по сравнению с работой мышью и пиктограммами (иконки в Linux) в графической среде.

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

Для Linux было разработано множество командных интерпретаторов: Bourne Again shell (BASH), Public Domain shell (PDKSH), интерпретатор TCSH и Z-shell. Несмотря на то, что BASH является интерпретатором, применяемым по умолчанию, можно использовать любую другую среду. Для удобства работы в повседневном режиме достаточно лишь одного командного ин­терпретатора. В систему Red Hal Linux включены все основные командные интерпретаторы, но в ней командный интерпретатор BASH устанавливается и применяется по умолчанию. Это значит, что в этой операционной системе для работы в командной строке применяется BASH, если не указано иное.

Командная строка. Интерфейс командной строки Linux состоит из одной строки, в которой вводятся команды с опциями и параметрами. В командном интерпретаторе BASH начало командной строки обычно отмечается приглашением в виде знака доллара ($); в других командных интерпретаторах системы Linux может применяться другая форма приглашения. После приглашения пользователь может вводить как одиночную команду, так и команду с опциями и параметрами. Если пользователю не хватает размера командного приглашения, то существует возможность огранить его символом “/”. Набор команды осуществляется с клавиатуры, а ввод с помощью клавиши . Например, для вывода системной даты и системного времени пользователь может воспользоваться командой date .

$ date

Fri Jun 8 15:42:35 MSD 2007

Или, например, для вывода календаря с текущим месяцем используется команда cal .

$ cal

July 2007

Su Mo Tu We Th Fr Sa

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

29 30 31

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

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

$ ls -l

total 28

Опция -а позволяет вывести на экран все файлы текущего каталога, включая так называемые скрытые файлы. Скрытыми часто бывают файлы конфигурации. Имена скрытых файлов всегда начинаются с точки, поэтому их часто называют точенными файлами. В большинстве случаев опции объединяются. При этом перед группой опций ставится один общий дефис. Например, опция -al выдает информацию обо всех фай­лах, содержащихся в текущем каталоге, включая скрытые файлы. Отображается новый файл ttt.

$ ls -al

total 40

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

$ ls -l gauss.plx

Работа пользователя начинается в среде командного интерпретатора BASH, который загружается по умолчанию. В него заложены специальные возможности редактирования командной строки, которые могут оказаться очень полезными при изучении ОС Linux. Перед выполнением команд их можно корректировать, перемещая курсор по командной строке и вставляя или удаляя символы. Это особенно полезно при работе с очень сложными командами. Исправить ошибку при наборе команды помогут операции редак­тирования. С помощью клавиши |вверх| можно вынести ни экран только что выполненную команду. Затем можно выполнить команду еще раз или, отредактировав ее, выполнить модифи­цированную команду. Эта возможность очень удобна при многократном повторении некоторых операций, например, при редактировании одного и того же файла.

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

Создание файлов и каталогов. В Linux файл и каталог являются двумя типами данных, поэтому и создание их осуществляется с помощью разных команд. Для создания каталога (директория, папка) используется зарезервированная в Linux команда mkdir (“make directory” – создать директорию). В следующем примере в текущей директории создадим директорию new. Для этого используем команду mkdir и через пробел название директории new.

$ mkdir new

Директория создана. Однако иногда требуется создать целую вложенную структуру, когда внутри уже созданной папки должна быть еще одна, а внутри ее еще одна и так далее. Для этих целей в составе команды mkdir применяется опция вложений –p. В следующем примере с помощью одной команды происходит создание вложенных папок: сначала папка 1, внутри нее папка 2, а внутри нее папка 3.

$ mkdir -p 1/2/3

Создавать файлы можно как с помощью команд, так и с помощью встроенных и внешних текстовых редакторов Linux, таких как kedit, nedit, gedit и так далее. Однако перечисленные редакторы требуют работы графической оболочки, а значит работу графической системы. При ее отсутствии можно, например, воспользоваться текстовым редактором VIM или аналогами, которым работа графической системы не требуется. Можно также создавать файлы с помощью текстовых файловых менеджеров, таких как, Midnight Commander (команда mc). Пользователю (проектировщику) зачастую требуется в текстовых файлах сохранять текстовую информацию, которая сопровождает процесс расчета интегральной схемы или, например, электрофизических параметров моделируемого полупроводникового прибора. А также требуется обрабатывать (удалять, добавлять, сортировать, разбивать) полученные данные. Такие действия также осуществляются с помощью команд Linux. Одной из наиболее простых команд создания текстового файла является команда cat .

Команда cat не имеет собственного интерфейса, поэтому после ввода команды cat с символом перенаправления (см. ниже) и именем нового файла можно сразу же писать текстовую информацию, переходя от строки к строке с помощью клавиши Enter. Выход из редактора (фильтра) cat осуществляется комбинацией клавиш Ctrl-D. Ниже приведен пример создания файла с помощью команды cat.

$ cat > new _ file

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

$ cat new _ file

Или, например, сохраняя текстовую информацию из консоли при работе команды ls с опцией –a в файл r, можно воспользоваться функцией перенаправления данных (см. ниже) и командой tee с опцией -a.

$ ls -l | tee -a r

Копирование файлов и каталогов. Копирование файлов и каталогов осуществляется с помощью команды cp, после которой через пробел указывается с относительным или абсолютным путями объект копирования, а еще через пробел новое место назначение копии этого объекта. В следующем примере производится копирование файла gauss.plx из текущей директории в поддиректорию 1, которая находится в текущей директории.

$ cp gauss . plx 1

Если Вам позволяют права доступа на объекты Linux (лаб. работа №2) можно также скопировать этот файл пользователю Alex, рабочая директория которого имеет следующий абсолютный путь /home/alex , с помощью следующей команды.

$ cp gauss . plx / home / alex

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

$ cp -i gauss.plx /home/alex

Копирование каталогов осуществляется таким же способом, как и файлов. Однако при копировании каталогов с файлами и подкаталогами в составе команды cp используется опция –R. Находясь в директории /home/antonk/111, скопируем каталог laba2 на уровень выше, т.е. в директорию /home/antonk . Две точки обозначают уровень иерархии на одну ступень выше.

$ cp - R laba 2 ..

Переименование и перемещение файлов и каталогов. Переименование файлов и каталогов осуществляется с помощью команды mv, после которой через пробел указывается объект переименования и еще через пробел новое имя объекта. Переименование каталогов происходит так же, как и файлов. Переименуем файл gauss.plx в новый файл с название gauss2.plx . Если файл с названием, совпадающим с новым названием переименованного файла, уже существует в этой директории, то он перезапишется содержимым переименованного файла. Чтобы этого не допустить, также используйте опцию –i. Кстати, в Linux использование расширений не требуется. Ими пользуются только для ассоциации файлов и исполняемых программ.

$ mv –i gauss.plx gauss2.plx

Удаление файлов и каталогов. Удаление файлов и каталогов в Linux осуществляется с помощью команды rm , где через пробел указываются имена файлов для удаления. !!! Будьте внимательны при работе с этой командой, вы можете удалить нужные данные. По аналогии с командой cp, используйте совместно с командой rm опцию –i. Команда с такой опцией будет запрашивать подтверждение на удаление каждого файла и каталога. В следующем примере удалим файл gauss 2. plx , запрашивая подтверждение на удаление.

rm –i gauss2.plx

Групповые символы. Иногда при работе с командным интерпретатором требуется найти или сопоставить файлы по шаблону. Например, вы знаете только первую букву в имени файла и хотите найти все файлы в рабочей директории, начинающиеся с этой буквы. Или вам известно последовательность нескольких букв в имени или расширении файла и вам надо его найти среди нескольких сотен других файлов. В этом случае вам требуется воспользоваться специальными символами Linux. В командном интерпретаторе используется ряд специальных символов, называе­мых групповыми символами, с помощью которых файлы можно искать, сопоставлять, а также создавать список имен файлов. Этими символами являются звездочка, вопро­сительный знак и квадратные скобки (*, ?, ). Получив частичное имя файла, команд­ный интерпретатор использует эти символы как образец для поиска и формирования cписка имен обнаруженных файлов. Параметр с неполным именем файла заменяется списком совпавших с ним имен файлов. Этот список имен может использоваться как параметр в командах, оперирующих с несколькими файлами (например, ls ). Групповые символы командного интерпретатора перечислены в табл. 1.

Таблица 1. Специальные символы командного интерпретатора

Общие символы

Назначение

Разделение команд в одной командной строке

"команда"

Выполнение команды

Сравнение с классом возможных символов в именах файлов

Обозначение следующего символа как специального. Используется для обозначения управляющих символов

Передача по каналу стандартного вывода одной команды в качестве ввода для другой команды

Выполнение команды в фоновом режиме

Команда работы с перечнем ранее введенных команд

Групповые символы

Результат применения

Устанавливает соответствие с любым набором символов в именах файлов

Устанавливает соответствие с любым отдельным символом в именах файлов

Символы перенаправления

Результат применения

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

Восклицательный знак приводит к перезаписи файла, если он существует. Этот символ отменяет действие опции, которая запрещает пе­резапись существующих файлов

Перенаправляет стандартный ввод из файла или устройства в программу

Перенаправляет стандартный вывод в файл или на устройство, добавляя выводимые данные к концу файла

Символы перенаправления

Результат применения стандартного вывода сообщений об ошибках

Перенаправляет и добавляет стандартный вывод сообщений об ошибках в файл или на устройство

Перенаправляет стандартный вывод сообщений об ошибках на стандартный ввод

Перенаправляет стандартный вывод сообщений об ошибках в файл или на устройство

Перенаправляет по каналу стандартный вывод сообщений об ошибках на вход другой команды

Например, символом “звездочка” (*) можно пользоваться для обращения к файлам, имена которых на­чинаются или заканчиваются определенной комбинацией символов. В примере показано, как использовать символ звездочки (*) в любой комбинации символов.

$ ls

docl doc2 document docs mydoc monday tuesday

Отобразили полный перечень файлов в рабочей директории.

$ ls doc*

docl doc2 document docs

В этом примере было показано, как символом звездочки мы “отфильтровали” имена файлов, которые не начинаются на комбинацию букв “doc”. Выводятся только имена файлов, которые содержат комбинацию “doc”. При этом остальные файлы не удаляются, они просто не отображаются пользователю.

$ ls *day

monday t uesday

Здесь мы вывели имена файлов, которые заканчиваются на комбинацию “day”.

$ ls [ mt ] * d *

monday tuesday

А здесь мы вывели имена файлов, у которых первым символом значится буква “m” или “t”, последующие символы произвольные, далее буква “d” и опять произвольные символы.

Будьте внимательны при использовании звездочки совместно с командой rm – это может привести к потере ваших данных. Следующая команда удаляет все содержимое текущей папки.

rm *

$ ls *day

docl doc2 docs

Вопросительный знак (?) обозначает только один неуказанный символ в именах файлов.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows