10.4 bash shell的操作环境

前言:当我们登陆bash shell时,会有欢迎文字、定义好的环境变量命令别名,bash是如何帮我们设置好的?我们来探究一下。

10.4.1 路径与命令查找顺序

系统中有很多命令(如:ls),如果一个命令(如:ls)被执行,那么哪一个会被执行呢?

基本上,命令执行的顺序如下:

  1. 相对/绝对路径执行,如:/bin/ls、./ls
  2. 由alias找到该命令执行
  3. bash内置的命令
  4. 通过$PATH这个变量定义的路径

举个例子如下:

ls是我们经常使用的命令,但我们使用/bin/ls来执行,有思考过两者有什么不同吗?

可以自己试一试,你会发现,直接使用ls会有颜色区分文件和文件夹,但是/bin/ls却没有。

因为根据上面命令执行的顺序,直接执行/bin/ls就是执行ls命令,但执行ls后,会因为【alias ls='ls --color=auto'】而执行ls --color=auto这个命令。就这么简单。

那么我们如何知道一个命令(如:ls)执行时,系统的查找顺序呢?

答:使用type -a ls,如下图,先执行别名定义的命令,再执行bash内置命令,再执行绝对路径定义的命令。注意这里/usr/bin/ls是bash内置的命令哦。

[feng@njuhost ~]$ type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
ls 是 /bin/ls

新手可略过以下内容:

关于经常出现的提示:未找到该命令

如果我们从源码(source code)编译安装一个软件,注意这个软件的命令都是在自己自定义的目录下的。思考上面的命令执行过程,我们是不是很容易就知道,想要运行相关的命令,是不是就需要在$PATH添加该安装路径呢?具体怎么做,请看接下来的分析。

其实我们很容易在网络上搜索到“如何更改linux环境变量”,但知道为什么这样做显然更重要。希望不要嫌弃我的啰嗦,因为这文章是写给我自己看的。哈哈。

10.4.2 bash的登录与欢迎信息

这里不是很重要,为了内容的完整性,还是补充了一下,大家可以略过。

bash也是有登录界面和欢迎信息的。我们在终端界面(tty1-tty6)登录的时候,会有几行提示的字符串,他们就是登录画面。

我这里默认是图形界面登录,我们切换非图形化界面看一下,怎么切换?这里介绍一个快捷键:

Ctrl+Alt+F1是图形化界面,Ctrl+ALT+F2/F3/F4/F5都为非图形化界面。

注意该种方法为暂时性地切换到非图形化界面。

切换到非图形界面,看,这就是欢迎信息啦:

 那么问题来了,这些信息都写在哪个文件中呢?

答:在/etc/issue里。

 看起来有点迷糊,其实\S \r \m就是类似于$PS1的变量,对照这上面,很容易就发现:

\S:操作系统的名称,这里是 CentOS Linux 7(Core)

\r:操作系统的版本,注意这里的版本号是要清楚含义的,可以自行百度了解

\m:硬件平台,这里就是x86_64,具体含义也自行百度哦。

更多的就不写啦,参考鸟叔的linux私房菜,想要修改登录界面的欢迎文字,就修改/etc/issue文件,你甚至可以在上面写一个大大的囧字,是不是很酷?

最后补充两个小知识点。当我们通过talnet远程登录程序来登录时,主机的登录画面显示的是/etc/issue.net而不是/etc/issue,另外我们可以修改/etc/motd,使得用户登录后显示一些信息。注意是登录后哦,/etc/issue显示的是非图形用户界面欢迎信息,此时还没有登录哦。

无非是将信息写在配置文件里了,了解哪些信息写在哪些配置文件中,这就是上面讲解的全部。不难,忘记了查一下就好了。平时也不用改这些东西。

10.4.3 bash的配置文件(这才是重点呀,好好看)

有没有奇怪,当我们一进入bash就已经取得一系列有用的变量了,比如$PATH,这些变量都定义在哪里呢?

答:系统中有一些环境配置文件存在,bash启动时会直接读取这些配置文件,来规划bahs的操作环境。这些配置文件分全局配置文件个人配置文件,并且我们命令别名、自定义变量等在设置后要保存在这些配置文件中才能永久生效,否则注销bash之后就失效了。

知识点1:login与non-login shell

介绍bash配置文件之前,必须要明白几个概念,即login/non-login shell之间的区别,因为这两个取得bash的情况,读取的配置文件是不一样的。

login:取得bash需要完整的登录流程,比如从tty1-tty6登录时,都需要输入账号密码,那通过这种方式获得的bash就是login bash;

non-login bash:取得bash不需要完整登录流程。比如从X Window登录linux后,再启动终端;又或者在原来的bash下再执行bash命令。这些都不需要重新输入账号密码,它们都属于non-login bash。

一般来说,login bash只会读取以下两个配置文件:

  1. /etc/profile:系统整体的设置,不推荐修改;
  2. ~/.bash_profile或~/.bash_login或~/.profile:用户个人的配置,推荐改这里。

接下来介绍着两个文件。

知识点2:/etc/profile 

这是bash的系统配置文件,其实就是一段脚本,利用用户标识符(UID)来决定很多重要的变量数据。文件设置的变量主要有:PATH MAIL USER HOSTNAME HISTSIZE umask

具体这些变量的含义等参考鸟叔的linux私房菜。其实就是一段脚本,学linxu一定要学会看、写脚本。

在/etc/profile这个脚本里,会调用外部的一些配置文件,这样使得/etc/profile本身很简洁,有哪些呢?

/etc/profile.d/*.sh

这个目录下的文件规定了bash操作界面的颜色、语系、命令别名等,如果需要设置一些用户共享的命令别名时,可以在这个目录下自行建立*.sh文件,将需要的数据写入即可。

/etc/locale.conf

这个文件由/etc/profile.d/lang.sh调用,来决定bash默认使用的语系。

/usr/share/bash-completion/completions/*

【tab】能够进行命令、文件名补齐,还能够进行参数补齐,就是从这个目录中找到的命令处理的,这个目录下的内容都是/etc/profile.d/bash_completion.sh这个文件加载的。

ps:这里我也没有深究,遇到再补充。

总之,bash的login shell读取的环境配置文件就是/etc/profile,但是该文件又调用了其他的配置文件,所以写的很简洁。这是linux设计的一个哲学,这种设计很多很多。

知识点3:~/.bash_profile

bash读完了/etc/profile之后还会读取~/.bash_profile文件,前者是系统整体环境配置文件,后者是用户个人环境配置文件。

因为bash的历史遗留问题,可能还会有~/.bash_login和~/.profile,本质是一样的,bash的login shell只会读取其中一个。这是为了照顾从其他shell转过来的用户而设置的。

让我们看一下~/.bash_profile里的内容:

[root@njuhost ~]# cat ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

先看后面简单的,将$HOME/bin添加进$PATH变量中,这样$HOME/bin也称为了执行文件路径。也就是说,我们将自己的执行文件放在家目录下的~/bin/文件夹下,就可以直接执行文件而不需要使用绝对路径了。很有意思。

接下来看上面的脚本,其实也很简单,判断家目录下的~/.bashrc是否存在,如果存在就读入~/bashrc的设置。也就是说~/.bash_profile还会读取~/.bashrc设置。

所以整个login shell的配置文件读取流程如下图:

 上面的是主线流程,下面的是调用的配置文件。显然我们的偏好设置应该写在~/.bashrc里面。

注意到现在我们都是login shell哦。

知识点4:source

因为/etc/profile和~/.bash_profile都是在取得login shell的时候才会读取的配置文件,所以如果我们将自己的偏好设置写入上述文件之后,通常需要注销再登录,设置才会生效。

那么能不能直接读取配置文件而不用注销登录呢?可以使用source命令。

直接举个例子。我修改了~/.bashrc文件,立刻执行source ~/.bashrc命令,就能将刚刚设置的内容读入目前的环境中。

知识点5:~/.bashrc

上面我们讲的都是login shell,加下来讲一讲non-login shell的环境配置文件。

很简单,当我们取得non-login shell时,bash只会读取~/.bashrc而已。

~/.bashrc会调用/etc/bashrc,会完成一系列工作,这里就不细讲了,感兴趣的朋友可以去看一看。

知识点6:其他的配置文件

事实上还会有一些其他的配置文件可能影响bash操作的,简单介绍如下:

/etc/man_db.conf:规定了使用man时,去哪里寻找数据;

~/.bash_history:历史命令的记录;

~/.bash_logout:注销bash系统会帮我们完成什么任务。

10.4.4 终端的环境设置:stty、set

一般不需要更改,暂略。

10.4.5 通配符和特殊符号

bash环境中有一些常用的通配符和特殊符号。具体参见书本《鸟叔的linux私房菜》p344-p345

10.4.6 参考或其他帮助文档

Linux下环境变量配置的方法

鸟叔的linux私房菜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值