И так начнем с такой простой вещи как установка приложений.

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

Называется он apt (advanced packaging tool). Рассмотрим сразу на примере,

Устанавливаем git

нам точно понадобится git в скором времени, давайте его и поставим

Откроем консольку Windows+T и напишем

apt install git

увидим в ответ такое:

дело в том, что в линусках все операции с системой должны проходить в режиме суперпользователя (типа админа). Это чем-то напоминает, когда в винде у вас просят подтверждение на выполнение каких-то действий типа

но там у вас окошко выскакивало, а тут что делать?

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

apt install git

пишем

sudo apt install git

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

если вы дома, то скорее всего у вас запустится установка

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

sudo apt update

она обновит кеш пакетов. Потому снова попробуйте

sudo apt install git

Если и это не помогло. То вы судя по всему в политехе. А там интернет работает через прокси, поэтому надо сделать пару дополнительных операций.

Сначала напишите команду

sudo visudo

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

Defaults env_keep = "http_proxy https_proxy ftp_proxy" 

теперь сохраните и закройте редактор. Для этого Нажмите Ctrl+O затем Enter, затем Ctrl+X.

Теперь надо ввести еще одну команду перед установкой

export http_proxy="http://172.27.100.5:4444"

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

sudo apt update
sudo apt install git

Ну и ждем

иногда он кстати может спросить какого-нибудь подтверждения типа [Д\н] просто тыкайте Enter

Так, давайте теперь проверим что git установился, напишем

git

и увидим

что означает что все работает как надо.

Создаем репозиторий

Создадим теперь какой-нибудь тестовый проект и попробуем подключить его к github.

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

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

ls -la

у меня вывелось вот такое:

синеньким обозначены папки, белым – файлы. Если у вас не совсем похоже на мое, то переживать не стоит, это норма.

Чтобы понять что-за это папка вы можете написать

echo $PWD

$PWD – это так называемся переменная среды, а echo команда которая позволяет выводить значение переменных среды.

PWD значит present working directory (то есть текущий рабочий каталог)

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

echo $USER

получится что-то такое

весь список можно запросить через команду env

Давайте теперь создадим папку под проекты, я назову ее projects, вы можете назвать как вам хочется. Для создания папки используется команда mkdir

теперь зайдем в эту папку, для этого используется команда cd после которой указывается пусть к папке в которую хотим перейти

cd projects

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

Кстати обратите внимание на значок тильды ~

то есть в моем случае в папку /home/m

Создадим теперь гит проект, для этого напишем команду

git init project01

теперь зайдем в папку с проектом

cd project01

и посмотрим, что в ней лежит

ls -la

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

ls -l

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

Теперь создадим файлик README.md с описание проекта.

В линуксе тьма способов создать файл. Самый простой – это команда touch

touch README.md

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

Давайте создадим сразу первый коммит, сначала добавим файлик README.md в стейдж

git add README.md

а затем создадим коммит

git commit -a -m "первый коммит"

и получим такую ошибку

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

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

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

И теперь подключим наш проект к гитхабу.

Подключаемся к github

Идем на github и создаем новый репозиторий

теперь подключим папку к проекту, тыкаем вверху кнопочку ssh и выполним вот эти команды которые предлагает нам github

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

Если у вас выплыло какое-нибудь другое сообщение, то это значит что вы в политехе, а там заблочен ssh. Скажите об этом мне, и я скажу что делать.

Подключаемся к github по ssh

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

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

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

Тут мы пишем в ответ yes, но так как цифрового ключа мы пока не создавали, то команда отправки на сервер не сработает:

И так давайте создадим ключик для подключения.

Авторизация через ключи прикольнее чем авторизация черз юзер пароль.

Во-первых ее практически не возможно взломать, методы перебора там не работают.

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

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

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

Создаем пару ssh-ключей

И так давайте создадим ключики. Для этого используется команда ssh-keygen

В качестве параметра указывается тип ключа, github рекомендуем использовать схему ed25519 https://ru.wikipedia.org/wiki/EdDSA так что ее и будем использовать, пишем

ssh-keygen -t ed25519

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

echo $HOME

ну либо просто запомнить, что ваша домашняя директория – это всегда /home/имя_вашего_пользователя, в моем случае будет /home/m, то есть я для пути к ключу укажу

/home/m/.ssh/linux_project01

вас еще попросят ввести парафразу (это пароль для ключа), но ее можно просто оставить пустой, то есть два раза тыкнуть enter, в результате увидим что-то такое:

кстати картиночка в конце которую вы видите это визуальное представление ключа. Алгоритм генерации можно почитать тут https://russianblogs.com/article/8271690010/.

Опять же нужна для случаев, когда люди серьезно озабочены безопасностью и при каждом соединении с удалённым сервером у них включен режим выводить это картинку. Цель – визуально запомнить, как выглядит ключ, и если произошла подмена ключа, то картинка поменяется, а оператор должен среагировать на это – ну, как минимум, заподозрить что-то не ладное.

Теперь давайте глянем что-за файлики сгенерились:

ls ~/.ssh -la

так как мы владельцы то можно глянуть содержимое файлов. Тот файл, который заканчивается на .pub – это публичный ключ, давайте выведем его содержимое. Самая простая команда для вывода текста из файла называется cat

cat ~/.ssh/linux_project01.pub

увидим его содержимое

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

его нельзя никому показывать =О

Подключаем ключи к github

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

и добавляем ключ

теперь надо подключить этот ключ в линуксе. Чтобы гит понял, что ему надо использовать эти ключи для соединения их надо прописать в конфигах ssh. Подробнее это описано тут https://docs.github.com/en/developers/overview/managing-deploy-keys#using-multiple-repositories-on-one-server

Интересуют нас вот эти строки:

То есть нам надо создать файлик ~/.ssh/config, создавать мы уже умеем, давайте переместимся в папку ~/.ssh

cd ~/.ssh

и создадим файл, уже с помощью известной нам команды touch

Теперь собственно вопрос, а как его редактировать?

Для этого есть еще одна программка, встроенная в линукс котораят называется nano, это мини редактор текста, пользоваться им тоже очень легко, просто пишем nano имя_файла.

Вводим

nano config

и видим

пишем туда, как будто это простой текстовый файл

Host github.com
    IdentityFile=~/.ssh/linux_project01

и теперь надо сохранить результат. Внизу редактора указан список горячих клавиш. Нам интересна вот эта:

тыкаем Ctrl+O

и жмем Enter

Все теперь можем выйти из редактора. Для выхода надо нажать Ctrl+X

теперь вернемся в папку с репозиторием

cd ~/projects/project01/

и попробуем снова команду

git push -u origin main

хм, чего-то не работает…

А! Если прочитать ошибку, то увидим что там написано:

Bad owner or permissions on /home/m/.ssh/config

Тут дело в том, что создав файлик config мы не настроили ему права доступа.

Давайте еще раз глянем содержимое папки .ssh

ls ~/.ssh -la

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

chmod 600 ~/.ssh/config

пробуем еще раз отправить наш репозиторий в github

git push -u origin main

о, поехало:

красота =)

Задание

  • Создать новый git репозиторий
  • Добавить в него файл README.md
  • Подключить репозиторий к github через deploy ключ
  • Написать туда какой-нибудь текст, или стих или песню или мем, ну в общем что нравится то и напишите. Главное чтобы было пара строчек, заголовок и блок с кодом. Оформить текст с использование Markdown https://gist.github.com/Jekins/2bf2d0638163f1294637