Debian Environment Variables
General
Environment variables are named strings available to all applications. Variables are used to adapt each application's behavior to the environment it is running in. You might define paths for files, language options, and so on. You can see each application's manual to see what variables are used by that application.
That said, there are several standard variables in Linux environments:
- PATH = Colon separated list of directories to search for binaries.
- HOME = Current user's home directory.
- USER = Current logged in user's name.
- SHELL = The current shell.
- PS1 = Defines shell's command prompt.
- EDITOR = defines the user's preferred text editor.
- (please feel free to add more)
To see your currently defined variables, open up your terminal and type the command env
Variables are defined with name-value pairs: "NAME = any string as value". The variable name is usually in capital letters. Anything that follows the equal-sign is considered the variable's value until the terminating line feed character. Any whitespace around the equal-sign is ignored. Variables can be defined ad hoc in a terminal by writing the appropriate command. In Bash this would be 'export MYVAL=Hello world'. In this case the variable stays defined until the end of the terminal session.
When working in shells or shell scripts: If you do not want to over-write the previous value of the variable, include the variable name into the new definition. E.g. in Bash: export PATH=$PATH:~/bin. This example shows how to append the bin directory in the user's home directory onto the PATH environment variable.
In most cases it is most convenient to store these variables in a configuration file that is read during system boot and user login so that they are available automatically. Unfortunately this not always as easy as it sounds. Why? For a couple of reasons:
- Environment variables are inherited; i.e., the parent program sets the environment for the child process. You need to configure the parent's settings so that it passes it on for all its children.
- Various shells and window managers are the parent programs we are looking for but each of them reads a different configuration file (dot file) when it starts.
So, with this knowledge we understand that we need to consider both the starting order of system processes and the configuration files they read when they are started. See the DotFiles page, or read on ...
Lets get to it! There are two ways you can run your Linux box: from text console or graphical user interface.
Using text console
Boot process in regards to environment variable definition when a text console (also called login shell) is used.
At the end of boot the mother of all processes init is started. init's environment, including PATH, is defined in its source code and cannot be changed at run time.
init runs the start-up scripts from /etc/init.d depending on the run level set in /etc/inittab. Since init's environment is very bare, the scripts define their required environment variables within themselves.
init starts the text login process that waits for the user to log in. When the user logs in, the login process checks /etc/passwd to see what shell should be started for this particular user.
- The shell starts and reads its shell-specific configuration files.
Bash first reads /etc/profile to get values that are defined for all users. After reading that file, it looks for ~/.bash_profile', ~/.bash_login', and `~/.profile', in that order, and reads and executes commands from the first of these files that exists and is readable. b. (please fill in other shells as well)
Now the environment variables are ready to be used by the applications you start from the terminal.
Using graphical UI
Boot process in regards of environment variable definition when graphical login is used. (Information here is Gnome / GDM specific)
At the end of booting, the mother of all processes -- init -- is started.
init runs the start-up scripts from /etc/init.d depending on the run level set in /etc/inittab. Since init's environment is very bare, the scripts define required environment variables within themselves.
- Init starts the GDM display manager, which in turn will start the graphical login.
When the user successfully logs in, GDM starts xsession, which reads the file /etc/gdm/Xsession and with it the environment variables for the user's session. The default version of the Xsession file first reads /etc/profile for global settings and then ~/.profile to add the user's individual settings.
Now the environment variables are set and used when programs are run in this session.
Quick guide
For the hasty who just need to get the system running, here is what you can do:
Put all global definitions, i.e. ones affecting all users into /etc/profile.
Insert all personal definitions into ~/.profile
Create or edit file ~/.bash_profile and include commands:
if [ -f ~/.profile ]; then
. ~/.profile
fi
Notes and exceptions
startx from terminal
If you start X Window (the GUI) from a text console, your environment variables are already defined as explained above. However, the window manager may read the same files again (see below). This is usually not a problem, but you may get unexpected results, such as PATH having all entries listed twice.
Shell cascading
If you start another shell within the login shell (yes it is possible), the second one is a non-login shell. It will not read named start-up files but searches non-login start-up script from user's home directory instead. With Bash it is called ~/.bashrc. To avoid specifying same values in two places usually the login-shell start-up script ~/.bash_profile includes the ~/.bashrc at the end of its execution. To implement include following into your ~/.bash_profile:
if [ -f ~/.bashrc ]; then
. ~/.bashrc;
fi
terminal windows in X
If you start terminal / console window in graphical desktop environment it will be non-login terminal and it will read only the user's non-login start-up script. For Bash this is ~/.bashrc.
Using su
The su command is used to become another user during a login session. It is commonly used to get root permissions temporarily from normal session. su command resets your PATH environment value to one defined in /etc/login.defs by ENV_PATH and ENV_SUPATH variables. Please note that using Gnome helper gksu from Gnome panel by default uses su internally (i.e. you will "lose" your PATH if you do not configure it in login.defs).
Debian Environment Variables的更多相关文章
- CVE: 2014-6271、CVE: 2014-7169 Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis
目录 . 漏洞的起因 . 漏洞原理分析 . 漏洞的影响范围 . 漏洞的利用场景 . 漏洞的POC.测试方法 . 漏洞的修复Patch情况 . 如何避免此类漏洞继续出现 1. 漏洞的起因 为了理解这个漏 ...
- How to keep Environment Variables when Using SUDO
The trick is to add environment variables to sudoers file via sudo visudo command and add these line ...
- Environment Variables
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspx Every process has an ...
- [Whole Web, Nods.js, PM2] Passing environment variables to node.js using pm2
learn how to pass environment variables to your node.js app using the pm2 config file. This is usefu ...
- List environment variables from Command Prompt
Request: List the environment variables from Command Promt To list one varibales , the syntax is lik ...
- [NPM] Execute npx commands with $npm_ Environment Variables
We will incorporate npm specific environment variables when executing various npx commands. In our e ...
- How to set JAVA environment variables in Linux or CentOS
How to set JAVA environment variables JAVA_HOME and PATH in Linux After installing new java (jdk or ...
- SSIS ->> Environment Variables
SQL Server Integration Services(SSIS) 在2012版本引入了Environment Variables这个新特性.它允许我们为一个环境创建出一套变量用于为项目内的包 ...
- svn: None of the environment variables SVN_EDITOR...问题解决
转:http://blog.163.com/lgh_2002/blog/static/44017526201046111856208/ 问题1: svn: Could not use external ...
随机推荐
- Java经典实例:处理单个字符串
使用for循环和String对象的charAt()方法:或者,使用"for each"循环和String对象的toCharArray()方法. /** * Created by F ...
- GJM : Unity3D - NetWork - Hight Level API ( HLAPI) [转载]
介绍在本系列教程中,我们将使用的网络高级API(HLAPI)来构建一个小型的多人网络案例.即使我们的例子很简单,但也会涵盖以下关键概念,这应该可以帮助大家使用HLAPI构建大型游戏项目. 在第一部分, ...
- linux常用命令之文件权限
CHGRP chgrp – change group ownership,改变组别的所有权 用法 chgrp 组别名 文件\目录名 选项 -R (recursive)递归改变,将目录下所有的文件和目 ...
- 奇怪的Hibernate——当?遇上%
今天写了一个模糊查询的SQL语句,发现了点有趣的东东 情景: 平时写模糊查询的时候是"select * from user where username like %?%" 然后就 ...
- Hibernate 配置 双向 对多关联 (未完待续·······)
从生疏到熟练 是要经历多少遍的练习? 这答案只能向自己找. 以Student和Course为例,一个学生可以选多门课程,一门课程也可以被多个学生选取: 首先 我们创建 ...
- ESLint – 可扩展的 JavaScript & JSX 校验工具
ESLint 是一个开源的 JavaScript 代码校验工具,最初是由 Nicholas C. Zakas 在2013年创建的.经常被用来发现问题的模式或代码,不符合特定的风格准则. ESLint ...
- Spring MVC 处理模型数据(@ModelAttribute)
SpringMVC中的模型数据是非常重要的,因为MVC中的控制(C)请求处理业务逻辑来生成数据模型(M),而视图(V)就是为了渲染数据模型的数据. 直白来讲,上面这句话的意思就是:当有一个查询的请求, ...
- 创建和删除节点:——核心DOM
1. 创建单个元素节点:3步: 1. 创建空元素节点对象: var elem=document.createElement("标签名"); ...
- ae_feature的插入、复制和删除
1.插入 /// <summary> ///向featureclass中批量插入features ,批量插入features,用buffer的方法,要比循环一个个Store的方法快 /// ...
- Excel数据导入到Sharepoint List
这个功能是从XML中读取需要导入到Sharepoint List的列名字,然后把Excel中对应的数据导入到Sharepoint List中.基本原理,把Excel中数据临时放到Datatable中, ...