ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Четверг, 19 декабря, 2024

Интерфейс оболочки Linux для ядра Linux

Интерфейс оболочки Linux для ядра Linux

Мы пройдем через оболочку Linux, интерпретатор команд для Linux. Shell предоставляет среду, в которой несколько исполняемых программ C присутствуют по определенному известному пути. Shell находит эти исполняемые файлы и предоставляет вывод этих команд на консоль. Мы обсудим несколько примеров команд и переменных среды оболочки.

 

Описание:

Shell предоставляет пользователю среду, в которой пользователь может выполнять несколько исполняемых программ, а вывод этих программ отображается на дисплее. По сути, рабочая философия оболочки заключается в том, что она постоянно ожидает, пока пользователь введет строку. Затем эта строка ищется и сопоставляется с известными исполняемыми программами, присутствующими в среде оболочки. Если совпадающая исполняемая программа найдена, исполняемый файл запускается после создания дочернего процесса. Этот вновь созданный дочерний процесс выполняет программу. Вывод программы передается родительскому процессу, который является оболочкой. Shell выводит вывод на консоль, если вывод не перенаправляется. Места, где оболочка ищет исполняемые программы, указаны в переменной среды «PATH».

Блок-схема оболочки показана ниже:

Интерфейс оболочки Linux для ядра Linux

 

Из предоставленной блок-схемы мы можем сделать вывод, что нам нужна оболочка для запуска любого исполняемого файла C в среде Linux. Без оболочки невозможно динамическое выполнение программы C. Есть несколько предопределенных исполняемых программ, которые известны как команды оболочки. Некоторыми примерами команд оболочки являются ls, ps и т. д.

Давайте обсудим команды оболочки. Существует два типа команд оболочки:

а) Встроенные команды

Это команды, которые являются частью самой оболочки. При выполнении этих команд оболочка не разветвляется. Эти команды выполняются как часть самой оболочки. Для обновления в этих командах нам нужно обновление в самой оболочке. Эти команды связаны с оболочкой.

Некоторые примеры встроенных команд: cd, echo, kill, break, alias, bg и т. д. Мы можем использовать команду «help», чтобы увидеть весь список встроенных команд.

б) Внешние команды

Эти команды представляют собой отдельные исполняемые файлы программы C. Они не являются частью оболочки. Это места на определенном пути. Shell просматривает эти пути, выполняет программы и отображает результат. Добавить новую команду в список известных команд легко; просто скопируйте новую исполняемую программу/команду по известному пути. Как правило, эти команды помещаются в такие пути, как /usr/bin, /usr/sbin и т. д. Все местоположения указаны в PATH.

В моей системе можно проверить известный путь к оболочке, которая является командой echo, чтобы получить полный список путей:

Ubuntu@andreyex:$ echo $PATH
/home/cienauser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

 

Если мы хотим ввести новый путь в этот список, мы можем обновить значения переменных среды PATH. Команду «export» можно использовать для обновления PATH новыми значениями.

Используя команду «type», мы можем получить, что любая команда является встроенной или внешней. Давайте разберемся с использованием «type». Выполнение типа с «cd» дает следующий вывод:

Ubuntu@andreyex:~/type cd
cd is a shell builtin
Ubuntu@andreyex:~/$

 

Вывод предыдущей команды говорит сам за себя.

Теперь давайте попробуем команду «type» с командой lspci:

Ubuntu@andreyex:~/type lspci
lspci is /usr/bin/lspci
Ubuntu@andreyex:~/$

 

Поскольку вывод показывает путь к исполняемому файлу, мы можем сделать вывод, что это внешняя команда.

Переменные среды

Для оболочки определено несколько переменных среды. До сих пор мы понимали переменную PATH. PATH — это переменная среды, которая предоставляет список путей для поиска внешних команд. Полный список переменных среды можно проверить с помощью команды env. Команда env предоставляет полный список переменных среды.

Вот несколько примеров переменных среды оболочки:

Есть много других. Как обсуждалось ранее, полный список можно проверить с помощью команды env.

 

Изменение переменных среды

Необходимые значения могут быть напрямую присвоены переменной, так как оболочка позволяет нам использовать оператор присваивания. Текущее значение любой переменной оболочки можно увидеть с помощью команды echo. Например, если мы хотим проверить значение PATH. Выполнение следующей команды должно сделать это:

Echo $PATH

Использование оператора $ перед переменной внутри оболочки выводит значение переменной. Это предложение команды echo. Точно так же эхо можно использовать для вывода любой переменной среды.

Если мы хотим обновить переменную PATH, мы хотим обновить пользовательский путь, такой как /usr/cutom, который мы хотим добавить в PATH. Мы размещаем наши команды cutom по этому пути. Чтобы оболочка выполняла эти команды, ее значение необходимо обновить в PATH. Без обновления PATH, если мы запускаем эти пользовательские программы, мы получаем сообщение об ошибке «no such file or directory». Эта ошибка ясно говорит о том, что оболочка не может найти команды.

В качестве эксперимента мы поместим нашу пользовательскую команду myls и myps в папку /home/andreyex/custom. Когда мы запускаем myls или myps из /home/andreyex, мы получаем следующее сообщение от оболочки:

andreyex@Terminator:~$ myls
Command 'myls' not found, did you mean:
command 'tyls' from deb terminology
command 'mmls' from deb sleuthkit
Try: sudo apt install <deb name>
andreyex@Terminator:~$ myps
Command 'myps' not found, did you mean:
command 'mypy' from deb mypy
Try: sudo apt install <deb name>
andreyex@Terminator:~$

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

Теперь давайте добавим новый настраиваемый путь к существующему PATH следующим образом:

andreyex@Terminator:~$ echo $PATH

/home/cienauser/.local/bin:/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

andreyex@Terminator:~$ export PATH=$PATH:/home/andreyex/custom

andreyex@Terminator:~$ echo $PATH

/home/cienauser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:
/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/andreyex/custom

andreyex@Terminator:~$

 

Наш недавно добавленный путь выделен жирным шрифтом. Мы видим, что переменная среды PATH обновляется новым значением.

Теперь давайте попробуем еще раз выполнить команды, которые присутствуют в нашем пользовательском пути. Выполняя «myps» и «myls», мы получаем следующий вывод:

andreyex@Terminator:~$ myps
PID TTY TIME CMD
2112 pts/0 00:00:00 bash
2783 pts/0 00:00:00 myps
andreyex@Terminator:~$ myls
a.out pack-installed spd_tool build_root_fs kernel_articles patches stime
coreboot kernel_ubuntu pcie_transfer_app stime.c
bash_arm custom lmsensors Redfishtool telnet_scripts nvm_cli
openssh snap
andreyex@Terminator:~$

 

Предыдущие журналы показывают, что обе команды работали отлично. У нас не было никаких ошибок, как мы наблюдали перед обновлением переменной PATH. Мы обсудили самую важную переменную оболочки, которую мы обычно изменяем в нашей повседневной работе по разработке. Если мы устанавливаем какой-либо новый пакет, эта переменная обновляется, чтобы новые команды инструментов могли быть легко обнаружены оболочкой.

Вывод

Мы обсудили определение оболочки. Мы также увидели философию, лежащую в основе реализации различных типов команд, предоставляемых оболочкой, и переменных среды оболочки. Мы также рассмотрели несколько переменных среды. Самое главное, мы обсудили переменную PATH. Мы также увидели способ обновления PATH и важность переменной, что продемонстрировано на примере. Мы узнали о важности Shell и ее предложений.

Exit mobile version