찾다
시스템 튜토리얼리눅스Linux 환경 변수는 어떤 파일에서 나오나요?

Linux 환경 변수는 어떤 파일에서 나오나요?

Mar 20, 2024 pm 07:50 PM
linux환경 변수빨간 모자 리눅스

리눅스 환경

LinuxShell 로그인이 성공하면 Linux는 로그인을 위해 파일에서 일련의 데이터를 얻습니다. 이 데이터는 개별 지침이나 개별 프로그램에 사용됩니다. 해당 데이터를 LinuxShell 런타임 환경이라고 합니다. 환경 내의 데이터는 크게 환경 변수, 셸 변수, 별칭, 셸 함수의 네 가지 유형으로 나눌 수 있습니다. 그 중 Shell 변수, 별칭, Shell 함수에 대해서는 여기서 자세히 설명하지 않습니다.

환경변수란 무엇인가요?

매개변수 없이 printenv 명령을 직접 사용하여 현재 세션의 환경 변수와 환경 변수의 값을 출력할 수 있습니다. 매개변수를 추가하면 특정 변수의 값이 출력됩니다. 보는 것이 더 편리하다면 printenv의 출력을 less로 전달하여 환경 변수를 볼 수 있습니다(1):

으아악

다음은 내 Linux 시스템 출력의 일부입니다.

으아악

보통 접하게 되는 PWD, HOME, USER 등이 모두 포함되어 있는 것을 볼 수 있습니다.

명령어의 매개변수에 변수의 값을 사용하고 싶다면 "$변수명"(2)을 입력하면 됩니다. 예:

으아악

사용자 정의 변수

시스템과 함께 제공되는 변수뿐만 아니라 사용자가 변수를 맞춤 설정할 수도 있습니다.

으아악

공백은 쉘 명령에서 구분 기호로 간주되며 의미 없는 기호가 아니기 때문에 등호의 왼쪽과 오른쪽에는 공백이 없습니다.

공백, $ 등과 같은 특수 문자가 나타나는 경우 콜론(3)으로 확장해야 합니다.

셸에서 실행 중인 프로그램이 변수에 액세스하도록 하려면 내보내기 명령을 사용해야 합니다.

으아악

이와 같이 현재 세션에 정의된 변수는 현재 세션에서만 유효합니다. 즉, 로그아웃했다가 다시 로그인하면 해당 변수는 더 이상 존재하지 않습니다. 셸에 로그인할 때마다 이 변수를 사용하려면 환경 변수 구성 파일에서 변수를 정의해야 합니다.

환경 변수는 어떤 파일에서 나오나요?

글 시작 부분에서 언급했듯이 Linux는 파일에서 환경 변수를 얻습니다. 그렇다면 LinuxShell에 환경 변수를 제공하는 파일은 무엇입니까? (로그인셸과 비로그인셸은 앞서 설명하겠습니다)

linux修改环境变量的值_linux修改用户环境变量_修改环境变量linux

로그인 쉘의 경우:

/etc/profile, 이 파일은 loginshell의 전역 환경 변수 구성 파일입니다. 전역은 모든 사용자에게 유효하다는 것을 의미합니다. ~/.bash_login, ~/.profile 이 세 파일은 구성에 사용됩니다. 사용자의 개인 환경 변수이므로 각 사용자의 HOME 디렉터리에는 이 세 가지 파일 중 하나 이상이 포함됩니다(Linux 배포 버전에 따라 다름). linux는 사용자 환경 변수를 수정하며, 읽을 때 그 중 하나만 읽혀집니다. loginshell이 ​​로그인하면 Linux는 먼저 전역 구성 파일 Linux 메모리 관리 /etc/profile을 읽은 다음 HOME 디렉터리에서 특정 순서로 이 세 파일을 검색하고 마지막으로 발견된 첫 번째 파일을 읽습니다. /etc/profile에 정의된 변수와 충돌이 있으면 해당 변수를 덮어씁니다.

对于non-loginshell:

/etc/bash.bashrc,这个文件是non-loginshell的全局环境变量配置文件。(网上一些博客的介绍中,这个文件不是/etc/bash.bashrc而是/etc/bashrc,其实这取决于发行版本)~/.bashrc,这个文件是用户个人的non-loginshell环境变量配置文件,与loginshell相同,该文件在/etc/bash.bashrc后执行,有冲突时,该文件也会将冲突的变量重画。

以上关于文件读取次序的描述参考于这篇文章。

各类linux发行版都带有一个命令su,若直接"su用户名",则会以non-loginshell登陆到该用户,若加上选项"-"或是"-l"或是"--login",则会以loginshell登陆到该用户。诸位读者倘若更清楚的体会这种文件的读取过程,可以借助这个命令,通过更改那些文件来进行测试。

loginshell与non-loginshell

登陆LinuxShell有两种方式:loginshell与non-loginshell。loginshell一般会作为第一个登陆的shell(例如开机时的登陆),而non-loginshell一般是开机后从GUI直接启动的shell。通过这两种方式登陆的环境变量会有一些区别。

1.non-loginshell会承继上一个进程(一般是loginshell)中的一些环境变量

可以通过一个简单测试来验证。

首先,在当前shell中自定一个变量foo=FOO,并export(为了让子进程也能使用这个变量,而shell本身就是一个程序):

rit@rit-X405UA:~$ foo=FOO
rit@rit-X405UA:~$ export foo

接着,以loginshell登陆到另一个帐户bob,并尝试查看foo变量:

rit@rit-X405UA:~$ su - bob
Password: 
bob@rit-X405UA:~$ echo $foo
bob@rit-X405UA:~$

结果foo变量为空,在这儿说明foo未被定义。

接着,以non-loginshell登陆到另一个帐户bob,并查看foo变量:

rit@rit-X405UA:~$ su bob
Password: 
bob@rit-X405UA:/home/rit$ echo $foo
FOO

结果foo变量与rit这个用户的shell中的定义一致。

linux修改用户环境变量_修改环境变量linux_linux修改环境变量的值

说明non-loginshell承继了上一个进程的用户自定变量,而loginshell没有承继。

2.PWD,HOME,USER,PATH

在1中的事例就可以注意到,loginshell的PWD弄成了当前用户的HOME目录(~),而non-loginshell则承继了父进程的工作目录。

若使用echo来查看HOME与USER,我们会发觉两种登陆形式登陆以后这两个变量都切换到了当前用户对应的home目录与username。

对于两种登陆形式的PATH的区别,可以在~/.bash_profile(或是~/.bash_login,~/.profile)中找到部份线索。上面说过,这三个文件是在loginshell中读取的,假如我们仔细比对它们与~/.bashrc,都会发觉~/.bash_profie中多了如此两行:

...
PATH="$HOME/bin:$PATH"
...
PATH="$HOME/.local/bin:$PATH"
...

所以在用两种方法登陆以后,用echo查看PATH变量可以看见区别如下:

non-loginshell:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

linux修改环境变量的值_linux修改用户环境变量_修改环境变量linux

loginshell:

/home/rit/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

上面不包含$HOME/bin是由于home目录没有这个文件夹。

仔细观察可以发觉还有别的区别,但这些区别的出处就不太好找了。

注释

(1)linuxshell提供一种叫pipeline的特点,意味着可以将一个命令的输出重定向至下一个命令的输入(即把某个命令的输入当成时另一个命令的输入),不过前提是该指令要才能接受输入或形成输出。常见的指令有cat,less,grep等。输入输出用"|"来拼接。

(2)linuxshell在读取到$这个符号时,会先将它前面紧挨到的的字符视作变量名,并将$与变量名替换成变量的值,之后再将替换后的参数传给命令。这属于shell的特点expansion中的parameterexpansion,不仅parameterexpansion之外,还有pathnameexpansion,braceexpansion,commandsubstitution。

(3)与(2)相反,假如要忽视掉特殊符号,可以在右侧加破折号。双冒号会屏蔽除"","`","$"以外的所有特殊符号。单冒号会忽视掉所有特殊符号。

参考

不仅环境变量文件读取次序是参考网站的博客linux修改用户环境变量,其它内容皆参考自书本:TheLinuxCommandLine2ndEdititonACompleteIntroduction。

勘误校准2019年7月4日:(1)自定义变量时等号左右两侧都不能留空格。更改前我只提及了等号右边不能留空格。(2)parameterexpansion会将"$变量名"替换成变量的值。更改前的描述为把"$变量名"转化为变量名。(3)escapecharacter不属于expansion特点。更改前我把它归类到了expansion里。新增内容2019年7月4日:在“用户自定义变量”部分的末尾新增对自定义变量作用范围的描述。

위 내용은 Linux 환경 변수는 어떤 파일에서 나오나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 ITcool에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Linux를 배우기가 어렵습니까?Linux를 배우기가 어렵습니까?Apr 18, 2025 am 12:23 AM

Linux를 배우는 것은 어렵지 않습니다. 1.Linux는 UNIX를 기반으로 한 오픈 소스 운영 체제이며 서버, 임베디드 시스템 및 개인용 컴퓨터에서 널리 사용됩니다. 2. 파일 시스템 및 권한 관리 이해가 핵심입니다. 파일 시스템은 계층 적이며 권한에는 읽기, 쓰기 및 실행이 포함됩니다. 3. APT 및 DNF와 같은 패키지 관리 시스템은 소프트웨어 관리를 편리하게 만듭니다. 4. 프로세스 관리는 PS 및 최고 명령을 통해 구현됩니다. 5. MKDIR, CD, Touch 및 Nano와 같은 기본 명령에서 학습을 시작한 다음 쉘 스크립트 및 텍스트 처리와 같은 고급 사용법을 사용해보십시오. 6. 권한 문제와 같은 일반적인 오류는 Sudo 및 CHMod를 통해 해결할 수 있습니다. 7. 성능 최적화 제안에는 HTOP을 사용하여 리소스 모니터링, 불필요한 파일 청소 및 SY 사용이 포함됩니다.

Linux 관리자의 급여는 무엇입니까?Linux 관리자의 급여는 무엇입니까?Apr 17, 2025 am 12:24 AM

Linux 관리자의 평균 연봉은 미국에서 $ 75,000 ~ $ 95,000, 유럽에서는 40,000 유로에서 60,000 유로입니다. 급여를 늘리려면 다음과 같이 할 수 있습니다. 1. 클라우드 컴퓨팅 및 컨테이너 기술과 같은 새로운 기술을 지속적으로 배울 수 있습니다. 2. 프로젝트 경험을 축적하고 포트폴리오를 설정합니다. 3. 전문 네트워크를 설정하고 네트워크를 확장하십시오.

Linux의 주요 목적은 무엇입니까?Linux의 주요 목적은 무엇입니까?Apr 16, 2025 am 12:19 AM

Linux의 주요 용도에는 다음이 포함됩니다. 1. 서버 운영 체제, 2. 임베디드 시스템, 3. 데스크탑 운영 체제, 4. 개발 및 테스트 환경. Linux는이 분야에서 뛰어나 안정성, 보안 및 효율적인 개발 도구를 제공합니다.

인터넷은 Linux에서 실행됩니까?인터넷은 Linux에서 실행됩니까?Apr 14, 2025 am 12:03 AM

인터넷은 단일 운영 체제에 의존하지 않지만 Linux는 이에 중요한 역할을합니다. Linux는 서버 및 네트워크 장치에서 널리 사용되며 안정성, 보안 및 확장 성으로 인기가 있습니다.

Linux 운영이란 무엇입니까?Linux 운영이란 무엇입니까?Apr 13, 2025 am 12:20 AM

Linux 운영 체제의 핵심은 명령 줄 인터페이스이며 명령 줄을 통해 다양한 작업을 수행 할 수 있습니다. 1. 파일 및 디렉토리 작업 LS, CD, MKDIR, RM 및 기타 명령을 사용하여 파일 및 디렉토리를 관리합니다. 2. 사용자 및 권한 관리는 UserAdd, Passwd, CHMOD 및 기타 명령을 통해 시스템 보안 및 리소스 할당을 보장합니다. 3. 프로세스 관리는 PS, Kill 및 기타 명령을 사용하여 시스템 프로세스를 모니터링하고 제어합니다. 4. 네트워크 운영에는 Ping, Ifconfig, SSH 및 기타 명령이 포함되어 있으며 네트워크 연결을 구성하고 관리합니다. 5. 시스템 모니터링 및 유지 관리 Top, DF, Du와 같은 명령을 사용하여 시스템의 작동 상태 및 리소스 사용을 이해합니다.

Linux 별칭을 사용하여 사용자 정의 명령 바로 가기로 생산성을 높이십시오Linux 별칭을 사용하여 사용자 정의 명령 바로 가기로 생산성을 높이십시오Apr 12, 2025 am 11:43 AM

소개 Linux는 유연성과 효율성으로 인해 개발자, 시스템 관리자 및 전원 사용자가 선호하는 강력한 운영 체제입니다. 그러나 길고 복잡한 명령을 자주 사용하는 것은 지루하고 응급실이 될 수 있습니다.

Linux는 실제로 좋은 것은 무엇입니까?Linux는 실제로 좋은 것은 무엇입니까?Apr 12, 2025 am 12:20 AM

Linux는 서버, 개발 환경 및 임베디드 시스템에 적합합니다. 1. 서버 운영 체제로서 Linux는 안정적이고 효율적이며 종종 고 대전성 애플리케이션을 배포하는 데 사용됩니다. 2. 개발 환경으로서 Linux는 효율적인 명령 줄 도구 및 패키지 관리 시스템을 제공하여 개발 효율성을 향상시킵니다. 3. 임베디드 시스템에서 Linux는 가볍고 사용자 정의 가능하며 자원이 제한된 환경에 적합합니다.

Linux에서 윤리적 해킹을 마스터하기위한 필수 도구 및 프레임 워크Linux에서 윤리적 해킹을 마스터하기위한 필수 도구 및 프레임 워크Apr 11, 2025 am 09:11 AM

소개 : Linux 기반의 윤리적 해킹으로 디지털 프론티어 보안 점점 더 상호 연결된 세상에서 사이버 보안이 가장 중요합니다. 윤리적 해킹 및 침투 테스트는 취약점을 적극적으로 식별하고 완화하는 데 필수적입니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기