Дэн Щербаков ⚛️
95 subscribers
20 photos
49 links
Канал для фронтенд-разработчиков о том, как развиваться и увеличивать зарплату.

Senior Frontend Developer с 6 годами опыта. За этот период увеличил зарплату почти в 7 раз.

Начинайте тут: https://yangx.top/code_lab/280
加入频道
Командная строка - памятка по навигации:

- mkdir: создать папку
- touch: создать файл
- ls: показать содержимое директории
- cd some-path - переместиться в указанную папку
- cd .. - подняться на уровень выше

Продвинутое:
- Создать вложенную структуру папок: mkdir -p some-folder/{one,two,three}. Важно: между аргументами в {} не должно быть пробелов!

#bash
Bash-скрипты

В работе с командной строкой программист зачастую должен выполнять одни и те же команды - например, при разворачивании нового проекта. Автоматизировать рутину помогут консольные скрипты. Я пользуюсь Git Bash, речь пойдёт о нем.

1. Создаем файл скрипта, например, project.sh.
2. Пишем в первой строке:
#!/bin/bash
3. Перечисляем построчно необходимые команды. Например:
touch gulpfile.js .gitignore
mkdir -p src/{scss,js,img,fonts} dest
4. Запускаем скрипт в консоли:
./project.sh

Bash - полноценная среда программирования с условными выражениями и переменными, но в целом, чтобы не заморачиваться, можно ограничиться просто перечислением команд.

#bash
Консоль - базовая теория:

- Терминал - это "эмулятор физического терминала", то есть, устройства ввода.

- Командная оболочка - не синоним терминала: терминал открывает оболочку внутри себя.

- Схема работы с консолью:
Пользователь -> физический терминал -> [виртуальный терминал -> командный интерпретатор -> программы]
В скобки взяты части unix-based OS.

- REPL - синоним командной оболочки, расшифровывается как Read-Eval-Print-Loop и описывает интерактивную сессию с пользователем.

- Команда pwd выводит путь к текущей директории и рашифровывается соответственно: "print working directory".

- $ pwd и $ echo $PWD работают схоже.

- Выражение через одну точку -
./hello
- означает в unix-системах, буквально, "каталог в текущей директории". Заметно сходство с модулями в Node: используется тот же принцип работы с файловой системой.

#bash #unix
Консоль - продолжение:

- Знак "~" - шорткат для абсолютного пути к домашнему каталогу. С ним можно быстро перейти к любому подкаталогу домашней директории из любого места:

cd ~/MyDirectory

- Команда ls принимает название директории. Так можно рассмотреть каталог, не переходя в него.

- CLI расшифровывается как command line interface, или интерфейс командной строки.

- Команда ls c флагом -a покажет скрытые файлы.

- ...c флагом -l покажет дополнительное инфо по файлам.

- Флаги можно миксовать:
ls -la или -l -a

- Как правило, флаги указываются до аргументов:
ls -la MyFolder

- Команда man имя-команды выведет справку по команде - алиасы, флаги и все прочее. Отмечу, это очень удобно!

- Для навигации по мануалу используют:
- f (forward) - вперед,
- b (backward) - назад,
- q (quit) - выход
Это не флаги, а кнопки.

#bash #unix
Консоль, часть III:

- Почти всегда флаги имеют короткую и длинные версии:
-d === —directory
-H === —derefernce-command-line
Разница в областях применения. Для команд в консоли удобнее применять короткие флаги, для bash-скриптов - более наглядные длинные.

- Из предыдущего пункта вытекает: понять смысл сокращенных флагов несложно и без мануала - часто они повторяют первые буквы своих полных версий. Pre-intermediate хватит за глаза.

- Некоторые опции принимают параметры, как функции - аргументы. Это выглядит, например, так:
$ command -c=parameter
$ commend -c parameter
Специфику таких опций всегда можно найти с помощью RTFM. :)

- Пример сложной команды:
ls -lS --time-style=long-iso /var
Что здесь происходит:
1. Задана команда ls.
2. Ей присвоены флаги:
-l
-S - сортировка с тонкой настройкой
—time-style - параметр -S, в свою очередь, принявший параметр "long-iso" (без кавычек!).
3. В конце передан путь к директории.
Как результат - файлы, отсортированные по размеру, с подробным выводом и специфичным форматированием времени.

P.S.: спасибо всем за фидбеки по ошибке с CLI. Вы супер! ✌️

#bash #shell
Консоль, часть VI:

- Команда cat [file] позволяет открыть и читать файл.

- Команда head [file] выводит первые десять строк файла. Флаг -n позволяет настраивать это значение:
head -n 2 file
...выведет две первые строки в файле.

- Команда tail выведет последние строки в файле. Ею же можно создать динамический вывод лога:
tail -f file
...будет выводить содержимое файла по мере его наполнения.

- Команда less - "пейджер" для чтения файлов. Загружает в память только видимую на экране часть в режиме рид-онли, поэтому работает быстрее cat.

- В less есть команда /. Она служит для поиска по файлу. Навигация по поиску:
f - вперед на страницу
b - назад на страницу
n - предыдущий результат поиска
N - следующий

#bash
UNIX - факты о файловой системе:

1. В UNIX только одно файловое дерево. Windows создает их несколько - на каждый физический или логический носитель.
2. Домашняя категория - это не корень системы, а директория пользователя. Из неё можно попасть в корень, перейдя на два уроня ниже.
3. В отличие от Windows, здесь расширения файлов - часть их имен.
4. Регистр имеет значение!

#Unix, #bash
Командная строка - grep:

Grep - поисковик по директориям и файлам. Ищет по строкам или регулярным выражениям.

Запрос выглядит, например, так:

$ grep something .file

Команда вернет все вхождения паттерна something в файле .file.

Греп принимает множество опций. Из них особо часто применяются опции контекста и рекурсивного обхода.

- Опции контекста:
-B, -A, -C
Они же
—before-context
—after-context
—context
В свою очередь, эти опции принимают числа. Они задают количество строк, которые консоль выведет до, после или по обе стороны от искомой строки.

- Опции обхода:
-R - опция рекурсивного обхода директорий со всеми поддиректориями. Полезно, если неизвестен файл для поиска, но известна директория.
-Rn - рекурсивно обойдет директории, а заодно укажет номер строки, где совпадение найдено.

Примеры:
$ grep -C 2 something .file
$ grep -R something directory

#bash
Командная строка - Vim, Nano
...или как перестать бояться тупиков в Git и начать жить

- В редакторах Linux, в которые входит и Vim, используется навигация через CTRL + {key}. Например, CTRL + X закроет редактор.

- В подсказках CTRL обозначается как символ ^. Соответственно, Git сам объясняет, как выйти из редактора.

- Главное отличие Vim - у него есть разные режимы:
- режим команд (по-умолчанию)
- режим редактирования: войти - клавиша i, выйти - ESC или ^[
- Визуальный режим
- Режим командной строки.

- Как выйти из Vim?!!1 - вопрос миллионов.
Есть два основных выхода:
1. ^X
2. :q в режиме команд.

А выйти с сохранением можно через :wq.

#bash
Bash - управление потоками

Вывод программ можно не только выводить на экран, но и писать в файл. И наоборот. Делается это операторами:

< > >>

< - выводит на экран;
> - записывает в файл (с перезаписью)
>> - добавляет в существующий файл

Эти операции связаны с потоками ОС. Вот эти потоки:
STDIN (файловый дескриптор 0) (прием данных в процесс)
STDOUT (ф.д.1) (вывод данных из процесса)
STDERR (ф.д.2) (вывод ошибок)

Вывод ошибок отделен от обычного вывода для удобного их логгирования. Потоки можно перенаправлять друг в друга, но это не очень существенная информация для фронтенда.

Еще один, очень важный оператор для консольных команд - это пайп. Выглядит он как вертикальная черта: " | ".
Его задача - передавать данные из одной программы в другую на манер конвейера.
Пайп применяется, потому что, как и в NodeJS, UNIX придерживается принципа атомарности программ. Лучше соединить несколько grep пайпом, чем усложнять сам grep.

Пример:

$ grep hello | grep world // выведет все совпадения по hello и world

#bash