对修改提示符引起的一些问题的理解

有一个练习:提示符修改过后永久保存,每次打开一个新的shell,提示符都为已设定好的格式,不会因为打开新的shell而不同。

在做这个练习的时候遇到了不少问题,通过不断bing,将起初很陌生的问题一点点的解决,得到了一些理解,因此将理解写下来。

提示符与变量PS1有关,PS1的值可以被修改或重新赋予。PS1的值变,则提示符也会变。通过搜索得到只要在/etc/bashrc中添加一句PS1=XXXXX就可以解决这个问题,其中XXXXX是一串符合PS1格式的值。可为什么在bashrc中添加一句话就将问题解决了?

要想PS1的值产生作用,那肯定是在打开shell时,系统已经执行过某些文件,然后执行过PS1重新赋值的那条语句。在这要先说下什么是shell,它有几种,这几种的区别。

shell是什么?比较专业抽象的解释我就不说了,我直接举些实例。当你打开电脑,来到linux的图形化桌面的时候,其实你已经接触到一个shell,这个图形化的操作环境就是一个shell。然后在桌面右键,进入一个终端,而这个终端也是一个shell。然后,shell有两种:login shell和non-login shell。login shell是需要用户名、密码登录后才能进入的shell(或者通过”–login”选项生成的shell);而non-login shell则是不需要密码和账号的。从执行文件的顺序的角度来讲这两者的区别:

在进入login shell时,系统自动执行的文件及顺序:/etc/profile >
/etc/profile.d > ~/.bash_profile > ~/.bashrc > /etc/bashrc。   

在进入non-login shell时,系统自动执行的文件及顺序:~/.bashrc > /etc/bashrc
> /etc/profile.d。

因此到这里,可以解释为什么要在/etc/bashrc下给PS1赋值。无论是以什么方式打开shell,都必然要执行/etc/bashrc,那么就会执行PS1重新赋值的语句,也就会得到想要的提示符。

那/etc/bashrc和~/.bashrc有什么区别? “~”表示的是家目录,比如root用户,他的家目录为/root,那么“~”就等于/root。隐藏文件一般带有“.”。不同的用户有不同的家目录,就有不同的.bashrc。那么系统根据不同的登录用户就会执行不同的.bashrc,给予用户对应的使用习惯。而/etc下的文件设置的内容是全部用户都相同的。因此如果是在/etc/bashrc对PS1赋值,就会对全部登录这个系统的用户有效;如果是在~/.bashrc下对PS1赋值,就会只和对应的用户有效,而这用户的提示符就会和别的用户不同。

/etc/profile和/etc/bashrc有什么区别,它们一般有什么作用?profile是某个用户唯一的用来设置环境变量的地方,因为用户可以有多个 shell 比如 bash, sh, zsh 之类的,但像环境变量这种其实只需要在统一的一个地方初始化就可以了,而这就是 profile。bashrc是专门用来给 bash 做初始化的,比如用来初始化 bash 的设置,bash 的代码补全,bash 的别名,bash 的颜色。以此类推也就还会有 shrc, zshrc 这样的文件存在。

 

原创文章,作者:Eminem,如若转载,请注明出处:http://www.178linux.com/81012

(0)
EminemEminem
上一篇 2017-07-15
下一篇 2017-07-15

相关推荐

  • CentOS 6上的防火墙策略的保存

    两种iptables的策略保存的方法

    2018-02-27
  • 文件查找与解压缩

    文件查找 脚本文件名的查询 which(寻找执行文件) which [-a] command -a :将所有由PATH目录中可以找到的命令均列出,而不只是第一个被找到的命令名称 文件名的查找 文件查找:实时查找:遍历所有文件进行条件匹配;(find)非实时查找:根据索引查找;(whereis、locate) whereis whereis [-bmsu] […

    Linux干货 2017-04-08
  • LVM逻辑卷管理器(Logical Volume Manager)

    逻辑卷管理器(Logical Volume Manager) 简介      LVM的做法是将几个物理的分区通过软件组合成为一块看起来是独立的大磁盘(VG),然后将这块大磁盘再分成可以使用的分区(LV),最终就能够挂载使用了。内部通过PE来进行扩展或缩小。 PV(PhysicalVolume)物理卷 用fdisk命令调整系统标识…

    Linux干货 2016-09-01
  • SHELL脚本编程之变量的种类

    变量 在进行脚本编程的时候,经常会使用到不同类型的变量,根据变量的生效范围,可大致分为以下的几类: 本地变量:生效范围为当前shell进程,对当前shell之外的其他shell进程,包括当前shell进程的子shell进程都是无效的,它的作用域就是当前shell进程 环境变量:生效范围是当前shell进程及其子进程 局部变量:生效范围是当前shell进程中某…

    Linux干货 2016-08-12
  • Linux包管理:rpm/yum/编译安装

    rpm:安装,查询,升级,校验,卸载   Topic: 程序包 rpm管理 yum管理   程序包:   什么是程序包管理器: 将编译好的应用程序的各个组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作   程序包的组成清单: 文件清单 安装或卸载时运行的脚本 数据库(公共) …

    2017-09-14
  • N26-第一周作业

    1.    计算机由以下几个部分组成:         a. CPU:中央处理器;主要由运算器和控制器组成            …

    Linux干货 2017-01-07