Linux从初期化文件谈Linux的Shell
作者:书友79805954 | 来源:互联网 | 2017-06-26 05:33
文章标题:Linux从初期化文件谈Linux的Shell。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
一,前言:
本文主要解说BASH的ShellScript,用户LOGIN,端末软件启动等时的初期化文件和各个文件读入的顺序,并且将对初期化文件的内容进行详细的解说。
二,概述:
Linux的标准Shell是Bash,Bash的作用并不仅仅是对ShellScript的解释和实行,并且在用户登录控制,Term等端末软件的命令行接受的命令进行处理等方面起着重要的作用。这样的Shell由于是接受用户的命令(键盘或其它)然后处理之后将结果显示在屏幕上,所以叫对话式(Interactive)Shell。像这样的对话式Shell可以对别名的定义,环境变数的设定等进行处理,还可以将端末的一些设定根据自己的爱好来改变,比如LS的颜色化表示,将自己的根目录变成%,#,在什么样的端末上都可以用BackSpace键进行消除等。。。。。
像这样的处理如果记述在初期化文件之中,在Shell启动时就可以自动执行,这些初期化文件可以放在自己的根目录下根据自己的喜好定制,当然,一些共通的设定可以放在全用户共痛的初期化文件中。如果你想将你的Linux设定成适合自己使用的话(这可是Linux的长处),你一定要对Linux的各种初期化文件的处理顺序,各个文件的不同作用等有一定的了解,本文将对此进行详细的解说。
三,SHELL利用的各种初期化文件
Shell启动时处理的初期化文件大致可分为两类,用户LOGIN时启动的LoginShell和别的文件启动时被
唤醒的二级SHELL。
初期化文件的内容全部是用ShellScript写成的,在Shell启动时自动(或者由其它文件唤醒)读入,由Shell自身解释并实行,所以初期化文件的第一行必须是[#!/bin/sh]或[#!/bin/bash],并且不用加实行属性。本节将从以下几个方面进行详细解说:
.LoginShell利用时的初期化文件
.二级Shell利用的初期化文件
.两种文件的合理的分别利用
3.1 LoginShell利用时的初期化文件
Login时,将用户名和密码输入之后,在[/etc/passwd]之中记述的Shell会被启动,LINUX的标准SHELL是Bash,如果想确认自己使用的是何种SHELL的话,在命令行输入
$ grep "^'whoami':" /etc/passwd
之后,结果是以分割开来的,第一段是用户名,最后一段就是自己的LoginShell啦。
现在说明一下上面的命令,'whoami' 是对whoami实行之后的结果置换,也就是自己的用户名,[^]是正规表现的用法,表示以什么什么开始的意思。比如自己的用户名是[john],这条命令就是从文件[/etc/passwd]之中检索以[john:]开始的行并表示。
在作为LoginShell的Bash启动之后,两个文件会被连续读入,由LoginShell解释实行。开始是全用户共通的初期化文件[/etc/profile],接着是各用户根目录下的[.bash_profile]
Linux安装之后,多数情况下会在各用户根目录下设置.bash_profile文件,自己的根目录下有没有此文件,用[ls -a] 确认,如果没有的话,Bash将如何处理请参照本节的附录。
/etc/profile,.bash_profile之中典型的处理内容是:PATH,USER等重要的环境变数的设定,程序异常终了时croe文件的大小的限制,新建文件的读写属性等。具体的/etc/profile,.bash_profile文件的内容在后面将详细介绍。
3.2 二级Shell利用的初期化文件
像X Window System的 kterm等软件启动时启动的Shell,由于也可以接受用户的命令,所以也叫对话式Shell当二级对话式Shell启动时,会自动读入用户根目录下的.bashrc,由调用的Shell解释并执行。一般地说,全用户共通的设定记述在/etc/bashrc中,但/etc/bashrc不能被自动读入,必须由.bashrc指示才能被读入。具体的可以用Bash的source命令或[.]实现,如在.bashrc中做如下记述:
1: if [ -f /etc/bashrc ]; then
2: . /etc/bashrc
3: fi
注:"-f" 是文件是否存在的判断条件。
/etc/bashrc,.bashrc之中典型的处理内容是:一般环境变数的设定,组合变数[PSI]的设定,别名的定义, Shell涵数的定义,端末设定的变更等。
3.3 两种初期化文件的合理的分别利用
在各用户的根目录下有两个初期化文件:.bash_profile和.bashrc,如果相同的内容在两个文件中都写的话,就会造成不必要的重复和修改上的麻烦,如何才能合理的分别使用呢,基本原则是:
*在.bashrc中不会发生冲突的尽量在.bashrc中记述,从.bash_profile中唤起.bashrc。
*Login时执行一次就行的命令和二级对话式Shell启动时反复执行会发生坏影响的命令在 .bash_profile中记述,
在.bash_profile中唤起.bashrc。的方法和从.bashrc读入/etc/bashrc 的方法一样,在.bash_profile中 做如下记述:
1: if [ -f ~/.bashrc ]; then
2: . ~/bashrc
3: fi
附录:
.bash_login 和.profile
如果用户根目录下没有.bash_profile文件时,Bash会在根目录下查找 .bash_login,如果 .bash_login 不存在的话,Bash会在根目录下继续查找.profile文件。
其实,这些文件都是从 C shell(.login), Bourne shell (.profile)来的,都是只有LoginShell利用的 初期化文件。不同的是,.profile是Bourne shell 和Bash 都可以利用的初期化文件。 从各初期化文件分开使用的方面来看,设置一个Bash 专用的.bash_profile比较合适。
推荐阅读
-
本文介绍了如何在三台CentOS 7.5虚拟机上通过Docker部署RabbitMQ集群,包括环境准备、容器创建、集群配置及故障处理等内容。 ...
[详细]
蜡笔小新 2024-12-03 19:26:48
-
本文探讨了Linux系统的核心哲学理念,包括但不限于‘万物皆文件’的原则、小型且专注的程序设计、通过管道链接程序以完成复杂任务等。同时,文章还介绍了如何通过设置环境变量来增强history命令的功能,使其能够记录命令执行的具体时间,以及几个常用的Linux命令及其使用方法。 ...
[详细]
蜡笔小新 2024-12-02 19:28:22
-
-
###########性能监控脚本###########################!binbash#监控cpu系统负载IPifconfigeth0|grepinetaddr ...
[详细]
蜡笔小新 2024-12-02 18:58:45
-
Excel VBA不仅能够处理日常办公任务,还具备调用外部命令行或Bash脚本的能力。本文将介绍如何使用VBA中的Shell函数来执行命令行指令,并通过实际示例展示如何获取计算机网络配置信息。 ...
[详细]
蜡笔小新 2024-12-02 13:11:29
-
本文详细介绍了在Linux环境下安装、配置PostgreSQL数据库的过程,包括环境准备、安装步骤、配置数据库访问以及日常服务管理等方面的内容。适合初学者和有一定经验的数据库管理员参考。 ...
[详细]
蜡笔小新 2024-12-01 10:36:36
-
本文探讨了管道符在Shell编程中的应用,详细解释了它作为进程间通信工具的功能,以及如何利用管道符实现命令间的高效数据传输。 ...
[详细]
蜡笔小新 2024-11-30 15:29:54
-
本文详细介绍如何在树莓派上安装并配置Samba服务,以实现与Windows系统的网络共享兼容性。适合初学者参考。 ...
[详细]
蜡笔小新 2024-11-30 14:24:43
-
ANSI最全介绍linux终端字体改变颜色等ANSI转义序列维基百科,自由的百科全书由于国内不能访问wiki而且国内关于ANSI的介绍都是简短的不能达到,不够完整所以转wiki到此 ...
[详细]
蜡笔小新 2024-11-29 12:47:14
-
本文详细探讨了在Linux系统中遇到的高Buff/Cache占用问题及其解决方案,提供了手动清除与定时任务自动化处理的方法。 ...
[详细]
蜡笔小新 2024-11-29 07:52:21
-
本文探讨了解决getallheaders函数引起的服务器500错误的方法,并介绍八种有效的服务器性能优化技术,包括内存数据库的应用、Spark RDD的使用、缓存策略的实施、SSD的引入、数据库优化、IO模型的选择、多核处理策略以及分布式部署方案。 ...
[详细]
蜡笔小新 2024-12-03 18:26:35
-
本文介绍了如何在 Linux 系统上构建网络路由器,特别关注于使用 Zebra 软件实现动态路由功能。通过具体的案例,展示了如何配置 RIP 和 OSPF 协议,以及如何利用多路由器查看工具(MRLG)监控网络状态。 ...
[详细]
蜡笔小新 2024-12-03 17:33:54
-
本文探讨了在Java应用中实现线程池优雅关闭的两种方法,包括使用ShutdownHook注册钩子函数以及通过SignalHandler处理信号量。每种方法都提供了具体的代码示例,并讨论了可能遇到的问题及解决方案。 ...
[详细]
蜡笔小新 2024-12-03 14:33:02
-
grep、sed、awk一、grep的用法1、grep简介grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep包 ...
[详细]
蜡笔小新 2024-12-03 13:02:44
-
OpenWrt 是一款高度可定制的嵌入式 Linux 发行版,广泛应用于无线路由器等领域,拥有超过百个预装软件包。本文详细探讨如何在 OpenWrt 上通过 Luci 构建自定义模块,以扩展其功能。 ...
[详细]
蜡笔小新 2024-12-03 12:06:08
-
Python作为一种广泛使用的高级编程语言,以其简洁的语法、强大的功能和丰富的库支持著称。本文将详细介绍Python的主要特点及其在现代软件开发中的应用。 ...
[详细]
蜡笔小新 2024-12-03 12:00:39
-
书友79805954
这个家伙很懒,什么也没留下!