Мы пройдем через оболочку Linux, интерпретатор команд для Linux. Shell предоставляет среду, в которой несколько исполняемых программ C присутствуют по определенному известному пути. Shell находит эти исполняемые файлы и предоставляет вывод этих команд на консоль. Мы обсудим несколько примеров команд и переменных среды оболочки.
Shell предоставляет пользователю среду, в которой пользователь может выполнять несколько исполняемых программ, а вывод этих программ отображается на дисплее. По сути, рабочая философия оболочки заключается в том, что она постоянно ожидает, пока пользователь введет строку. Затем эта строка ищется и сопоставляется с известными исполняемыми программами, присутствующими в среде оболочки. Если совпадающая исполняемая программа найдена, исполняемый файл запускается после создания дочернего процесса. Этот вновь созданный дочерний процесс выполняет программу. Вывод программы передается родительскому процессу, который является оболочкой. Shell выводит вывод на консоль, если вывод не перенаправляется. Места, где оболочка ищет исполняемые программы, указаны в переменной среды «PATH».
Блок-схема оболочки показана ниже:
Из предоставленной блок-схемы мы можем сделать вывод, что нам нужна оболочка для запуска любого исполняемого файла 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, мы хотим обновить пользовательский путь, такой как /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 и ее предложений.