diff --git a/.vuepress/configs/sidebar/ru.ts b/.vuepress/configs/sidebar/ru.ts index 7720a5a3ba..c0750f4078 100644 --- a/.vuepress/configs/sidebar/ru.ts +++ b/.vuepress/configs/sidebar/ru.ts @@ -8,19 +8,25 @@ export const sidebarRU: SidebarConfig = { link: '/ru/book/README.md', collapsible: false, }, - // { - // text: 'Начало работы', - // link: '/ru/book/getting_started.md', - // collapsible: false, - // children: [ - // '/ru/book/installation.md', - // '/ru/book/default_shell.md', - // '/ru/book/quick_tour.md', - // '/ru/book/moving_around.md', - // '/ru/book/thinking_in_nu.md', - // '/ru/book/cheat_sheet.md', - // ], - // }, + { + text: 'Установка', + link: '/ru/book/installation.md', + collapsible: false, + children: ['default_shell.md'], + }, + { + text: 'Начало работы', + link: '/ru/book/getting_started.md', + collapsible: false, + children: [ + // '/ru/book/installation.md', + // '/ru/book/default_shell.md', + '/ru/book/quick_tour.md', + '/ru/book/moving_around.md', + // '/ru/book/thinking_in_nu.md', + // '/ru/book/cheat_sheet.md', + ], + }, // { // text: 'Основы Nu', // link: '/nu_fundamentals.md', diff --git a/ru/book/README.md b/ru/book/README.md index 371530ecd7..db0f4fc9ee 100644 --- a/ru/book/README.md +++ b/ru/book/README.md @@ -15,6 +15,7 @@ Nu берет пример со многих знакомых мест: трад Книга разделена на главы, которые далее разбиты на разделы. Вы можете нажать на заголовки глав, чтобы получить более подробную информацию о них. +- [Установка](installation.md), конечно же, поможет вам установить Nushell на вашу систему. - [Начало работы (EN)](/book/getting_started.md) научит вас, как установить Nushell, и покажет вам, что к чему. В ней также объясняются некоторые принципы проектирования, по которым Nushell отличается от типичных оболочек, таких как bash. - [Основы Nu (EN)](/book/nu_fundamentals.md) объясняет основные понятия языка Nushell. - [Программирование в Nu (EN)](/book/programming_in_nu.md) более глубоко погружает в особенности языка и показывает несколько способов организации и структурирования вашего кода. diff --git a/ru/book/default_shell.md b/ru/book/default_shell.md new file mode 100644 index 0000000000..4924e1a6f3 --- /dev/null +++ b/ru/book/default_shell.md @@ -0,0 +1,31 @@ +# Оболочка по умолчанию + +## Настройка Nu как оболочка по умолчанию в вашем терминале + +| Терминал | Платформа | Инструкции | +| :--------------: | ------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| GNOME Terminal | Linux & BSDs | Открыть `Edit > Preferences`. В правой панели выберите вкладку `Command`, поставке галочку возле пункта `Run a custom command instead of my shell`, в поле `Custom command` укажите путь к расположению директории Nu. | +| GNOME Console | Linux & BSDs | Введите команду `gsettings set org.gnome.Console shell "['/usr/bin/nu']"` (замените `/usr/bin/nu` на путь расположения директории Nu). Эквивалентно, используйте [dconf Editor](https://apps.gnome.org/DconfEditor/) чтобы отредактировать ключь `/org/gnome/Console/shell`. | +| Kitty | Linux & BSDs | Нажмите `Ctrl`+`Shift`+`F2` чтобы открыть `kitty.conf`. Перейдите в раздел `shell`, расскоментируйте строку и замените `.` на путь расположения директории Nu. | +| Konsole | Linux & BSDs | Откройте `Settings > Edit Current Profile`. В поле `Command` укажите путь к расположению директории Nu. | +| XFCE Terminal | Linux & BSDs | Откройте `Edit > Preferences`. поставте галочку `Run a custom command instead of my shell`, в поле `Custom command` укажите путь к расположению директории Nu. | +| Terminal.app | macOS | Откройте `Terminal > Preferences`. Убедитесь что вы находитесь на вкладке `Profiles`, которая должна быть выбрана по умолчанию. В правой панели выберите вкладку `Shell`. поставте галочку возде пункта `Run command`, введите путь к Nu в текстовое поле, и снемите влажок `Run inside shell`. | +| iTerm2 | macOS | Открой `iTerm > Preferences`. выбери вкладку `Profiles`. В правой части панели под текстом `Command`, в выпадающем меню измени `Login Shell` на `Custom Shell`, и вставь в текстовое поле путь к расположению директории Nu. | +| Windows Terminal | Windows | Нажми `Ctrl`+`,` для открытия `Settings`. Перейди `Add a new profile > New empty profile`. Заполни 'Name' и укажите путь к расположению директории Nu в текстовое поле 'Command line'. Перейди в настройки `Startup` и выбери Nu как 'профиль по умолчанию'. Нажми кнопку `Save`. | + +## Настройка Nu как login shell (Linux, BSD и macOS) + +::: warning +Nu не предназначен для обеспечения совместимости с POSIX. +Имейте в виду, что некоторые программы в вашей системе (или из документация) могут предпологать что ваша оболочка входа в систему совместима с [POSIX](https://en.wikipedia.org/wiki/POSIX). +Нарушение этого предположения может привести к неожыданным проблемам. Дополнительные сведения см. в разделе [Конфигурация - Login Shell](./configuration.md#configuring-nu-as-a-login-shell). +::: + +Чтобы установить login shell вы можете воспользоваться командой [`chsh`](https://linux.die.net/man/1/chsh). +Некоторые дистрибутивы Linux имеют список доступных оболочек, расположенных в `/etc/shells` и запрещают изменять оболочку пока Nu в белом списке (whitelist). +Вы можете увидить ошибку, подобную приведенной ниже, если вы не обновили файл `shells`: + +@[code](@snippets/installation/chsh_invalid_shell_error.sh) + +Вы можете добавить Nu в список разрешенных оболочек, добавив свой бинарник Nu в файл `shells`. +Путь к добавлению можно найти с помощью команды `which nu`, обычно это `$HOME/.cargo/bin/nu`. diff --git a/ru/book/getting_started.md b/ru/book/getting_started.md new file mode 100644 index 0000000000..e1ae475e3e --- /dev/null +++ b/ru/book/getting_started.md @@ -0,0 +1,7 @@ +# Начало работы + +Давайте начнем! :elephant: + +В следующих разделах вы получите [краткий обзор Nushell с примерами](quick_tour.md) (включая то, как получить помощь из Nushell) и узнаете, как [перемещаться по файловой системе](moving_around.md). + +Затем, поскольку Nushell принимает некоторые дизайнерские решения, которые довольно отличаются от типичных оболочек или динамических языков сценариев, обязательно ознакомьтесь с разделом [Думать в Nu](thinking_in_nu.md), где мы объясняем некоторые из этих концепций. diff --git a/ru/book/installation.md b/ru/book/installation.md new file mode 100644 index 0000000000..3a3cbd6415 --- /dev/null +++ b/ru/book/installation.md @@ -0,0 +1,141 @@ +# Установка Nu + +Существует множество способов чтобы получить Nu и работать. Вы можете скачать предварительно собранный двоичные файлы с нашей [страница релиза](https://github.com/nushell/nushell/releases), [использовать ваш любимый менеджер пакетов](https://repology.org/project/nushell/versions), или собрать из исходника. + +Главный двоичный файл Nushell называется `nu` (или `nu.exe` в Windows). После установки, вы можете запустить его, набрав `nu`. + +@[code](@snippets/installation/run_nu.sh) + +[[toc]] + +## Предварительно собранные двоичные файлы + +[С каждым релизом на GitHub](https://github.com/nushell/nushell/releases) публикуются двличные файлы Nu для Linux, macOS, и Windows. Просто загрузите, распакуйте двоичный файл, а затем скопируйте путь в ваше переменное окружения PATH. + +## Менеджер пакетов + +Nu доступен через нескольких пакетных менеджеров: + +[![Packaging status](https://repology.org/badge/vertical-allrepos/nushell.svg)](https://repology.org/project/nushell/versions) + +Для macOS и Linux, [Homebrew](https://brew.sh/) популярный выбор (`brew install nushell`). + +Для Windows: + +- [Winget](https://docs.microsoft.com/en-us/windows/package-manager/winget/) (`winget install nushell`) +- [Chocolatey](https://chocolatey.org/) (`choco install nushell`) +- [Scoop](https://scoop.sh/) (`scoop install nu`) + +Кросс-платформенная установка: + +- [npm](https://www.npmjs.com/) (`npm install -g nushell` Примечание. Плагин nu не входить в комплект, если вы устанавливает их таким образом) + +## Образ docker контейнера + +Docker образ доступен из реестра контейнеров GitHub. Образ последней версии регулярно собирается +для Alpine и Debian. Вы можете запустить образ в интерактивном режиме, используя: + +```nu +docker run -it --rm ghcr.io/nushell/nushell:- +``` + +Где `` - это версия Nushell, которую вы хотите запустить, а `` - это `alpine` или последний поддерживаемый выпуск Debian, например `bookworm`. + +Чтобы запустить определенную команду, используйте: + +```nu +docker run --rm ghcr.io/nushell/nushell:latest-alpine -c "ls /usr/bin | where size > 10KiB" +``` + +Чтобы запустить скрипт из текущего каталога с помощью Bash, используйте: + +```nu +docker run --rm \ + -v $(pwd):/work \ + ghcr.io/nushell/nushell:latest-alpine \ + "/work/script.nu" +``` + +## Сборка из исходников + +Вы можете собрать Nu из исходников. Сначала, вам нужно установить инструментарий Rust и его зависимости. + +### Установка набора компиляторов + +Чтобы Rust работал правильно, в вашей системе должен быть совместимый набор комиляторов. Вот рекомендуемый набор компиляторов: + +- Linux: GCC или Clang +- macOS: Clang (установить Xcode) +- Windows: MSVC (установить [Visual Studio](https://visualstudio.microsoft.com/vs/community/) или [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022)) + - Обязательно установитье "Desktop development with C++" + - Подойдет любая версия редактора Visual Studio (редакция Community). + +### Установка Rust + +Если у вас еще не нет Rust в вашей системе, лучший способ установить его через [rustup](https://rustup.rs/). Rustup - это способ управления установками Rust, включая управление использованием различных версий Rust. + +В настоящее время Nu требуется **latest stable (1.66.1 or later)** версию Rust. Лучший способ - позволить `rustup` найти правильную для вас верисю. Когда вы впервые откроете `rustup`, он спросит, какую версию Rust вы желаете установить: + +@[code](@snippets/installation/rustup_choose_rust_version.sh) + +Как только вы будете готовы, нажмите 1, а затем нажмите enter. + +Если вы не желаете устанавливать Rust через `rustup`, вы также можете установить you его другими способами (например из пакета дистрибутива Linux). Только убедитесь, что вы установили версию Rust 1.66.1 или последнюю. + +### Зависимости + +#### Debian/Ubuntu + +Вам потребуется установить пакеты "pkg-config", "build-essential" и "libssl-dev": + +@[code](@snippets/installation/install_pkg_config_libssl_dev.sh) + +#### Дистрибутивы на базе RHEL + +Вам потребуется установить "libxcb", "openssl-devel" и "libX11-devel": + +@[code](@snippets/installation/install_rhel_dependencies.sh) + +#### macOS + +##### Homebrew + +Используя [Homebrew](https://brew.sh/), вам нужно будет установить "openssl" и "cmake" используя команду: + +@[code](@snippets/installation/macos_deps.sh) + +##### Nix + +Если испольуете [Nix](https://nixos.org/download/#nix-install-macos) для менеджера пакетов на macOS, необходимы пакеты `openssl`, `cmake`, `pkg-config`, и `curl`. Их можно установить: + +- Глобально, используя `nix-env --install` (и другие). +- Локально, используя [Home Manager](https://github.com/nix-community/home-manager) в конфигурации `home.nix`. +- Временно, используя `nix-shell` (и другие). + +### Сборка из [crates.io](https://crates.io) с помощью Cargo + +Релизы Nushell публикуются в виде исходных текстов в популярном реестре пакетов Rust [crates.io](https://crates.io/). Это создает легкость сборки и установки последней версий Nu с помощью `cargo`: + +```nu +cargo install nu --locked +``` + +Инструмент `cargo` выполнит работу по загрузке Nu и его исходных зависимостей, сборке и установке cargo по пути каталога bin. + +Примечание что плагины по умолчанию должны быть установлены отдельно при использовании `cargo`. Смотрите раздел [Установка плагинов](./plugins.html#core-plugins) в книге инструкций. + +### Сборка из GitHub репозитория + +Вы так же можете собрать Nu из последних исходников на GitHub. Это даст вам немедленный доступ к последним функциям и исправлениям. Сначала, склонируйте репозиторий: + +@[code](@snippets/installation/git_clone_nu.sh) + +После этого мы можем собрать и запустить Nu с помощью: + +@[code](@snippets/installation/build_nu_from_source.sh) + +Вы также можете собирать и запускать Nu в режиме релиза, что позволяет использовать больше оптимизаций: + +@[code](@snippets/installation/build_nu_from_source_release.sh) + +Люди, знакомые с Rust, могут удивиться, почему мы выполняем "build", и "run", если "run" по умолчанию выполняет сборку. Это делается для того, чтобы обойти недостаток новой опции `default-run` в Cargo и убедиться, что все плагины собраны, хотя в будущем это может и не понадобиться. diff --git a/ru/book/moving_around.md b/ru/book/moving_around.md new file mode 100644 index 0000000000..908cf0453a --- /dev/null +++ b/ru/book/moving_around.md @@ -0,0 +1,213 @@ +# Перемещение по системе + +Одной из ключевых характеристик оболочки является возможность навигации и взаимодействия с файловой системой. Nushell, конечно же, не является исключением. Вот несколько распространенных команд, которые вы можете использовать при работе с файловой системой: + +## Просмотр содержимого директории + +```nu +ls +``` + +Как показано в разделе "Быстрый тур", команда [`ls`](/commands/docs/ls.md) возвращает содержимое директории. Команда `ls` в Nushell возвращает содержимое в виде [таблицы](types_of_data.html#tables). + +Команда [`ls`](/commands/docs/ls.md) также принимает необязательный аргумент для изменения того, что вы хотите просмотреть. Например, мы можем перечислить файлы, которые заканчиваются на ".md": + +```nu +ls *.md +# => ╭───┬────────────────────┬──────┬──────────┬──────────────╮ +# => │ # │ name │ type │ size │ modified │ +# => ├───┼────────────────────┼──────┼──────────┼──────────────┤ +# => │ 0 │ CODE_OF_CONDUCT.md │ file │ 3.4 KiB │ 9 months ago │ +# => │ 1 │ CONTRIBUTING.md │ file │ 11.0 KiB │ 5 months ago │ +# => │ 2 │ README.md │ file │ 12.0 KiB │ 6 days ago │ +# => │ 3 │ SECURITY.md │ file │ 2.6 KiB │ 2 months ago │ +# => ╰───┴────────────────────┴──────┴──────────┴──────────────╯ +``` + +## Глобальные шаблоны (Подстановочные знаки) + +Звездочка (`*`) в приведенном выше необязательном аргументе `*.md` иногда называется подстановочным знаком или глобом. Она позволяет нам сопоставлять любые значения. Вы можете прочитать этот глоб `*.md` как _"совпадение с любым именем файла, если оно заканчивается на '.md'."_ + +Наиболее общим шаблоном глоб является `*`, который будет соответствовать всем путям. Чаще всего этот шаблон используется как часть другого шаблона, например, `*.bak` и `temp*`. + +Nushell также поддерживает двойную звездочку `**`, которая будет просматривать пути, вложенные в другие директории. Например, `ls **/*` выведет список всех не скрытых путей, вложенные в текущую директорию. + +```nu +ls **/*.md +# => ╭───┬───────────────────────────────┬──────┬──────────┬──────────────╮ +# => │ # │ name │ type │ size │ modified │ +# => ├───┼───────────────────────────────┼──────┼──────────┼──────────────┤ +# => │ 0 │ CODE_OF_CONDUCT.md │ file │ 3.4 KiB │ 5 months ago │ +# => │ 1 │ CONTRIBUTING.md │ file │ 11.0 KiB │ a month ago │ +# => │ 2 │ README.md │ file │ 12.0 KiB │ a month ago │ +# => │ 3 │ SECURITY.md │ file │ 2.6 KiB │ 5 hours ago │ +# => │ 4 │ benches/README.md │ file │ 249 B │ 2 months ago │ +# => │ 5 │ crates/README.md │ file │ 795 B │ 5 months ago │ +# => │ 6 │ crates/nu-cli/README.md │ file │ 388 B │ 5 hours ago │ +# => │ 7 │ crates/nu-cmd-base/README.md │ file │ 262 B │ 5 hours ago │ +# => │ 8 │ crates/nu-cmd-extra/README.md │ file │ 669 B │ 2 months ago │ +# => │ 9 │ crates/nu-cmd-lang/README.md │ file │ 1.5 KiB │ a month ago │ +# => ╰───┴───────────────────────────────┴──────┴──────────┴──────────────╯ +``` + +Здесь мы ищем любой файл, который заканчивается на ".md". Двойная звездочка дополнительно указывает _"в любой директории, начиная с текущей."_ + +Синтаксис глобов в Nushell поддерживает не только `*`, но и сопоставление [одиночных символов с помощью `?` и групп символов с помощью `[...]`](https://docs.rs/nu-glob/latest/nu_glob/struct.Pattern.html). + +Исключение символов `*`, `?` и `[]` осуществляется путем заключения их в одинарные, двойные кавычки или [сырой строковый литерал](working_with_strings.md#raw-strings). Например, чтобы показать содержимое директории с именем `[slug]`, используйте `ls "[slug]"` или `ls '[slug]'`. + +Однако строки в обратных кавычках не экранируют глоб. Например, сравните следующие сценарии: + +1. Без кавычек: Глоб-шаблон + + Необработанная [строка без кавычек](working_with_strings.html#bare-word-strings) с символами глоба интерпретируется как глоб-шаблон, поэтому следующая команда удалит все файлы в текущей директории, содержащие `myfile` в любом месте имени файла: + + ```nu + rm *myfile* + ``` + +2. В кавычках: Строковый литерал с символами звездочки + + При использовании одинарных или двойных кавычек, либо [сырого строкового литерала](working_with_strings.html#raw-strings), передается _строка_ с буквальными, экранированными звездочками (или другими символами глоба). Результат не является глобом. Следующая команда удалит только файл с буквальным именем `*myfile*` (включая звездочки). Другие файлы с `myfile` в имени не будут затронуты: + + ```nu + rm "*myfile*" + ``` + +3. В обратных кавычках: Глоб-шаблон + + Звездочки (и другие глоб-шаблоны) внутри [строки в обратных кавычках](working_with_strings.html#backtick-quoted-strings) интерпретируются как глоб-шаблон. Обратите внимание, что это такое же поведение, как и в примере со строкой без кавычек в пункте #1 выше. + + Следующая команда, как и в первом примере, удаляет все файлы в текущей директории, содержащие `myfile` в имени файла: + + ```nu + rm `*myfile*` + ``` + +::: tip +Nushell также включает специальную команду [`glob`](https://www.nushell.sh/commands/docs/glob.html) с поддержкой более сложных сценариев глобинга. +::: + +### Преобразование строк в глоб-шаблоны + +Приведенные выше методы кавычек полезны при создании глоб-литералов, но вам может понадобиться создавать глоб-шаблоны программно. Для этого доступны несколько методов: + +1. `into glob` + + Команда [`into glob`](/commands/docs/into_glob.html) может быть использована для преобразования строки (и других типов) в глоб. Например: + + ```nu + # Найти файлы, в имени которых включает текущий месяц в формате YYYY-mm + let current_month = (date now | format date '%Y-%m') + let glob_pattern = ($"*($current_month)*" | into glob) + ls $glob_pattern + ``` + +2. Оператор spread в сочетании с командой [`glob`](/commands/docs/glob.html): + + Команда [`glob`](/commands/docs/glob.html) (примечание: это не то же самое, что `into glob`) возвращает [`список`](types_of_data.html#lists) имен файлов, соответствующих глоб-шаблону. Этот список можно быть расширен и передан командам файловой системы с помощью [оператора разворачивания](operators.html#spread-operator): + + ```nu + # Найти файлы, имя которых включает текущий месяц в формате YYYY-mm + let current_month = (date now | format date '%Y-%m') + ls ...(glob $"*($current_month)*") + ``` + +3. Принудительное указание типа `glob` через аннотацию: + + ```nu + # Найти файлы, имя которых включает текущий месяц в формате YYYY-mm + let current_month = (date now | format date '%Y-%m') + let glob_pattern: glob = ($"*($current_month)*") + ls $glob_pattern + ``` + +## Создание директории + +Как и в большинстве других оболочек, команда [`mkdir`](/commands/docs/mkdir.md) используется для создания новых директорий. Одно из отличий заключается в том, что внутренняя команда `mkdir` в Nushell по умолчанию работает как `mkdir -p` в Unix/Linux, то есть: + +- Автоматически создает несколько уровней директорий. Например: + + ```nu + mkdir modules/my/new_module + ``` + + Это создаст все три директории, даже если ни одна из них в данный момент не существует. В Linux/Unix для этого требуется `mkdir -p`. + +- Не вызывает ошибку, если директория уже существует. Например: + + ```nu + mkdir modules/my/new_module + mkdir modules/my/new_module + # => No error + ``` + + ::: tip + Распространенная ошибка при переходе на Nushell — является попытка использовать `mkdir -p ` как в родной версии Linux/Unix. Однако это вызовет ошибку `Unknown Flag` в Nushell. + + Просто повторите команду без `-p`, чтобы добиться того же эффекта. + ::: + +## Изменение текущей директории + +```nu +cd cookbook +``` + +Чтобы перейти из текущей директории в новую, используйте команду [`cd`](/commands/docs/cd.md). + +Изменение текущей рабочей директории также можно выполнить, если опустить [`cd`](/commands/docs/cd.md) и указать путь напрямую: + +```nu +cookbook/ +``` + +Как и в других оболочках, вы можете использовать либо имя директории, либо, если вы хотите подняться на уровень выше, использовать сокращение `..`. + +Вы также можете добавить дополнительные точки, чтобы подняться на несколько уровней выше: + +```nu +# Перейти в родительскую директорию +cd .. +# или +.. +# Подняться на два уровня выше (родитель родителя) +cd ... +# или +... +# Подняться на три уровня выше (родитель родителя родителя) +cd .... +# И так далее. +``` + +::: tip +Сокращения с несколькими точками доступны как для внутренних [команд файловой системы](/commands/categories/filesystem.html) Nushell, так и для внешних команд. Например, выполнение `^stat ....` в системе Linux/Unix покажет, что путь расширяется до `../../../..` +::: + +Вы можете комбинировать относительные уровни директорий с именами директорий: + +```nu +cd ../sibling +``` + +::: tip ВАЖНО +Изменение директории с помощью [`cd`](/commands/docs/cd.md) изменяет переменную окружения `PWD`. Это означает, что изменение директории сохраняется в текущей области видимости (например, блоке или замыкании). После выхода из блока вы вернетесь в предыдущую директорию. Подробнее об этом вы можете узнать в главе [Окружение](./environment.md). +::: + +## Команды файловой системы + +Nu также предоставляет некоторые базовые [команды файловой системы](/commands/categories/filesystem.html), которые работают кроссплатформенно, такие как: + +- [`mv`](/commands/docs/mv.md) для переименования или перемещения файла или директории в новое место +- [`cp`](/commands/docs/cp.md) для копирования элемента в новое место +- [`rm`](/commands/docs/rm.md) для удаления элементов из файловой системы + +::: tip ПРИМЕЧАНИЕ +В Bash и многих других оболочках большинство команд файловой системы (кроме `cd`) на самом деле являются отдельными двоичными файлами в системе. Например, в системе Linux команда `cp` — это двоичный файл `/usr/bin/cp`. В Nushell эти команды являются встроенными. Это имеет несколько преимуществ: + +- Они работают одинаково на платформах, где бинарная версия может быть недоступна (например, Windows). Это позволяет создавать кроссплатформенные скрипты, модули и пользовательские команды. +- Они более тесно интегрированы с Nushell, что позволяет им понимать типы Nushell и другие конструкции. +- Как упоминалось в разделе [Быстрый тур](quick_tour.html), они документированы в справочной системе Nushell. Выполнение команды `help ` или ` --help` покажет документацию Nushell для данной команды. + +Хотя обычно рекомендуется использовать встроенне версии Nushell, возможно также использовать двоичные файлы Linux. Подробности см. в разделе [Выполнение системных команд](./running_externals.md). +::: diff --git a/ru/book/quick_tour.md b/ru/book/quick_tour.md new file mode 100644 index 0000000000..49ad2b5ddf --- /dev/null +++ b/ru/book/quick_tour.md @@ -0,0 +1,238 @@ +# Быстрый тур + +[[toc]] + +## Nushell Команды Вывода _Data_ + +Самый простой способ увидеть, что может делать Nu, — это начать с нескольких примеров, так что давайте погрузимся. + +Первое, что вы заметите, когда выполните команду, такую как [`ls`](/commands/docs/ls.md), это то, что вместо блока текста вы получите структурированную таблицу. + +```nu:no-line-numbers +ls +# => ╭────┬─────────────────────┬──────┬───────────┬──────────────╮ +# => │ # │ name │ type │ size │ modified │ +# => ├────┼─────────────────────┼──────┼───────────┼──────────────┤ +# => │ 0 │ CITATION.cff │ file │ 812 B │ 2 months ago │ +# => │ 1 │ CODE_OF_CONDUCT.md │ file │ 3.4 KiB │ 9 months ago │ +# => │ 2 │ CONTRIBUTING.md │ file │ 11.0 KiB │ 5 months ago │ +# => │ 3 │ Cargo.lock │ file │ 194.9 KiB │ 15 hours ago │ +# => │ 4 │ Cargo.toml │ file │ 9.2 KiB │ 15 hours ago │ +# => │ 5 │ Cross.toml │ file │ 666 B │ 6 months ago │ +# => │ 6 │ LICENSE │ file │ 1.1 KiB │ 9 months ago │ +# => │ 7 │ README.md │ file │ 12.0 KiB │ 15 hours ago │ +# => ... +``` + +Эта таблица не только красиво форматирует вывод. Как и в электронной таблице, она позволяет нам работать с данными _интерактивно_. + +## Действия с данными + +Далее, давайте отсортируем эту таблицу по размеру каждого файла. Для этого мы возьмем вывод команды [`ls`](/commands/docs/ls.md) и передадим его в команду, которая может сортировать таблицы на основе _значений_ в столбце. + +```nu:no-line-numbers +ls | sort-by size | reverse +# => ╭───┬─────────────────┬──────┬───────────┬──────────────╮ +# => │ # │ name │ type │ size │ modified │ +# => ├───┼─────────────────┼──────┼───────────┼──────────────┤ +# => │ 0 │ Cargo.lock │ file │ 194.9 KiB │ 15 hours ago │ +# => │ 1 │ toolkit.nu │ file │ 20.0 KiB │ 15 hours ago │ +# => │ 2 │ README.md │ file │ 12.0 KiB │ 15 hours ago │ +# => │ 3 │ CONTRIBUTING.md │ file │ 11.0 KiB │ 5 months ago │ +# => │ 4 │ ... │ ... │ ... │ ... │ +# => │ 5 │ LICENSE │ file │ 1.1 KiB │ 9 months ago │ +# => │ 6 │ CITATION.cff │ file │ 812 B │ 2 months ago │ +# => │ 7 │ Cross.toml │ file │ 666 B │ 6 months ago │ +# => │ 8 │ typos.toml │ file │ 513 B │ 2 months ago │ +# => ╰───┴─────────────────┴──────┴───────────┴──────────────╯ +``` + +Обратите внимание, что мы не передавали аргументы командной строки или переключатели в [`ls`](/commands/docs/ls.md). Вместо этого мы использовали встроенную команду Nushell [`sort-by`](/commands/docs/sort-by.md) для сортировки _вывода_ команды `ls`. Затем, чтобы увидеть самые большие файлы сверху, мы использовали [`reverse`](/commands/docs/reverse.md) на _выводе_ `sort-by`. + +::: tip Круто! +Если вы внимательно сравните порядок сортировки, вы можете заметить, что данные не отсортированы в алфавитном порядке. Они даже не отсортированы по _числовым_ значениям. Вместо этого, поскольку столбец `size` является типом [`filesize`](./types_of_data.md#file-sizes), Nushell знает, что `1.1 KiB` (кибибайты) больше, чем `812 B` (байты). +::: + +# Поиск данных с помощью команды `where` + +Nu предоставляет множество команд, которые могут работать со структурированным выводом предыдущей команды. Обычно они классифицируются как "Фильтры" в Nushell. + +Например, мы можем использовать [`where`](/commands/docs/where.md), чтобы отфильтровать содержимое таблицы так, чтобы она показывала только файлы размером более 10 килобайт: + +```nu +ls | where size > 10kb +# => ╭───┬─────────────────┬──────┬───────────┬───────────────╮ +# => │ # │ name │ type │ size │ modified │ +# => ├───┼─────────────────┼──────┼───────────┼───────────────┤ +# => │ 0 │ CONTRIBUTING.md │ file │ 11.0 KiB │ 5 months ago │ +# => │ 1 │ Cargo.lock │ file │ 194.6 KiB │ 2 minutes ago │ +# => │ 2 │ README.md │ file │ 12.0 KiB │ 16 hours ago │ +# => │ 3 │ toolkit.nu │ file │ 20.0 KiB │ 16 hours ago │ +# => ╰───┴─────────────────┴──────┴───────────┴───────────────╯ +``` + +## Больше, чем просто каталоги + +Конечно, это не ограничивается командой `ls`. Nushell следует философии Unix, где каждая команда делает одно дело хорошо, и вы можете ожидать, что вывод одной команды станет вводом другой. Это позволяет нам комбинировать команды в различных комбинациях. + +Давайте рассмотрим другую команду: + +```nu:no-line-numbers +ps +# => ╭───┬──────┬──────┬───────────────┬──────────┬──────┬───────────┬─────────╮ +# => │ # │ pid │ ppid │ name │ status │ cpu │ mem │ virtual │ +# => ├───┼──────┼──────┼───────────────┼──────────┼──────┼───────────┼─────────┤ +# => │ 0 │ 1 │ 0 │ init(void) │ Sleeping │ 0.00 │ 1.2 MiB │ 2.2 MiB │ +# => │ 1 │ 8 │ 1 │ init │ Sleeping │ 0.00 │ 124.0 KiB │ 2.3 MiB │ +# => │ 2 │ 6565 │ 1 │ SessionLeader │ Sleeping │ 0.00 │ 108.0 KiB │ 2.2 MiB │ +# => │ 3 │ 6566 │ 6565 │ Relay(6567) │ Sleeping │ 0.00 │ 116.0 KiB │ 2.2 MiB │ +# => │ 4 │ 6567 │ 6566 │ nu │ Running │ 0.00 │ 28.4 MiB │ 1.1 GiB │ +# => ╰───┴──────┴──────┴───────────────┴──────────┴──────┴───────────┴─────────╯ +``` + +Вы, возможно, знакомы с командой Linux/Unix `ps`. Она предоставляет список всех текущих процессов, запущенных в системе, вместе с их текущим статусом. Как и `ls`, Nushell предоставляет кросс-платформенную встроенную команду [`ps`](/commands/docs/ps.md), которая возвращает свои результаты в виде структурированных данных. + +::: note +Традиционная Unix-команда `ps` по умолчанию показывает только текущий процесс и его родителей. Реализация Nushell по умолчанию показывает все процессы в системе. + +Обычно выполнение `ps` в Nushell использует его **_внутреннюю_**, кросс-платформенную команду. Однако все еще возможно запустить **_внешнюю_**, зависящую от системы версию на платформах Unix/Linux, добавив перед ней символ каретки. Например: + +```nu +^ps aux # выполнить команду Unix ps со всеми процессами в пользовательском формате +``` + +См. [Запуск внешних системных команд](./running_externals.md) для получения дополнительных сведений. +::: + +Что если мы хотим показать только процессы, которые активно работают? Как и с `ls` выше, мы также можем работать с таблицей, которую _выводит_ `ps`: + +```nu +ps | where status == Running +# => ╭───┬──────┬──────┬──────┬─────────┬──────┬──────────┬─────────╮ +# => │ # │ pid │ ppid │ name │ status │ cpu │ mem │ virtual │ +# => ├───┼──────┼──────┼──────┼─────────┼──────┼──────────┼─────────┤ +# => │ 0 │ 6585 │ 6584 │ nu │ Running │ 0.00 │ 31.9 MiB │ 1.2 GiB │ +# => ╰───┴──────┴──────┴──────┴─────────┴──────┴──────────┴─────────╯ +``` + +::: tip +Помните выше, где столбец `size` из команды `ls` был `filesize`? Здесь `status` на самом деле просто строка, и вы можете использовать все обычные строковые операции и команды с ним, включая (как выше) сравнение `==`. + +Вы можете изучить типы столбцов таблицы, используя: + +```nu +ps | describe +# => table (stream) +``` + +Команда [`describe`](/commands/docs/describe.md) может использоваться для отображения типа вывода любой команды или выражения. + +::: + +## Аргументы команд в конвейере + +Иногда команда принимает _аргумент_ вместо _ввода_ конвейера. Для этого сценария Nushell предоставляет переменную [`$in`](./pipelines.md#pipeline-input-and-the-special-in-variable), которая позволяет использовать вывод предыдущей команды в виде переменной. Например: + +```nu:line-numbers +ls +| sort-by size +| reverse +| first +| get name +| cp $in ~ +``` + +::: tip Примечание по дизайну Nushell +По возможности, команды Nushell разработаны для работы с _вводом_ конвейера. Однако некоторые команды, такие как `cp` в этом примере, имеют два (или более) аргумента с разными значениями. В этом случае `cp` нужно знать как путь для _копирования_, так и _целевой_ путь. В результате эта команда более эргономична с двумя _позиционными параметрами_. +::: + +::: tip +Команды Nushell могут быть разделены на несколько строк для удобочитаемости. Приведенный выше пример эквивалентен: + +```nu +ls | sort-by size | reverse | first | get name | cp $in ~ +``` + +См. также: [Многострочное редактирование](./line_editor.md#multi-line-editing) +::: + +Первые три строки такие же, как в примере выше, поэтому давайте рассмотрим последние три: + +4. Команда [`first`](/commands/docs/first.md) просто возвращает первое значение из таблицы. В данном случае это означает файл с наибольшим размером. Это файл `Cargo.lock`, если использовать список каталогов из второго примера выше. Этот "файл" является [`record`](./types_of_data.md#records) из таблицы, который все еще содержит свои столбцы/поля `name`, `type`, `size` и `modified`. +5. `get name` возвращает _значение_ поля `name` из предыдущей команды, то есть `"Cargo.lock"` (строка). Это также простой пример [`cell-path`](./types_of_data.md#cell-paths), который можно использовать для навигации и изоляции структурированных данных. +6. Последняя строка использует переменную `$in` для ссылки на вывод строки 5. Результат — команда, которая говорит _"Скопировать 'Cargo.lock' в домашний каталог"_ + +::: tip +[`get`](/commands/docs/get.md) и его аналог [`select`](/commands/docs/select.md) являются двумя из наиболее часто используемых фильтров в Nushell, но может быть не сразу понятно, в чем между ними разница. Когда вы будете готовы начать использовать их более активно, см. [Использование `get` и `select`](./navigating_structured_data.md#using-get-and-select) для руководства. +::: + +## Получение помощи + +Nushell предоставляет обширную систему помощи в оболочке. Например + +```nu +# help +help ls +# Или +ls --help +# Также +help operators +help escapes +``` + +::: tip Круто! +Нажмите клавишу F1, чтобы получить доступ к [меню](./line_editor.md#menus) помощи. Найдите команду `ps` здесь, но _не нажимайте Enter сразу_! + +Вместо этого нажмите клавишу Down Arrow и обратите внимание, что вы прокручиваете раздел Примеры. Выделите пример, _затем_ нажмите Enter, и пример будет введен в командную строку, готовый к выполнению! + +Это может быть отличным способом изучить и узнать об обширном наборе команд Nushell. +::: + +Система помощи также имеет функцию "поиска": + +```nu +help --find filesize +# или +help -f filesize +``` + +Возможно, вас уже не удивит, что система помощи сама по себе основана на структурированных данных! Обратите внимание, что вывод `help -f filesize` представляет собой таблицу. + +Помощь для каждой команды хранится в виде записи с: + +- Названием +- Категорией +- Типом (встроенная, плагин, пользовательская) +- Параметрами, которые она принимает +- Подписями, показывающими, какие типы данных она может принимать, а также выводить +- И многим другим + +Вы можете просмотреть _все_ команды (кроме внешних) в виде одной большой таблицы, используя: + +```nu +help commands +``` + +::: tip +Обратите внимание, что столбцы `params` и `input_output` в приведенном выше выводе являются _вложенными_ таблицами. Nushell позволяет [произвольно вложенные структуры данных](./navigating_structured_data.md#background). +::: + +## `explore`'ing отсюда + +Этот вывод `help commands` довольно длинный. Вы могли бы отправить его в пейджер, такой как `less` или `bat`, но Nushell включает встроенную команду `explore`, которая позволяет не только прокручивать, но и телескопировать вложенные данные. Попробуйте: + +```nu +help commands | explore +``` + +Затем нажмите клавишу Enter, чтобы получить доступ к самим данным. Используйте клавиши со стрелками для прокрутки до команды `cp` и к столбцу `params`. Нажмите Enter еще раз, чтобы телескопировать полный список параметров, доступных для команды `cp`. + +::: note +Нажатие клавиши Esc один раз возвращает из режима прокрутки в режим просмотра; Нажатие второй раз возвращает к предыдущему виду (или выходит, если уже на верхнем уровне просмотра). +::: + +::: tip +Вы, конечно, можете использовать команду `explore` для _любых_ структурированных данных в Nushell. Это может включать данные JSON, поступающие из веб-API, электронную таблицу или файл CSV, YAML или что-либо, что может быть представлено как структурированные данные в Nushell. + +Попробуйте `$env.config | explore` для развлечения! +:::