Не bash'ем единым...
В настоящий момент bash является самой распространённой командной оболочкой. Фактически это стандарт, который начал развиваться со времён появления Linux. И, как обычно, решение по умолчанию не является ни самым простым для изучения, ни самым быстрым.
Конечно, при должной настройке bash может быть очень удобен, но ни скорости dash, ни дружелюбности при интерактивной работе fish или zsh вы добиться, скорее всего, не сможете. Но если dash скуден в своём функционале и неудобен при интерактивной работе, то fish очень прост в освоении и удобен при работе, хотя его формат скриптов несовместим с bash'евским.
Зато zsh - оболочка, которая умеет всё то, что и bash. Есть только одно отличие - zsh всё делает быстрее, предлагает больше и намного удобнее. Кстати, в debian или ubuntu его можно установить командой
# apt-get install zsh
(для ubuntu нужно либо добавить sudo в начале, либо перед выполнением команды набрать sudo -s).
При первом запуске предлагается меню настройки, чтобы можно было отрегулировать основные параметры, причём все они подробно откомментированы и выбраны разумные настройки по умолчанию. У zsh есть все функции, которые можно придумать, даже проверка написания. Например, если ввести mna, то будет предложено исправить на man. Естественно, как и у bash, есть программируемое автодополнение, встроенные команды и функции для создания скриптов. Кроме того, есть небольшие приятные мелочи при работе, например, можно ввести просто имя каталога без cd для перехода в него (естественно, это отключается), к тому же при автодополнении работает подсветка файлов. Само автодополнение - вообще сказка. Так как zsh - программируемая оболочка, то и дополнение тоже настраивается. Например, набрав mplayer и нажав TAB, вам будет предложен список файлов, которые он может воспроизвести, подобным образом же показываются и другие формы, поддерживаемые им (например, dvd:// или vcd://). К тому же можно разделить подсказки по типам - команды отдельно, файлы отдельно. И ещё одна приятная мелочь - в отличие от bash, в zsh много готовых шаблонов для автодополнений опции, причём для каждой есть комментарий, обьясняющий, что эта самая опция делает.
Ещё одним достоинством является новый шаблон автозамещения **. Он обозначает любую комбинацию символов, включая "/". То есть можно ввести команду
$ ls /usr/**/bin/e*
будет выведен список всех файлов, начинающихся с e и находящихся в каталогах /usr/bin/, /usr/local/bin/, /usr/X11R6/bin/.
Отдельной темы разговора заслуживают алиасы. Если в bash они будут работать, только если введённая команда начинается с алиаса, то zsh в этом плане более гибок. Во-первых, есть так называемые глобальные алиасы, которые будут работать и в конце. Например, можно сделать так:
$ alias -g M='|more'
и в результате для использования команды "| more" достаточно только написать в конце M. Например, так:
$ ls -a ~ M
И это будет эквивалентно
$ ls -a ~ | more
Правда, стоит заметить, что глобальные алиасы нужно использовать осторожно, чтобы замена потом не помешала нормально работать.
Ещё очень интересным решением являются алиасы-суффиксы (Suffix aliases), которые обозначаются так:
$ alias -s jpg=gwenview
теперь команда "имя_картинки.jpg" будет заменена на "gwenview имя_картинки.jpg".
Иногда это бывает удобно для настройки тех программ, которыми будут открываться такие типы файлов.
Кроме всего этого, zsh отличается большой гибкостью настроек, которые задаются командой setopt. Например, "$ setopt NO_glob" отключает возможность использования регулярных выражений. То есть при вызове команды cat * будет выведено содержимое файла с именем "*", а если выполнить после "$ setopt glob" cat *, то будет выведено содержимое всех файлов в текущей директории.
Напоследок стоит отметить, что настройки для текущего пользователя хранятся в файле ~/.zshrc в формате обычных команд, которые будут срабатывать каждый раз при запуске оболочки. Кстати, он создастся автоматически при первом запуске zsh после того, как вы ответите на ряд вопросов.
Теперь ещё один важный момент: после того, как вы посмотрели, настроили и решили, что пора менять bash на zsh, скорее всего, возник вопрос о том, как же сделать так, чтобы он загружался каждый раз при запуске консоли. Информация о пользователях хранится в файле /etc/passwd. Открыв его с правами рута, можно увидеть информацию о всех данных, разделённых ":" для всех пользователей. Ну, конечно, не обо всех, а только о наиболее важных (логин, пароль, UID, GID, имя или комментарий, домашний каталог и командная оболочка). Правда, вместо пароля будет, скорее всего, стоять буква "x", что значит, что хеш его пароля находится в файле /etc/shadow.
Теперь находим строку, соответствующую вашему пользователю, и меняем для него оболочку. Например, было что-то вроде
oni:x:1000:1000:oni,,,:/home/oni:/bin/bash
И необходимо заменить /bin/bash в самом конце на /bin/zsh. То есть выглядеть это будет вроде
oni:x:1000:1000:oni,,,:/home/oni:/bin/zsh
После этого сохраняемся, выходим из системы и при следующем логине всё будет работать.
Кстати, множество примеров конфигурационных файлов можно найти в Интернете, например, на сайте posix.ru, при помощи которых можно удобно настроить всё для себя.
На сегодня это всё и пора прощаться. До следующих встреч!
Антон ЛИПАРИН,
oni-ddr.livejournal.com
Горячие темы