Unix shell является довольно мощным инструментом для разработчиков всех видов. Эта статья призвана дать краткое введение в самые основы, начиная с операционной системы UNIX.
Большинство современных операционных систем, за исключением WINDOWS, построены на базе UNIX. Среди них много дистрибутивов Linux, macOS, iOS, Android и др. Достаточно одного взгляда на схему развития операционных систем, основанных на UNIX, чтобы подчеркнуть важность UNIX, и именно по этой причине она стала широко использоваться на производстве. На самом деле, бэк-энд многих вычислительных систем, включая такие промышленные гиганты, как Facebook и Google, в значительной степени используют UNIX.
Shell
Shell — это интерфейс командной строки для запуска программ на компьютере. Пользователь набирает в строке запроса кучу команд, оболочка запускает программы для пользователя, а затем выводит результат. Команды могут быть либо введены непосредственно пользователем, либо прочитаны из файла, называемого shell-скриптом или shell-программой.

Shell. Какие бывают
UNIX-система обычно предлагает различные типы оболочек shell. Некоторые из них наиболее распространены:
Однако в этой статье мы ограничимся оболочкой Bash. Тем не менее, вам рекомендуется прочитать и попробовать другие оболочки, особенно zsh, так как уже в версии MacOS под названием Catalina zsh заменил оболочку bash. Так что будет хорошей идеей познакомиться с ним сейчас.
Terminal
Терминал — это программа, которая используется для взаимодействия с оболочкой. Это просто интерфейс к оболочке и к другим программам командной строки, которые запускаются внутри нее. Это похоже на то, как веб-браузер является интерфейсом для веб-сайтов. Вот как выглядит типичный терминал в Mac:

У Mac и Linux есть соответствующие версии терминала. Windows также имеет встроенную командную оболочку, но она основана на командной строке MS-DOS, а не на UNIX. Так что давайте посмотрим, как мы можем установить шелл и программу терминала в операционной системе Windows, которая работает так же, как и в системах Mac и Linux.
Установка терминала в WINDOWS
- Подсистема Windows для Linux (WSL)
Это новая система совместимости с Linux в Windows 10. WSL позволяет разработчикам запускать GNU/Linux окружение — включая большинство инструментов командной строки, утилит и приложений — прямо под Windows, без изменений, без дополнительных виртуальных машин. Подробнее о его установке и функциях вы можете прочитать здесь.
- Git Bash

Git Bash — это то, что мы будем использовать в этой статье. Скачайте Git на компьютер с Windows отсюда и установите его со всеми настройками по умолчанию. В конце концов, вы получите окно терминала, вроде того, что показано ниже.
Изучение терминала
Всякий раз, когда мы открываем окно терминала, мы видим наши последние учетные данные для входа и приглашение Shell. Строка shell появляется всякий раз, когда оболочка готова принять входные данные. Она может немного отличаться в зависимости от дистрибутива, но в основном она отображается как имяпользователя@имякомпьютера, за которым следует знак $.
Если вам не нужна вся эта информация, вы можете использовать PS1 для настройки командной строки.
Теперь терминал будет показывать только $ в строке. Однако это только временно и после перезапуска терминал вернется к своим первоначальным настройкам.

Приступим
Чтобы немного развлечься, давайте начнем с нескольких простых команд:
- echo: выводит все, что вы набираете в командной строке шелла, аналогично Print на Python.
- date: отображает текущие время и дату.
- cal: отображает календарь на текущий месяц.

- clear: очистит окно терминала, также можно использовать сочетание клавиш Ctrl-L.
Разбираемся с файлами /etc/profile и /etc/bashrc
Павел Соловьёв Full Stack Developer #администрирование 10 сентября, 2015 363
Недавно я столкнулся со следующей проблемой: приложение не сохраняло настройку umask, заданную в профиле root-пользователя, или в файле /etc/profile. Немного разобравшись в вопросе, я понял, что приложение использует только ту настройку umask, которая задана в /etc/bashrc, не принимая даже те значения, которые являются его же собственными сценариями запуска.
Немного изучив вопрос, я понял, какую функцию выполняют эти файлы, чем они различаются и как они выполняются. Такой вопрос поднимается не часто, поэтому я подумал, что будет полезно рассказать о нем вам.
Для чего нужен файл /etc/profile?
Если вы используете Linux, то вам наверняка знакомы файлы .profile или .bash_profile, размещенные в вашем домашнем каталоге. Эти файлы используются для задания элементов окружения для оболочки пользователя. Таких элементов, как, например, umask, и таких переменных, как PS1 или PATH.
Файл /etc/profile не очень-то отличается от этих файлов. Он используется для задания общесистемных переменных окружения в оболочках пользователя. Иногда это те же переменные, что и в .bash_profile, но этот файл используется для задания первоначальных PATH или PS1 для всех пользователей оболочек системы.
/etc/profile.d
Помимо задания элементов окружения, файл /etc/profile выполняет сценарии внутри /etc/profile.d/*.sh. Если вы хотите задать свои собственные переменные окружения для всей системы, вам следует поместить свою конфигурацию в сценарий оболочки в /etc/profile.d.
Для чего нужен файл /etc/bashrc?
Помимо .bash_profile, в своем домашнем каталоге вы также часто будете встречать файл .bashrc. Этот файл предназначен для задания псевдонимов команд и функций, используемых пользователями оболочки bash.
Аналогично тому, как /etc/profile является общесистемной версией .bash_profile, файл /etc/bashrc в Red Hat и файл /etc/ в Ubuntu являются общесистемной версией .bashrc.
Стоит отметить, что в Red Hat реализация /etc/bashrc также выполняет сценариий оболочки в /etc/profile.d, но только если пользовательская оболочка является Интерактивной оболочкой (т.е. Login Shell (стартовой оболочкой))
Когда используются эти файлы?
То, когда выполняется каждый из этих файлов, зависит от типа выполняемого логина. В Linux имеется два типа стартовых оболочек (login shells) — Интерактивные оболочки и Неинтерактивные оболочки. Интерактивная оболочка используется, когда пользователь может взаимодействовать с оболочкой, т.е., например, типичное приглашение командной строки bash. Неинтерактивная оболочка используется, когда пользователь не может взаимодействовать с оболочкой, т.е. выполнение bash-сценариев.
Разница проста: файл /etc/profile выполняется только для интерактивных оболочек, а файл /etc/bashrc – как для интерактивных, так и для неинтерактивных. Вообще-то, в Ubuntu файл /etc/profile вызывает файл /etc/bashrc напрямую.
Интерактивная оболочка и неинтерактивная оболочка: Сравнение
Чтобы на примере сравнить интерактивную и неинтерактивную оболочки, я добавлю переменную в оба файла /etc/profile и /etc/ в своей Ubuntu.
/etc/profile
grep TEST /etc/profile export TESTPROFILE=1
/etc/
grep TEST /etc/ export TESTBASHRC=1 Интерактивная оболочка
Ниже приведен пример интерактивной оболочки. В этом случае были выполнены оба файла /etc/profile и /etc/
su — env | grep TEST TESTBASHRC=1 TESTPROFILE=1 Неинтерактивная оболочка
В этом примере мы выполняем команду через оболочку SSH, которая является неинтерактивной; поскольку это неинтерактивная оболочка, выполняется только файл /etc/
# ssh localhost «env | grep TEST» [email protected]’s password: TESTBASHRC=1 Заключение
В моем случае приложение не признает значение umask, заданное в файле /etc/profile, но признает значение в файле /etc/bashrc. Это говорит о том, что подпроцесс начинается как неинтерактивная оболочка. Поскольку предлагаемый способ изменения переменных окружения заключается в добавлении сценария оболочки в /etc/profile.d, в моем случае лучше задать значение umask в файле /etc/bashrc.
bash
- Проверка существования файла Bash | Losst
- Проверка существования файла Bash | Losst
- Проверка существования файла Bash | Losst
- Проверка существования файла Bash | Losst
- Bash Shell
Linux, bash. Однострочники
Собственно, начало пары.
|, &&, ||
Уже разбирали. Повторяем.
| — перенаправление вывода одной команды на вход другой. Пример:
man bash | less
|| — ленивое логическое «или». Используется для выполнения операции, если предыдущая завершилась с ошибкой:
cd /root || echo Доступ запрещён
&& — ленивое логическое «и». Используется для выполнения операции, если предыдущая завершилась успешно:
cd $HOME && echo Чуи, мы дома!
cat, head, tail, grep
cat — конкатенация содержимого файлов и вывод:
cat ~/.bash* | less
head — вывести начало файла (по умолчанию 10 строк):
head /etc/passwd
tail — вывести конец файла (по умолчанию 10 строк):
tail /var/log/syslog
— полезно для чтения логов — там как раз последнее — самое интересное. Также часто используется:
tail -f /var/log/syslog
— выводить по мере поступления новых строк в файл.
grep — великая утилита для фильтрации входного потока:
cat /etc/passwd | grep root grep root /etc/passwd # есть вариант указать в аргументах файлы
ДЗ: пишем anti-head-tail — 2 аргумента: с какой по какую строку отправлять на вывод. +5 баллов в карму.
xargs
Отдельная заметка про xargs.
Если коротко:
ls | xargs file # передать спиок вывода ls аргументом утилите file.
# Склеить строки echo «a b c» | xargs a b c
regexp
Oh, shi~~
Короче, есть главная проблема программирования — «придумать название переменной».
За ней ровным строем идут регулярные выражения/грамматики, инвалидация кеша и реляционная алгебра.
Я вам не скажу за главную проблему, но за регулярные выражения немного поясню.
Мы уже встречались с прекрасными подстановками типа * и, например, *.txt. Видели забавные mkdir -p ./test/{a,s,d/{q,w,e}}, но что, если я скажу, что подобным образом можно искать?!
Как-то мы уже использовали grep для поиска подстроки в строке:
grep roo /etc/passwd
— ищем «roo» в файле passwd. Но это не так круто, как искать по шаблону!
grep ‘^root:’ /etc/passwd
— находим запись пользователя root.
Отмечу, что в каком-то виде regexp (regular expressions) есть практически во всех языках программирования, поэтому мозголомка ниже будет полезна. Понимание regexp сродни пониманию сложения — рассказывать об этом также сложно, ибо уже не помнишь, в чём проблемы восприятия (поэтому жду вопросов).
Регулярные выражения содержат 3 базовых возможности:
-
Конкатенация (вспоминаем cat) — два выражения могут идти одно за другим. Полученное большое выражение будет соответствовать входной строке тогда и только тогда, когда часть входа, соответствующая первому маленькому выражению, сразу же следует за частью, которая соответствует второму маленькому выражению.
ab
-
Объединение (операция or / ||) — большое выражение соответствует строке, соответствуйщей одному из маленьких выражений, содержащихся в нём.
a|b
-
Замыкание — маленькое выражение может быть «повторено» ноль или более раз, чтобы соответствовать входу.
a*
Примеры регулярных выражений
Конкатенация трёх выражений «f», «oo|ee», «t». Само же выражение «oo|ee» — объединение выражений «oo» и «ee»:
f(oo|ee)t # соответствуют foot или feet
Закрытие/замыкание/кложура и тд:
a+ # соответствует «a» один или более раз a* # соответствует «a» 0 или более раз a? # соответствует «a» 0 или 1 раз a{2,5} # сооветствует от 2 до 5 раз «a» a{2} # 2 раза a{2,} # от 2 раз a{,5} # до 5 раз
Делаем одно и то же разными способами:
a(0|1|2|3|4|5|6|7|8|9) # соотвествует a0, a1 … a9 a[0-9] # то же самое, что и a(0|1|2|3|4|5|6|7|8|9), но используя класс символов a[[:digit:]] # то же самое, что выше, но с альтернативным синтаксисом a\\d # то же самое, но через «сокращённое написание»
Полезно знать:
^ # символ начала строки $ # символ конца строки (не путать с \n — переводом строки) . # любой символ
Помните [[:digit:]]? Такого много:
[:alnum:] [:cntrl:] [:lower:] [:space:] [:alpha:] [:digit:] [:print:] [:upper:] [:blank:] [:graph:] [:punct:] [:xdigit:]
С чем это едят:
[[ «sad day» =~ (sad|happy) ]] && echo «Что-то о настроении» grep ‘^root:’ /etc/passwd # запись пользователя root awk ‘/false$/ {print $0}’ /etc/passwd # найти всех, кто логинится в false cat /etc/passwd | sed ‘/ *#/d; /^ *$/d’ # убрали комментарии из /etc/passwd и вывели
И это только базовое. Советую читать PCRE для понимания всего ужаса используемых в реальной жизни регулярок.
Использование ()
Модуль Pathlib в Python предоставляет различные классы, представляющие пути файловой системы с семантикой, подходящей для разных операционных систем. Этот модуль входит в стандартные служебные модули Python. Path classes путей в модуле Pathlib делятся на чистые и конкретные пути . Чистые пути обеспечивают только вычислительные операции, но не обеспечивают операции ввода / вывода, в то время как конкретные пути наследуются от чистых путей, обеспечивают как вычислительные, так и операции ввода / вывода.
Примечание. Чтобы узнать больше о модуле pathlib, нажмите здесь .
() method метода () method используется для проверки, указывает ли данный путь на существующий файл или каталог или нет.
Syntax: (path)
Parameter:path: A path-like object representing a file system path.
Return Type: This method returns a Boolean value of class bool. This method returns True if path exists otherwise returns False.
Пример:
# Класс импорта пути from pathlib import Path # Путь path = ‘/home/gfg/Desktop’ # Создание класса Path
obj = Path(path) # Проверьте, указывает ли путь на # существующий файл или каталог print(()) Выход: True Рекомендуемые посты:
Python — Проверьте, существует ли файл или каталог (0%) votes SSH-подключениеSSH позволяет безопасно передавать данные в незащищенной среде по шифрованному каналу. Он применяется для удаленного подключения к серверу и запуска приложений.
|