Unix / Linux - Краткое руководство

Что такое Юникс?

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

Компьютерные программы, которые распределяют системные ресурсы и координируют все детали внутренних компонентов компьютера, называются operating system или kernel.

Пользователи общаются с ядром через программу, известную как shell. Оболочка - это интерпретатор командной строки; он переводит команды, введенные пользователем, и преобразует их на язык, понятный ядру.

  • Первоначально Unix была разработана в 1969 году группой сотрудников AT&T Кеном Томпсоном, Деннисом Ричи, Дугласом Макилроем и Джо Оссанной в Bell Labs.

  • На рынке доступны различные варианты Unix. Solaris Unix, AIX, HP Unix и BSD - несколько примеров. Linux также является разновидностью Unix, которая находится в свободном доступе.

  • Несколько человек могут использовать компьютер Unix одновременно; поэтому Unix называется многопользовательской системой.

  • Пользователь также может запускать несколько программ одновременно; следовательно, Unix - это многозадачная среда.

Архитектура Unix

Вот базовая блок-схема системы Unix -

Основная концепция, объединяющая все версии Unix, - это следующие четыре основы:

  • Kernel- Ядро - это сердце операционной системы. Он взаимодействует с оборудованием и выполняет большинство задач, таких как управление памятью, планирование задач и управление файлами.

  • Shell- Оболочка - это утилита, обрабатывающая ваши запросы. Когда вы вводите команду на своем терминале, оболочка интерпретирует команду и вызывает нужную вам программу. Оболочка использует стандартный синтаксис для всех команд. C Shell, Bourne Shell и Korn Shell - самые известные оболочки, которые доступны с большинством вариантов Unix.

  • Commands and Utilities - Существуют различные команды и утилиты, которые вы можете использовать в повседневной деятельности. cp, mv, cat и grepи т. д. - несколько примеров команд и утилит. Есть более чем 250 стандартных команд плюс многие другие предоставляемые через 3 - го программного обеспечения партии. Все команды имеют различные параметры.

  • Files and Directories- Все данные Unix организованы в файлы. Затем все файлы организованы в каталоги. Эти каталоги далее организованы в древовидную структуру, называемуюfilesystem.

Загрузка системы

Если у вас есть компьютер, на котором установлена ​​операционная система Unix, вам просто нужно включить систему, чтобы она заработала.

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

Авторизация Unix

Когда вы впервые подключаетесь к системе Unix, вы обычно видите такое приглашение, как следующее:

login:

Чтобы залогиниться

  • Подготовьте свой идентификатор пользователя (идентификатор пользователя) и пароль. Обратитесь к системному администратору, если у вас их еще нет.

  • Введите свой идентификатор пользователя в приглашении для входа в систему, затем нажмите ENTER. Ваш идентификатор пользователяcase-sensitive, поэтому убедитесь, что вы вводите его точно так, как проинструктировал системный администратор.

  • Введите свой пароль в ответ на запрос пароля, затем нажмите ENTER. Ваш пароль также чувствителен к регистру.

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

login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$

Вам будет предоставлена ​​командная строка (иногда называемая $подсказка), где вы вводите все свои команды. Например, чтобы проверить календарь, вам нужно ввестиcal команда следующим образом -

$ cal June 2009 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 $

Измени пароль

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

Step 1 - Для запуска введите пароль в командной строке, как показано ниже.

Step 2 - Введите свой старый пароль, который вы используете в настоящее время.

Step 3- Введите свой новый пароль. Всегда держите свой пароль достаточно сложным, чтобы никто не мог его угадать. Но убедитесь, что вы это запомнили.

Step 4 - Вы должны подтвердить пароль, введя его еще раз.

$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $

Note- Мы добавили звездочку (*) сюда, чтобы показать место, где вам нужно ввести текущий и новый пароли, иначе в вашей системе. Когда вы печатаете, он не показывает никаких символов.

Список каталогов и файлов

Все данные в Unix организованы в файлы. Все файлы организованы в каталоги. Эти каталоги организованы в древовидную структуру, называемую файловой системой.

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

$ ls -l total 19621 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml -rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia -rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar drwxr-xr-x 8 root root 4096 Nov 25 2007 usr -rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php -rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar -rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid -rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf $

Здесь записи, начинающиеся с d.....представляют каталоги. Например, uml, univ и urlspedia - это каталоги, а остальные записи - файлы.

Кто ты?

Пока вы вошли в систему, вы, возможно, захотите узнать: Who am I?

Самый простой способ узнать «кто вы» - это ввести whoami команда -

$ whoami amrood $

Попробуйте в своей системе. Эта команда отображает имя учетной записи, связанной с текущим логином. Ты можешь попробоватьwho am i команду, а также получить информацию о себе.

Кто авторизован?

Иногда вам может быть интересно узнать, кто одновременно входит в систему на компьютере.

Доступны три команды для получения этой информации в зависимости от того, сколько вы хотите знать о других пользователях: users, who, и w.

$ users amrood bablu qadir $ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu  ttyp2 Oct 4 09:08 (calliope)
qadir  ttyp4 Oct 8 12:09 (dent)

$

Попробуйте wв вашей системе, чтобы проверить вывод. Здесь перечислены сведения, связанные с пользователями, вошедшими в систему.

Выход из системы

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

To log out

  • Просто введите logout в командной строке, и система очистит все и разорвет соединение.

Завершение работы системы

Самый последовательный способ правильно завершить работу системы Unix через командную строку - использовать одну из следующих команд:

Sr.No. Команда и описание
1

halt

Немедленно отключает систему

2

init 0

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

3

init 6

Перезагружает систему, полностью выключив ее, а затем перезапустив

4

poweroff

Выключает систему путем выключения

5

reboot

Перезагружает систему

6

shutdown

Выключает систему

Обычно вам нужно быть суперпользователем или root (самая привилегированная учетная запись в системе Unix), чтобы завершить работу системы. Однако на некоторых автономных или личных Unix-компьютерах это может сделать администратор, а иногда и обычные пользователи.

В этой главе мы подробно обсудим управление файлами в Unix. Все данные в Unix организованы в файлы. Все файлы организованы в каталоги. Эти каталоги организованы в древовидную структуру, называемую файловой системой.

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

В Unix есть три основных типа файлов:

  • Ordinary Files- Обычный файл - это файл в системе, содержащий данные, текст или инструкции программы. В этом руководстве вы узнаете, как работать с обычными файлами.

  • Directories- В каталогах хранятся как специальные, так и обычные файлы. Для пользователей, знакомых с Windows или Mac OS, каталоги Unix эквивалентны папкам.

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

Листинг файлов

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

$ls

Вот пример вывода вышеуказанной команды -

$ls

bin        hosts  lib     res.03
ch07       hw1    pub     test_results
ch07.bak   hw2    res.01  users
docs       hw3    res.02  work

Команда ls поддерживает -l вариант, который поможет вам получить больше информации о перечисленных файлах -

$ls -l
total 1962188

drwxrwxr-x  2 amrood amrood      4096 Dec 25 09:59 uml
-rw-rw-r--  1 amrood amrood      5341 Dec 25 08:38 uml.jpg
drwxr-xr-x  2 amrood amrood      4096 Feb 15  2006 univ
drwxr-xr-x  2 root   root        4096 Dec  9  2007 urlspedia
-rw-r--r--  1 root   root      276480 Dec  9  2007 urlspedia.tar
drwxr-xr-x  8 root   root        4096 Nov 25  2007 usr
drwxr-xr-x  2    200    300      4096 Nov 25  2007 webthumb-1.01
-rwxr-xr-x  1 root   root        3192 Nov 25  2007 webthumb.php
-rw-rw-r--  1 amrood amrood     20480 Nov 25  2007 webthumb.tar
-rw-rw-r--  1 amrood amrood      5654 Aug  9  2007 yourfile.mid
-rw-rw-r--  1 amrood amrood    166255 Aug  9  2007 yourfile.swf
drwxr-xr-x 11 amrood amrood      4096 May 29  2007 zlib-1.2.3
$

Вот информация обо всех перечисленных столбцах -

  • First Column- Представляет тип файла и разрешение, данное для файла. Ниже приводится описание всех типов файлов.

  • Second Column - Представляет количество блоков памяти, занятых файлом или каталогом.

  • Third Column- представляет владельца файла. Это пользователь Unix, создавший этот файл.

  • Fourth Column- представляет группу владельца. У каждого пользователя Unix будет своя группа.

  • Fifth Column - Представляет размер файла в байтах.

  • Sixth Column - Представляет дату и время, когда этот файл был создан или изменен в последний раз.

  • Seventh Column - Представляет имя файла или каталога.

в ls -l В листинге примера каждая строка файла начинается с d, -, или же l. Эти символы указывают на тип файла в списке.

Sr.No. Префикс и описание
1

-

Обычный файл, например текстовый файл ASCII, двоичный исполняемый файл или жесткая ссылка.

2

b

Заблокировать специальный файл. Блокировать файл устройства ввода / вывода, например, физический жесткий диск.

3

c

Специальный файл символов. Необработанный файл устройства ввода / вывода, например, физический жесткий диск.

4

d

Файл каталога, содержащий список других файлов и каталогов.

5

l

Файл символьной ссылки. Ссылки на любой обычный файл.

6

p

Именованная труба. Механизм межпроцессного взаимодействия.

7

s

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

Метасимволы

В Unix метасимволы имеют особое значение. Например,* и ?являются метасимволами. Мы используем* для соответствия 0 или более символов знак вопроса (?) соответствует одному символу.

Например -

$ls ch*.doc

Отображает все файлы, имена которых начинаются с ch и закончить .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc ch02-1.doc c

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

$ls *.doc

Скрытые файлы

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

Некоторые распространенные примеры скрытых файлов включают файлы -

  • .profile - Сценарий инициализации оболочки Bourne (sh)

  • .kshrc - Скрипт инициализации оболочки Korn (ksh)

  • .cshrc - Сценарий инициализации оболочки C (csh)

  • .rhosts - Файл конфигурации удаленной оболочки

Чтобы перечислить невидимые файлы, укажите -a возможность ls -

$ ls -a

.         .profile       docs     lib     test_results
..        .rhosts        hosts    pub     users
.emacs    bin            hw1      res.01  work
.exrc     ch07           hw2      res.02
.kshrc    ch07.bak       hw3      res.03
$
  • Single dot (.) - Представляет текущий каталог.

  • Double dot (..) - Это родительский каталог.

Создание файлов

Вы можете использовать viредактор для создания обычных файлов в любой системе Unix. Вам просто нужно дать следующую команду -

$ vi filename

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

This is unix file....I created it for the first time.....
I'm going to save this content in this file.

Когда вы закончите работу с программой, выполните следующие действия:

  • Нажмите кнопку esc выйти из режима редактирования.

  • Нажмите две клавиши Shift + ZZ вместе, чтобы полностью выйти из файла.

Теперь у вас будет файл, созданный с помощью filename в текущем каталоге.

$ vi filename $

Редактирование файлов

Вы можете редактировать существующий файл, используя viредактор. Мы кратко обсудим, как открыть существующий файл -

$ vi filename

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

  • l ключ для перехода в правую сторону.

  • h ключ для перехода в левую сторону.

  • k ключ для перемещения вверх по файлу.

  • j клавиша для перемещения вниз по файлу.

Таким образом, используя указанные выше клавиши, вы можете разместить курсор в любом месте, где хотите редактировать. После того, как вы разместились, вы можете использоватьiклавиша перехода в режим редактирования. Когда вы закончите редактирование своего файла, нажмитеEsc и наконец два ключа Shift + ZZ вместе, чтобы полностью выйти из файла.

Отображение содержимого файла

Вы можете использовать catкоманда, чтобы увидеть содержимое файла. Ниже приведен простой пример, чтобы увидеть содержимое созданного выше файла.

$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$

Вы можете отобразить номера строк, используя -b вариант вместе с cat команда следующим образом -

$ cat -b filename
1   This is unix file....I created it for the first time.....
2   I'm going to save this content in this file.
$

Подсчет слов в файле

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

$ wc filename
2  19 103 filename
$

Вот детали всех четырех столбцов -

  • First Column - Представляет общее количество строк в файле.

  • Second Column - Представляет общее количество слов в файле.

  • Third Column- Представляет общее количество байтов в файле. Это фактический размер файла.

  • Fourth Column - представляет имя файла.

Вы можете передать несколько файлов и получать информацию об этих файлах одновременно. Ниже приводится простой синтаксис -

$ wc filename1 filename2 filename3

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

Чтобы сделать копию файла, используйте cpкоманда. Основной синтаксис команды -

$ cp source_file destination_file

Ниже приведен пример создания копии существующего файла. filename.

$ cp filename copyfile
$

Теперь вы найдете еще один файл copyfileв вашем текущем каталоге. Этот файл будет точно таким же, как и исходный.filename.

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

Чтобы изменить имя файла, используйте mvкоманда. Ниже приведен основной синтаксис -

$ mv old_file new_file

Следующая программа переименует существующий файл filename к newfile.

$ mv filename newfile $

В mvкоманда полностью переместит существующий файл в новый файл. В этом случае вы найдете толькоnewfile в вашем текущем каталоге.

Удаление файлов

Чтобы удалить существующий файл, используйте rmкоманда. Ниже приведен основной синтаксис -

$ rm filename

Caution- Файл может содержать полезную информацию. Всегда рекомендуется соблюдать осторожность при использовании этогоDeleteкоманда. Лучше использовать-i вариант вместе с rm команда.

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

$ rm filename
$

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

$ rm filename1 filename2 filename3
$

Стандартные потоки Unix

В нормальных условиях каждая программа Unix имеет три потока (файла), открытых для нее при запуске:

  • stdin- Это называется стандартным вводом, и связанный дескриптор файла равен 0. Он также представлен как STDIN. Программа Unix будет читать ввод по умолчанию из STDIN.

  • stdout- Это называется стандартным выводом, и связанный дескриптор файла равен 1. Он также представлен как STDOUT. Программа Unix запишет вывод по умолчанию в STDOUT.

  • stderr- Это называется стандартной ошибкой, и связанный дескриптор файла - 2. Он также представлен как STDERR. Программа Unix будет записывать все сообщения об ошибках в STDERR.

В этой главе мы подробно обсудим управление каталогами в Unix.

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

Unix использует иерархическую структуру для организации файлов и каталогов. Эту структуру часто называют деревом каталогов. Дерево имеет единственный корневой узел, символ косой черты (/), а все остальные каталоги находятся под ним.

Домашний каталог

Каталог, в котором вы попадаете при первом входе в систему, называется вашим домашним каталогом.

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

Вы можете зайти в свой домашний каталог в любое время, используя следующую команду -

$cd ~
$

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

$cd ~username
$

Чтобы перейти в свой последний каталог, вы можете использовать следующую команду -

$cd -
$

Абсолютные / относительные пути

Каталоги расположены в иерархии с корнем (/) наверху. Положение любого файла в иерархии описывается его путем.

Элементы путевого имени разделяются символом /. Имя пути является абсолютным, если оно описывается по отношению к корню, поэтому абсолютные имена пути всегда начинаются с символа /.

Ниже приведены несколько примеров абсолютных имен файлов.

/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3

Имя пути также может относиться к вашему текущему рабочему каталогу. Относительные пути никогда не начинаются с /. По отношению к домашнему каталогу пользователя amrood некоторые пути могут выглядеть так:

chem/notes
personal/res

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

$pwd
/user0/home/amrood

$

Листинговые каталоги

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

$ls dirname

Ниже приведен пример списка всех файлов, содержащихся в /usr/local каталог -

$ls /usr/local

X11       bin          gimp       jikes       sbin
ace       doc          include    lib         share
atalk     etc          info       man         ami

Создание каталогов

Теперь мы поймем, как создавать каталоги. Каталоги создаются следующей командой -

$mkdir dirname

Здесь каталог - это абсолютный или относительный путь к каталогу, который вы хотите создать. Например, команда -

$mkdir mydir $

Создает каталог mydirв текущем каталоге. Вот еще один пример -

$mkdir /tmp/test-dir $

Эта команда создает каталог test-dir в /tmpкаталог. Вmkdir Команда не выводит ничего, если успешно создает запрошенный каталог.

Если вы укажете более одного каталога в командной строке, mkdirсоздает каждый из каталогов. Например, -

$mkdir docs pub $

Создает каталоги docs и pub в текущем каталоге.

Создание родительских каталогов

Теперь мы поймем, как создавать родительские каталоги. Иногда, когда вы хотите создать каталог, его родительский каталог или каталоги могут не существовать. В этом случае,mkdir выдает сообщение об ошибке следующего вида -

$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory $

В таких случаях вы можете указать -p вариант для mkdirкоманда. Он создает для вас все необходимые каталоги. Например -

$mkdir -p /tmp/amrood/test $

Приведенная выше команда создает все необходимые родительские каталоги.

Удаление каталогов

Каталоги можно удалить с помощью rmdir команда следующим образом -

$rmdir dirname $

Note - Чтобы удалить каталог, убедитесь, что он пуст, что означает, что внутри этого каталога не должно быть никаких файлов или подкаталогов.

Вы можете удалить несколько каталогов за раз следующим образом:

$rmdir dirname1 dirname2 dirname3 $

Приведенная выше команда удаляет каталоги dirname1, dirname2 и dirname3, если они пусты. Вrmdir команда не производит никаких результатов, если она успешна.

Смена каталогов

Вы можете использовать cd, чтобы сделать больше, чем просто перейти в домашний каталог. Вы можете использовать его для перехода в любой каталог, указав действительный абсолютный или относительный путь. Синтаксис приведен ниже -

$cd dirname $

Вот, dirnameэто имя каталога, в который вы хотите перейти. Например, команда -

$cd /usr/local/bin $

Изменения в каталоге /usr/local/bin. Из этого каталога вы можетеcd в каталог /usr/home/amrood используя следующий относительный путь -

$cd ../../home/amrood $

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

В mv (move)Команда также может использоваться для переименования каталога. Синтаксис следующий -

$mv olddir newdir $

Вы можете переименовать каталог mydir к yourdir следующим образом -

$mv mydir yourdir $

Справочники. (точка) и .. (точка)

В filename .(точка) представляет текущий рабочий каталог; иfilename .. (точка точка) представляет каталог на один уровень выше текущего рабочего каталога, часто называемый родительским каталогом.

Если мы введем команду, чтобы показать список текущих рабочих каталогов / файлов и использовать -a option чтобы перечислить все файлы и -l option чтобы предоставить длинный листинг, мы получим следующий результат.

$ls -la drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 . drwxr-xr-x 60 root 1536 Jul 13 14:18 .. ---------- 1 teacher class 4210 May 1 08:27 .profile -rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo $

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

  • Owner permissions - Разрешения владельца определяют, какие действия владелец файла может выполнять с файлом.

  • Group permissions - Разрешения группы определяют, какие действия пользователь, который является членом группы, к которой принадлежит файл, может выполнять с файлом.

  • Other (world) permissions - Разрешения для других указывают, какие действия все другие пользователи могут выполнять с файлом.

Индикаторы разрешений

При использовании ls -l команда, она отображает различную информацию, связанную с правами доступа к файлам, следующим образом:

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

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

Разрешения разбиты на группы по три, и каждая позиция в группе обозначает конкретное разрешение в следующем порядке: чтение (r), запись (w), выполнение (x) -

  • Первые три символа (2–4) представляют разрешения для владельца файла. Например,-rwxr-xr-- означает, что владелец имеет права на чтение (r), запись (w) и выполнение (x).

  • Вторая группа из трех символов (5-7) состоит из разрешений для группы, которой принадлежит файл. Например,-rwxr-xr-- означает, что группа имеет разрешение на чтение (r) и выполнение (x), но не на запись.

  • Последняя группа из трех символов (8-10) представляет разрешения для всех остальных. Например,-rwxr-xr-- представляет, что есть read (r) только разрешение.

Режимы доступа к файлам

Права доступа к файлу - это первая линия защиты системы Unix. Основными строительными блоками разрешений Unix являютсяread, write, и execute разрешения, которые были описаны ниже -

Читать

Предоставляет возможность читать, т. Е. Просматривать содержимое файла.

Написать

Предоставляет возможность изменять или удалять содержимое файла.

Выполнить

Пользователь с правами на выполнение может запускать файл как программу.

Режимы доступа к каталогу

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

Читать

Доступ к каталогу означает, что пользователь может читать содержимое. Пользователь может посмотреть наfilenames внутри каталога.

Написать

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

Выполнить

Выполнение каталога на самом деле не имеет смысла, поэтому думайте об этом как о разрешении на обход.

Пользователь должен иметь execute доступ к bin каталог, чтобы выполнить ls или cd команда.

Изменение разрешений

Чтобы изменить права доступа к файлу или каталогу, используйте chmod(изменить режим) команда. Есть два способа использовать chmod - символьный режим и абсолютный режим.

Использование chmod в символьном режиме

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

Sr.No. Оператор chmod и описание
1

+

Добавляет назначенные разрешения к файлу или каталогу.

2

-

Удаляет назначенные разрешения из файла или каталога.

3

=

Устанавливает назначенные разрешения.

Вот пример использования testfile. Бегls -1 в тестовом файле показывает, что права доступа к файлу следующие:

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

Тогда каждый пример chmod команда из предыдущей таблицы запускается в тестовом файле, за которой следует ls –l, чтобы вы могли видеть изменения разрешений -

$chmod o+wx testfile $ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile $ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g = rx testfile $ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

Вот как вы можете объединить эти команды в одной строке -

$chmod o+wx,u-x,g = rx testfile $ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

Использование chmod с абсолютными разрешениями

Второй способ изменить разрешения с помощью команды chmod - использовать номер для указания каждого набора разрешений для файла.

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

номер Восьмеричное представление разрешений Ссылка
0 Отсутствует разрешение ---
1 Выполнить разрешение --Икс
2 Разрешение на запись -w-
3 Разрешение на выполнение и запись: 1 (выполнение) + 2 (запись) = 3 -wx
4 Разрешение на чтение р--
5 Разрешение на чтение и выполнение: 4 (чтение) + 1 (выполнение) = 5 rx
6 Разрешение на чтение и запись: 4 (чтение) + 2 (запись) = 6 rw-
7 Все права: 4 (чтение) + 2 (запись) + 1 (выполнение) = 7 rwx

Вот пример использования тестового файла. Бегls -1 в тестовом файле показывает, что права доступа к файлу следующие:

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

Тогда каждый пример chmod команда из предыдущей таблицы запускается в тестовом файле, за которой следует ls –l, чтобы вы могли видеть изменения разрешений -

$ chmod 755 testfile
$ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile
$ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile
$ls -l testfile
----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile

Смена владельцев и групп

При создании учетной записи в Unix он назначает owner ID и group IDкаждому пользователю. Все упомянутые выше разрешения также назначаются на основе Владельца и Группы.

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

  • chown - The chown команда означает "change owner" и используется для смены владельца файла.

  • chgrp - The chgrp команда означает "change group" и используется для изменения группы файла.

Смена владельца

В chownкоманда меняет владельца файла. Основной синтаксис выглядит следующим образом -

$ chown user filelist

Ценность пользователя может быть либо name of a user в системе или user id (uid) пользователя в системе.

Следующий пример поможет вам понять концепцию -

$ chown amrood testfile $

Меняет владельца данного файла на пользователя amrood.

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

Изменение группового владения

В chgrpкоманда изменяет групповое владение файлом. Основной синтаксис выглядит следующим образом -

$ chgrp group filelist

Ценность группы может быть name of a group в системе или the group ID (GID) группы в системе.

Следующий пример поможет вам понять концепцию -

$ chgrp special testfile
$

Изменяет группу данного файла на special группа.

Разрешение файлов SUID и SGID

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

Например, когда вы меняете пароль с помощью passwd команда, ваш новый пароль сохраняется в файле /etc/shadow.

Как обычный пользователь, у вас нет read или же writeдоступ к этому файлу из соображений безопасности, но когда вы меняете пароль, вам необходимо иметь разрешение на запись в этот файл. Это означает, чтоpasswd программа должна предоставить вам дополнительные разрешения, чтобы вы могли записывать в файл /etc/shadow.

Дополнительные разрешения предоставляются программам через механизм, известный как Set User ID (SUID) и Set Group ID (SGID) биты.

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

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

Биты SUID и SGID появятся в виде буквы "s"если разрешение доступно. SUID"s" бит будет расположен в битах разрешений, где владельцы execute разрешение обычно находится.

Например, команда -

$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
$

Показывает, что бит SUID установлен и что команда принадлежит корню. Заглавная букваS в позиции выполнения вместо строчной s указывает, что бит выполнения не установлен.

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

  • Владелец прикрепленного каталога
  • Владелец удаляемого файла
  • Суперпользователь, root

Чтобы установить биты SUID и SGID для любого каталога, попробуйте следующую команду -

$ chmod ug+s dirname
$ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $

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

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

Например, сначала мы устанавливаем переменную TEST, а затем получаем доступ к ее значению с помощью echo команда -

$TEST="Unix Programming" $echo $TEST

Это дает следующий результат.

Unix Programming

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

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

  • /etc/profile
  • profile

Процесс выглядит следующим образом -

  • Оболочка проверяет, не /etc/profile существует.

  • Если он существует, оболочка его читает. В противном случае этот файл пропускается. Сообщение об ошибке не отображается.

  • Оболочка проверяет, не .profileсуществует в вашем домашнем каталоге. Ваш домашний каталог - это каталог, в котором вы начинаете работу после входа в систему.

  • Если он существует, оболочка его читает; в противном случае оболочка его пропускает. Сообщение об ошибке не отображается.

Как только оба этих файла будут прочитаны, оболочка отобразит приглашение -

$

Это приглашение, в котором вы можете вводить команды для их выполнения.

Note - Подробный процесс инициализации оболочки применим ко всем Bourne типа оболочки, но некоторые дополнительные файлы используются bash и ksh.

Файл .profile

The file /etc/profile is maintained by the system administrator of your Unix machine and contains shell initialization information required by all users on a system.

The file .profile is under your control. You can add as much shell customization information as you want to this file. The minimum set of information that you need to configure includes −

  • The type of terminal you are using.
  • A list of directories in which to locate the commands.
  • A list of variables affecting the look and feel of your terminal.

You can check your .profile available in your home directory. Open it using the vi editor and check all the variables set for your environment.

Setting the Terminal Type

Usually, the type of terminal you are using is automatically configured by either the login or getty programs. Sometimes, the auto configuration process guesses your terminal incorrectly.

If your terminal is set incorrectly, the output of the commands might look strange, or you might not be able to interact with the shell properly.

To make sure that this is not the case, most users set their terminal to the lowest common denominator in the following way −

$TERM=vt100 $

Setting the PATH

When you type any command on the command prompt, the shell has to locate the command before it can be executed.

The PATH variable specifies the locations in which the shell should look for commands. Usually the Path variable is set as follows −

$PATH=/bin:/usr/bin $

Here, each of the individual entries separated by the colon character (:) are directories. If you request the shell to execute a command and it cannot find it in any of the directories given in the PATH variable, a message similar to the following appears −

$hello hello: not found $

There are variables like PS1 and PS2 which are discussed in the next section.

PS1 and PS2 Variables

The characters that the shell displays as your command prompt are stored in the variable PS1. You can change this variable to be anything you want. As soon as you change it, it'll be used by the shell from that point on.

For example, if you issued the command −

$PS1='=>'
=>
=>
=>

Your prompt will become =>. To set the value of PS1 so that it shows the working directory, issue the command −

=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$

The result of this command is that the prompt displays the user's username, the machine's name (hostname), and the working directory.

There are quite a few escape sequences that can be used as value arguments for PS1; try to limit yourself to the most critical so that the prompt does not overwhelm you with information.

Sr.No. Escape Sequence & Description
1

\t

Current time, expressed as HH:MM:SS

2

\d

Current date, expressed as Weekday Month Date

3

\n

Newline

4

\s

Current shell environment

5

\W

Working directory

6

\w

Full path of the working directory

7

\u

Current user’s username

8

\h

Hostname of the current machine

9

\#

Command number of the current command. Increases when a new command is entered

10

\$

If the effective UID is 0 (that is, if you are logged in as root), end the prompt with the # character; otherwise, use the $ sign

You can make the change yourself every time you log in, or you can have the change made automatically in PS1 by adding it to your .profile file.

When you issue a command that is incomplete, the shell will display a secondary prompt and wait for you to complete the command and hit Enter again.

The default secondary prompt is > (the greater than sign), but can be changed by re-defining the PS2 shell variable −

Following is the example which uses the default secondary prompt −

$ echo "this is a > test" this is a test $

The example given below re-defines PS2 with a customized prompt −

$ PS2="secondary prompt->" $ echo "this is a
secondary prompt->test"
this is a
test
$

Environment Variables

Following is the partial list of important environment variables. These variables are set and accessed as mentioned below −

Sr.No. Variable & Description
1

DISPLAY

Contains the identifier for the display that X11 programs should use by default.

2

HOME

Indicates the home directory of the current user: the default argument for the cd built-in command.

3

IFS

Indicates the Internal Field Separator that is used by the parser for word splitting after expansion.

4

LANG

LANG expands to the default system locale; LC_ALL can be used to override this. For example, if its value is pt_BR, then the language is set to (Brazilian) Portuguese and the locale to Brazil.

5

LD_LIBRARY_PATH

A Unix system with a dynamic linker, contains a colonseparated list of directories that the dynamic linker should search for shared objects when building a process image after exec, before searching in any other directories.

6

PATH

Indicates the search path for commands. It is a colon-separated list of directories in which the shell looks for commands.

7

PWD

Indicates the current working directory as set by the cd command.

8

RANDOM

Generates a random integer between 0 and 32,767 each time it is referenced.

9

SHLVL

Increments by one each time an instance of bash is started. This variable is useful for determining whether the built-in exit command ends the current session.

10

TERM

Refers to the display type.

11

TZ

Refers to Time zone. It can take values like GMT, AST, etc.

12

UID

Expands to the numeric user ID of the current user, initialized at the shell startup.

Following is the sample example showing few environment variables −

$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $

In this chapter, we will discuss in detail about Printing and Email as the basic utilities of Unix. So far, we have tried to understand the Unix OS and the nature of its basic commands. In this chapter, we will learn some important Unix utilities that can be used in our day-to-day life.

Печать файлов

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

Многие версии Unix включают два мощных средства форматирования текста, nroff и troff.

PR-команда

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

Ниже приводится синтаксис pr команда -

pr option(s) filename(s)

В prизменяет формат файла только на экране или на распечатанной копии; он не изменяет исходный файл. В следующей таблице перечислены некоторыеpr варианты -

Sr.No. Вариант и описание
1

-k

Производит k столбцы вывода

2

-d

Двойные пробелы в выводе (не на всех pr версии)

3

-h "header"

Принимает следующий элемент в качестве заголовка отчета

4

-t

Устраняет печать заголовка и верхнего / нижнего полей

5

-l PAGE_LENGTH

Устанавливает длину страницы в PAGE_LENGTH (66) строк. Количество строк текста по умолчанию - 56.

6

-o MARGIN

Смещает каждую строку пробелами MARGIN (ноль)

7

-w PAGE_WIDTH

Устанавливает ширину страницы в PAGE_WIDTH (72) символа только для вывода нескольких текстовых столбцов

Перед использованием pr, вот содержимое файла образца с именем food.

$cat food Sweet Tooth Bangkok Wok Mandalay Afghani Cuisine Isle of Java Big Apple Deli Sushi and Sashimi Tio Pepe's Peppers ........ $

Давайте использовать prкоманда для создания двухколоночного отчета с заголовком Рестораны -

$pr -2 -h "Restaurants" food Nov 7 9:58 1997 Restaurants Page 1 Sweet Tooth Isle of Java Bangkok Wok Big Apple Deli Mandalay Sushi and Sashimi Afghani Cuisine Tio Pepe's Peppers ........ $

Команды lp и lpr

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

Ваш системный администратор, вероятно, установил на вашем сайте принтер по умолчанию. Чтобы напечатать файл с именемfood на принтере по умолчанию используйте lp или же lpr команда, как в следующем примере -

$lp food request id is laserp-525 (1 file) $

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

  • Если вы используете lp команду, вы можете использовать -nNumвозможность распечатать количество копий. Вместе с командойlpr, вы можете использовать -Num для того же.

  • Если к общей сети подключено несколько принтеров, вы можете выбрать принтер с помощью -dprinter параметр вместе с командой lp и для той же цели вы можете использовать -Pprinterвариант вместе с командой lpr. Здесь принтер - это имя принтера.

Команды lpstat и lpq

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

Использовать lpstat -oесли вы хотите видеть все выходные запросы, кроме ваших собственных. Запросы отображаются в том порядке, в котором они будут напечатаны -

$lpstat -o laserp-573 john 128865 Nov 7 11:27 on laserp laserp-574 grace 82744 Nov 7 11:28 laserp-575 john 23347 Nov 7 11:35 $

В lpq дает немного иную информацию, чем lpstat -o -

$lpq laserp is ready and printing Rank Owner Job Files Total Size active john 573 report.ps 128865 bytes 1st grace 574 ch03.ps ch04.ps 82744 bytes 2nd john 575 standard input 23347 bytes $

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

Команды cancel и lprm

В cancel завершает запрос на печать от lp command. Вlprm команда завершает все lpr requests. Вы можете указать либо идентификатор запроса (отображается lp или lpq), либо имя принтера.

$cancel laserp-575 request "laserp-575" cancelled $

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

$cancel laserp request "laserp-573" cancelled $

В lprmкоманда отменит активное задание, если оно принадлежит вам. В противном случае вы можете указать номера вакансий в качестве аргументов или использоватьdash (-) удалить все ваши рабочие места -

$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $

В lprm Команда сообщает вам фактические имена файлов, удаленные из очереди принтера.

Отправка электронной почты

Вы используете команду почты Unix для отправки и получения почты. Вот синтаксис для отправки электронного письма -

$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr

Вот важные параметры, связанные с почтовыми командами:

Sr.No. Вариант и описание
1

-s

Задает тему в командной строке.

2

-c

Отправляет копии списку пользователей. Список должен быть списком имен, разделенных запятыми.

3

-b

Отправляет слепые копии в список. Список должен быть списком имен, разделенных запятыми.

Ниже приведен пример отправки тестового сообщения на адрес [email protected].

$mail -s "Test Message" [email protected]

Затем вы должны ввести свое сообщение, а затем "control-D"в начале строки. Чтобы остановиться, просто введите точку(.) следующим образом -

Hi,

This is a test
.
Cc:

Вы можете отправить полный файл, используя redirect < operator следующим образом -

$mail -s "Report 05/06/07" [email protected] < demo.txt

Чтобы проверить входящую электронную почту в вашей системе Unix, вы просто набираете электронную почту следующим образом:

$mail
no email

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

Чтобы сделать трубу, поставьте вертикальную планку (|) в командной строке между двумя командами.

Когда программа принимает входные данные из другой программы, она выполняет некоторые операции с этими входными данными и записывает результат в стандартный выходной поток. Это упоминается какfilter.

Команда grep

Команда grep ищет в файле или файлах строки с определенным шаблоном. Синтаксис -

$grep pattern file(s)

Название "grep" поступает из команды ed (строковый редактор Unix) g/re/p что означает «глобальный поиск регулярного выражения и печать всех содержащих его строк».

Регулярное выражение - это простой текст (например, слово) и / или специальные символы, используемые для сопоставления с образцом.

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

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Существуют различные варианты, которые вы можете использовать вместе с grep команда -

Sr.No. Вариант и описание
1

-v

Печатает все строки, не соответствующие шаблону.

2

-n

Печатает совпавшую строку и ее номер.

3

-l

Печатает только имена файлов с совпадающими строками (буква "l")

4

-c

Печатает только количество совпадающих строк.

5

-i

Соответствует верхнему или нижнему регистру.

Давайте теперь воспользуемся регулярным выражением, которое сообщает grep искать строки с "carol", за которым следует ноль или другие символы, сокращенные в регулярном выражении как «. *»), за которым следует «Aug».

Здесь мы используем -i возможность иметь поиск без учета регистра -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Команда сортировки

В sortкоманда размещает строки текста в алфавитном или числовом порядке. В следующем примере сортируются строки в файле еды -

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

В sortКоманда по умолчанию упорядочивает строки текста в алфавитном порядке. Есть много опций, которые контролируют сортировку -

Sr.No. Описание
1

-n

Сортировка численно (пример: 10 отсортирует после 2), игнорирует пробелы и табуляции.

2

-r

Изменяет порядок сортировки на обратный.

3

-f

Сортировка прописных и строчных букв вместе.

4

+x

Сначала игнорирует x поля при сортировке.

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

Следующий канал состоит из команд ls, grep, и sort -

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

Этот канал сортирует все файлы в вашем каталоге, измененные в августе, по порядку размера и печатает их на экране терминала. Параметр сортировки + 4n пропускает четыре поля (поля разделяются пробелами), а затем сортирует строки в числовом порядке.

Команды pg и другие

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

Предположим, у вас есть длинный список каталогов. Чтобы упростить чтение отсортированного списка, направьте вывод черезmore следующим образом -

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

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

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

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

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

Операционная система отслеживает процессы с помощью пятизначного идентификационного номера, известного как pid или process ID. Каждый процесс в системе имеет уникальныйpid.

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

Запуск процесса

Когда вы запускаете процесс (запускаете команду), вы можете запустить его двумя способами:

  • Процессы переднего плана
  • Фоновые процессы

Процессы переднего плана

По умолчанию каждый запускаемый процесс выполняется на переднем плане. Он получает ввод с клавиатуры и отправляет вывод на экран.

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

$ls ch*.doc

Это отобразит все файлы, имена которых начинаются с ch и закончить .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

Процесс выполняется на переднем плане, вывод направляется на мой экран, и если ls команде нужен какой-либо ввод (чего нет), она ожидает его с клавиатуры.

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

Фоновые процессы

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

Преимущество запуска процесса в фоновом режиме состоит в том, что вы можете запускать другие команды; вам не нужно ждать его завершения, чтобы начать новый!

Самый простой способ запустить фоновый процесс - добавить амперсанд (&) в конце команды.

$ls ch*.doc &

Это отображает все те файлы, имена которых начинаются с ch и закончить .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

Здесь, если ls команде требуется какой-либо ввод (чего нет), она переходит в состояние остановки, пока мы не переместим ее на передний план и не передадим ей данные с клавиатуры.

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

Нажмите клавишу Enter, и вы увидите следующее -

[1]   +   Done                 ls ch*.doc &
$

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

Список запущенных процессов

Легко увидеть свои собственные процессы, запустив ps (статус процесса) команду следующим образом -

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

Один из наиболее часто используемых флагов для ps - это -f (f для полного), который предоставляет дополнительную информацию, как показано в следующем примере -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f

Вот описание всех полей, отображаемых ps -f команда -

Sr.No. Колонка и описание
1

UID

ID пользователя, которому принадлежит этот процесс (лицо, которое его запускает)

2

PID

ID процесса

3

PPID

ID родительского процесса (идентификатор процесса, который его запустил)

4

C

Загрузка ЦП процесса

5

STIME

Время начала процесса

6

TTY

Тип терминала, связанный с процессом

7

TIME

Процессорное время, затрачиваемое процессом

8

CMD

Команда, запустившая этот процесс

Есть и другие варианты, которые можно использовать вместе с ps команда -

Sr.No. Вариант и описание
1

-a

Показывает информацию обо всех пользователях

2

-x

Показывает информацию о процессах без терминалов

3

-u

Показывает дополнительную информацию, например параметр -f

4

-e

Отображает расширенную информацию

Остановка процессов

Завершить процесс можно несколькими способами. Часто из консольной команды отправка нажатия клавиш CTRL + C (символ прерывания по умолчанию) завершает команду. Это работает, когда процесс выполняется в режиме переднего плана.

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

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

Здесь kill команда завершает first_oneпроцесс. Если процесс игнорирует обычную команду kill, вы можете использоватьkill -9 за которым следует идентификатор процесса следующим образом -

$kill -9 6738
Terminated

Родительские и дочерние процессы

Каждому процессу unix присвоено два идентификатора: идентификатор процесса (pid) и идентификатор родительского процесса (ppid). У каждого пользовательского процесса в системе есть родительский процесс.

У большинства команд, которые вы запускаете, оболочка является родительской. Проверитьps -f пример, где эта команда перечисляет как идентификатор процесса, так и идентификатор родительского процесса.

Зомби и сиротские процессы

Обычно, когда дочерний процесс убит, родительский процесс обновляется через SIGCHLDсигнал. Затем родитель может выполнить другую задачу или при необходимости перезапустить нового ребенка. Однако иногда родительский процесс уничтожается до того, как убит его дочерний процесс. В этом случае «родитель всех процессов»initпроцесса, становится новым PPID (ID родительского процесса). В некоторых случаях эти процессы называют бесхозными.

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

Демонические процессы

Демоны - это системные фоновые процессы, которые часто выполняются с разрешениями root и обслуживают запросы от других процессов.

У демона нет управляющего терминала. Не может открыться/dev/tty. Если вы сделаете"ps -ef" и посмотрите на tty поле, все демоны будут иметь ? для tty.

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

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

Верхняя команда

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

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

Вот простой синтаксис для запуска команды top и просмотра статистики использования ЦП различными процессами:

$top

Идентификатор задания по сравнению с идентификатором процесса

Фоновые и приостановленные процессы обычно управляются через job number (job ID). Этот номер отличается от идентификатора процесса и используется, потому что он короче.

Кроме того, задание может состоять из нескольких процессов, выполняемых последовательно или одновременно, параллельно. Использовать идентификатор задания проще, чем отслеживать отдельные процессы.

В этой главе мы подробно обсудим утилиты сетевой связи в Unix. Когда вы работаете в распределенной среде, вам необходимо общаться с удаленными пользователями, а также вам нужен доступ к удаленным машинам Unix.

Существует несколько утилит Unix, которые помогают пользователям выполнять вычисления в сетевой распределенной среде. В этой главе перечислены некоторые из них.

Утилита ping

В pingКоманда отправляет эхо-запрос на хост, доступный в сети. Используя эту команду, вы можете проверить, хорошо ли отвечает ваш удаленный хост.

Команда ping полезна для следующего:

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

Синтаксис

Ниже приводится простой синтаксис использования команды ftp:

$ping hostname or ip-address

Вышеупомянутая команда начинает печатать ответ каждую секунду. Чтобы выйти из команды, вы можете прервать ее, нажавCNTRL + C ключи.

пример

Ниже приведен пример проверки доступности хоста, доступного в сети.

$ping google.com PING google.com (74.125.67.100) 56(84) bytes of data. 64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms 64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms 64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms 64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms 64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms --- google.com ping statistics --- 22 packets transmitted, 22 received, 0% packet loss, time 21017ms rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms $

Если хост не существует, вы получите следующий вывод -

$ping giiiiiigle.com ping: unknown host giiiiigle.com $

Утилита ftp

Вот, ftp означает File Tперевод Pпротокол. Эта утилита помогает загружать и скачивать файл с одного компьютера на другой.

Утилита ftp имеет собственный набор Unix-подобных команд. Эти команды помогут вам выполнять такие задачи, как -

  • Подключитесь и войдите на удаленный хост.

  • Перемещайтесь по каталогам.

  • Список содержимого каталога.

  • Ставить и получать файлы.

  • Передавать файлы как ascii, ebcdic или же binary.

Синтаксис

Ниже приводится простой синтаксис использования команды ftp:

$ftp hostname or ip-address

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

В следующих таблицах перечислены несколько важных команд -

Sr.No. Команда и описание
1

put filename

Загружает имя файла с локального компьютера на удаленный.

2

get filename

Загружает имя файла с удаленного компьютера на локальный.

3

mput file list

Загружает более одного файла с локального компьютера на удаленный.

4

mget file list

Загружает более одного файла с удаленного компьютера на локальный.

5

prompt off

Отключает подсказку. По умолчанию вы получите запрос на загрузку или скачивание файлов с помощьюmput или же mget команды.

6

prompt on

Включает подсказку.

7

dir

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

8

cd dirname

Изменяет каталог на имя каталога на удаленном компьютере.

9

lcd dirname

Меняет каталог на имя каталога на локальном компьютере.

10

quit

Помогает выйти из текущего логина.

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

пример

Ниже приведен пример, показывающий работу нескольких команд.

$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x   3 amrood   group       1024 Mar 11 20:04 Mail
drwxr-sr-x   2 amrood   group       1536 Mar  3 18:07 Misc
drwxr-sr-x   5 amrood   group        512 Dec  7 10:59 OldStuff
drwxr-sr-x   2 amrood   group       1024 Mar 11 15:24 bin
drwxr-sr-x   5 amrood   group       3072 Mar 13 16:10 mpl
-rw-r--r--   1 amrood   group     209671 Mar 15 10:57 myfile.out
drwxr-sr-x   3 amrood   group        512 Jan  5 13:32 public
drwxr-sr-x   3 amrood   group        512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r--   1 amrood   group       1630 Aug  8 1994  dboard.f
-rw-r-----   1 amrood   group       4340 Jul 17 1994  vttest.c
-rwxr-xr-x   1 amrood   group     525574 Feb 15 11:52 wave_shift
-rw-r--r--   1 amrood   group       1648 Aug  5 1994  wide.list
-rwxr-xr-x   1 amrood   group       4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$

Утилита telnet

Бывают случаи, когда от нас требуется подключиться к удаленной машине Unix и работать на ней удаленно. Telnet - это служебная программа, которая позволяет пользователю компьютера на одном сайте устанавливать соединение, входить в систему и затем выполнять работу на компьютере на другом сайте.

После входа в систему с помощью Telnet вы можете выполнять все действия на удаленно подключенной машине. Ниже приведен пример сеанса Telnet -

C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.

login: amrood
amrood's Password: 
*****************************************************
*                                                   *
*                                                   *
*    WELCOME TO AMROOD.COM                          *
*                                                   *
*                                                   *
*****************************************************

Last unsuccessful login: Fri Mar  3 12:01:09 IST 2009
Last login: Wed Mar  8 18:33:27 IST 2009 on pts/10

   {  do your work }

$ logout
Connection closed.
C:>

Утилита finger

В fingerКоманда отображает информацию о пользователях на данном хосте. Хост может быть локальным или удаленным.

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

Ниже приведен простой синтаксис для использования команды finger:

Проверьте всех вошедших в систему пользователей на локальном компьютере -

$ finger
Login     Name       Tty      Idle  Login Time   Office
amrood               pts/0          Jun 25 08:03 (62.61.164.115)

Получите информацию о конкретном пользователе, доступном на локальном компьютере -

$ finger amrood
Login: amrood                           Name: (null)
Directory: /home/amrood                 Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.

Проверьте всех вошедших в систему пользователей на удаленном компьютере -

$ finger @avtar.com
Login     Name       Tty      Idle  Login Time   Office
amrood               pts/0          Jun 25 08:03 (62.61.164.115)

Получите информацию о конкретном пользователе, доступную на удаленном компьютере -

$ finger [email protected]
Login: amrood                           Name: (null)
Directory: /home/amrood                 Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.

В этой главе мы поймем, как работает редактор vi в Unix. Есть много способов редактировать файлы в Unix. Редактирование файлов с помощью текстового редактора, ориентированного на экранviэто один из лучших способов. Этот редактор позволяет вам редактировать строки в контексте с другими строками в файле.

Улучшенная версия редактора vi, которая называется VIMтакже стал доступен сейчас. Здесь VIM означаетVi IMдоказано.

vi обычно считается стандартом де-факто в редакторах Unix, потому что -

  • Обычно он доступен во всех разновидностях системы Unix.

  • Его реализации во всем очень похожи.

  • Это требует очень мало ресурсов.

  • Он более удобен, чем другие редакторы, такие как ed или ex.

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

Запуск редактора vi

В следующей таблице перечислены основные команды для использования редактора vi -

Sr.No. Команда и описание
1

vi filename

Создает новый файл, если он уже не существует, в противном случае открывает существующий файл.

2

vi -R filename

Открывает существующий файл в режиме только для чтения.

3

view filename

Открывает существующий файл в режиме только для чтения.

Ниже приведен пример создания нового файла. testfile если его уже нет в текущем рабочем каталоге -

$vi testfile

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

|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]

Вы заметите tilde(~) в каждой строке после курсора. Тильда обозначает неиспользуемую строку. Если строка не начинается с тильды и кажется пустой, это означает наличие пробела, табуляции, новой строки или другого невидимого для просмотра символа.

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

Режимы работы

При работе с редактором vi мы обычно сталкиваемся со следующими двумя режимами:

  • Command mode- Этот режим позволяет вам выполнять административные задачи, такие как сохранение файлов, выполнение команд, перемещение курсора, вырезание (восстановление) и вставка строк или слов, а также поиск и замена. В этом режиме все, что вы вводите, интерпретируется как команда.

  • Insert mode- Этот режим позволяет вставлять текст в файл. Все, что вводится в этом режиме, интерпретируется как ввод и помещается в файл.

vi всегда начинается в command mode. Чтобы ввести текст, вы должны быть в режиме вставки, для чего просто введитеi. Чтобы выйти из режима вставки, нажмите кнопкуEsc клавиша, которая вернет вас в командный режим.

Hint- Если вы не уверены, в каком режиме находитесь, дважды нажмите клавишу Esc; это переведет вас в командный режим. Вы открываете файл с помощью редактора vi. Начните с ввода нескольких символов, а затем перейдите в командный режим, чтобы понять разницу.

Выход из vi

Команда выхода из vi: :q. В командном режиме введите двоеточие и «q», а затем - return. Если ваш файл был каким-либо образом изменен, редактор предупредит вас об этом и не позволит вам выйти. Чтобы проигнорировать это сообщение, нужно выйти из vi без сохранения.:q!. Это позволяет вам выйти из vi без сохранения каких-либо изменений.

Команда для сохранения содержимого редактора: :w. Вы можете объединить указанную выше команду с командой выхода или использовать:wq и вернуться.

Самый простой способ save your changes and exit viнаходится с командой ZZ. Когда вы находитесь в командном режиме, введитеZZ. ВZZ команда работает так же, как и :wq команда.

Если вы хотите указать / указать какое-либо конкретное имя для файла, вы можете сделать это, указав его после :w. Например, если вы хотите сохранить файл, над которым работали, как другое имя файла с именемfilename2, вы должны ввести :w filename2 и вернуться.

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

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

Sr.No. Команда и описание
1

k

Перемещает курсор на одну строку вверх

2

j

Перемещает курсор на одну строку вниз

3

h

Перемещает курсор влево на одну позицию символа

4

l

Перемещает курсор вправо на одну позицию символа

При перемещении внутри файла необходимо учитывать следующие моменты:

  • vi чувствителен к регистру. При использовании команд нужно обращать внимание на использование заглавных букв.

  • Перед большинством команд в vi можно указать количество раз, которое вы хотите, чтобы действие выполнялось. Например,2j перемещает курсор на две строки вниз от позиции курсора.

Есть много других способов перемещения внутри файла в vi. Помните, что вы должны находиться в командном режиме (press Esc twice). В следующей таблице перечислены несколько команд для перемещения по файлу.

Sr.No. Команда и описание
1

0 or |

Устанавливает курсор в начало строки

2

$

Помещает курсор в конец строки

3

w

Устанавливает курсор на следующее слово

4

b

Перемещает курсор к предыдущему слову

5

(

Помещает курсор в начало текущего предложения

6

)

Помещает курсор в начало следующего предложения

7

E

Переход к концу слова с разделителями-пробелами

8

{

Перемещает абзац назад

9

}

Перемещает абзац вперед

10

[[

Перемещает раздел назад

11

]]

Перемещает раздел вперед

12

n|

Переходит в столбец n в текущей строке

13

1G

Переход к первой строке файла

14

G

Переход к последней строке файла

15

nG

Переходит в nth строка файла

16

:n

Переходит в nth строка файла

17

fc

Движется вперед к c

18

Fc

Возвращается к c

19

H

Переход в верхнюю часть экрана

20

nH

Переходит в nth линия от верхнего края экрана

21 год

M

Перемещается в середину экрана

22

L

Перейти в нижнюю часть экрана

23

nL

Переходит в nth линия снизу экрана

24

:x

Двоеточие, за которым следует число, поместит курсор на номер строки, представленный x

Команды управления

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

Sr.No. Команда и описание
1

CTRL+d

Перемещение вперед на 1/2 экрана

2

CTRL+f

Перемещение на один полный экран вперед

3

CTRL+u

Перемещение на 1/2 экрана назад

4

CTRL+b

Переход на один полный экран назад

5

CTRL+e

Перемещает экран на одну строку вверх

6

CTRL+y

Перемещает экран на одну строку вниз

7

CTRL+u

Перемещает экран вверх на 1/2 страницы

8

CTRL+d

Перемещает экран вниз на 1/2 страницы

9

CTRL+b

Перемещает экран на одну страницу вверх

10

CTRL+f

Перемещает экран на одну страницу вниз

11

CTRL+I

Перерисовывает экран

Редактирование файлов

Чтобы отредактировать файл, вам необходимо находиться в режиме вставки. Есть много способов войти в режим вставки из командного режима -

Sr.No. Команда и описание
1

i

Вставляет текст перед текущим положением курсора

2

I

Вставляет текст в начало текущей строки

3

a

Вставляет текст после текущего местоположения курсора

4

A

Вставляет текст в конец текущей строки

5

o

Создает новую строку для ввода текста под курсором

6

O

Создает новую строку для ввода текста над положением курсора

Удаление персонажей

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

Sr.No. Команда и описание
1

x

Удаляет символ под курсором

2

X

Удаляет символ перед положением курсора

3

dw

Удаляет от текущего местоположения курсора до следующего слова

4

d^

Удаляет от текущей позиции курсора до начала строки

5

d$

Удаляет от текущей позиции курсора до конца строки

6

D

Удаляет от позиции курсора до конца текущей строки

7

dd

Удаляет строку, на которой находится курсор

Как упоминалось выше, перед большинством команд в vi можно указать количество раз, которое вы хотите, чтобы действие выполнялось. Например,2x удаляет два символа под курсором и 2dd удаляет две строки, на которых находится курсор.

Перед тем, как продолжить, рекомендуется потренироваться в командах.

Изменить команды

У вас также есть возможность изменять символы, слова или строки в vi, не удаляя их. Вот соответствующие команды -

Sr.No. Команда и описание
1

cc

Удаляет содержимое строки, оставляя вас в режиме вставки.

2

cw

Изменяет слово, на котором находится курсор, с курсора на строчные w конец слова.

3

r

Заменяет символ под курсором. vi возвращается в командный режим после ввода замены.

4

R

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

5

s

Заменяет текущий символ набираемым вами символом. После этого вы останетесь в режиме вставки.

6

S

Удаляет строку, в которой находится курсор, и заменяет ее новым текстом. После ввода нового текста vi остается в режиме вставки.

Команды копирования и вставки

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

Sr.No. Команда и описание
1

yy

Копирует текущую строку.

2

yw

Копирует текущее слово из символа, на котором установлен курсор в нижнем регистре, до конца слова.

3

p

Помещает скопированный текст после курсора.

4

P

Помещает выделенный текст перед курсором.

Расширенные команды

Есть несколько расширенных команд, которые упрощают повседневное редактирование и позволяют более эффективно использовать vi -

Sr.No. Команда и описание
1

J

Присоединяет текущую строку к следующей. Количество j команд соединяет многие строки.

2

<<

Сдвигает текущую строку влево на ширину смещения.

3

>>

Сдвигает текущую строку вправо на ширину сдвига.

4

~

Переключение регистра символа под курсором.

5

^G

Одновременно нажмите клавиши Ctrl и G, чтобы показать текущее имя файла и статус.

6

U

Восстанавливает текущую строку в состояние, в котором она была до того, как курсор вошел в строку.

7

u

Это помогает отменить последнее изменение, внесенное в файл. Повторный ввод «u» приведет к повторному внесению изменений.

8

J

Присоединяет текущую строку к следующей. Счетчик присоединяется к такому количеству строк.

9

:f

Отображает текущую позицию в файле в% и имя файла, общее количество файлов.

10

:f filename

Переименовывает текущий файл в имя файла.

11

:w filename

Записывает в файл filename.

12

:e filename

Открывает другой файл с именем файла.

13

:cd dirname

Изменяет текущий рабочий каталог на dirname.

14

:e #

Переключение между двумя открытыми файлами.

15

:n

Если вы открываете несколько файлов с помощью vi, используйте :n для перехода к следующему файлу в серии.

16

:p

Если вы открываете несколько файлов с помощью vi, используйте :p для перехода к предыдущему файлу в серии.

17

:N

Если вы открываете несколько файлов с помощью vi, используйте :N для перехода к предыдущему файлу в серии.

18

:r file

Читает файл и вставляет его после текущей строки.

19

:nr file

Читает файл и вставляет его после строки n.

Поиск слов и символов

В редакторе vi есть два вида поиска: string и character. Для строкового поиска/ и ?используются команды. Когда вы запускаете эти команды, только что набранная команда будет отображаться в последней строке экрана, где вы вводите конкретную строку для поиска.

Эти две команды отличаются только направлением поиска -

  • В / Команда ищет в файле вперед (вниз).

  • В ? Команда ищет в файле назад (вверх).

В n и Nкоманды повторяют предыдущую команду поиска в том же или противоположном направлении соответственно. Некоторые символы имеют особое значение. Перед этими символами должна стоять обратная косая черта (\) для включения в поисковое выражение.

Sr.No. Характер и описание
1

^

Ищет в начале строки (Используйте в начале поискового выражения).

2

.

Соответствует одиночному символу.

3

*

Соответствует нулю или более предыдущих символов.

4

$

Конец строки (используйте в конце поискового выражения).

5

[

Запускает набор совпадающих или несовпадающих выражений.

6

<

Это вставляется в выражение, экранированное обратной косой чертой, чтобы найти конец или начало слова.

7

>

Это помогает увидеть '<'описание персонажа выше.

При поиске символов выполняется поиск в пределах одной строки, чтобы найти символ, введенный после команды. Вf и F команды ищут символ только в текущей строке. f ищет вперед и F поиск в обратном направлении, и курсор переместится в позицию найденного символа.

В t и T команды ищут символ только в текущей строке, но для t, курсор переместится в позицию перед символом и T выполняет поиск по строке в обратном направлении до позиции после символа.

Установить команды

Вы можете изменить внешний вид экрана vi, используя следующие :setкоманды. Как только вы войдете в командный режим, введите:set за которым следует любая из следующих команд.

Sr.No. Команда и описание
1

:set ic

Игнорирует регистр при поиске

2

:set ai

Устанавливает автоотступ

3

:set noai

Снимает автоиндент

4

:set nu

Отображает строки с номерами строк с левой стороны

5

:set sw

Устанавливает ширину табуляции программного обеспечения. Например, вы бы установили ширину сдвига 4 с помощью этой команды -:set sw = 4

6

:set ws

Если установлено wrapscan и слово не найдено в нижней части файла, он попытается найти его в начале.

7

:set wm

Если этот параметр имеет значение больше нуля, редактор автоматически выполнит «перенос по словам». Например, чтобы установить для поля обтекания два символа, введите следующее::set wm = 2

8

:set ro

Изменяет тип файла на "только для чтения"

9

:set term

Печатает тип терминала

10

:set bf

Удаляет управляющие символы из ввода

Запуск команд

Vi имеет возможность запускать команды из редактора. Чтобы запустить команду, вам нужно только перейти в командный режим и ввести:! команда.

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

Вы можете нажать любую клавишу (или escape-последовательность команды), чтобы вернуться в сеанс vi.

Замена текста

Команда подстановки (:s/) позволяет быстро заменять слова или группы слов в файлах. Ниже приведен синтаксис для замены текста -

:s/search/replace/g

В gозначает глобально. Результатом этой команды является изменение всех вхождений в строке курсора.

Важные моменты, на которые следует обратить внимание

Следующие пункты добавят к вашему успеху с vi -

  • Чтобы использовать команды, вы должны находиться в командном режиме. (В любой момент дважды нажмите Esc, чтобы убедиться, что вы находитесь в командном режиме.)

  • Вы должны быть осторожны с командами. Они чувствительны к регистру.

  • Для ввода текста вы должны находиться в режиме вставки.

А Shellпредоставляет вам интерфейс к системе Unix. Он собирает данные от вас и выполняет программы на их основе. Когда программа завершает выполнение, она отображает вывод этой программы.

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

Подсказка оболочки

Подсказка, $, который называется command prompt, выдается оболочкой. Пока отображается запрос, вы можете ввести команду.

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

Ниже приводится простой пример date команда, которая отображает текущую дату и время -

$date
Thu Jun 25 08:30:19 MST 2009

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

Типы оболочки

В Unix есть два основных типа оболочек:

  • Bourne shell - Если вы используете оболочку типа Борна, $ символ - приглашение по умолчанию.

  • C shell - Если вы используете оболочку C-типа, по умолчанию используется символ%.

Bourne Shell имеет следующие подкатегории -

  • Оболочка Борна (ш)
  • Корн оболочка (кш)
  • Bourne Again оболочка (bash)
  • Оболочка POSIX (sh)

Следуют различные оболочки C-типа -

  • Оболочка C (csh)
  • Оболочка TENEX / TOPS C (tcsh)

Первоначальная оболочка Unix была написана в середине 1970-х Стивеном Р. Борном, когда он работал в AT&T Bell Labs в Нью-Джерси.

Оболочка Борна была первой оболочкой, появившейся в системах Unix, поэтому ее называют «оболочкой».

Оболочка Bourne обычно устанавливается как /bin/shв большинстве версий Unix. По этой причине это оболочка выбора для написания сценариев, которые можно использовать в разных версиях Unix.

В этой главе мы собираемся охватить большинство концепций Shell, основанных на Borne Shell.

Скрипты оболочки

Основная концепция сценария оболочки - это список команд, перечисленных в порядке выполнения. У хорошего сценария оболочки будут комментарии, которым предшествует# знак, описывающий шаги.

Существуют условные тесты, например, значение A больше значения B, циклы, позволяющие нам просматривать огромные объемы данных, файлы для чтения и хранения данных и переменные для чтения и хранения данных, а сценарий может включать функции.

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

И сценарии оболочки, и функции интерпретируются. Это означает, что они не компилируются.

Пример сценария

Предположим, мы создаем test.shсценарий. Обратите внимание, что все сценарии будут иметь.shрасширение. Прежде чем добавлять что-либо еще в свой сценарий, необходимо предупредить систему о запуске сценария оболочки. Это делается с помощьюshebangпостроить. Например -

#!/bin/sh

Это сообщает системе, что следующие команды должны выполняться оболочкой Bourne. Это называется шебанг, потому что#символ называется хешем, а символ! символ называется челкой .

Чтобы создать сценарий, содержащий эти команды, вы сначала помещаете строку shebang, а затем добавляете команды -

#!/bin/bash
pwd
ls

Комментарии оболочки

Вы можете поместить свои комментарии в свой сценарий следующим образом -

#!/bin/bash

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls

Сохраните вышеуказанный контент и сделайте скрипт исполняемым -

$chmod +x test.sh

Сценарий оболочки теперь готов к выполнению -

$./test.sh

После выполнения вы получите следующий результат -

/home/amrood
index.htm  unix-basic_utilities.htm  unix-directories.htm  
test.sh    unix-communication.htm    unix-environment.htm

Note - Чтобы выполнить программу, доступную в текущем каталоге, используйте ./program_name

Расширенные сценарии оболочки

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

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

В следующем скрипте используется read команда, которая принимает ввод с клавиатуры и присваивает его как значение переменной PERSON и, наконец, печатает его на STDOUT.

#!/bin/sh

# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:

echo "What is your name?"
read PERSON
echo "Hello, $PERSON"

Вот пример запуска скрипта -

$./test.sh What is your name? Zara Ali Hello, Zara Ali $

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

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

Имена переменных

Имя переменной может содержать только буквы (от a до z или от A до Z), цифры (от 0 до 9) или символ подчеркивания (_).

По соглашению, переменные оболочки Unix будут иметь свои имена в ВЕРХНЕМ РЕГИСТРЕ.

Следующие примеры являются допустимыми именами переменных -

_ALI
TOKEN_A
VAR_1
VAR_2

Ниже приведены примеры недопустимых имен переменных -

2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!

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

Определение переменных

Переменные определяются следующим образом -

variable_name=variable_value

Например -

NAME="Zara Ali"

В приведенном выше примере определяется переменная NAME и присваивается ей значение «Zara Ali». Переменные этого типа называютсяscalar variables. Скалярная переменная может одновременно содержать только одно значение.

Shell позволяет вам хранить любое значение, которое вы хотите, в переменной. Например -

VAR1="Zara Ali"
VAR2=100

Доступ к значениям

Чтобы получить доступ к значению, хранящемуся в переменной, поставьте перед ее именем знак доллара ($) -

Например, следующий скрипт получит доступ к значению определенной переменной NAME и распечатает его на STDOUT -

#!/bin/sh

NAME="Zara Ali"
echo $NAME

Приведенный выше сценарий выдаст следующее значение -

Zara Ali

Переменные только для чтения

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

Например, следующий скрипт генерирует ошибку при попытке изменить значение NAME -

#!/bin/sh

NAME="Zara Ali"
readonly NAME
NAME="Qadiri"

Приведенный выше сценарий сгенерирует следующий результат -

/bin/sh: NAME: This variable is read only.

Удаление переменных

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

Ниже приведен синтаксис для отмены установки определенной переменной с помощью unset команда -

unset variable_name

Приведенная выше команда сбрасывает значение определенной переменной. Вот простой пример, демонстрирующий, как работает команда:

#!/bin/sh

NAME="Zara Ali"
unset NAME
echo $NAME

В приведенном выше примере ничего не печатается. Вы не можете использовать команду unset дляunset отмеченные переменные readonly.

Типы переменных

Когда оболочка запущена, присутствуют три основных типа переменных:

  • Local Variables- Локальная переменная - это переменная, которая присутствует в текущем экземпляре оболочки. Он недоступен для программ, запускаемых оболочкой. Они устанавливаются в командной строке.

  • Environment Variables- Переменная среды доступна любому дочернему процессу оболочки. Некоторым программам для правильной работы требуются переменные среды. Обычно сценарий оболочки определяет только те переменные среды, которые необходимы запускаемым им программам.

  • Shell Variables- Переменная оболочки - это специальная переменная, которая устанавливается оболочкой и требуется оболочке для правильной работы. Некоторые из этих переменных являются переменными среды, а другие - локальными.

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

Например, $ символ представляет собой номер идентификатора процесса или PID текущей оболочки -

$echo $$

Приведенная выше команда записывает PID текущей оболочки -

29949

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

Sr.No. Переменная и описание
1

$0

Имя файла текущего скрипта.

2

$n

Эти переменные соответствуют аргументам, с которыми был вызван сценарий. Вотn положительное десятичное число, соответствующее позиции аргумента (первый аргумент - $1, the second argument is $2 и т. Д.).

3

$#

Количество аргументов, предоставленных сценарию.

4

$*

Все аргументы заключены в двойные кавычки. Если сценарий получает два аргумента,$* is equivalent to $1 доллар 2.

5

$@

Все аргументы отдельно взяты в двойные кавычки. Если сценарий получает два аргумента,$@ is equivalent to $1 доллар 2.

6

$?

Статус выхода последней выполненной команды.

7

$$

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

8

$!

Номер процесса последней фоновой команды.

Аргументы командной строки

Аргументы командной строки $1, $2, $3, ...$9 - позиционные параметры, причем $0 pointing to the actual command, program, shell script, or function and $1, $2, $3, ... $ 9 в качестве аргументов команды.

Следующий скрипт использует различные специальные переменные, связанные с командной строкой -

#!/bin/sh

echo "File Name: $0"
echo "First Parameter : $1" echo "Second Parameter : $2"
echo "Quoted Values: $@" echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

Вот пример выполнения вышеуказанного скрипта -

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

Специальные параметры $* and $@

Есть специальные параметры, позволяющие получить доступ ко всем аргументам командной строки сразу. $* и $@ оба будут действовать одинаково, если они не заключены в двойные кавычки, "".

Оба параметра указывают аргументы командной строки. Тем не менее "$*" special parameter takes the entire list as one argument with spaces between and the "$@ "специальный параметр берет весь список и разделяет его на отдельные аргументы.

Мы можем написать сценарий оболочки, как показано ниже, для обработки неизвестного числа аргументов командной строки с помощью $* or $@ специальные параметры -

#!/bin/sh

for TOKEN in $* do echo $TOKEN
done

Вот пример выполнения вышеуказанного скрипта -

$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old

Note - здесь do...done это своего рода цикл, который будет рассмотрен в следующем руководстве.

Статус выхода

В $? Переменная представляет собой статус выхода предыдущей команды.

Статус выхода - это числовое значение, возвращаемое каждой командой после ее завершения. Как правило, большинство команд возвращают статус выхода 0, если они были успешными, и 1, если они не были успешными.

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

Ниже приведен пример успешной команды -

$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $

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

Shell поддерживает переменные другого типа, называемые array variable. Это может содержать несколько значений одновременно. Массивы предоставляют метод группировки набора переменных. Вместо того, чтобы создавать новое имя для каждой необходимой переменной, вы можете использовать одну переменную массива, в которой хранятся все остальные переменные.

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

Определение значений массива

Разницу между переменной массива и скалярной переменной можно объяснить следующим образом.

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

NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"

Мы можем использовать один массив для хранения всех упомянутых выше имен. Ниже приведен простейший метод создания переменной массива. Это помогает присвоить значение одному из его индексов.

array_name[index]=value

Здесь имя_массива - это имя массива, индекс - это индекс элемента в массиве, который вы хотите установить, а значение - это значение, которое вы хотите установить для этого элемента.

В качестве примера следующие команды -

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"

Если вы используете ksh shell, вот синтаксис инициализации массива -

set -A array_name value1 value2 ... valuen

Если вы используете bash shell, вот синтаксис инициализации массива -

array_name=(value1 ... valuen)

Доступ к значениям массива

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

${array_name[index]}

Здесь array_name - это имя массива, а index - это индекс значения, к которому нужно получить доступ. Ниже приведен пример для понимания концепции -

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

В приведенном выше примере будет получен следующий результат -

$./test.sh
First Index: Zara
Second Index: Qadir

Вы можете получить доступ ко всем элементам в массиве одним из следующих способов:

${array_name[*]} ${array_name[@]}

Вот array_name - это имя интересующего вас массива. Следующий пример поможет вам понять концепцию -

#!/bin/sh

NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"

В приведенном выше примере будет получен следующий результат -

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy

Каждая оболочка поддерживает различные операторы. В этой главе мы подробно обсудим оболочку Bourne (оболочку по умолчанию).

Теперь мы обсудим следующие операторы -

  • Арифметические операторы
  • Операторы отношения
  • Булевы операторы
  • Строковые операторы
  • Операторы проверки файлов

В оболочке Bourne изначально не было механизма для выполнения простых арифметических операций, но она также использует внешние программы. awk или же expr.

В следующем примере показано, как сложить два числа -

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

Приведенный выше сценарий сгенерирует следующий результат -

Total value : 4

При добавлении необходимо учитывать следующие моменты:

  • Между операторами и выражениями должны быть пробелы. Например, 2 + 2 неверно; он должен быть записан как 2 + 2.

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

Арифметические операторы

Bourne Shell поддерживает следующие арифметические операторы.

Предположим переменную a содержит 10 и переменную b держит 20, тогда -

Показать примеры

Оператор Описание пример
+ (Дополнение) Добавляет значения по обе стороны от оператора `expr $a + $б` даст 30
- (Вычитание) Вычитает правый операнд из левого операнда `expr $a - $b` даст -10
* (Умножение) Умножает значения по обе стороны от оператора `expr $a \* $b` даст 200
/ (Деление) Делит левый операнд на правый операнд `expr $b / $a` даст 2
% (Модуль) Делит левый операнд на правый и возвращает остаток `expr $b % $a` даст 0
= (Назначение) Назначает правый операнд левому операнду a = $ b присвоит значение b элементу a
== (Равенство) Сравнивает два числа, если они одинаковы, возвращает истину. [$ a == $ b] вернет false.
! = (Не равенство) Сравнивает два числа, если они разные, возвращает истину. [$ a! = $ b] вернет истину.

Очень важно понимать, что все условные выражения должны быть внутри квадратных скобок с пробелами вокруг них, например [ $a == $b ] правильно, тогда как [$a==$b] это неверно.

Все арифметические вычисления производятся с использованием длинных целых чисел.

Операторы отношения

Bourne Shell поддерживает следующие операторы отношения, относящиеся к числовым значениям. Эти операторы не работают для строковых значений, если их значение не является числовым.

Например, следующие операторы будут работать для проверки отношения между 10 и 20, а также между «10» и «20», но не между «десять» и «двадцать».

Предположим переменную a содержит 10 и переменную b держит 20, тогда -

Показать примеры

Оператор Описание пример
-eq Проверяет, равны ли значения двух операндов; если да, то условие выполняется. [$ a -eq $ b] неверно.
-ne Проверяет, равны ли значения двух операндов; если значения не равны, то условие становится истинным. [$ a -ne $ b] верно.
-gt Проверяет, больше ли значение левого операнда, чем значение правого операнда; если да, то условие выполняется. [$ a -gt $ b] неверно.
-lt Проверяет, меньше ли значение левого операнда, чем значение правого операнда; если да, то условие выполняется. [$ a -lt $ b] верно.
-ge Проверяет, больше ли значение левого операнда или равно значению правого операнда; если да, то условие выполняется. [$ a -ge $ b] неверно.
-le Проверяет, меньше ли значение левого операнда или равно значению правого операнда; если да, то условие выполняется. [$ a -le $ b] верно.

Очень важно понимать, что все условные выражения должны быть заключены в квадратные скобки с пробелами вокруг них. Например,[ $a <= $b ] правильно, тогда как [$a <= $b] это неверно.

Булевы операторы

Оболочка Борна поддерживает следующие логические операторы.

Предположим переменную a содержит 10 и переменную b держит 20, тогда -

Показать примеры

Оператор Описание пример
! Это логическое отрицание. Это превращает истинное условие в ложное и наоборот. [! false] верно.
-o Это логично OR. Если один из операндов истинен, то условие становится истинным. [$ a -lt 20 -o $ b -gt 100] верно.
-a Это логично AND. Если оба операнда истинны, то условие становится истинным, в противном случае - ложным. [$ a -lt 20 -a $ b -gt 100] неверно.

Строковые операторы

Bourne Shell поддерживает следующие строковые операторы.

Предположим переменную a содержит "abc" и переменную b держит "efg", затем -

Показать примеры

Оператор Описание пример
= Проверяет, равны ли значения двух операндов; если да, то условие выполняется. [$ a = $ b] неверно.
!= Проверяет, равны ли значения двух операндов; если значения не равны, условие становится истинным. [$ a! = $ b] верно.
-z Проверяет, равен ли размер заданного строкового операнда нулю; если длина равна нулю, возвращается истина. [-z $ a] неверно.
-n Проверяет, не равен ли размер заданного строкового операнда нулю; если это ненулевая длина, возвращается истина. [-n $ a] не является ложным.
str Проверяет, если strне пустая строка; если он пуст, то возвращает false. [$ a] не является ложным.

Операторы проверки файлов

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

Предположим переменную file содержит имя существующего файла "test" размером 100 байт и read, write и execute разрешение на -

Показать примеры

Оператор Описание пример
-b file Проверяет, является ли файл специальным блочным файлом; если да, то условие выполняется. [-b $ file] неверно.
-c file Проверяет, является ли файл специальным символьным файлом; если да, то условие выполняется. [-c $ file] неверно.
-d file Проверяет, является ли файл каталогом; если да, то условие выполняется. [-d $ file] неверно.
-f file Проверяет, является ли файл обычным файлом, а не каталогом или специальным файлом; если да, то условие выполняется. [-f $ file] верно.
-g file Проверяет, установлен ли в файле бит установленного идентификатора группы (SGID); если да, то условие выполняется. [-g $ file] неверно.
-k file Проверяет, установлен ли для файла липкий бит; если да, то условие выполняется. [-k $ file] неверно.
-p file Проверяет, является ли файл именованным каналом; если да, то условие выполняется. [-p $ file] неверно.
-t file Проверяет, открыт ли дескриптор файла и связан ли он с терминалом; если да, то условие выполняется. [-t $ file] неверно.
-u file Проверяет, установлен ли в файле бит установки идентификатора пользователя (SUID); если да, то условие выполняется. [-u $ file] неверно.
-r file Проверяет, доступен ли файл для чтения; если да, то условие выполняется. [-r $ file] верно.
-w file Проверяет, доступен ли файл для записи; если да, то условие выполняется. [-w $ file] верно.
-x file Проверяет, является ли файл исполняемым; если да, то условие выполняется. [-x $ file] верно.
-s file Проверяет, имеет ли файл размер больше 0; если да, то условие выполняется. [-s $ file] верно.
-e file Проверяет, существует ли файл; верно, даже если файл является каталогом, но существует. [-e $ file] верно.

Операторы оболочки C

Следующая ссылка даст вам краткое представление об операторах оболочки C -

Операторы оболочки C

Операторы Korn Shell

Следующая ссылка поможет вам понять операторов оболочки Korn -

Операторы Korn Shell

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

Unix Shell поддерживает условные операторы, которые используются для выполнения различных действий в зависимости от различных условий. Теперь мы поймем два утверждения о принятии решений здесь -

  • В if...else заявление

  • В case...esac заявление

Операторы if ... else

Операторы if else являются полезными операторами принятия решений, которые можно использовать для выбора варианта из заданного набора параметров.

Unix Shell поддерживает следующие формы if…else заявление -

  • если ... fi заявление
  • if ... else ... fi заявление
  • if ... elif ... else ... fi заявление

Большинство операторов if проверяют отношения с помощью операторов отношения, которые обсуждались в предыдущей главе.

Дело ... Заявление esac

Вы можете использовать несколько if...elifоператоры для выполнения многосторонней ветки. Однако это не всегда лучшее решение, особенно когда все ветви зависят от значения одной переменной.

Unix Shell поддерживает case...esac оператор, который обрабатывает именно эту ситуацию, и делает это более эффективно, чем повторение if...elif заявления.

Есть только одна форма case...esac заявление, которое было подробно описано здесь -

  • case ... esac инструкция

В case...esac оператор в оболочке Unix очень похож на switch...case выражение, которое есть в других языках программирования, например C или же C++ и PERL, и т.д.

В этой главе мы обсудим циклы оболочки в Unix. Цикл - это мощный инструмент программирования, который позволяет многократно выполнять набор команд. В этой главе мы рассмотрим следующие типы циклов, доступные программистам оболочки:

  • Цикл while
  • Цикл for
  • Цикл до
  • Выбор цикла

Вы будете использовать разные петли в зависимости от ситуации. Например,whileцикл выполняет заданные команды до тех пор, пока данное условие не останется истинным; вuntil цикл выполняется до тех пор, пока данное условие не станет истинным.

Когда у вас будет хорошая практика программирования, вы приобретете опыт и, таким образом, начнете использовать соответствующий цикл в зависимости от ситуации. Вот,while и for циклы доступны в большинстве других языков программирования, таких как C, C++ и PERL, и т.д.

Вложенные петли

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

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

Вложение во время циклов

Можно использовать цикл while как часть тела другого цикла while.

Синтаксис

while command1 ; # this is loop1, the outer loop
do
   Statement(s) to be executed if command1 is true

   while command2 ; # this is loop2, the inner loop
   do
      Statement(s) to be executed if command2 is true
   done

   Statement(s) to be executed if command1 is true
done

пример

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

#!/bin/sh

a=0
while [ "$a" -lt 10 ] # this is loop1 do b="$a"
   while [ "$b" -ge 0 ] # this is loop2 do echo -n "$b "
      b=`expr $b - 1` done echo a=`expr $a + 1`
done

Это даст следующий результат. Важно отметить, какecho -nздесь работает. Вот-n опция позволяет echo избегать печати символа новой строки.

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0

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

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

  • В break заявление

  • В continue заявление

Бесконечный цикл

У всех циклов ограниченный срок службы, и они выходят, когда условие ложно или истинно, в зависимости от цикла.

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

пример

Вот простой пример, в котором while цикл для отображения чисел от нуля до девяти -

#!/bin/sh

a=10

until [ $a -lt 10 ] do echo $a
   a=`expr $a + 1`
done

Этот цикл продолжается вечно, потому что a всегда greater than или же equal to 10 и никогда не меньше 10.

Заявление о перерыве

В breakОператор используется для завершения выполнения всего цикла после завершения выполнения всех строк кода до оператора break. Затем он переходит к коду, который следует за концом цикла.

Синтаксис

Следующее break оператор используется для выхода из цикла -

break

Команду break также можно использовать для выхода из вложенного цикла в этом формате -

break n

Вот n определяет nth замыкающий цикл до выхода из.

пример

Вот простой пример, который показывает, что цикл завершается, как только a становится 5 -

#!/bin/sh

a=0

while [ $a -lt 10 ]
do
   echo $a if [ $a -eq 5 ]
   then
      break
   fi
   a=`expr $a + 1`
done

После выполнения вы получите следующий результат -

0
1
2
3
4
5

Вот простой пример вложенного цикла for. Этот скрипт выходит из обоих циклов, еслиvar1 equals 2 и var2 equals 0 -

#!/bin/sh

for var1 in 1 2 3
do
   for var2 in 0 5
   do
      if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2"
      fi
   done
done

После выполнения вы получите следующий результат. Во внутреннем цикле у вас есть команда break с аргументом 2. Это указывает на то, что если условие выполнено, вы должны выйти из внешнего цикла и, в конечном итоге, из внутреннего цикла.

1 0
1 5

Заявление о продолжении

В continue заявление похоже на break команда, за исключением того, что она вызывает выход из текущей итерации цикла, а не из всего цикла.

Этот оператор полезен, когда произошла ошибка, но вы хотите попробовать выполнить следующую итерацию цикла.

Синтаксис

continue

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

continue n

Вот n определяет nth охватывающий цикл, с которого нужно продолжить.

пример

В следующем цикле используется continue оператор, который возвращается из оператора continue и начинает обработку следующего оператора -

#!/bin/sh

NUMS="1 2 3 4 5 6 7"

for NUM in $NUMS
do
   Q=`expr $NUM % 2` if [ $Q -eq 0 ]
   then
      echo "Number is an even number!!"
      continue
   fi
   echo "Found odd number"
done

После выполнения вы получите следующий результат -

Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number

Что такое подмена?

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

пример

Здесь печатное значение переменной заменяется ее значением. В то же время,"\n" заменяется новой строкой -

#!/bin/sh

a=10
echo -e "Value of a is $a \n"

Вы получите следующий результат. Здесь-e опция включает интерпретацию экранирования обратной косой черты.

Value of a is 10

Ниже приводится результат без -e вариант -

Value of a is 10\n

Вот следующие escape-последовательности, которые можно использовать в команде echo:

Sr.No. Побег и описание
1

\\

обратная косая черта

2

\a

предупреждение (BEL)

3

\b

Backspace

4

\c

подавить завершающую новую строку

5

\f

подача формы

6

\n

новая линия

7

\r

возврат каретки

8

\t

горизонтальная вкладка

9

\v

вертикальная табуляция

Вы можете использовать -E опция, чтобы отключить интерпретацию escape-символов обратной косой черты (по умолчанию).

Вы можете использовать -n возможность отключить вставку новой строки.

Подстановка команд

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

Синтаксис

Подстановка команды выполняется, когда команда задана как -

`command`

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

пример

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

#!/bin/sh

DATE=`date`
echo "Date is $DATE"

USERS=`who | wc -l`
echo "Logged in user are $USERS" UP=`date ; uptime` echo "Uptime is $UP"

После выполнения вы получите следующий результат -

Date is Thu Jul  2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul  2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

Замена переменных

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

Вот следующая таблица для всех возможных замен -

Sr.No. Форма и описание
1

${var}

Подставьте значение var .

2

${var:-word}

Если var имеет значение null или не задано, слово заменяется наvar. Значение var не меняется.

3

${var:=word}

Если var имеет значение null или не задано , var устанавливается значениеword.

4

${var:?message}

Если var имеет значение null или не задано, сообщение выводится со стандартной ошибкой. Это проверяет правильность установки переменных.

5

${var:+word}

Если установлено var , слово заменяется на var. Значение var не меняется.

пример

Ниже приведен пример, показывающий различные состояния вышеуказанной замены.

#!/bin/sh

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}" echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}" unset var echo ${var:+"This is default value"}
echo "3 - Value of var is $var" var="Prefix" echo ${var:+"This is default value"}
echo "4 - Value of var is $var" echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

После выполнения вы получите следующий результат -

Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set

3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix

В этой главе мы подробно обсудим механизмы цитирования Shell. Мы начнем с обсуждения метасимволов.

Метасимволы

Оболочка Unix предоставляет различные метасимволы, которые имеют особое значение при использовании их в любом сценарии оболочки и вызывают завершение слова, если оно не указано в кавычках.

Например, ? соответствует одному символу при перечислении файлов в каталоге и *соответствует более чем одному символу. Вот список большинства специальных символов оболочки (также называемых метасимволами):

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

Символ может быть процитирован (т. Е. Обозначен самим собой), поставив перед ним знак \.

пример

В следующем примере показано, как распечатать * или ? -

#!/bin/sh

echo Hello; Word

После выполнения вы получите следующий результат -

Hello
./test.sh: line 2: Word: command not found

shell returned 127

Давайте теперь попробуем использовать цитируемый символ -

#!/bin/sh

echo Hello\; Word

После выполнения вы получите следующий результат -

Hello; Word

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

#!/bin/sh

echo "I have \$1200"

После выполнения вы получите следующий результат -

I have $1200

В следующей таблице перечислены четыре формы цитирования:

Sr.No. Цитата и описание
1

Single quote

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

2

Double quote

Большинство специальных символов между этими кавычками теряют свое особое значение за следующими исключениями:

  • $
  • `
  • \$
  • \'
  • \"
  • \\
3

Backslash

Любой символ, следующий сразу за обратной косой чертой, теряет свое особое значение.

4

Back quote

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

Одиночные цитаты

Рассмотрим команду echo, которая содержит много специальных символов оболочки -

echo <-$1500.**>; (update?) [y|n]

Установка обратной косой черты перед каждым специальным символом утомительна и затрудняет чтение строки -

echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]

Есть простой способ процитировать большую группу символов. Поместите одинарную кавычку (') в начало и в конец строки -

echo '<-$1500.**>; (update?) [y|n]'

Символы в одинарных кавычках заключаются в кавычки, как если бы перед каждым символом была обратная косая черта. При этом команда echo отображается правильно.

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

echo 'It\'s Shell Programming

Двойные кавычки

Попробуйте выполнить следующий сценарий оболочки. Этот сценарий оболочки использует одинарную кавычку -

VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'

После выполнения вы получите следующий результат -

$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]

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

VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"

После выполнения вы получите следующий результат -

ZARA owes <-$1500.**>; [ as of (07/02) ]

Двойные кавычки забирают особое значение всех символов, кроме следующих:

  • $ для подстановки параметров

  • Обратные кавычки для подстановки команд

  • \$ чтобы включить буквальные знаки доллара

  • \` включить буквальные обратные кавычки

  • \" чтобы включить встроенные двойные кавычки

  • \\ для включения встроенных обратных косых черт

  • Все остальные \ символы являются буквальными (не специальными)

Символы в одинарных кавычках заключаются в кавычки, как если бы перед каждым символом была обратная косая черта. Это помогает правильно отображать команду echo.

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

echo 'It\'s Shell Programming'

Обратные кавычки

Помещение любой команды Shell между backquotes выполняет команду.

Синтаксис

Вот простой синтаксис для установки любой оболочки command между обратными кавычками -

var=`command`

пример

В date команда выполняется в следующем примере, и полученный результат сохраняется в переменной DATA.

DATE=`date`

echo "Current Date: $DATE"

После выполнения вы получите следующий результат -

Current Date: Thu Jul  2 05:28:45 MST 2009

В этой главе мы подробно обсудим перенаправления ввода / вывода Shell. Большинство системных команд Unix принимают входные данные от вашего терминала и отправляют полученные выходные данные обратно на ваш терминал. Команда обычно считывает свой ввод со стандартного ввода, который по умолчанию является вашим терминалом. Точно так же команда обычно записывает свой вывод в стандартный вывод, который снова является вашим терминалом по умолчанию.

Перенаправление вывода

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

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

Проверьте следующее who команда, которая перенаправляет полный вывод команды в файл пользователя.

$ who > users

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

$ cat users
oko         tty01   Sep 12 07:30
ai          tty15   Sep 12 13:32
ruth        tty21   Sep 12 10:10
pat         tty24   Sep 12 13:07
steve       tty25   Sep 12 13:03
$

Если вывод команды перенаправлен в файл, и файл уже содержит некоторые данные, эти данные будут потеряны. Рассмотрим следующий пример -

$ echo line 1 > users
$ cat users line 1 $

Вы можете использовать оператор >> для добавления вывода в существующий файл следующим образом:

$ echo line 2 >> users $ cat users
line 1
line 2
$

Перенаправление ввода

Как вывод команды может быть перенаправлен в файл, так и ввод команды может быть перенаправлен из файла. Посколькуgreater-than character > используется для перенаправления вывода, less-than character < используется для перенаправления ввода команды.

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

$ wc -l users
2 users
$

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

$ wc -l < users
2
$

Обратите внимание, что существует разница в выводе, производимом двумя формами команды wc. В первом случае имена пользователей файла указываются вместе с количеством строк; во втором случае это не так.

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

Здесь документ

А here document используется для перенаправления ввода в сценарий или программу интерактивной оболочки.

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

Общий вид для here документ -

command << delimiter
document
delimiter

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

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

Ниже приведен ввод команды wc -l для подсчета общего количества строк -

$wc -l << EOF
   This is a simple lookup program 
	for good (and bad) restaurants
	in Cape Town.
EOF
3
$

Вы можете использовать here document для печати нескольких строк с помощью вашего скрипта следующим образом -

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF

После выполнения вы получите следующий результат -

This is a simple lookup program
for good (and bad) restaurants
in Cape Town.

Следующий сценарий запускает сеанс с vi текстовый редактор и сохраняет ввод в файл test.txt.

#!/bin/sh

filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands

Если вы запустите этот скрипт с vim, действующим как vi, вы, вероятно, увидите следующий результат:

$ sh test.sh Vim: Warning: Input is not from a terminal $

После запуска скрипта вы должны увидеть следующее, добавленное в файл test.txt -

$ cat test.txt This file was created automatically from a shell script $

Отменить вывод

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

$ command > /dev/null

Здесь команда - это имя команды, которую вы хотите выполнить. Файл/dev/null это специальный файл, который автоматически отбрасывает все введенные данные.

Чтобы отклонить как вывод команды, так и вывод ошибки, используйте стандартное перенаправление для перенаправления STDERR к STDOUT -

$ command > /dev/null 2>&1

Вот 2 представляет собой STDERR и 1 представляет собой STDOUT. Вы можете отобразить сообщение в STDERR, перенаправив STDOUT в STDERR следующим образом:

$ echo message 1>&2

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

Ниже приведен полный список команд, которые вы можете использовать для перенаправления.

Sr.No. Команда и описание
1

pgm > file

Вывод pgm перенаправляется в файл

2

pgm < file

Программа pgm считывает ввод из файла

3

pgm >> file

Вывод pgm добавляется в файл

4

n > file

Вывод из потока с дескриптором n перенаправлен в файл

5

n >> file

Вывод из потока с дескриптором n добавлено к файлу

6

n >& m

Объединяет вывод из потока n с потоком m

7

n <& m

Объединяет ввод из потока n с потоком m

8

<< tag

Стандартный ввод идет отсюда через следующий тег в начале строки

9

|

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

Обратите внимание, что дескриптор файла 0 обычно стандартный ввод (STDIN), 1 стандартный вывод (STDOUT), и 2 стандартный вывод ошибок (STDERR).

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

Использование функций для выполнения повторяющихся задач - отличный способ создать code reuse. Это важная часть современных принципов объектно-ориентированного программирования.

Функции оболочки похожи на подпрограммы, процедуры и функции в других языках программирования.

Создание функций

Чтобы объявить функцию, просто используйте следующий синтаксис -

function_name () { 
   list of commands
}

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

пример

В следующем примере показано использование функции -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

После выполнения вы получите следующий вывод -

$./test.sh
Hello World

Передача параметров функции

Вы можете определить функцию, которая будет принимать параметры при вызове функции. Эти параметры будут представлены как$1, $2 и так далее.

Ниже приведен пример, в котором мы передаем два параметра Зара и Али, а затем фиксируем и печатаем эти параметры в функции.

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

После выполнения вы получите следующий результат -

$./test.sh
Hello World Zara Ali

Возврат значений из функций

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

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

В зависимости от ситуации вы можете вернуть любое значение из своей функции, используя return команда, синтаксис которой следующий -

return code

Вот code здесь может быть что угодно, но, очевидно, вы должны выбрать что-то значимое или полезное в контексте вашего скрипта в целом.

пример

Следующая функция возвращает значение 10 -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$?

echo "Return value is $ret"

После выполнения вы получите следующий результат -

$./test.sh
Hello World Zara Ali
Return value is 10

Вложенные функции

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

Следующий пример демонстрирует вложение двух функций -

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

После выполнения вы получите следующий результат -

This is the first function speaking...
This is now the second function speaking...

Вызов функции из подсказки

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

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

$. test.sh

Это приводит к тому, что функции, определенные внутри test.sh для чтения и определения в текущей оболочке следующим образом:

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

Чтобы удалить определение функции из оболочки, используйте команду unset с .fвариант. Эта команда также используется для удаления определения переменной в оболочке.

$ unset -f function_name

Все команды Unix имеют ряд необязательных и обязательных опций. Очень часто забывают полный синтаксис этих команд.

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

Версия Unix Help files называются man pages. Если есть имя команды, и вы не знаете, как его использовать, то Man Pages поможет вам на каждом этапе.

Синтаксис

Вот простая команда, которая поможет вам получить подробную информацию о любой команде Unix при работе с системой:

$man command

пример

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

$man pwd

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

Вы можете получить полную информацию о man сама команда, используя следующую команду -

$man man

Разделы страницы руководства

Страницы руководства обычно делятся на разделы, которые обычно различаются в зависимости от предпочтений автора страницы руководства. В следующей таблице перечислены некоторые общие разделы -

Sr.No. Раздел и описание
1

NAME

Название команды

2

SYNOPSIS

Общие параметры использования команды

3

DESCRIPTION

Описывает, что делает команда

4

OPTIONS

Описывает все аргументы или параметры команды

5

SEE ALSO

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

6

BUGS

Объясняет любые известные проблемы или ошибки, существующие с командой или ее выходными данными.

7

EXAMPLES

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

8

AUTHORS

Автор страницы / команды man

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

Полезные команды оболочки

Следующая ссылка дает вам список наиболее важных и очень часто используемых команд оболочки Unix.

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

Вот список Unix Shell - Полезные команды

В этой главе мы подробно обсудим регулярные выражения с SED в Unix.

Регулярное выражение - это строка, которая может использоваться для описания нескольких последовательностей символов. Регулярные выражения используются несколькими различными командами Unix, включаяed, sed, awk, grep, и в более ограниченной степени, vi.

Вот SED означает sTream editor. Этот потоково-ориентированный редактор был создан исключительно для выполнения скриптов. Таким образом, весь ввод, который вы в него вводите, проходит через STDOUT и не меняет входной файл.

Вызов sed

Прежде чем мы начнем, убедитесь, что у нас есть локальная копия /etc/passwd текстовый файл для работы с sed.

Как упоминалось ранее, sed можно вызвать, отправив ему данные по каналу следующим образом:

$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression = script
...............................

В cat команда выгружает содержимое /etc/passwd к sedчерез канал в пространство шаблонов sed. Пространство шаблонов - это внутренний рабочий буфер, который sed использует для своих операций.

Общий синтаксис sed

Ниже приведен общий синтаксис sed -

/pattern/action

Вот, pattern является регулярным выражением, а action- одна из команд, приведенных в следующей таблице. Еслиpattern опущено, action выполняется для каждой строки, как мы видели выше.

Символ косой черты (/), окружающий шаблон, является обязательным, поскольку они используются в качестве разделителей.

Sr.No. Ассортимент и описание
1

p

Печатает строку

2

d

Удаляет строку

3

s/pattern1/pattern2/

Заменяет первое вхождение pattern1 на pattern2

Удаление всех строк с помощью sed

Теперь мы поймем, как удалить все строки с помощью sed. Вызвать sed снова; но теперь предполагается, что sed будет использоватьediting command delete line, обозначается одной буквой d -

$ cat /etc/passwd | sed 'd' $

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

Следующая команда делает то же самое, что и в предыдущем примере, без команды cat -

$ sed -e 'd' /etc/passwd $

Адреса sed

Sed также поддерживает адреса. Адреса - это либо определенные места в файле, либо диапазон, в котором должна быть применена конкретная команда редактирования. Когда sed не находит адресов, он выполняет свои операции с каждой строкой файла.

Следующая команда добавляет базовый адрес к команде sed, которую вы использовали:

$ cat /etc/passwd | sed '1d' |more daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $

Обратите внимание, что цифра 1 добавляется перед delete editкоманда. Это инструктирует sed выполнить команду редактирования в первой строке файла. В этом примере sed удалит первую строку/etc/password и распечатайте остальную часть файла.

Диапазоны адресов sed

Теперь разберемся, как работать с the sed address ranges. Так что, если вы хотите удалить более одной строки из файла? Вы можете указать диапазон адресов с помощью sed следующим образом:

$ cat /etc/passwd | sed '1, 5d' |more games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $

Вышеупомянутая команда будет применена ко всем строкам, начиная с 1 по 5. При этом удаляются первые пять строк.

Попробуйте следующие диапазоны адресов -

Sr.No. Ассортимент и описание
1

'4,10d'

Строки с 4- й по 10- ю удаляются.

2

'10,4d'

Удаляется только 10- я строка, т.к. sed не работает в обратном направлении

3

'4,+5d'

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

4

'2,5!d'

Удаляет все, кроме начиная со 2- й по 5- ю строку

5

'1~3d'

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

6

'2~2d'

Это говорит sed удалить вторую строку, перейти к следующей строке, удалить следующую строку и повторять, пока не будет достигнут конец файла.

7

'4,10p'

Строки , начинающиеся с 4 - го по 10 - й печатаемые

8

'4,d'

Это вызывает синтаксическую ошибку

9

',10d'

Это также вызовет синтаксическую ошибку

Note - При использовании p действие, вы должны использовать -nвозможность избежать повторения строчной печати. Проверьте разницу между следующими двумя командами -

$ cat /etc/passwd | sed -n '1,3p' Check the above command without -n as follows − $ cat /etc/passwd | sed '1,3p'

Команда замены

Команда подстановки, обозначенная s, заменит любую указанную вами строку любой другой указанной вами строкой.

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

Следующая команда заменяет первое вхождение в строке строки root со строкой amrood.

$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................

Очень важно отметить, что sed заменяет только первое вхождение в строке. Если корень строки встречается в строке более одного раза, будет заменено только первое совпадение.

Чтобы sed выполнил глобальную замену, добавьте букву g до конца команды следующим образом -

$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...........................

Флаги замены

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

Sr.No. Флаг и описание
1

g

Заменяет все совпадения, а не только первое совпадение

2

NUMBER

Заменяет только NUMBER- е совпадение

3

p

Если подстановка была произведена, то печатает пространство образца

4

w FILENAME

Если была произведена замена, то записывает результат в FILENAME

5

I or i

Соответствует без учета регистра

6

M or m

В дополнение к нормальному поведению специальных символов регулярного выражения ^ и $, this flag causes ^ to match the empty string after a newline and $ чтобы соответствовать пустой строке перед новой строкой

Использование альтернативного разделителя строк

Предположим, вам необходимо выполнить замену в строке, содержащей символ косой черты. В этом случае вы можете указать другой разделитель, указав указанный символ послеs.

$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

В приведенном выше примере мы использовали : как delimiter вместо косой черты / потому что мы пытались искать /root вместо простого корня.

Замена пустым пространством

Используйте пустую строку подстановки, чтобы удалить корневую строку из /etc/passwd файл целиком -

$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

Замена адреса

Если вы хотите заменить строку sh со строкой quiet только в строке 10 вы можете указать это следующим образом -

$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet

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

$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

Как видно из вывода, в первых пяти строках была строка sh изменился на quiet, но остальные строки остались нетронутыми.

Команда соответствия

Вы бы использовали p вариант вместе с -n возможность распечатать все совпадающие строки следующим образом -

$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

Использование регулярного выражения

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

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

$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh

Ниже приведен пример, в котором удаляются все строки, заканчивающиеся на sh -

$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync

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

Sr.No. Характер и описание
1

^

Соответствует началу строк

2

$

Соответствует концу строк

3

.

Соответствует любому одиночному символу

4

*

Соответствует нулю или более вхождений предыдущего символа

5

[chars]

Соответствует любому из символов, заданных в chars, где chars - это последовательность символов. Вы можете использовать символ - для обозначения диапазона символов.

Соответствующие персонажи

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

Sr.No. Выражение и описание
1

/a.c/

Соответствует строкам, содержащим такие строки, как a+c, a-c, abc, match, и a3c

2

/a*c/

Соответствует тем же строкам со строками, например ace, yacc, и arctic

3

/[tT]he/

Соответствует строке The и the

4

/^$/

Соответствует пустым строкам

5

/^.*$/

Соответствует всей строке, какой бы она ни была

6

/ */

Соответствует одному или нескольким пробелам

7

/^$/

Матчи blank линии

В следующей таблице показаны некоторые часто используемые наборы символов -

Sr.No. Набор и описание
1

[a-z]

Соответствует одной строчной букве

2

[A-Z]

Соответствует одной заглавной букве

3

[a-zA-Z]

Соответствует одной букве

4

[0-9]

Соответствует одному номеру

5

[a-zA-Z0-9]

Соответствует одной букве или цифре

Ключевые слова класса персонажа

Некоторые специальные ключевые слова обычно доступны для regexps, особенно утилиты GNU, которые используют regexps. Они очень полезны для регулярных выражений sed, поскольку упрощают работу и улучшают читаемость.

Например, персонажи a through z и персонажи A through Z, составляют один такой класс символов, который имеет ключевое слово [[:alpha:]]

Используя ключевое слово класса символов алфавита, эта команда печатает только те строки в /etc/syslog.conf файл, начинающийся с буквы алфавита -

$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.*                         /var/log/secure
mail.*                             -/var/log/maillog
cron.*                             /var/log/cron
uucp,news.crit                     /var/log/spooler
local7.*                           /var/log/boot.log

В следующей таблице представлен полный список доступных ключевых слов символьных классов в GNU sed.

Sr.No. Класс персонажа и описание
1

[[:alnum:]]

Буквенно-цифровой [az AZ 0–9]

2

[[:alpha:]]

По алфавиту [az AZ]

3

[[:blank:]]

Пробелы (пробелы или табуляции)

4

[[:cntrl:]]

Управляющие символы

5

[[:digit:]]

Цифры [0-9]

6

[[:graph:]]

Любые видимые символы (исключая пробелы)

7

[[:lower:]]

Строчные буквы [az]

8

[[:print:]]

Печатные символы (не контрольные символы)

9

[[:punct:]]

Знаки препинания

10

[[:space:]]

Пробел

11

[[:upper:]]

Заглавные буквы [AZ]

12

[[:xdigit:]]

Шестнадцатеричные цифры [0–9 af AF]

Aampersand Referencing

В sed metacharacter &представляет содержимое сопоставленного шаблона. Например, скажем, у вас есть файл с именемphone.txt полный телефонных номеров, таких как следующие -

5555551212
5555551213
5555551214
6665551215
6665551216
7775551217

Вы хотите сделать area code(первые три цифры) заключены в круглые скобки для облегчения чтения. Для этого вы можете использовать символ замены амперсанда -

$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215

(666)5551216
(777)5551217

Здесь, в части шаблона, вы сопоставляете первые 3 цифры, а затем используете & вы заменяете эти 3 цифры окружающими parentheses.

Использование нескольких команд sed

Вы можете использовать несколько команд sed в одной команде sed следующим образом:

$ sed -e 'command1' -e 'command2' ... -e 'commandN' files

Вот command1 через commandNявляются командами sed описанного ранее типа. Эти команды применяются к каждой из строк в списке файлов, заданном файлами.

Используя тот же механизм, мы можем написать приведенный выше пример номера телефона следующим образом:

$ sed -e 's/^[[:digit:]]\{3\}/(&)/g'  \ 
   -e 's/)[[:digit:]]\{3\}/&-/g' phone.txt 
(555)555-1212 
(555)555-1213 
(555)555-1214 
(666)555-1215 
(666)555-1216 
(777)555-1217

Note - В приведенном выше примере вместо повторения ключевого слова класса символов [[:digit:]] трижды мы заменили его на \{3\}, что означает, что предыдущее регулярное выражение сопоставляется три раза. Мы также использовали\ чтобы дать разрыв строки, и это должно быть удалено перед запуском команды.

Обратные ссылки

В ampersand metacharacterполезно, но еще более полезно возможность определять определенные области в регулярных выражениях. Эти специальные регионы можно использовать в качестве ссылки в ваших замещающих строках. Определяя определенные части регулярного выражения, вы можете затем ссылаться на эти части с помощью специального ссылочного символа.

Делать back references, вы должны сначала определить регион, а затем вернуться к нему. Чтобы определить регион, вы вставляетеbackslashed parenthesesвокруг каждого интересующего региона. На первый регион, который вы окружите обратной косой чертой, будет ссылаться\1, второй регион по \2, и так далее.

Предполагая phone.txt имеет следующий текст -

(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217

Попробуйте следующую команду -

$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \ 
   code: \1 Second: \2 Third: \3/' 
Area code: (555) Second: 555- Third: 1212 
Area code: (555) Second: 555- Third: 1213 
Area code: (555) Second: 555- Third: 1214 
Area code: (666) Second: 555- Third: 1215 
Area code: (666) Second: 555- Third: 1216 
Area code: (777) Second: 555- Third: 1217

Note - В приведенном выше примере на каждое регулярное выражение внутри круглых скобок будет ссылаться \1, \2и так далее. Мы использовали\чтобы сделать здесь разрыв строки. Его следует удалить перед запуском команды.

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

Ваш жесткий диск может иметь несколько разделов, которые обычно содержат только одну файловую систему, например, одна файловая система, в которой размещается /file system или другой, содержащий /home file system.

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

Все в Unix считается файлом, включая физические устройства, такие как DVD-ROM, USB-устройства и дисководы для гибких дисков.

Структура каталогов

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

Файловая система Unix - это набор файлов и каталогов, который имеет следующие свойства:

  • У него есть корневой каталог (/), который содержит другие файлы и каталоги.

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

  • По соглашению, корневой каталог имеет inode количество 2 и lost+found каталог имеет inode количество 3. Номера inode0 и 1не используются. Номера файловых индексов можно увидеть, указав-i option к ls command.

  • Он самодостаточен. Между одной файловой системой и другой нет никаких зависимостей.

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

Sr.No. Каталог и описание
1

/

Это корневой каталог, который должен содержать только каталоги, необходимые на верхнем уровне файловой структуры.

2

/bin

Здесь находятся исполняемые файлы. Эти файлы доступны всем пользователям

3

/dev

Это драйверы устройств

4

/etc

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

5

/lib

Содержит файлы общей библиотеки и иногда другие файлы, относящиеся к ядру

6

/boot

Содержит файлы для загрузки системы

7

/home

Содержит домашний каталог для пользователей и других учетных записей

8

/mnt

Используется для монтирования других временных файловых систем, например cdrom и floppy для CD-ROM диск и floppy diskette driveсоответственно

9

/proc

Содержит все процессы, отмеченные как файл process number или другая информация, которая является динамической для системы

10

/tmp

Хранит временные файлы, используемые между загрузками системы

11

/usr

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

12

/var

Обычно содержит файлы переменной длины, такие как файлы журнала и печати, а также файлы любого другого типа, которые могут содержать переменный объем данных.

13

/sbin

Содержит двоичные (исполняемые) файлы, обычно для системного администрирования. Например,fdisk и ifconfig удобства

14

/kernel

Содержит файлы ядра

Навигация по файловой системе

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

Sr.No. Команда и описание
1

cat filename

Отображает имя файла

2

cd dirname

Перемещает вас в указанный каталог

3

cp file1 file2

Копирует один файл / каталог в указанное место

4

file filename

Определяет тип файла (двоичный, текстовый и т. Д.)

5

find filename dir

Находит файл / каталог

6

head filename

Показывает начало файла

7

less filename

Просматривает файл с конца или с начала

8

ls dirname

Показывает содержимое указанного каталога

9

mkdir dirname

Создает указанный каталог

10

more filename

Просматривает файл от начала до конца

11

mv file1 file2

Перемещает местоположение или переименовывает файл / каталог

12

pwd

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

13

rm filename

Удаляет файл

14

rmdir dirname

Удаляет каталог

15

tail filename

Показывает конец файла

16

touch filename

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

17

whereis filename

Показывает расположение файла

18

which filename

Показывает расположение файла, если он находится в вашем PATH

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

Команда df

Первый способ управлять пространством раздела - использовать df (disk free)команда. Командаdf -k (disk free) отображает disk space usage in kilobytes, как показано ниже -

$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $

Некоторые из каталогов, например /devices, показывает 0 в столбцах kbytes, used и avail, а также 0% для емкости. Это особые (или виртуальные) файловые системы, и хотя они находятся на диске в каталоге /, сами по себе они не занимают дискового пространства.

В df -kвывод обычно одинаков во всех системах Unix. Вот что он обычно включает -

Sr.No. Колонка и описание
1

Filesystem

Имя физической файловой системы

2

kbytes

Общее количество килобайт свободного места на носителе

3

used

Общее количество использованных килобайт (файлами)

4

avail

Всего килобайт, доступных для использования

5

capacity

Процент общего пространства, используемого файлами

6

Mounted on

На что смонтирована файловая система

Вы можете использовать -h (human readable) option для отображения вывода в формате, который показывает размер в более понятной нотации.

Du Command

В du (disk usage) command позволяет указать каталоги для отображения использования дискового пространства в конкретном каталоге.

Эта команда полезна, если вы хотите определить, сколько места занимает конкретный каталог. Следующая команда отображает количество блоков, используемых каждым каталогом. Один блок может занимать 512 байтов или 1 килобайт в зависимости от вашей системы.

$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $

В -h опция упрощает понимание вывода -

$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $

Монтирование файловой системы

Файловая система должна быть смонтирована, чтобы ее можно было использовать. Чтобы узнать, что в настоящее время смонтировано (доступно для использования) в вашей системе, используйте следующую команду -

$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $

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

mount -t file_system_type device_to_mount directory_to_mount_to

Например, если вы хотите установить CD-ROM в каталог /mnt/cdrom, вы можете ввести -

$ mount -t iso9660 /dev/cdrom /mnt/cdrom

Это предполагает, что ваше устройство CD-ROM называется /dev/cdrom и что вы хотите установить его на /mnt/cdrom. Обратитесь к странице руководства по mount для получения более конкретной информации или введите mount-h в командной строке для получения справочной информации.

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

Размонтирование файловой системы

Чтобы размонтировать (удалить) файловую систему из вашей системы, используйте umount команда, указав точку монтирования или устройство.

Например, to unmount cdromиспользуйте следующую команду -

$ umount /dev/cdrom

В mount command позволяет получить доступ к файловым системам, но в большинстве современных систем Unix automount function делает этот процесс невидимым для пользователя и не требует вмешательства.

Квоты пользователей и групп

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

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

  • Soft Limit - Если пользователь превышает установленный предел, существует льготный период, который позволяет пользователю освободить место.

  • Hard Limit - Когда достигнут жесткий предел, независимо от льготного периода, дополнительные файлы или блоки не могут быть выделены.

Есть ряд команд для управления квотами -

Sr.No. Команда и описание
1

quota

Отображает использование диска и ограничения для пользователя группы

2

edquota

Это редактор квот. Квоту пользователей или групп можно изменить с помощью этой команды

3

quotacheck

Сканирует файловую систему на предмет использования диска, создает, проверяет и восстанавливает файлы квот

4

setquota

Это редактор квот командной строки

5

quotaon

Это сообщает системе, что дисковые квоты должны быть включены в одной или нескольких файловых системах.

6

quotaoff

Это сообщает системе, что дисковые квоты должны быть отключены для одной или нескольких файловых систем.

7

repquota

Это распечатает сводку использования диска и квот для указанных файловых систем.

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

В этой главе мы подробно обсудим администрирование пользователей в Unix.

В системе Unix есть три типа учетных записей:

Корневой аккаунт

Это также называется superuserи будет иметь полный и неограниченный контроль над системой. Суперпользователь может запускать любые команды без каких-либо ограничений. Этот пользователь должен считаться системным администратором.

Системные учетные записи

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

Учетные записи пользователей

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

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

Управление пользователями и группами

Есть четыре основных файла администрирования пользователей -

  • /etc/passwd- Сохраняет информацию об учетной записи пользователя и пароле. Этот файл содержит большую часть информации об учетных записях в системе Unix.

  • /etc/shadow- Содержит зашифрованный пароль соответствующей учетной записи. Не все системы поддерживают этот файл.

  • /etc/group - Этот файл содержит информацию о группе для каждой учетной записи.

  • /etc/gshadow - Этот файл содержит информацию об учетной записи безопасной группы.

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

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

Sr.No. Команда и описание
1

useradd

Добавляет аккаунты в систему

2

usermod

Изменяет атрибуты учетной записи

3

userdel

Удаляет аккаунты из системы

4

groupadd

Добавляет группы в систему

5

groupmod

Изменяет атрибуты группы

6

groupdel

Удаляет группы из системы

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

Создать группу

Теперь мы поймем, как создать группу. Для этого нам нужно создать группы перед созданием любой учетной записи, в противном случае мы можем использовать существующие группы в нашей системе. У нас есть все группы, перечисленные в/etc/groups файл.

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

groupadd [-g gid [-o]] [-r] [-f] groupname

В следующей таблице перечислены параметры -

Sr.No. Вариант и описание
1

-g GID

Числовое значение идентификатора группы.

2

-o

Эта опция позволяет добавить группу с неуникальным GID

3

-r

Этот флаг указывает groupadd добавить системную учетную запись

4

-f

Эта опция заставляет просто выйти со статусом успеха, если указанная группа уже существует. С -g, если указанный GID уже существует, выбирается другой (уникальный) GID

5

groupname

Фактическое название группы будет создано

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

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

$ groupadd developers

Изменить группу

Чтобы изменить группу, используйте groupmod синтаксис -

$ groupmod -n new_modified_group_name old_group_name

Чтобы изменить название группы developers_2 на developer, введите -

$ groupmod -n developer developer_2

Вот как вы измените финансовый GID на 545 -

$ groupmod -g 545 developer

Удалить группу

Теперь мы поймем, как удалить группу. Чтобы удалить существующую группу, все, что вам нужно, этоgroupdel command и group name. Чтобы удалить финансовую группу, используйте команду -

$ groupdel developer

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

Завести аккаунт

Давайте посмотрим, как создать новую учетную запись в вашей системе Unix. Ниже приведен синтаксис для создания учетной записи пользователя -

useradd -d homedir -g groupname -m -s shell -u userid accountname

В следующей таблице перечислены параметры -

Sr.No. Вариант и описание
1

-d homedir

Задает домашний каталог для учетной записи

2

-g groupname

Указывает групповую учетную запись для этой учетной записи

3

-m

Creates the home directory if it doesn't exist

4

-s shell

Specifies the default shell for this account

5

-u userid

You can specify a user id for this account

6

accountname

Actual account name to be created

If you do not specify any parameter, then the system makes use of the default values. The useradd command modifies the /etc/passwd, /etc/shadow, and /etc/group files and creates a home directory.

Following is the example that creates an account mcmohd, setting its home directory to /home/mcmohd and the group as developers. This user would have Korn Shell assigned to it.

$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd

Before issuing the above command, make sure you already have the developers group created using the groupadd command.

Once an account is created you can set its password using the passwd command as follows −

$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

Когда вы печатаете passwd accountname, это дает вам возможность изменить пароль, если вы являетесь суперпользователем. В противном случае вы можете изменить только свой пароль, используя ту же команду, но без указания имени учетной записи.

Изменить учетную запись

В usermodКоманда позволяет вносить изменения в существующую учетную запись из командной строки. Он использует те же аргументы, что иuseradd , плюс аргумент -l, который позволяет вам изменить имя учетной записи.

Например, чтобы изменить имя учетной записи mcmohd к mcmohd20 и чтобы соответственно изменить домашний каталог, вам нужно будет выполнить следующую команду -

$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20

Удалить учетную запись

В userdelКоманда может использоваться для удаления существующего пользователя. Это очень опасная команда, если не использовать ее с осторожностью.

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

Например, чтобы удалить учетную запись mcmohd20 , введите следующую команду -

$ userdel -r mcmohd20

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

В этой главе мы подробно обсудим производительность системы в Unix.

Мы познакомим вас с несколькими бесплатными инструментами, которые доступны для мониторинга и управления производительностью в системах Unix. Эти инструменты также предоставляют рекомендации по диагностике и устранению проблем с производительностью в среде Unix.

В Unix есть следующие основные типы ресурсов, которые необходимо отслеживать и настраивать:

  • CPU

  • Memory

  • Disk space

  • Communications lines

  • I/O Time

  • Network Time

  • Applications programs

Компоненты производительности

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

Sr.No. Компонент и описание
1

User State CPU

Фактическое количество времени, которое ЦП тратит на выполнение пользовательской программы в пользовательском состоянии. Он включает время, потраченное на выполнение вызовов библиотеки, но не включает время, затраченное ядром от его имени.

2

System State CPU

Это количество времени, которое ЦП проводит в состоянии системы от имени этой программы. ВсеI/O routinesтребуются службы ядра. Программист может повлиять на это значение, заблокировав передачу ввода / вывода.

3

I/O Time and Network Time

Это время, затрачиваемое на перемещение данных и обслуживание запросов ввода-вывода.

4

Virtual Memory Performance

Это включает переключение контекста и подкачку

5

Application Program

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

Инструменты производительности

Unix предоставляет следующие важные инструменты для измерения и точной настройки производительности системы Unix:

Sr.No. Команда и описание
1

nice/renice

Запускает программу с измененным приоритетом планирования.

2

netstat

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

3

time

Помогает рассчитать простую команду или дать использование ресурсов

4

uptime

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

5

ps

Сообщает моментальный снимок текущих процессов

6

vmstat

Сообщает статистику виртуальной памяти

7

gprof

Отображает данные профиля графика звонков

8

prof

Облегчает профилирование процессов

9

top

Отображает системные задачи

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

В этой главе мы подробно обсудим системное ведение журнала в Unix.

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

Многие версии Unix предоставляют универсальное средство ведения журнала, называемое syslog. Отдельные программы, которым требуется регистрировать информацию, отправляют информацию в системный журнал.

Unix Syslog является хост-конфигурируемый, единая система регистрации объекта. Система использует централизованный процесс системного журнала, который запускает программу/etc/syslogd или же /etc/syslog.

Работа с системным логгером довольно проста. Программы отправляют свои записи журнала в syslogd , который обращается к файлу конфигурации./etc/syslogd.conf или же /etc/syslog и, когда найдено совпадение, записывает сообщение журнала в желаемый файл журнала.

Вы должны понимать четыре основных термина системного журнала:

Sr.No. Срок и описание
1

Facility

Идентификатор, используемый для описания приложения или процесса, отправившего сообщение журнала. Например, почта, ядро ​​и ftp.

2

Priority

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

3

Selector

Комбинация одного или нескольких помещений и уровней. Когда входящее событие соответствует селектору, выполняется действие.

4

Action

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

Средства системного журнала

Теперь мы разберемся с возможностями системного журнала. Вот доступные средства для селектора. Не все возможности присутствуют во всех версиях Unix.

Объект Описание
1

auth

Действия, связанные с запросом имени и пароля (getty, su, логин)

2

authpriv

То же, что и auth, но записывается в файл, который могут читать только выбранные пользователи

3

console

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

4

cron

Сообщения от системного планировщика cron

5

daemon

Системный демон

6

ftp

Сообщения, относящиеся к демону ftp

7

kern

Сообщения ядра

8

local0.local7

Локальные объекты определены для каждого сайта

9

lpr

Сообщения из линейной системы печати

10

mail

Сообщения, относящиеся к почтовой системе

11

mark

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

12

news

Сообщения, относящиеся к протоколу сетевых новостей (nntp)

13

ntp

Сообщения, относящиеся к сетевому протоколу времени

14

user

Обычные пользовательские процессы

15

uucp

Подсистема UUCP

Приоритеты системного журнала

Приоритеты системного журнала приведены в следующей таблице -

Sr.No. Приоритет и описание
1

emerg

Экстренное состояние, такое как неизбежный сбой системы, обычно транслируется всем пользователям.

2

alert

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

3

crit

Критическое состояние, например аппаратная ошибка

4

err

Обычная ошибка

5

Warning

Предупреждение

6

notice

Состояние, которое не является ошибкой, но, возможно, требует особого подхода.

7

info

Информационное сообщение

8

debug

Сообщения, которые используются при отладке программ

9

none

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

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

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

Когда вы указываете уровень, система будет отслеживать все на этом уровне и выше.

Файл /etc/syslog.conf

В /etc/syslog.confфайл контролирует, где регистрируются сообщения. Типичныйsyslog.conf файл может выглядеть так -

*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice           /var/log/messages
lpr.info                     /var/log/lpr.log
mail.*                       /var/log/mail.log
ftp.*                        /var/log/ftp.log
auth.*                       @prep.ai.mit.edu
auth.*                       root,amrood
netinfo.err                  /var/log/netinfo.log
install.*                    /var/log/install.log
*.emerg                      *
*.alert                      |program_name
mark.*                       /dev/console

Каждая строка файла состоит из двух частей -

  • А message selectorэто указывает, какие сообщения нужно регистрировать. Например, все сообщения об ошибках или все сообщения отладки из ядра.

  • An action fieldэто говорит, что нужно делать с сообщением. Например, поместите его в файл или отправьте сообщение на терминал пользователя.

Ниже приведены примечательные моменты для вышеуказанной конфигурации.

  • Селекторы сообщений состоят из двух частей: a facility и a priority. Например, kern.debug выбирает все сообщения отладки (приоритет), генерируемые ядром (средством).

  • Селектор сообщений kern.debug выбирает все приоритеты выше, чем отладка.

  • Звездочка вместо пункта обслуживания или приоритета означает «все». Например,*.debug означает все сообщения отладки, а kern.* означает все сообщения, генерируемые ядром.

  • Вы также можете использовать запятые, чтобы указать несколько объектов. Два или более селектора можно сгруппировать, используя точку с запятой.

Регистрация действий

В поле действия указано одно из пяти действий -

  • Записывать сообщение в файл или на устройство. Например,/var/log/lpr.log или же /dev/console.

  • Отправить сообщение пользователю. Вы можете указать несколько имен пользователей, разделив их запятыми; например root, amrood.

  • Отправьте сообщение всем пользователям. В этом случае поле действия состоит из звездочки; например, *.

  • Отправьте сообщение программе. В этом случае программа указывается после вертикального символа Unix (|).

  • Отправьте сообщение в системный журнал на другом хосте. В этом случае поле действия состоит из имени хоста, которому предшествует знак at; например, @ tutorialspoint.com.

Команда регистратора

Unix предоставляет loggercommand, которая является чрезвычайно полезной командой для ведения системного журнала. Вlogger Команда отправляет сообщения журнала демону syslogd и, следовательно, вызывает системное ведение журнала.

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

Формат команды -

logger [-i] [-f file] [-p priority] [-t tag] [message]...

Вот подробная информация о параметрах -

Sr.No. Вариант и описание
1

-f filename

Использует содержимое файла filename как сообщение для регистрации.

2

-i

Регистрирует идентификатор процесса регистратора в каждой строке.

3

-p priority

Вводит сообщение с указанным приоритетом (указанная запись селектора); приоритет сообщения может быть указан численно или в виде пары объект-приоритет. Приоритет по умолчанию - user.notice.

4

-t tag

Отмечает каждую строку, добавленную в журнал, указанным тегом.

5

message

Строковые аргументы, содержимое которых объединяется вместе в указанном порядке, разделенных пробелом.

Вы можете использовать справку Manpage, чтобы проверить полный синтаксис этой команды.

Вращение журнала

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

Эти инструменты следует вызывать через частые промежутки времени, используя cron daemon. Просмотрите страницы руководства для получения дополнительных сведений о newsyslog или logrotate .

Расположение важных журналов

Все системные приложения создают свои файлы журналов в /var/logи его подкаталоги. Вот несколько важных приложений и соответствующих им каталогов журналов -

заявка Каталог
httpd / вар / журнал / httpd
самба / вар / журнал / самба
cron / var / log /
почта / var / log /
mysql / var / log /

В этой главе мы подробно обсудим сигналы и ловушки в Unix.

Сигналы - это программные прерывания, отправляемые программе, чтобы указать, что произошло важное событие. События могут варьироваться от запросов пользователя до ошибок незаконного доступа к памяти. Некоторые сигналы, такие как сигнал прерывания, указывают на то, что пользователь попросил программу сделать что-то, что не входит в обычный поток управления.

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

Имя сигнала Номер сигнала Описание
SIGHUP 1 Обнаружено зависание на управляющем терминале или смерть управляющего процесса
SIGINT 2 Выдается, если пользователь отправляет сигнал прерывания (Ctrl + C)
SIGQUIT 3 Выдается, если пользователь отправляет сигнал выхода (Ctrl + D)
SIGFPE 8 Выдается при попытке выполнения недопустимой математической операции
СИГКИЛЛ 9 Если процесс получает этот сигнал, он должен немедленно завершить работу и не будет выполнять никаких операций очистки.
SIGALRM 14 Сигнал будильника (используется для таймеров)
SIGTERM 15 Сигнал завершения программы (по умолчанию отправляется командой kill)

Список сигналов

Существует простой способ перечислить все сигналы, поддерживаемые вашей системой. Просто выдайтеkill -l команда, и она отобразит все поддерживаемые сигналы -

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Фактический список сигналов варьируется между Solaris, HP-UX и Linux.

Действия по умолчанию

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

Некоторые из возможных действий по умолчанию:

  • Завершите процесс.

  • Игнорируйте сигнал.

  • Дамп ядра. Это создает файл с именемcore содержащий образ памяти процесса, когда он получил сигнал.

  • Остановите процесс.

  • Продолжить остановленный процесс.

Отправка сигналов

Есть несколько методов передачи сигналов программе или сценарию. Один из наиболее распространенных - пользователь набираетCONTROL-C или INTERRUPT key пока выполняется сценарий.

Когда вы нажимаете Ctrl+C ключ, а SIGINT отправляется в сценарий и в соответствии с определенным действием по умолчанию сценарий завершается.

Другой распространенный метод доставки сигналов - использование kill command, синтаксис которого следующий -

$ kill -signal pid

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

$ kill -1 1001

Вышеупомянутая команда отправляет сигнал HUP или зависания программе, работающей с process ID 1001. Чтобы отправить сигнал уничтожения тому же процессу, используйте следующую команду -

$ kill -9 1001

Это убивает процесс, работающий с process ID 1001.

Сигналы захвата

Когда вы нажимаете Ctrl + C или клавишу Break на вашем терминале во время выполнения программы оболочки, обычно эта программа немедленно завершается, и ваша командная строка возвращается. Это не всегда может быть желательно. Например, в конечном итоге вы можете оставить кучу временных файлов, которые не удастся очистить.

Перехватить эти сигналы довольно просто, и команда trap имеет следующий синтаксис:

$ trap commands signals

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

Есть два распространенных использования ловушки в сценариях оболочки:

  • Очистить временные файлы
  • Игнорировать сигналы

Очистка временных файлов

В качестве примера команды trap ниже показано, как вы можете удалить некоторые файлы, а затем выйти, если кто-то попытается прервать выполнение программы с терминала:

$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2

С того момента в программе оболочки, где выполняется эта ловушка, два файла work1$$ и dataout$$ будет автоматически удален, если программа получит сигнал номер 2.

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

Сигнал номер 1 генерируется для hangup. Либо кто-то намеренно кладет трубку, либо линия случайно отключается.

Вы можете изменить предыдущую ловушку, чтобы также удалить два указанных файла в этом случае, добавив сигнал номер 1 в список сигналов -

$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2

Теперь эти файлы будут удалены, если линия зависнет или если будет нажата клавиша Ctrl + C.

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

Таким образом, в предыдущем примере значение WORKDIR и $$будет заменен во время выполнения команды trap. Если вы хотите, чтобы эта замена выполнялась в момент получения сигнала 1 или 2, вы можете поместить команды в одинарные кавычки -

$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2

Игнорирование сигналов

Если команда, указанная для прерывания, имеет значение null, указанный сигнал будет проигнорирован при получении. Например, команда -

$ trap '' 2

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

$ trap '' 1 2 3 15

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

$ trap  2

Если вы игнорируете сигнал, все подоболочки также игнорируют этот сигнал. Однако, если вы укажете действие, которое должно быть выполнено при получении сигнала, все подоболочки по-прежнему будут выполнять действие по умолчанию при получении этого сигнала.

Сброс ловушек

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

$ trap 1 2

Это сбрасывает действие, выполняемое при получении сигналов 1 или 2, обратно к значениям по умолчанию.