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

有一个练习:提示符修改过后永久保存,每次打开一个新的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 17:39
下一篇 2017-07-15 19:12

相关推荐

  • inode、软硬链接区分、ln命令

    inode、软硬链接区分、ln命令 一、inode inode记录的是文件的属性及文件实际放在那块数据块中的。inode包含以下数据: 1. 该文件的可被访问的权限(read/write/excute) 2. 该文件的属主、属组(owner、group) 3. 该文件的大小 4. 该文件创建或者状态改变的时间(Ctim…

    Linux干货 2016-08-02
  • 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@loalhost ~]# (umask 077; cp -r /etc/skel /home/user1) 2、编辑/etc/group文件,…

    Linux干货 2016-09-06
  • linux软件包管理

    linux软件包管理 简介     在Linux系统中,软件包的安装和管理是很重要的知识,而linux/unix一个麻烦的地方就是软件安装程序比较麻烦和复杂,尤其是当所安装的软件包要处理较多的包依赖关系,这就更让人头疼了,最常见linux软件安装方式有三种:     本文主要介绍Linux中RedHat或CentOS发…

    系统运维 2016-05-05
  • ☞{ 编译内核;自制linux; }

    编译内核、自制linux 自制简单的linux 前提约定 CentOS 6.8 , Kernel-2.6.32-642.el6.x86_64 基于GRUB – 0.97 / 分区与 boot 分区独立, /boot 分区 100M+ ,/ 根分区看具体需求,此处为 1G Vmware 12.1,新建一个Li…

    Linux干货 2016-09-15
  • N25-第四周作业

    1、复制/etc/skel目录为/home/tuse1,要求/home/tuse1及其内部文件的属组和其它用户均没有任何访问权限。   cp -r /etc/skel /home/tuser1;chmod go= /home/tuse1 2、编辑/etc/group文件,添加组hadoop    vi /et…

    Linux干货 2016-12-27
  • python env seup

    ffffffffffffffffffffffffffffffffffffff

    2018-03-12