Home > Article > Operation and Maintenance > Sharing the steps on how to configure environment variables under Linux (picture)
Environment variables in Linux include system level and user level. System-level environment variables are system variables that must be read by every user who logs in to the system, while user-level environment variables are loaded when the user uses the system. environment variables. Therefore, the following article mainly introduces relevant information about environment variable configuration in Linux. Friends in need can refer to it.
Introduction
When we usually use Linux, we often need to configure some environment variables. At this time, we usually search online Someone just shared their experience. But the problem is that their methods are different. Some say the configuration is in /etc/profile, some say it is configured in /etc/environment, some say it is configured in ~/.bash_profile, some say it is configured in ~/.bashrc, and some say it is configured in ~/.bashrc. It is said that the configuration is in ~/.bash_login, and some people say that it is configured in ~/.profile. . . This is really fair and reasonable. . . So the question is, how does Linux read the configuration file, and what is the basis? The following article will give you a detailed introduction, let’s take a look.
Document
I always hate the behavior of saying the conclusion without saying the source. This will give people a feeling of "Why should I believe you?" "a feeling of. And in fact, the conclusions drawn from casual discussions without sources are basically based on what others say. In fact, instead of asking other people, ask the documentation. After searching for a while, I found that the relevant documents about environment variable configuration are actually in the man document of the bash command. After all, this is the shell we commonly use.
In $man bash, I found the following text:
INVOCATION A login shell is one whose first character of argument zero is a -, or one started with the --login option. An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state. The following paragraphs describe how bash executes its startup files. If any of the files exist but cannot be read, bash reports an error. Tildes are expanded in filenames as described below under Tilde Expan‐ sion in the EXPANSION section. When bash is invoked as an interactive login shell, or as a non-inter‐ active shell with the --login option, it first reads and executes com‐ mands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior. When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists. When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc. When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following com‐ mand were executed: if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi but the value of the PATH variable is not used to search for the file‐ name.
Through this text, we discovered that in fact, the so-called environment variable configuration file , are those files that are automatically loaded when the shell logs in. However, the logins he defined are divided into two types:
login shell login.
interactive shell login.
login shell login
The so-called login shell login actually refers to the login that requires entering a password. Specifically, it includes booting up, ssh login, or entering bash --login, a method of "pretending to enter a password to log in". In this login method, the system will first read the /etc/profile file, and then search for the three files ~/.bash_profile, ~/.bash_login, ~/.profile in sequence, and run only the first one of them. File exists. In particular, we should pay attention to the "logical OR" relationship between the last three files. In many cases, we will find that the ~/.profile file has been modified. Why does the configuration not take effect after logging in again? This is because one of the first two files may exist in our system, resulting in the remaining files not being read.
The following three pictures illustrate this problem very well:
interactive shell login
The so-called interactive shell login is actually relative to the login shell login. We usually right-click to open the terminal after logging in, or CTRL+ALT+T to open the terminal, which is the interactive shell login. In this login method, the system will read /etc/bash.bashrc and ~/.bashrc in sequence and execute them. Under normal circumstances, some constants and some aliases are recorded by default in the ~/.bashrc file, especially the $PS1 variable. This variable determines the format, style, and color of the bash prompt.
Note:
It should be noted that these two login methods read different configuration files and are not related to each other. Intersection, so when we need to configure environment variables, we need to configure the required variables into different files according to our login method. For example, the following classic question.
Typical problems
An example of abnormal configuration of the environment configuration file is that when I log in to the server using ssh, I find that the prompt is like this :
bash-4.3$
Yes, just like the bash in the third picture above, the prompt is very strange, and the color of the files and folders is also different when ls is entered. There is no distinction. This problem is obviously due to the fact that the $PS1 environment variable is not configured, causing him to use the default value, although when checking the .bashrc file, it is found that the $PS1 variable is defined. , but since ssh belongs to the login shell, the configuration file it reads when logging in is a file such as /etc/profile, and .bashrc is not read in. The cause of this problem is usually that we accidentally deleted the default configuration file in /etc/profile, so the solution is also very simple. . . Just copy some files in .bashrc to /etc/profile.
The enlightenment this question gives us is that when we configure variables for the server, try to configure them in /etc/profile or ~/.bash_profile, because logging into the server using ssh basically does not use the .bashrc file; When we configure environment variables for our computer, try to configure them in .bashrc, because then we will read this file as long as we open the terminal, so that we can apply the configuration without logging out (it will only be applied after logging out and logging in again/ Configuration files such as etc/profile).
Summarize
The above is the detailed content of Sharing the steps on how to configure environment variables under Linux (picture). For more information, please follow other related articles on the PHP Chinese website!