Программирование на языке командного интерпретатора bash. Основы линукс: Введение в bash. Домашние директории других пользователей

Программирование на языке командного интерпретатора bash. Основы линукс: Введение в bash. Домашние директории других пользователей

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

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

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

1. source

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

source /etc/profile

2. alias

Команда alias позволяет создавать псевдонимы для других команд. Например, вы можете настроить так, чтобы когда вы вводите update, выполнялась команда sudo apt update && sudo apt upgrade. Если вызвать команду без параметров, то она выведет список уже заданных псевдонимов. Смотрите подробнее о том как создавать в отдельной статье.

3. bind

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

bind ""\e

Параметры

-c string Если данный параметр присутствует, то команда будет считана из строки string . Если в передаваемой команде есть дополнительные аргументы, они считаются позиционными и начинаются с $0. (Раздел Аргументы )
-i Интерактивная работа интерпретатора
-l Смотреть INVOCATION ниже
-r Ограничения в работе оболочки. Смотреть RESTRICTED SHELL
-s Если указан данный параметр и нет всех необходимых аргументов, то они считываются из стандартного ввода
-D Список всех строк заключенных в двойные кавычки с $ в начале выводятся на стандартный вывод. Необходимо для выполнения перевода. Никакие команды выполняться не будут
[-+]0[shopt_option ]

shopt_option - дополнительные параметры оболочки. Читать подраздел SHELL BUILTIN COMMANDS. Если данный параметр присутствует6 тогда -0 перед ним устанавливает указанный параметр, а +0 отменяет его. Если параметр shopt_option не указан, то +0 выводит перечень установленных параметров на стандартный вывод в формате позволяющем повторное использование в качестве входных данных.

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

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

--debugger Запускает профайл отладчика перед запуском скрипта. Включает расширенный режим отладки (подробнее в описании extdebug ) и запускает функцию трассировки
(смотреть описание параметра -o ).
--dump-po-string Эквивалентно -D, но вывод производится формат файла локализаций.po
--dump-strings Полностью аналогично -D
--help Подсказка
--init-file file
--rcfile file Если интерпретатор запускается в интерактивном режиме, то выполняет команды инициализации и указанного файла file , а не из стандартного файла инициализации ~/.bashrc .
--login Аналогично -l
--noediting
--noprofile Не читать при запуске оболочки интерпретатора общесистемные файлы настроек /etc/profile и любые локальные файлы настроек, такие как ~/.bash_profile , ~/.bash_login или ~/.profile . По умолчанию bash их использует при запуске в режиме входа (подробнее в параметре INVOCATION).
--norc Не читать и не исполнять файл персональных настроек ~/.bashrc при интерактивном запуске. По умолчанию данный параметр установлен при запуске оболочки командой sh .
--posix Изменение поведения по умолчанию bash, когда встречается команда отличающаяся от стандарта POSIX (для обеспечения совместимости)
--restricted Действия оболочки ограниченны (читать ниже о параметре RESTRICTED SHELL)
--verbose Аналогично -v (подробный вывод)
--version Вывести информацию о текущей версии интерпретатора на стандартный вывод

Аргументы

Если после обработки параметров остаются аргументы не связанные с параметрами -с или -s, то первый аргумент считается именем файла содержащий скрипт с командами. В $0 записывается имя файла и остальные аргументы записываются попозиционно. Bash считывает команды скрипта, выполняет их и затем выходит. Статус завершения будет равен статусу завершения последней выполненной команды скрипта. Если не выполнялось ни одной команды, возвращаемое значение будет "0". Сначала производится попытка открыть скрип из текущей папки, в случае если его там нет, буде произведен поиск указанного файла согласно переменной PATH для скриптов.

Вызов bash

login shell - если первый символ после -- 0 или запуск выполнен с параметром -login.

interactive shell -интерактивная работа. Если запуск произведен без аргументов и без параметра -c со стандартным устройством ввода вывода в виде terminal.app или запуск с параметром -i.

Обработка файлов инициализации. Если какой-либо из файлов с параметрами инициализации существует, но его невозможно прочесть, bash в Mac сообщает об ошибке.

Когда баш запускается в интерактивном режиме или login режиме, в первую очередь считываются и выполняются команды из файла /etc/profile (если он имеется), после этого проверяется наличие файлов ~/.bash_profile , ~/.bash_login , and ~/.profile и если они в наличии и доступны, то команды из них выполняются в том же порядке как они причислены. Чтобы пропустить процесс обработки вышеперечисленных файлом можно использовать параметр --noprofile

Если bash был запущен в режиме login, проверяется и в случае наличия исполняется файл ~/.bash_logout .

В случае запуска в интерактивном режиме, без режима login то во время запуска дополнительно исполняется файл ~/.bashrc . Для отключения данного файла используется параметр --norc или --rcfile file для замены исполняемого файла на другой (file ).

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

Когда bash вызывается командой sh, он пытается использовать наиболее старую версию для обеспечения совместимости с POSIX стандартом. Когда вызывается в интерактивном режиме или в режиме --login в первую очередь считываются и исполняются последовательно файлы /etc/profile и ~/.profile , для запрета использования этих файлов предназначен параметр --noprofile . Также в интерактивном режиме считывается значение переменной ENV для использования его в качестве пути для поиска исполняемого файла. При запуске командой sh параметр запуска --rcfile игнорируется и не может быть использован. При запуске в стандартном режиме никакие файлы конфигурации не используются, работа интерпретатора идет в POSIX режиме.

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

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

$ echo $SHELL
/bin/bash

В этом примере используется интерпретатор командной строки bash. Существует множество других командных интерпретаторов. Для активизации другого интерпретатора можно ввести его имя в командной строке (ksh, tcsh, csh, sh, bash и т.д.).

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

Проверка доступности интересующего интерпретатора командной строки

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

Существует несколько причин для выбора альтернативных командных интерпретаторов.

  • Привычка работать в системах UNIX System V (во многих из них по умолчанию применяются интерпретатор ksh) или в системах компании Sun Microsystems и других системах на базе Berkeley UNIX (в них часто используется csh). В таком случае применение этих интерпретаторов командной строки окажется более удобным.
  • Необходимость запуска сценариев, которые создавались для определенного командного интерпретатора.
  • Возможности альтернативного командного интерпретатора могут оказаться более предпочтительными. Например, один из членов группы пользователей Linux предпочитает применять ksh, так как его не устраивает способ создания псевдонимов в bash.

Хотя большинство пользователей предпочитает работать в одном командном интерпретаторе, полученные навыки помогают научиться работать и в других интерпретаторах командной строки , изредка заглядывая в справочное руководство (например, с помощью команды manbash). Большинство используют bash, так как нет причин переходить на другой интерпретатор.

Использование Bash и ch

Название bash является аббревиатурой от Bourne Again SHell. Эта аббревиатура указывает на то, что bash наследует интерпретатор Bourneshell (команда sh), созданный Стивом Борном (Steve Bourne) из AT&TBell Labs. Брайан Фокс (Brian Fox) из Free Software Foundation создал bash в составе проекта GNU. В дальнейшем разработка перешла в руки Чета Рами (Chet Ramey) в Case Western Reserve University.

Интерпретатор bash содержит возможности, которые разрабатывались для интерпретаторов sh и ksh во времена ранних версий UNIX, а также ряд возможностей интерпретатора csh.

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

Большинство примеров в этой статье рассчитано на использование bash.

Интерпретатор bash может запускаться в различных режимах совместимости, имитируя поведение других командных интерпретаторов. Он может имитировать поведение Bourne shell (sh) или командного интерпретатора, совместимого со стандартами POSK (bash — posix).

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

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

Использование tcsh (и более раннего интерпретатора csh)

Командный интерпретатор tcsh является реализацией интерпретатора Сshell (csh) с открытым исходным кодом. Интерпретатор csh был создан Биллом Джоем (Bill Joy) и используется по умолчанию практически во всех системах Berkeley UNIX (такие системы распространялись компанией Sun Microsystems).

Многие возможности csh, например редактирование командной строки и методы управления историей команд, были реализованы в интерпретаторе tcsh и в других командных интерпретаторах. Так же как команда sh запускает интерпретатор bash в режиме совместимости с интерпретатором sh, команда csh запускает интерпретатор tcsh в режиме совместимости с интерпретатором csh.

Использование интерпретатора ash

Интерпретатор ash является облегченной версией интерпретатора Berkeley UNIX sh. Он не содержит многих базовых функций и не предоставляет таких возможностей, как история команд.

Интерпретатор ash хорошо подходит для применения во встраиваемых системах с ограниченными системными ресурсами. В операционной системе FedoraCore 4 интерпретатор ash на порядок меньше интерпретатора bash.

Использование zsh

Интерпретатор zsh является еще одним клоном интерпретатора sh. Он соответствует требованиям стандарта POSIX (как и bash), но обладает другими возможностями, включая проверку орфографии и иной подход к редактированию командной строки. Интерпретатор zsh использовался по умолчанию в первых операционных системах MacOS X, но в современных системах по умолчанию применяется интерпретатор bash.

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

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

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

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

ПО КУРСУ:

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

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

Москва, 2007

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

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

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

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

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

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

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

КОЗЛОВ А.В.

МОСКВА 2007

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

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

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

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

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

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

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

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

$ date

Fri Jun 8 15:42:35 MSD 2007

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

$ cal

July 2007

Su Mo Tu We Th Fr Sa

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

29 30 31

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

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

$ ls -l

total 28

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

$ ls -al

total 40

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

$ ls -l gauss.plx

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

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

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

$ mkdir new

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

$ mkdir -p 1/2/3

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

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

$ cat > new _ file

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

$ cat new _ file

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

$ ls -l | tee -a r

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

$ cp gauss . plx 1

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

$ cp gauss . plx / home / alex

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

$ cp -i gauss.plx /home/alex

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

$ cp - R laba 2 ..

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

$ mv –i gauss.plx gauss2.plx

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

rm –i gauss2.plx

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

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

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

Назначение

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

"команда"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$ ls

docl doc2 document docs mydoc monday tuesday

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

$ ls doc*

docl doc2 document docs

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

$ ls *day

monday t uesday

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

$ ls [ mt ] * d *

monday tuesday

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

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

rm *

$ ls *day

docl doc2 docs

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

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

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

Таким образом, командный интерпретатор - это программа, имеющая свои собственные встроенные команды (built-in commands), свое собственное переменное окружение (environment), а также позволяющая выполнять внешние команды, которые присутствуют в системе.

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

Linux является Unix-подобной ОС. Первоначально ОС Linux была разработана Линусом Торвальдсом (Linus Torvalds) в Университете Хельсинки (Финляндия) на основе ОС Minix - маленькая UNIX-система, созданная Andry Tanenbaum. Раннее развитие Linux прежде всего было связано с проблемой переключения задач в защищенном режиме для 80386. И Линус "стал серьезно обдумывать маниакальную идею, как сделать Minix лучше себя самого".

Командная оболочка в UNIX-системах уже существовала, это была оболочка "Bourne shell"(shell Баурна или просто shell). Немного позднее в UNIX-системах разработали оболочку C shell, которая использует иной синтаксис, чем-то напоминающий синтаксис языка программирования Си.

Для Linux разработано много командных интерпретаторов. Основной, используемой по умолчанию является "Bash", разработанная на основе shell и называемая "Новый Shell Баурна" (Bourne Again Shell). Таким образом, Bash - это развитие прежнего shell с добавлением многих полезных возможностей, частично содержащихся в C shell. Поскольку Bash можно рассматривать как надмножество синтаксиса прежнего shell, любая программа, написанная на добром старом shell Баурна должна работать и в Bash.

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

Ядро Linux не использует коды UNIX или какого-либо другого частного источника, и большинство программ Linux разработаны в рамках проекта GNU из Free Software Foundation в Cambridge, Massachusetts. Но в него внесли лепту также программисты всего мира.

Вот наиболее распространенные командные оболочи Linux:

  • Bourne shell - оболочка Борна, стандарт для многих UNIX-подобных систем;
  • bash - Bourne Again shell, «новая оболочка Борна» (используется по умолчанию в Linux);
  • csh - С shell, оболочка Си: синтаксис ее командного языка похож на синтаксис языка С;
  • tcsh - tiny С shell, минимальная оболочка Си;
  • pdksh - public domain Korn shell, общедоступная оболочка Корна;
  • sash - stand-alone shell, автономная оболочка, может быть использована в случае, когда программные библиотеки недоступны.

Список всех установленных в системе программ-оболочек находится в файле /etc/shells .

Начальная оболочка для каждого пользователя, запускаемая для него при регистрации в системе, указывается в файле /etc/passwd . Это может быть не обязательно bash. Администратор может вообще определенным пользователям запретить вход в систему, указав в качестве "оболочки", загружаемой после регистрации, /sbin/nologin. Или вообще указать специально разработанный скрипт, позволяющий просматривать тоги журналы (логи), например.

Для редактирования файла /etc/passwd в Linux существует специальная команда vipw , которая проверяет правильность редактирования (команда доступна только администратору).

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

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

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

2. Разбор командной строки, избранные функции bash

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

  1. Раскрывает псевдонимы (alias) для быстрого вызова наиболее употребительных команд.
  2. Раскрывает метасимволы или группрвые симовлы (*, ?, [, ], ~, {, }) для поиска файлов по шаблонам имен.
  3. Подставляет переменные, которые может использовать командный процессор.
  4. Перенаправляет выходные данные одной команды в качестве входных данны для другой команды, используя конвейер (pipe).
  5. Выполняет объединение команд.
  6. Выполняет команду, если она - встроенная команда интерпретатора, или запускает процесс, если команда внешняя.
  7. Перенаправляет стандартный ввод/вывод.

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

2.1. Псевдонимы

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

Например:

$ export HELLO="Hello from environment! " # пробел нужно экранировать кавычками

Переменные окружения

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

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

Таким образом, командный интерпретатор определяет переменные окружения, которые используются в текущем сеансе. Каждая новая введенная команда фактически запускается как дочерний процесс родительского процесса, в качестве которого, в данном случае выступает командный интерпретатор bash. Переменные окружения отличаются от обычных переменных тем, что они доступны как для родительских, так и для дочерних процессов. Автоматическое определение переменных окружение происходит после аутентификации пользователя в системе. Программа login, в случае успешного завершения процесса аутентификации, на основе файла /etc/passwd определяет какой командный интерпретатор будет использоваться в сеансе данного пользователя. После определения командного интерпретатора происходит настройка сеанса согласно конфигурационным файлам, представленным ниже.

Конфигурационный файл Описание
/etc/profile

Определяет переменные окружения для всех пользователей системы. Данный файл выполняется при первом входе в систему и содержит основные переменные окружения, такие как, переменная поиска расположения команд PATH, переменная имени хоста HOSTNAME, переменная, определяющая размер истории команд HISTSIZE. Кроме того данный файл генерирует дополнительные переменные окружения из конфигурационных файлов, находящихся в каталоге /etc/profile.d .

/etc/bashrc

Выполняется для всех пользователей, при каждом запуске командного интерпретатора bash. В данном файле определяется значение переменной PS1, а также дополнительные псевдопимы команд (alias). Псевдонимом называется сокращенное произвольно заданное название команды или последовательности команд, позволяющее выполнять сложные последовательности команд, не вводя их с клавиатуры, а вызывая их через обращение к соответствующему псевдониму. Переменные, определенные в данном файле могут«быть переназначены аналогичным пользовательским файлом -/.bashrc, который имеет более высокий приоритет.

-/.bashprofile

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

~/.bashrc

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

~/.bash_logout

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

/etc/inputrc

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

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

export AB=/usr/dog/contagious/ringbearer/grind

В данном примере временной переменной окружения AB присваивается путь к каталогу, расположенному достаточно "глубоко" в иерархии каталогов файловой системы. Команда export указывает на необходимость экспорта значения переменной АВ в оболочку, для того чтобы сделать его доступным для других оболочек, которые могут быть открыты в пределах текущего сеанса работы с системой. Теперь к указанному выше каталогу можно добраться посредством выполнения команды cd $AB

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

Для изменения конфигурационных файлов /etc/profile и /etc/bashrc необходимо быть суперпользователем root.

Обычные пользователи могут изменять конфигурационные файлы ~/.bash_profile, ~/.bashrc и ~/.bash_Iogout, находящихся в их домашних каталогах. В эти конфигурационные файлы можно включить установку своих переменных в окружение с помощью команды export и использовать их в любом сеансе.

Одной из наиболее часто изменяемых переменных окружения является переменная PATH. Можно также переопределить или дополнить переменную окружения PATH в конфигурационном файле ~/.bashrc.

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

Чтобы данные изменения применились в окружении текущей оболочки необходимо выполнить команду source .bashrc

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

  • BASH - Содержит полный путь к команде bash (как правило, значение этой переменной равно /bin/bash).
  • BASH_VERSION - Номер версии bash.
  • DIRSTACK- Массив, содержащий текущее значение стека каталога.
  • EDITOR - текстовый редактор по умолчанию.
  • EUID - Числовой эффективный идентификатор текущего пользователя.
  • FUNCNAME - имя текущей функции в скрипте.
  • GROUPS - Массив, содержащий список групп, к которым принадлежит текущий пользователь.
  • HISTFILE - Местоположение файла истории команд. Как правило, история команд хранится в файле ~/.bash_history.
  • HISTFILESIZE - Число командных строк, которые могут храниться в файле истории. После достижения этого числа новые командные строки заносятся в историю за счет удаления наиболее ранних командных строк. По умолчанию размер списка недавно использовавшихся команд равен 1000 строк.
  • HOME - Домашний каталог пользователя.
  • HOSTNAME - Имя данного компьютера (узла).
  • HOSTTYPE - Тип компьютера.
  • LANG - Текущий используемый по умолчанию язык.
  • LC_CTYPE - внутренняя переменная, котороя определяет кодировку символов.
  • MAIL - Местоположения файла ящика электронной почты пользователя. Как правило, это файл, расположенный в каталоге /var/spool/mail, имя которого совпадает с регистрационным именем пользователя.
  • MAILCHECK - Интервал в минутах между проверками почты.
  • OLDPWD - Каталог, который являлся текущим до момента последнего изменения каталога.
  • OSTYPE - Текущая операционная система.
  • PATH - Разделенный символами двоеточия список каталогов, в которых производится поиск исполняемых файлов. Крайне важен порядок ледования имен каталогов. При выполнении команд перечисленные в этой переменной каталоги проверяются последовательно слева направо. Т.о., при выполнении команды foo, расположенной в каталогах /bin и /usr/bin, будет выполнена команда, расположенная в каталоге /bin. Для того чтобы в аналогичной ситуации была выполнена команда foo, расположенная в каталоге /usr/bin, следует либо указать полный путь к этой команде, либо изменить порядок следования имен каталогов в переменной окружения PATH. Текущий каталог поиска должен быть задан явно ("."), оболочка не производит поиск в текущем каталоге по умолчанию. Поиск запускаемых программ в текущем каталоге таит потенциальную опасность вследствие возможности непреднамеренного выполнения опасной программы, поэтому переменная PATH обычно инициализируется без "." Для того, чтобы добавить к переменной PATH путь к своим собственным командам или сценариям оболочки, их следует разместить в подкаталоге /bin домашнего каталога, который будет автоматически занесен в переменную PATH. Не все исполняемые команды расположены в каталогах, перечисленных в переменной окружения PATH. Некоторые команды встроены непосредственно в оболочку. Другие команды могут быть переопределены с помощью псевдонимов, позволяющих заменить команды с параметрами практически любой сложности (с точки зрения синтаксиса) одним простым именем. Помимо этого, существует возможность создания функций, хранящих в себе целую последовательность команд.
  • PPID - Идентификационный номер процесса, соответствующего команде, в результате выполнения которой была запущена текущая оболочка(например, процесс, породивший оболочку).
  • PS1, PS2, PS3, PS4 - Переменные, определяющие вид приглашения оболочки.

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

    Вторичное приглашение (PS2) появляется, если вы нажали клавишу Enter, синтаксически не закончив ввод команды.

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

    PS3. Данная переменная содержит приглашение, присутствующее в операторе select, используемой для организации интерактивных консольных меню. По умолчанию приглашению PS3 в операторе select соответствует значение #?.

    PS4. Данная переменная используется в основном при отладке сценариев командного интерпретатора и по умолчанию содержит строковое значение «++».

    Например, запуск команды получения информации DNS:

    # nslookup >

  • PWD - Текущий рабочий каталог пользователя. Это значение изменяется каждый раз при переходе в другой каталог с помощью команды cd.
  • SECONDS - время работы скрипта(в сек.).
  • SHELL - Текущий интерпретатор команд.
  • SHELLOPTS - Список включенных параметров интерпретатора.
  • SHLVL - Число запусков новых копий интерпретатора команд.
  • UID - Числовой идентификатор текущего пользователя.
  • USER - Имя текущего пользователя.
  • $# - Общее количество параметров переданных скрипту.
  • $* - Все аргументы переданыне скрипту(выводятся в строку).
  • $@ - Тоже самое, что и предыдущий, но параметры выводятся в столбик.
  • $! - PID последнего запущенного в фоне процесса.
  • $$ - PID самого скрипта.

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

Удалить переменную можно командой unset .

2.4. Подстановки и организация взаимодействия между командами

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

Подстановка результата вычисления арифметического выражения

Существуют две синтаксические формы подстановки результата вычисления арифметического выражения: $[выражение] и $((выражение)). Например,

echo "I am $ years old."

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

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

Раскрытие символа тильды

Символ тильды (~) позволяет быстро вводить названия каталогов.

~ Имя домашнего каталога пользователя ~/подкаталог Имя одного из подкаталогов в домашнем каталоге пользователя ~+ Имя текущего каталога ~- Имя предыдущего каталога

Раскрытие фигурных скобок

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

mkdir expenses/{Jan,Feb,Mar} эквивалентна mkdir expenses/Jan mkdir expenses/Feb mkdir expenses/Mar

Каналы

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

cat /etc/passwd | sort | head -3

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

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

команда1;команда2 Выполнить сначала команду 1, затем команду 2 (команда1;команда2) Запустить отдельную копию интерпретатора, в которой выполнить последовательно команды 1 и 2 { команда1;команда2 } Выполнить команды 1 и 2 последовательно в текущем интерпретаторе команда1 && команда2 Выполнить команду 2 только в случае успешного выполнения команды 1 команда1 || команда2 Выполнить команду 2 только в случае неуспешного выполнения команды 1

Результатом выполнения любой команды (т.е. результатом завершения соответствующего процесса) является код завершения. Успешное завершение имеет код 0, неуспешное 1. Значение кода завершения присваивается предопределенной переменной? (знак вопроса). Например, echo $?

Повторное выполнение команд

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

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

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

Синтаксис раскрытия истории: !n Выполнить команду с заданным номером!! Выполнить предыдущую команду!строка Выполнить самую последнюю из команд, начинающихся с заданной строки!?строка? Выполнить самую последнюю из команд, содержащих заданную строку

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

3. Встроенные команды bash

Список встроенных команд оболочки bash можно получить по команде help или найти на man-странице в секции SHELL BUILTIN COMMANDS.

Вот несколько полезных встроенных команд:

  • echo [аргументы] - Вывод аргументов на экран.
  • enable - Заставляет оболочку вместо встроенной команды выполнить исполняемый файл с таким же именем. Полезно, если у вас есть собственный сценарий по имени, например, echo.
  • eval [аргументы] - Конструирование команды на лету, из указанных аргументов, и отправка ее на выполнение.
  • let - Вычисление выражений.
  • - Прочитать и выполнить команды, содержащиеся в файле. Применяется для определения пользовательских переменных. и функций.
  • basename - Выделение локального имени.
  • expr - Вычисление выражения.
  • read - Ввод значения переменной.
  • shift - Сдвиг списка параметров.
  • test - Проверка условия.
Другие встроенные команды служат инструкциями командного языка bash.

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