Bash в windows терминал

Введение

Если Вам нужно настроить PATH в Linux – перейдите

сюда

Содержание
Введение
Для чего используется
Пример
Добавить в PATH из PowerShell
Добавить в PATH из UI
Изучить содержимое PATH
Ошибки
Postgesql
Похожие статьи

Функция bin() конвертирует заданное целое число в его двоичное представление и возвращает его.

# Конвертируем 15 в двоичный формат

‘The binary equivalent of 15 is’

The binary equivalent of 15 is 0b1111

Файл BIN — это исполняемый файл в операционных системах на базе Unix, таких как Linux или FreeBSD. Он содержит скомпилированную программу, состоящую из двоичного кода, полученного из исходного кода, что делает ее совместимой с базовой архитектурой системы. Исполняемые файлы BIN Unix можно сравнить с файлами .EXE Windows и файлами .APP macOS с точки зрения их роли исполняемых форматов.

В области разработки программного обеспечения для систем Unix разработчики обычно используют файлы BIN для упаковки и распространения программ. Они предлагают удобные средства доставки программного обеспечения пользователям, позволяющие легко установить и использовать его. Помимо файлов BIN существуют и другие типы исполняемых файлов Unix, в том числе .ELF, .X86, .RUN и .X86_64, каждый из которых адаптирован для конкретного оборудования или Системные Требования.

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

Файлы BIN часто поставляются в комплекте с сопроводительным файлом INSTALL.TXT, в котором содержатся подробные инструкции по правильной установке и настройке программы. Эта документация гарантирует, что пользователи смогут успешно пройти процесс установки и без проблем начать использовать программное обеспечение.

Время на прочтение

Для пользователя Linux командная строка Windows кажется чем-то непривычным и неудобным. С появлением WSL казалось, что проблема использования Bash решена, но запуск виртуальной машины требует времени, да и пути в WSL отличаются от Windows. Плюс скорость файловых операций на виртуальной машине хуже.

Ещё есть возможность использовать Bash через MSYS2, но мне хотелось найти что-то более компактное и легковесное, а также простое в настройке и установке.

Так как я часто использовал Linux на роутерах, то познакомился с BusyBox, набор UNIX-утилит командной строки, используемой в качестве основного интерфейса во встраиваемых операционных системах. Оказалось, есть версия BusyBox для Windows. В 2020 году появился Windows Terminal, а в нем есть возможность создавать вкладку с запуском конкретной программы.

Пример вкладки Bash
Пример вкладки Bash

Сложив эти два факта, пришла очевидная мысль, использовать BusyBox, содержащий в себе Bash, в Windows Terminal как отдельную консоль.

Список программ входящих в BusyBox
Список программ входящих в BusyBox
Профиль для Bash
Профиль для Bash

У этого подхода был один минус, при запуске терминала не из конкретной папки, а из ярлыка на рабочем столе или из панели задач.

Запуск терминала из конкретной папки
Запуск терминала из конкретной папки

То адрес рабочей папки был C:/Windows/System32, и если случайно ввести команду удаления или создания файла, то мы портим важную системную папку. Обойти возможно используя аналог .bashrc или /etc/profile или .profile.

Bash в windows терминал

Но просто создать файл .profile мало, BusyBox для Windows их не считывает, для этого необходимо добавить путь к этому файлу в  ENV в “Переменные среды”.

Bash в windows терминал

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

#!/bin/bash
domain=$(echo $PWD | tr '[:upper:]' '[:lower:]')
if [ $domain = "c:/windows/system32" ]; then cd $HOME
fi

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

Мы получили Bash в Windows Terminal с удобной начальной директорией.

Время на прочтение

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

В ней вы найдете основные команды для работы в терминале Windows, Linux и macOS. Также описаны базовые команды по работе с Systemctl, VirtualEnv и Git.

Основные команды

Удаление папки

rmdir /s /q папка_для_удаления

Linux и macOS:

rm -rf папка_для_удаления

Создание папки

mkdir новая_папка

Linux и macOS:

mkdir новая_папка

Создание виртуального окружения python через venv

python -m venv venv

Linux и macOS:

python3 -m venv venv

Виртуальное окружение python через venv

venv на Windows идет “из коробки”. Для установки на Linux и macOS возможно потребуется ввести команды:

sudo apt install -y python3-venv
sudo apt install -y build-essential libssl-dev libffi-dev python3-dev

Активация на Windows:

venv\Scripts\activate

Активация на Linux и macOS:

source venv/bin/activate

Деактивация (Linux, macOS и Windows):

deactivate

Команды Git

Инициация Git репозитория

git init

Привязка удаленного репозитория

git remote add origin ссылка_на_репозиторий

Отвязываем репозиторий

git remote rm origin ссылка_на_репозиторий

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

git remote set-url origin git@github.com:username/projectname.git

Установка ветки по умолчанию

git config --global init.defaultBranch main

Клонирование репозитория

git clone ссылка_на_репозиторий

Просмотр состояния репозитория

git status

Добавление файлов в индекс

git add имя_файла_или_папки

Коммит изменений

git commit -m "сообщение коммита"

Обновление локального репозитория (pull)

git pull origin main

Отправка изменений в удаленный репозиторий (push)

git push origin main

Создание новой ветки и переключение на нее

git checkout -b новая_ветка

Просмотр списка веток

git branch

Переключение на существующую ветку

git checkout имя_ветки

Слияние веток

git merge имя_ветки

Создание репозитория на GitHub через командную строку

Для этого нужно использовать GitHub CLI. Сначала установите его, а затем выполните следующие команды:

:/>  How to flush route table in windows?

Установка GitHub CLI

Windows (через winget):

winget install --id GitHub.cli

macOS (через Homebrew):

brew install gh

Linux (через пакетный менеджер):

Пример для Ubuntu:

sudo apt install gh

Авторизация в GitHub CLI

gh auth login

Создание репозитория

gh repo create имя_репозитория --public
gh repo create имя_репозитория --private

Другие полезные команды для Shell

Просмотр содержимого текущей директории

dir

Linux и macOS:

ls

Переключение директории

cd путь_к_папке

Копирование файлов

copy исходный_файл целевой_файл

Linux и macOS:

cp исходный_файл целевой_файл

Перемещение файлов

move исходный_файл целевой_файл

Linux и macOS:

mv исходный_файл целевой_файл

Вывод содержимого файла

type имя_файла

Linux и macOS:

cat имя_файла

Создание и редактирование файлов

echo текст > имя_файла
notepad имя_файла

Linux и macOS:

echo "текст" > имя_файла
nano имя_файла

Блок терминальных команд для Ubuntu (использую чаще всего)

Обновление и установка программного обеспечения

  1. Обновление списка пакетов

    sudo apt update

    Эта команда обновляет список доступных пакетов и их версий, но не устанавливает и не обновляет никаких пакетов.

  2. Обновление установленных пакетов

    sudo apt upgrade

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

  3. sudo apt install <имя_пакета>

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

    sudo apt install firefox
  4. sudo apt remove <имя_пакета>

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

  5. Полное удаление пакетов

    sudo apt purge <имя_пакета>

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

  6. Очистка ненужных пакетов

    sudo apt autoremove

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

Управление системными службами

  1. sudo systemctl start <имя_службы>

    Эта команда запускает указанную службу. Например:

    sudo systemctl start apache2
  2. sudo systemctl stop <имя_службы>
  3. sudo systemctl restart <имя_службы>
  4. Проверка статуса службы

    sudo systemctl status <имя_службы>
  5. Включение службы при загрузке

    sudo systemctl enable <имя_службы>
  6. Отключение службы при загрузке

    sudo systemctl disable <имя_службы>

Не забудьте добавить эту шпаргалку в закладки и оценить ее лайком, если она оказалась полезной для вас.

Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

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

Основы командной строки

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

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

Эта команда ориентируется на так называемую переменную окружения, которую мы изучим в этом уроке.

Что такое переменные окружения

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

Посмотреть установленные переменные можно командой env (environment). Ниже неполный список этих переменных, которые доступны на одном из серверов Хекслета:

xterm-256color
/bin/bash
en_US.UTF-8
kirill.m
v2711
/home/kirill.m/bin:/home/kirill.m/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
/home/kirill.m
en_US.UTF-8
1
/home/kirill.m
kirill.m

Формат вывода очень простой: слева от знака равно расположено имя переменной, справа — значение. В вашем случае вывод команды env будет отличаться не только значениями этих переменных, но и их составом. Например, у вас точно не будет HEXLET_VERSION, но наверняка будет HOME, только с другим значением.

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

Возьмем для примера ту же команду cd. Она знает лишь то, что домашняя директория доступна в переменной окружения HOME. Как она попала в систему — не важно.

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

  • При вызове cd каждый раз указывать, где находится домашняя директория. Например, так: cd --home-dir /home/kirill.m. Такой способ убивает весь смысл быстрого перехода в домашнюю директорию
  • Договариваться, что где-то будет храниться специальный файл с настройками, в том числе домашней директории. Настройки из этого файла будут читаться командой cd при каждом запуске

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

# а перед самой переменной ставится знак $
/home/kirill.m# Вокруг знака `=` не должно быть пробелов/tmp
/tmp# Возвращаем обратно/home/kirill.m
/home/kirill.m

Теперь проведем эксперимент: попробуем установить HOME и выполнить переход в эту директорию с помощью команды cd, которая должна отправить нас в домашнюю директорию:

# Достаточно выполнить присваивание слева от запускаемой команды/tmp
/tmp
/tmp

Команда cd выполнила переход по пути, указанном в переменной HOME. Теперь снова сделаем cd, но не добавляя определение переменной слева:

/home/kirill.m
/home/kirill.m

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

Когда мы указали HOME=/tmp прямо перед командой cd, то переменная не была изменена для текущей сессии — она была изменена для запущенной команды, в данном случае cd. Такой трюк можно проделывать с любой командой.

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


/home/kirill.m
/tmp
/tmp
/tmp

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

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


Самостоятельная работа

Изучите переменные окружения в вашей локальной среде, набрав команду env.


Дополнительные материалы


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Другие файлы BIN

Ниже приведены другие типы файлов, использующие расширение .bin.

Возвращаемое значение функции bin()

Функция bin() возвращает:

   двоичное представление заданного числа;

   ошибку TypeError для случаев передачи нецелочисленного аргумента.

Пример №1: Функция bin() в Python

# Конвертируем 5 в двоичный эквивалент

‘The binary equivalent of 5 is:’

The binary equivalent of 5 is: 0b101

В данном примере мы использовали функцию bin() для конвертации числа 5 в двоичное представление, т.е. 101. Префикс 0b в значении 0b101 обозначает, что это двоичная строка.

Пример №2: Функция bin() с «нецелочисленным» классом в Python

‘The binary equivalent of quantity is:’

TypeError: 'Quantity' object cannot be interpreted as an integer

Здесь мы передали объект класса Quantity в функцию bin() и получили ошибку TypeError из-за того, что мы использовали «нецелочисленный» класс.

Примечание: Мы можем исправить TypeError выше, используя метод __index__() с «нецелочисленным» классом.

Пример №3: Функция bin() с методом __index__() для «нецелочисленного класса»

‘The binary equivalent of quantity is:’

The binary equivalent of quantity is: 0b101

Здесь мы передали объект класса Quantity в функцию bin(). Функция bin() не генерирует ошибку TypeError, даже если объект Quantity не является целым числом. Это потому, что мы использовали метод __index__(), который возвращает целое число.

Добавить в PATH с помощью PowerShell

‘;C:\Program Files\Mozilla Firefox’


CMake

из

Visual Studio

‘;C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin’

Как открыть файл BIN?

Файлы BIN не предназначены для непосредственного открытия и просмотра. Однако вы можете запускать программы или извлекать содержащиеся в них данные. Чтобы получить доступ к содержимому файла BIN, выполните следующие действия в командной строке, предполагая, что имя файла BIN — «sample.bin»:

  1. Убедитесь в разрешениях для исполняемого файла:

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

$ chmod +x sample.bin

Эта команда предоставляет исполняемому файлу привилегии.

  1. Запустите файл BIN:

После установки разрешений на исполняемый файл вы можете запустить BIN-файл, введя следующую команду:

$ ./sample.bin

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

Postgesql

Приведу пример для использования psql из

WSL

и

Git Bash

– это может пригодиться если Вы хотите временно добавить
путь к psql в PATH чтобы запустить

Postrgres

скрипт.

В моём случае

psql.exe

находится в папке C:\Program Files\PostgreSQL\12\bin

В

WSL

В

Git Bash

В

PowerShell

можно проверить наличие пути до Postgres с помощью Select-String

Добавить путь до Postgres в конец Path можно следующим образом

Добавить в начало Path

Похожие статьи
Windows
Terminal
PowerShell
Посмотреть конец файла в PowerShell (аналог tail)
Создать новый файл в PowerShell (аналог touch)
Проверить контрольную сумму файла в PowerShell (аналог md5sum)
Loudness Equalization
Windows Firewall
Remote Desktop Protocol
Драйверы в Windows
Режим разработчика в Windows 10
Git Bash
WSL: Windows Subsystem for Linux
Telnet в Windows 10
Системная переменная PATH
Установка Windows на gpt диск
batch file
pstools
Удалённый рабочий стол
Горячие клавиши
BSOD просмотр логов ошибок

Конец рекламы от Яндекса. Если в блоке пусто считайте это рекламой
моей телеги

Для чего используется

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

Искать по всему жёсткому диску было бы слишком долго, поэтому поиск
осуществляется только по некоторым директориям.

Список этих особых директорий хранится в системной переменной PATH.

Добавить директорию в PATH

Env с сайта www.eth1.ru
Мой компьютер Свойства изображение с сайта www.eth1.ru

Дополнительные параметры системы (Advanced system settings)

Control Panel - All Control Panel Items - System изображение с сайта www.eth1.ru
Environment Variables изображение с сайта www.eth1.ru

Если хотите менять для всей системы, то делайте это в оконе

«Переменные среды»
(System Variables)

Если хотите менять только для своего пользователя, то делайте это в блоке

Environment Variables изображение с сайта www.eth1.ru

Создайте новый путь (New)

Path Environment Variable изображение с сайта www.eth1.ru

Введите адрес директории в которой лежит нужная программа. В нашем случае это

C:\Program Files (x86)\Mozilla Firefox

Path Environment Variable изображение с сайта www.eth1.ru

Перезапустите консоль или открываем новую и пишем там firefox.

Браузер должен запуститься.

Параметры функции bin()

Функция bin() принимает один параметр:

   number — это число, двоичный эквивалент которого нужно вычислить.

Пример

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

Firefox

, непосредственно из командной строки.

Без предварительной подготовки ввод Firefox в консоль выдаст ошибку.

‘firefox’ is not recognized as an internal or external command, operable program or batch file.

Чтобы решить эту проблему нужно добавить директорию с испоняемым файлом firefox в PATH

Открыть доступ

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

  • 130 курсов, 2000+ часов теории

  • 1000 практических заданий в браузере

  • 360 000 студентов

Наши выпускники работают в компаниях:

Изучить содержимое PATH

В

PowerShell

достаточно выполнить

В cmd.exe посмотреть список переменных
окружения можно выполнив команду

set

без параметров.

Выдача содержит системные переменные и переменные пользователя
а также дополнительную информацию. Содержимое PATH выделено зелёным.

результат выдачи команды set без параметров

Конец рекламы от Яндекса. Если в блоке пусто считайте это рекламой
моей телеги

Ошибки

-bash: syntax error near unexpected token `(‘

Скорее всего Вы пытаетесь добавить в unix PATH адрес из Windows, c пробелами, скобками и так далее.

-bash: syntax error near unexpected token `(‘

Для решения этой проблемы Вам нужно экранировать пробелы и скобки. Если импортируется много путей и ввод очень длинный –
немного проще записать PATH=$PATH:/путь , если Вам подходит запись в конец.

Также нужно помнить, что все лишние пробелы сломают импорт – для проверки можно сделать весь скрипт в одну строку
в текстовом редакторе.

Также стоит помнить, что если Вы работаете в

bash под Windows
,
то переменные окружения нужно задавать через Windows.