company_banner

Путешествие в мир Linux и Git

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

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



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

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


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

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

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


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

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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

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

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


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

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


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

Вот — характеристика некоторых важных папок.
Путь к директории Примечания
/

Корневая директория.
/home

Директория, в которой хранятся материалы пользователя.
/boot

Тут хранятся файлы, необходимые для запуска Linux.
/bin

Здесь находятся исполняемые файлы.
/var

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

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


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

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


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

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

Текущая рабочая директория.
ls .

Вывод сведений о содержимом текущей директории.
..

Родительская директория.
cd ..

Переход на один уровень вверх, к родительской директории.
-

Предыдущая рабочая директория.
cd -

Возврат в предыдущую рабочую директорию.


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

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


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

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

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

ln -s /path/to/file linkname

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


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

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


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

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

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

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


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

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

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


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

- rwx r-- r--

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

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

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

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


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

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


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

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

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

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


Команда git init

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


Команда git add

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


Команда git commit

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


Команда git status

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


Команда git config

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

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

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

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

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

Итоги


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

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



RUVDS.com
VDS/VPS-хостинг. Скидка 10% по коду HABR

Комментарии 34

    +6
    я, честно говоря, не собиралась изучать Linux, не думала, что умение работать в этой ОС сделает меня продуктивнее

    И в чём же повысилась продуктивность?! По моему опыту программировать в Линуксе конечно быстрее, легче и приятнее. Но в чём опыт этой дамы не ясно?

      +7
      Терминал (bash) освоила чутка — вот и профит.

      Но мне удивительно что 2020 году народ все еще делает для себя открытия в Linux в структуре файловой системы и командной строке. Вот уж реально вечные темы…
        –1

        Ну да, это можно было сделать ещё в 2000-м году ;) :D

          0
          В этом году она наверняка еще под столом стоя ходила.
            0

            Это всё объясняет! :)))))))

        0
        1. Она теперь как пулемёт умеет набирать длинные команды.
        2. ???
        3. Profit!
        +9
        Мда, 13 консольных команд и 10 гит… Очень познавательно! Гугл тут не поможет.
          0

          Лучше бы еще что посложнее потыкать
          dirs, pushd, popd
          .bashrc, alias

            +8

            Что ЭТО делает на хабре?!?
            Ожидается, что мы должны сделать скидку на то, что женщины тупые и выучить cd и git clone — предел того, на что они способны? Но это же явная неправда, встречал вполне компетентных и программистов, и админов женского пола.

              +1

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

                +1
                Да, согласен, сам пару раз готовя материалы, казалось бы на совершенно банальные темы — открывал для себя много новых и интересных вещей.

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

                Материал тут подан как раз просто и понятно, то что нужно для знакомства с Linux и Git.
                  +3
                  Согласен. С первого взгляда мне тоже показалось, что зачем это здесь — это же всё понятно. Но потом вспомнил себя 3 года назад, когда при смене работы пришлось начать работать в Linux и понял, что вот тогда мне этой статьи очень не хватало, где всё разложено по полочкам. Статья явно рассчитана на новичков, но материал она даёт очень понятно и наглядно. В итоге — мне статья понравилась
                    0
                    Хм, пожалуй Вы правы. На самом деле я про = в chmod только из этой статьи узнал) хотя пользовался им давно.
                      0

                      Тоже нашёл для себя что-то новое, но проблема в том, что для новичка статья оторвана от практики (нет конкретных примеров, не понятно зачем все это нужно), а для более продвинутого — слишком простая.

                    +2
                    Если не постить на хабре подобные статьи, скоро на нем останутся одни старперы. Пускай сюда свежая кровь подтягивается.
                      +2
                      Сюда «авторша» не подтягивается. Присмотритесь внимательней. То, что вы видите — это перевод статьи с «Medium» некоей девочки под ником Neya, размещенный в официальном блоге RuVDS. Статья опубликована в канале «The Startup», раскручивающем своих «молодых авторов». А тут она для того, чтобы кто-то сходил, посмотрел в оригинал. И кто-то сходил, 3.8 тысяч человек сходили.
                      +2
                      У меня знакомая стала учиться программировать, я ей эту статья скинул, потому что она еще путается в коммандах git/bash. В чем проблема с этой статьей?
                        0
                        git/bash это разве связано с программированием?
                          0
                          Это сарказм? Она учится программировать на проектах, которые создает в github и работает с git в консоли и ее PR ревьюит преподаватель. Мне кажется безумием в наши дни просто учиться программировать без привязки к реальным проектам и типичным рабочим процессам.
                            0
                            Мне казалось, что программирование — это сначала языки, алгоритмы, абстракции всякие, ООП, шаблоны, Керниган и Ритчи
                              0
                              И вам правильно казалось. Но так же правильное образование не будет это давать в вакууме, человек должен так же понимать, как работать в команде и какие процессы происходят во время разработки. Начинающий программист в наши дни должен понимать, как работать с bash, как создавать проект, как использовать пакетный менеджер в том языке, который он изучает и как деплоить на продакшн (и что это вообще такое).
                                –1

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


                                К программированию микроконтроллеров это тоже относится? ;)

                      +1
                      Не очень понятно в каком именно месте был освоен Линукс.

                      В виндовс тоже есть командная строка, с почти такими же командами.

                      А если под винду поставить git, то вообще все описанное в статье можно выполнять в командной строке под виндовс, поскольку с git for windows приедут портированные aws/ls/touch

                      Правильно — это «я немного научилась работать в CLI»
                        +2
                        Думается мне что тут дело совсем не в Linux и Git, это тут не главное, самое важное ссылочка #IBelieveinDoing )
                          0
                          Вместо git pull лучше бы про git fetch написали.

                          А то новички потом с квадратными глазами прибегают «я стянул, а мои коммиты вжжух и потёрлись».
                            0
                            А что это за терминал такой на скрине?
                              0
                              Bash терминал открытый в Visual Studio Code (на первых скринах)
                              0
                              Я просто оставлю это https://github.com/jlevy/the-art-of-command-line здесь.
                                0

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

                                  0
                                  Накинулись на девчонку, изверги :)
                                  Да, 20+ лет работая с Unix — статья выглядит игрушечной.
                                  Но для такой же девочки, решившей «изучить гит и линух» — вполне сгодится.
                                    0

                                    для первоклассники палочки в прописи — тоже достижение, начнём их публиковать на хабре?

                                      0
                                      Не надо утрировать.
                                      Всегда можно дойти до крайностей.
                                    +2
                                    Я помню время, когда еще в далеком 2007-2008 я заходил на хабр почитать статьи, которые действительно писались гиками для гиков -> программистами для программистов. Сейчас же это я вижу как ресурс из года в год умирает и превращается в свалку рекламного мусора и гедерных подлизываний. Команды git и linux? Серьезно? Нап в ПТУ-шке на первом курсе в голову вкачали 100500 этих команд которые до сих пор не забылись, а тут люди как бы на опыте открывают для себя линь. Кошмар.
                                      +1
                                      То популярность языков по ютубу вычисляют, то вот это вот. ruvds очевидно нас за девчонок держит, которые линь с гитом в глаза не видели.

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                      Самое читаемое