Использование оболочки

Использование оболочки

28 октября 2023 г.

Debian GNU/Linux: Руководство по установке и использованию» Джона Герзена и Оссамы Отмана входит в серию книг HackerNoon. Вы можете перейти к любой главе этой книги здесь. Использование командной консоли

6. Использование оболочки

Читая эту книгу, вы уже взаимодействовали с оболочкой. Оболочка — это программа, которая читает ваши команды и затем делает то, что вы от нее просите. В этой главе вы изучите оболочку более подробно, уделив особое внимание настройке оболочки так, чтобы она работала так, как вы хотите.

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

Каждый процесс имеет связанную с ним среду. Среда — это набор переменных среды. Переменная — это изменяемое значение с фиксированным именем. Например, имя EMAIL может относиться к значению joe@nowhere.com. Значение может варьироваться; EMAIL также может относиться к jane@somewhere.com.

Поскольку ваша оболочка — это такой же процесс, как и любой другой, у нее есть среда. Вы можете просмотреть среду вашей оболочки, введя команду printenv. На рис. 6.1 показан пример вывода printenv. В вашей системе результат будет другим, но похожим.

![Рис. 6.1: Пример вывода printenv

](https://cdn.hackernoon.com/images/vSShvCAio4bqP19bBfmp6FnYQFk1-be93y0u.jpeg)

Переменные среды — это один из способов настройки системы. Например, переменная EDITOR позволяет вам выбрать предпочитаемый редактор для публикации новостей, написания электронных писем и т. д.

Установка переменных среды проста. Для практики попробуйте настроить подсказку оболочки и средство просмотра текстовых файлов с помощью переменных среды. Для начала давайте немного общей информации.

человек меньше

Эта команда позволяет просмотреть онлайн-руководство для команды less. Чтобы показывать вам текст по одному экрану за раз, man вызывает пейджер, который показывает вам новую страницу текста каждый раз, когда вы нажимаете клавишу пробела. По умолчанию используется пейджер more.

Идите вперед и просмотрите справочную страницу less, которая представляет собой расширенный пейджер. Перейдите на новую страницу, нажав пробел; нажмите q, чтобы выйти. more также закроется автоматически, когда вы достигнете конца страницы руководства.

экспортировать PAGER=меньше

Прочитав о преимуществах less, вы, возможно, захотите использовать его для чтения страниц руководства. Для этого вы устанавливаете переменную среды PAGER.

Команда для установки переменной среды в bash всегда имеет следующий формат:

экспортировать ИМЯ=значение

Экспорт означает перемещение переменной из оболочки в среду. Это означает, что программы, отличные от оболочки (например, программа просмотра файлов), смогут получить к нему доступ.

эхо $PAGER

Это самый простой способ увидеть значение переменной. $PAGER сообщает оболочке о необходимости вставить значение переменной PAGER перед вызовом команды. echo возвращает свой аргумент: в данном случае оно отображает текущее значение PAGER, меньше.

чувак, больше

Отображает дополнительную инструкцию. На этот раз человеку следовало вызвать пейджер less.

less имеет множество функций, которых нет в more. Например, вы можете прокрутить назад с помощью клавиши b. Вы также можете перемещаться вверх и вниз (даже вбок) с помощью клавиш со стрелками. less не завершится, когда достигнет конца страницы руководства; он будет ждать, пока вы нажмете q.

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

отключить ПЕЙДЖЕР

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

эхо $PAGER

Поскольку параметр PAGER отключен, echo ничего не печатает.

PS1=привет:

Просто ради интереса измените приглашение оболочки. $ теперь должен измениться; подробности см. на рис. 6.2.

экспорт не требуется, поскольку вы меняете собственное поведение оболочки. Нет смысла экспортировать переменную в среду, чтобы ее могли увидеть другие программы. Технически PS1 — это переменная оболочки, а не переменная среды.

Если вы хотите, вы можете экспортировать переменную оболочки, преобразовав ее в переменную среды. Если вы сделаете это, программы, которые вы запускаете из оболочки, смогут его увидеть.

6.2 Расположение команд: переменная PATH

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

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

/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

Это значение определено в файле /etc/profile и применяется ко всем пользователям. Вы можете легко изменить значение, как и любую переменную среды. Если вы введете команду ls, оболочка сначала просмотрит /usr/local/bin; ls там нет, поэтому он попробует /usr/bin; если это не удастся, он проверит /bin. Там он обнаружит /bin/ls, остановит поиск и выполнит программу /bin/ls. Если бы /usr/bin/X11/ls существовал (а это не так, но он притворяется), он был бы проигнорирован.

Вы можете увидеть, какой ls будет использовать оболочка, с помощью команды type. введите ls и получите ответ /bin/ls. Попробуйте сами.

Попробуйте спросить, где находится сам тип:

$ type type n type — встроенная оболочка

type на самом деле не является программой; это функция, предоставляемая оболочкой. Однако вы используете ее как внешнюю программу.

Существует несколько подобных команд; введите встроенные команды man, чтобы прочитать справочную страницу с их описанием. В общем, вам не нужно знать, является ли команда встроенной или реальной программой; однако встроенные функции не будут отображаться в выводе ps или top, поскольку они не являются отдельными процессами. Это всего лишь часть оболочки.

6.3 Файлы конфигурации

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

6.3.1 Общесистемная и пользовательская конфигурация

Важно помнить, что в системе Debian существует два разных типа конфигураций. Общесистемная конфигурация влияет на всех пользователей. Общесистемные настройки выполняются в каталоге /etc, поэтому для изменения общесистемных настроек обычно требуется root-права. Например, вы можете настроить способ подключения системы к Интернету или сделать так, чтобы веб-браузеры системы всегда запускались с домашней страницы компании. Поскольку вы хотите, чтобы эти настройки применялись ко всем пользователям, вы вносите изменения в /etc. Примеры файлов конфигурации в /etc включают /etc/X11/XF86Config, /etc/lynx.cfg и /etc/ppp/options. Фактически, почти все файлы в /etc являются файлами конфигурации.

Конфигурация пользователя влияет только на одного пользователя. Точечные файлы используются для конфигурации пользователя. Например, в файле ~/.newsrc хранится список статей USENET (дискуссионной группы), которые вы прочитали, и на какие группы вы подписаны. Это позволяет программам чтения новостей, таким как trn или GNUS, отображать непрочитанные статьи в интересующих вас группах. Эта информация будет разной для каждого пользователя в системе, поэтому у каждого пользователя есть свой собственный файл .newsrc в его домашнем каталоге.

6.4 Псевдонимы

Если вы часто используете одну и ту же команду, возможно, вам надоест ее вводить. bash позволяет писать более короткие псевдонимы для ваших команд.

Допустим, вы всегда используете параметры -almost-all и -color=auto для команды ls. Вы быстро устанете набирать ls -almost-all -color=auto. Итак, вы создаете псевдоним:

alias myls=’ls -almost-all -color=auto’

Теперь вы можете вводить myls вместо полной команды. Чтобы узнать, что такое myls на самом деле, запустите команду типа myls. Чтобы просмотреть список определенных вами псевдонимов, просто введите псевдоним в отдельной строке.

6.5 Управление вводом и выводом

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

6.5.1. stdin, stdout, конвейеры и перенаправление Каждый процесс имеет как минимум три соединения с внешним миром. Стандартный ввод — это один из источников данных процесса; стандартный вывод — это одно место, куда процесс отправляет данные; а стандартная ошибка — это место, куда процесс может отправлять сообщения об ошибках. (Они часто обозначаются сокращениями stdin, stdout и stderr.)

Слова «источник» и «место» намеренно расплывчаты. Эти стандартные места ввода и вывода могут быть изменены пользователем; это может быть экран, клавиатура, файл и даже сетевое соединение. Вы можете указать, какие местоположения использовать.

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

Например, команда echo отправляет вывод на стандартный вывод, обычно на экран. Но вместо этого вы можете отправить его в файл с помощью оператора перенаправления вывода >. Например, чтобы поместить слово «Привет» в файл myfile, используйте следующую команду:

эхо Привет > мой файл

Используйте cat или пейджер текстового файла (более или менее) для просмотра содержимого моего файла; см. рисунок 6.3.

Вы можете изменить стандартный ввод команды с помощью оператора перенаправления ввода <. Например, кот < myfile отобразит содержимое myfile. На практике это бесполезно; для удобства команда cat принимает аргумент имени файла. Так что вы можете просто сказать cat myfile, и эффект будет тот же. операторы перенаправления

Под капотом кот < myfile означает, что оболочка открывает myfile и затем передает его содержимое на стандартный ввод cat. cat myfile без оператора перенаправления означает, что команда cat получает один аргумент (myfile) открывает сам файл, а затем отображает его.

Однако есть причина для двойной функциональности. Например, вы можете соединить стандартный вывод одной команды со стандартным вводом другой. Это называется конвейером и использует оператор канала[1], |.

[1] В зависимости от вашей клавиатуры это может выглядеть как вертикальная полоса, так и прерывистая вертикальная черта, но почти всегда ее можно найти над обратной косой чертой ().

Возможно, вы хотите увидеть Стандартную общественную лицензию GNU наоборот. Для этого вы используете команду tac (это кошка, только наоборот). Попробуйте:

tac /usr/doc/copyright/GPL

К сожалению, оно пролетает слишком быстро, чтобы его можно было прочитать. Так что вы увидите только пару абзацев. Решением является конвейер:

tac /usr/doc/авторское право/GPL | меньше

Это принимает стандартный вывод tac, который является GPL наоборот, и отправляет его на стандартный ввод less.

Вы можете объединить столько команд, сколько захотите. Допустим, у вас возникло необъяснимое желание заменить каждую букву G на Q. Для этого вы используете команду tr G Q, например:

tac /usr/doc/авторское право/GPL | тр G Q | меньше

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

tac /usr/doc/copyright/GPL > tmpfile tr G Q < tmp-файл > tmpfile2 меньше < tmpfile2 rm tmpfile tmpfile2

Очевидно, что конвейер удобнее.

6.6 Расширение имени файла

Часто требуется, чтобы команда работала с группой файлов. Подстановочные знаки используются для создания шаблона расширения имени файла: серии символов и подстановочных знаков, которая расширяется до списка имен файлов. Например, шаблон /etc/* расширяется до списка всех[2] файлов в /etc.

[2] На самом деле файлы, начинающиеся с . не включены в расширение *.

* — это подстановочный знак, который может обозначать любую последовательность символов, поэтому шаблон /etc/* расширится до списка всех имен файлов, начинающихся с /etc/.

Этот список имен файлов наиболее полезен в качестве набора аргументов для команды. Например, каталог /etc содержит ряд подкаталогов с именами rc0.d, rc1.d и т. д. Обычно для просмотра их содержимого необходимо ввести следующее:

ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d ls /etc/rc4.d /etc/rc5.d /etc/rc6.d /etc/rcS.d

Это утомительно. Вместо этого вы можете использовать ? подстановочный знак, как показано здесь:

ls /etc/rc?.d

/etc/rc?.d раскрывается в список имен файлов, которые начинаются с rc, за которым следует любой одиночный символ, а затем .d.

Доступные подстановочные знаки включают следующее:

* Соответствует любой группе из 0 или более символов.

? Соответствует ровно одному символу.

[...] Если вы заключите некоторые символы в скобки, результатом будет подстановочный знак, соответствующий этим символам. Например, [abc] соответствует либо a, либо b, либо c. Если вы добавите ^ после первой скобки, смысл будет противоположным; поэтому [^abc] соответствует любому символу, кроме a, b или c. Вы можете включить диапазон, например [a-j], который соответствует любому значению между a и j. Совпадение чувствительно к регистру, поэтому, чтобы разрешить любую букву, вы должны использовать [a-zA-Z].

Шаблоны расширения станут простыми, если вы увидите несколько конкретных примеров:

*.txt Это даст вам список всех имен файлов, оканчивающихся на .txt, поскольку * вообще соответствует чему угодно.

*.[hc] Это дает список имен файлов, оканчивающихся на .h или .c.

а?? Это дает вам все трехбуквенные имена файлов, начинающиеся с a.

[^а]?? Это дает вам все трехбуквенные имена файлов, которые не начинаются с a.

a* Это дает вам каждое имя файла, начинающееся с a, независимо от того, сколько в нем букв.


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

Эта книга является общественным достоянием. Джон Герцен и Оссама Отман (2004). Debian GNU/Linux: Руководство по установке и использованию. Урбана, Иллинойс: Проект Гутенберг. Получено https://www.gutenberg.org/cache/epub/6527/pg6527-images.html.

Эта электронная книга предназначена для использования кем угодно и где угодно, бесплатно и практически без каких-либо ограничений. Вы можете скопировать ее, отдать или повторно использовать в соответствии с условиями лицензии Project Gutenberg, включенной в данную электронную книгу или на сайте www.gutenberg.org< /a>, расположенный по адресу https://www.gutenberg.org/policy/license.html.. эм>


Оригинал