Bash. Начало использования.
Основы работы с Linux. -> Bash. Начало использования. Ввод-вывод.
Bash.
Пройдя этот курс вы научитесь грамотно использовать сложные команды Linux и оболочку bash, чтобы улучшить свои навыки,с которыми вы сможете быстро создавать и моделировать сложные функции с помощью лишь одной строки конвейерных команд.
Интерфейс командной строки компьютера предоставляет вам тесную связь с операционной системой (ОС). «Командная строка» — это общий термин, относящийся к средствам, передающим команды в интерактивную систему компьютера. Командная строка содержит огромное количество функций, отточенных и отшлифованных за десятилетия использования. Командная строка появилась с первыми операционными системами, и ею пользовались, пока не был создан GUI.
Командная оболочка - это специальная программа, назначение которой — управление операционной системой с помощью текстовых команд, вводимых в окне приложения (интерфейсе командной строки) без применения графического пользовательского интерфейса (GUI) и встроенных вкладок.
Интерфейс командной строки дает возможность написания скриптов (сценариев, script).
Почему Bash?
Оболочка bash существует уже несколько десятилетий, доступна почти в каждой версии Linux и даже появилась в Windows.
Простой пример команды вывода пути текущего каталога.
ls -l
Обратите внимание: в примере с результатом присутствует символ $ . Символ $ , ко- торый вы видите в начале команды, не является частью этой команды, а показывает простой фрагмент командной строки оболочки. Это позволит вам различать команду (в том виде, в каком ее надо ввести) и ее результат в терминале.
Запуск 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
Вывести содержимое
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
Существуют и другие слова, которые выглядят как команды, но на самом деле являются частью языка оболочки, например 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