Многие пользователи Linux не раз комбинировали ls, awk и grep для поиска файлов или извлечения информации и наверняка замечали, насколько быстро команды становятся громоздкими. Это работает, но постоянно приходится разбирать простой текст и надеяться, что формат вывода не изменится.
Часто приходится тратить время на написание однострочников на awk и sed, чтобы вытащить столбец из ps или отфильтровать файлы по размеру. Проблема в том, что традиционные оболочки вроде Bash воспринимают всё как текст. Каждая команда должна читать и интерпретировать вывод предыдущей, а это усложняет чтение скриптов и делает их хрупкими.
Именно здесь выделяется Nushell. Вместо передачи текста между командами она оперирует структурированными данными: вывод файлов, процессов и других команд представлен в виде таблиц, поэтому фильтровать и сортировать их можно напрямую, без разбора сырого текста.
Когда впервые пробуешь команду
ls | where size > 10mb
всё сразу становится понятно. Она возвращает именно те файлы, которые нужны, без регулярных выражений, подсчёта столбцов и опасений насчёт пробелов в именах. Команда читается легко и делает ровно то, что написано.
В этом материале мы покажем, как установить Nushell в Debian-подобных дистрибутивах и дистрибутивах на основе RHEL, а затем разберём основные приёмы: навигацию по структурированному выводу, поиск по файлам и процессам, работу с CSV и JSON, а также написание первого скрипта Nushell.
Что делает Nushell на самом деле
Традиционные оболочки — Bash, Zsh, Fish — обрабатывают всё как текст. Например, когда вы запускаете ps, на экран выводится именно текст. Чтобы найти нужный процесс или столбец, приходится подключать grep, awk или cut.
Nushell действует иначе. Она передаёт между командами структурированные данные: команды возвращают таблицы с именованными столбцами, так что фильтровать и запрашивать информацию можно без оглядки на позиции столбцов или форматирование.
Так, ps в Nushell выдаёт таблицу со столбцами pid, cpu, mem — и сразу понятно, как отсеять лишнее.
Повседневные задачи становятся проще, потому что:
- Не нужно писать регулярные выражения или команды awk, чтобы вытащить поле.
- Команды стыкуются надёжнее: данные остаются структурированными на всём протяжении конвейера, а не превращаются обратно в текст после каждой команды.
- Nushell умеет читать и записывать JSON, CSV, TOML, YAML без дополнительных инструментов — можно загрузить файл и сразу фильтровать или сортировать его содержимое.
При этом Nushell не является прямой заменой Bash: готовые bash-скрипты не запустятся без переделки, потому что у оболочки свой скриптовый язык и синтаксис команд.
Примечание: Nushell написана на Rust и распространяется обычно как один исполняемый файл, что упрощает установку на большинство Linux-систем.
Установка Nushell в Linux
Nushell отсутствует в стандартных репозиториях Ubuntu, Debian и RHEL. Чтобы установить её, нужно добавить официальный репозиторий сообщества Fury.io. После этого оболочку можно ставить и обновлять обычным пакетным менеджером.
На Ubuntu/Debian импортируем GPG-ключ, добавляем репозиторий и обновляем список пакетов:
wget -qO- https://apt.fury.io/nushell/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/fury-nushell.gpg
echo "deb [signed-by=/etc/apt/keyrings/fury-nushell.gpg] https://apt.fury.io/nushell/ /" | sudo tee /etc/apt/sources.list.d/fury-nushell.list
sudo apt update
sudo apt install nushell
На RHEL, Fedora и Rocky Linux создаём файл репозитория:
echo "[gemfury-nushell]
name=Gemfury Nushell Repo
baseurl=https://yum.fury.io/nushell/
enabled=1
gpgcheck=0
gpgkey=https://yum.fury.io/nushell/gpg.key" | sudo tee /etc/yum.repos.d/fury-nushell.repo
После добавления репозитория достаточно одной команды:
sudo dnf install -y nushell
Если не хотите подключать репозиторий, можно установить Nushell через Homebrew (brew install nushell) или скачать готовый бинарник со страницы релизов GitHub и разместить его в PATH.
Запуск Nushell
Запустить Nushell из текущего сеанса можно командой:
nu
Пример вывода:
__ ,
.--()°'.' Welcome to Nushell,
'|, . ,' based on the nu language,
!_-(_\ where all data is structured!
Version: 0.114.0 (x86_64-unknown-linux-gnu)
Please join our Discord community at https://discord.gg/NtAbbGn
Our GitHub repository is at https://github.com/nushell/nushell
Our Documentation is located at https://nushell.sh
And the Latest Nushell News at https://nushell.sh/blog/
Learn how to remove this at: https://nushell.sh/book/configuration.html#remove-welcome-message
It's been this long since Nushell's first commit:
7yrs 1month 26days 13hrs 14mins 33secs 921ms 660µs 126ns
Startup Time: 6ms 453µs 536ns
Вы внутри сессии Nushell, но ваш обычный Bash продолжает работать в фоновом режиме. Вернуться в него можно в любой момент:
exit
Начнём с привычной команды:
ls
Вывод:
╭────┬────────────────────────────┬──────┬────────┬──────────┬───────────┬───────────┬─────╮
│ # │ name │ type │ target │ readonly │ mode │ num_links │ ... │
├────┼────────────────────────────┼──────┼────────┼──────────┼───────────┼───────────┼─────┤
│ 0 │ LICENSE │ file │ │ false │ rw-r--r-- │ 1 │ ... │
│ 1 │ README.txt │ file │ │ false │ rw-r--r-- │ 1 │ ... │
│ 2 │ nu │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
│ 3 │ nu_plugin_custom_values │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
│ 4 │ nu_plugin_example │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
│ 5 │ nu_plugin_formats │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
│ 6 │ nu_plugin_gstat │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
│ 7 │ nu_plugin_inc │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
│ 8 │ nu_plugin_polars │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
│ 9 │ nu_plugin_query │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
│ 10 │ nu_plugin_stress_internals │ file │ │ false │ rwxr-xr-x │ 1 │ ... │
╰────┴────────────────────────────┴──────┴────────┴──────────┴───────────┴───────────┴─────╯
В отличие от Bash результат сразу представлен в виде таблицы с колонками. Поскольку Nushell понимает структуру данных, фильтровать их можно без grep или awk.
Например, чтобы показать только файлы больше 10 МБ, достаточно выполнить:
ls | where size > 10mb
Вывод:
╭───┬─────────────────────────┬──────┬──────────┬───────────╮
│ # │ name │ type │ size │ modified │
├───┼─────────────────────────┼──────┼──────────┼───────────┤
│ 0 │ nu │ file │ 70.2 MB │ a day ago │
│ 1 │ nu_plugin_custom_values │ file │ 12.7 MB │ a day ago │
│ 2 │ nu_plugin_example │ file │ 13.3 MB │ a day ago │
│ 3 │ nu_plugin_formats │ file │ 13.3 MB │ a day ago │
│ 4 │ nu_plugin_gstat │ file │ 19.4 MB │ a day ago │
│ 5 │ nu_plugin_polars │ file │ 121.0 MB │ a day ago │
│ 6 │ nu_plugin_query │ file │ 19.9 MB │ a day ago │
╰───┴─────────────────────────┴──────┴──────────┴───────────╯
Что происходит в этом конвейере:
lsвозвращает таблицу файлов со столбцами name, type, size, modified.- Оператор
|передаёт таблицу следующей команде, не преобразуя её в текст. where size > 10mbотбирает строки, в которых столбец size превышает 10 МБ.
В Bash для такой задачи пришлось бы разбирать вывод ls с помощью awk или grep и вручную обрабатывать размеры. В Nushell же достаточно отфильтровать столбец size — оболочка уже знает, что означают эти данные.
Запросы к запущенным процессам как к базе данных
Nushell упрощает и работу с процессами. Вместо того чтобы прогонять ps через несколько утилит, можно фильтровать и сортировать данные напрямую.
ps | where cpu > 5.0 | sort-by cpu
Пример вывода:
╭───┬───────┬──────────────┬──────┬────────╮
│ # │ pid │ name │ cpu │ mem │
├───┼───────┼──────────────┼──────┼────────┤
│ 0 │ 4821 │ nginx │ 6.2 │ 45.1 MB│
│ 1 │ 1092 │ mysqld │ 18.7 │ 512 MB │
╰───┴───────┴──────────────┴──────┴────────╯
Разберём:
psвыдаёт таблицу запущенных процессов.where cpu > 5.0оставляет только процессы, потребляющие больше 5% CPU.sort-by cpuсортирует результат по использованию процессора.
Родная работа с CSV и JSON
Одна из сильных сторон Nushell — способность читать распространённые форматы данных без дополнительных инструментов.
Допустим, есть CSV-файл с логами посещений сайта. Чтобы подсчитать количество ответов 404, выполните:
open traffic.csv | where status == 404 | length
Пример вывода:
37
По шагам:
open traffic.csvчитает CSV и автоматически превращает его в таблицу.where status == 404оставляет только строки со статусом 404.lengthподсчитывает оставшиеся строки.
Аналогично работают JSON-файлы. Например, чтобы прочитать значение из конфигурации:
open config.json | get database.host
Пишем первый скрипт на Nushell
Скрипты Nushell используют расширение .nu.
Создайте новый скрипт:
nano disk-check.nu
Добавьте следующий код:
def check-disk [threshold: int] {
df -h
| where "use%" > $threshold
| select filesystem "use%" available
}
check-disk 80
Пример вывода:
╭───┬─────────────┬───────┬───────────╮
│ # │ filesystem │ use% │ available │
├───┼─────────────┼───────┼───────────┤
│ 0 │ /dev/sda1 │ 87% │ 4.2 GB │
╰───┴─────────────┴───────┴───────────╯
Скрипт определяет функцию check-disk, принимающую порог заполнения диска в процентах (целое число). Он выводит смонтированные файловые системы, отбирает те, у которых использование превышает заданный порог, и показывает столбцы filesystem, use% и available.
Заключение
Теперь у вас установлена Nushell на Ubuntu, Debian, RHEL, Fedora или Rocky Linux, и вы увидели, как оболочка справляется с повседневными задачами с помощью структурированных данных вместо обычного текста.
Если только знакомитесь с Nushell, начните с простых команд:
ps | where cpu > 10 | sort-by cpu
ls | where size > 10mb
Эти примеры дают хорошее представление о том, как устроены структурированные конвейеры и чем Nushell отличается от традиционных оболочек.
Nushell не обязана заменять Bash во всех ситуациях, особенно если у вас уже есть наработанные скрипты и процессы. Но для исследования данных, фильтрации вывода и работы со структурированными файлами этот инструмент стоит добавить в арсенал.
Попробуйте поработать с ней несколько дней и оцените, как она вписывается в ваш рабочий процесс. Вполне вероятно, что вы продолжите использовать Bash для сценариев и системного администрирования, а к Nushell будете обращаться каждый раз, когда нужно быстро найти, отфильтровать или проанализировать структурированные данные.






Пока нет комментариев. Будьте первым!