Як змінити оболонку за замовчуванням в Linux за допомогою chsh

Bash – це не єдина командна оболонка, доступна в Linux. Ви можете легко випробувати інші, наприклад, досить популярну Zsh. Коли знайдете ту, яка вам підходить, використайте команду `chsh`, щоб встановити її як оболонку за замовчуванням. Зараз ми розглянемо, як це зробити.

Чому оболонка має значення?

Оболонка виконує роль інтерфейсу між вами та операційною системою. Вона надає середовище в межах вікна терміналу, де ви вводите команди та запускаєте додатки. Оболонка аналізує ваші введені дані та визначає, що ви хочете зробити. Якщо вона може виконати ваше завдання самостійно, вона це робить. Якщо їй потрібна допомога, вона шукає потрібні програми.

У Linux існує багато різних оболонок. Усі вони дають можливість виконувати однакові базові завдання: перегляд файлової системи, оперування файлами, запуск програм та виконання скриптів. Але кожна з них робить це по-своєму, має власні характеристики та особливості.

Оболонки зазвичай створюються людьми, які мають власне бачення щодо того, як має працювати система. Якщо ваш підхід співпадає з підходом розробника, ця оболонка може вам підійти. Крім того, спробувати нову оболонку в Linux – це дуже просто.

У більшості дистрибутивів Linux, включаючи Ubuntu, за замовчуванням встановлена оболонка Bash. Вона добре виконує свої функції і має широкий набір можливостей. Проте, інша оболонка може заощадити ваш час та покращити робочий процес. Варто спробувати, щоб переконатися!

Огляд оболонок

Раніше ми вже говорили про різні оболонки Linux, але давайте зробимо короткий огляд найпопулярніших з них:

  • bash: Bourne Again Shell є стандартною оболонкою в багатьох дистрибутивах.
  • rbash: Обмежена версія Bash, яка надає мінімум функціональності.
  • ash: Almquist Shell є полегшеною альтернативою Bash.
  • dash: Debian Alquist Shell є оболонкою за замовчуванням для скриптів в Ubuntu. Хоча bash є оболонкою для входу та інтерактивної роботи, dash застосовується для виконання системних процесів, оскільки є легшою за bash.
  • zsh: Z Shell – це сучасний варіант сімейства оболонок bash. Вона пропонує такі покращення, як перевірка орфографії команд та їх виправлення.
  • fish: Дружня інтерактивна оболонка, розроблена з нуля, яка не є похідною від інших сімейств оболонок. Вона орієнтована на зручність використання. Серед багатьох переваг fish є пропозиції команд на основі вашої історії та вмісту поточної папки, подібно до предиктивного тексту.
  • ksh: Korn Shell має особливо потужну мову для написання скриптів.

Список встановлених оболонок

Щоб переглянути список встановлених на вашому комп’ютері оболонок, використайте цю команду. Вона просто виводить вміст файлу `/etc/shells`:

cat /etc/shells

Ми вже згадували bash, dash та rbash, але що таке sh?

`sh` це Thompson shell, розроблена ще в 1971 році Кеном Томпсоном з Bell Labs. Зараз вона більше не підтримується і вже давно витіснена сучасними оболонками. Її включають виключно для підтримки сумісності зі старими скриптами, які мають такий рядок на початку:

#!/bin/sh

Це вказує системі використовувати оболонку `sh` для виконання скрипту. Чи дійсно у вас є ця стара оболонка і чи використовується вона для запуску ваших скриптів? Команда `which` підкаже, яка програма насправді запускається, коли ви вводите команду.

Давайте подивимося, що запускається, коли ви вводите `sh`:

which sh

Виявляється, що це двійковий файл. Якщо ми копнемо глибше, побачимо, що це символьне посилання, яке насправді вказує на dash, легку оболонку, яка застосовується для виконання скриптів:

ls -l /bin/sh

Це гарний та легкий спосіб забезпечити певну безпеку для скриптів, які очікують знайти `sh` в сучасних системах.

Встановлення нової оболонки

Давайте встановимо оболонку fish і зробимо її основною для користувача Dave. В Ubuntu вводимо наступну команду:

sudo apt-get install fish

В Manjaro використовуйте pacman:

sudo pacman -Sy fish

У Fedora введіть:

sudo dnf install fish

Після завершення інсталяції, можна ще раз перевірити список встановлених оболонок:

cat /etc/shells

Наша нова оболонка знаходиться за шляхом `/usr/bin/fish`. Запам’ятайте цей шлях – він нам ще знадобиться.

Змінна середовища `$SHELL`

Змінна середовища `$SHELL` містить назву вашої поточної оболонки. Ми можемо дізнатися, яка з них налаштована, за допомогою команди `echo`:

echo $SHELL

Запускаємо fish оболонку:

fish

Тепер ще раз перевіримо, що відображає змінна середовища `$SHELL`:

echo $SHELL

Коли ми вперше використовуємо `echo $SHELL`, ми знаходимося в оболонці bash. Змінна середовища містить шлях до виконуваного файлу bash, `/bin/bash`.

Коли ми запускаємо оболонку fish, ми бачимо дружнє вітання, а командний рядок змінюється. Може здивувати те, що змінна середовища `$SHELL` все ще показує шлях до bash, `/bin/bash`. Це нормально.

Коли ви запускаєте нову оболонку (або будь-яку іншу програму), вона успадковує середовище батьківської оболонки. Тому, оболонка fish успадковує глобальні та експортовані змінні середовища від bash. Оскільки значення змінної середовища `$SHELL` не було змінене, вона має те саме значення в оболонці fish, що й в bash.

Ми запускаємо fish так само, як і будь-який інший додаток. Ми можемо використовувати `exit`, щоб покинути оболонку fish. Вона закриється, як і будь-яка інша програма, і ми повернемося до bash.

Це зручний спосіб випробовувати нові оболонки, бачити їх можливості та розуміти, чи вони вам підходять. Ви можете спокійно все вивчити, перш ніж зробити оболонку своєю основною.

Якщо ви вирішите зробити fish – або будь-яку іншу оболонку – основною, потрібно скористатися командою `chsh`.

Команда `chsh`

Команда `chsh` дозволяє змінити оболонку за замовчуванням. Важливо розуміти, що вона дає змогу змінити як оболонку для входу, так і інтерактивну оболонку. Можливо, ви захочете змінити або ту, або іншу, або обидві одразу.

Щоразу, коли ви входите до системи, щоб отримати командний рядок, ви використовуєте оболонку, налаштовану як оболонку для входу. Коли ви вже ввійшли в систему та відкрили вікно терміналу, ви використовуєте оболонку, налаштовану як інтерактивну. Це можуть бути як однакові, так і різні оболонки.

Щоб налаштувати оболонку для входу, використовуйте `chsh` без параметрів:

chsh

Вам буде запропоновано ввести пароль. Після цього потрібно ввести шлях до нової оболонки та натиснути Enter.

Якщо ми встановимо віддалене з’єднання до цього тестового комп’ютера з іншого, то після входу потрапимо в fish оболонку.

Щоб змінити інтерактивну оболонку, використовуйте `chsh` з параметром `-s` (shell). Вкажіть шлях до нової оболонки в командному рядку:

chsh -s /usr/bin/fish

Вам запропонують ввести пароль, і ви повернетеся до командного рядка поточної оболонки. Щоб зміни набули чинності, потрібно вийти із системи та ввійти знову. Після цього ви побачите вітання та командний рядок оболонки fish.

Змінна середовища `$SHELL` тепер містить шлях до нової оболонки за замовчуванням:

echo $SHELL

Зміна оболонки для іншого облікового запису

Якщо у вас є права root і ви можете використовувати `sudo`, то можна змінити оболонки інших користувачів. Команда така ж, як і раніше, але з додаванням імені користувача в командний рядок:

sudo chsh -s /usr/bin/fish mary

Коли користувач Mary наступного разу увійде в систему, вона побачить нову оболонку, відкривши вікно терміналу.

На завершення