Bash. Начало использования.

Основы работы с Linux. -> Bash. Начало использования. Ввод-вывод.

Bash.

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

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

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

Интерфейс командной строки дает возможность написания скриптов (сценариев, script).

Почему Bash?

Оболочка bash существует уже несколько десятилетий, доступна почти в каждой версии Linux и даже появилась в Windows.

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

ls -l

start page

Обратите внимание: в примере с результатом присутствует символ $ . Символ $ , ко- торый вы видите в начале команды, не является частью этой команды, а показывает простой фрагмент командной строки оболочки. Это позволит вам различать команду (в том виде, в каком ее надо ввести) и ее результат в терминале.

Запуск Linux и bash в Windows позволяют Git Bash Cygwin

Одна из базовых операций bash — исполнение команды, то есть запуск связанной с этой командой программы. Когда вы ввели несколько слов в командную строку, bash предполагает, что первое слово — это название программы, которую нужно запустить, а остальные слова — аргументы команды. Например, чтобы bash запустила команду под названием mkdir и передала ей два аргумента, -p и /tmp/scratch/ garble , нужно ввести следующее:

mkdir -p /tmp/scratch/garble

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

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

Команды, аргументы, встроенные функции и ключевые слова

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

Файлы — это исполняемые приложения, которые становятся результатом компи- ляции и теперь состоят из машинных команд. Примером подобного приложения служит программа ls . В большинстве файловых систем Linux этот файл находится в каталоге /bin/ls .

Посмотреть где находится файл команды

whereis ls

start page

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

cat /bin/ls

Другой тип файла — это скрипт. Это текстовый файл, который может прочесть человек. Скрипт пишется на одном из языков, поддерживаемых вашей системой, с помощью интерпретатора (программы) для этого языка. Примерами языков для написания скриптов могут служить bash, Python и Perl.

Когда мы пишем скрипты для командной строки то начинаем с указания интерпретатора для ОС.

#!/bin/bash

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

#!/usr/bin/env bash

или для питона

#!/usr/bin/env python

Здесь, чтобы найти местонахождение bash, используется команда env .

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

Просмотр типа команды

type pwd
type find

start page

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

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

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

Стандартные ввод/вывод/ошибка

На жаргоне специалистов по операционным системам запущенная программа называется процессом. Каждый процесс в среде Unix/Linux/POSIX (и, следовательно, в Windows) обладает тремя различными файловыми дескрипторами. Дескрипторам присвоены следующие названия: стандартный ввод (сокращенно stdin), стандартный вывод (stdout) и стандартная ошибка (stderr).

Программист решает, отправить результат в stdout или stderr.

Перенаправление и конвейер

Одной из главнейших инноваций оболочки было то, что она предоставила нам механизм, с помощью которого можно было взять запущенную программу и поменять место ввода и/или вывода, не изменяя саму программу. Если у вас есть программа под названием handywork , читающая ввод из stdin и записывающая результаты в stdout, вы легко можете это изменить.

Простая программа чтения ввода с клавиатуры hello.sh.

#!/bin/sh
read name
echo "Welcome" "$name"

Вводим данные из файла и выводим в файл.

hello.sh < data.in > results.out

А что делать с stderr? Синтаксис в данном случае схож. При перенаправлении данных, выводимых программой, нужно различать stdout и stderr, и мы создаем это различие с помощью номеров файловых дескрипторов.

Stdin — это файловый дескриптор 0,

stdout — файловый дескриптор 1,

stderr — файловый дескриптор 2.

Таким образом, мы можем перенаправить сообщения об ошибках:

hello.sh 2> err.msgs

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

hello.sh < data.in > results.out 2> err.msgs

Можно обьединить ошибки с результатом.

hello.sh < data.in > results.out 2>&1

Сокращенная форма.

hello.sh < data.in &> results.out

Чтобы видеть результаты в командной строке и одновременно перенаправлять их в файл, используйте команду tee . Следующий пример выводит результаты выполнения команды handywork на экран и в то же время сохраняет их в файл results.out :

hello.sh | tee results.out

Символ | известен как «пайп» (pipe). Указав его, можно использовать результаты одной команды в качестве исходных данных для другой.

При перенаправлении результата с использованием символа > файл будет создан или обрезан (то есть из файла будет удалено содержимое). Если вы хотите заранее сохранить имеющееся содержимое данного файла, вам следует его дополнить, ис- пользуя символ >>

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

Пингуем сервер.

ping 8.8.8.8 > log.txt &

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

Основы работы с Linux. -> Bash. Работа со строками. Команды tail head join wc sort sed.

Bash. Работа со строками. Команды tail head join wc sort sed.

head tail

Показывают начальные и конечные строки файлов

head -4 /etc/passwd

tail -4 /etc/passwd

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

Команда join обьеденяет поля ф файлах.

//displaying the contents of file1.txt//
$cat file1.txt
1 AAYUSH
2 APAAR
3 HEMANT
4 KARTIK
5 DEEPAK

//displaying contents of file2.txt//
$cat file2.txt
1 101
2 102
3 103
4 104

//using join command//
$join file1.txt file2.txt
1 AAYUSH 101
2 APAAR 102
3 HEMANT 103
4 KARTIK 104