Опыт работы с unix linux shell

Содержание
  1. Что такое командная оболочка (shell) в Linux?
  2. Что такое shell?
  3. Внутренние и внешние команды оболочки
  4. Как узнать какая оболочка у меня установлена?
  5. Типы командных оболочек
  6. sh (Bourne shell)
  7. bash (Bourne-Again shell)
  8. ksh (Korn shell)
  9. csh (C shell)
  10. tcsh (TENEX C Shell)
  11. zsh (Z Shell)
  12. Резюмируем
  13. Наглядный shell: овладеваем Linux, macOS и UNIX shell
  14. Разузнаём информацию о текущей оболочке
  15. Узнаём, какие оболочки установлены
  16. Временно меняем оболочку
  17. Узнаем количество оболочек, запущенных внутри друг друга (уровень их вложенности)
  18. Изменяем текущую оболочку для всех будующих сеансов с помощью команды chsh
  19. Узнаём конфигурацию окружения
  20. Просмотр значений переменных окружения
  21. Добавление и настройка новой переменной
  22. Находим конфигурационные файлы оболочки
  23. Напуганы инициализацией файлов bash?
  24. Находим файлы конфигурации zsh
  25. Находим файлы конфигурации ksh
  26. Находим файлы конфигурации tcsh
  27. Могу я создать такой скрипт, чтобы он загружался каждый раз при входе в систему?
  28. Могу я создать такой скрипт, чтобы он загружался каждый раз при выходе из системы?
  29. История: получаем больше информации
  30. Смена профиля с помощью sudo или su
  31. Алиасы
  32. Создание алиасов
  33. Функции оболочки

Что такое командная оболочка (shell) в Linux?

Обновл. 27 Июл 2021 |

В этой статье мы разберемся, что такое shell и зачем это нужно, а также рассмотрим наиболее часто используемые командные оболочки в Linux и Unix.

Что такое shell?

Shell (или «шелл», «командная оболочка») — это не только командный интерпретатор, который обеспечивает интерфейс взаимодействия между пользователем и ядром операционной системы, но и своеобразный язык программирования, в котором присутствуют такие конструкции, как операторы условного ветвления, циклы, переменные и многое другое.

Операционная система (ОС) запускает командную оболочку для каждого пользователя, когда тот входит в систему или открывает окно терминала. Первым что пользователь увидит в окне терминала, будет приглашение оболочки — оно, как правило, состоит из имени пользователя и имени хоста, отделенные друг от друга символом @ , следом за ними идет путь текущей рабочей директории и один из двух символов: $ или # .

Если пользователь не наделен особыми правами, то в качестве приглашения к вводу команд в терминале будет отображаться символ $ . Если же был выполнен вход под учетной записью привилегированного (root) пользователя, то в терминале вы увидите символ # :

Окно терминала обычного пользователя (виден символ $)

Окно терминала привилегированного (root) пользователя (виден символ #)

Примечание: Знак тильды (

) указывает на то, что мы находимся в домашнем каталоге текущего пользователя.

После приглашения, пользователь вводит различные команды в терминал, оболочка запускает программы для пользователя, а затем отображает в терминале результат их выполнения. Команды могут быть либо введены непосредственно самим пользователем, либо считаны из файла, называемого shell-скриптом или shell-программой.

Ниже представлен пример выполнения простой команды date , возвращающей текущую дату и время:

Внутренние и внешние команды оболочки

Вводимые пользователем команды делятся на два типа:

Внутренние — это команды, изначально встроенные в оболочку.

Внешние — это команды, которые не встроены в оболочку. По своей сути они являются скорее небольшими отдельными программами, расположенными где-то в файловой системе (обычно, в каталогах /bin или /usr/bin).

Чтобы определить тип команды, достаточно в окне терминала ввести type :

Как вы можете видеть, команды dirs , pwd , cd и true — являются внутренними командами оболочки bash. А вот команды uname , id и whereis — являются внешними, т.к. они ссылаются на соответствующие файлы в каталоге /usr/bin.

Ознакомиться с полным списком внутренних команд оболочки можно при помощи команды help :

Читайте также:  Nginx или apache для windows

Как узнать какая оболочка у меня установлена?

Если вы только начинаете свое знакомство с Linux и не меняли оболочку, то наиболее вероятно, что в вашей системе используется bash. Самый простой способ узнать, какая оболочка используется в данный момент — это обратиться к переменной окружения SHELL :

Кроме того, можно задействовать команду ps –p $$ , возвращающую информацию о процессе с заданным идентификатором. В нашем случае, идентификатором оболочки являются символы $$ :

Не трудно заметить, что в настоящее время используется оболочка bash. Для просмотра всех доступных оболочек в вашей системе, необходимо обратиться к содержимому файла /etc/shells:

Типы командных оболочек

В *nix-системах существует два основных типа оболочек: оболочки на основе Bourne shell и оболочки на основе C shell.

Типичными представителями оболочек типа Bourne shell являются:

sh (Bourne shell)

bash (Bourne Again shell)

К оболочкам типа C Shell относятся:

tcsh (TENEX/TOPS C shell)

Ниже представлены некоторые из самых распространенных шеллов, используемых в *nix-системах:

Примечание: Термин «*nix-системы» обозначает Unix-подобные операционные системы.

sh (Bourne shell)

sh (сокр. от «Bourne shell») — это самая старая (среди рассматриваемых) оболочка, написанная Стивеном Борном из AT&T Bell Labs для ОС UNIX v7. Оболочка доступна практически в любом *nix-дистрибутиве. Многие другие шеллы уходят своими корнями именно к sh. Благодаря своей скорости работы и компактности, данная оболочка является предпочтительным средством для написания shell-скриптов. К её недостаткам можно отнести отсутствие функций для использования оболочки в интерактивном режиме, а также отсутствие встроенной обработки арифметических и логических выражений.

Примечание: Стоит отметить, что из-за общего морального устаревания оболочки, в современных системах ссылка на шелл sh (/bin/sh), обычно, является псевдонимом для запуска текущей, более новой оболочки.

Характерные черты sh:

Полные пути к интерпретатору: /bin/sh и /sbin/sh.

Приглашение для обычного пользователя: $ .

Приглашение для суперпользователя (root): # .

bash (Bourne-Again shell)

bash (сокр. от «Bourne–Again shell») — это усовершенствованный и дополненный вариант шелла sh, является одной из самых популярных современных командных оболочек *nix-систем.

Объединяет в себе полезные фишки оболочек ksh и csh.

Поддерживает навигацию при помощи стрелок, благодаря чему можно просматривать историю команд и выполнять редактирование прямо в командной строке.

Характерные черты bash:

Полный путь к интерпретатору: /bin/bash.

Приглашение для обычного пользователя: имя_пользователя@имя_хоста:

— это домашний каталог текущего пользователя, например, mrsmith@mypc:

Приглашение для суперпользователя (root): root@имя_хоста:

ksh (Korn shell)

ksh (сокр. от «Korn shell») — это командная оболочка, разработанная Дэвидом Корном из AT&T Bell Labs в 1980-x годах.

Является расширением sh.

Имеет обратную совместимость с sh.

Имеет интерактивный функционал, сравнимый с csh.

Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений/функций, Си-подобный синтаксис скриптов и средства для работы со строками.

Работает быстрее, чем csh.

Может запускать скрипты, написанные для sh.

Характерные черты ksh:

Полный путь к интерпретатору: /bin/ksh.

Приглашение для обычного пользователя: $ .

Приглашение для суперпользователя (root): # .

csh (C shell)

csh (сокр. от «C shell») — это командная оболочка, созданная Биллом Джоем (автором редактора vi) с целью усовершенствования стандартного шелла Unix (sh).

Читайте также:  Кнопка пуск для windows 10 где находится

Имеет встроенные функции для интерактивного использования, например, псевдонимы (aliases) и историю команд.

Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений и Cи-подобный синтаксис скриптов.

Характерные черты csh:

Полный путь к интерпретатору: /bin/csh.

Приглашение для обычного пользователя: % .

Приглашение для суперпользователя (root): # .

tcsh (TENEX C Shell)

tcsh (сокр. от «TENEX C shell») — это командная оболочка, созданная Кэном Гриром, которая позиционируется как улучшенная версия шелла csh.

Имеет полную совместимость csh.

Именно в данном шелле впервые появилась функция автодополнения команд и путей.

Удобна для интерактивной работы.

Поддерживает редактор командной строки в стиле vi или emacs.

Является стандартным шеллом во FreeBSD.

Характерные черты tcsh:

Полный путь к интерпретатору: /bin/tcsh.

Приглашение для обычного пользователя: имя_хоста:

Приглашение для суперпользователя (root): # .

zsh (Z Shell)

zsh (сокр. от «Z shell») — это командная оболочка, созданная Паулем Фалстадом во время его учебы в Принстонском университете, позиционируется как свободная современная sh-совместимая командная оболочка.

Среди стандартных шеллов больше всего похожа на ksh, но включает в себя множество улучшений.

Встроенная поддержка программируемого автодополнения команд, имен файлов и пр.

Поддержка проверки орфографии и опечаток.

Раздельная история команд для одновременной работы с несколькими запущенными шеллами.

Характерные черты zsh:

Полный путь к интерпретатору: /bin/zsh.

Приглашение для обычного пользователя: имя_хоста% .

Приглашение для суперпользователя (root): root@имя_хоста:

Резюмируем

Краткая сводная таблица для 6 вышерассмотренных командных оболочек:

Командная оболочка Путь Приглашение (обычный пользователь) Приглашение (root)
sh (Bourne Shell) /bin/sh и /sbin/sh $ #
bash (Bourne-Again Shell) /bin/bash имя_пользователя@имя_хоста:

$ имя_пользователя@имя_хоста:

# ksh (Korn Shell) /bin/ksh $ # csh (C Shell) /bin/csh % # tcsh (TENEX C Shell) /bin/tcsh имя_хоста:

> # zsh (Z Shell) /bin/zsh % #

Примечание: Помимо представленных выше оболочек, есть еще и такие оболочки, как:

mksh — оболочка, основной упор в которой сделан на написание скриптов;

dash — более легковесная в сравнении с bash оболочка, но из-за этого обладающая ограниченной функциональностью;

fish — «новая» оболочка, написанная в 2005 году, отличительной чертой которой является упор на комфорт использования и упрощение командного языка;

Поделиться в социальных сетях:

Источник

Наглядный shell: овладеваем Linux, macOS и UNIX shell

Я нашёл силы перенести этот пост из старого блога, но понял, что его структура довольна плоха и тяжела для восприятия (как и в оригинале). Но я надеюсь, что он кому-нибудь будет полезен.

На 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

/.cshrc для C Shell.
Смотрите файл

/.cshrc для TC shell.

Могу я создать такой скрипт, чтобы он загружался каждый раз при входе в систему?

Да, добавьте все команды и алиасы в файлы

/.bashrc (bash shell) или

/.profile (sh/ksh/bash) либо

Могу я создать такой скрипт, чтобы он загружался каждый раз при выходе из системы?

Да, добавьте все команды и алиасы в файлы

/.bash_logout (bash) или

История: получаем больше информации

  • Просто введите history для просмотра истории.
  • Введите history 20 , чтобы увидеть последние 20 команд из истории.
  • Можно переиспользовать команды. Просто нажимайте клавиши [Вверх] и [Вниз], чтобы просмотреть предыдущие команды. Нажмите Ctrl+R для поиска в обратном порядке по истории. Чтобы повторить последнюю выполненную команду, введите !! .
  • Чтобы выполнить команду №93 из истории, введите !93

Смена профиля с помощью sudo или su

Алиасы

Алиасы это просто напросто сокращения для команд. Для просмотра списка алиасов введите команду alias .

Создание алиасов

Синтаксис для bash/zsh :

Функции оболочки

Функции Bash/ksh/zsh позволяют производить дальнейшую кастомизацию вашего окружения. В этом примере напишем простую функцию memcpu() , отображающую первые 10 прожорливых процессов CPU/RAM:

Источник

Читайте также:  Настройка kali linux для работы сетевых подключений
Оцените статью