Unix — Начало работы
Операционная система Unix — это набор программ, которые действуют как связь между компьютером и пользователем.
Компьютерные программы, которые распределяют системные ресурсы и координируют все детали внутренних компонентов компьютера, называются операционной системой или ядром .
Пользователи общаются с ядром через программу, известную как оболочка . Оболочка является интерпретатором командной строки; он переводит команды, введенные пользователем, и преобразует их в язык, понятный ядру.
-
Unix был первоначально разработан в 1969 году группой сотрудников AT & T Кена Томпсона, Денниса Ричи, Дугласа Макилроя и Джо Оссанны из Bell Labs.
-
На рынке доступны различные варианты Unix. Solaris Unix, AIX, HP Unix и BSD — вот несколько примеров. Linux также является разновидностью Unix, которая находится в свободном доступе.
-
Несколько человек могут использовать компьютер Unix одновременно; следовательно, Unix называется многопользовательской системой.
-
Пользователь также может запускать несколько программ одновременно; следовательно, Unix является многозадачной средой.
Unix был первоначально разработан в 1969 году группой сотрудников AT & T Кена Томпсона, Денниса Ричи, Дугласа Макилроя и Джо Оссанны из Bell Labs.
На рынке доступны различные варианты Unix. Solaris Unix, AIX, HP Unix и BSD — вот несколько примеров. Linux также является разновидностью Unix, которая находится в свободном доступе.
Несколько человек могут использовать компьютер Unix одновременно; следовательно, Unix называется многопользовательской системой.
Пользователь также может запускать несколько программ одновременно; следовательно, Unix является многозадачной средой.
Unix архитектура
Вот базовая блок-схема системы Unix —
Основной концепцией, которая объединяет все версии Unix, являются следующие четыре основы:
-
Ядро — ядро является сердцем операционной системы. Он взаимодействует с оборудованием и большинством задач, таких как управление памятью, планирование задач и управление файлами.
-
Shell — оболочка — это утилита, которая обрабатывает ваши запросы. Когда вы вводите команду на своем терминале, оболочка интерпретирует команду и вызывает нужную вам программу. Оболочка использует стандартный синтаксис для всех команд. C Shell, Bourne Shell и Korn Shell — самые известные оболочки, которые доступны в большинстве вариантов Unix.
-
Команды и утилиты. Существуют различные команды и утилиты, которые вы можете использовать в своей повседневной деятельности. cp , mv , cat, grep и т. д. — несколько примеров команд и утилит. Существует более 250 стандартных команд, а также множество других, предоставляемых сторонним программным обеспечением. Все команды идут вместе с различными опциями.
-
Файлы и каталоги — все данные Unix организованы в файлы. Все файлы затем организуются в каталоги. Эти каталоги далее организованы в древовидную структуру, называемую файловой системой .
Ядро — ядро является сердцем операционной системы. Он взаимодействует с оборудованием и большинством задач, таких как управление памятью, планирование задач и управление файлами.
Shell — оболочка — это утилита, которая обрабатывает ваши запросы. Когда вы вводите команду на своем терминале, оболочка интерпретирует команду и вызывает нужную вам программу. Оболочка использует стандартный синтаксис для всех команд. C Shell, Bourne Shell и Korn Shell — самые известные оболочки, которые доступны в большинстве вариантов Unix.
Команды и утилиты. Существуют различные команды и утилиты, которые вы можете использовать в своей повседневной деятельности. cp , mv , cat, grep и т. д. — несколько примеров команд и утилит. Существует более 250 стандартных команд, а также множество других, предоставляемых сторонним программным обеспечением. Все команды идут вместе с различными опциями.
Файлы и каталоги — все данные Unix организованы в файлы. Все файлы затем организуются в каталоги. Эти каталоги далее организованы в древовидную структуру, называемую файловой системой .
Загрузка системы
Если у вас есть компьютер, на котором установлена операционная система Unix, вам просто нужно включить систему, чтобы она заработала.
Как только вы включаете систему, она начинает загружаться и, наконец, предлагает вам войти в систему, что является операцией для входа в систему и использования ее для повседневной деятельности.
Логин Unix
Когда вы впервые подключаетесь к системе Unix, вы обычно видите приглашение, такое как следующее:
login:
Чтобы залогиниться
-
Подготовьте свой ИД пользователя (идентификация пользователя) и пароль. Обратитесь к системному администратору, если у вас его еще нет.
-
Введите свой идентификатор пользователя в приглашении для входа в систему и нажмите клавишу ВВОД . Ваш идентификатор пользователя чувствителен к регистру , поэтому убедитесь, что вы ввели его точно в соответствии с указаниями системного администратора.
-
Введите пароль в строке ввода пароля и нажмите клавишу ВВОД . Ваш пароль также чувствителен к регистру.
-
Если вы предоставите правильный ID пользователя и пароль, то вам будет разрешено войти в систему. Прочитайте информацию и сообщения, которые появляются на экране, а именно:
Подготовьте свой ИД пользователя (идентификация пользователя) и пароль. Обратитесь к системному администратору, если у вас его еще нет.
Введите свой идентификатор пользователя в приглашении для входа в систему и нажмите клавишу ВВОД . Ваш идентификатор пользователя чувствителен к регистру , поэтому убедитесь, что вы ввели его точно в соответствии с указаниями системного администратора.
Введите пароль в строке ввода пароля и нажмите клавишу ВВОД . Ваш пароль также чувствителен к регистру.
Если вы предоставите правильный ID пользователя и пароль, то вам будет разрешено войти в систему. Прочитайте информацию и сообщения, которые появляются на экране, а именно:
login : amrood amrood's password: Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73 $
Вам будет предоставлена командная строка (иногда называемая $ prompt), где вы вводите все свои команды. Например, чтобы проверить календарь, вам нужно набрать команду 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 требуют пароли, чтобы гарантировать, что ваши файлы и данные остаются вашими собственными и что сама система защищена от хакеров и взломщиков. Ниже приведены инструкции по изменению пароля.
Шаг 1 — Чтобы начать, введите пароль в командной строке, как показано ниже.
Шаг 2 — Введите свой старый пароль, который вы используете в данный момент.
Шаг 3 — Введите новый пароль. Всегда держите ваш пароль достаточно сложным, чтобы никто не мог его угадать. Но убедитесь, что вы помните это.
Шаг 4 — Вы должны подтвердить пароль, введя его еще раз.
$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $
Примечание. Мы добавили звездочку (*) здесь, чтобы показать местоположение, в котором вам необходимо ввести текущий и новый пароли, в противном случае в вашей системе. Он не показывает какой-либо символ при вводе.
Список каталогов и файлов
Все данные в 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 являются каталогами, а остальные записи являются файлами.
Кто ты?
Когда вы вошли в систему, возможно, вы захотите узнать: кто я ?
Самый простой способ узнать, кто вы есть, это ввести команду whoami —
$ whoami amrood $
Попробуйте это в вашей системе. Эта команда перечисляет имя учетной записи, связанной с текущим логином. Вы также можете попробовать узнать, кто я командую, чтобы получить информацию о себе.
Кто вошел в систему?
Иногда вам может быть интересно узнать, кто одновременно подключен к компьютеру.
Есть три команды, чтобы получить эту информацию, в зависимости от того, сколько вы хотите знать о других пользователях: пользователи , кто и 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 в вашей системе, чтобы проверить вывод. Здесь перечислены сведения, связанные с пользователями, вошедшими в систему.
Выйти
Когда вы закончите сеанс, вам нужно выйти из системы. Это сделано для того, чтобы никто другой не получил доступ к вашим файлам.
Чтобы выйти
-
Просто введите команду logout в командной строке, и система очистит все и разорвет соединение.
Просто введите команду logout в командной строке, и система очистит все и разорвет соединение.
Выключение системы
Наиболее последовательный способ правильно завершить работу системы Unix через командную строку — использовать одну из следующих команд:
Sr.No. | Команда и описание |
---|---|
1 |
стой Немедленно выключает систему |
2 |
init 0 Выключает систему, используя предопределенные сценарии для синхронизации и очистки системы перед выключением |
3 |
иници 6 Перезагружает систему, полностью ее выключая, а затем перезапуская |
4 |
выключение Выключение системы при отключении питания |
5 |
перезагружать Перезагружает систему |
6 |
неисправность Выключение системы |
стой
Немедленно выключает систему
init 0
Выключает систему, используя предопределенные сценарии для синхронизации и очистки системы перед выключением
иници 6
Перезагружает систему, полностью ее выключая, а затем перезапуская
выключение
Выключение системы при отключении питания
перезагружать
Перезагружает систему
неисправность
Выключение системы
Обычно вы должны быть суперпользователем или пользователем root (самая привилегированная учетная запись в системе Unix), чтобы завершить работу системы. Однако в некоторых автономных или личных блоках Unix это могут делать администраторы, а иногда и обычные пользователи.
Unix — Управление файлами
В этой главе мы подробно обсудим управление файлами в Unix. Все данные в Unix организованы в файлы. Все файлы организованы в каталоги. Эти каталоги организованы в древовидную структуру, называемую файловой системой.
Когда вы работаете с Unix, так или иначе, вы проводите большую часть времени, работая с файлами. Этот учебник поможет вам понять, как создавать и удалять файлы, копировать и переименовывать их, создавать ссылки на них и т. Д.
В Unix есть три основных типа файлов —
-
Обычные файлы . Обычный файл — это файл в системе, содержащий данные, текст или программные инструкции. В этом уроке вы рассмотрите работу с обычными файлами.
-
Каталоги — каталоги хранят как специальные, так и обычные файлы. Для пользователей, знакомых с Windows или Mac OS, каталоги Unix эквивалентны папкам.
-
Специальные файлы — некоторые специальные файлы предоставляют доступ к оборудованию, такому как жесткие диски, приводы CD-ROM, модемы и адаптеры Ethernet. Другие специальные файлы похожи на псевдонимы или ярлыки и позволяют вам получить доступ к одному файлу под разными именами.
Обычные файлы . Обычный файл — это файл в системе, содержащий данные, текст или программные инструкции. В этом уроке вы рассмотрите работу с обычными файлами.
Каталоги — каталоги хранят как специальные, так и обычные файлы. Для пользователей, знакомых с Windows или Mac OS, каталоги Unix эквивалентны папкам.
Специальные файлы — некоторые специальные файлы предоставляют доступ к оборудованию, такому как жесткие диски, приводы CD-ROM, модемы и адаптеры 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 $
Вот информация обо всех перечисленных столбцах —
-
Первый столбец — представляет тип файла и разрешение, данное для файла. Ниже приведено описание всех типов файлов.
-
Второй столбец — представляет количество блоков памяти, занимаемых файлом или каталогом.
-
Третий столбец — представляет владельца файла. Это пользователь Unix, который создал этот файл.
-
Четвертая колонка — представляет группу владельца. Каждый пользователь Unix будет иметь связанную группу.
-
Пятая колонка — представляет размер файла в байтах.
-
Шестая колонка — представляет дату и время, когда этот файл был создан или изменен в последний раз.
-
Седьмая колонка — представляет файл или имя каталога.
Первый столбец — представляет тип файла и разрешение, данное для файла. Ниже приведено описание всех типов файлов.
Второй столбец — представляет количество блоков памяти, занимаемых файлом или каталогом.
Третий столбец — представляет владельца файла. Это пользователь Unix, который создал этот файл.
Четвертая колонка — представляет группу владельца. Каждый пользователь Unix будет иметь связанную группу.
Пятая колонка — представляет размер файла в байтах.
Шестая колонка — представляет дату и время, когда этот файл был создан или изменен в последний раз.
Седьмая колонка — представляет файл или имя каталога.
В примере перечисления ls -l каждая строка файла начинается с d , — или l . Эти символы указывают тип файла, который указан.
Sr.No. | Префикс и описание |
---|---|
1 |
— Обычный файл, такой как текстовый файл ASCII, двоичный исполняемый файл или жесткая ссылка. |
2 |
б Заблокировать специальный файл. Заблокировать файл устройства ввода / вывода, такой как физический жесткий диск. |
3 |
с Специальный символьный файл. Файл устройства ввода-вывода, такой как физический жесткий диск. |
4 |
d Каталог, содержащий список других файлов и каталогов. |
5 |
L Файл символической ссылки. Ссылки на любой обычный файл. |
6 |
п Именованная труба. Механизм межпроцессного взаимодействия. |
7 |
s Сокет используется для межпроцессного взаимодействия. |
—
Обычный файл, такой как текстовый файл ASCII, двоичный исполняемый файл или жесткая ссылка.
б
Заблокировать специальный файл. Заблокировать файл устройства ввода / вывода, такой как физический жесткий диск.
с
Специальный символьный файл. Файл устройства ввода-вывода, такой как физический жесткий диск.
d
Каталог, содержащий список других файлов и каталогов.
L
Файл символической ссылки. Ссылки на любой обычный файл.
п
Именованная труба. Механизм межпроцессного взаимодействия.
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 — файл конфигурации удаленной оболочки
.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 $
-
Одиночная точка (.) — представляет текущий каталог.
-
Двойная точка (..) — представляет родительский каталог.
Одиночная точка (.) — представляет текущий каталог.
Двойная точка (..) — представляет родительский каталог.
Создание файлов
Вы можете использовать редактор 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 вместе, чтобы полностью выйти из файла.
Нажмите клавишу esc, чтобы выйти из режима редактирования.
Нажмите две клавиши Shift + ZZ вместе, чтобы полностью выйти из файла.
Теперь у вас будет файл, созданный с именем файла в текущем каталоге.
$ vi filename $
Редактирование файлов
Вы можете редактировать существующий файл, используя редактор vi . Мы кратко обсудим, как открыть существующий файл —
$ vi filename
После того, как файл открыт, вы можете войти в режим редактирования, нажав клавишу i, а затем вы можете продолжить редактирование файла. Если вы хотите переместиться туда-сюда внутри файла, то сначала вам нужно выйти из режима редактирования, нажав клавишу Esc . После этого вы можете использовать следующие ключи для перемещения внутри файла —
-
л ключ, чтобы перейти к правой стороне.
-
Клавиша h для перемещения влево.
-
Клавиша k для перемещения вверх в файле.
-
Клавиша j для перемещения вниз в файле.
л ключ, чтобы перейти к правой стороне.
Клавиша 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 $
Вот деталь всех четырех столбцов —
-
Первый столбец — представляет общее количество строк в файле.
-
Второй столбец — представляет общее количество слов в файле.
-
Третий столбец — представляет общее количество байтов в файле. Это фактический размер файла.
-
Четвертый столбец — представляет имя файла.
Первый столбец — представляет общее количество строк в файле.
Второй столбец — представляет общее количество слов в файле.
Третий столбец — представляет общее количество байтов в файле. Это фактический размер файла.
Четвертый столбец — представляет имя файла.
Вы можете дать несколько файлов и получить информацию об этих файлах одновременно. Ниже приводится простой синтаксис —
$ wc filename1 filename2 filename3
Копирование файлов
Чтобы сделать копию файла, используйте команду cp . Основной синтаксис команды —
$ cp source_file destination_file
Ниже приведен пример создания копии существующего файла с именем файла .
$ cp filename copyfile $
Теперь вы найдете еще один файл copyfile в вашем текущем каталоге. Этот файл будет точно таким же, как и исходное имя файла .
Переименование файлов
Чтобы изменить имя файла, используйте команду mv . Ниже приведен основной синтаксис —
$ mv old_file new_file
Следующая программа переименует существующее имя файла в newfile .
$ mv filename newfile $
Команда mv полностью переместит существующий файл в новый файл. В этом случае вы найдете только новый файл в вашем текущем каталоге.
Удаление файлов
Чтобы удалить существующий файл, используйте команду rm . Ниже приведен основной синтаксис —
$ rm filename
Внимание . Файл может содержать полезную информацию. Всегда рекомендуется соблюдать осторожность при использовании этой команды удаления . Лучше использовать опцию -i вместе с командой rm .
Ниже приведен пример, который показывает, как полностью удалить существующее имя файла .
$ rm filename $
Вы можете удалить несколько файлов одновременно с помощью команды, приведенной ниже —
$ rm filename1 filename2 filename3 $
Стандартные потоки Unix
При нормальных обстоятельствах каждая программа Unix имеет три потока (файла), открытых для нее при запуске —
-
stdin — это называется стандартным вводом, и соответствующий дескриптор файла равен 0. Это также представляется как STDIN. Программа Unix будет читать ввод по умолчанию из STDIN.
-
stdout — это упоминается как стандартный вывод, и связанный дескриптор файла равен 1. Это также представляется как STDOUT. Программа Unix запишет вывод по умолчанию в STDOUT
-
stderr — это упоминается как стандартная ошибка, и соответствующий дескриптор файла равен 2. Это также представляется как STDERR. Программа Unix запишет все сообщения об ошибках в STDERR.
stdin — это называется стандартным вводом, и соответствующий дескриптор файла равен 0. Это также представляется как STDIN. Программа Unix будет читать ввод по умолчанию из STDIN.
stdout — это упоминается как стандартный вывод, и связанный дескриптор файла равен 1. Это также представляется как STDOUT. Программа Unix запишет вывод по умолчанию в STDOUT
stderr — это упоминается как стандартная ошибка, и соответствующий дескриптор файла равен 2. Это также представляется как STDERR. Программа Unix запишет все сообщения об ошибках в STDERR.
Unix — Управление каталогами
В этой главе мы подробно обсудим управление каталогами в 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 $
Примечание. Чтобы удалить каталог, убедитесь, что он пуст, что означает, что в этом каталоге не должно быть файлов или подкаталогов.
Вы можете удалить несколько каталогов одновременно:
$rmdir dirname1 dirname2 dirname3 $
Приведенная выше команда удаляет каталоги dirname1, dirname2 и dirname3, если они пусты. Команда rmdir не выдает никаких результатов, если она прошла успешно.
Изменение каталогов
Вы можете использовать команду cd, чтобы сделать больше, чем просто перейти в домашний каталог. Вы можете использовать его для перехода в любой каталог, указав правильный абсолютный или относительный путь. Синтаксис как указано ниже —
$cd dirname $
Здесь dirname — это имя каталога, который вы хотите изменить. Например, команда —
$cd /usr/local/bin $
Изменения в каталоге / usr / local / bin . Из этого каталога вы можете перейти в каталог / usr / home / amrood, используя следующий относительный путь —
$cd ../../home/amrood $
Переименование каталогов
Команду mv (move) также можно использовать для переименования каталога. Синтаксис выглядит следующим образом —
$mv olddir newdir $
Вы можете переименовать каталог mydir в yourdir следующим образом:
$mv mydir yourdir $
Справочники. (точка) и .. (точка)
Имя файла (точка) представляет текущий рабочий каталог; а имя файла .. (точка) представляет каталог на один уровень выше текущего рабочего каталога, часто называемый родительским каталогом.
Если мы введем команду, чтобы отобразить список текущих рабочих каталогов / файлов, и воспользуемся опцией -a для вывода списка всех файлов и опцией -l для предоставления длинного списка, мы получим следующий результат.
$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, который обеспечивает безопасный способ хранения файлов. Каждый файл в Unix имеет следующие атрибуты —
-
Права владельца — разрешения владельца определяют, какие действия владелец файла может выполнять с файлом.
-
Разрешения группы — разрешения группы определяют, какие действия над файлом может выполнять пользователь, являющийся членом группы, к которой принадлежит файл.
-
Другие (мировые) разрешения — разрешения для других указывают, какое действие все остальные пользователи могут выполнять с файлом.
Права владельца — разрешения владельца определяют, какие действия владелец файла может выполнять с файлом.
Разрешения группы — разрешения группы определяют, какие действия над файлом может выполнять пользователь, являющийся членом группы, к которой принадлежит файл.
Другие (мировые) разрешения — разрешения для других указывают, какое действие все остальные пользователи могут выполнять с файлом.
Индикаторы разрешений
При использовании команды 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— означает, что есть разрешение только на чтение (r) .
Первые три символа (2-4) представляют разрешения для владельца файла. Например, -rwxr-xr— означает, что владелец имеет права на чтение (r), запись (w) и выполнение (x).
Вторая группа из трех символов (5-7) состоит из разрешений для группы, к которой принадлежит файл. Например, -rwxr-xr— означает, что у группы есть права на чтение (r) и выполнение (x), но нет разрешения на запись.
Последняя группа из трех символов (8-10) представляет разрешения для всех остальных. Например, -rwxr-xr— означает, что есть разрешение только на чтение (r) .
Режимы доступа к файлам
Права доступа к файлу — это первая линия защиты в системе Unix. Основными строительными блоками разрешений Unix являются разрешения на чтение , запись и выполнение , которые были описаны ниже:
Читать
Предоставляет возможность читать, т. Е. Просматривать содержимое файла.
Написать
Предоставляет возможность изменять или удалять содержимое файла.
казнить
Пользователь с разрешениями на выполнение может запускать файл как программу.
Режимы доступа к каталогу
Режимы доступа к каталогам перечислены и организованы так же, как и любой другой файл. Есть несколько различий, которые необходимо упомянуть —
Читать
Доступ к каталогу означает, что пользователь может читать содержимое. Пользователь может посмотреть на имена файлов внутри каталога.
Написать
Доступ означает, что пользователь может добавлять или удалять файлы из каталога.
казнить
Выполнение каталога на самом деле не имеет смысла, так что думайте об этом как о обходном разрешении.
Пользователь должен иметь доступ к каталогу 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 | гх |
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 он назначает идентификатор пользователя и идентификатор группы каждому пользователю. Все разрешения, упомянутые выше, также назначаются на основе владельца и групп.
Две команды доступны для изменения владельца и группы файлов —
-
chown — команда chown означает «сменить владельца» и используется для смены владельца файла.
-
chgrp — команда chgrp расшифровывается как «изменить группу» и используется для изменения группы файла.
chown — команда chown означает «сменить владельца» и используется для смены владельца файла.
chgrp — команда chgrp расшифровывается как «изменить группу» и используется для изменения группы файла.
Смена собственника
Команда chown меняет владельца файла. Основной синтаксис выглядит следующим образом —
$ chown user filelist
Значением пользователя может быть либо имя пользователя в системе, либо идентификатор пользователя (uid) пользователя в системе.
Следующий пример поможет вам понять концепцию —
$ chown amrood testfile $
Меняет владельца данного файла на пользователя amrood .
ПРИМЕЧАНИЕ. — Суперпользователь root имеет неограниченную возможность изменять владельца любого файла, но обычные пользователи могут изменять владельца только тех файлов, которыми они владеют.
Изменение владельца группы
Команда chgrp меняет групповое владение файлом. Основной синтаксис выглядит следующим образом —
$ chgrp group filelist
Значением группы может быть имя группы в системе или идентификатор группы (GID) группы в системе.
Следующий пример поможет вам понять концепцию —
$ chgrp special testfile $
Изменяет группу данного файла на специальную группу.
Разрешение файла SUID и SGID
Часто, когда команда выполняется, она должна выполняться со специальными привилегиями, чтобы выполнить свою задачу.
Например, когда вы изменяете свой пароль с помощью команды passwd , ваш новый пароль сохраняется в файле / etc / shadow .
Как обычный пользователь, у вас нет прав на чтение или запись в этот файл по соображениям безопасности, но при смене пароля вам необходимо иметь разрешение на запись в этот файл. Это означает, что программа passwd должна предоставить вам дополнительные разрешения, чтобы вы могли писать в файл / etc / shadow .
Дополнительные разрешения предоставляются программам с помощью механизма, известного как биты « Задать идентификатор пользователя (SUID)» и « Задать идентификатор группы (SGID)» .
Когда вы запускаете программу с включенным битом SUID, вы наследуете разрешения владельца этой программы. Программы, для которых не установлен бит SUID, запускаются с разрешениями пользователя, запустившего программу.
Это касается и SGID. Обычно программы выполняются с разрешениями вашей группы, но вместо этого ваша группа будет изменена только для этой программы на владельца группы программы.
Биты SUID и SGID будут отображаться как буква «s», если разрешение доступно. Бит SUID «s» будет находиться в битах разрешений, где обычно находятся разрешения на выполнение владельцев.
Например, команда —
$ ls -l /usr/bin/passwd -r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd* $
Показывает, что установлен бит SUID и что команда принадлежит пользователю root. Заглавная буква 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. Важной концепцией Unix является среда , которая определяется переменными среды. Некоторые из них устанавливаются системой, другие — вами, другие — оболочкой или любой программой, которая загружает другую программу.
Переменная — это строка символов, которой мы присваиваем значение. Назначенное значение может быть числом, текстом, именем файла, устройством или любым другим типом данных.
Например, сначала мы устанавливаем переменную TEST, а затем получаем доступ к ее значению с помощью команды echo —
$TEST="Unix Programming" $echo $TEST
Это дает следующий результат.
Unix Programming
Обратите внимание, что переменные среды устанавливаются без использования знака $, но при доступе к ним мы используем знак $ в качестве префикса. Эти переменные сохраняют свои значения, пока мы не выйдем из оболочки.
Когда вы входите в систему, оболочка проходит фазу, называемую инициализацией, для настройки среды. Обычно это двухэтапный процесс, при котором оболочка читает следующие файлы:
- / И т.д. / профиль
- профиль
Процесс выглядит следующим образом —
-
Оболочка проверяет, существует ли файл / etc / profile .
-
Если он существует, оболочка читает его. В противном случае этот файл пропускается. Сообщение об ошибке не отображается.
-
Оболочка проверяет, существует ли файл .profile в вашем домашнем каталоге. Ваш домашний каталог — это каталог, в который вы запускаете после входа в систему.
-
Если он существует, оболочка читает его; в противном случае оболочка пропускает его. Сообщение об ошибке не отображается.
Оболочка проверяет, существует ли файл / etc / profile .
Если он существует, оболочка читает его. В противном случае этот файл пропускается. Сообщение об ошибке не отображается.
Оболочка проверяет, существует ли файл .profile в вашем домашнем каталоге. Ваш домашний каталог — это каталог, в который вы запускаете после входа в систему.
Если он существует, оболочка читает его; в противном случае оболочка пропускает его. Сообщение об ошибке не отображается.
Как только оба этих файла будут прочитаны, оболочка отобразит приглашение —
$
Это подсказка, где вы можете вводить команды для их выполнения.
Примечание. Процесс инициализации оболочки, описанный здесь, применяется ко всем оболочкам типа Bourne , но некоторые дополнительные файлы используются bash и ksh .
Файл .profile
Файл / etc / profile поддерживается системным администратором вашей Unix-машины и содержит информацию об инициализации оболочки, необходимую для всех пользователей системы.
Файл .profile находится под вашим контролем. Вы можете добавить в файл столько информации о настройках оболочки, сколько захотите. Минимальный набор информации, который вам нужно настроить, включает:
- Тип терминала, который вы используете.
- Список каталогов, в которых можно найти команды.
- Список переменных, влияющих на внешний вид вашего терминала.
Вы можете проверить свой .profile в вашем домашнем каталоге. Откройте его с помощью редактора vi и проверьте все переменные, установленные для вашей среды.
Установка типа терминала
Обычно тип используемого вами терминала автоматически настраивается программами входа в систему или getty . Иногда процесс автоматической настройки неверно угадывает ваш терминал.
Если ваш терминал установлен неправильно, вывод команд может выглядеть странно, или вы не сможете нормально взаимодействовать с оболочкой.
Чтобы убедиться, что это не так, большинство пользователей устанавливают для своего терминала наименьший общий знаменатель следующим образом:
$TERM=vt100 $
Установка пути
Когда вы вводите любую команду в командной строке, оболочка должна найти команду, прежде чем ее можно будет выполнить.
Переменная PATH указывает места, в которых оболочка должна искать команды. Обычно переменная Path устанавливается следующим образом:
$PATH=/bin:/usr/bin $
Здесь каждая из отдельных записей, разделенных двоеточием (:), является каталогами. Если вы просите оболочку выполнить команду, и она не может найти ее ни в одном из каталогов, указанных в переменной PATH, появляется сообщение, подобное следующему:
$hello hello: not found $
Существуют переменные, такие как PS1 и PS2, которые обсуждаются в следующем разделе.
Переменные PS1 и PS2
Символы, которые оболочка отображает в командной строке, хранятся в переменной PS1. Вы можете изменить эту переменную на что угодно. Как только вы измените его, он будет использоваться оболочкой с этого момента.
Например, если вы дали команду —
$PS1='=>' => => =>
Ваша подсказка станет =>. Чтобы установить значение PS1 для отображения рабочего каталога, введите команду —
=>PS1="[\u@\h \w]\$" [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
Результатом этой команды является то, что в приглашении отображается имя пользователя, имя компьютера (имя хоста) и рабочий каталог.
Существует довольно много escape-последовательностей, которые можно использовать в качестве аргументов значения для PS1; постарайтесь ограничить себя самым критическим, чтобы подсказка не перегружала вас информацией.
Sr.No. | Escape-последовательность и описание |
---|---|
1 |
\ т Текущее время, выраженное в формате ЧЧ: ММ: СС |
2 |
\ d Текущая дата, выраженная как день недели месяц дата |
3 |
\ п Новая линия |
4 |
\ s Текущая оболочка |
5 |
\ W Рабочий каталог |
6 |
\ ш Полный путь к рабочему каталогу |
7 |
\ и Имя пользователя текущего пользователя |
8 |
\час Имя хоста текущей машины |
9 |
\ # Номер команды текущей команды. Увеличивается при вводе новой команды |
10 |
\ $ Если эффективный UID равен 0 (то есть, если вы вошли в систему как пользователь root), завершите приглашение символом #; в противном случае используйте знак $ |
\ т
Текущее время, выраженное в формате ЧЧ: ММ: СС
\ d
Текущая дата, выраженная как день недели месяц дата
\ п
Новая линия
\ s
Текущая оболочка
\ W
Рабочий каталог
\ ш
Полный путь к рабочему каталогу
\ и
Имя пользователя текущего пользователя
\час
Имя хоста текущей машины
\ #
Номер команды текущей команды. Увеличивается при вводе новой команды
\ $
Если эффективный UID равен 0 (то есть, если вы вошли в систему как пользователь root), завершите приглашение символом #; в противном случае используйте знак $
Вы можете вносить изменения самостоятельно при каждом входе в систему или автоматически вносить изменения в PS1, добавляя их в свой файл .profile .
Когда вы вводите команду, которая является неполной, оболочка отобразит вторичное приглашение и будет ждать, пока вы не завершите команду и снова нажмете Enter .
Дополнительное приглашение по умолчанию — > (больше, чем знак), но его можно изменить, переопределив переменную оболочки PS2 —
Ниже приведен пример, который использует вторичную подсказку по умолчанию —
$ echo "this is a > test" this is a test $
Приведенный ниже пример переопределяет PS2 с настраиваемым приглашением —
$ PS2="secondary prompt->" $ echo "this is a secondary prompt->test" this is a test $
Переменные среды
Ниже приведен частичный список важных переменных среды. Эти переменные установлены и доступны, как указано ниже —
Sr.No. | Переменная и описание |
---|---|
1 |
DISPLAY Содержит идентификатор для дисплея, который программы X11 должны использовать по умолчанию. |
2 |
ГЛАВНАЯ Указывает домашний каталог текущего пользователя: аргумент по умолчанию для встроенной команды cd. |
3 |
IFS Указывает внутренний разделитель полей, который используется синтаксическим анализатором для разделения слов после раскрытия. |
4 |
LANG LANG расширяется до локали системы по умолчанию; LC_ALL может использоваться, чтобы переопределить это. Например, если его значение равно pt_BR , то язык устанавливается на (бразильский) португальский, а языковой стандарт — на бразильский. |
5 |
LD_LIBRARY_PATH Система Unix с динамическим компоновщиком содержит разделенный двоеточиями список каталогов, которые динамический компоновщик должен искать совместно используемые объекты при создании образа процесса после exec, прежде чем искать в любых других каталогах. |
6 |
ДОРОЖКА Указывает путь поиска команд. Это разделенный двоеточиями список каталогов, в которых оболочка ищет команды. |
7 |
PWD Указывает текущий рабочий каталог, установленный командой cd. |
8 |
RANDOM Генерирует случайное целое число от 0 до 32 767 каждый раз, когда на него ссылаются. |
9 |
SHLVL Увеличивается на единицу каждый раз, когда запускается экземпляр bash. Эта переменная полезна для определения того, завершает ли встроенная команда выхода текущий сеанс. |
10 |
СРОК Относится к типу дисплея. |
11 |
TZ Относится к часовому поясу. Может принимать значения, такие как GMT, AST и т. Д. |
12 |
UID Расширяется до числового идентификатора текущего пользователя, инициализированного при запуске оболочки. |
DISPLAY
Содержит идентификатор для дисплея, который программы X11 должны использовать по умолчанию.
ГЛАВНАЯ
Указывает домашний каталог текущего пользователя: аргумент по умолчанию для встроенной команды cd.
IFS
Указывает внутренний разделитель полей, который используется синтаксическим анализатором для разделения слов после раскрытия.
LANG
LANG расширяется до локали системы по умолчанию; LC_ALL может использоваться, чтобы переопределить это. Например, если его значение равно pt_BR , то язык устанавливается на (бразильский) португальский, а языковой стандарт — на бразильский.
LD_LIBRARY_PATH
Система Unix с динамическим компоновщиком содержит разделенный двоеточиями список каталогов, которые динамический компоновщик должен искать совместно используемые объекты при создании образа процесса после exec, прежде чем искать в любых других каталогах.
ДОРОЖКА
Указывает путь поиска команд. Это разделенный двоеточиями список каталогов, в которых оболочка ищет команды.
PWD
Указывает текущий рабочий каталог, установленный командой cd.
RANDOM
Генерирует случайное целое число от 0 до 32 767 каждый раз, когда на него ссылаются.
SHLVL
Увеличивается на единицу каждый раз, когда запускается экземпляр bash. Эта переменная полезна для определения того, завершает ли встроенная команда выхода текущий сеанс.
СРОК
Относится к типу дисплея.
TZ
Относится к часовому поясу. Может принимать значения, такие как GMT, AST и т. Д.
UID
Расширяется до числового идентификатора текущего пользователя, инициализированного при запуске оболочки.
Ниже приведен пример, показывающий несколько переменных среды:
$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $
Unix Basic Utilities — печать, электронная почта
В этой главе мы подробно обсудим печать и электронную почту как основные утилиты Unix. До сих пор мы пытались понять ОС Unix и природу ее основных команд. В этой главе мы изучим некоторые важные утилиты Unix, которые можно использовать в нашей повседневной жизни.
Печать файлов
Перед печатью файла в системе Unix вы можете переформатировать его, чтобы настроить поля, выделить некоторые слова и т. Д. Большинство файлов также могут быть напечатаны без переформатирования, но исходная распечатка может быть не такой привлекательной.
Многие версии Unix включают два мощных средства форматирования текста, nroff и troff .
Команда PR
Команда pr выполняет незначительное форматирование файлов на экране терминала или для принтера. Например, если у вас есть длинный список имен в файле, вы можете отформатировать его на экране в два или более столбцов.
Ниже приведен синтаксис команды pr:
pr option(s) filename(s)
Pr изменяет формат файла только на экране или на печатной копии; это не изменяет оригинальный файл. В следующей таблице перечислены некоторые параметры pr —
Sr.No. | Вариант и описание |
---|---|
1 |
-k Производит k столбцов вывода |
2 |
-d Двойные пробелы в выводе (не во всех версиях pr ) |
3 |
-h «заголовок» Принимает следующий элемент в качестве заголовка отчета |
4 |
-t Устраняет печать заголовка и верхних / нижних полей |
5 |
-l PAGE_LENGTH Устанавливает длину страницы в PAGE_LENGTH (66) строк. Количество строк по умолчанию — 56 |
6 |
-О МАРГИНА Смещает каждую строку с полями MARGIN (ноль) |
7 |
-w PAGE_WIDTH Устанавливает ширину страницы в PAGE_WIDTH (72) символа только для вывода нескольких текстовых столбцов |
-k
Производит k столбцов вывода
-d
Двойные пробелы в выводе (не во всех версиях pr )
-h «заголовок»
Принимает следующий элемент в качестве заголовка отчета
-t
Устраняет печать заголовка и верхних / нижних полей
-l PAGE_LENGTH
Устанавливает длину страницы в PAGE_LENGTH (66) строк. Количество строк по умолчанию — 56
-О МАРГИНА
Смещает каждую строку с полями MARGIN (ноль)
-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, чтобы создать двухколонный отчет с заголовком Restaurants —
$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 , вы можете использовать опцию -n Num для печати Num количества копий. Наряду с командой lpr , вы можете использовать — Num для того же.
-
Если к общей сети подключено несколько принтеров, вы можете выбрать принтер, используя опцию -d printer вместе с командой lp, и для этой же цели вы можете использовать опцию -P printer вместе с командой lpr. Здесь принтер — это имя принтера.
Если вы используете команду lp , вы можете использовать опцию -n Num для печати Num количества копий. Наряду с командой lpr , вы можете использовать — Num для того же.
Если к общей сети подключено несколько принтеров, вы можете выбрать принтер, используя опцию -d printer вместе с командой lp, и для этой же цели вы можете использовать опцию -P printer вместе с командой 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 $
Здесь первая строка отображает состояние принтера. Если принтер отключен или на нем заканчивается бумага, в этой первой строке могут отображаться различные сообщения.
Команды отмены и lprm
Команда отмены завершает запрос на печать из команды lp . Команда lprm завершает все запросы lpr . Вы можете указать либо идентификатор запроса (отображается с помощью lp или lpq), либо имя принтера.
$cancel laserp-575 request "laserp-575" cancelled $
Чтобы отменить любой запрос, который в данный момент печатается, независимо от его идентификатора, просто введите «Отмена» и имя принтера —
$cancel laserp request "laserp-573" cancelled $
Команда lprm отменит активное задание, если оно принадлежит вам. В противном случае вы можете указать номера заданий в качестве аргументов или использовать тире (-) для удаления всех ваших заданий —
$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $
Команда lprm сообщает вам фактические имена файлов, удаленные из очереди принтера.
Отправка электронной почты
Вы используете команду Unix mail для отправки и получения почты. Вот синтаксис для отправки электронной почты —
$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr
Вот важные опции, связанные с командой mail -s
Sr.No. | Вариант и описание |
---|---|
1 |
-s Указывает тему в командной строке. |
2 |
-с Отправляет копии в список пользователей. Список должен быть разделенным запятыми списком имен. |
3 |
-b Отправляет слепые копии в список. Список должен быть разделенным запятыми списком имен. |
-s
Указывает тему в командной строке.
-с
Отправляет копии в список пользователей. Список должен быть разделенным запятыми списком имен.
-b
Отправляет слепые копии в список. Список должен быть разделенным запятыми списком имен.
Ниже приведен пример отправки тестового сообщения на адрес [email protected].
$mail -s "Test Message" [email protected]
Затем ожидается, что вы напечатаете ваше сообщение, после чего в начале строки появится «control-D» . Чтобы остановить, просто введите точку (.) Следующим образом —
Hi, This is a test . Cc:
Вы можете отправить полный файл с помощью оператора перенаправления < следующим образом:
$mail -s "Report 05/06/07" [email protected] < demo.txt
Чтобы проверить входящую электронную почту в вашей системе Unix, вы просто набираете электронную почту следующим образом —
$mail no email
Unix — трубы и фильтры
В этой главе мы подробно обсудим каналы и фильтры в Unix. Вы можете соединить две команды вместе, чтобы вывод одной программы стал вводом следующей программы. Две или более команды, соединенные таким образом, образуют канал.
Чтобы создать трубу, поместите вертикальную черту ( | ) в командной строке между двумя командами.
Когда программа берет свой ввод из другой программы, она выполняет некоторую операцию над этим входом и записывает результат в стандартный вывод. Это называется фильтром .
Команда 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 |
-с Печатает только количество совпадающих строк. |
5 |
-я Совпадает в верхнем или нижнем регистре. |
-v
Печатает все строки, которые не соответствуют шаблону.
-n
Печатает совпавшую строку и ее номер строки.
-l
Печатает только имена файлов с совпадающими строками (буква «l»)
-с
Печатает только количество совпадающих строк.
-я
Совпадает в верхнем или нижнем регистре.
Давайте теперь воспользуемся регулярным выражением, которое сообщает 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 |
-р Меняет порядок сортировки. |
3 |
-f Сортирует верхний и нижний регистр вместе. |
4 |
+ х Игнорирует первые поля x при сортировке. |
-n
Сортирует численно (пример: 10 будет сортировать после 2), игнорирует пробелы и табуляции.
-р
Меняет порядок сортировки.
-f
Сортирует верхний и нижний регистр вместе.
+ х
Игнорирует первые поля 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 и другие команды
Длинный вывод обычно может быть заархивирован вами на экране, но если вы пропустите текст через more или используете команду pg в качестве фильтра; дисплей останавливается, когда на экране появляется текст.
Давайте предположим, что у вас есть длинный список каталогов. Чтобы упростить чтение отсортированного списка, передайте вывод следующим образом:
$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%)
Экран заполнится, как только на экране появится текст, состоящий из строк, отсортированных по порядку размера файла. В нижней части экрана находится подсказка, в которой вы можете ввести команду для перемещения по отсортированному тексту.
Когда вы закончите с этим экраном, вы можете использовать любую из команд, перечисленных в обсуждении дополнительной программы.
Unix — Управление процессами
В этой главе мы подробно обсудим управление процессами в Unix. Когда вы выполняете программу в своей системе Unix, система создает специальную среду для этой программы. Эта среда содержит все необходимое для запуска программы, как если бы в системе не было запущено никакой другой программы.
Всякий раз, когда вы запускаете команду в Unix, она создает или запускает новый процесс. Когда вы попробовали команду ls для просмотра содержимого каталога, вы запустили процесс. Проще говоря, процесс является экземпляром работающей программы.
Операционная система отслеживает процессы с помощью пятизначного идентификационного номера, известного как 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 хочет какой-либо ввод (чего нет), она переходит в состояние остановки, пока мы не переместим ее на передний план и не передадим ей данные с клавиатуры.
Эта первая строка содержит информацию о фоновом процессе — номер задания и идентификатор процесса. Вам нужно знать номер задания, чтобы манипулировать им между фоном и передним планом.
Нажмите клавишу ввода, и вы увидите следующее —
[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 Идентификатор пользователя, которому принадлежит этот процесс (лицо, выполняющее его) |
2 |
PID Идентификатор процесса |
3 |
PPID ID родительского процесса (идентификатор процесса, который его запустил) |
4 |
С Загрузка процессора процессом |
5 |
STIME Время начала процесса |
6 |
TTY Тип терминала, связанный с процессом |
7 |
ВРЕМЯ Процессорное время, затраченное на процесс |
8 |
CMD Команда, которая запустила этот процесс |
UID
Идентификатор пользователя, которому принадлежит этот процесс (лицо, выполняющее его)
PID
Идентификатор процесса
PPID
ID родительского процесса (идентификатор процесса, который его запустил)
С
Загрузка процессора процессом
STIME
Время начала процесса
TTY
Тип терминала, связанный с процессом
ВРЕМЯ
Процессорное время, затраченное на процесс
CMD
Команда, которая запустила этот процесс
Есть и другие опции, которые можно использовать вместе с командой ps —
Sr.No. | Вариант и описание |
---|---|
1 |
-a Показывает информацию обо всех пользователях |
2 |
-Икс Показывает информацию о процессах без терминалов |
3 |
-u Показывает дополнительную информацию, такую как опция -f |
4 |
-e Отображает расширенную информацию |
-a
Показывает информацию обо всех пользователях
-Икс
Показывает информацию о процессах без терминалов
-u
Показывает дополнительную информацию, такую как опция -f
-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 (идентификатор родительского процесса). В некоторых случаях эти процессы называются бесхозными процессами.
Когда процесс завершен, список ps может по-прежнему отображать процесс с состоянием Z. Это зомби или несуществующий процесс. Процесс мертв и не используется. Эти процессы отличаются от бесхозных процессов. Они завершили выполнение, но все еще находят запись в таблице процессов.
Процессы Демона
Демоны — это системные фоновые процессы, которые часто запускаются с разрешениями корневых и сервисных запросов от других процессов.
У демона нет управляющего терминала. Не может открыть / dev / tty . Если вы выполните команду ps -ef и посмотрите на поле tty , все демоны будут иметь ? для tty .
Точнее говоря, демон — это процесс, который работает в фоновом режиме, обычно ожидая чего-то, с чем он способен работать. Например, демон принтера, ожидающий команды печати.
Если у вас есть программа, которая требует длительной обработки, то стоит сделать ее демоном и запускать ее в фоновом режиме.
Верхняя Команда
Команда top — очень полезный инструмент для быстрого отображения процессов, отсортированных по различным критериям.
Это интерактивный диагностический инструмент, который часто обновляется и отображает информацию о физической и виртуальной памяти, использовании процессора, средних значениях нагрузки и загруженных процессах.
Вот простой синтаксис для запуска команды top и просмотра статистики использования процессора различными процессами:
$top
Идентификатор задания и идентификатор процесса
Фоновыми и приостановленными процессами обычно манипулируют через номер задания (идентификатор задания) . Этот номер отличается от идентификатора процесса и используется потому, что он короче.
Кроме того, задание может состоять из нескольких процессов, выполняемых последовательно или одновременно, параллельно. Использование идентификатора задания проще, чем отслеживание отдельных процессов.
Unix — Утилиты Сетевой Связи
В этой главе мы подробно обсудим утилиты сетевого взаимодействия в Unix. Когда вы работаете в распределенной среде, вам нужно общаться с удаленными пользователями, а также вам нужен доступ к удаленным компьютерам Unix.
Существует несколько утилит Unix, которые помогают пользователям выполнять вычисления в сетевой распределенной среде. В этой главе перечислены некоторые из них.
Пинг Утилита
Команда ping отправляет эхо-запрос на хост, доступный в сети. Используя эту команду, вы можете проверить, хорошо ли реагирует удаленный хост.
Команда ping полезна для следующих целей:
- Отслеживание и выявление аппаратных и программных проблем.
- Определение статуса сети и различных внешних хостов.
- Тестирование, измерение и управление сетями.
Синтаксис
Ниже приведен простой синтаксис для использования команды ping:
$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 расшифровывается как «Протокол передачи файла». Эта утилита поможет вам загрузить и загрузить файл с одного компьютера на другой.
Утилита ftp имеет свой собственный набор Unix-подобных команд. Эти команды помогут вам выполнить такие задачи, как —
-
Подключитесь и войдите на удаленный хост.
-
Навигация по каталогам.
-
Список содержимого каталога.
-
Положите и получите файлы.
-
Передача файлов в формате ascii , ebcdic или bin .
Подключитесь и войдите на удаленный хост.
Навигация по каталогам.
Список содержимого каталога.
Положите и получите файлы.
Передача файлов в формате ascii , ebcdic или bin .
Синтаксис
Ниже приведен простой синтаксис для использования команды ping:
$ftp hostname or ip-address
Приведенная выше команда запросит у вас идентификатор входа и пароль. После проверки подлинности вы можете получить доступ к домашнему каталогу учетной записи, и вы сможете выполнять различные команды.
В следующих таблицах перечислены несколько важных команд:
Sr.No. | Команда и описание |
---|---|
1 |
положить имя файла Загружает имя файла с локального компьютера на удаленный компьютер. |
2 |
получить имя файла Загружает имя файла с удаленного компьютера на локальный компьютер. |
3 |
список файлов mput Загружает более одного файла с локального компьютера на удаленный компьютер. |
4 |
список файлов mget Загружает более одного файла с удаленного компьютера на локальный компьютер. |
5 |
подсказать Выключает подсказку По умолчанию вы получите запрос на загрузку или скачивание файлов с помощью команд mput или mget . |
6 |
подсказать Включает подсказку. |
7 |
реж Перечисляет все файлы, доступные в текущем каталоге удаленного компьютера. |
8 |
имя диска Изменяет каталог на dirname на удаленной машине. |
9 |
жк dirname Изменяет каталог на dirname на локальной машине. |
10 |
уволиться Помогает выйти из текущего входа. |
положить имя файла
Загружает имя файла с локального компьютера на удаленный компьютер.
получить имя файла
Загружает имя файла с удаленного компьютера на локальный компьютер.
список файлов mput
Загружает более одного файла с локального компьютера на удаленный компьютер.
список файлов mget
Загружает более одного файла с удаленного компьютера на локальный компьютер.
подсказать
Выключает подсказку По умолчанию вы получите запрос на загрузку или скачивание файлов с помощью команд mput или mget .
подсказать
Включает подсказку.
реж
Перечисляет все файлы, доступные в текущем каталоге удаленного компьютера.
имя диска
Изменяет каталог на dirname на удаленной машине.
жк dirname
Изменяет каталог на dirname на локальной машине.
уволиться
Помогает выйти из текущего входа.
Следует отметить, что все файлы будут загружены или загружены в или из текущих каталогов. Если вы хотите загрузить свои файлы в определенный каталог, вам нужно сначала перейти в этот каталог, а затем загрузить необходимые файлы.
пример
Ниже приведен пример, демонстрирующий работу нескольких команд:
$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 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.
Unix — Руководство по редактору vi
В этой главе мы поймем, как работает редактор vi в Unix. Есть много способов редактировать файлы в Unix. Редактирование файлов с помощью экранно-ориентированного текстового редактора vi является одним из лучших способов. Этот редактор позволяет редактировать строки в контексте с другими строками в файле.
Улучшенная версия редактора vi, которая называется VIM , также стала доступной. Здесь VIM расшифровывается как Vi IM доказано.
vi обычно считается стандартом де-факто в редакторах Unix, потому что —
-
Обычно он доступен во всех вариантах Unix-системы.
-
Его реализации очень похожи по всем направлениям.
-
Это требует очень мало ресурсов.
-
Он более удобен для пользователя, чем другие редакторы, такие как ed или ex .
Обычно он доступен во всех вариантах Unix-системы.
Его реализации очень похожи по всем направлениям.
Это требует очень мало ресурсов.
Он более удобен для пользователя, чем другие редакторы, такие как ed или ex .
Вы можете использовать редактор vi для редактирования существующего файла или создания нового файла с нуля. Вы также можете использовать этот редактор, чтобы просто прочитать текстовый файл.
Запуск редактора vi
В следующей таблице перечислены основные команды для использования редактора vi —
Sr.No. | Команда и описание |
---|---|
1 |
vi имя файла Создает новый файл, если он уже не существует, в противном случае открывает существующий файл. |
2 |
vi -R имя файла Открывает существующий файл в режиме только для чтения. |
3 |
просмотреть имя файла Открывает существующий файл в режиме только для чтения. |
vi имя файла
Создает новый файл, если он уже не существует, в противном случае открывает существующий файл.
vi -R имя файла
Открывает существующий файл в режиме только для чтения.
просмотреть имя файла
Открывает существующий файл в режиме только для чтения.
Ниже приведен пример создания нового файла тестового файла, если он уже не существует в текущем рабочем каталоге.
$vi testfile
Приведенная выше команда сгенерирует следующий вывод:
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "testfile" [New File]
Вы заметите тильду (~) в каждой строке, следующей за курсором. Тильда представляет собой неиспользованную линию. Если строка не начинается с тильды и кажется пустой, имеется пробел, табуляция, новая строка или какой-либо другой невидимый символ.
Теперь у вас есть один открытый файл, чтобы начать работу. Прежде чем продолжить, давайте разберемся с несколькими важными понятиями.
Режимы работы
Работая с редактором vi, мы обычно сталкиваемся со следующими двумя режимами:
-
Командный режим — этот режим позволяет выполнять административные задачи, такие как сохранение файлов, выполнение команд, перемещение курсора, вырезание (рывок) и вставка строк или слов, а также поиск и замена. В этом режиме все, что вы вводите, интерпретируется как команда.
-
Режим вставки — этот режим позволяет вставлять текст в файл. Все, что набрано в этом режиме, интерпретируется как ввод и помещается в файл.
Командный режим — этот режим позволяет выполнять административные задачи, такие как сохранение файлов, выполнение команд, перемещение курсора, вырезание (рывок) и вставка строк или слов, а также поиск и замена. В этом режиме все, что вы вводите, интерпретируется как команда.
Режим вставки — этот режим позволяет вставлять текст в файл. Все, что набрано в этом режиме, интерпретируется как ввод и помещается в файл.
vi всегда запускается в командном режиме . Чтобы ввести текст, вы должны быть в режиме вставки, для которого просто введите I. Чтобы выйти из режима вставки, нажмите клавишу Esc , и вы вернетесь в командный режим.
Подсказка — если вы не уверены, в каком режиме находитесь, дважды нажмите клавишу Esc; это приведет вас в командный режим. Вы открываете файл, используя редактор vi. Начните с ввода некоторых символов, а затем перейдите в командный режим, чтобы понять разницу.
Выход из vi
Команда выйти из vi : q . Находясь в командном режиме, введите двоеточие и ‘q’, а затем возврат. Если ваш файл был каким-либо образом изменен, редактор предупредит вас об этом и не даст вам выйти. Чтобы игнорировать это сообщение, команда выхода из vi без сохранения : q! , Это позволяет выйти из vi без сохранения каких-либо изменений.
Команда для сохранения содержимого редактора : w . Вы можете объединить вышеуказанную команду с командой quit или использовать : wq и return.
Самый простой способ сохранить ваши изменения и выйти из vi с помощью команды ZZ. Когда вы находитесь в командном режиме, введите ZZ . Команда ZZ работает так же, как команда : wq .
Если вы хотите указать / указать какое-либо конкретное имя для файла, вы можете сделать это, указав его после : w . Например, если вы хотите сохранить файл, над которым вы работали, под другим именем с именем filename2 , введите : w filename2 и вернитесь.
Перемещение внутри файла
Чтобы перемещаться по файлу, не затрагивая текст, вы должны находиться в командном режиме (дважды нажмите клавишу Esc). В следующей таблице перечислены несколько команд, которые вы можете использовать для перемещения по одному символу за раз —
Sr.No. | Команда и описание |
---|---|
1 |
К Перемещает курсор на одну строку вверх |
2 |
J Перемещает курсор вниз на одну строку |
3 |
час Перемещает курсор влево на одну позицию символа |
4 |
L Перемещает курсор на одну позицию вправо |
К
Перемещает курсор на одну строку вверх
J
Перемещает курсор вниз на одну строку
час
Перемещает курсор влево на одну позицию символа
L
Перемещает курсор на одну позицию вправо
Следующие пункты необходимо учитывать для перемещения в файле —
-
vi чувствителен к регистру. Вы должны обратить внимание на использование заглавных букв при использовании команд.
-
Большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2j перемещает курсор на две строки вниз по положению курсора.
vi чувствителен к регистру. Вы должны обратить внимание на использование заглавных букв при использовании команд.
Большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2j перемещает курсор на две строки вниз по положению курсора.
Существует много других способов перемещения внутри файла в vi. Помните, что вы должны быть в командном режиме ( нажмите Esc дважды ). В следующей таблице перечислены несколько команд для перемещения по файлу.
Sr.No. | Команда и описание |
---|---|
1 |
0 или | Позиционирует курсор в начале строки |
2 |
$ Позиционирует курсор в конце строки |
3 |
вес Позиционирует курсор на следующее слово |
4 |
б Позиционирует курсор к предыдущему слову |
5 |
( Помещает курсор в начало текущего предложения |
6 |
) Помещает курсор в начало следующего предложения |
7 |
Е Перемещается в конец пустого слова с разделителями |
8 |
{ Перемещает абзац назад |
9 |
} Перемещает абзац вперед |
10 |
[[ Перемещает раздел назад |
11 |
]] Перемещает раздел вперед |
12 |
п | Перемещается в столбец n в текущей строке |
13 |
1G Перемещается на первую строку файла |
14 |
г Перемещается на последнюю строку файла |
15 |
НГ Перемещается на n- ю строку файла |
16 |
: п Перемещается на n- ю строку файла |
17 |
Ь Движется вперед к |
18 |
Fc Перемещается обратно в c |
19 |
ЧАС Перемещается в верхнюю часть экрана |
20 |
нГн Перемещается на n- ю строку сверху экрана |
21 |
M Перемещается в середину экрана |
22 |
L Перейти к нижней части экрана |
23 |
нл Перемещается на n- ю строку снизу экрана |
24 |
:Икс Двоеточие, сопровождаемое числом, поместило бы курсор на номер строки, представленный x |
0 или |
Позиционирует курсор в начале строки
$
Позиционирует курсор в конце строки
вес
Позиционирует курсор на следующее слово
б
Позиционирует курсор к предыдущему слову
(
Помещает курсор в начало текущего предложения
)
Помещает курсор в начало следующего предложения
Е
Перемещается в конец пустого слова с разделителями
{
Перемещает абзац назад
}
Перемещает абзац вперед
[[
Перемещает раздел назад
]]
Перемещает раздел вперед
п |
Перемещается в столбец n в текущей строке
1G
Перемещается на первую строку файла
г
Перемещается на последнюю строку файла
НГ
Перемещается на n- ю строку файла
: п
Перемещается на n- ю строку файла
Ь
Движется вперед к
Fc
Перемещается обратно в c
ЧАС
Перемещается в верхнюю часть экрана
нГн
Перемещается на n- ю строку сверху экрана
M
Перемещается в середину экрана
L
Перейти к нижней части экрана
нл
Перемещается на n- ю строку снизу экрана
:Икс
Двоеточие, сопровождаемое числом, поместило бы курсор на номер строки, представленный x
Команды управления
Следующие команды могут использоваться с управляющей клавишей для выполнения функций, указанных в таблице ниже:
Sr.No. | Команда и описание |
---|---|
1 |
CTRL & плюс; д Перемещается вперед на 1/2 экрана |
2 |
CTRL & плюс; е Перемещение вперед на один полный экран |
3 |
CTRL и плюс, у Перемещение назад на 1/2 экрана |
4 |
CTRL & плюс; б Перемещается назад на один полный экран |
5 |
CTRL и плюс; е Перемещает экран на одну строку вверх |
6 |
CTRL и плюс, у Перемещает экран на одну строку вниз |
7 |
CTRL и плюс, у Перемещает экран на 1/2 страницы |
8 |
CTRL & плюс; д Перемещает экран вниз на 1/2 страницы |
9 |
CTRL & плюс; б Перемещает экран на одну страницу вверх |
10 |
CTRL & плюс; е Перемещает экран на одну страницу вниз |
11 |
CTRL и плюс, я Перерисовывает экран |
CTRL & плюс; д
Перемещается вперед на 1/2 экрана
CTRL & плюс; е
Перемещение вперед на один полный экран
CTRL и плюс, у
Перемещение назад на 1/2 экрана
CTRL & плюс; б
Перемещается назад на один полный экран
CTRL и плюс; е
Перемещает экран на одну строку вверх
CTRL и плюс, у
Перемещает экран на одну строку вниз
CTRL и плюс, у
Перемещает экран на 1/2 страницы
CTRL & плюс; д
Перемещает экран вниз на 1/2 страницы
CTRL & плюс; б
Перемещает экран на одну страницу вверх
CTRL & плюс; е
Перемещает экран на одну страницу вниз
CTRL и плюс, я
Перерисовывает экран
Редактирование файлов
Чтобы редактировать файл, вам нужно находиться в режиме вставки. Есть много способов войти в режим вставки из командного режима —
Sr.No. | Команда и описание |
---|---|
1 |
я Вставляет текст перед текущим положением курсора |
2 |
я Вставляет текст в начале текущей строки |
3 |
Вставляет текст после текущей позиции курсора |
4 |
Вставляет текст в конец текущей строки |
5 |
о Создает новую строку для ввода текста под курсором |
6 |
О Создает новую строку для ввода текста над курсором |
я
Вставляет текст перед текущим положением курсора
я
Вставляет текст в начале текущей строки
Вставляет текст после текущей позиции курсора
Вставляет текст в конец текущей строки
о
Создает новую строку для ввода текста под курсором
О
Создает новую строку для ввода текста над курсором
Удаление персонажей
Вот список важных команд, которые можно использовать для удаления символов и строк в открытом файле.
Sr.No. | Команда и описание |
---|---|
1 |
Икс Удаляет символ под курсором |
2 |
Икс Удаляет символ перед положением курсора |
3 |
с.в. Удаляет от текущего местоположения курсора до следующего слова |
4 |
d ^ Удаляет из текущей позиции курсора в начало строки |
5 |
d $ Удаляет от текущей позиции курсора до конца строки |
6 |
D Удаляет от позиции курсора до конца текущей строки |
7 |
дд Удаляет строку, на которой находится курсор |
Икс
Удаляет символ под курсором
Икс
Удаляет символ перед положением курсора
с.в.
Удаляет от текущего местоположения курсора до следующего слова
d ^
Удаляет из текущей позиции курсора в начало строки
d $
Удаляет от текущей позиции курсора до конца строки
D
Удаляет от позиции курсора до конца текущей строки
дд
Удаляет строку, на которой находится курсор
Как упомянуто выше, большинству команд в vi может предшествовать количество раз, когда вы хотите, чтобы действие произошло. Например, 2x удаляет два символа под курсором, а 2dd удаляет две строки, на которых находится курсор.
Перед тем, как мы продолжим, рекомендуется отработать команды.
Изменить команды
У вас также есть возможность изменять символы, слова или строки в vi без их удаления. Вот соответствующие команды —
Sr.No. | Команда и описание |
---|---|
1 |
куб.см Удаляет содержимое строки, оставляя вас в режиме вставки. |
2 |
ХО Изменяет слово, на котором находится курсор, с курсора на строчный конец слова. |
3 |
р Заменяет символ под курсором. vi возвращается в командный режим после ввода замены. |
4 |
р Перезаписывает несколько символов, начиная с символа, который в данный момент находится под курсором. Вы должны использовать Esc, чтобы остановить перезапись. |
5 |
s Заменяет текущий символ на введенный вами символ. После этого вы остаетесь в режиме вставки. |
6 |
S Удаляет строку, на которой находится курсор, и заменяет ее новым текстом. После ввода нового текста vi остается в режиме вставки. |
куб.см
Удаляет содержимое строки, оставляя вас в режиме вставки.
ХО
Изменяет слово, на котором находится курсор, с курсора на строчный конец слова.
р
Заменяет символ под курсором. vi возвращается в командный режим после ввода замены.
р
Перезаписывает несколько символов, начиная с символа, который в данный момент находится под курсором. Вы должны использовать Esc, чтобы остановить перезапись.
s
Заменяет текущий символ на введенный вами символ. После этого вы остаетесь в режиме вставки.
S
Удаляет строку, на которой находится курсор, и заменяет ее новым текстом. После ввода нового текста vi остается в режиме вставки.
Команды копирования и вставки
Вы можете скопировать строки или слова из одного места, а затем вставить их в другое место, используя следующие команды:
Sr.No. | Команда и описание |
---|---|
1 |
уу Копирует текущую строку. |
2 |
уш Копирует текущее слово из символа, в котором находится курсор в нижнем регистре, до конца слова. |
3 |
п Помещает скопированный текст после курсора. |
4 |
п Помещает вытянутый текст перед курсором. |
уу
Копирует текущую строку.
уш
Копирует текущее слово из символа, в котором находится курсор в нижнем регистре, до конца слова.
п
Помещает скопированный текст после курсора.
п
Помещает вытянутый текст перед курсором.
Расширенные команды
Есть несколько расширенных команд, которые упрощают ежедневное редактирование и позволяют более эффективно использовать vi —
Sr.No. | Команда и описание |
---|---|
1 |
J Объединяет текущую строку со следующей. Количество j команд объединяет множество строк. |
2 |
<< Смещает текущую строку влево на одну ширину смещения. |
3 |
>> Смещает текущую строку вправо на одну ширину смещения. |
4 |
~ Переключает регистр символа под курсором. |
5 |
^ G Нажмите одновременно клавиши Ctrl и G, чтобы отобразить текущее имя файла и статус. |
6 |
U Восстанавливает текущую строку в состояние, в котором она находилась до того, как курсор вошел в строку. |
7 |
U Это помогает отменить последнее изменение, которое было сделано в файле. Повторное нажатие кнопки «u» приведет к изменению. |
8 |
J Объединяет текущую строку со следующей. Граф соединяет столько строк. |
9 |
: е Отображает текущую позицию в файле в% и имя файла, общее количество файлов. |
10 |
: f имя файла Переименовывает текущий файл в имя файла. |
11 |
: w имя файла Пишет в файл имя файла. |
12 |
: e имя файла Открывает другой файл с именем файла. |
13 |
: cd dirname Изменяет текущий рабочий каталог на dirname. |
14 |
: e # Переключение между двумя открытыми файлами. |
15 |
: п Если вы открываете несколько файлов с помощью vi, используйте : n, чтобы перейти к следующему файлу в серии. |
16 |
:п Если вы открываете несколько файлов с помощью vi, используйте : p, чтобы перейти к предыдущему файлу в серии. |
17 |
: N Если вы открываете несколько файлов с помощью vi, используйте : N, чтобы перейти к предыдущему файлу в серии. |
18 |
: r файл Читает файл и вставляет его после текущей строки. |
19 |
: NR файл Читает файл и вставляет его после строки n . |
J
Объединяет текущую строку со следующей. Количество j команд объединяет множество строк.
<<
Смещает текущую строку влево на одну ширину смещения.
>>
Смещает текущую строку вправо на одну ширину смещения.
~
Переключает регистр символа под курсором.
^ G
Нажмите одновременно клавиши Ctrl и G, чтобы отобразить текущее имя файла и статус.
U
Восстанавливает текущую строку в состояние, в котором она находилась до того, как курсор вошел в строку.
U
Это помогает отменить последнее изменение, которое было сделано в файле. Повторное нажатие кнопки «u» приведет к изменению.
J
Объединяет текущую строку со следующей. Граф соединяет столько строк.
: е
Отображает текущую позицию в файле в% и имя файла, общее количество файлов.
: f имя файла
Переименовывает текущий файл в имя файла.
: w имя файла
Пишет в файл имя файла.
: e имя файла
Открывает другой файл с именем файла.
: cd dirname
Изменяет текущий рабочий каталог на dirname.
: e #
Переключение между двумя открытыми файлами.
: п
Если вы открываете несколько файлов с помощью vi, используйте : n, чтобы перейти к следующему файлу в серии.
:п
Если вы открываете несколько файлов с помощью vi, используйте : p, чтобы перейти к предыдущему файлу в серии.
: N
Если вы открываете несколько файлов с помощью vi, используйте : N, чтобы перейти к предыдущему файлу в серии.
: r файл
Читает файл и вставляет его после текущей строки.
: NR файл
Читает файл и вставляет его после строки n .
Поиск слов и символов
Редактор vi имеет два вида поиска: строковый и символьный . Для поиска строки, / и ? команды используются. Когда вы запустите эти команды, только что набранная команда будет показана в последней строке экрана, где вы вводите конкретную строку для поиска.
Эти две команды отличаются только в направлении, где происходит поиск —
-
Команда / выполняет поиск вперед (вниз) в файле.
-
? Команда ищет в файле назад (вверх).
Команда / выполняет поиск вперед (вниз) в файле.
? Команда ищет в файле назад (вверх).
Команды 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 |
: установить IC Игнорирует случай при поиске |
2 |
: set ai Устанавливает автоиндентирование |
3 |
: set noai Отключает автоиндентирование |
4 |
: установить ню Отображает строки с номерами строк на левой стороне |
5 |
: установить sw Устанавливает ширину программной вкладки. Например, вы должны установить ширину смещения 4 с помощью этой команды — : set sw = 4 |
6 |
: установить ws Если WrapScan установлен, и слово не найдено в нижней части файла, он попытается найти его в начале |
7 |
: установить wm Если эта опция имеет значение больше нуля, редактор автоматически «переносит слова». Например, чтобы установить поле для переноса в два символа, вы должны набрать следующее :: set wm = 2 |
8 |
: установить ро Изменяет тип файла на «только для чтения» |
9 |
: установить срок Печатает тип терминала |
10 |
: установить BF Сбрасывает управляющие символы с ввода |
: установить IC
Игнорирует случай при поиске
: set ai
Устанавливает автоиндентирование
: set noai
Отключает автоиндентирование
: установить ню
Отображает строки с номерами строк на левой стороне
: установить sw
Устанавливает ширину программной вкладки. Например, вы должны установить ширину смещения 4 с помощью этой команды — : set sw = 4
: установить ws
Если WrapScan установлен, и слово не найдено в нижней части файла, он попытается найти его в начале
: установить wm
Если эта опция имеет значение больше нуля, редактор автоматически «переносит слова». Например, чтобы установить поле для переноса в два символа, вы должны набрать следующее :: set wm = 2
: установить ро
Изменяет тип файла на «только для чтения»
: установить срок
Печатает тип терминала
: установить BF
Сбрасывает управляющие символы с ввода
Запуск команд
В vi есть возможность запускать команды из редактора. Чтобы запустить команду, вам нужно только перейти в командный режим и набрать :! команда.
Например, если вы хотите проверить, существует ли файл, прежде чем пытаться сохранить файл с таким именем, вы можете ввести :! ls и вы увидите вывод ls на экране.
Вы можете нажать любую клавишу (или управляющую последовательность команды), чтобы вернуться к сеансу vi.
Замена текста
Команда подстановки ( : s / ) позволяет быстро заменить слова или группы слов в ваших файлах. Ниже приводится синтаксис для замены текста:
:s/search/replace/g
Г означает глобально. Результатом этой команды является то, что все вхождения в строке курсора изменены.
Важные моменты для заметки
Следующие пункты добавят к вашему успеху с vi —
-
Вы должны быть в командном режиме, чтобы использовать команды. (Нажмите Esc дважды в любое время, чтобы убедиться, что вы находитесь в командном режиме.)
-
Вы должны быть осторожны с командами. Они чувствительны к регистру.
-
Вы должны быть в режиме вставки для ввода текста.
Вы должны быть в командном режиме, чтобы использовать команды. (Нажмите Esc дважды в любое время, чтобы убедиться, что вы находитесь в командном режиме.)
Вы должны быть осторожны с командами. Они чувствительны к регистру.
Вы должны быть в режиме вставки для ввода текста.
Unix — Что такое оболочки?
Оболочка предоставляет вам интерфейс к системе Unix. Он собирает данные от вас и выполняет программы на основе этого ввода. Когда программа завершает выполнение, она отображает вывод этой программы.
Shell — это среда, в которой мы можем запускать наши команды, программы и сценарии оболочки. Существуют разные разновидности оболочки, так же как разные разновидности операционных систем. Каждый вариант оболочки имеет свой собственный набор распознаваемых команд и функций.
Shell Prompt
Подсказка $ , которая называется командной строкой , выдается оболочкой. Пока отображается приглашение, вы можете ввести команду.
Shell читает ваш ввод после того, как вы нажмете Enter . Он определяет команду, которую вы хотите выполнить, посмотрев на первое слово вашего ввода. Слово — это непрерывный набор символов. Пробелы и табуляции разделяют слова.
Ниже приведен простой пример команды date , которая отображает текущую дату и время:
$date Thu Jun 25 08:30:19 MST 2009
Вы можете настроить командную строку, используя переменную среды PS1, описанную в руководстве по среде.
Типы раковин
В Unix есть два основных типа оболочек —
-
Оболочка Bourne — если вы используете оболочку типа Bourne, символ $ является приглашением по умолчанию.
-
Оболочка C — если вы используете оболочку типа C, символ% является приглашением по умолчанию.
Оболочка Bourne — если вы используете оболочку типа Bourne, символ $ является приглашением по умолчанию.
Оболочка C — если вы используете оболочку типа C, символ% является приглашением по умолчанию.
Bourne Shell имеет следующие подкатегории —
- Оболочка Борна (ш)
- Скорлупа корн (кш)
- Bourne Again shell (Баш)
- POSIX оболочка (ш)
Далее следуют различные оболочки типа C —
- C оболочка (csh)
- TENEX / TOPS C shell (tcsh)
Оригинальная оболочка Unix была написана в середине 1970-х годов Стивеном Борном, когда он работал в лаборатории AT & T Bell Labs в Нью-Джерси.
Оболочка Bourne была первой оболочкой, появившейся в системах Unix, поэтому ее называют «оболочкой».
Оболочка Bourne обычно устанавливается как / bin / sh в большинстве версий Unix. По этой причине это предпочтительная оболочка для написания скриптов, которая может использоваться в разных версиях Unix.
В этой главе мы рассмотрим большинство концепций Shell, основанных на оболочке Borne.
Скрипты оболочки
Основная концепция сценария оболочки — это список команд, которые перечислены в порядке их выполнения. Хороший сценарий оболочки будет иметь комментарии, перед которыми стоит знак # , описывающий шаги.
Существуют условные тесты, такие как значение A больше значения B, циклы, позволяющие нам просматривать огромные объемы данных, файлы для чтения и хранения данных и переменные для чтения и хранения данных, а сценарий может включать функции.
Мы собираемся написать много сценариев в следующих разделах. Это был бы простой текстовый файл, в который мы поместили бы все наши команды и несколько других необходимых конструкций, которые сообщают среде оболочки, что и когда делать.
Сценарии и функции оболочки интерпретируются. Это означает, что они не компилируются.
Пример скрипта
Предположим, мы создаем скрипт test.sh. Обратите внимание, что все сценарии будут иметь расширение .sh . Прежде чем добавлять что-либо еще в ваш скрипт, вы должны предупредить систему о запуске скрипта оболочки. Это делается с помощью конструкции Шебанга . Например —
#!/bin/sh
Это говорит системе, что последующие команды должны выполняться оболочкой Bourne. Это называется шебанг, потому что символ # называется хешем, а символ! Символ называется взрывом .
Чтобы создать сценарий, содержащий эти команды, вы сначала помещаете строку shebang, а затем добавляете команды —
#!/bin/bash pwd ls
Shell Комментарии
Вы можете поместить свои комментарии в свой сценарий следующим образом —
#!/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
Примечание. Для запуска программы, доступной в текущем каталоге, используйте ./program_name
Расширенные сценарии оболочки
Сценарии оболочки имеют несколько обязательных конструкций, которые сообщают среде оболочки, что и когда делать. Конечно, большинство сценариев более сложны, чем приведенные выше.
В конце концов, оболочка — это настоящий язык программирования с переменными, управляющими структурами и так далее. Независимо от того, насколько сложным становится сценарий, он все равно представляет собой список команд, выполняемых последовательно.
Следующий скрипт использует команду чтения, которая принимает ввод с клавиатуры и назначает его в качестве значения переменной 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 — Использование переменных оболочки
В этой главе мы узнаем, как использовать переменные оболочки в Unix. Переменная — это строка символов, которой мы присваиваем значение. Назначенное значение может быть числом, текстом, именем файла, устройством или любым другим типом данных.
Переменная — это не более чем указатель на фактические данные. Оболочка позволяет создавать, назначать и удалять переменные.
Имена переменных
Имя переменной может содержать только буквы (от a до z или от A до Z), цифры (от 0 до 9) или символ подчеркивания (_).
По соглашению, переменные оболочки Unix будут иметь свои имена в UPPERCASE.
Следующие примеры являются допустимыми именами переменных —
_ALI TOKEN_A VAR_1 VAR_2
Ниже приведены примеры недопустимых имен переменных.
2_VAR -VARIABLE VAR1-VAR2 VAR_A!
Причина, по которой вы не можете использовать другие символы, такие как ! , * , или — это то, что эти символы имеют особое значение для оболочки.
Определение переменных
Переменные определяются следующим образом:
variable_name=variable_value
Например —
NAME="Zara Ali"
Приведенный выше пример определяет переменную NAME и присваивает ей значение «Zara Ali». Переменные этого типа называются скалярными переменными . Скалярная переменная может содержать только одно значение за раз.
Оболочка позволяет хранить любое значение в переменной. Например —
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 для сброса переменных, которые помечены только для чтения .
Типы переменных
Когда работает оболочка, присутствуют три основных типа переменных:
-
Локальные переменные . Локальная переменная — это переменная, которая присутствует в текущем экземпляре оболочки. Он недоступен для программ, запускаемых оболочкой. Они устанавливаются в командной строке.
-
Переменные среды — переменная среды доступна для любого дочернего процесса оболочки. Некоторым программам нужны переменные окружения для правильной работы. Обычно сценарий оболочки определяет только те переменные среды, которые необходимы программам, которые он запускает.
-
Переменные оболочки — переменная оболочки — это специальная переменная, которая устанавливается оболочкой и требуется для правильной работы оболочки. Некоторые из этих переменных являются переменными среды, тогда как другие являются локальными переменными.
Локальные переменные . Локальная переменная — это переменная, которая присутствует в текущем экземпляре оболочки. Он недоступен для программ, запускаемых оболочкой. Они устанавливаются в командной строке.
Переменные среды — переменная среды доступна для любого дочернего процесса оболочки. Некоторым программам нужны переменные окружения для правильной работы. Обычно сценарий оболочки определяет только те переменные среды, которые необходимы программам, которые он запускает.
Переменные оболочки — переменная оболочки — это специальная переменная, которая устанавливается оболочкой и требуется для правильной работы оболочки. Некоторые из этих переменных являются переменными среды, тогда как другие являются локальными переменными.
Unix — специальные переменные
В этой главе мы подробно обсудим специальные переменные в Unix. В одной из наших предыдущих глав мы поняли, как быть осторожными, когда мы используем определенные не буквенно-цифровые символы в именах переменных. Это потому, что эти символы используются в именах специальных переменных Unix. Эти переменные зарезервированы для определенных функций.
Например, символ $ представляет идентификационный номер процесса или PID текущей оболочки —
$echo $$
Приведенная выше команда записывает PID текущей оболочки —
29949
В следующей таблице показан ряд специальных переменных, которые вы можете использовать в своих сценариях оболочки:
Sr.No. | Переменная и описание |
---|---|
1 |
$ 0 Имя файла текущего скрипта. |
2 |
$ п Эти переменные соответствуют аргументам, с которыми был вызван скрипт. Здесь n — положительное десятичное число, соответствующее положению аргумента (первый аргумент — $ 1, второй аргумент — $ 2 и т. Д.). |
3 |
$ # Количество аргументов, предоставленных скрипту. |
4 |
$ * Все аргументы в двойных кавычках. Если скрипт получает два аргумента, $ * эквивалентно $ 1 $ 2. |
5 |
$ @ Все аргументы индивидуально указаны в двойных кавычках. Если скрипт получает два аргумента, $ @ эквивалентно $ 1 $ 2. |
6 |
$? Статус выхода последней выполненной команды. |
7 |
$$ Номер процесса текущей оболочки. Для сценариев оболочки это идентификатор процесса, под которым они выполняются. |
8 |
$! Номер процесса последней фоновой команды. |
$ 0
Имя файла текущего скрипта.
$ п
Эти переменные соответствуют аргументам, с которыми был вызван скрипт. Здесь n — положительное десятичное число, соответствующее положению аргумента (первый аргумент — $ 1, второй аргумент — $ 2 и т. Д.).
$ #
Количество аргументов, предоставленных скрипту.
$ *
Все аргументы в двойных кавычках. Если скрипт получает два аргумента, $ * эквивалентно $ 1 $ 2.
$ @
Все аргументы индивидуально указаны в двойных кавычках. Если скрипт получает два аргумента, $ @ эквивалентно $ 1 $ 2.
$?
Статус выхода последней выполненной команды.
$$
Номер процесса текущей оболочки. Для сценариев оболочки это идентификатор процесса, под которым они выполняются.
$!
Номер процесса последней фоновой команды.
Аргументы командной строки
Аргументы командной строки $ 1, $ 2, $ 3, … $ 9 являются позиционными параметрами, причем $ 0 указывает на фактическую команду, программу, скрипт оболочки или функцию, а $ 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
Специальные параметры $ * и $ @
Существуют специальные параметры, которые позволяют получить доступ ко всем аргументам командной строки одновременно. $ * и $ @ оба будут действовать одинаково, если они не заключены в двойные кавычки, «» .
Оба параметра указывают аргументы командной строки. Однако специальный параметр «$ *» принимает весь список как один аргумент с пробелами между ними, а специальный параметр «$ @» принимает весь список и разделяет его на отдельные аргументы.
Мы можем написать скрипт оболочки, как показано ниже, для обработки неизвестного числа аргументов командной строки с помощью специальных параметров $ * или $ @ —
#!/bin/sh for TOKEN in $* do echo $TOKEN done
Вот пример запуска вышеуказанного скрипта:
$./test.sh Zara Ali 10 Years Old Zara Ali 10 Years Old
Примечание. Здесь 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 — Использование массивов оболочек
В этой главе мы обсудим, как использовать массивы оболочки в Unix. Переменная оболочки достаточно способна содержать одно значение. Эти переменные называются скалярными переменными.
Оболочка поддерживает другой тип переменной, называемый переменной массива . Это может содержать несколько значений одновременно. Массивы предоставляют метод группировки набора переменных. Вместо создания нового имени для каждой необходимой переменной вы можете использовать одну переменную массива, в которой хранятся все остальные переменные.
Все правила именования, обсуждаемые для переменных оболочки, будут применимы при именовании массивов.
Определение значений массива
Разницу между переменной массива и скалярной переменной можно объяснить следующим образом.
Предположим, вы пытаетесь представить имена разных учеников в виде набора переменных. Каждая из отдельных переменных является скалярной переменной следующим образом:
NAME01="Zara" NAME02="Qadir" NAME03="Mahnaz" NAME04="Ayan" NAME05="Daisy"
Мы можем использовать один массив для хранения всех вышеупомянутых имен. Ниже приведен самый простой способ создания переменной массива. Это помогает присвоить значение одному из его индексов.
array_name[index]=value
Здесь array_name — это имя массива, index — это индекс элемента в массиве, который вы хотите установить, а value — это значение, которое вы хотите установить для этого элемента.
Как пример, следующие команды —
NAME[0]="Zara" NAME[1]="Qadir" NAME[2]="Mahnaz" NAME[3]="Ayan" NAME[4]="Daisy"
Если вы используете оболочку ksh , вот синтаксис инициализации массива —
set -A array_name value1 value2 ... valuen
Если вы используете оболочку bash , вот синтаксис инициализации массива —
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
Unix — базовые операторы оболочки
Существуют различные операторы, поддерживаемые каждой оболочкой. Мы подробно обсудим оболочку Bourne (оболочку по умолчанию) в этой главе.
Теперь мы обсудим следующие операторы —
- Арифметические Операторы
- Операторы отношений
- Булевы операторы
- Строковые операторы
- Операторы проверки файлов
У оболочки Bourne изначально не было никакого механизма для выполнения простых арифметических операций, но она использует внешние программы, awk или expr .
В следующем примере показано, как добавить два числа —
#!/bin/sh val=`expr 2 + 2` echo "Total value : $val"
Приведенный выше скрипт сгенерирует следующий результат —
Total value : 4
Следующие пункты необходимо учитывать при добавлении —
-
Между операторами и выражениями должны быть пробелы. Например, 2 + 2 не правильно; это должно быть записано как 2 + 2.
-
Полное выражение должно быть заключено в » , называемое обратным трюком.
Между операторами и выражениями должны быть пробелы. Например, 2 + 2 не правильно; это должно быть записано как 2 + 2.
Полное выражение должно быть заключено в » , называемое обратным трюком.
Арифметические Операторы
Следующие арифметические операторы поддерживаются Bourne Shell.
Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —
оператор | Описание | пример |
---|---|---|
+ (Дополнение) | Добавляет значения по обе стороны от оператора | `expr $ a + $ b` даст 30 |
— (вычитание) | Вычитает правый операнд из левого операнда | `expr $ a — $ b` даст -10 |
* (Умножение) | Умножает значения по обе стороны от оператора | `expr $ a \ * $ b` даст 200 |
/ (Отдел) | Делит левый операнд на правый операнд | `expr $ b / $ a` даст 2 |
% (Модуль) | Делит левый операнд на правый и возвращает остаток | `expr $ b% $ a` даст 0 |
= (Назначение) | Назначает правый операнд в левом операнде | a = $ b присваивает значение b в |
== (Равенство) | Сравнивает два числа, если оба одинаковы, возвращает true. | [$ a == $ b] вернет false. |
! = (Не равенство) | Сравнивает два числа, если оба отличаются, возвращает true. | [$ a! = $ b] вернет true. |
Очень важно понимать, что все условные выражения должны быть в квадратных скобках с пробелами вокруг них, например, [$ 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] является неправильным.
Булевы операторы
Следующие логические операторы поддерживаются Bourne Shell.
Предположим, что переменная a содержит 10, а переменная b содержит 20, тогда —
оператор | Описание | пример |
---|---|---|
! | Это логическое отрицание. Это инвертирует истинное условие в ложное и наоборот. | [! ложь] это правда. |
-о | Это логическое ИЛИ . Если один из операндов является истинным, тогда условие становится истинным. | [$ a -lt 20 -o $ b -gt 100] верно. |
-a | Это логическое И. Если оба операнда имеют значение true, то условие становится истинным, в противном случае — ложным. | [$ a -lt 20 -a $ b -gt 100] неверно. |
Строковые операторы
Следующие строковые операторы поддерживаются Bourne Shell.
Предположим, что переменная a содержит «abc», а переменная b содержит «efg», тогда —
оператор | Описание | пример |
---|---|---|
знак равно | Проверяет, равны ли значения двух операндов или нет; если да, то условие становится истинным. | [$ a = $ b] не соответствует действительности. |
знак равно | Проверяет, равны ли значения двух операндов или нет; если значения не равны, то условие становится истинным. | [$ a! = $ b] верно. |
-z | Проверяет, равен ли заданный размер строкового операнда нулю; если это нулевая длина, то он возвращает истину. | [-z $ a] не соответствует действительности. |
-n | Проверяет, является ли заданный размер операнда строки ненулевым; если это ненулевая длина, тогда это возвращает истину. | [-n $ a] не является ложным. |
ул | Проверяет, не является ли str пустой строкой; если он пуст, он возвращает false. | [$ a] не является ложным. |
Операторы проверки файлов
У нас есть несколько операторов, которые можно использовать для тестирования различных свойств, связанных с файлом Unix.
Предположим, переменная file содержит существующее имя файла «test», размер которого составляет 100 байт, и имеет права на чтение , запись и выполнение для:
оператор | Описание | пример |
---|---|---|
-b файл | Проверяет, является ли файл специальным блочным файлом; если да, то условие становится истинным. | [-b $ file] имеет значение false. |
-c файл | Проверяет, является ли файл символьным специальным файлом; если да, то условие становится истинным. | [-c $ file] имеет значение false. |
-d файл | Проверяет, является ли файл каталогом; если да, то условие становится истинным. | [-d $ file] не соответствует действительности. |
-f файл | Проверяет, является ли файл обычным файлом, а не каталогом или специальным файлом; если да, то условие становится истинным. | [-f $ file] — это правда. |
-g файл | Проверяет, имеет ли файл установленный бит установленного идентификатора группы (SGID); если да, то условие становится истинным. | [-g $ file] имеет значение false. |
-k файл | Проверяет, установлен ли в файле свой липкий бит; если да, то условие становится истинным. | [-k $ file] имеет значение false. |
-p файл | Проверяет, является ли файл именованным каналом; если да, то условие становится истинным. | [-p $ file] имеет значение false. |
-t файл | Проверяет, открыт ли дескриптор файла и связан ли он с терминалом; если да, то условие становится истинным. | [-t $ file] является ложным. |
-u файл | Проверяет, установлен ли в файле установленный бит идентификатора пользователя (SUID); если да, то условие становится истинным. | [-u $ file] является ложным. |
-r файл | Проверяет, доступен ли файл для чтения; если да, то условие становится истинным. | [-r $ file] — это правда. |
-w файл | Проверяет, доступен ли файл для записи; если да, то условие становится истинным. | [-w $ file] — это правда. |
-x файл | Проверяет, является ли файл исполняемым; если да, то условие становится истинным. | [-x $ file] — это правда. |
-s файл | Проверяет, имеет ли файл размер больше 0; если да, то условие становится истинным. | [-s $ file] — это правда. |
-e файл | Проверяет, существует ли файл; Значение true, даже если файл является каталогом, но существует. | [-e $ file] — это правда. |
Операторы оболочки C
Следующая ссылка даст вам краткое представление об операторах C Shell —
Корн Шелл Операторс
Следующая ссылка поможет вам понять Korn Shell Operators —
Unix — Shell Принятие решений
В этой главе мы разберемся с принятием решений оболочкой в Unix. При написании сценария оболочки может возникнуть ситуация, когда вам нужно выбрать один путь из указанных двух путей. Поэтому вам необходимо использовать условные выражения, которые позволяют вашей программе принимать правильные решения и выполнять правильные действия.
Unix Shell поддерживает условные операторы, которые используются для выполнения различных действий в зависимости от условий. Теперь мы поймем два принятия решения здесь —
-
Оператор if … else
-
Дело … esac заявление
Оператор if … else
Дело … esac заявление
Заявления if … else
Если операторы else являются полезными, они могут использоваться для принятия решений, которые можно использовать для выбора варианта из заданного набора параметров.
Unix Shell поддерживает следующие формы оператора if… else —
- если … фантастическое заявление
- если … еще … фантастическое заявление
- если … элиф … еще … фантастическое заявление
Большинство операторов if проверяют отношения с помощью реляционных операторов, рассмотренных в предыдущей главе.
Дело … esac Заявление
Вы можете использовать несколько операторов if … elif для выполнения многопутевого перехода. Однако это не всегда лучшее решение, особенно когда все ветви зависят от значения одной переменной.
Unix Shell поддерживает оператор case … esac, который обрабатывает именно эту ситуацию, и делает это более эффективно, чем повторяющиеся операторы if … elif .
Существует только одна форма выражения case … esac, которая подробно описана здесь —
Оператор case … esac в оболочке Unix очень похож на оператор switch … case, который мы имеем в других языках программирования, таких как C или C ++, PERL и т. Д.
Unix — Типы петель оболочки
В этой главе мы обсудим циклы оболочки в Unix. Цикл — это мощный инструмент программирования, который позволяет многократно выполнять набор команд. В этой главе мы рассмотрим следующие типы циклов, доступных программистам оболочки:
Вы будете использовать разные циклы в зависимости от ситуации. Например, цикл while выполняет данные команды, пока данное условие не останется истинным; цикл before выполняется до тех пор, пока данное условие не станет истинным.
Как только у вас будет хорошая практика программирования, вы приобретете опыт и тем самым начнете использовать соответствующий цикл в зависимости от ситуации. Здесь циклы 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 — Shell Loop Control
В этой главе мы обсудим управление циклом оболочки в Unix. До сих пор вы рассматривали создание циклов и работу с циклами для решения различных задач. Иногда вам нужно остановить цикл или пропустить итерации цикла.
В этой главе мы изучим следующие два утверждения, которые используются для управления циклами оболочки:
-
Оператор перерыва
-
Продолжение заявления
Оператор перерыва
Продолжение заявления
Бесконечный цикл
Все циклы имеют ограниченный срок службы, и они выходят, как только условие ложно или истинно в зависимости от цикла.
Цикл может продолжаться вечно, если требуемое условие не выполняется. Цикл, который выполняется вечно без завершения, выполняется бесконечное количество раз. По этой причине такие циклы называются бесконечными циклами.
пример
Вот простой пример, который использует цикл while для отображения чисел от нуля до девяти —
#!/bin/sh a=10 until [ $a -lt 10 ] do echo $a a=`expr $a + 1` done
Этот цикл продолжается вечно, потому что a всегда больше или равно 10 и никогда не меньше 10.
Заявление о перерыве
Оператор break используется для прекращения выполнения всего цикла после завершения выполнения всех строк кода вплоть до оператора break. Затем он спускается до кода, следующего за концом цикла.
Синтаксис
Следующий оператор break используется для выхода из цикла:
break
Команда break также может использоваться для выхода из вложенного цикла, используя этот формат —
break n
Здесь n указывает n- й замкнутый цикл для выхода из.
пример
Вот простой пример, который показывает, что цикл завершается, как только становится 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 равно 2, а var2 равно 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 указывает n- й замкнутый цикл для продолжения.
пример
Следующий цикл использует оператор 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
Unix — Shell Substitution
Что такое замена?
Оболочка выполняет подстановку, когда встречает выражение, содержащее один или несколько специальных символов.
пример
Здесь печатное значение переменной заменяется ее значением. В то же время, \ 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 |
\ а оповещение (BEL) |
3 |
\ б возврат на одну позицию |
4 |
\ с подавить завершающий перевод строки |
5 |
\ е подача формы |
6 |
\ п новая линия |
7 |
\р возврат каретки |
8 |
\ т горизонтальная вкладка |
9 |
\ v вертикальная вкладка |
\\
обратный слэш
\ а
оповещение (BEL)
\ б
возврат на одну позицию
\ с
подавить завершающий перевод строки
\ е
подача формы
\ п
новая линия
\р
возврат каретки
\ т
горизонтальная вкладка
\ v
вертикальная вкладка
Вы можете использовать опцию -E, чтобы отключить интерпретацию обратной косой черты (по умолчанию).
Вы можете использовать опцию -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 . |
2 |
$ {вар: -слово} Если var нуль или не установлен, слово заменяется на var . Значение var не меняется. |
3 |
$ {Var: = слово} Если переменная равна нулю или не установлена, переменная устанавливается на значение слова . |
4 |
$ {вар: сообщение} Если переменная равна нулю или не установлена, сообщение выводится со стандартной ошибкой. Это проверяет, что переменные установлены правильно. |
5 |
$ {вар: + слово} Если переменная установлена, слово заменяется на переменную. Значение var не меняется. |
$ {вар}
Подставьте значение var .
$ {вар: -слово}
Если var нуль или не установлен, слово заменяется на var . Значение 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
Unix — механизмы цитирования оболочки
В этой главе мы подробно обсудим механизмы цитирования Shell. Мы начнем с обсуждения метасимволов.
Метасимволы
Unix Shell предоставляет различные метасимволы, которые имеют особое значение при использовании их в любом сценарии оболочки и вызывает завершение слова, если оно не заключено в кавычки.
Например ,? соответствует одному символу при перечислении файлов в каталоге, а * соответствует более чем одному символу. Вот список большинства специальных символов оболочки (также называемых метасимволами):
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Символ может быть заключен в кавычки (т. Е. Создан для обозначения самого себя), если ему предшествует \ .
пример
В следующем примере показано, как напечатать * или a ? —
#!/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 |
Одинарные цитаты Все специальные символы между этими кавычками теряют свое особое значение. |
2 |
Двойная цитата Большинство специальных символов между этими кавычками теряют свое особое значение с этими исключениями —
|
3 |
бэкслэш Любой персонаж, следующий сразу за обратной косой чертой, теряет свое особое значение. |
4 |
Вернуться цитата Все, что находится между обратными кавычками, будет рассматриваться как команда и будет выполнено. |
Одинарные цитаты
Все специальные символы между этими кавычками теряют свое особое значение.
Двойная цитата
Большинство специальных символов между этими кавычками теряют свое особое значение с этими исключениями —
бэкслэш
Любой персонаж, следующий сразу за обратной косой чертой, теряет свое особое значение.
Вернуться цитата
Все, что находится между обратными кавычками, будет рассматриваться как команда и будет выполнено.
Одиночные цитаты
Рассмотрим команду 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 между обратными кавычками приводит к выполнению команды.
Синтаксис
Вот простой синтаксис для помещения любой команды Shell между обратными кавычками —
var=`command`
пример
Команда date выполняется в следующем примере, а полученный результат сохраняется в переменной DATA.
DATE=`date` echo "Current Date: $DATE"
После выполнения вы получите следующий результат —
Current Date: Thu Jul 2 05:28:45 MST 2009
Unix — Перенаправления ввода / вывода оболочки
В этой главе мы подробно обсудим перенаправления ввода / вывода в командной консоли. Большинство системных команд Unix принимают данные с вашего терминала и отправляют полученные результаты обратно на ваш терминал. Команда обычно читает свой ввод со стандартного ввода, который по умолчанию является вашим терминалом. Точно так же команда обычно записывает свой вывод в стандартный вывод, который снова является вашим терминалом по умолчанию.
Перенаправление вывода
Вывод команды, обычно предназначенной для стандартного вывода, может быть легко перенаправлен в файл. Эта возможность известна как перенаправление вывода.
Если файл нотации> добавляется к какой-либо команде, которая обычно записывает свои выходные данные в стандартный вывод, выходные данные этой команды будут записаны в файл вместо вашего терминала.
Проверьте следующую команду 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 $
Перенаправление ввода
Как вывод команды может быть перенаправлен в файл, так и ввод команды может быть перенаправлен из файла. Поскольку символ «больше»> используется для перенаправления вывода, символ « меньше» < используется для перенаправления ввода команды.
Команды, которые обычно получают свой ввод от стандартного ввода, могут таким образом перенаправлять свой ввод из файла. Например, чтобы подсчитать количество строк в сгенерированном пользователем файле, вы можете выполнить команду следующим образом:
$ wc -l users 2 users $
После выполнения вы получите следующий вывод. Вы можете посчитать количество строк в файле, перенаправив стандартный ввод команды wc от пользователей файла —
$ wc -l < users 2 $
Обратите внимание, что есть разница в выводе, создаваемом двумя формами команды wc. В первом случае имя пользователя файла указывается с количеством строк; во втором случае это не так.
В первом случае wc знает, что он читает свои данные от пользователей файла. Во втором случае он только знает, что он читает свои входные данные из стандартного ввода, поэтому он не отображает имя файла.
Вот документ
Здесь документ используется для перенаправления ввода в интерактивный сценарий оболочки или программу.
Мы можем запустить интерактивную программу в сценарии оболочки без действий пользователя, предоставив необходимые данные для интерактивной программы или сценария интерактивной оболочки.
Общая форма документа здесь —
command << delimiter document delimiter
Здесь оболочка интерпретирует оператор << как инструкцию для чтения ввода, пока не найдет строку, содержащую указанный разделитель. Все входные строки вплоть до строки, содержащей разделитель, затем подаются на стандартный ввод команды.
Разделитель сообщает оболочке, что документ здесь завершен. Без этого оболочка продолжает читать ввод навсегда. Разделителем должно быть одно слово, которое не содержит пробелов или табуляций.
Ниже приведен ввод команды wc -l для подсчета общего количества строк:
$wc -l << EOF This is a simple lookup program for good (and bad) restaurants in Cape Town. EOF 3 $
Вы можете использовать здесь документ для печати нескольких строк, используя ваш скрипт следующим образом —
#!/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> файл Вывод pgm перенаправляется в файл |
2 |
ПГМ <файл Программа ПГМ читает свой ввод из файла |
3 |
pgm >> файл Вывод pgm добавляется в файл |
4 |
n> файл Вывод из потока с дескриптором n, перенаправленным в файл |
5 |
n >> file Вывод из потока с добавленным в файл дескриптором n |
6 |
n> & m Объединяет вывод из потока n с потоком m |
7 |
n <& m Объединяет входные данные из потока n с потоком m |
8 |
<< тег Стандартный ввод идет отсюда через следующий тег в начале строки |
9 |
| Получает вывод из одной программы или процесса и отправляет его другой |
pgm> файл
Вывод pgm перенаправляется в файл
ПГМ <файл
Программа ПГМ читает свой ввод из файла
pgm >> файл
Вывод pgm добавляется в файл
n> файл
Вывод из потока с дескриптором n, перенаправленным в файл
n >> file
Вывод из потока с добавленным в файл дескриптором n
n> & m
Объединяет вывод из потока n с потоком m
n <& m
Объединяет входные данные из потока n с потоком m
<< тег
Стандартный ввод идет отсюда через следующий тег в начале строки
|
Получает вывод из одной программы или процесса и отправляет его другой
Обратите внимание, что файловый дескриптор 0 обычно является стандартным вводом (STDIN), 1 — стандартным выводом (STDOUT), а 2 — стандартным выводом ошибок (STDERR).
Unix — функции оболочки
В этой главе мы подробно обсудим функции оболочки. Функции позволяют вам разбить всю функциональность скрипта на более мелкие логические подразделы, которые затем могут быть вызваны для выполнения их отдельных задач при необходимости.
Использование функций для выполнения повторяющихся задач является отличным способом создания повторного использования кода . Это важная часть современных принципов объектно-ориентированного программирования.
Функции оболочки аналогичны подпрограммам, процедурам и функциям в других языках программирования.
Создание функций
Чтобы объявить функцию, просто используйте следующий синтаксис —
function_name () { list of commands }
Имя вашей функции — имя_функции , и это то, что вы будете использовать для вызова ее из других мест в ваших скриптах. За именем функции должны следовать круглые скобки, за которыми следует список команд, заключенных в фигурные скобки.
пример
Следующий пример показывает использование функции —
#!/bin/sh # Define your function here Hello () { echo "Hello World" } # Invoke your function Hello
После выполнения вы получите следующий вывод —
$./test.sh Hello World
Передать параметры в функцию
Вы можете определить функцию, которая будет принимать параметры при вызове функции. Эти параметры будут представлены $ 1 , $ 2 и так далее.
Ниже приведен пример, в котором мы передаем два параметра Zara и Ali, а затем записываем и печатаем эти параметры в функции.
#!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" } # Invoke your function Hello Zara Ali
После выполнения вы получите следующий результат —
$./test.sh Hello World Zara Ali
Возвращение значений из функций
Если вы выполняете команду выхода изнутри функции, это приводит не только к прекращению выполнения функции, но и к программе оболочки, которая вызвала функцию.
Если вместо этого вы хотите просто прекратить выполнение функции, то есть способ выйти из определенной функции.
В зависимости от ситуации вы можете вернуть любое значение из вашей функции, используя команду возврата , синтаксис которой следующий:
return 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
Вложенные функции
Одной из наиболее интересных особенностей функций является то, что они могут вызывать себя, а также другие функции. Функция, которая вызывает себя, называется рекурсивной функцией .
Следующий пример демонстрирует вложение двух функций —
#!/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 — Справка Shell Manpage
Все команды Unix имеют ряд необязательных и обязательных параметров. Очень часто забывают полный синтаксис этих команд.
Поскольку никто не может запомнить каждую команду Unix и все ее опции, у нас есть онлайн-справка, чтобы смягчить это право с того момента, когда Unix находился на стадии разработки.
Unix-версия файлов справки называется man-страницами . Если есть имя команды, и вы не знаете, как ее использовать, то справочные страницы помогут вам на каждом этапе.
Синтаксис
Вот простая команда, которая поможет вам получить подробную информацию о любой команде Unix при работе с системой —
$man command
пример
Предположим, есть команда, требующая от вас помощи; предположим, что вы хотите знать о pwd, тогда вам просто нужно использовать следующую команду —
$man pwd
Приведенная выше команда поможет вам получить полную информацию о команде pwd . Попробуйте сами в командной строке, чтобы получить более подробную информацию.
Вы можете получить полную информацию о самой команде man , используя следующую команду —
$man man
Разделы справочной страницы
Справочные страницы обычно делятся на разделы, которые обычно зависят от предпочтений автора справочной страницы. В следующей таблице перечислены некоторые общие разделы —
Sr.No. | Раздел и описание |
---|---|
1 |
НАЗВАНИЕ Название команды |
2 |
СИНТАКСИС Общие параметры использования команды |
3 |
ОПИСАНИЕ Описывает, что делает команда |
4 |
ОПЦИИ Описывает все аргументы или параметры команды |
5 |
СМОТРИТЕ ТАКЖЕ Перечисляет другие команды, которые непосредственно связаны с командой на странице руководства или очень похожи на ее функциональность. |
6 |
ОШИБКИ Объясняет любые известные проблемы или ошибки, которые существуют с командой или ее выводом |
7 |
ПРИМЕРЫ Типичные примеры использования, которые дают читателю представление о том, как использовать команду |
8 |
АВТОРЫ Автор справочной страницы / команды |
НАЗВАНИЕ
Название команды
СИНТАКСИС
Общие параметры использования команды
ОПИСАНИЕ
Описывает, что делает команда
ОПЦИИ
Описывает все аргументы или параметры команды
СМОТРИТЕ ТАКЖЕ
Перечисляет другие команды, которые непосредственно связаны с командой на странице руководства или очень похожи на ее функциональность.
ОШИБКИ
Объясняет любые известные проблемы или ошибки, которые существуют с командой или ее выводом
ПРИМЕРЫ
Типичные примеры использования, которые дают читателю представление о том, как использовать команду
АВТОРЫ
Автор справочной страницы / команды
Подводя итог, можно сказать, что справочные страницы являются жизненно важным ресурсом и первым средством исследования, когда вам нужна информация о командах или файлах в системе Unix.
Полезные команды оболочки
Следующая ссылка дает вам список наиболее важных и очень часто используемых команд оболочки Unix.
Если вы не знаете, как использовать какую-либо команду, используйте man-страницу, чтобы получить полную информацию о команде.
Вот список Unix Shell — Полезные команды
Unix — регулярные выражения с SED
В этой главе мы подробно обсудим регулярные выражения с SED в Unix.
Регулярное выражение — это строка, которая может использоваться для описания нескольких последовательностей символов. Регулярные выражения используются несколькими различными командами Unix, включая ed , sed , awk , grep и, в более ограниченной степени, vi .
Здесь SED расшифровывается как s tream ed itor. Этот потоково-ориентированный редактор был создан исключительно для выполнения скриптов. Таким образом, все входные данные, которые вы вводите в него, проходят через STDOUT и не изменяют входной файл.
Вызывая сед
Прежде чем мы начнем, давайте удостоверимся, что у нас есть локальная копия текстового файла / 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 —
/pattern/action
Здесь pattern — это регулярное выражение, а action — одна из команд, приведенных в следующей таблице. Если шаблон не указан, действие выполняется для каждой строки, как мы видели выше.
Символ косой черты (/), который окружает шаблон, необходим, потому что они используются в качестве разделителей.
Sr.No. | Диапазон и описание |
---|---|
1 |
п Печатает строку |
2 |
d Удаляет строку |
3 |
с / pattern1 / шаблон2 / Заменяет первое вхождение pattern1 на pattern2 |
п
Печатает строку
d
Удаляет строку
с / pattern1 / шаблон2 /
Заменяет первое вхождение pattern1 на pattern2
Удаление всех строк с помощью sed
Теперь мы поймем, как удалить все строки с помощью sed. Снова вызвать sed; но теперь предполагается, что sed использует строку удаления команды редактирования , обозначенную одной буквой d —
$ cat /etc/passwd | sed 'd' $
Вместо того, чтобы вызывать sed, посылая ему файл по каналу, sed можно поручить считывать данные из файла, как в следующем примере.
Следующая команда делает то же самое, что и в предыдущем примере, без команды cat —
$ sed -e 'd' /etc/passwd $
Сед Адреса
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 добавляется перед командой удаления редактирования . Это дает команду sed выполнить команду редактирования в первой строке файла. В этом примере sed удалит первую строку / etc / password и напечатает остальную часть файла.
Адресные диапазоны sed
Теперь мы поймем, как работать с диапазонами адресов sed . Так что, если вы хотите удалить более одной строки из файла? Вы можете указать диапазон адресов с помощью 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, г’ Это генерирует синтаксическую ошибку |
9 |
’10d’ Это также приведет к ошибке синтаксиса |
‘4,10d’
Строки с 4 по 10 удаляются
’10, 4d»
Удаляется только 10- я строка, потому что sed не работает в обратном направлении
‘4 + 5d’
Это соответствует строке 4 в файле, удаляет эту строку, продолжает удалять следующие пять строк, а затем прекращает ее удаление и печатает остальные
‘2,5! D’
Это удаляет все, кроме начиная со 2- й до 5- й строки
‘1 ~ 3d’
Это удаляет первую строку, переходит на следующие три строки, а затем удаляет четвертую строку. Сед продолжает применять этот шаблон до конца файла.
‘2 ~ 2d’
Это говорит sed, чтобы удалить вторую строку, перешагнуть через следующую строку, удалить следующую строку и повторять, пока не будет достигнут конец файла
‘4,10p’
Печатаются строки с 4 по 10
‘4, г’
Это генерирует синтаксическую ошибку
’10d’
Это также приведет к ошибке синтаксиса
Примечание. При использовании действия 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 должен иметь информацию о том, где заканчивается первая строка и начинается строка замещения. Для этого мы начнем с двух строк с символом косой черты ( / ).
Следующая команда заменяет первое вхождение в строке корня строки на строку 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 |
г Заменяет все матчи, а не только первый |
2 |
ЧИСЛО Заменяет только NUMBER- й матч |
3 |
п Если подстановка была сделана, то печатается пробел |
4 |
W FILENAME Если подстановка была сделана, то записывает результат в FILENAME |
5 |
Я или я Совпадает без учета регистра |
6 |
М или м В дополнение к нормальному поведению специальных символов регулярного выражения ^ и $ этот флаг заставляет ^ соответствовать пустой строке после новой строки, а $ — пустой строке перед новой строкой |
г
Заменяет все матчи, а не только первый
ЧИСЛО
Заменяет только NUMBER- й матч
п
Если подстановка была сделана, то печатается пробел
W FILENAME
Если подстановка была сделана, то записывает результат в FILENAME
Я или я
Совпадает без учета регистра
М или м
В дополнение к нормальному поведению специальных символов регулярного выражения ^ и $ этот флаг заставляет ^ соответствовать пустой строке после новой строки, а $ — пустой строке перед новой строкой
Использование альтернативного разделителя строк
Предположим, вам нужно выполнить подстановку строки, которая включает символ прямой косой черты. В этом случае вы можете указать другой разделитель, указав обозначенный символ после 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
В приведенном выше примере мы использовали : в качестве разделителя вместо косой черты /, потому что мы пытались искать / корень вместо простого корня.
Замена на пустое пространство
Используйте пустую строку замещения, чтобы полностью удалить корневую строку из файла / 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 была заменена на тихую , но остальные строки остались нетронутыми.
Соответствующая команда
Вы должны использовать опцию 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 |
[символы] Соответствует любому из символов, указанных в символах, где символ представляет собой последовательность символов. Вы можете использовать символ -, чтобы указать диапазон символов. |
^
Соответствует началу строк
$
Соответствует концу строк
,
Соответствует любому отдельному символу
*
Соответствует нулю или более вхождений предыдущего символа
[символы]
Соответствует любому из символов, указанных в символах, где символ представляет собой последовательность символов. Вы можете использовать символ -, чтобы указать диапазон символов.
Соответствующие персонажи
Посмотрите еще несколько выражений, чтобы продемонстрировать использование метасимволов . Например, следующий шаблон —
Sr.No. | Выражение и описание |
---|---|
1 |
/ AC / Соответствует строкам, которые содержат строки, такие как & plus; c , ac , abc , match и a3c |
2 |
/ а * с / Сопоставляет одинаковые строки с такими строками, как ace , yacc и arctic |
3 |
/ [Tt] он / Соответствует строке |
4 |
/ ^ $ / Соответствует пустым строкам |
5 |
/^.*$/ Соответствует всей строке, какой бы она ни была |
6 |
/ * / Соответствует одному или нескольким пробелам |
7 |
/ ^ $ / Соответствует пустым строкам |
/ AC /
Соответствует строкам, которые содержат строки, такие как & plus; c , ac , abc , match и a3c
/ а * с /
Сопоставляет одинаковые строки с такими строками, как ace , yacc и arctic
/ [Tt] он /
Соответствует строке
/ ^ $ /
Соответствует пустым строкам
/^.*$/
Соответствует всей строке, какой бы она ни была
/ * /
Соответствует одному или нескольким пробелам
/ ^ $ /
Соответствует пустым строкам
Следующая таблица показывает некоторые часто используемые наборы символов —
Sr.No. | Набор и описание |
---|---|
1 |
[AZ] Соответствует одной строчной букве |
2 |
[AZ] Соответствует одной заглавной букве |
3 |
[A-Za-Z] Соответствует одной букве |
4 |
[0-9] Соответствует одному числу |
5 |
[A-Za-Z0-9] Соответствует одной букве или цифре |
[AZ]
Соответствует одной строчной букве
[AZ]
Соответствует одной заглавной букве
[A-Za-Z]
Соответствует одной букве
[0-9]
Соответствует одному числу
[A-Za-Z0-9]
Соответствует одной букве или цифре
Ключевые слова класса символов
Некоторые специальные ключевые слова обычно доступны для регулярных выражений , особенно утилиты GNU, которые используют регулярные выражения . Они очень полезны для регулярных выражений sed, поскольку они упрощают вещи и улучшают читаемость.
Например, символы от a до z и символы от A до 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 |
[[цифра , буква]] Буквенно-цифровой [аз AZ 0-9] |
2 |
[[:альфа:]] Алфавитный [az AZ] |
3 |
[[: пусто:]] Пустые символы (пробелы или символы табуляции) |
4 |
[[: CNTRL:]] Управляющие персонажи |
5 |
[[: цифры:]] Числа [0-9] |
6 |
[[: график:]] Любые видимые символы (исключая пробелы) |
7 |
[[: ниже:]] Строчные буквы [az] |
8 |
[[:Распечатать:]] Печатные символы (неуправляемые символы) |
9 |
[[пунктуатор]] Знаки пунктуации |
10 |
[[:пространство:]] Пробелы |
11 |
[[: верхняя:]] Прописные буквы [AZ] |
12 |
[[: xdigit:]] Шестнадцатеричные цифры [0-9 af AF] |
[[цифра , буква]]
Буквенно-цифровой [аз AZ 0-9]
[[:альфа:]]
Алфавитный [az AZ]
[[: пусто:]]
Пустые символы (пробелы или символы табуляции)
[[: CNTRL:]]
Управляющие персонажи
[[: цифры:]]
Числа [0-9]
[[: график:]]
Любые видимые символы (исключая пробелы)
[[: ниже:]]
Строчные буквы [az]
[[:Распечатать:]]
Печатные символы (неуправляемые символы)
[[пунктуатор]]
Знаки пунктуации
[[:пространство:]]
Пробелы
[[: верхняя:]]
Прописные буквы [AZ]
[[: xdigit:]]
Шестнадцатеричные цифры [0-9 af AF]
Aampersand Referencing
Метасимвол sed & представляет содержимое сопоставленного шаблона. Например, скажем, у вас есть файл phone.txt, полный телефонных номеров, например, такой:
5555551212 5555551213 5555551214 6665551215 6665551216 7775551217
Вы хотите сделать код города (первые три цифры) в круглых скобках для удобства чтения. Для этого вы можете использовать символ замены амперсанда —
$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt (555)5551212 (555)5551213 (555)5551214 (666)5551215 (666)5551216 (777)5551217
Здесь в части шаблона вы сопоставляете первые 3 цифры, а затем используете & вы заменяете эти 3 цифры на окружающие скобки .
Использование нескольких команд 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
Примечание. В приведенном выше примере вместо трехкратного повторения ключевого слова класса символов [[: digit:]] мы заменили его на \ {3 \} , что означает, что предыдущее регулярное выражение сопоставляется три раза. Мы также использовали \ для разрыва строки, и это нужно удалить до запуска команды.
Вернуться Отзывы
Метасимвол амперсанда полезен, но еще более полезна возможность определять определенные области в регулярных выражениях. Эти специальные области могут быть использованы в качестве ссылки в строках замены. Определив определенные части регулярного выражения, вы можете затем обратиться к этим частям со специальным ссылочным символом.
Чтобы сделать обратные ссылки , вы должны сначала определить регион, а затем вернуться к этому региону. Чтобы определить регион, вы вставляете круглые скобки с обратной косой чертой вокруг каждой интересующей области. На первый регион, который вы окружаете обратными слешами, ссылается \ 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
Примечание. В приведенном выше примере каждое регулярное выражение в скобках будет иметь обратную ссылку \ 1 , \ 2 и т. Д. Мы использовали \, чтобы дать разрыв строки здесь. Это должно быть удалено перед запуском команды.
Unix — Основы файловой системы
Файловая система — это логическая коллекция файлов на разделе или диске. Раздел представляет собой контейнер для информации и при желании может охватывать весь жесткий диск.
Ваш жесткий диск может иметь различные разделы, которые обычно содержат только одну файловую систему, например, одну файловую систему, в которой находится файловая система /, или другую, содержащую файловую систему / home .
Одна файловая система на раздел позволяет логически обслуживать и управлять различными файловыми системами.
Все в Unix считается файлом, включая физические устройства, такие как DVD-диски, USB-устройства и дисководы.
Структура каталогов
Unix использует иерархическую структуру файловой системы, очень похожую на перевернутое дерево, с корнем (/) в основе файловой системы и всеми остальными каталогами, распространяющимися оттуда.
Файловая система Unix — это набор файлов и каталогов, который имеет следующие свойства:
-
У него есть корневой каталог ( / ), который содержит другие файлы и каталоги.
-
Каждый файл или каталог уникально идентифицируется по его имени, каталогу, в котором он находится, и уникальному идентификатору, обычно называемому inode .
-
По соглашению, корневой каталог имеет номер инода 2, а потерянный каталог & plus; found имеет номер инода 3 . Номера узлов 0 и 1 не используются. Номера файловых индексов можно увидеть, указав опцию -i в команде ls .
-
Это автономно. Нет никаких зависимостей между одной файловой системой и другой.
У него есть корневой каталог ( / ), который содержит другие файлы и каталоги.
Каждый файл или каталог уникально идентифицируется по его имени, каталогу, в котором он находится, и уникальному идентификатору, обычно называемому inode .
По соглашению, корневой каталог имеет номер инода 2, а потерянный каталог & plus; found имеет номер инода 3 . Номера узлов 0 и 1 не используются. Номера файловых индексов можно увидеть, указав опцию -i в команде ls .
Это автономно. Нет никаких зависимостей между одной файловой системой и другой.
Каталоги имеют конкретные цели и, как правило, содержат одинаковые типы информации для удобного поиска файлов. Ниже приведены каталоги, которые существуют в основных версиях Unix —
Sr.No. | Каталог и описание |
---|---|
1 |
/ Это корневой каталог, который должен содержать только каталоги, необходимые на верхнем уровне структуры файла. |
2 |
/ бен Здесь находятся исполняемые файлы. Эти файлы доступны всем пользователям |
3 |
/ DEV Это драйверы устройств |
4 |
/так далее Команды каталога Supervisor, файлы конфигурации, файлы конфигурации диска, действительные списки пользователей, группы, Ethernet, хосты, куда отправлять критические сообщения |
5 |
/ Lib Содержит файлы общей библиотеки и иногда другие файлы, связанные с ядром |
6 |
/ загрузки Содержит файлы для загрузки системы |
7 |
/Главная Содержит домашний каталог для пользователей и других учетных записей |
8 |
/ мнт Используется для монтирования других временных файловых систем, таких как cdrom и floppy для дисковода CD-ROM и дисковода гибких дисков , соответственно |
9 |
/ Proc Содержит все процессы, отмеченные как файл номером процесса или другой информацией, которая является динамической для системы |
10 |
/ TMP Содержит временные файлы, используемые между загрузками системы |
11 |
/ USR Используется для разных целей и может использоваться многими пользователями. Включает административные команды, общие файлы, библиотечные файлы и другие |
12 |
/ вар Обычно содержит файлы переменной длины, такие как файлы журнала и печати, а также файлы любого другого типа, которые могут содержать переменное количество данных |
13 |
/ SBIN Содержит двоичные (исполняемые) файлы, обычно для системного администрирования. Например, fdisk и ifconfig utlities |
14 |
/ ядро Содержит файлы ядра |
/
Это корневой каталог, который должен содержать только каталоги, необходимые на верхнем уровне структуры файла.
/ бен
Здесь находятся исполняемые файлы. Эти файлы доступны всем пользователям
/ DEV
Это драйверы устройств
/так далее
Команды каталога Supervisor, файлы конфигурации, файлы конфигурации диска, действительные списки пользователей, группы, Ethernet, хосты, куда отправлять критические сообщения
/ Lib
Содержит файлы общей библиотеки и иногда другие файлы, связанные с ядром
/ загрузки
Содержит файлы для загрузки системы
/Главная
Содержит домашний каталог для пользователей и других учетных записей
/ мнт
Используется для монтирования других временных файловых систем, таких как cdrom и floppy для дисковода CD-ROM и дисковода гибких дисков , соответственно
/ Proc
Содержит все процессы, отмеченные как файл номером процесса или другой информацией, которая является динамической для системы
/ TMP
Содержит временные файлы, используемые между загрузками системы
/ USR
Используется для разных целей и может использоваться многими пользователями. Включает административные команды, общие файлы, библиотечные файлы и другие
/ вар
Обычно содержит файлы переменной длины, такие как файлы журнала и печати, а также файлы любого другого типа, которые могут содержать переменное количество данных
/ SBIN
Содержит двоичные (исполняемые) файлы, обычно для системного администрирования. Например, fdisk и ifconfig utlities
/ ядро
Содержит файлы ядра
Навигация по файловой системе
Теперь, когда вы понимаете основы файловой системы, вы можете перейти к нужным файлам. Следующие команды используются для навигации по системе —
Sr.No. | Команда и описание |
---|---|
1 |
имя файла кошки Отображает имя файла |
2 |
имя диска Перемещает вас в указанный каталог |
3 |
cp file1 file2 Копирует один файл / каталог в указанное место |
4 |
имя файла Определяет тип файла (двоичный, текстовый и т. Д.) |
5 |
найти имя файла dir Находит файл / каталог |
6 |
имя файла заголовка Показывает начало файла |
7 |
меньше имени файла Просматривает файл с конца или с начала |
8 |
ls dirname Показывает содержимое указанного каталога |
9 |
mkdir dirname Создает указанный каталог |
10 |
больше имени файла Просматривает файл от начала до конца |
11 |
mv file1 file2 Перемещает местоположение или переименовывает файл / каталог |
12 |
PWD Показывает текущий каталог, в котором находится пользователь |
13 |
рм имя файла Удаляет файл |
14 |
rmdir dirname Удаляет каталог |
15 |
хвостовое имя файла Показывает конец файла |
16 |
коснитесь имени файла Создает пустой файл или изменяет существующий файл или его атрибуты |
17 |
где имя файла Показывает расположение файла |
18 |
какое имя файла Показывает местоположение файла, если он находится в вашем PATH |
имя файла кошки
Отображает имя файла
имя диска
Перемещает вас в указанный каталог
cp file1 file2
Копирует один файл / каталог в указанное место
имя файла
Определяет тип файла (двоичный, текстовый и т. Д.)
найти имя файла dir
Находит файл / каталог
имя файла заголовка
Показывает начало файла
меньше имени файла
Просматривает файл с конца или с начала
ls dirname
Показывает содержимое указанного каталога
mkdir dirname
Создает указанный каталог
больше имени файла
Просматривает файл от начала до конца
mv file1 file2
Перемещает местоположение или переименовывает файл / каталог
PWD
Показывает текущий каталог, в котором находится пользователь
рм имя файла
Удаляет файл
rmdir dirname
Удаляет каталог
хвостовое имя файла
Показывает конец файла
коснитесь имени файла
Создает пустой файл или изменяет существующий файл или его атрибуты
где имя файла
Показывает расположение файла
какое имя файла
Показывает местоположение файла, если он находится в вашем PATH
Вы можете использовать справку Manpage, чтобы проверить полный синтаксис для каждой команды, упомянутой здесь.
Команда df
Первый способ управления пространством разделов — команда df (без диска) . Команда df -k (без диска) отображает использование дискового пространства в килобайтах , как показано ниже —
$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $
Некоторые каталоги, такие как / devices , показывают 0 в килобайтах, столбцы используемых и доступных, а также 0% для емкости. Это специальные (или виртуальные) файловые системы, и хотя они находятся на диске в каталоге /, сами по себе они не занимают места на диске.
Вывод df -k обычно одинаков во всех системах Unix. Вот что обычно включает в себя:
Sr.No. | Колонка и описание |
---|---|
1 |
Файловая система Имя физической файловой системы |
2 |
кбайт Всего килобайт свободного места на носителе |
3 |
используемый Всего килобайт использованного пространства (по файлам) |
4 |
польза Всего килобайт, доступных для использования |
5 |
вместимость Процент общего пространства, используемого файлами |
6 |
Прикреплено к На что монтируется файловая система |
Файловая система
Имя физической файловой системы
кбайт
Всего килобайт свободного места на носителе
используемый
Всего килобайт использованного пространства (по файлам)
польза
Всего килобайт, доступных для использования
вместимость
Процент общего пространства, используемого файлами
Прикреплено к
На что монтируется файловая система
Вы можете использовать опцию -h (удобочитаемый для человека), чтобы отобразить вывод в формате, который показывает размер в более простой для понимания записи.
Du Command
Команда du (использование диска) позволяет указать каталоги, чтобы показать использование дискового пространства в определенном каталоге.
Эта команда полезна, если вы хотите определить, сколько места занимает конкретный каталог. Следующая команда отображает количество блоков, используемых каждым каталогом. Один блок может занять 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
Например, если вы хотите смонтировать компакт-диск в каталог / mnt / cdrom , вы можете набрать —
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
Это предполагает, что ваше устройство CD-ROM называется / dev / cdrom и вы хотите смонтировать его в / mnt / cdrom . Обратитесь к странице руководства по монтированию для получения более подробной информации или введите в командной строке mount -h для получения справочной информации.
После монтирования вы можете использовать команду cd для навигации по новой доступной файловой системе через точку монтирования, которую вы только что сделали.
Размонтирование файловой системы
Чтобы размонтировать (удалить) файловую систему из вашей системы, используйте команду umount , указав точку монтирования или устройство.
Например, чтобы размонтировать cdrom , используйте следующую команду —
$ umount /dev/cdrom
Команда mount позволяет вам получить доступ к вашим файловым системам, но в большинстве современных систем Unix функция автомонтирования делает этот процесс невидимым для пользователя и не требует вмешательства.
Квоты пользователей и групп
Квоты пользователей и групп предоставляют механизмы, с помощью которых объем пространства, используемого одним пользователем или всеми пользователями в конкретной группе, может быть ограничен значением, определенным администратором.
Квоты действуют в пределах двух пределов, которые позволяют пользователю предпринимать некоторые действия, если объем пространства или количество дисковых блоков начинают превышать установленные администратором ограничения —
-
Мягкий лимит — если пользователь превышает установленный лимит, существует льготный период, который позволяет ему освободить некоторое пространство.
-
Жесткий лимит — Когда жесткий лимит достигнут, независимо от льготного периода, дальнейшие файлы или блоки не могут быть выделены.
Мягкий лимит — если пользователь превышает установленный лимит, существует льготный период, который позволяет ему освободить некоторое пространство.
Жесткий лимит — Когда жесткий лимит достигнут, независимо от льготного периода, дальнейшие файлы или блоки не могут быть выделены.
Существует несколько команд для управления квотами:
Sr.No. | Команда и описание |
---|---|
1 |
квота Отображает использование диска и ограничения для пользователя группы |
2 |
edquota Это редактор квот. С помощью этой команды можно редактировать квоты пользователей или групп. |
3 |
Quotacheck Сканирует файловую систему на использование диска, создает, проверяет и восстанавливает файлы квот |
4 |
setquota Это редактор квот командной строки |
5 |
quotaon Это сообщает системе, что дисковые квоты должны быть включены в одной или нескольких файловых системах. |
6 |
quotaoff Это сообщает системе, что дисковые квоты должны быть отключены для одной или нескольких файловых систем. |
7 |
Repquota Это печатает сводную информацию об использовании диска и квотах для указанных файловых систем. |
квота
Отображает использование диска и ограничения для пользователя группы
edquota
Это редактор квот. С помощью этой команды можно редактировать квоты пользователей или групп.
Quotacheck
Сканирует файловую систему на использование диска, создает, проверяет и восстанавливает файлы квот
setquota
Это редактор квот командной строки
quotaon
Это сообщает системе, что дисковые квоты должны быть включены в одной или нескольких файловых системах.
quotaoff
Это сообщает системе, что дисковые квоты должны быть отключены для одной или нескольких файловых систем.
Repquota
Это печатает сводную информацию об использовании диска и квотах для указанных файловых систем.
Вы можете использовать справку Manpage, чтобы проверить полный синтаксис для каждой команды, упомянутой здесь.
Unix — Администрирование пользователей
В этой главе мы подробно обсудим администрирование пользователей в Unix.
В системе Unix есть три типа учетных записей:
Корневой аккаунт
Это также называется суперпользователем и будет иметь полный и беспрепятственный контроль над системой. Суперпользователь может выполнять любые команды без каких-либо ограничений. Этот пользователь должен считаться системным администратором.
Системные учетные записи
Системные учетные записи — это те, которые необходимы для работы системных компонентов, например почтовых учетных записей и учетных записей sshd . Эти учетные записи обычно необходимы для выполнения определенных функций в вашей системе, и любые их изменения могут отрицательно повлиять на систему.
Учетные записи пользователей
Учетные записи пользователей обеспечивают интерактивный доступ к системе для пользователей и групп пользователей. Обычные пользователи обычно назначаются этим учетным записям и обычно имеют ограниченный доступ к критическим системным файлам и каталогам.
Unix поддерживает концепцию групповой учетной записи, которая логически группирует несколько учетных записей. Каждая учетная запись будет частью другой учетной записи группы. Группа Unix играет важную роль в обработке прав доступа к файлам и управлении процессами.
Управление пользователями и группами
Существует четыре основных файла администрирования пользователей —
-
/ etc / passwd — хранит информацию об учетной записи пользователя и пароле. Этот файл содержит большую часть информации об учетных записях в системе Unix.
-
/ etc / shadow — содержит зашифрованный пароль соответствующей учетной записи. Не все системы поддерживают этот файл.
-
/ etc / group — этот файл содержит информацию о группе для каждой учетной записи.
-
/ etc / gshadow — этот файл содержит информацию об учетной записи защищенной группы.
/ 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 Удаляет группы из системы |
useradd
Добавляет учетные записи в систему
usermod
Изменяет атрибуты аккаунта
userdel
Удаляет аккаунты из системы
GroupAdd
Добавляет группы в систему
groupmod
Изменяет атрибуты группы
groupdel
Удаляет группы из системы
Вы можете использовать справку Manpage, чтобы проверить полный синтаксис для каждой команды, упомянутой здесь.
Создать группу
Теперь мы поймем, как создать группу. Для этого нам необходимо создать группы перед созданием любой учетной записи, в противном случае мы можем использовать существующие группы в нашей системе. У нас есть все группы, перечисленные в файле / etc / groups .
Все группы по умолчанию являются группами, специфичными для системных учетных записей, и их не рекомендуется использовать для обычных учетных записей. Итак, следующий синтаксис для создания новой учетной записи группы —
groupadd [-g gid [-o]] [-r] [-f] groupname
В следующей таблице перечислены параметры —
Sr.No. | Вариант и описание |
---|---|
1 |
-G GID Числовое значение идентификатора группы |
2 |
-о Эта опция позволяет добавить группу с неуникальным GID |
3 |
-р Этот флаг указывает groupadd добавить системную учетную запись |
4 |
-f Эта опция заставляет просто выйти с успешным статусом, если указанная группа уже существует. С помощью -g, если указанный GID уже существует, выбирается другой (уникальный) GID |
5 |
имя группы Фактическое имя группы, которая будет создана |
-G GID
Числовое значение идентификатора группы
-о
Эта опция позволяет добавить группу с неуникальным GID
-р
Этот флаг указывает groupadd добавить системную учетную запись
-f
Эта опция заставляет просто выйти с успешным статусом, если указанная группа уже существует. С помощью -g, если указанный GID уже существует, выбирается другой (уникальный) GID
имя группы
Фактическое имя группы, которая будет создана
Если вы не укажете какой-либо параметр, система использует значения по умолчанию.
В следующем примере создается группа разработчиков со значениями по умолчанию, что очень приемлемо для большинства администраторов.
$ 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 и имя группы . Чтобы удалить финансовую группу, введите команду —
$ groupdel developer
Это удаляет только группу, а не файлы, связанные с этой группой. Файлы по-прежнему доступны их владельцам.
Завести аккаунт
Давайте посмотрим, как создать новую учетную запись в вашей системе Unix. Ниже приведен синтаксис для создания учетной записи пользователя.
useradd -d homedir -g groupname -m -s shell -u userid accountname
В следующей таблице перечислены параметры —
Sr.No. | Вариант и описание |
---|---|
1 |
-d Homedir Указывает домашний каталог для учетной записи |
2 |
-g имя группы Указывает групповую учетную запись для этой учетной записи |
3 |
-m Создает домашний каталог, если он не существует |
4 |
оболочка Определяет оболочку по умолчанию для этой учетной записи |
5 |
-u идентификатор пользователя Вы можете указать идентификатор пользователя для этой учетной записи |
6 |
имя пользователя Фактическое имя учетной записи, которая будет создана |
-d Homedir
Указывает домашний каталог для учетной записи
-g имя группы
Указывает групповую учетную запись для этой учетной записи
-m
Создает домашний каталог, если он не существует
оболочка
Определяет оболочку по умолчанию для этой учетной записи
-u идентификатор пользователя
Вы можете указать идентификатор пользователя для этой учетной записи
имя пользователя
Фактическое имя учетной записи, которая будет создана
Если вы не укажете какой-либо параметр, система использует значения по умолчанию. Команда useradd изменяет файлы / etc / passwd , / etc / shadow и / etc / group и создает домашний каталог.
Ниже приведен пример создания учетной записи mcmohd с установкой его домашнего каталога на / home / mcmohd и группы в качестве разработчиков . Этому пользователю будет назначен Korn Shell.
$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd
Перед выполнением вышеуказанной команды убедитесь, что у вас уже есть группа разработчиков, созданная с помощью команды groupadd .
После создания учетной записи вы можете установить ее пароль с помощью команды passwd следующим образом:
$ passwd mcmohd20 Changing password for user mcmohd20. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully.
Когда вы вводите имя учетной записи passwd , вы можете изменить пароль, если вы являетесь суперпользователем. В противном случае вы можете изменить только свой пароль, используя ту же команду, но без указания имени вашей учетной записи.
Изменить аккаунт
Команда usermod позволяет вносить изменения в существующую учетную запись из командной строки. Он использует те же аргументы, что и команда useradd , плюс аргумент -l, который позволяет изменить имя учетной записи.
Например, чтобы изменить имя учетной записи mcmohd на mcmohd20 и соответственно изменить домашний каталог, вам нужно будет выполнить следующую команду —
$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20
Удалить аккаунт
Команда userdel может использоваться для удаления существующего пользователя. Это очень опасная команда, если ее не использовать с осторожностью.
Для команды .r доступен только один аргумент или опция для удаления домашнего каталога учетной записи и почтового файла.
Например, чтобы удалить учетную запись mcmohd20 , введите следующую команду —
$ userdel -r mcmohd20
Если вы хотите сохранить домашний каталог для резервного копирования, опустите опцию -r . Вы можете удалить домашний каталог по мере необходимости позже.
Unix — производительность системы
В этой главе мы подробно обсудим производительность системы в Unix.
Мы познакомим вас с несколькими бесплатными инструментами, которые доступны для мониторинга и управления производительностью в системах Unix. Эти инструменты также предоставляют рекомендации по диагностике и устранению проблем с производительностью в среде Unix.
Unix имеет следующие основные типы ресурсов, которые необходимо отслеживать и настраивать:
-
ЦПУ
-
объем памяти
-
Дисковое пространство
-
Линии связи
-
Время ввода / вывода
-
Сетевое время
-
Прикладные программы
ЦПУ
объем памяти
Дисковое пространство
Линии связи
Время ввода / вывода
Сетевое время
Прикладные программы
Компоненты производительности
В следующей таблице перечислены пять основных компонентов, которые занимают системное время.
Sr.No. | Компонент и описание |
---|---|
1 |
Пользовательское состояние CPU Фактическое количество времени, которое процессор тратит на запуск программы пользователя в состоянии пользователя. Он включает время, потраченное на выполнение библиотечных вызовов, но не включает время, проведенное в ядре от его имени |
2 |
Состояние системы ЦП Это количество времени, которое процессор проводит в состоянии системы от имени этой программы. Все процедуры ввода / вывода требуют служб ядра. Программист может влиять на это значение, блокируя передачу ввода / вывода |
3 |
Время ввода / вывода и сетевое время Это количество времени, затрачиваемое на перемещение данных и обслуживание запросов ввода-вывода. |
4 |
Производительность виртуальной памяти Это включает в себя переключение контекста и обмен |
5 |
Прикладная программа Время, затраченное на запуск других программ — когда система не обслуживает это приложение, поскольку другое приложение в настоящее время имеет процессор |
Пользовательское состояние CPU
Фактическое количество времени, которое процессор тратит на запуск программы пользователя в состоянии пользователя. Он включает время, потраченное на выполнение библиотечных вызовов, но не включает время, проведенное в ядре от его имени
Состояние системы ЦП
Это количество времени, которое процессор проводит в состоянии системы от имени этой программы. Все процедуры ввода / вывода требуют служб ядра. Программист может влиять на это значение, блокируя передачу ввода / вывода
Время ввода / вывода и сетевое время
Это количество времени, затрачиваемое на перемещение данных и обслуживание запросов ввода-вывода.
Производительность виртуальной памяти
Это включает в себя переключение контекста и обмен
Прикладная программа
Время, затраченное на запуск других программ — когда система не обслуживает это приложение, поскольку другое приложение в настоящее время имеет процессор
Инструменты производительности
Unix предоставляет следующие важные инструменты для измерения и настройки производительности системы Unix —
Sr.No. | Команда и описание |
---|---|
1 |
хороший / Renice Запускает программу с измененным приоритетом планирования |
2 |
NetStat Печать сетевых подключений, таблиц маршрутизации, статистики интерфейса, маскарадных подключений и многоадресного членства |
3 |
время Помогает время простой команды или дает использование ресурсов |
4 |
Провел Это средняя загрузка системы |
5 |
п.с. Сообщает о снимке текущего процесса |
6 |
vmstat Сообщает статистику виртуальной памяти |
7 |
дргоЕ Отображает данные профиля графа вызовов |
8 |
профессор Облегчает процесс профилирования |
9 |
Топ Отображает системные задачи |
хороший / Renice
Запускает программу с измененным приоритетом планирования
NetStat
Печать сетевых подключений, таблиц маршрутизации, статистики интерфейса, маскарадных подключений и многоадресного членства
время
Помогает время простой команды или дает использование ресурсов
Провел
Это средняя загрузка системы
п.с.
Сообщает о снимке текущего процесса
vmstat
Сообщает статистику виртуальной памяти
дргоЕ
Отображает данные профиля графа вызовов
профессор
Облегчает процесс профилирования
Топ
Отображает системные задачи
Вы можете использовать справку Manpage, чтобы проверить полный синтаксис для каждой команды, упомянутой здесь.
Unix — системный журнал
В этой главе мы подробно обсудим ведение журнала в Unix.
Unix-системы имеют очень гибкую и мощную систему ведения журналов, которая позволяет вам записывать практически все, что вы можете себе представить, а затем манипулировать журналами для получения необходимой информации.
Многие версии Unix предоставляют универсальное средство ведения журналов, называемое syslog . Отдельные программы, для которых требуется регистрация информации, отправляют информацию в системный журнал.
Unix syslog — это настраиваемая хостом единая система ведения журнала. Система использует централизованный системный процесс регистрации, который запускает программу / etc / syslogd или / etc / syslog .
Работа системного регистратора довольно проста. Программы отправляют свои записи журнала в syslogd , который обращается к файлу конфигурации /etc/syslogd.conf или / etc / syslog и, когда совпадение найдено, записывает сообщение в нужный файл журнала.
Есть четыре основных термина системного журнала, которые вы должны понимать:
Sr.No. | Срок и описание |
---|---|
1 |
объект Идентификатор, используемый для описания приложения или процесса, который отправил сообщение журнала. Например, mail, kernel и ftp. |
2 |
приоритет Показатель важности сообщения. Уровни в системном журнале определяются как руководящие указания, от отладочной информации до критических событий. |
3 |
селектор Сочетание одного или нескольких объектов и уровней. Когда входящее событие соответствует селектору, выполняется действие. |
4 |
действие Что происходит с входящим сообщением, которое соответствует селектору. Действия могут записывать сообщение в файл журнала, выводить сообщение на консоль или другое устройство, записывать сообщение вошедшему в систему пользователю или отправлять сообщение на другой сервер системного журнала. |
объект
Идентификатор, используемый для описания приложения или процесса, который отправил сообщение журнала. Например, mail, kernel и ftp.
приоритет
Показатель важности сообщения. Уровни в системном журнале определяются как руководящие указания, от отладочной информации до критических событий.
селектор
Сочетание одного или нескольких объектов и уровней. Когда входящее событие соответствует селектору, выполняется действие.
действие
Что происходит с входящим сообщением, которое соответствует селектору. Действия могут записывать сообщение в файл журнала, выводить сообщение на консоль или другое устройство, записывать сообщение вошедшему в систему пользователю или отправлять сообщение на другой сервер системного журнала.
Средства системного журнала
Теперь мы разберемся с возможностями системного журнала. Вот доступные возможности для селектора. Не все средства присутствуют во всех версиях Unix.
объект | Описание |
---|---|
1 |
авт Деятельность, связанная с запросом имени и пароля (getty, su, login) |
2 |
AuthPriv То же, что и auth, но записано в файл, который могут быть прочитаны только выбранными пользователями |
3 |
приставка Используется для захвата сообщений, которые обычно направляются на системную консоль |
4 |
хрон Сообщения от системного планировщика cron |
5 |
демон Системный демон всеобъемлющий |
6 |
FTP Сообщения, относящиеся к демону ftp |
7 |
деревенщина Сообщения ядра |
8 |
local0.local7 Местные объекты, определенные для сайта |
9 |
LPR Сообщения из системы строчной печати |
10 |
почта Сообщения, относящиеся к почтовой системе |
11 |
отметка Псевдо-событие, используемое для генерации меток времени в файлах журнала |
12 |
Новости Сообщения, относящиеся к сетевому протоколу новостей (nntp) |
13 |
нтп Сообщения, относящиеся к протоколу сетевого времени |
14 |
пользователь Обычные пользовательские процессы |
15 |
UUCP Подсистема UUCP |
авт
Деятельность, связанная с запросом имени и пароля (getty, su, login)
AuthPriv
То же, что и auth, но записано в файл, который могут быть прочитаны только выбранными пользователями
приставка
Используется для захвата сообщений, которые обычно направляются на системную консоль
хрон
Сообщения от системного планировщика cron
демон
Системный демон всеобъемлющий
FTP
Сообщения, относящиеся к демону ftp
деревенщина
Сообщения ядра
local0.local7
Местные объекты, определенные для сайта
LPR
Сообщения из системы строчной печати
почта
Сообщения, относящиеся к почтовой системе
отметка
Псевдо-событие, используемое для генерации меток времени в файлах журнала
Новости
Сообщения, относящиеся к сетевому протоколу новостей (nntp)
нтп
Сообщения, относящиеся к протоколу сетевого времени
пользователь
Обычные пользовательские процессы
UUCP
Подсистема UUCP
Приоритеты системного журнала
Приоритеты системного журнала приведены в следующей таблице:
Sr.No. | Приоритет и описание |
---|---|
1 |
АВАРИЙНАЯ Чрезвычайные ситуации, такие как неизбежный сбой системы, обычно передаются всем пользователям. |
2 |
бдительный Условие, которое следует немедленно исправить, например, поврежденная системная база данных |
3 |
критика Критическое состояние, например, ошибка оборудования |
4 |
заблуждаться Обычная ошибка |
5 |
Предупреждение Предупреждение |
6 |
уведомление Условие, которое не является ошибкой, но, возможно, должно быть обработано особым образом |
7 |
Информация Информационное сообщение |
8 |
отлаживать Сообщения, которые используются при отладке программ |
9 |
никто Псевдоуровень, используемый для указания не регистрировать сообщения |
АВАРИЙНАЯ
Чрезвычайные ситуации, такие как неизбежный сбой системы, обычно передаются всем пользователям.
бдительный
Условие, которое следует немедленно исправить, например, поврежденная системная база данных
критика
Критическое состояние, например, ошибка оборудования
заблуждаться
Обычная ошибка
Предупреждение
Предупреждение
уведомление
Условие, которое не является ошибкой, но, возможно, должно быть обработано особым образом
Информация
Информационное сообщение
отлаживать
Сообщения, которые используются при отладке программ
никто
Псевдоуровень, используемый для указания не регистрировать сообщения
Комбинация средств и уровней позволяет вам различать, что регистрируется и куда идет эта информация.
Поскольку каждая программа покорно отправляет свои сообщения системному регистратору, регистратор принимает решение о том, что отслеживать и что отбрасывать, основываясь на уровнях, определенных в селекторе.
Когда вы указываете уровень, система будет отслеживать все на этом уровне и выше.
Файл /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
Каждая строка файла содержит две части —
-
Селектор сообщений, который указывает, какие сообщения следует регистрировать. Например, все сообщения об ошибках или все сообщения отладки из ядра.
-
Поле действия, которое говорит, что должно быть сделано с сообщением. Например, поместите его в файл или отправьте сообщение на терминал пользователя.
Селектор сообщений, который указывает, какие сообщения следует регистрировать. Например, все сообщения об ошибках или все сообщения отладки из ядра.
Поле действия, которое говорит, что должно быть сделано с сообщением. Например, поместите его в файл или отправьте сообщение на терминал пользователя.
Ниже приведены заметные моменты для вышеуказанной конфигурации —
-
Селекторы сообщений состоят из двух частей: объекта и приоритета . Например, kern.debug выбирает все сообщения отладки (приоритет), сгенерированные ядром (средство).
-
Селектор сообщений kern.debug выбирает все приоритеты, которые больше, чем отладка.
-
Звездочка вместо объекта или приоритета указывает «все». Например, * .debug означает все сообщения отладки, а kern. * Означает все сообщения, сгенерированные ядром.
-
Вы также можете использовать запятые для указания нескольких объектов. Два или более селектора могут быть сгруппированы с помощью точки с запятой.
Селекторы сообщений состоят из двух частей: объекта и приоритета . Например, kern.debug выбирает все сообщения отладки (приоритет), сгенерированные ядром (средство).
Селектор сообщений kern.debug выбирает все приоритеты, которые больше, чем отладка.
Звездочка вместо объекта или приоритета указывает «все». Например, * .debug означает все сообщения отладки, а kern. * Означает все сообщения, сгенерированные ядром.
Вы также можете использовать запятые для указания нескольких объектов. Два или более селектора могут быть сгруппированы с помощью точки с запятой.
Логирование действий
Поле действия указывает одно из пяти действий —
-
Записать сообщение в файл или на устройство. Например, /var/log/lpr.log или / dev / console .
-
Отправить сообщение пользователю. Вы можете указать несколько имен пользователей, разделяя их запятыми; например, root, amrood.
-
Отправить сообщение всем пользователям. В этом случае поле действия состоит из звездочки; например, *.
-
Передайте сообщение в программу. В этом случае программа указывается после символа канала Unix (|).
-
Отправьте сообщение в системный журнал на другом хосте. В этом случае поле действия состоит из имени хоста, которому предшествует знак at; например, @ tutorialspoint.com.
Записать сообщение в файл или на устройство. Например, /var/log/lpr.log или / dev / console .
Отправить сообщение пользователю. Вы можете указать несколько имен пользователей, разделяя их запятыми; например, root, amrood.
Отправить сообщение всем пользователям. В этом случае поле действия состоит из звездочки; например, *.
Передайте сообщение в программу. В этом случае программа указывается после символа канала Unix (|).
Отправьте сообщение в системный журнал на другом хосте. В этом случае поле действия состоит из имени хоста, которому предшествует знак at; например, @ tutorialspoint.com.
Команда регистратора
Unix предоставляет команду logger , которая является чрезвычайно полезной командой для ведения системного журнала. Команда logger отправляет сообщения регистрации демону syslogd и, следовательно, вызывает системное ведение журнала.
Это означает, что мы можем в любой момент проверить из командной строки демон syslogd и его конфигурацию. Команда logger предоставляет метод для добавления однострочных записей в файл системного журнала из командной строки.
Формат команды —
logger [-i] [-f file] [-p priority] [-t tag] [message]...
Вот детали параметров —
Sr.No. | Вариант и описание |
---|---|
1 |
-f имя файла Использует содержимое файла с именем файла в качестве сообщения для входа. |
2 |
-я Регистрирует идентификатор процесса процесса регистрации в каждой строке. |
3 |
приоритет Вводит сообщение с указанным приоритетом (указывается селекторная запись); приоритет сообщения может быть задан численно или в виде пары unit.priority. Приоритет по умолчанию — user.notice. |
4 |
-t тег Помечает каждую строку, добавленную в журнал, указанным тегом. |
5 |
сообщение Строковые аргументы, содержимое которых объединено в указанном порядке, разделены пробелом. |
-f имя файла
Использует содержимое файла с именем файла в качестве сообщения для входа.
-я
Регистрирует идентификатор процесса процесса регистрации в каждой строке.
приоритет
Вводит сообщение с указанным приоритетом (указывается селекторная запись); приоритет сообщения может быть задан численно или в виде пары unit.priority. Приоритет по умолчанию — user.notice.
-t тег
Помечает каждую строку, добавленную в журнал, указанным тегом.
сообщение
Строковые аргументы, содержимое которых объединено в указанном порядке, разделены пробелом.
Вы можете использовать справку Manpage, чтобы проверить полный синтаксис этой команды.
Вращение журнала
Файлы журналов имеют тенденцию к очень быстрому росту и занимают много места на диске. Чтобы включить ротацию журналов, в большинстве дистрибутивов используются такие инструменты, как newsyslog или logrotate .
Эти инструменты должны вызываться с частым интервалом времени с помощью демона cron . Проверьте man-страницы для newsyslog или logrotate для более подробной информации.
Важные местоположения журнала
Все системные приложения создают свои файлы журналов в / var / log и его подкаталогах. Вот несколько важных приложений и соответствующих им каталогов журналов —
заявка | каталог |
---|---|
HTTPD | / Вар / Журнал / HTTPD |
самба | / Вар / Журнал / самба |
хрон | / Вар / Журнал / |
почта | / Вар / Журнал / |
MySQL | / Вар / Журнал / |
Unix — сигналы и ловушки
В этой главе мы подробно обсудим сигналы и ловушки в Unix.
Сигналы — это программные прерывания, посылаемые программе, чтобы указать, что произошло важное событие. События могут варьироваться от пользовательских запросов до недопустимых ошибок доступа к памяти. Некоторые сигналы, такие как сигнал прерывания, указывают, что пользователь попросил программу сделать что-то, что не соответствует обычному потоку управления.
В следующей таблице перечислены распространенные сигналы, которые вы можете встретить и использовать в своих программах.
Название сигнала | Номер сигнала | Описание |
---|---|---|
SIGHUP | 1 | Обнаружено зависание на управляющем терминале или смерть контролирующего процесса |
SIGINT | 2 | Выдается, если пользователь отправляет сигнал прерывания (Ctrl + C) |
SIGQUIT | 3 | Выдается, если пользователь отправляет сигнал выхода (Ctrl + D) |
SIGFPE | 8 | Выдается при попытке выполнить недопустимую математическую операцию |
SIGKILL | 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, содержащий образ памяти процесса, когда он получил сигнал.
-
Останови процесс.
-
Продолжить остановленный процесс.
Завершить процесс.
Игнорировать сигнал.
Дамп ядро. Это создает файл с именем core, содержащий образ памяти процесса, когда он получил сигнал.
Останови процесс.
Продолжить остановленный процесс.
Отправка сигналов
Существует несколько способов доставки сигналов в программу или скрипт. Одним из наиболее распространенных для пользователя является ввод CONTROL-C или клавиши INTERRUPT во время выполнения скрипта.
Когда вы нажимаете клавишу Ctrl + C , SIGINT отправляется в сценарий и в соответствии с определенным сценарием действия по умолчанию завершается.
Другим распространенным методом доставки сигналов является использование команды kill , синтаксис которой следующий:
$ kill -signal pid
Здесь сигнал — это либо номер, либо имя сигнала для доставки, а pid — идентификатор процесса, на который должен быть отправлен сигнал. Например —
$ kill -1 1001
Приведенная выше команда отправляет HUP или сигнал зависания программе, которая выполняется с идентификатором процесса 1001 . Чтобы отправить сигнал уничтожения тому же процессу, используйте следующую команду —
$ kill -9 1001
Это убивает процесс, запущенный с идентификатором процесса 1001 .
Сигналы захвата
Когда вы нажимаете клавиши Ctrl + C или Break на вашем терминале во время выполнения программы оболочки, обычно эта программа немедленно завершается, и ваша командная строка возвращается. Это не всегда может быть желательным. Например, вы можете оставить кучу временных файлов, которые не будут очищены.
Перехват этих сигналов довольно прост, и команда trap имеет следующий синтаксис:
$ trap commands signals
Здесь команда может быть любой допустимой командой Unix или даже определенной пользователем функцией, а сигнал может быть списком любого количества сигналов, которые вы хотите перехватить.
Существует два распространенных варианта использования ловушек в сценариях оболочки:
- Очистить временные файлы
- Игнорировать сигналы
Очистка временных файлов
В качестве примера команды trap, ниже показано, как вы можете удалить некоторые файлы и затем выйти, если кто-то попытается прервать программу из терминала —
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
С того момента, как в программе оболочки будет выполнена эта ловушка, два файла work1 $$ и dataout $$ будут автоматически удалены, если программа получит сигнал № 2.
Следовательно, если пользователь прерывает выполнение программы после выполнения этой ловушки, вы можете быть уверены, что эти два файла будут очищены. Команда выхода, которая следует за rm , необходима, потому что без нее выполнение программы продолжится в той точке, в которой она остановилась, когда был получен сигнал.
Сигнал № 1 генерируется для зависания . Либо кто-то намеренно вешает трубку, либо она случайно отключается.
Вы можете изменить предыдущую ловушку, чтобы также удалить два указанных файла в этом случае, добавив сигнал номер 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
Игнорирование сигналов
Если команда, указанная для trap, является нулевой, указанный сигнал будет игнорироваться при получении. Например, команда —
$ trap '' 2
Это указывает на то, что сигнал прерывания должен игнорироваться. Возможно, вы захотите игнорировать определенные сигналы при выполнении операции, которую вы не хотите прерывать. Вы можете указать несколько сигналов, которые будут игнорироваться, следующим образом:
$ trap '' 1 2 3 15
Обратите внимание, что первый аргумент должен быть указан для сигнала, который следует игнорировать, и он не эквивалентен записи следующего, который имеет отдельное значение —
$ trap 2
Если вы игнорируете сигнал, все подоболочки также игнорируют этот сигнал. Однако, если вы укажете действие, которое будет выполняться при получении сигнала, все подоболочки все равно будут выполнять действие по умолчанию при получении этого сигнала.
Сброс ловушек
После того, как вы изменили действие по умолчанию, которое будет выполняться при получении сигнала, вы можете снова изменить его с помощью ловушки, если просто пропустите первый аргумент; так что
$ trap 1 2
Это сбрасывает действие, которое необходимо выполнить при получении сигналов 1 или 2, до значения по умолчанию.