Linux shell环境简介
Linux shell是一个命令行界面,可以让我们与操作系统交互。它可以让我们执行各种命令,如查看文件,运行程序,管理进程等。Linux shell有多种类型,如Bash,Zsh,Ksh等。不同的shell有不同的特性和语法。但我们最常用的就只有Bash。
Linux shell环境是指shell在执行命令时所依赖的一些参数和设置。这些参数和设置可以影响shell的行为和外观。例如:
- 环境变量:是一些以名称和值对应的变量,可以在shell中使用或传递给其他程序。例如PATH变量存储了可执行文件的搜索路径,PS1变量存储了shell提示符的格式。
- Shell配置:是一些用来定制shell功能和外观的命令或语句。例如alias命令可以定义命令的别名,function命令可以定义自定义函数。
Linux shell环境可以通过一些特殊的文件来设置和修改。这些文件通常位于某用户的主目录下(~),并以点(.)开头,表示隐藏文件。本文重点学习.profile文件和.bashrc文件记录。
Linux Shell和环境变量
Linux Shell概述
Linux Shell是一个程序,它接收用户输入的命令,并将其传递给操作系统执行。Shell还可以解释一些特殊的符号和语法,如重定向(>),管道(|),变量($),条件判断(if),循环(for),等等。这些符号和语法可以让编写更复杂和灵活的命令。
Linux Shell有多种类型,如Bash,Zsh,Ksh等。不同的Shell有不同的特性和语法。可以通过echo $SHELL命令来查看当前使用的Shell类型。例如:
$ echo $SHELL /bin/bash
环境变量的作用和设置方法
环境变量是一些以名称和值对应的变量,可以在Shell中使用或传递给其他程序。环境变量可以影响Shell和其他程序的行为和输出。例如:
- PATH变量存储了可执行文件的搜索路径,当输入一个命令时,Shell会按照PATH变量中指定的顺序在不同的目录中查找该命令。
- PS1变量存储了Shell提示符的格式,当在Shell中输入命令时,提示符会显示一些信息,如用户名,主机名,当前目录等。
- EDITOR变量存储了喜欢使用的文本编辑器的名称,当需要编辑一个文件时,一些程序会调用EDITOR变量中指定的编辑器。
可以通过echo命令来查看环境变量的值。例如:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
这表示PATH变量中包含了6个目录,用冒号(:)分隔。当输入一个命令时,Shell会先在/usr/local/sbin目录中查找该命令,如果没有找到,则继续在/usr/local/bin目录中查找,依此类推。
可以通过export命令来设置或修改环境变量的值。例如:
$ export PATH=$PATH:~/bin
这表示将/bin目录添加到PATH变量的末尾。这样就可以在任何地方执行/bin目录中的可执行文件了。
注意:export命令只能在当前Shell会话中生效。如果关闭或重新打开一个Shell窗口,则之前设置或修改的环境变量会失效。如果想让环境变量永久生效,则需要将export命令写入到一些特殊的文件中,如.profile文件或.bashrc文件。
理解.profile文件
.profile文件的作用和位置
.profile文件是一个用来设置和修改环境变量和Shell配置的文件。它通常位于用户的主目录下(~),并以点(.)开头,表示隐藏文件。可以通过ls -a命令来查看隐藏文件。例如:
$ ls -a . .. .bash_history .bash_logout .bashrc .profile
这表示root的主目录下其中一个就是.profile文件。
.profile文件的作用是在登录系统或打开一个登录Shell时,执行其中的命令。登录Shell是指需要输入用户名和密码才能进入的Shell,如终端模拟器,远程登录等。非登录Shell是指不需要输入用户名和密码就能进入的Shell,如图形界面下的终端窗口等。
.profile文件通常用来设置一些全局的环境变量和Shell配置,如PATH,PS1,EDITOR等。这些环境变量和Shell配置会对所有的Shell会话生效,无论是登录Shell还是非登录Shell。
如何创建和编辑.profile文件
如果主目录下没有.profile文件,可以通过touch命令来创建一个空的.profile文件。例如:
$ touch ~/.profile
这表示在主目录下创建了一个空的.profile文件。
如果想编辑.profile文件,可以使用任何喜欢的文本编辑器来打开它。例如:
$ vim ~/.profile
这表示使用vim 编辑器来打开.profile文件。
当编辑完.profile文件后,需要重新登录或重新加载.profile文件才能使修改生效。可以通过source命令或点(.)符号来重新加载.profile文件。例如:
$ source ~/.profile
或者
$ . ~/.profile
这表示重新加载了.profile文件中的命令。
.profile文件的常见用途和示例
.profile文件通常用来设置一些全局的环境变量和Shell配置,如PATH,PS1,EDITOR等。这些环境变量和Shell配置会对所有的Shell会话生效,无论是登录Shell还是非登录Shell。
例如,如果想将~/bin目录添加到PATH变量中,并将vim设置为默认的文本编辑器,并将Shell提示符改为显示当前时间和当前目录,则可以在.profile文件中添加如下内容:
# Add ~/bin to PATH export PATH=$PATH:~/bin # Set vim as default editor export EDITOR=vim # Customize shell prompt export PS1="\t \w $ "
注意:每一行都以#开头的内容是注释,不会被执行。注释可以用来说明或解释代码的作用或意义。
保存并重新加载.profile文件后,就可以看到效果了。例如:
$ source ~/.profile root@xxx:/# export EDITOR=vim root@xxx:/# export PS1="\t \w $ " 04:14:54 / $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 04:15:06 / $ echo $EDITOR vim 04:15:10 / $ cd /home/xxx/Documents/ 04:15:28 /home/xxx/Documents $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 04:15:53 /home/xxx/Documents $ echo $EDITOR vim
这表示成功地修改了PATH变量,EDITOR变量和PS1变量。
理解.bashrc文件
.bashrc文件的作用和位置
.bashrc文件是一个用来设置和修改环境变量和Shell配置的文件。它通常位于用户的主目录下(~),并以点(.)开头,表示隐藏文件。可以通过ls -a命令来查看隐藏文件。例如:
04:17:12 /root $ ls -a . .bash_history .cache .dbus .profile .viminfo .. .bashrc .config .local .vim .wget-hsts
这表示主目录下有10个隐藏文件,其中一个就是.bashrc文件。
.bashrc文件的作用是在打开一个非登录Shell时,执行其中的命令。非登录Shell是指不需要输入用户名和密码就能进入的Shell,如图形界面下的终端窗口等。登录Shell是指需要输入用户名和密码才能进入的Shell,如终端模拟器,远程登录等。
.bashrc文件通常用来设置一些针对Bash Shell的环境变量和Shell配置,如alias,function,shopt等。这些环境变量和Shell配置只会对Bash Shell会话生效,不会影响其他类型的Shell。
如何创建和编辑.bashrc文件
如果主目录下没有.bashrc文件,可以通过touch命令来创建一个空的.bashrc文件。例如:
$ touch ~/.bashrc
这表示在的主目录下创建了一个空的.bashrc文件。
如果想编辑.bashrc文件,可以使用任何喜欢的文本编辑器来打开它 跟上面一样。例如:
$ vim ~/.bashrc
这表示使用vim编辑器来打开.bashrc文件。
当编辑完.bashrc文件后,需要重新打开或重新加载.bashrc文件才能使修改生效。可以通过source命令或点(.)符号来重新加载.bashrc文件。例如:
$ source ~/.bashrc
或者
$ . ~/.bashrc
这表示重新加载了.bashrc文件中的命令。
.bashrc文件的常见用途和示例
.bashrc文件通常用来设置一些针对Bash Shell的环境变量和Shell配置,如alias,function,shopt等。这些环境变量和Shell配置只会对Bash Shell会话生效,不会影响其他类型的Shell。
例如,如果想定义一些常用的命令别名,如ls -l为ll,grep --color=auto为grep等,并定义一个自定义函数calc来计算数学表达式,则可以在.bashrc文件中添加如下内容:
# Define some aliases alias ll='ls -l' alias grep='grep --color=auto' # Define a function to calculate math expressions calc() { echo "$*" | bc -l }
注意:每一行都以#开头的内容是注释,不会被执行。注释可以用来说明或解释代码的作用或意义。
保存并重新加载.bashrc文件后,你就可以看到效果了。例如:
root@btf:/usr# ll total 76 drwxrwxr-x 2 root root 36864 Aug 1 2023 bin drwxr-xr-x 2 root root 4096 Sep 4 05:39 games drwxr-xr-x 46 root root 4096 Sep 6 08:53 include drwxrwxr-x 79 root root 4096 Feb 21 04:10 lib lrwxrwxrwx 1 root root 3 Feb 21 04:10 lib64 -> lib drwxr-xr-x 2 root root 4096 Sep 4 05:51 libexec drwxrwxr-x 10 root root 4096 Feb 14 05:33 local drwxrwxr-x 2 root root 8192 Feb 28 2022 sbin drwxrwxr-x 180 root root 4096 Feb 14 06:05 share drwxr-xr-x 2 root root 4096 Apr 15 2020 src root@btf:/usr# export PATH=$PATH:~/bin root@btf:/usr# export PS1="\t \w $ " 04:21:47 /usr $ calc "2+2*2" 6 04:21:53 /usr $
这表示成功地使用了别名和自定义函数。
.profile与.bashrc的区别
.profile与.bashrc的加载时机和条件
.profile文件和.bashrc文件的最大区别是它们的加载时机和条件不同。
.profile文件只在登录系统或打开一个登录Shell时,执行其中的命令。登录Shell是指需要输入用户名和密码才能进入的Shell,如终端模拟器,远程登录等。非登录Shell是指不需要输入用户名和密码就能进入的Shell,如图形界面下的终端窗口等。
.bashrc文件只在打开一个非登录Shell时,执行其中的命令。非登录Shell是指不需要输入用户名和密码就能进入的Shell,如图形界面下的终端窗口等。登录Shell是指需要输入用户名和密码才能进入的Shell,如终端模拟器,远程登录等。
这意味着,如果在图形界面下打开一个终端窗口,则只会执行.bashrc文件中的命令,不会执行.profile文件中的命令。如果在终端模拟器或远程登录中打开一个Shell,则只会执行.profile文件中的命令,不会执行.bashrc文件中的命令。
但是,有一个例外情况。如果在.profile文件中添加了如下内容:
# Load .bashrc if it exists if [ -f ~/.bashrc ]; then . ~/.bashrc fi
这表示让.profile文件在执行完自己的命令后,再去执行.bashrc文件中的命令(如果存在)。这样一来,无论打开的是登录Shell还是非登录Shell,都会执行.bashrc文件中的命令。这是一种常见的做法,可以让避免重复地在两个文件中写相同的命令。
.profile与.bashrc的适用场景
.profile文件和.bashrc文件的另一个区别是它们适用于不同的场景。
.profile文件通常用来设置一些全局的环境变量和Shell配置,如PATH,PS1,EDITOR等。这些环境变量和Shell配置会对所有的Shell会话生效,无论是登录Shell还是非登录Shell。因此,.profile文件适合存放一些通用且不经常变化的设置。
.bashrc文件通常用来设置一些针对Bash Shell的环境变量和Shell配置,如alias,function,shopt等。这些环境变量和Shell配置只会对Bash Shell会话生效,不会影响其他类型的Shell。因此,.bashrc文件适合存放一些个性化且经常变化的设置。
例如,如果想将~/bin目录添加到PATH变量中,并将vim设置为默认的文本编辑器,并将Shell提示符改为显示当前时间和当前目录,则可以在.profile文件中添加如下内容:
# Add ~/bin to PATH export PATH=$PATH:~/bin # Set vim as default editor export EDITOR=vim # Customize shell prompt export PS1="\t \w $ "
如果想定义一些常用的命令别名,如ls -l为ll,grep --color=auto为grep等,并定义一个自定义函数calc来计算数学表达式,则可以在.bashrc文件中添加如下内容:
# Define some aliases alias ll='ls -l' alias grep='grep --color=auto' # Define a function to calculate math expressions calc() { echo "$*" | bc -l }
.profile与.bashrc的相互关系
.profile文件和.bashrc文件之间有一种相互关系,即.profile文件可以调用.bashrc文件中的命令。
如果在.profile文件中添加了如下内容:
# Load .bashrc if it exists if [ -f ~/.bashrc ]; then . ~/.bashrc fi
这表示让.profile文件在执行完自己的命令后,再去执行.bashrc文件中的命令(如果存在)。这样一来,无论打开的是登录Shell还是非登录Shell,都会执行.bashrc文件中的命令。这是一种常见的做法,可以让避免重复地在两个文件中写相同的命令。
但是,反过来并不成立,即.bashrc文件不能调用.profile文件中的命令。这是因为.profile文件只在登录Shell时执行,而.bashrc文件只在非登录Shell时执行。如果.bashrc文件调用了.profile文件中的命令,那么在非登录Shell时,.profile文件中的命令会被执行两次,一次是由.profile文件本身执行,一次是由.bashrc文件调用执行。这可能会导致一些错误或冲突。
因此,.profile文件和.bashrc文件之间的相互关系是单向的,即.profile文件可以调用.bashrc文件中的命令,但.bashrc文件不能调用.profile文件中的命令。
希望这篇文章能对您有所帮助。如果还有其他问题或建议,请留言与私信。