Полезные горячие клавиши для Bash
В данной статье представлен перечень сочетаний клавиш для более удобного манипулирования текста командной строки.
Управление запущенными процессами
Эти сочетания позволяют управлять процессами, запущенными в командной строке.
Ctrl+C: Закрывает текущий процесс, запущенный в терминале. Некоторые приложения могут его игнорировать.
Ctrl+D: Закрывает bash оболочку вместе с процессами. Схожа с командой exit .
Ctrl+Z: Сворачивает текущий процесс. Его можно возобновить с помощью команды fs process_name .
Управление экраном
Следующие команды позволяют контролировать вывод в оболочке bash .
Ctrl+L: Производит быструю очистку экрана. Похожа на команду clear .
Ctrl+S: Останавливает весь вывод на экране. Это полезно когда необходимо временно остановить запущенный процесс.
Ctrl+Q: Продолжает работу и отображение вывода после ее остановки.
Управление курсором
Используйте следующие комбинации чтобы быстро управлять курсором в текущей линии пока печатаете команду.
Ctrl+A или Home: Курсор идет в начало строки.
Ctrl+E или End: Курсор идет в конец строки.
Alt+B: Курсор двигается к началу на одно слово.
Ctrl+B: Курсор двигается к началу на один символ.
Alt+F: Курсор двигается в конец на одно слово.
Ctrl+F: Курсор двигается в конец на один символ.
Ctrl+XX: При повторном исполнении команды, курсор будет двигаться между началом линии и текущей позиции курсора.
Удаление текста
Используйте следующие команды для быстрого удаления текста:
Ctrl+D или Delete: Удаляет символ находящийся на курсоре.
Alt+D: Удаляет все символы находящиеся после курсора на текущей линии
Ctrl+H или Backspace: Удаляет символ, находящийся перед курсором.
Переставление
Alt+T: Переставляет текущее слово и предыдущее.
Ctrl+T: Переставляет два предыдущих символа перед курсором. Можно использовать, когда например написал cta вместо cat .
Ctrl+_: Делает отмену последней нажатой клавиши. Можно повторять несколько раз.
Вырезка и вставка текста
Ctrl+W: Делает вырезку слова перед курсором и добавляет его в буфер.
Ctrl+K: Вырезает весь текст после курсора и добавляет его в буфер.
Ctrl+U: Вырезает весь текст перед курсором и добавляет его в буфер.
Ctrl+Y: Вставляет последний контент из буфера.
Регистр
Alt+U: После курсора слово переводится в верхний регистр.
Alt+L: После курсора слово переводится в нижний регистр.
Alt+C: После курсора первый символ слова переводится в верхний регистр.
Перебор команд из истории
bash также позволяет делать прокрутки недавно запущенных команд, которые хранятся в истории.
Ctrl+P или Up Arrow: Показывает предыдущую введеную команду. Можно несколько раз прожимать, чтобы проходить через историю.
Ctrl+N или Down Arrow: Показывает следующую введеную команду.
bash также имеет особый режим поиска команд которые были введены прежде.
Ctrl+R: Вызывает последнюю команду, которая соответствует введенной ключевой фразе.
Ctrl+O: Запускает найденную команду в этом режиме.
Ctrl+G: Выход из режима.
Режим
Описанные выше команды предполагают использование стандартной конфигурации в терминале. По умолчанию bash использует комбинации в стиле редактора emacs . Можно переключать в режим редактора vi , если он является предпочтительнее.
$ set -o vi # vi mode $ set -o emacs # default mode
Подробное указание команд было взято с данной статьи: link
Git. Краткое руководство по терминалу
Данное краткое руководство демонстрирует основные команды в терминале Bash:
- Bash (Linux/Mac)
- Git Bash (Windows)
Открытие терминала
Первая задача: открыть терминал сразу в нужном каталоге.
Linux
В Linux достаточно щёлкнуть правой кнопкой мыши на каталоге и выбрать пункт меню Open in Terminal или Открыть в терминале :
Mac
В Mac всё немного сложнее, необходимо настроить отображение этого пункта меню в Finder.
Для этого необходимо перейти в Системные настройки , затем пункт меню Клавиатура , в разделе Службы выбрать раздел Файлы и папки и поставить флажок напротив Новый терминал по адресу папки :
После чего при клике правой кнопкой мыши на каталоге появится необходимый пункт меню:
Windows (Git Bash)
В Windows всё достаточно просто — клик правой кнопкой мыши на каталоге и выбор Git Bash Here :
Первоначальная настройка Git
После установки Git первое, что мы сделаем — укажем наши имя и адрес электронной почты. Это важно, потому как этой информацией подписывается каждый коммит (кто сделал изменения и его электронная почта). Для настройки потребуется ввести команды:
$ git config --global user.name "Thorin Oakenshield" $ git config --global user.email ereborsons@stone.com
Если указана опция —global , настройки применятся глобально, то есть для всех ваших действий в системе Git. Без этой опции настройки применяются локально, для текущего репозитория, и не влияют на глобальные настройки.
Пути
Одно окно терминала подразумевает, что вы можете в один момент времени находиться только в одном каталоге, который называется Current Working Directory (текущий каталог), так же как и в одном открытом окне Nautilus , Finder или проводника Windows.
Вы можете выполнять команды относительно текущего каталога или относительно абсолютного пути.
Абсолютный путь — это путь, начинающийся от корня файловой системы. Корень файловой системы обозначается символом / .
Например, в Git Bash (Windows) абсолютный путь для каталога Program Files , будет чаще всего выглядеть следующим образом: /c/Program Files/ .
Для домашнего каталога в Ubuntu (Linux), абсолютный путь будет выглядеть следующим образом: /home/user/ , где user — имя пользователя.
Bash (Git Bash в том числе) используют символ / для разделения каталогов.
Ещё два специальных обозначения помимо корня файловой системы:
- . — обозначает текущий каталог;
- .. — обозначает родительский каталог.
Важно: в терминале символ ` ` (пробел) является символом, разделяющим команды и опции. Поэтому если в пути есть пробел, то варианта два:
- заключать путь в кавычки, то есть «Program Files» ;
- использовать символ backslash для экранирования пробела: Program\ Files .
Переменные окружения
Командная оболочка устанавливает ряд переменных, которые выполняют специфические функции. Так, переменная с именем PATH содержит список путей, в которых будет производиться поиск программы, если вы наберёте её название в терминале.
Для вывода содержимого конкретной переменной используется команда echo следующим образом:
$ echo $PATH
Команда printenv позволяет отобразить все переменные окружения:
$ printenv
Видно, что в переменных окружения содержится достаточно много информации о системе.
Автодополнение
В командных оболочках работает автодополнение по клавише Tab :
- дополняются имена команд;
- дополняются пути.
Используйте автодополнение, так как оно позволяет сократить время на набор команды.
Ключевые команды
В этом разделе будут описаны ключевые команды, необходимые нам для работы. Естественно, список этот далеко не полный.
Текущий рабочий каталог
pwd — сокращение от “Print Working Directory”.
Отображение текущего рабочего каталога:
Смена рабочего каталога
cd — сокращение от “Change Directory”.
Переход в определённый каталог:
path может быть как абсолютным, так и относительным путём.
Например, перейти на каталог выше:
Перейти в подкаталог src :
$ cd src
Если перед путём нет слеша — он трактуется как относительный (относительно текущего каталога).
Листинг каталога
ls — сокращение от “List”.
Отображает листинг (содержимое каталога):
По умолчанию, ls не отображает файлы, начинающиеся с . , например, .gitignore . Для отображения таких файлов нужно использовать флаг -a :
$ ls -a
Создание файлов
Для создания файлов используются специальные программы (например, для создания текстовых файлов — текстовые редакторы).
В рамках рассмотрения Bash мы рассмотрим два текстовых редактора, которые позволят вам создавать и редактировать файлы в псевдографическом режиме.
nano
nano — простой текстовый редактор.
Для того, чтобы создать файл достаточно ввести команду nano и имя файла:
$ nano README.md
Откроется редактор следующего вида:
Пункты меню в нижней части вызываются с помощью горячих клавиш, где символ ^ обозначает клавишу Ctrl .
То есть чтобы записать файл и выйти следует последовательно нажать Ctrl + O (запись) и Ctrl + X (выход).
Редактор nano установлен в большинстве Unix-подобных операционных системах и Git Bash.
Vim
Редактор Vim (a programmer’s text editor) — профессиональный редактор, позволяющий достичь максимальной производительности при работе с любыми текстовыми файлами. Настолько популярен, что для любой графической среды (IDE, текстовых редакторов вроде VS Code, Atom, Sublime) всегда есть плагин, включающий возможность редактирования кода в режиме “Vim Mode”.
На освоение работы в Vim нужно потратить достаточно много времени, для этого вы можете воспользоваться интерактивным учебником vimtutor :
$ vimtutor
Мы лишь скажем, что для выхода из этого редактора (если вы всё-таки осмелились его открыть) нужно нажать клавишу Esc , затем ввести команду :q! — это позволит вам закрыть открытый файл без сохранения изменений.
VS Code
В видео-лекциях используется VS Code. В Windows вы можете правой кнопкой открыть каталог сразу в VS Code.
В Mac OS и Linux вы можете открыть терминал по адресу папки и в терминале выполнить команду code . & , которая откроет выбранный вами каталог в этом редакторе.
Если ни то, ни другое у вас не получилось, то просто откройте VS Code и через File — Open откройте нужный каталог.
Создание каталогов
mkdir — сокращения от “Make Directory”.
Позволяет создавать каталоги (создаст каталог tmp в текущем каталоге):
$ mkdir tmp
Стоит обратить внимание на поведение при создании нового каталога в текущей директории. После команды mkdir name ваше текущее расположение в терминале не изменится. Для того, чтобы работать внутри созданного каталога, в него требуется перейти командой cd name . Это справедливо и при клонировании удалённого репозитория с помощью команды git clone . Полностью склонированный репозиторий создаст каталог в текущей директории с именем проекта, в который нужно перейти командой cd repo_name .
Перемещение файлов и каталогов
mv — сокращение от “Move”.
Перемещение (переименование) файлов и каталогов:
$ mv tmp temp
Удаление файлов и каталогов
rm — сокращение от “Remove”.
10.3 Git изнутри — Ссылки в Git
Если вас интересует история репозитория начиная с определённого коммита, например 1a410e , то для её отображения вы можете воспользоваться командой git log 1a410e , однако при этом вам всё ещё необходимо помнить хеш коммита 1a410e , который является начальной точкой истории. Было бы неплохо, если бы существовал файл, в который можно было бы сохранить значение SHA-1 под простым именем, а затем использовать это имя вместо хеша SHA-1.
В Git такие файлы называются ссылками («references» или, сокращённо, «refs») и расположены в каталоге .git/refs . В нашем проекте этот каталог пока пуст, но в нём уже прослеживается некая структура:
$ find .git/refs .git/refs .git/refs/heads .git/refs/tags $ find .git/refs -type f
Чтобы создать новую ссылку, которая поможет вам запомнить SHA-1 последнего коммита, технически, достаточно выполнить примерно следующее:
$ echo 1a410efbd13591db07496601ebc7a059dd55cfe9 > .git/refs/heads/master
Теперь в командах Git вместо SHA-1 можно использовать только что созданную ссылку:
$ git log --pretty=oneline master 1a410efbd13591db07496601ebc7a059dd55cfe9 Third commit cac0cab538b970a37ea1e769cbbde608743bc96d Second commit fdf4fc3344e67ab068f836878b6c4951e3b15f3d First commit
Тем не менее, редактировать файлы ссылок вручную не рекомендуется, вместо этого Git предоставляет более безопасную команду update-ref на случай, если вам потребуется изменить ссылку:
$ git update-ref refs/heads/master 1a410efbd13591db07496601ebc7a059dd55cfe9
Вот что такое, по сути, ветка в Git — простой указатель или ссылка на последний коммит в цепочке. Для создания ветки, соответствующей предыдущему коммиту, можно выполнить следующее:
$ git update-ref refs/heads/test cac0ca
Данная ветка будет содержать лишь коммиты по указанный, но не те, что были созданы после него:
$ git log --pretty=oneline test cac0cab538b970a37ea1e769cbbde608743bc96d Second commit fdf4fc3344e67ab068f836878b6c4951e3b15f3d First commit
Теперь база данных Git схематично выглядит так, как показано на рисунке:
Рисунок 150. Объекты в каталоге .git, а также указатели на вершины веток
При выполнении команды git branch , в действительности Git запускает команду update-ref , которая добавляет SHA-1 хеш последнего коммита текущей ветки в файл с именем указанной ветки.
HEAD
Как же Git получает хеш последнего коммита при выполнении git branch ? Ответ кроется в файле HEAD.
Файл HEAD — это символическая ссылка на текущую ветку. Символическая ссылка отличается от обычной тем, что она содержит не сам хеш SHA-1, а указатель на другую ссылку.
В некоторых случаях файл HEAD может содержать SHA-1 хеш какого-либо объекта. Это происходит при извлечении тега, коммита или удалённой ветки, что приводит репозиторий в состояние «detached HEAD».
Если вы заглянете внутрь HEAD, то увидите следующее:
$ cat .git/HEAD ref: refs/heads/master
Если выполнить git checkout test , Git обновит содержимое файла:
$ cat .git/HEAD ref: refs/heads/test
При выполнении git commit Git создаёт коммит, указывая его родителем объект, SHA-1 которого содержится в файле, на который ссылается HEAD.
При желании, можно вручную редактировать этот файл, но лучше использовать команду symbolic-ref . Получить значение HEAD этой командой можно так:
$ git symbolic-ref HEAD refs/heads/master
Изменить значение HEAD можно так:
$ git symbolic-ref HEAD refs/heads/test $ cat .git/HEAD ref: refs/heads/test
Символическую ссылку на файл вне .git/refs поставить нельзя:
$ git symbolic-ref HEAD test fatal: Refusing to point HEAD outside of refs/
Теги
Мы рассмотрели три основных типа объектов Git, но есть ещё один. Объект тега очень похож на объект коммита: он содержит имя своего автора, дату, сообщение и указатель. Разница же в том, что объект тега указывает на коммит, а не на дерево. Он похож на ветку, которая никогда не перемещается: он всегда указывает на один и тот же коммит, просто давая ему понятное имя.
Как мы знаем из главы Основы Git, теги бывают двух типов: аннотированные и легковесные. Легковесный тег можно создать следующей командой:
$ git update-ref refs/tags/v1.0 cac0cab538b970a37ea1e769cbbde608743bc96d
Вот и всё, легковесный тег — это ветка, которая никогда не перемещается. Аннотированный тег имеет более сложную структуру. При создании аннотированного тега Git создаёт специальный объект и указывающую на него ссылку, а не просто указатель на коммит. Мы можем увидеть это, создав аннотированный тег, используя опцию -a :
$ git tag -a v1.1 1a410efbd13591db07496601ebc7a059dd55cfe9 -m 'Test tag'
Вот значение SHA-1 созданного объекта:
$ cat .git/refs/tags/v1.1 9585191f37f7b0fb9444f35a9bf50de191beadc2
Теперь выполним git cat-file -p для этого хеша:
$ git cat-file -p 9585191f37f7b0fb9444f35a9bf50de191beadc2 object 1a410efbd13591db07496601ebc7a059dd55cfe9 type commit tag v1.1 tagger Scott Chacon Sat May 23 16:48:58 2009 -0700 Test tag
Обратите внимание, что в поле object записан SHA-1 помеченного коммита. Также стоит отметить, что это поле не обязательно должно указывать на коммит; вы можете пометить любой объект в Git. Например, в исходниках Git сопровождающий проекта добавил свой публичный GPG-ключ в блоб и пометил его. Увидеть этот ключ можно, выполнив команду:
$ git cat-file blob junio-gpg-pub
В репозитории ядра Linux также есть тег, указывающий не на коммит: самый первый тег указывает на дерево первичного импорта.
Ссылки на удалённые ветки
Третий тип ссылок, который мы рассмотрим — ссылки на удалённые ветки. Если вы добавили удалённый репозиторий и отправили в него какие-нибудь изменения, Git сохранит последнее отправленное значение SHA-1 в каталоге refs/remotes для каждой отправленной ветки. Например, можно добавить удалённый репозиторий origin и отправить туда ветку master :
$ git remote add origin git@github.com:schacon/simplegit-progit.git $ git push origin master Counting objects: 11, done. Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 716 bytes, done. Total 7 (delta 2), reused 4 (delta 1) To git@github.com:schacon/simplegit-progit.git a11bef0..ca82a6d master -> master
Позже вы сможете посмотреть, где находилась ветка master с сервера origin во время последней синхронизации с ним, заглянув в файл refs/remotes/origin/master :
$ cat .git/refs/remotes/origin/master ca82a6dff817ec66f44342007202690a93763949
Ссылки на удалённые ветки отличаются от веток (ссылок в refs/heads ) тем, что они считаются неизменяемыми. Это означает, что вы можете переключиться на любую из таких веток с помощью git checkout , но Git не установит HEAD на неё, а значит вы не сможете фиксировать свои изменения в ней с помощью git commit . Git воспринимает удалённые ветки как закладки на последние известные состояния веток на удалённых серверах.
sasstr / Команды в Git Bash консоли
Save sasstr/03d819bd98272ae261dd29ef731e9a6f to your computer and use it in GitHub Desktop.
Команды в Git Bash консоли
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Команды в Git Bash консоли |
clear — Очистить консоль |
Навигация |
pwd — Показать текущий каталог |
ls — Показать файлы в данной папке, кроме скрытых |
ls -f — Показать файлы в данной папке, включая и скрытые |
cd c:/ — Перейти в конкретный каталог |
cd — — Вернуться назад |
cd .. — Выйти на 1 уровень вверх |
cd ../.. — Выйти на 2 уровня вверх |
Создание каталогов |
mkdir — Создать папку |
cd !$ — Перейти в только что созданную папку |
mkdir -p — Создать сразу несколько папок |
mkdir -p app/ — Создать сразу несколько вложенных папок |
Создание файлов |
touch index.html — Создать файл index.html |
touch app/ — Создать сразу несколько файлов, никаких лишних пробелов быть не должно |
Удаление файлов |
touch — позволяет создавать файлы |
rm test — Удалить пустую папку test |
rm -r test — Удалить папку test с файлами внутри неё |
Перемещение файлов |
mv app1/*.* app2 — Переместить все файлы из папки app1 в папку app2 |
jt3k commented Jun 26, 2020 •
Почему все вокруг копируют на разбираясь cd c:/ ?
Я не уверен но по-моему это команда для шиндовс указывающая на переход в корень диска цэ.
Но баг как правило в юникс-подобных операционных системах, а в юнткс-подобных ос никаких дисков цэ не существует
petroDavydov commented Nov 28, 2021 •
У мен сработало в Bash cd d:/
jt3k commented Dec 6, 2021 •
Ну ок, тогда ладно. У меня в линуксах не сработает
AntooxaD commented Apr 15, 2022 •
ls — Показать файлы в данной папке, кроме скрытых
ls -f — Показать файлы в данной папке, включая и скрытые
НАОБОРОТ. ls — показывает все файлы и скрытые! А ls -f все кроме скрытых! По крайней мере у меня так на виндовс! может на Mac по другому
MaxOnRem commented Sep 18, 2022
нет, всё написано правильно, флаг показывает все включая скрытые, а еще команда ls -a так же работает
jt3k commented Oct 10, 2022 •
нет, всё написано правильно, флаг показывает все включая скрытые, а еще команда ls -a так же работает
в версии под мак вот такая справка для этих ключей:
-a Include directory entries whose names begin with a dot (‘.’). -f Output is not sorted. This option turns on -a. It also negates the effect of the -r, -S and -t options. As allowed by IEEE Std 1003.1-2008 (“POSIX.1”), this option has no effect on the -d, -l, -R and -s options.
тоись
-а выводит вам скрытые директории(и файлы) те что начинаются с точки. При этом будет произведена сортировка
-f выводит то же что и -a но без любой сортировки (инфа 21%)
ZdraviiSmisl commented Jun 21, 2023 •
Может, стоило указаать , что нужно указывать абсолютный путь для дериктории в которую перещаете файлы? Для комманды перемещения всех файлов из одной папки в другую
mv: cannot stat ’01-starting-setup/.‘: No such file or directory
89610090091 commented Jun 21, 2023 via email
Добрый день! Скорее сообщение было адресовано не мне, хотя с git bash знаком сам. Может сообщение было важным, отправьте в нужный адрес. ср, 21 июн. 2023 г., 17:29 Evgeniy Arapov ***@***.***>:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Footer
© 2024 GitHub, Inc.
You can’t perform that action at this time.