Все выпуски  

RFpro.ru: Установка и настройка Unix/Linux/FreeBSD


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

vladisslav
Статус: 5-й класс
Рейтинг: 796
∙ повысить рейтинг »
Руслан Тофикович
Статус: 5-й класс
Рейтинг: 359
∙ повысить рейтинг »
Zakharov Sergey
Статус: 7-й класс
Рейтинг: 323
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Установка и настройка ОС / Unix/Linux/FreeBSD

Номер выпуска:1275
Дата выхода:28.10.2009, 20:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:711 / 165
Вопросов / ответов:1 / 2
IRC-канал по теме:#nix

Вопрос № 173614: Здравствуйте, уважаемые эксперты! Хотел бы услышать подробный и понятный ответ на вопрос, что такое переменные окружения в Linux (оболочка bash), как их изменять и т.д. В сети посмотрел, там как-то все не то. Возможно, вопрос станет конкретнее, ес...



Вопрос № 173614:

Здравствуйте, уважаемые эксперты!
Хотел бы услышать подробный и понятный ответ на вопрос, что такое переменные окружения в Linux (оболочка bash), как их изменять и т.д. В сети посмотрел, там как-то все не то. Возможно, вопрос станет конкретнее, если я поясню зачем именно мне они нужны. Допустим, есть компилятор lf95 для фортрана, его надо поставить, а для этого, как мне говорили спецы, нужно сначала что-то прописать в переменных окружения...Заранее спасибо!

Отправлен: 23.10.2009, 23:08
Вопрос задал: Gerhard, Практикант
Всего ответов: 2
Страница вопроса »


Отвечает Rashid N. Achilov, Практикант :
Здравствуйте, Gerhard.

Переменные окружения - это основное средство для хранения различных настроек, задаваемых и системой и пользвателем. По форме - это обычные переменные, которые задаются как и в любой другой программе, по сути - некие "мини-хранилища" данных, которые Вы потом можете использовать во всех скриптах и программах, написанных на любом языке. Переменная окружения инициализируется в момент запуска процесса оболочки /bin/bash (в Вашей системе пуь может отличаться) из файла ~.bashrc (или ~.shrc) и существует в течение всего времени, пока данная копия оболочки не завершит работу. Выделенный момент очень важен - если Вы создаете переменную окружения, а потом закрываете оболочку, переменная исчезает. Ее также можно задать вручную непосредственно в самом скрипте. Любая программа, запущенная в данной копии оболочки, может получить доступ к переменным окружения, существовавшим в тот момент, когда данная программа была запущена. Основное назнач ение переменных окружения - передавать некоторую информацию в те программы, которые будут в данной оболочке впоследствие запускаться.

Имя переменной окружения выбирается произвольно, оно может состоять из символов латиницы и знака подчеркивания. Общепринято в тексте программ, скриптов и документации писать имена переменных окружения БОЛЬШИМИ буквами, при этом как такового ограничения на длину нет, например: PKG_CONFIG_DISABLE_UNINSTALLED. Значение переменной окружения задается в текстовом виде, Вы не можете передавать двоичные значения. Как такового ограничения или какого-либо форматирования не предусмотрено - все, что будет указано после знака равенства - все будет установлено в качестве значения и передано в запросившую программу, например:
PKG_CONFIG_PATH=/usr/X11R6/libdata/pkgconfig:/usr/X11R6/qt33/libdata/pkgconfig:/usr/local/kde3/libdata/pkgconfig

Разбор значения переменной окружения - прерогатива программиста. Наиболее известное применение переменной окружения - это получение информации о том, где оболочка может искать запускаемый файл. Если Вы вводите просто имя файла команды, не предваряя его полным путем, то оболочка обращается к заранее оговоренной переменной окружения (как правило это переменная PATH), в которой заранее перечислены все пути, где данная команда может находиться. Если ни в одном из этих мест команда не была найдена, Вы увидите сообщение о том, что команда не найдена. Скорее всего именно путь к каталогу, где будет установлен Ваш компилятор - и нужно прописать в переменную PATH. Все переменные окружения, используемые самой оболочкой, как правило перечислены в мануале, их достаточно много, некоторые используются очень часто, некоторые крайне редко.

Для того, чтобы переменная окружения не исчезала при завершении работы командной оболочки, ее можно "экспортировать", то есть с помощью специальной команды (в /bin/bash это export) передать в оболочку более высокого уровня (ту, что запустила работающую в данный момент оболочку). Как правило, все переменные окружения, задаваемые в .bashrc экспортируются, потому что иначе они исчезнут сразу же после того, как оболочка дочитает (а по сути - закончит выполнять) файл .bashrc

Что прописывать и где прописывать. Как правило, что прописывать и в каком формате это "что" должно быть - указывается в документации к программе. Если документации нет, а достоверно известно, что переменные окружения используются - можно посмотреть код программы, если он доступен, на предмет наличия вызовов функции типа getenv() . Прописывается же переменная окружения или непосредственно в скрипте перед запуском программы, например при запуске с помощью команды env, если таковая имеется в Вашей системе - env TESTVAR=testvalue /usr/bin/myprogram. В результате программа myprogram при запуске получит окружение, в которое будет вставлена переменная TESTVAR со значением testvalue. Можно также создать небольшой скриптик, состоящий толь ко из строк задания переменной окружения и запуска программы. Такие способы очень хороши для отладки, когда требуется придавать различным переменным окружения разнообразные произвольные значения. Для постоянного задания переменной окружения ее следует включить в файл, который читается при запуске оболочки (.bashrc для /bin/bash, при его отсутствии может читаться .shrc и/или .profile, подробности уточняйте в руководстве по оболочке) и обязательно экспортировать ее.


-----
Si vis pacem, para bellum

Ответ отправил: Rashid N. Achilov, Практикант
Ответ отправлен: 23.10.2009, 22:40

Оценка ответа: 5
Комментарий к оценке:
Спасибо за столь подробное описание!

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255767 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает vladisslav, 5-й класс :
    Здравствуйте, Gerhard.
    Переменный окружения в linux то же самое, что и переменные окружения в DOS или Windows. Набор сопоставленных пар ключ - значение.
    В общем случае для запуска программы с измененным окружением используется команда env. Вызывается следующим образом:
    env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
    опции:
    -i, --ignore-environment
    Запуск с пустым окружением (в окружении будут только явно объявленные переменные
    -u, --unset=NAME
    Удалить переменную окружения с указанным именем
    Указание первым аргументом дефиса "-" дает тот же эффект, что и опция -i
    Далее следуют пары опция=значение, первый аргумент, не содержащий "=" используется как имя программы, следующие за ним аргументы становятся аргументами программы.
    Так как в вашем частном случае используется оболочка bash, то можно воспользоваться ее встроенными возможностями:
    $ NAME=VALUE NAME=VALUE .... COMMAND [ARG]
    То есть просто указываем новые значения переменных перед именем вызываемой программы.
    Для того чтобы установить переменные один раз и не указывать при последующих вызовах их значения повторно, можно воспользоваться встроенной командой bash export:
    $ export NAME=VALUE ...
    после этого указанные значения переменных окружения будут действительны для всех последующих команд, выполненных в данном экземпляре bash.
    Если вы хотите установить новые значения переменных окружения и для последующих запусков bash, добавьте их объявления в конец файла .bashrc, находящегося в вашем домашнем каталоге (в случае отсутствия создайте).
    Если вы хотите установить новые значения переменных окружения глобально для всех пользователей, то следует отредактировать файл /etc/environment
    Конкретно для lf95 процедура установки предполагает как альтернативу установке LD_LIBRARY_PATH настройку загрузчика через редактирование /etc/ld.so.conf
    Например если у вас будет установлена версия 6.2, то исполняемые файлы будут лежать в каталоге /usr/local/lf9562/bin , библиотеки в /usr/local/lf9562/lib и для запуска потребуется добавить к PATH первый каталог и установить LD_LIBRARY_PATH=/usr/local/lf9562/lib , то есть запускать так
    $ PATH=$PATH:/usr/local/lf9562/bin LD_LIBRARY_PATH=/usr/local/lf9562/lib lf95 file.f90
    либо добавить строки
    PATH=$PATH:/usr/local/lf9562/bin
    LD_LIBRARY_PATH=/usr/local/lf9562/lib
    в конец файла .bashrc в домашнем каталоге
    либо добавить ":/usr/local/lf9562/bin" в конец соответствующей строки в /etc/environment , добавить строку /usr/local/lf9562/lib в /etc/ld.so.conf и однократно запустить ldconfig. После этого запуск для всех пользователей будет выглядеть так
    lf95 file.f90

    Ответ отправил: vladisslav, 5-й класс
    Ответ отправлен: 23.10.2009, 22:55

    Оценка ответа: 5
    Комментарий к оценке:
    Ваш ответ мне особенно понравился тем, что приведены конкретные примеры для lf95. Есть пара доп. вопросов - см. минифорум

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255769 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.10 от 26.10.2009

    В избранное