Наглядный shell: овладеваем Linux, macOS и UNIX shell
Это перевод статьи A Shell Primer: Master Your Linux, OS X, Unix Shell Environment.
Я нашёл силы перенести этот пост из старого блога, но понял, что его структура довольна плоха и тяжела для восприятия (как и в оригинале). Но я надеюсь, что он кому-нибудь будет полезен.
На Linux или Unix-подобных системах каждый пользователь и процесс работают в специальном окружении. Оно включает в себя переменные, настройки, алиасы и функции. Далее будет приведено краткое введение в некоторые полезные команды оболочки с примерами использования и настройки окружения для увеличения удобства работы с командной строкой.
Разузнаём информацию о текущей оболочке
Введите одну из следующих команд в терминале:
Пример вывода:
Узнаём, какие оболочки установлены
Чтобы узнать полный путь до установленной оболочки, введите:
Пример вывода:
Файл /etc/shells
содержит список оболочек, установленных в системе. Одна строка файла соответствует одной оболочке и содержит путь до неё относительно корня диска. Введите команду cat
, чтобы увидеть список оболочек на своей системе:
Пример вывода:
Временно меняем оболочку
Для временной смены оболочки просто введите её имя в консоли. Например, изменим оболочку на sh
:
Мы только что временно изменили нашу оболочку на sh. Чтобы покинуть её, необходимо нажать Ctrl+D, либо ввести следующую команду:
Узнаем количество оболочек, запущенных внутри друг друга (уровень их вложенности)
Значение переменной $SHLVL
увеличивается каждый раз, как запускается новая копия bash. Введите следующую команду:
Пример вывода:
Изменяем текущую оболочку для всех будующих сеансов с помощью команды chsh
Хотите изменить оболочку с bash на zsh для себя? Введите команду:
Хотите изменить оболочку другого пользователя с bash на ksh? Введите эту команду:
Узнаём конфигурацию окружения
Нужно использовать команду env
, чтобы получить параметры текущего окружения.
Пример вывода (коротко):
Переменная | Значение | Команда для просмотра значения |
---|---|---|
BASH_VERSION | Текущая версия Bash | echo $BASH_VERSION |
HOSTNAME | Имя хоста | echo $HOSTNAME |
HISTFILE | Имя файла с историей | echo $HISTFILE |
HISTFILESIZE | Размер файла с историей | echo $HISTFILESIZE |
HISTSIZE | Количество команд, сохраняющихся в историю (500 по умолчанию) | echo $HISTSIZE |
HOME | Домашняя директория текущего пользователя | echo $HOME |
PATH | Путь поиска для команд. Это список директорий, разделённых точкой с запятой, которые сканирует оболочка | echo $PATH |
PS1 | Натройки строки ввода | echo $PS1 |
SHELL | Путь до оболочки по умолчанию | echo $SHELL |
EDITOR | Текстовый редактор по умолчанию | export EDITOR=/usr/bin/vim |
Внимание! Будет отличной идеей не изменять следующие переменные окружения, так как после этого они могут остановить работу терминала: SHELL
, UID
, RANDOM
, PWD
, PPID
, SSH_AUTH_SOCK
, USER
, HOME
, LINENO
.
Просмотр значений переменных окружения
Можно использовать одну из следующих команд для отображения значения переменной окружения HOME
:
Пример вывода:
Добавление и настройка новой переменной
Такой синтаксис работает для оболочек bash
, zsh
, sh
и ksh
:
Как же изменить уже существующие переменные?
Для tcsh синтаксис следующий:
Находим конфигурационные файлы оболочки
Введите следующую команду для вывода файлов оболочки:
Пример вывода:
Для просмотра всех конфигурационных файлов оболочки введите:
Вы можете отредактировать конфигурационные файлы один за одним используя текстовый редактор:
Чтобы отредактировать файлы в /etc/
, введите:
Напуганы инициализацией файлов bash?
Следующий граф вам поможет разобраться:
Находим файлы конфигурации zsh
В wiki для zsh
рекомендуют следующую команду:
Пример вывода
Введите следующую команду, чтобы отобразить все файлы zsh
:
Чтобы найти все файлы конфигурации zsh
, введите
Находим файлы конфигурации ksh
Смотрите файл ~/.profile
или /etc/profile
.
Находим файлы конфигурации tcsh
- Смотрите файл
~/.login
,~/.cshrc
для C Shell. - Смотрите файл
~/.tcshrc
и~/.cshrc
для TC shell.
Могу я создать такой скрипт, чтобы он загружался каждый раз при входе в систему?
Да, добавьте все команды и алиасы в файлы ~/.bashrc
(bash shell) или ~/.profile
(sh/ksh/bash) либо ~/.login
(csh/tcsh).
Могу я создать такой скрипт, чтобы он загружался каждый раз при выходе из системы?
Да, добавьте все команды и алиасы в файлы ~/.bash_logout (bash) или ~/.logout (csh/tcsh).
История: получаем больше информации
- Просто введите
history
для просмотра истории. - Введите
history 20
, чтобы увидеть последние 20 команд из истории. - Можно переиспользовать команды. Просто нажимайте клавиши [Вверх] и [Вниз], чтобы просмотреть предыдущие команды. Нажмите Ctrl+R для поиска в обратном порядке по истории. Чтобы повторить последнюю выполненную команду, введите
!!
. - Чтобы выполнить команду №93 из истории, введите
!93
Смена профиля с помощью sudo или su
Синтаксис следующий:
Алиасы
Алиасы это просто напросто сокращения для команд. Для просмотра списка алиасов введите команду alias
.
Создание алиасов
Синтаксис для bash/zsh
:
Функции оболочки
Функции Bash/ksh/zsh позволяют производить дальнейшую кастомизацию вашего окружения. В этом примере напишем простую функцию memcpu()
, отображающую первые 10 прожорливых процессов CPU/RAM: