[Перевод] Путешествие в мир Linux и Git

Во время пандемии я, честно говоря, не собиралась изучать Linux, не думала, что умение работать в этой ОС сделает меня продуктивнее. Но, как оказалось, Linux-навыки, и правда, помогают мне быстрее справляться с делами. Всё началось с того, что мне посоветовали «взглянуть на Linux». Я тогда подумала, что делать мне, всё равно, нечего, да ещё и сентябрьский выпуск #IBelieveinDoing оказался как раз о Linux.

Я почувствовала, что всё у меня получится, и отправилась в путешествие по миру Linux. В том выпуске #IBelieveinDoing были уроки не только по Linux, но и по Git. Между этими системами можно провести некоторые параллели. Linux — это опенсорсная ОС, которой пользуются программисты, а Git — это система управления версиями, которую применяют для отслеживания изменений в исходном коде при разработке программ. Надо отметить, что изучение Linux и Git оказалось весьма увлекательным занятием. Но Git — довольно сложная система, поэтому и освоить её основы было тяжелее, чем основы Linux.

6snv2al7wrage3besuw8di4lhwy.jpeg

В этом материале я хочу поделиться с вами тем, что узнала, осваивая Linux и Git.

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


pwd: эта команда применяется для вывода сведения о рабочей директории.

ls: с помощью этой команды можно вывести данные о содержимом директории. Если она выполняется именно в таком виде, без аргументов командной строки, она даёт сведения, представляемые в формате, используемом по умолчанию.

cd: данная команда предназначена для смены каталога.

8bb12d5530a378cf2704609e6723aef4.png


Эксперименты с командами Linux

cp: эта команда предназначена для копирования файлов и папок.

mv: с помощью данной команды можно переименовывать или перемещать файлы и папки.

touch: эта команда применяется для создания пустых файлов и для изменения временной метки файлов.

cat: данная команда позволяет просматривать содержимое файлов, с её помощью можно создавать копии файлов, присоединять содержимое одних файлов к другим.

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

6379fa99f255ad4046bb37a4be9ffe13.png


Пример использования команды tree

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

echo: эта команда применяется для вывода передаваемых ей данных на экран.

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

tail: с помощью этой команды можно вывести 10 последних строк файла.

2f8c414f4b36a23b80a79fa7d2b199f1.png


Примеры использования команд grep и cat

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

В Linux можно пользоваться конвейерами, представляющими собой однонаправленные каналы, с помощью которых можно организовывать взаимодействие процессов. При описании конвейеров используют символ (|). С использованием этого символа можно, например, направить выходные данные одной команды на вход другой.

2c50771db4cc7ca7bf9349f5023ce036.png


Пример использования конвейера

ssh: данная команда позволяет работать с ssh-клиентом, который используется для подключения к удалённым системами и для выполнения команд на них. Протокол SSH направлен на организации безопасного взаимодействия компьютеров.

rm: эта команда используется для удаления файлов и папок. Например, её вызов в виде rm file приводит к удалению файла, а в виде rm -r directory — к удалению директории и всего её содержимого.

Структура директорий Linux


В Linux используется древовидная структура директорий. Начало этой иерархической структуры находится в корневой директории. В эту директорию вложены все остальные директории. Для разделения имён директорий при указании путей к файлам и папкам используется прямая косая черта (/).

Вот как может выглядеть структура файловой системы в Linux-системе.

cd8c88bdda4aab386896cb0c5f03a513.png


Структура директорий в Linux

Вот — характеристика некоторых важных папок.


Абсолютная и относительная адресация


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

Относительные пути задаются относительно текущей директории.

6405e9aa59f5aaeb25a6788d47cbb2a1.png


Эксперименты по работе с путями

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


36e24a3fff80e9ad659b42d8ce25c84e.png


Примеры использования особых относительных путей

Мягкие и жёсткие ссылки на файлы


Мягкая (символическая) ссылка на файл содержит указатель на имя файла. Эти ссылки напоминают ярлыки, которые используются для того чтобы можно было быстро обратиться к файлу из разных директорий. Если файл, на который есть мягкая ссылка, удаляется, ссылка остаётся, но перестаёт работать.

Жёсткая ссылка представляет собой ссылку на то место жёсткого диска, где расположен файл. Система считает файл существующим до тех пор, пока есть хотя бы одна жёсткая ссылка на него. Фактически, если у файла есть несколько жёстких ссылок, это можно сравнить с тем, что у файла есть несколько имён.

Для создания жёстких и мягких ссылок на файлы используется команда ln. Вот пример создания с её помощью символической ссылки:

ln -s /path/to/file linkname


Управление поведением команд


Поведением команд Linux можно управлять, передавая им при их вызове аргументы (ключи, опции, флаги) командной строки. Они обычно выглядят как дефис (-), за которым идёт однобуквенное имя ключа (такая конструкция может выглядеть, например, как -a). Они могут выглядеть и как два дефиса (--), за которыми идёт более длинное имя ключа (вроде --all).

Для того чтобы выяснять подробности о командах Linux, можно воспользоваться встроенной справочной системой, доступ к которой осуществляется посредством команды man. Например, для получения справки по команде ls можно воспользоваться командой man ls. Ниже показан результат работы подобной команды.

5dcb0651ecc8aa27329bb308b0128f82.png


Справка по команде ls

Справочные страницы команд включают в себя несколько разделов. Среди них можно отметить следующие:

  • NAME (имя). Тут содержится имя команды и краткое описание того, что она делает.
  • SYNOPSIS (сводка по синтаксису команды). Здесь показана схема использования команды.
  • DESCRIPTION (описание). В этом разделе приводится подробное описание команды и поддерживаемых ей ключей командной строки.


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

d88faafcd7f1d5f8322547124d9201cb.png


Использование команды ls -l

На предыдущем изображении вы могли заметить конструкции вида drwxr-xr-x. Это — описание прав доступа к файлам.

Права доступа к файлам


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

- rwx r-- r--


Обратите внимание на то, что в ней можно выделить четыре группы символов:

  1. Первый символ указывает на то, с чем именно мы имеем дело. А именно, если здесь стоит знак (-), то перед нами — файл. Буква (d) указывает на директорию. Буква (l) — на ссылку.
  2. Три следующих символа позволяют узнать о том, какими разрешениями по работе с данным файлом обладает его владелец: r — чтение, w — запись, x — выполнение. Полный набор разрешений представлен последовательностью rwx, если некое разрешение отсутствует, вместо него в соответствующей позиции ставится символ (-).
  3. Следующая последовательность из трёх символов указывает на то, какие разрешения на работу с файлом есть у группы пользователей (как правило, у группы владельца файла). Её содержимое читается по тем же правилам, что и описание прав владельца файла.
  4. Последняя последовательность из трёх символов, устроенная так же, как две предыдущих, описывает права всех пользователей кроме его владельца и тех пользователей, которые входят в группу файла.


Для управления правами доступа к файлам используется команда chmod. Например, для того чтобы добавить к текущим правам доступа к файлу разрешение на его запуск, можно воспользоваться следующей схемой её вызова: chmod +x . Конструкция +x указывает на то, что данное разрешение добавляется для всех пользователей.

Поговорим о некоторых особенностях настройки прав доступа к файлам с помощью chmod. Так, для назначения некоего разрешения всем пользователям используются конструкции, похожие на вышеописанную +x. Оператор (+) применяется для добавления разрешений, оператор (-) позволяет убирать разрешения, оператор (=) используется для установки определённых прав для пользователя-владельца файла (u, user), для группы (g, group), для остальных пользователей (o, others) и для всех пользователей (a, all). Делается это в конструкциях вида chmod u=rwx,g=rx,o=rx filename.

При назначении разрешений часто используют их запись в числовом виде. Определённым правам соответствуют восьмеричные коды. Так, x соответствует код 1, w соответствует код 2, а r соответствует код 4. Код 0 соответствует полному отсутствию разрешений на работу с файлом. Права на файл описываются трёхзначным числом, порядок цифр в котором соответствует вышеописанному порядку расположения групп разрешений. То есть — первая цифра описывает разрешения владельца файла, вторая — разрешения группы, третья — разрешения остальных пользователей. Каждая из этих цифр представляет собой сумму кодов разрешений r, w и x.

Например, команда вида chmod 444 filename означает, что все будут иметь право лишь на чтение файла (r--r--r--), а команда вида chmod 700 filename указывает на то, что у владельца будет право чтения, записи и запуска файла (rwx, 4+2+1), а никто другой не имеет права выполнять с файлом никаких действий (rwx------).

Работа с Git


При работе с Git обычно используется следующая последовательность действий:

  1. Модификация файла в локальной рабочей директории.
  2. Индексирование файлов (команда git add).
  3. Сохранение слепка проиндексированных данных во внутренней базе данных (git commit).
  4. Отправка изменений из локального репозитория в удалённый (git push).
  5. Загрузка изменений из удалённого репозитория в локальный (git pull).


Вот схема, иллюстрирующая данную последовательность действий.

cd2752b795182d5107aaabc68cf78ca1.png


Типичная последовательность действий, используемая при работе с Git

Файлы при работе с Git могут пребывать в различных состояниях.

e3c8d76ef61bcc0f30efe45fc15fc0c6.png


Состояния файлов

  • Untracked (неотслеживаемый) — это файл, за изменениями которого Git не наблюдает. Этот файл может быть добавлен в индекс и оказаться в состоянии Staged.
  • Unmodified (немодифицированный) — файл, за которым организовано наблюдение, но содержимое которого не менялось. Если удалить этот файл, наблюдение за ним прекратится. Если его изменить — он перейдёт в состояние Modified.
  • Modified (изменённый) — файл, за которым организовано наблюдение, содержимое которого изменилось. Он может быть подвергнут индексированию и переведён в состояние Staged.
  • Staged (проиндексированный) — это файл, за которым осуществляется наблюдение, и который был включён в индекс. Соответствующие изменения могут быть включены в базу данных Git.


Рассмотрим некоторые команды Git.

git init: эта команда создаёт в директории пустой Git-репозиторий. Это — первый шаг, выполняемый при создании нового репозитория. После выполнения этой команды можно пользоваться командами git add и git commit.

c7cb4f05aeb4a0a9aa540c6221541818.png


Команда git init

git add: данная команда добавляет файлы в индекс. Она поддерживает, в виде git add ., добавление в индекс всех непроиндексированных файлов, в виде git add filename — добавление в индекс конкретного файла, в виде git add dirname — добавление в индекс директории.

db483677b2a363111c42eae3eb00e9c8.png


Команда git add

git commit: эта команда записывает изменения в локальный репозиторий. Эти изменения называют, по аналогии с именем команды, «коммитами». У каждого коммита имеется уникальный идентификатор, что облегчает работу с коммитами.

aad5b6aad8dd196ec3453828a2efed56.png


Команда git commit

git status: эта команда позволяет получить сведения о текущем состоянии репозитория.

b2f3f639a96b13400a4580ece90a9698.png


Команда git status

git config: данная команда позволяет настраивать Git. Среди настроек Git можно отметить user.name и user.email. Они содержат имя пользователя и адрес его электронной почты, используемые в коммитах и указывающие на то, кто их сделал. Если при вызове команды git config используется флаг --global — настройки применяются ко всем локальным репозиториям. Без этого флага настройки применяются только к текущему репозиторию.

259cf9a33f251c7852d8be0dc14d0657.png


Команда git config

git checkout: эта команда применяется для переключения между ветками репозитория (в виде git checkout ). С её помощью можно создать новую ветку и переключиться на неё (git checkout -b ).

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

git clone: данная команда используется для создания локальной рабочей копии удалённого репозитория. При её выполнении производится загрузка материалов удалённого репозитория на компьютер. Клонирование существующего репозитория сопоставимо с созданием нового репозитория командой git init. Но при клонировании в нашем распоряжении оказывается репозиторий, в котором уже что-то есть, а при выполнении команды git init — пустой репозиторий.

git pull: эта команда предназначена для загрузки свежих данных из удалённого репозитория.

git push: с помощью этой команды можно отправить локальные коммиты в удалённый репозиторий. При вызове этой команды нужно передать ей сведения об удалённом репозитории и о ветке локального репозитория, которую нужно отправить в удалённый репозиторий.

Итоги


Я рассказала вам обо всём, что узнала во время моего путешествия в мир Linux и Git. Это было очень увлекательно. Надеюсь, вам захочется сделать нечто подобное и изучить что-то новое, что-то такое, что расширит ваши профессиональные горизонты.

Если вы недавно освоили что-то интересное — просим об этом рассказать.

oug5kh6sjydt9llengsiebnp40w.png

3piw1j3wd_cgmzq9sefgferaumu.png

© Habrahabr.ru