Функции
Zsh позволяет пользователю определять собственные функции, которые могут выполняться точно также как и обычные программы. Функции выполняются в том же процессе, что и вызвавшая их программа. При вызове функции аргументы передаются как позиционные параметры.
Распаковка архива
Чтобы распаковать архив не указывая тип распаковщика и его аркументы, а выполнив всего лишь команду вида
Добавьте следующий код в
ex () { if ; then case $1 in *.tar.bz2) tar xvjf $1 ;; *.tar.gz) tar xvzf $1 ;; *.tar.xz) tar xvfJ $1 ;; *.bz2) bunzip2 $1 ;; *.rar) unrar x $1 ;; *.gz) gunzip $1 ;; *.tar) tar xvf $1 ;; *.tbz2) tar xvjf $1 ;; *.tgz) tar xvzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *.7z) 7z x $1 ;; *) echo "'$1' Не может быть распакован при помощи >ex<" ;; esac else echo "'$1' не является допустимым файлом" fi }
Упаковка в архив
Упаковка в архив командой — при этом архив будет в Домашней папке.
pk () { if ; then case $1 in tbz) tar cjvf $2.tar.bz2 $2 ;; tgz) tar czvf $2.tar.gz $2 ;; tar) tar cpvf $2.tar $2 ;; bz2) bzip $2 ;; gz) gzip -c -9 -n $2 > $2.gz ;; zip) zip -r $2.zip $2 ;; 7z) 7z a $2.7z $2 ;; *) echo "'$1' не может быть упакован с помощью pk()" ;; esac else echo "'$1' не является допустимым файлом" fi }
Caps lock → control
В клавишу Control мы используем часто. Она расположена в неудобном месте, поэтому я переназначил ее на Caps Lock. В MacOS это делается так.
- Открыть “System Preferences”.
- Кликнуть “Keyboard”.
- Кликнуть “Modifier Keys…” в правом нижнем углу.
- С помощью выпадающего окна переназначить “caps lock” на “control”.
Заключение
Эта конфигурация:
- минималистична;
- эстетически привлекательна;
- информативна, так как предоставляет всю необходимую информацию о состоянии;
- поддается настройке через файлы конфигурации.
Надеюсь, что на основе этого вы сможете самостоятельно освоить простую и минималистичную настройку терминала.
- Введение в сетки в цифровом дизайне
- 8 мощных пакетов NPM для любого веб-разработчика
- Парсинг HTML из строки на Ruby On Rails
Читайте нас в Telegram, VK и
Installation
I don’t want to offer in-depth installation instructions for each operating system, rather some general guidelines instead. If you get stuck installing zsh, there is plenty of help available online.
At the time of writing the current zsh version is 5.7.1.
macOS
Most versions of macOS ship with zsh pre-installed. You can check if this is the case and if so, which version you are running using the command: . If the version is 4.3.9 or higher, you should be good to go (we’ll need at least this version to install Oh My Zsh later on). If not, you can follow to install a more recent version of zsh using homebrew.
Once installed, you can set zsh as the default shell using: . After issuing this command, you’ll need to log out, then log back in again for the changes to take effect.
If at any point you decide you don’t like zsh, you can revert to Bash using: .
Linux
On Ubuntu-based distros, you can install zsh using: . Once the installation completes, you can check the version using , then make zsh your default shell using . You’ll need to log out, then log back in for the changes to take effect.
As with macOS, you can revert back to Bash using: .
If you are running a non-Ubuntu based distro, then check out the .
Windows
Unfortunately, this is where things start to get a little complicated. Zsh is a Unix shell and for it to work on Windows, you’ll need to activate Windows Subsystem for Linux (WSL), an environment in Windows 10 for running Linux binaries.
There are various tutorials online explaining how to get up and running with zsh in Window 10s. I found these two to be up-to-date and easy to follow:
- How to Install and Use the Linux Bash Shell on Windows 10 – follow this one first to install WSL
- How to Use Zsh (or Another Shell) in Windows 10 – follow this one second to install zsh
Note that it is also possible to get zsh running with Cygwin. Here are .
Что такое shell?
Shell (или «шелл», «командная оболочка») — это не только командный интерпретатор, который обеспечивает интерфейс взаимодействия между пользователем и ядром операционной системы, но и своеобразный язык программирования, в котором присутствуют такие конструкции, как операторы условного ветвления, циклы, переменные и многое другое.
Операционная система (ОС) запускает командную оболочку для каждого пользователя, когда тот входит в систему или открывает окно терминала. Первым что пользователь увидит в окне терминала, будет приглашение оболочки — оно, как правило, состоит из имени пользователя и имени хоста, отделенные друг от друга символом , следом за ними идет путь текущей рабочей директории и один из двух символов: или .
Если пользователь не наделен особыми правами, то в качестве приглашения к вводу команд в терминале будет отображаться символ . Если же был выполнен вход под учетной записью привилегированного (root) пользователя, то в терминале вы увидите символ :
Окно терминала обычного пользователя (виден символ $)
Окно терминала привилегированного (root) пользователя (виден символ #)
Примечание: Знак тильды () указывает на то, что мы находимся в домашнем каталоге текущего пользователя.
После приглашения, пользователь вводит различные команды в терминал, оболочка запускает программы для пользователя, а затем отображает в терминале результат их выполнения. Команды могут быть либо введены непосредственно самим пользователем, либо считаны из файла, называемого shell-скриптом или shell-программой.
Ниже представлен пример выполнения простой команды , возвращающей текущую дату и время:
Uninstallation
Change the default shell before removing the package.
Warning: Failure to follow the below procedure may result in users no longer having access to a working shell.
Run following command:
$ chsh -s /bin/bash user
Use it for every user with zsh set as their login shell (including root if needed). When completed, the package can be removed.
Alternatively, change the default shell back to Bash by editing as root.
Warning: It is strongly recommended to use when editing as it helps prevent invalid entries and/or syntax errors.
For example, change the following:
username:x:1000:1000:Full Name,,,:/home/username:/usr/bin/zsh
To this:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bash
Сравниваем FreeBSD и Linux
И семейство BSD, и линуксы чаще всего разрабатываются на некоммерческой основе и доступны для бесплатного использования. Пользователи могут брать исходные коды и изменять по своему усмотрению.
И FreeBSD, и дистрибутивы семейства Linux являются UNIX-подобными операционными системами. Линукс изначально создавался Линусом Торвальдсом как свободная альтернатива UNIX-подобной системе MINIX, в то время как FreeBSD ближе к изначальной версии UNIX: первая ОС семейства BSD даже носила название Berkeley Unix.
Общее UNIX-наследие обоих семейств проявляется в использовании сходных паттернов. И там, и там взаимодействие пользователя с системой осуществляется преимущественно с помощью командного интерпретатора (shell), программный интерфейс приложения (API) обладает схожим функционалом, есть сходство и в иерархии файловой системы. Благодаря этому гораздо проще портировать приложения из FreeBSD в Linux и наоборот, нежели из других, не-UNIX-подобных систем.
Одно из основных отличий между семейством BSD и дистрибутивами, в основе которых лежит ядро Linux, состоит в типе лицензирования.
Большинство дистрибутивов Linux и приложений для них распространяются под лицензией GNU GPL, также известной как лицензия «copyleft» («авторское лево»), позволяющая использовать оригинальный код для создания новых продуктов, не запрашивая разрешения владельца исходных текстов, но сохраняя условия его распространения. Эта лицензия продвигает идею свободного распространения и открытости превыше всего
Поэтому при разработке проприетарного ПО стоит с осторожностью использовать продукты, лицензированные GPL
Операционные системы семейства BSD, в том числе и FreeBSD, распространяются под лицензией BSD, содержащей больше свободы, чем лицензия GPL, не требуя от всех производных продуктов сохранения всех условий исходной лицензии. Программное обеспечение под лицензией BSD можно свободно использовать для разработки проприетарных приложений с закрытым исходным кодом.
Еще одно принципиальное отличие заключается в том, что FreeBSD содержит не только ядро, но и базовые компоненты операционной системы, разработанные командой FreeBSD. В то время как линукс — это только ядро. А вот уже конкретный дистрибутив включает в себя помимо ядра и определенный набор программного обеспечения, собранный зачастую из разных источников.
Установка
Перед установкой на рабочую систему внимательно прочитайте это:
- Роль не установится, если у вас уже есть директория , переименуйте ее, если она у вас есть.
- Роль затрет ваш , сделайте бекап!
- После применения роли, если хотите и дальше управлять терминалом через ansible, нужно писать свои настройки либо в переменные плейбука, либо в , этот файл инклюдится в конце и ansible его не трогает.
Если все устраивает, можно установить роль через :
Потом создать плейбук вроде такого:
Сохранить, например, в . После этого роль можно применить к локальному юзеру:
Как применить к другим юзерам и серверам пользователи ansible думаю разберутся.
Проверено на Debian 6, Ubuntu 14.04, Ubuntu 16.04, macOS 10.12, CentOS 7.
Все доступные переменные не стал выносить в README.md, их можно посмотреть
в defaults/main.yml.
Выводы
Я понимаю, что конфиг терминала — очень личная вещь, не уверен, что будет много желающих воспользоваться именно моей ansible ролью, поэтому я постарался сделать ее максимально настраиваемой. Если будут желающие использовать, пожалуйста, оставляйте issues.
Конечно, это не последний конфиг, например, пока я писал эту статью, я нашел antigen, менеджер плагинов для zsh, который написан по аналогии с Vundle для Vim, заточен на работу в паре с oh-my-zsh и избавляет от ручной установки плагинов. Это как раз одна из проблем, которую я решал написанием роли. Поделитесь, кто пользовался.
В комментах хотелось бы найти новых вкусных плагинов, пожалуйста, напишите, какие плагины вызвали у вас чувство «как я жил без этого раньше?»
UPD: добавилась поддержка CentOS, спасибо, BeeVee!
Выбор темы
Дефолтная тема Oh My Zsh минималистична и хороша, но я предпочитаю Agnoster
Обратите внимание, как информативно выглядит в ней git-репозиторий
Чтобы установить тему из репозитория откройте файл ~/.zshrc, и в поле ZSH_THEME замените значение на имя понравившейся темы.
Подобрать тему можно на странице репозитория .
Чтобы установить внешнюю тему, скачайте ее, а затем переместите в каталог тем ~/.oh-my-zsh/custom/themes.
Если после установки темы наблюдаете проблему со шрифтами, странные символы или кривые уголочки нужно установить дополнительные шрифты .
Затем перейдите в настройки iTerm2 — Preferences, далее Profiles — Text и в поле Font выберите скачанный шрифт, например Meslo LG или Droid Sans. Перезапустите терминал, теперь шрифты будут корректно отображаться в выбранной теме.
Installation
Before starting, users may want to see what shell is currently being used:
$ echo $SHELL
Install the package. For additional completion definitions, install the package as well.
Initial configuration
Make sure that Zsh has been installed correctly by running the following in a terminal:
$ zsh
You should now see zsh-newuser-install, which will walk you through some basic configuration. If you want to skip this, press . If you did not see it, you can invoke it manually with:
$ autoload -Uz zsh-newuser-install $ zsh-newuser-install -f
Note: Make sure your terminal’s size is at least 72×15 otherwise zsh-newuser-install will not run.
Making Zsh your default shell
Change your shell to . See .
Tip: If replacing , users may want to move some code from to (e.g. the prompt and the ) and from to (e.g. ).
Фиксим проблему с PATH ¶
В Linux (не знаю как в MacOS), и в текущей версии я такой проблемы не словил, есть или можеть быть проблема что вы вбиваете команду в Zsh, а он говорит её нет. И это нормальное поведение, ведь в момент установки у вас был другой шелл, и возможно путь до бинарника указан в его индивидуальных настройках. Чтобы это исправить, достаточно указать путь до папки с бинарником(ами) в PATH переменную системы. Но bash’овский вариант прокатит до перезагрузки.
Вариант первый, это в файле конфига раскомментировать соответсвующую строку в самом начале и добавить нужные пути, либо добавить их прямо из терминала:
Установить Oh My Zsh
Одного использования Zsh достаточно для большинства пользователей, но если вы хотите получить от этой оболочки еще больше, установите Oh My Zsh. Чтобы получить Zsh, используйте инструмент загрузки wget, чтобы загрузить последнюю версию сценария установки. Имейте в виду, что на вашем ПК с Linux должен быть установлен пакет Git. Найдите «git» в диспетчере пакетов и установите его перед использованием Wget.
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh
Oh My Zsh, оказавшись на вашем ПК с Linux, создает хороший файл конфигурации Zsh с десятками различных плагинов на выбор. Чтобы включить любой из этих плагинов, вам необходимо отредактировать файл конфигурации Zsh. В терминале используйте текстовый редактор Nano, чтобы открыть ~ / .zshrc.
nano ~/.zshrc
Первыми в списке плагинов Oh My Zsh являются темы. По умолчанию тема «Робби Рассел» включена. Хотите чего-нибудь еще? Перейдите на эту страницу здесь, найдите тему и измените имя в кавычках на свою любимую тему.
Следуя теме, есть много других плагинов Zsh, которые нужно включить. Прокрутите список вниз с помощью клавиши со стрелкой и прочтите описание плагинов. Видишь тот, который тебе нравится? Удалите знак # перед кодом, чтобы активировать плагин.
Включите плагины, сохранив Nano (Ctrl + O, затем Ctrl + X) и перезапустив терминал.
Плагины Zsh
Oh My Zsh содержит кучу всяких плагинов для расширения терминала. Одна из их функций — предоставление полезных сокращений для часто используемых команд. Не все плагины загружаются по умолчанию, так как не все требуются для каждой конфигурации, а загрузка их чрезмерного количества просто излишне замедлит запуск.
Лично я загружаю следующие.
- → предоставляет полезные сокращения команд .
- → упрощает использование transfer.sh.
- → позволяет автоматически запускаться при открытии терминала.
- → удобные сокращения команд.
- → позволяет использовать предпочтительный поисковый движок из командной строки, открывая его в браузере. Я им пользуюсь нечасто.
Плагины
Плагины расширяют возможности Oh My Zsh. Список всех плагинов входящих в состав Oh My Zsh приведен на .
Как и в случае с темами, чтобы добавить плагин, нужно прописать его название в файле ~/.zshrc, секция plugins. Например, чтобы активировать плагин docker, добавьте «docker» в секцию plugins.
Чтобы установить сторонний плагин, его нужно предварительно скачать и положить в каталог сторонних плагинов ~/.oh-my-zsh/custom/plugins.По умолчанию включен только один плагин — git. Он показывает актуально ли текущее состояние репозитория, активную ветку и есть ли изменения. Таким образом не нужно постоянно проверять git branch -v и git status.Несколько полезных плагинов из репозитория Oh My Zsh:npm — добавлят поддержку автодополнения к npm;vagrant — автодополнения для vagrant, если пользуетесь им;composer — автодополнения и алиасы;sudo — если для выполнения команды потребовались права суперпользователя, плагин позволит не возвращаться в начало строки, а нажать два раза Esc, и он добавит sudo в начало команды.
И пара интересных внешних плагинов:
— добавляет подсветку синтаксиса, подсвечивает команду если в написании допущена ошибка; — предугадывает команды на основе ранее вводимых.
Удаление
Измените оболочку по умолчанию перед удалением пакета .
Важно: Несоблюдение процедуры ниже, может привести пользователя к невозможности получить доступ к рабочей оболочке
.
Запустите следующую команду:
$ chsh -s /bin/bash user
Где user — имя пользователя.
Используйте эту команду для каждого пользователя с установленной оболочкой zsh (в том числе и root при необходимости). После, удалите пакет .
Кроме того, изменить оболочку по умолчанию обратно в Bash, можно редактируя от root.
Важно: Настоятельно рекомендуется использовать когда редактируете это помогает предотвратить неверные записи и/или ошибки синтаксиса.
Например, изменить следующие:
username:x:1000:1000:Full Name,,,:/home/username:/bin/zsh
На:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bash
Кому будет полезна эта статья?
Вы уже освоили джентльменский набор Гита и готовы двигаться дальше? Существует 2 пути:
- Освоить сокращённые команды – алиасы. Они почти всегда составлены мнемонически и легко запоминаются. Забыть оригиналы команд проблематично, я легко их набираю, когда это требуется. Плюс не сбиваюсь с мысли, проверяя что-то в Гите в процессе написания кода.
- Узнать о дополнительных флагах к командам, а также их объединении между собой. Я понимаю, что кто-то ненавидит сокращения. Для вас тоже есть интересный материал в статье – как повысить полезность и удобство вывода команд, а также как решать не самые тривиальные, но часто встречающиеся на практике задачи.
Посвятите описанным в статье экспериментам пару часов сегодня, и сэкономьте по приблизительным расчётам полгода рабочей жизни.
Добро пожаловать под кат!
Contents
Name | Description | Author |
---|---|---|
Install one or more versions of the specified language with and installs your selection with | fzf wiki | |
Select one or more versions of the specified language with and uninstalls your selection with | fzf wiki | |
Rummages through your Chrome bookmarks with and opens the selected bookmark(s) in your default browser | fzf wiki | |
Uses to select containers to start and attach to. | From the fzf wiki | |
Uses to select containers to start and attach to. | From the fzf wiki | |
Uses to select containers to remove. | From the fzf wiki | |
Searches your ZSH aliases, then puts your selection on the mac clipboard (macOS only) | ||
Uses and to find a term in files | ||
Uses to select programs to install (or show the home page) based on the output of | ||
Uses to select -installed programs to delete (or show the home page) | ||
Uses to select programs to install based on the output of | ||
Uses to select -installed programs to delete | ||
Uses to select -installed programs to update | ||
Uses to select files (displaying previews) to edit with | ||
Uses to select a branch name in a repository for use in scripts | ||
Uses to check out a branch in a repository | ||
Uses to select files (displaying previews) that contain a search term to edit with | ||
Uses to select processes to kill | ||
Use to select a PR using | ? | |
Uses to search for a session or create one if no matches. | From the fzf wiki | |
Uses to select a session and kills it. | From the fzf wiki | |
Uses to select a session. Skips if there’s only one match, exits if no match. | From the fzf wiki | |
Uses to select a box and connect to it with . | From the fzf wiki |
Файлы Запуска/Завершения
Примечание:
- Если не определена, используется по умолчанию.
- Если опция не установлена ни в одном из файлов, файлы конфигурации не будут получены после этого файла.
- Если опция не задана ни в одном из файлов, после этого файла не будут найдены глобальные конфигурационные файлы ().
При запуске Zsh по умолчанию он будет загружать следующие файлы в этом порядке:
- Используется для установки общесистемных переменных environment variables (Русский); Он не должен содержать команд, которые производят вывод, или предполагает, что shell подключен к tty. Этот файл всегда будет источником, это нельзя переопределить.
- Используется для установки переменных среды пользователя; Он не должен содержать команд, которые производят вывод, или предполагает, что shell подключен к tty. Этот файл всегда будет источником.
- Используется для выполнения пользовательских команд при запуске, будет вызван при запуске как login shell.
- Используется для настройки интерактивной конфигурации оболочки и выполнения команд, будет вызван при запуске как interactive shell.
- Используется для настройки интерактивной конфигурации пользователя и выполнения команд, будет вызван при запуске как interactive shell.
- Используется для выполнения команд при завершении прогресса инициализации, будет вызван при запуске как login shell.
- Используется для выполнения пользовательских команд при завершении начального прогресса, будет вызван при запуске как login shell.
- Будет получен, когда login shell завершится.
- Будет получен, когда login shell завершится.
Примечание:
не является частью обычного списка запускаемых файлов Zsh, но поступает из в пакете
Пользователи должны принять во внимание, что устанавливает переменную которая перезапишет любую переменную установленную в. Чтобы это предотвратить, установите переменную в .
Мигрируй на Zsh
Zsh она же — одна из современных командных оболочек Unix. Мало кто знаком и использует все ее функции. Однако это и не требуется — фреймворк Oh My Zsh, который мы установим далее, позволит настраивать ее и кастомизировать с помощью тем и плагинов.
У пользователей MacOS, скорее всего, Zsh уже установлена, если нет — установите с помощью менеджера пакетов Homebrew, а затем сделайте zsh оболочкой по умолчанию.
Установка zsh в Ubuntu и Debian.
Пользователи прочих Unix систем наверняка справятся с .
Убедиться, что zsh является оболочкой по умолчанию можно следующей командой.
Результат /bin/zsh означает, что все сделано верно.
Далее необходимо перелогиниться. Когда вновь откроете терминал, возможно увидите приветственное сообщение zsh. Ничего не меняйте и выйдите, выбрав q.
Установка плагинов ¶
Начнем с установки нужных нам плагинов. Из коробки там стоит только git, больше никакие плагины не активированы. Список всех додступных плагинов поставляемых с фреймворком можно посмотреть на странице wiki, с описанием для чего они используются.
Например я хочу поставить себе следующие плагины:
- npm — добавлят поддержку автодополнения к команде npm
- vagrant — так как я часто пользуюсь vagrant из-за Drupal VM, то мне он тоже не помешает. Также как и npm добавляет поддержку автодополнения. Там же есть и docker.
- composer — в 8-ке очень активно использую composer, а данный плагин опять же, добавляет автодополнение, и помимо этого различные полезные синонимы команд. Например = .
- sudo — частенько бывает и такое, что вбиваешь или копируешь команду из интернета, но для неё требуются права супер-пользователя. Постоянно переводить курсор и дописывать муторно, а данный плагин позволяет просто нажать два раза , и он сам добавит sudo в начало команды.
- web-search — а иногда случается ситуация, что роешься в консоли и забыл какую-то команду, нужно гуглануть, и чтобы не переключаться на браузер, не кликать на строку поиска, данный плагин позволяет написать , и в браузере по умолчанию сразу откроются результаты.
Там куча других плагинов, можно писать свои, выбирайте на свой вкус и под свои задачи, я продолжу гайд как поставить указаныне выше плагины (остальные ставятся абсолютно также).
Для того чтобы включить данные плагины (они уже есть в комплекте), достаточно отредактировать файл . Для этого, в ubuntu, достаточно написать или , что вам удобнее. Открываем данный файл на редактирование и ищем строку и добавляем туда все нужные нам плагины, учитывая список выше, вышло следующее: . После изменения данного файла, всегда необходимо прописывать , иначе изменения вступят в силу только после перезагрузки.
После этого можете тестировать работу.
Заключение
В статье показывается точка для оптимизации трудовой деятельности программиста. Запомнить 10-20 мнемонических сокращений не составляет труда, забыть оригинальные команды практически невозможно. Алиасы стандартизированы, так что при переходе всей команды на + , вы сможете работать с теми же скоростью и комфортом, даже при парном программировании.
Куда двигаться дальше?
Предлагаю следующие варианты:
Некоторые алиасы сделаны нетривиально, но оказываются очень полезными на практике. Многие из представленных алиасов являются не просто сокращениями, а небольшими функциями, которые ещё больше оптимизируют работу. Пользоваться Гитом стало приятнее, качество коммитов повысилось.
Надеюсь, материал оказался полезным, и вы смогли узнать для себя что-то новое. А может быть уже начали активно внедрять новый подход. Удачи!