- Command-line shell
- Contents
- List of shells
- POSIX compliant
- Alternative shells
- Changing your default shell
- Login shell
- Configuration files
- /etc/profile
- Standardisation
- Input and output
- Help:Reading (Русский)
- Contents
- Организация
- Форматирование
- Обычный пользователь или root
- Добавить, создать, редактировать
- Сделать исполняемым
- Source
- Установка пакетов
- Официальные пакеты
- Репозиторий пользователей Arch (AUR)
- Управление юнитами systemd
- Общесистемные или пользовательские настройки
- Общие файлы оболочек
- Псевдо-переменные в примерах кода
- Многоточие
Command-line shell
A Unix shell is a command-line interpreter or shell that provides a traditional user interface for the Unix operating system and for Unix-like systems. Users direct the operation of the computer by entering commands as text for a command line interpreter to execute or by creating text scripts of one or more such commands.
Contents
List of shells
Shells that are more or less POSIX compliant are listed under #POSIX compliant, while shells that have a different syntax are under #Alternative shells.
POSIX compliant
These shells can all be linked from /usr/bin/sh . When Bash, mksh AUR and zsh are invoked with the sh name, they automatically become more POSIX compliant.
- Bash — Bash extends the Bourne shell with command-line history and completion, indexed and associative arrays, integer arithmetic, process substitution, here strings, regular expression matching and brace expansion.
https://www.gnu.org/software/bash/ || bash
- Dash — Descendant of the NetBSD version of the Almquist SHell (ash). A fast POSIX-compliant shell that aims to be as small as possible.
http://gondor.apana.org.au/
herbert/dash/ || dash
- KornShell (ksh) — The KornShell language is a complete, powerful, high-level programming language for writing applications, often more easily and quickly than with other high-level languages. This makes it especially suitable for prototyping. ksh has the best features of the Bourne shell and the C shell, plus many new features of its own. Thus ksh can do much to enhance your productivity and the quality of your work, both in interacting with the system, and in programming. ksh programs are easier to write, and are more concise and readable than programs written in a lower level language such as C.
http://www.kornshell.com || See the article.
- OSH (Oil Shell) — Oil Shell is a Bash-compatible UNIX command-line shell. OSH can be run on most UNIX-like operating systems, including GNU/Linux. It is written in Python (v2.7), but ships with a native executable. The dialect of Bash recognized by OSH is called the OSH language.
https://www.oilshell.org || oshAUR
- Yash — Yet another shell, is a POSIX-compliant command line shell written in C99 (ISO/IEC 9899:1999). Yash is intended to be the most POSIX-compliant shell in the world while supporting features for daily interactive and scripting use.
https://yash.osdn.jp || yashAUR
- Zsh — Shell designed for interactive use, although it is also a powerful scripting language. Many of the useful features of Bash, ksh, and tcsh were incorporated into Zsh; many original features were added. The introductory document details some of the unique features of Zsh.
https://www.zsh.org/ || zsh
Alternative shells
- C shell (tcsh) — Command language interpreter usable both as an interactive login shell and a shell script command processor. It includes a command-line editor, programmable word completion, spelling correction, a history mechanism, job control and a C-like syntax.
https://www.tcsh.org || tcsh
- Elvish — Elvish is a modern and expressive shell, that can carry internal structured values through pipelines. This feature makes possible avoiding a lot of complex text processing code. It features an expressive programming language, with features like exceptions, namespacing and anonymous functions. It also has a powerful readline which checks the syntax while typing, and syntax highlighting by default.
https://elv.sh || elvish
- fish — Smart and user-friendly command line shell. Fish performs full-color command line syntax highlighting, as well as highlighting and completion for commands and their arguments, file existence, and history. It supports complete-as-you-type for history and commands. Fish is able to parse the system’s man pages in order to determine valid arguments for commands, allowing it to highlight and complete commands. Easy last-command revision can be done using Alt+Up . The fish daemon (fishd) facilitates synchronized history across all instances of fish, as well as universal and persistent environment variables. Additionally, fish features significantly simplified programming syntax and control flow (similar to ruby). For more information, see the tutorial.
https://fishshell.com/ || fish
- ion — Ion is a modern system shell that features a simple, yet powerful, syntax. It is written entirely in Rust, which greatly increases the overall quality and security of the shell, eliminating the possibilities of a ShellShock-like vulnerability, and making development easier. It also offers a level of performance that exceeds that of Dash, when taking advantage of Ion’s features. While it is developed alongside, and primarily for, RedoxOS, it is a fully capable on other *nix platforms. For more details lookup its manual.
https://gitlab.redox-os.org/redox-os/ion/ || ion-gitAUR
- Nash — Nash is a system shell, inspired by plan9 rc, that makes it easy to create reliable and safe scripts taking advantages of operating systems namespaces (on linux and plan9) in an idiomatic way.
https://github.com/NeowayLabs/nash || nash-gitAUR
- nushell — Nu draws inspiration from functional programming languages, and modern CLI tools. Rather than thinking of files and services as raw streams of text, Nu looks at each input as something with structure.
https://www.nushell.sh || nushell
- Oh — Unix shell written in Go. It is similar in spirit but different in detail from other Unix shells. Oh extends the shell’s programming language features without sacrificing the shell’s interactive features.
https://github.com/michaelmacinnis/oh || oh-gitAUR
- PowerShell — PowerShell is an object-oriented programming language and interactive command line shell, originally written for and exclusive to Windows. Later on, it was open sourced and ported to macOS and Linux.
https://github.com/PowerShell/PowerShell || powershellAUR
- rc — Command interpreter for Plan 9 that provides similar facilities to UNIX’s Bourne shell, with some small additions and less idiosyncratic syntax.
http://doc.cat-v.org/plan_9/4th_edition/papers/rc || 9base
- xonsh — Python-powered shell with additional shell primitives that you are used to from Bash and IPython.
https://xon.sh/ || xonsh
Changing your default shell
After installing one of the above shells, you can execute that shell inside of your current shell, by just running its executable. If you want to be served that shell when you login however, you will need to change your default shell.
To list all installed shells, run:
And to set one as default for your user do:
If you are using systemd-homed, run:
where full-path-to-shell is the full path as given by chsh -l .
If you now log out and log in again, you will be greeted by the other shell.
Login shell
A login shell is an invocation mode, in which the shell reads files intended for one-time initialization, such as system-wide /etc/profile or the user’s
/.profile or other shell-specific file(s). These files set up the initial environment, which is inherited by all other processes started from the shell (including other non-login shells or graphical programs). Hence, they are read only once at the beginning of a session, which is, for example, when the user logs in to the console or via SSH, changes the user with sudo or su using the —login parameter, or when the user manually invokes a login shell (e.g. by bash —login ).
See #Configuration files and the links therein for an overview of the various initialization files. For more information about login shell, see also Difference between Login Shell and Non-Login Shell? and Why a «login» shell over a «non-login» shell? on Stackexchange.
Configuration files
To autostart programs in console or upon login, you can use shell startup files/directories. Read the documentation for your shell, or its ArchWiki article, e.g. Bash#Configuration files or Zsh#Startup/Shutdown files.
See also Wikipedia:Unix shell#Configuration files for a comparison of various configuration files of various shells.
/etc/profile
Upon login, all Bourne-compatible shells source /etc/profile , which in turn sources any readable *.sh files in /etc/profile.d/ : these scripts do not require an interpreter directive, nor do they need to be executable. They are used to set up an environment and define application-specific settings.
Standardisation
It is possible to make (some) shells configuration files follow the same naming convention, as well as supporting some common configuration between the shells.
Input and output
- Redirections truncate files before commands are executed: will therefore not work as expected. While some commands (sed for example) provide an option to edit files in-place, many do not. In such cases you can use the sponge(1) command from the moreutils package.
- Because cat is not built into the shell, on many occasions you may find it more convenient to use a redirection, for example in scripts, or if you care a lot about performance. In fact does the same as cat file .
- POSIX-compliant shells support Here Documents:
- Shell pipelines operate on stdout by default. To operate on stderr(3) you can redirect stderr to stdout with command 2>&1 | othercommand or, for Bash 4, command |& othercommand .
- Remember that many GNU core utilities accept files as arguments, so for example grep pattern is replaceable with grep patternfile .
Источник
Help:Reading (Русский)
Поскольку подавляющее большинство статей в ArchWiki содержит указания, не совсем понятные для новых пользователей Arch Linux (или GNU/Linux в целом), было решено написать это краткое изложение основных процедур во избежание путаницы при чтении, а также для уменьшения количества повторений в самом содержании статей.
Contents
Организация
Большинство статей в ArchWiki не предоставляет целостного погружения в конкретную тему, они пишутся в соответствии с принципом DRY и предположением, что пользователь самостоятельно найдет и прочитает необходимые дополнительные материалы по тем темам, которые ему непонятны. Там, где это возможно, ссылки на такие материалы приведены в самих статьях при помощи специального форматирования, смотрите #Форматирование.
Вследствие такой организации, чтобы лучше усвоить материал, может потребоваться изучить несколько относящихся к теме источников. В частности, новые в Arch (или GNU/Linux в целом) пользователи должны читать большое количество статей даже при решении простых проблем. Прежде чем обращаться к другим пользователям за помощью, особенно важно изучить дополнительную информацию.
Форматирование
- ссылка на раздел в текущей статье: #Организация
- ссылка на другую статью ArchWiki
- ссылка на внешний веб-ресурс)
- ссылка на man-страницу: intro(1)
- man-страница, доступная только без сети: foo(1)
- ссылка на пакет, находящийся в официальных репозиториях: foobar
- ссылка на пакет, находящийся в AUR: foobarAUR
Обычный пользователь или root
Есть строки написанные так:
А есть с другим префиксом:
Цифры или знак ( # ) указывает на то, что команда должна быть запущена от root, в то время как знак доллара ( $ ) показывает что команда должна быть запущена от имени обычного пользователя.
Заметьте следующее исключение:
В этом примере, знак # говорит что это не будет командой; вместо этого он должен быть отредактирован в файле. Так как в данном случае знак # означает комментарий. Комментарий может содержать пояснительный текст, который не будет выполняться соответствующей программой. Обозначение комментариев в скриптах Bash совпадает с PS1 суперпользователя.
Дополнительным указанием на комментарий является заглавная буква после знака # . Обычно, команды Unix не написаны таким образом и в большинстве случаев они являются короткими аббревиатурами вместо полных Английских слов (например, Copy становится cp).
Несмотря на это, большинство статей даёт это легко распознать, уведомив читателя:
Добавить, создать, редактировать
Когда вам будет предложено добавить, создать или отредактировать один или несколько файлов, в этом случае предполагается использование одного из следующих методов.
Для создания или изменения текстовых файлов предлагается использовать текстовый редактор. Например, nano, команда для редактирования файла /etc/bash.bashrc :
Чтобы создать или перезаписать файл из терминала, проще использовать перенаправление выводаWikipedia:ru:Перенаправление_ввода-вывода. В следующем примере создается или перезаписывается содержимое файла /etc/hostname содержимым файла myhostname .
Также перенаправление вывода можно использовать для добавления строки в файл. В примере строка [custom-repo] добавляется в файл /etc/pacman.conf .
Когда просят создать каталог(и), используйте команду mkdir:
Сделать исполняемым
После создания файла предназначеного для запуска в виде скрипта (вручную или другой программой) необходимо сделать его исполняемым, например:
Для получения дополнительной информации смотрите chmod. Некоторые приложения, такие как файловый менеджер могут предоставлять графический интерфейс для настройки этого.
Source
Некоторые приложения, в частности командные оболочки, используют скрипты для их настройки: после их изменения, они должны быть sourced (прочитаны) чтобы принять изменения. Например, в случае с bash, это делается путём выполнения (вы также можете заменить source с . ):
Когда статья предложит изменить скрипт настроек, она не будет напоминать вам о выполнении команды source для файла, и только в некоторых случаях вам будет указан ссылкой этот раздел.
Установка пакетов
Когда статья предлагает установить какие-либо пакеты обычным способом, там не будут описаны подробные инструкции. Вместо них будут имена пакетов, которые нужно установить.
Приведенные ниже подразделы дают обзор общих процедур установки в зависимости от типа пакета.
Официальные пакеты
Для получения пакетов из официальных репозиториев вы увидите нечто похожее:
Это означает, что вы должны запустить:
Статья pacman содержит подробные инструкции как правильно управлять пакетами в Arch Linux.
Репозиторий пользователей Arch (AUR)
Для получения пакетов из AUR (Пользовательского Репозитория Arch) вы увидите примерно такое:
Это означает, что вы должны перейти по ссылке имя_пакета AUR , скачать архив PKGBUILD, распаковать его, проверить содержание, и запустить в этой же папке:
Статья Пользовательский репозиторий Arch содержит все подробные объяснения и лучшие методы работы с пакетами AUR.
Управление юнитами systemd
Когда статья говорит запустить, включить, остановить или перезапустить какой-то юнит systemd (например service (службу)), в статье не будут указаны подробные инструкции как это сделать, вместо этого вы будете читать примерно такое:
Это означает, что вы должны выполнить:
Ссылка Запустить приведёт вас к статье systemd, которая содержит все подробные пояснения по правильному использованию юнитов systemd в Arch Linux.
Общесистемные или пользовательские настройки
Важно помнить, что существуют два разных вида настроек в системе GNU/Linux. Общесистемная настройка влияет на всех пользователей. Поскольку общесистемные настройки расположены как правило в каталоге /etc , нужны права суперпользователя (root) чтобы их менять. Например, для применения настроек Bash которые затронут всех пользователей, должен быть изменён /etc/bash.bashrc .
Пользовательские настройки затрагивают только конкретного пользователя. Файл с точкой (.файл) используется для настроек конкретного пользователя. Например файл
/.bashrc является пользовательским (для конкретного пользователя) файлом настроек. Идея заключается в том, что каждый пользователь может задать свои собственные настройки, такие как псевдонимы (alias), функции и другие интерактивные черты, как строка приглашения (prompt), не затрагивая предпочтения других пользователей.
/ и $HOME представляют собой ярлыки для домашнего каталога пользователя, обычно /home/Имя_пользователя/ .
Общие файлы оболочек
Bash и другие Bourne-совместимые оболочки, как Zsh, также содержат зависимые исходные файлы, смотря какая оболочка представлена, оболочка входа или интерактивная оболочка. Для подробностей смотрите Bash (Русский)#Файлы настроек и Zsh (Русский)#Файлы Запуска/Завершения.
Псевдо-переменные в примерах кода
Некоторые блоки кода могут содержать так называемые псевдо-переменные, которые, как следует из названия, не являются фактическими переменными, используемые в коде. Вместо этого они представляют собой место для заполнения и должны быть вручную заменены на конкретный системный элемент конфигурации до того, как код может быть запущен или внедрён. Общие оболочки, такие как bash и zsh, обеспечивают автодополнение по табу (tab) для параметров общих команд, таких как systemctl.
В статьях, которые соответствуют Help:Style/Formatting and punctuation, псевдо-переменные оформлены курсивом. Например:
- Включить dhcpcd@interface_name.service для сетевого интерфейса выявленного командой ip link .
В этом случае interface_name используется в качестве псевдо-переменной которую нужно заполнить в блоке юнита systemd. Все шаблоны юнитов systemd, опознаются знаком @ , требующим элемент конфигурации конкретной системы как аргумент. Смотрите Systemd (Русский)#Использование юнитов.
- Команда dd if=data_source of=/dev/sdX bs=sector_size count=sector_number seek=partitions_start_sector может быть запущена от суперпользователя, чтобы уничтожить раздел с конкретными параметрами.
В этом случае псевдо-переменные используются для описания параметров, которые должны быть заменены на них. Подробное описание этих параметров, включая команду, рассматривается в разделе Securely wipe disk#Calculate blocks to wipe manually.
В случае файла примеров, вставляя псевдо-переменные в реальный файл настроек, можно испортить работу программы которая его использует.
Многоточие
В большинстве случаев многоточие ( . ) не является частью фактического содержимого файла или вывода кода, и используются вместо отображения кода или дополнительного текста, который не относится к обсуждаемой теме.
Например HOOKS=». encrypt . filesystems . » или:
Имейте в виду, что в некоторых случаях многоточие может быть значимой частью синтаксиса кода: внимательные пользователи смогут легко распознавать эти случаи по контексту.
Источник