Базовые знания Linux админа

 

Примечание

В данной серии не будет теории и прочего

Это абсолютный базис-гайд по установке ОС и базовым навыкам в терминале

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

После прохождения гайда у вас будет машина и несколько популярных сервисов

Все. Дальше - сами, книги, видео, стажировка

Этот гайд - выжимка на многолетние накопления вопросов на канале и сайте

Гайд будет доступен на моем сайте:

http://snakeproject.ru

Видео будут доступны на моем канале YouTube:

https://www.youtube.com/channel/UCR6j95DKI80MFXIw2iJ3f1w

 

План:

 

6 часть — git

 

Немного теории и зачем нам нужен Git?

Git - распределенная система управления версиями (контроля версий)

 

Подходит как разработчикам, так и системным администраторам

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

 

В данном пособии мы затронем только базовый функционал локально на одном сервере

Существуют общедоступные репозитории GitHUB, GitLAB и прочие, которые доступны в сети интернет

Наша задача, продемонстрировать базовый функционал данного ПО

 

Установка git в ubuntu:

sudo apt-get install git-core

 

Создание нового пользователя (имя выберете любое):

sudo useradd -m git && sudo passwd git

 

Перейдем под созданного пользователя git:

su git

 

Создание ssh ключей под пользователем git:

ssh-keygen -t rsa

Ключи ssh нам нужны для удаленного доступа на сервер с других машин

 

Например, если есть в сети еще одна машина, с которой нужен доступ к Git репозиторию на данном сервере, вам необходимо скопировать ключ ssh ключ с сервера другому пользователю на второй машине

Пример

Копируем pub (публичный) ключ пользователю  (в примере тоже git) на другом сервере, чтоб он имел доступ:

cat /home/git/.ssh/id_rsa.pub | ssh git@remote-server "mkdir -p /home/git/.ssh && cat >>  /home/git/.ssh/authorized_keys"

 

Зададим пользователю git основные данные для Git:

git config --global user.name "git"

git config --global user.email "git@local"

 

Эти данные будут использоваться в системе Git при каждом commit пользователя

 

Вернемся на сервер, создадим новый репозиторий Git

mkdir -p /home/git/repo1/proj1 && cd /home/git/repo1/proj1

pwd

/home/git/repo1/proj1

git init

 

Создадим пару тестовых файлов в репозитории:

touch .gitignore

git add .gitignore

echo "testmessage1" > testfile1.txt

echo "testmessage1" > testfile2.txt

git add .

git commit -m "My First Commit, Iam add new files!"

 

Где:

Добавление файлов отслеживание (git add .) репозиторием (. - все файлы в каталоге)

Подтверждение последних изменений в репозитории (git commit)

 

Проверим статус репозитория:

git status

On branch master

nothing to commit, working tree clean

 

Т.к. у меня нет второй машины в сети, я сымитирую ситуацию

 

IP-адрес нашего сервера - 192.168.0.180 , именно к нему бы я подключался из другой машины в сети

 

ssh ключи пользователя git добавим на наш сервер для имитации удаленного доступа по сети

Копируем pub (публичный) ключ пользователю git "типа" на другом сервере, чтоб он имел доступ по ssh на ip адрес сервера до git репозитория:

cat /home/git/.ssh/id_rsa.pub | ssh git@192.168.0.180 "cat >> /home/git/.ssh/authorized_keys"

 

Подключаемся к созданному репозиторию proj1 имитируя доступ по ssh на ip адрес сервера:

mkdir /home/git/repo2 && cd /home/git/repo2

git clone ssh://git@192.168.0.180:/home/git/repo1/proj1

$ cat proj1/testfile1.txt ; cat proj1/testfile2.txt

testmessage1

testmessage1

 

Как видим, файлы репозитория proj1 склонированы успешно

 

Внесем изменения, отправим их в репозиторий имитируя работу через сеть

cd proj1 ; echo "testmessage2" >> testfile2.txt

 

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

 

Добавим измененный файл к отслеживанию

 

Подтвердим изменения в репозитории

 

Проверяем статус:

 

Изменения еще не поступили в "удаленный" репозиторий:

cat /home/git/repo1/proj1/testfile2.txt

testmessage1

 

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

 

Изменения появились на удаленном репозитории:

cat /home/git/repo1/proj1/testfile2.txt

testmessage1

testmessage2

Откатиться к предыдущему коммиту

git log

commit 8b28ad2c2413411eb1a8b2c0cfc63f728544d130 (HEAD -> master, origin/master, origin/HEAD)

Author: git <git@local>

Date:   Thu Nov 5 08:35:49 2020 +0000

    change

 

commit 357bbc105e590996c32e54ffbe4c6a58e904d9be

Author: git <git@local>

Date:   Thu Nov 5 08:29:05 2020 +0000

    My First Commit, Iam add new files!

 

Итак, с помощью логов мы узнали номера коммитов (более удобный формат):

git log --oneline

8b28ad2 (HEAD -> master, origin/master, origin/HEAD) change

357bbc1 My First Commit, Iam add new files!

 

Откатите изменения к старому коммиту:

git checkout 357bbc1 .

 

Добавьте изменения и сделайте коммит:

git add -A

git commit -m "Revert commit: 357bbc1"

 

Сделав откат локально, откатите изменения в "удаленном" репозитории:

git push

 

Все успешно откатилось:

 

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

Для данного пособия 90% задач на админском уровне - достаточно

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

 

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

http://snakeproject.ru/rubric/article.php?art=git_basis_26.06.2019

http://snakeproject.ru/rubric/article.php?art=git_10082020

https://www.youtube.com/watch?v=sPjRY1VSJw4