# list - покажи список файлов и директорий
ls
# -a включая скрытые файлы
# -l подробную информацию о файлах
# -s размеры файлов
# -lh подробную информацию о файлах, включая их размеры в удобочитаемом формате
ls -lh
# change directory - измени (текущую) директорию
cd [dirname]
# .. поднимись на 1 уровень вверх
# ../.. на 2 уровня
# - вернись к предыдущей директории
# / перейди в корневую директорию
# ~ перейди в домашнюю директорию
# !$ перейди в директорию, созданную с помощью mkdir
mkdir test
cd !$
# make directory - создай директорию
mkdir [dirname]
mkdir test
# remove directory - удали директорию
rmdir [name]
rmdir test
# создай файл
touch [filename]
touch test.txt
# remove - удали файл
rm [filename]
# -r удали директорию
# -f принудительно
# * [dirname] удали все файлы в директории
rm test.txt
rm -rf test
# покажи содержимое файла
cat [filename]
cat test.txt
# создай файл посредством объединения
cat test1.txt test2.txt > test3.txt
# покажи полный путь к текущей (рабочей) директории
pwd
# copy - копируй файл
cp [source] [destination]
# -r директорию со всеми файлами
# -n если destination уже существует, не перезаписывай его
# -u source, только если он отличается от destination
# -f удали destination и создай новый файл
# -a архивируй файл
# move - перемести файл
mv [source] [destination]
# архивируй файл или директорию
zip [dirname]
# -r не удаляй директорию после архивации
# -m удали директорию после архивации
# -d удали файл, содержащийся в архиве
# -u обнови файл, содержащийся в архиве
# разархивируй файл или директорию
unzip [dirname]
# -x [filename] исключи файл из директории при деархивации
# найди строку в файле
grep [search] [filename]
grep 'test' test.txt
# -i выполняй поиск без учета регистра
# -c покажи количество вхождений строки
# -l покажи список файлов, содержащих строку
# -n покажи номер строки, на которой встречается строка для поиска
# search
find [dirname] [options] [search]
# dir:
# / вся система
# . рабочая директория
# ~ домашняя директория
# options:
# -name
# -user
# -size
# -type -d поиск только в директориях
# -type -f поиск только в файлах
find . -name 'test'
# покажи список последних команд (по умолчанию 50)
history [number]
# clear - очисти терминал
clear
# создай или распакую сжатый архив
tar [command] [name] [path]
# создай
tar cvzf test.tar.gz /path/to/dir
# распакуй
tar xvzf test.tar.gz
# x извлеки файлы
# c создай архив
# v мне нужны детали
# z распакуй архив
# f создай архив с указанным именем
# покажи объем используемой директорией памяти
du
# -sh в удобочитаемой форме
# -sh * для каждой директории и файла в отдельности
# покажи текущие сетевые соединения
netstat
ssh [hostname_or_ip]
ssh 192.168.56.10
ssh test.server.com
# Аутентификация
ssh username@hostname_or_ip
# -p port
# Генерация ключей
ssh-keygen -t rsa
# Отправка публичного ключа на сервер
ssh-copy-id [hostname_or_ip]
# | pipe или туннель: позволяет соединять несколько команд в одну
# > означает создание файла (существующие файлы перезаписываются)
# >> означает добавление данных в файл (если файл отсутствует, он создается)
# < означает отправку содержимого файла в команду
# GET
curl https://jsonplaceholder.typicode.com/todos/1
# Только заголовки
curl -I https://jsonplaceholder.typicode.com
# POST
curl -d "some_key1=some_value1&some_key2=some_value2" https://jsonplaceholder.typicode.com/todos
# -d данные
# в формате JSON
# -H заголовок
curl -H 'Content-Type: application/json' -d '{ "someKey1": "someVal1", "someKey2": "someVal2" }' https://jsonplaceholder.typicode.com/todos
# Метод запроса
curl -X PUT ...
# Аутентификация
curl -u username:password ...
# Скачивание файла
# С сохранением оригинального названия
curl -O https://example.com/some_file.pdf
# Переименование
curl -o my_file https://example.com/some_file.pdf
# Продолжение загрузки
curl -C - -O https://example.com/some_file.pdf
# Сохранить как HTML
curl https://www.google.com > google.html
# Загрузка файла
# multipart/form-data
curl -F @field_name=@path/to/some_file.png
# FTP
curl -u username:password -T my_file.png ftp://ftp.example.com
# Отправка email
curl --mail-from from@mail.com --mail-rcpt to@mail.com smtp://example.com
Символ |
означает ИЛИ
Проверка установки
git --version
Справка
git help
git help [command]
git [command] --help | -h
Минимальные настройки
// --local - настройки для текущего репозитория
// --global - настройки для текущего пользователя
// --system - настройки для всей системы, т.е. для всех пользователей
git config --global user.name "My Name"
git config --global user.email "myemail@example.com"
Дополнительные настройки
// список глобальных настроек
git config --list | -l --global
// редактирование глобальных настроек
git config --global --edit | -e
Инициализация репозитория
git init
Очистка репозитория
// -d - включая директории, -x - включая игнорируемые файлы, -f - принудительная
git clean | -dxf
Удаление файлов и директорий
git rm [file-name]
git rm -r [dir-name]
git rm --force | -f
Перемещение файлов
// git add + git remove
git mv [old-file] [new-file]
Просмотр состояния репозитория
git status
Добавление изменений
git add [file-name]
git add --force | -f
// все изменения
git add . | --all | -A
// для добавления пустой директории
// создаем в ней пустой файл `.gitkeep`
Добавление сообщения (коммита)
// редактирование коммита
git commit
// коммит для одного изменения, если не выполнялось git add . | -A
// если выполнялось, сообщение будет добавлено для всех изменений
git commit --message | -m "My Message"
// для всех изменений, если git add [file-name] выполнялось несколько раз
git commit --all | -a -m | -am "My Message"
// исправление коммита
git commit --amend "My Message" | --no-edit
Просмотр коммита
// последний коммит
git show
// другой коммит
git show [hash] // 4 и более первых символа
// поиск изменений по сообщению или его части
git show :/[string]
// поиск коммита по тегу
git show [tag-name]
Просмотр разницы между коммитами
git diff HEAD | @
// HEAD - как правило, текущая ветка; @ - синоним для HEAD
// staged
git diff --staged | --cached
git diff [hash1] [hash2]
// разница между ветками
git diff [branch1]...[branch2]
// просмотр разницы между коммитами при редактировании сообщения
git commit --verbose | -v
// кастомизация выводимого сообщения
git diff --word-diff | --color-words
Просмотр истории изменений
git log
// n - количество изменений
git log -n
// --since, --after - после
// --until, --before - до
// разница
git log -p
// быстрое форматирование
git log --graph --oneline --stat
// кастомизация вывода
git log --pretty=format
// пример
git log --pretty=format:'%C(red)%h %C(green)%cd %C(reset)| %C(blue)%s%d %C(yellow)[%an]' --date=short | format-local:'%F %R'
// поиск изменений по слову, файлу, ветке; i - без учета регистра
git log --grep | -G [string] | [file] | [branch] & -i
// поиск по нескольким строкам
git log --grep [string1] --grep [string2] --all-match
// поиск в определенном блоке файла
git log -L '/<head>/','/<\/head>/':index.html
// поиск по автору
git log --author=[name]
Отмена изменений
git reset
// --hard - включая рабочую директорию и индекс
// --soft - без рабочей директории и индекса
// --mixed - по умолчанию: без рабочей директории, но с индексом
git reset --hard [hash] | @~ // @~ - последний коммит в HEAD
// аналогично
git reset --hard HEAD
// не путать с переключением ветки
git checkout
git restore
Работа с ветками
// список веток
git branch
// создание ветки
git branch [branch-name]
// переключение на ветку
git checkout [branch-name]
// branch + checkout
git checkout -b [branch-name]
// переименование ветки
git branch -m [old-branch] [new-branch]
// удаление ветки
git branch -d [branch-name]
// слияние веток
git merge [branch-name]
Разрешение конфликтов при слиянии
// обычно, при возникновении конфликта, открывается редактор кода
// принять изменения из сливаемой ветки
git checkout --ours
// принять изменения из текущей ветки
git checkout --theirs
// отмена слияния
git reset --merge
git merge --abort
// получение дополнительной информации
git checkout --conflict=diff3 --merge [file-name]
// продолжить слияние
git merge --continue
Удаленный репозиторий
// клонирование
git clone [url] & [dir]
// просмотр
git remote
git remote show
git remote add [shortname] [url]
git remote rename [old-name] [new-name]
// получение изменений
// git fetch + git merge
git pull
// отправка изменений
git push
Теги
// просмотр
git tag
// легковесная метка
git tag [tag-name]
//пример
git tag v1-beta
// аннотированная метка
git tag -a v1 -m "Version 1"
// удаление
git tag -d [tag-name]
Отладка
git bisect
git blame
git grep
Сохранение незакоммиченных изменений
// сохранение
git stash
// извлечение
git stash pop
Копирование коммита
git cherry-pick | -x [hash]
// если возник конфликт
// отмена
git cherry-pick --abort
// продолжить
git cherry-pick --continue
git cherry-pick --no-commit | -n
// --cherry = --cherry-mark --left-right --no-merges
git log --oneline --cherry [branch1] [branch2]
Перебазирование
git rebase [branch]
// при возникновении конфликта
// отмена
git rebase --abort
// пропустить
git rebase --skip
// продолжить
git rebase --continue
// предпочтение коммитов слияния
git rebase --preserve-merges | -p
// интерактивное перебазирование
git rebase -i [branch]
Автоматическое разрешение повторных конфликтов
// rerere - reuse recorder resolution
// rerere.enabled true | false
// rerere.autoUpdate true | false
// rerere-train.sh - скрипт для обучения rerere
git rerere forget [file-name]
Обратные коммиты
git revert @ | [hash]
// отмена слияния
// git reset --hard @~ не сработает
git revert [hash] -m 1
// git merge [branch] не сработает
// отмена отмены
git revert [hash]
// повторное слияние с rebase
git rebase [branch1] [branch2] | --onto [branch1] [hash] [branch2]
git merge [branch]
git rebase [hash] --no-ff
Пример сокращений для .gitconfig
[alias]
aa = add .
cb = checkout -b
cm = commit -m
lp = log --pretty=format:'%C(red)%h %C(green)%cd %C(reset)| %C(blue)%s%d %C(yellow)[%an]' --date=short
Проверка установки
npm --version | -v
Обновление
npm i -g npm@latest
Список доступных команд
npm help
npm help [command]
Инициализация проекта
npm init
// auto
npm init --yes | -y
Установка зависимостей
npm install | i
// проверка конкретной зависимости
npm explore [package]
// проверка всех зависимостей
npm doctor
// очистка
npm ci
Принудительная переустановка зависимостей
npm i --force | -f
Установка только продакшн-пакетов
npm i --only=production | --only=prod
Добавление зависимости
npm i [package]
npm i [package@version]
// пример
npm i express
Добавление зависимости для разработки
npm i --save-dev | -D [package]
// пример
npm i -D nodemon
Обновление зависимости
npm update | up [package-name]
Удаление зависимости
// dependency
npm remove | rm | r [package]
// devDependency
npm r -D [package]
Глобальная установка/обновление/удаление пакета
npm i/up/r -g [package]
// пример
npm i -g create-react-app
// использование
create-react-app [app-name]
Определение устаревших пакетов
npm outdated
npm outdated [package]
Список установленных зависимостей
npm list | ls
// top level
npm ls --depth=0 | --depth 0
// global + top level
npm ls -g --depth 0
Информация о пакете
npm view | v [package]
// пример
npm v react
npm v react.description
Запуск скрипта/выполнение команды
npm run [script]
// пример
// package.json: "scripts": { "dev": "nodemon server.js" }
npm run dev
npm start
npm stop
Удаление дублирующихся пакетов
npm dedupe | ddp
Удаление посторонних пакетов
npm prune
Обнаружение уязвимостей (угроз безопасности)
npm audit
// json
npm audit --json
// plain text
npm audit --parseable
Автоматическое исправление уязвимостей
npm audit fix
Установка
npm i -g yarn
Команда yarn dlx
позволяет запускать исполняемые файлы без установки: yarn dlx create-react-app my-app
. Для этого yarn
необходимо обновить до второй версии: yarn set version berry
.
Проверка установки
yarn --version | -v
Обновление
yarn set version latest
Список доступных команд
yarn help
yarn help [command]
Инициализация проекта
yarn init
// auto
yarn init --yes | -y
// "private": true
yarn init --private | -p
// auto + private
yarn init -yp
Установка зависимостей
yarn
// или
yarn install
// тихая установка
yarn install --silent | -s
// проверка файлов перед установкой
yarn --check-files
Принудительная переустановка зависимостей
yarn install --force
Установка только продакшн-пакетов
yarn install --production | --prod
Добавление зависимости
yarn add [package]
yarn add [package@version]
// пример
yarn add express
// тихая установка
yarn add --silent
// или
yarn add -s
Добавление зависимости для разработки
yarn add --dev | -D [package]
// пример
yarn add -D nodemon
Обновление зависимости
yarn upgrade [package]
Удаление зависимости
yarn remove [package]
Глобальная установка/обновление/удаление пакета
yarn global add/upgrade/remove [package]
// пример
yarn global add create-react-app
// использование
create-react-app [app-name]
Список установленных зависимостей
yarn list
// top level
yarn list --depth=0 | --depth 0
Информация о пакете
yarn info [package]
// или
yarn why [package]
// пример
yarn info react
yarn info react description
yarn why webpack
Запуск скрипта/выполнение команды
yarn [script]
// или
yarn run [script]
// пример
// package.json: "scripts": { "dev": "nodemon server.js" }
yarn dev
{
"name": "my-app",
"version": "1.0.0",
"description": "This is My App",
"keywords": [
"awesome",
"best",
"useful"
],
"private": true,
"main": "server.js",
"license": "MIT",
"homepage": "https://example.com",
"repository": {
"type": "git",
"url": "https://github.com/user/repo.git"
},
"repository": "github:user/repo",
"author": {
"name": "My Name",
"email": "myemail@example.com",
"url": "https://example.com"
},
"author": "My Name <myemail@example.com> (https://example.com)",
"contributers": [
{
"name": "His Name",
"email": "hisemail@example.com",
"url": "https://friend-website.com"
}
],
"contributors": "His Name <hisemail.com> (https://friend-website.com)",
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^2.0.4"
},
"scripts": {
"start": "react-scripts start",
"dev": "nodemon server.js"
}
}
name
- название проектаversion
- версия проекта (см. версионирование)description
- описание проекта (зачем нужен пакет?)keywords
- ключевые слова (облегчает поиск в реестреnpm
)private
- установка значения вtrue
предотвращает случайную публикацию пакета в реестреnpm
main
- основная точка входа для запуска проектаrepository
- ссылка на репозиторий (один из вариантов)author
- автор проекта (один из вариантов)contributors
- участники проекта (люди, внесшие вклад в проект)dependencies
- зависимости проекта (пакеты, без которых приложение не будет работать)devDependencies
- зависимости для разработки (пакеты, без которых приложение будет работать)scripts
- команды (выполняемые сценарии, задачи), предназначенные для автоматизации, например, командаyarn dev
запуститnodemon server.js
Файлы "package-lock.json" и "yarn.lock" содержат более полную информацию об установленных пакетах, чем package.json, например, конкретные версии пакетов вместо диапазона допустимых версий.
Версионирование
Каждый пакет имеет версию, представленную тремя цифрами (например, 1.0.0
), где первая цифра - мажорная версия (major
), вторая - минорная (minor
), третья - патчевая (patch
). Выпуск новой версии называется релизом.
Увеличение каждой из этих цифр согласно правилам семантического версионирования (semver
) означает следующее:
major
- внесение несовместимых с предыдущей версией измененийminor
- новая функциональность, совместимая с предыдущей версиейpatch
- исправление ошибок, незначительные улучшения
Диапазоны версий или допустимые релизы определяются с помощью следующих операторов (компараторов):
*
- любая версия (аналогично пустой строке)<1.0.0
- любая версия, которая меньше1.0.0
<=1.0.0
- любая версия, которая меньше или равна1.0.0
>1.0.0
- любая версия, которая больше1.0.0
>=1.0.0
- любая версия, которая больше или равна1.0.0
=1.0.0
- только версия1.0.0
(оператор=
можно опустить)>=1.0.0 <2.0.0
- больше или равно1.0.0
и меньше2.0.0
1.0.0-2.0.0
- набор версий включительно^1.0.0
- минорные и патчевые релизы (>=1.0.0 <2.0.0
)~.1.0.0
- только патчевые релизы (>=1.0.0 <1.1.0
)