Команда script в linux

Обновлено: 08.07.2024

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

Чтобы начать запись нужно выполнить команду script. Если вызвать команду script без параметров, то запись будет вестись в файл с именем typescript.

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

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

После ввода команды будет создан файл, но данные в него будут записаны только после того, как вы введете команду exit или нажмете сочетание клавиш Ctrl+D. Пример:

Мы выполнили команду script. Автоматически был создан файл typescript (если он уже существовал, то он будет очищен). С этого момента система начинает запоминать весь ввод и вывод в терминале. В конце мы вводим команду exit и в файл с именем typescript записывается все, что происходило в терминале с момента ввода команды script.

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

Еще стоит сказать о полезной опции -c или —command. Данная опция позволяет указать команду, которую нужно выполнить, а вывод этой команды записать файл. Пример:

В данном примере мы вызываем команду script с опцией -c и указываем в качестве параметра опции команду ls, которую нужно выполнить, а вывод команды нужно записать в файл my.log. Команда ls выводит список файлов в текущей директории. Таким образом в файл my.log попадет список файлов.

Получить справку по команде script (по всем ее опциям) можно, выполнив в терминале:

Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.




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


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


На самом деле, если вы опробовали это в своём терминале, ваш первый bash-скрипт, в котором задействованы две команды, уже написан. Работает он так. Сначала команда pwd выводит на экран сведения о текущей рабочей директории, потом команда whoami показывает данные о пользователе, под которым вы вошли в систему.

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


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

Как устроены bash-скрипты

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


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

Команды оболочки отделяются знаком перевода строки, комментарии выделяют знаком решётки. Вот как это выглядит:


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

Установка разрешений для файла сценария

Сохраните файл, дав ему имя myscript , и работа по созданию bash-скрипта почти закончена. Сейчас осталось лишь сделать этот файл исполняемым, иначе, попытавшись его запустить, вы столкнётесь с ошибкой Permission denied .


Попытка запуска файла сценария с неправильно настроенными разрешениями

Сделаем файл исполняемым:


Теперь попытаемся его выполнить:


После настройки разрешений всё работает как надо.


Успешный запуск bash-скрипта

Для вывода текста в консоль Linux применяется команда echo . Воспользуемся знанием этого факта и отредактируем наш скрипт, добавив пояснения к данным, которые выводят уже имеющиеся в нём команды:


Вот что получится после запуска обновлённого скрипта.


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

Использование переменных

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

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

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

  • Переменные среды
  • Пользовательские переменные

Переменные среды

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


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


Использование переменной среды в сценарии

А что если надо вывести на экран значок доллара? Попробуем так:


Система обнаружит знак доллара в строке, ограниченной кавычками, и решит, что мы сослались на переменную. Скрипт попытается вывести на экран значение неопределённой переменной $1 . Это не то, что нам нужно. Что делать?

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


Теперь сценарий выведет именно то, что ожидается.


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

Пользовательские переменные

В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в сценарии собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария.

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

Вот что получится после запуска такого сценария.


Пользовательские переменные в сценарии

Подстановка команд

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

Сделать это можно двумя способами.

  • С помощью значка обратного апострофа «`»
  • С помощью конструкции $()


При втором подходе то же самое записывают так:


А скрипт, в итоге, может выглядеть так:


В ходе его работы вывод команды pwd будет сохранён в переменной mydir , содержимое которой, с помощью команды echo , попадёт в консоль.


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

Математические операции

Для выполнения математических операций в файле скрипта можно использовать конструкцию вида $((a+b)) :


Математические операции в сценарии

Управляющая конструкция if-then

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


А вот рабочий пример:


В данном случае, если выполнение команды pwd завершится успешно, в консоль будет выведен текст «it works».

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


Вот что получается после запуска этого скрипта.


Поиск пользователя

Здесь мы воспользовались командой grep для поиска пользователя в файле /etc/passwd . Если команда grep вам незнакома, её описание можно найти здесь.

Управляющая конструкция if-then-else

Для того, чтобы программа смогла сообщить и о результатах успешного поиска, и о неудаче, воспользуемся конструкцией if-then-else . Вот как она устроена:


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

Напишем такой скрипт:


Его исполнение пошло по ветке else .


Запуск скрипта с конструкцией if-then-else


Если первая команда вернёт ноль, что говорит о её успешном выполнении, выполнятся команды в первом блоке then , иначе, если первое условие окажется ложным, и если вторая команда вернёт ноль, выполнится второй блок кода.


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

Сравнение чисел

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

n1 -eq n2 Возвращает истинное значение, если n1 равно n2 .
n1 -ge n2 Возвращает истинное значение, если n1 больше или равно n2 .
n1 -gt n2 Возвращает истинное значение, если n1 больше n2 .
n1 -le n2 Возвращает истинное значение, если n1 меньше или равно n2 .
n1 -lt n2 Возвращает истинное значение, если n1 меньше n2 .
n1 -ne n2 Возвращает истинное значение, если n1 не равно n2 .

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


Вот что выведет эта команда.


Сравнение чисел в скриптах

Сравнение строк

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

str1 = str2 Проверяет строки на равенство, возвращает истину, если строки идентичны.
s tr1 != str2 Возвращает истину, если строки не идентичны.
str1 < str2 Возвращает истину, если str1 меньше, чем str2 .
str1 > str2 Возвращает истину, если str1 больше, чем str2 .
-n str1 Возвращает истину, если длина str1 больше нуля.
-z str1 Возвращает истину, если длина str1 равна нулю.

Вот пример сравнения строк в сценарии:


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


Сравнение строк в скриптах

Вот как работа с этими операторами выглядит в коде:


Вот результаты работы скрипта.


Сравнение строк, выведенное предупреждение

Обратите внимание на то, что скрипт, хотя и выполняется, выдаёт предупреждение:


Для того, чтобы избавиться от этого предупреждения, заключим $val2 в двойные кавычки:


Теперь всё работает как надо.


Сравнение строк

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


Сохраним его, дав имя myfile , после чего выполним в терминале такую команду:


Она отсортирует строки из файла так:


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


Если его запустить, окажется, что всё наоборот — строчная буква теперь больше прописной.


Команда sort и сравнение строк в файле сценария

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

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

Проверки файлов

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

-d file Проверяет, существует ли файл, и является ли он директорией.
-e file Проверяет, существует ли файл.
-f file Проверяет, существует ли файл, и является ли он файлом.
-r file Проверяет, существует ли файл, и доступен ли он для чтения.
-s file П роверяет, существует ли файл, и не является ли он пустым.
-w file Проверяет, существует ли файл, и доступен ли он для записи.
-x file Проверяет, существует ли файл, и является ли он исполняемым.
file1 -nt file2 Проверяет, новее ли file1 , чем file2 .
file1 -ot file2 Проверяет, старше ли file1 , чем file2 .
-O file Проверяет, существует ли файл, и является ли его владельцем текущий пользователь.
-G file Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя.

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

Опробуем одну из команд на практике:


Этот скрипт, для существующей директории, выведет её содержимое.


Вывод содержимого директории

Полагаем, с остальными командами вы сможете поэкспериментировать самостоятельно, все они применяются по тому же принципу.

Итоги

Сегодня мы рассказали о том, как приступить к написанию bash-скриптов и рассмотрели некоторые базовые вещи. На самом деле, тема bash-программирования огромна. Эта статья является переводом первой части большой серии из 11 материалов. Если вы хотите продолжения прямо сейчас — вот список оригиналов этих материалов. Для удобства сюда включён и тот, перевод которого вы только что прочли.

    — здесь речь идёт о том, как начать создание bash-скриптов, рассмотрено использование переменных, описаны условные конструкции, вычисления, сравнения чисел, строк, выяснение сведений о файлах.

— тут раскрываются особенности работы с циклами for и while.

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

— здесь речь идёт о дескрипторах файлов и о работе с ними, о потоках ввода, вывода, ошибок, о перенаправлении вывода.

— этот материал посвящён сигналам Linux, их обработке в скриптах, запуску сценариев по расписанию.

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

— эта статья посвящена работе с потоковым текстовым редактором sed.

— данный материал посвящён программированию на языке обработки данных awk.

— тут можно почитать об использовании регулярных выражений в bash-скриптах.


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

Это очень полезно для тех, кто не хочет запоминать длинные и сложные команды Linux.

Сегодня в этом руководстве мы увидим, как записывать все, что вы делаете в Терминале, используя команду «script».

Возможно, вы выполнили команду, или создали каталог, или установили приложение в Терминале.

Команда Script просто сохраняет все, что вы делали в Терминале.

Затем вы можете просмотреть все это, если хотите узнать, что вы сделали несколько часов или дней назад. Я знаю, что знаю, мы можем использовать клавиши со стрелками ВВЕРХ / ВНИЗ или команду истории для просмотра ранее запущенных команд.

Однако вы не можете просмотреть вывод этих команд.

Но команда Script записывает и отображает завершенные действия терминала.

Команда script создает машинописный текст всего, что вы делаете в Терминале.

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

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

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

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

Запишите все, что вы делаете в терминале, используя команду Script в Linux

Команда script поставляется предварительно установленной в большинстве современных операционных систем Linux.

Итак, давайте не будем беспокоиться об установке.

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

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

Где, -a флаг используется для добавления вывода в файл или в машинопись, сохраняя предыдущее содержимое.

Приведенная выше команда записывает все, что вы делаете в Терминале, и добавляете вывод в файл с именем «my_terminal_activities» и сохраняете его в текущем рабочем каталоге.

Пример вывода будет:

Теперь запустите несколько случайных команд Linux в вашем терминале.


После выполнения всех команд завершите сеанс команды «script» с помощью команды:

После ввода exit вы получите следующий вывод.

Как видите, действия Терминала были сохранены в файле с именем «my_terminal_activities» и сохранены в текущем рабочем каталоге.

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

Как запустить команду «скрипт» («script») в Linux

Советы и хитрости

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

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

Команда сценария записывает как стандартный ввод / вывод, так и время выполнения.

В этом посте описывается, что такое команда «скрипт» и как она работает с различными параметрами.

Синтаксис

Следуйте приведенному ниже синтаксису команды «скрипт»:

Давайте обсудим несколько примеров.

Для начала наберите «скрипт» без указания каких-либо параметров. Если параметр не указан, сценарий создаст в каталоге файл «машинописный текст» для сохранения записи.

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

«Сценарий» начнет запись, которую можно остановить в любой момент командой «exit». Тем временем можно запускать различные сценарии.

Просто запустите команду exit, чтобы завершить машинописный текст, и сценарий завершит процесс захвата:

Просто запустите команду exit

В качестве аргумента укажите любое имя файла. Например, я создаю текстовый файл с именем «linuxhint.txt». Выполните следующую команду:

Затем запустите несколько команд в терминале и введите

Теперь откройте файл „linuxhint.txt“.

Выход:

Приведенное ниже содержимое является результатом файла linuxhint.txt, созданного командой сценария.

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

1) -c option:

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

Например, чтобы получить календарь, используйте:

Эта опция используется для получения информации о конкретной команде

Выход:

Эта команда покажет вам календарь в текстовом файле.

Эта команда покажет вам календарь в текстовом файле

Эта опция добавляет вывод в файл, сохраняя предыдущее содержимое. Содержимое обоих файлов разделяется пробелом.

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

Эта опция добавляет вывод в файл, сохраняя предыдущее содержимое

Выход:

Отобразите вывод с предыдущим запущенным скриптом.

Отобразите вывод с предыдущим запущенным скриптом

3) -t, –timing[=] Option

Эта опция используется для записи операций терминала построчно, что выглядит как видео. Команда „scriptreplay“ используется для воспроизведения записанного файла.

Нам нужно дать файлу имя для записи активности. В этом примере имя файла — „linxhint“:

$ script -timing =time_log linuxhint

Нам нужно дать файлу имя для записи активности

Выход:

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

$ scriptreplay – timing =time_log linuxhint

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

4) –force Option

Чтобы сохранить сценарий в каком-то определенном каталоге, используйте параметр » —force «. Запустите приведенную ниже команду force:

Чтобы сохранить сценарий в каком-то определенном каталоге

Выход:

Запустите приведенную ниже команду force

5) -e Option

Эта опция возвращает дочерний процесс, введите следующую команду:

Эта опция возвращает дочерний процесс, введите следующую команду

На изображении выше linuxhint2.txt является дочерним для linuxhint.txt, а linux.txt — родительским процессом.

Выход:

На изображении выше linuxhint2

6) –flush Option

Его можно использовать для дистанционного управления

7) -q quiet Option

8) –help Option

Эта опция используется для получения справочной информации. Он отобразит все параметры, связанные с командой «скрипт», с описанием в одну строку:

Эта опция используется для получения справочной информации

9) –V/–version Option

Эта опция используется для проверки версии команды «скрипт»:

Эта опция используется для проверки версии команды «скрипт»

Заключение

Сценарий — это служебная программа командной строки, используемая для получения ввода и вывода всех запущенных команд в текстовом файле. Он фиксирует все выполненные действия в терминале. Более того, он печатает как ввод, так и вывод в текстовом файле. Команда «Сценарий» используется для создания копии выполненных команд, которая должна храниться в вашей записной книжке и отправляться как часть задания. В этом посте мы увидели функциональность различных вариантов «скрипта» с примерами.

Читайте также: