Git Яндекс Практикум
February 17

Базовые команды в консоли

Что такое система контроля версией

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

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

Основные функции системы контроля версий:

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

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

Система контроля версий — общее название ряда продуктов, таких как Git, Mercurial, Subversion и других. В этом курсе мы будем говорить о самом популярном из них — Git.

Как не потеряться

В графическом интерфейсе всегда ясно, где именно вы находитесь в файловой системе. Если перед вами рабочий стол, значит, вы в папке «Рабочий стол». Если открыта папка «Документы» — вы в ней.

В командной строке вы тоже всегда находитесь в какой-то папке — просто этого не видно.

Узнать, где вы сейчас, поможет команда pwd (от англ. print working directory — «показать рабочую папку»). Она выводит путь к текущей директории.Введите pwd в командную строку и нажмите клавишу Enter для выполнения команды.

Командная строка выведет путь к папке, в которой вы сейчас находитесь. Вместо %USERNAME% будет ваше имя пользователя. Это путь к домашней директории (англ. home directory) — каталогу с файлами пользователя. Обычно здесь хранится такая информация, как загрузки, медиа, скриншоты и так далее. Когда вы открываете командную строку, вы оказываетесь именно в домашней директории.

С помощью терминала вы всегда можете перейти к домашней директории. Для этого нужно ввести команду cd (от англ. change directory — «сменить директорию») и символ ~ — обозначение домашней директории.

Навигация в командной строке

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

Вывести содержимое директории — ls

Когда вы открываете папку через графический интерфейс операционной системы, вы сразу видите её содержимое. В случае с консолью для отображения файлов и папок используют команду — ls (от англ. list directory contents — «отобразить содержимое директории»).

Сменить директорию — cd

Следующая важная команда — cd (от англ. change directory — «сменить директорию»). Вы познакомились с ней в прошлом уроке. Она меняет текущую рабочую директорию на ту, которая указана в качестве параметра: cd имя_папки.

Рассмотрим пример. Структура директорий может выглядеть так.

/projects
    /github
                /open-source-project
    /practicum
                /my-project

Допустим, вы находитесь в директории /projects. Если ввести команду cd github, она перенесёт вас в директорию /projects/github.

$ pwd /projects 
# сейчас мы здесь 

$ cd github 
# переходим в папку github 

$ pwd 
/projects/github 
# теперь мы здесь!  

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

$ cd "Фотографии с дня рождения"

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

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

Также cd позволяет перемещаться сразу через несколько директорий. Для этого нужно разделить их названия знаком /.

$ pwd /projects 
# сейчас мы здесь 

$ cd github/open-source-project 
# переходим через несколько директорий 

$ pwd 
/projects/github/open-source-project 
# переместились сразу в папку open-source-project внутри github

Дополнительные возможности ls

У многих команд консоли есть дополнительные опции. Например, если вы вызовете ls, то увидите список обычных файлов в директории. Но можно вызвать ls с флагом -a и вывести расширенный список. В нём отобразятся все скрытые файлы, которые начинаются с символа . (например, файлы конфигурации). В том числе два особых файла . и .., которые обозначают текущую и родительскую директории.

А ещё, как и другие команды, ls может работать с символом домашней директории (~) и предыдущей директории (..). Например, ls ~ выведет содержимое домашней директории вне зависимости от того, что показывает pwd. А ls .. покажет содержимое родительской директории.

Операции с папками и файлами: создание, копирование, перемещение

Создание файлов и директорий — touch, mkdir

Чтобы создать файл, нужно ввести в консоль команду touch (англ. «коснуться») с именем файла в качестве параметра: touch %ИМЯ_ФАЙЛА%.

$ touch my-new-file.txt 
# создали файл my-new-file.txt

Хорошей практикой при создании файла считается указывать его расширение (в примере — .txt). Это позволит операционной системе выбрать подходящую программу, чтобы открыть файл. А ещё поможет другому человеку понять, какое содержимое находится внутри.

Для создания директорий через терминал используют другую команду — mkdir (от англ. make directory — «создать директорию»).

$ mkdir new-dir 
# создали директорию new-dir

Можно создать целую структуру директорий одной командой с помощью флага -p.

$ mkdir -p dir1/dir-inside/dir-deeper-inside 
# создали папку dir-deeper-inside в папке dir-inside, которая находится в папке dir1

По умолчанию touch и mkdir создают файлы и папки в текущей рабочей директории. Например, если вы находитесь в директории abs, команда touch file.txt создаст файл именно там: abs/file.txt.

Также можно использовать обе команды вместе с символом домашней директории (~) или родительской директории (..).

Например, команда mkdir ~/my-git-projects создаст папку my-git-projects внутри домашней директории.

А команда touch ../../file.txt создаст файл file.txt на две папки выше по иерархии. Допустим, если вы находитесь в директории projects/git/hello, команда touch ../../file.txt создаст файл по такому пути: projects/file.txt.

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

Вы наверняка копировали файлы на своём компьютере через графический интерфейс — диспетчер файлов на Windows или Finder на macOS. Посмотрим, как это делать через консоль.

Для копирования файлов через терминал существует команда cp (от англ. copy — «копировать»). В простом виде cp принимает два параметра: что копируем и куда копируем.

$ cp что_копируем куда_копируем 

$ cp index.html src/ 
# скопировали index.html в папку src

Но можно указать сразу несколько файлов.

$ cp что_копируем что_копируем что_копируем куда_копируем 

$ cp index.html style.css script.js src/ 
# скопировали три файла (index.html, style.css и script.js) в папку src

Попробуйте вместе с нами! Откройте консоль и создайте папку first-project где угодно на компьютере. Внутри папки создайте два файла: data.txt и table.csv.

$ mkdir first-project 
$ touch first-project/data.txt first-project/table.csv

Теперь скопируйте файл data.txt в домашнюю директорию.

$ cd first-project 
# перешли в директорию 

$ cp data.txt ~ 
# скопировали файл в домашнюю директорию

Перемещение файлов и папок — mv

Копирование создаёт копию файла или папки. Но иногда вместо копии нужно удалить файл в одном месте и создать в другом. Для этого есть команда mv (от англ. move — «переместить»).

Синтаксис команды mv аналогичен синтаксису cp. После имени команды указывают список файлов и папок, которые нужно переместить, а затем — папку, в которую нужно выполнить перемещение.


Создайте папку very-important-files внутри директории first-project. Перейдите в first-project командой cd.

Затем переместите файл table.csv в папку very-important-files и проверьте результат.

Операции с папками и файлами: чтение и удаление

Чтение файлов — cat

Чтобы прочитать файл, в консоль нужно ввести cat (от англ. concatenate and print — «объединить и распечатать») вместе с именем файла. Команда распечатает то, что содержится в нём.

$ cat myfile.txt 
# распечатали содержимое файла 
myfile.txt file-content-1 file-content-2

Команда cat работает только с текстовыми файлами. Вывести этой командой файл другого типа (например, изображение) не получится.

Удаление файлов и папок — rm, rmdir, rm -r

Чтобы удалить файл, нужно напечатать команду rm (от англ. remove — «удалить») и передать ей имя файла.

$ rm example.txt 
# удалили файл example.txt из текущей папки

Удалить папку можно командой rmdir (от англ. remove directory — «удалить директорию»). Не забудьте указать имя папки.

$ rmdir images 
# команда удалит папку images из текущей директории,
  # если папка images пуста

Если в папке, которую вы пытаетесь стереть, есть какие-то файлы, то командная строка не удалит её и выведет сообщение о том, что папка не пуста (англ. Directory not empty).

Это защита от случайного удаления нужных файлов. Если папку всё-таки нужно удалить вместе со всем её содержимым, можно использовать команду rm так.

$ rm -r images 
# удалили папку images со всем её содержимым из текущей директории

В этом случае команда rm -r (-r — от англ. recursive, «рекурсивный») рекурсивно удаляет файлы и папки. Это значит, что удаление будет последовательно применяться к каждому из элементов в этой папке — пока не сотрёт их все. Затем команда удалит пустую директорию.

Например, есть папка "ФОТО", внутри которой — файлы и папка "Фотографии с дня рождения". Если вызвать команду rm -r для "ФОТО", то сначала будут удалены все файлы и папки внутри неё (в том числе папка "Фотографии с дня рождения"), а после — сама директория "ФОТО".

Эффективная работа с командной строкой

Выполняйте сразу несколько команд

Команды в терминале необязательно вбивать и выполнять по очереди. Их можно указывать не по одной, а сразу списком. Для этого их нужно разделить двумя амперсандами (&&).

$ mkdir second-project && cd second-project && touch index.html style.css 
# создаём папку second-project, 
# переходим в папку second-project 
# и создаём в ней два файла: index.html и style.css

Вызывайте команды из буфера

Допустим, вчера вы создали пять новых файлов, а сегодня решили добавить к ним ещё один, но не можете вспомнить название нужной команды. На этот случай у терминала есть собственная память. Она называется буфером (от англ. buffer — «посредник»). В буфере хранятся все команды, которые вызывались до этого. По их списку можно перемещаться.

Чтобы обратиться к последней введённой команде, нажмите на клавиатуре стрелку вверх (). Если нажать ещё раз, появится предпоследняя команда; ещё раз — предпредпоследняя; и так далее. Чтобы вернуться — например, от предпоследней команды к последней, — нажмите стрелку вниз ().

Используйте автозаполнение

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

Tab автоматически дописывает не только команды, но и пути. Начните печатать имя папки или файла (они должны быть в той же директории) и нажмите Tab. Терминал заполнит имя автоматически.

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

Рассмотрим пример. Перейдём в домашнюю директорию /Users/Username с помощью автозаполнения Tab.

$ cd /Users/ 
# перешли в папку Users 

$ cd U[Tab] 
# ввели первую букву имени пользователя и нажали Tab 
# имя папки Username подставится автоматически 

$ pwd 
# теперь проверим, где мы сейчас находимся  
/Users/Username # мы в папке Username!

Есть ещё один способ использовать Tab при навигации в другую директорию. Если ввести cd с названием папки, а затем нажать Tab, в консоль в качестве подсказки выведутся все возможные пути.

Применяйте команды для быстрой навигации

Напомним основные:

  • pwd — проверить, где мы находимся;
  • ls — посмотреть список файлов/папок в директории;
  • cd — перейти в выбранную папку.

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

Чтобы попасть в корневую директорию Windows, нужно перейти на соответствующий диск. Например, cd c:/ + Enter или cd /c + Enter.

Задание для самостоятельной работы

1) Откройте консоль и перейдите в домашнюю директорию с помощью cd ~.

2) Введите cd, нажмите пробел, а затем клавишу Tab. Если консоль сообщит, что вариантов слишком много, нажмите y. Вы должны увидеть все файлы и папки в текущей директории.

3) Введите несколько первых символов одной из папок (например, Desk), а затем ещё раз нажмите клавишу Tab — автозаполнение превратит Desk в Desktop. Выполните cd клавишей Enter.

4) Два раза нажмите на клавиатуре стрелку вверх (), пока не вернётесь к команде для перехода в домашнюю директорию. Дополните её выводом ls. Должно получиться следующее: cd ~ && ls.