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

有一个练习:提示符修改过后永久保存,每次打开一个新的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

相关推荐

  • Ansible初识

    Ansible概念 ansible是自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。说…

    2017-07-08
  • rsync+inotify实现数据实时同步备份

    定时备份和实时备份        说到备份,无疑于定时备份和实时同步备份。定时备份可以通过脚本或者Crontab来实现,而实时同步备份可以通过某些接口监控文件的各种变化情况来实现的(比如内核接口inotify);通过对比可以发现对数据信息要求高的环境使用实时同步备份可以更好更有利的保护数据的安全性。 软件介绍之rsyn…

    Linux干货 2015-02-28
  • 第六周

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s/^[[:space:]]\+/#&/ 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; :%s/^[[:space:]]\…

    Linux干货 2016-09-19
  • DNS基础知识

    一、DNS介绍:   1、DNS: Domain  Name Service,域名解析服务;      部署方式为分布式部署,如图所示:        2、查询类型:     递归查询:仅发出一次请求,要求对方回复最终结果&nbs…

    Linux干货 2015-05-18
  • Linux入门知识之计算机基础

    计算机基础、linux发行版、命令帮助获取

    2018-01-11