Linux设置文件与Shell操作环境
Shell设置文件读取流程
/etc/shells记录了Linux系统中支持的所有shell,默认使用bash。用户登入Linux系统时会获取到一个shell,具体获取到哪个shell与登录账号有关,/etc/passwd中每个账号信息中最后一个信息记录的就是该账号登入系统会获取到的shell。
获取到shell之后,shell会在启动时读取一些设置文件。具体读取了哪些设置文件又要分login shell和non-login shell(顾名思义,就是需要登录的shell和不需要登录的shell)两种情况。
login shell会读取/etc/profile和~/.bash_profile或~/.bash_login或~/.profile这两个文件,前者为系统全局设置,后者为当前用户个人设置。具体流程图如下(图借自鸟哥,为centos7设置文件读取流程):

/etc/profile做的事情:
1. 定义一些环境变量:
PATH、MAIL、USER、HOSTNAME、HISTSIZE、umask,等等。
2. 读取其他设置文件:
(1)/etc/profile.d/*.sh:规范了bash操作界面的颜色、语系、ll与ls指令的命令别名、vi的命令别名、which的命令别名,等等。
(2)/etc/locale.conf:由/etc/profile.d/lang.sh读入,设置bash默认使用的语系。(centos7以前版本为/etc/sysconfig/i18n)
(3)/usr/share/bash-completion/completions/*:由/etc/profile.d/bash_completion.sh读入,设置了命令补齐、文件名补齐等功能。
bash读取全局设置文件/etc/profile之后会读取当前登录用户的个人设置文件,按顺序读取~/.bash_profile、~/.bash_login、~/.profile的其中一个。
~/.bash_profile做的事情:
1. 读取~/.bashrc:这个文件定义了一些命令别名,读入了/etc/bashrc(这个文件定义了PS1、umask,读入/etc/profile.d/*.sh)。
2. 将~/bin这个目录加入到PATH中。
non-login shell的设置文件读取流程只是login shell的一部分,从读入~/.bashrc开始。
———————————————————————————————————————————————————————————————————————
指令执行历史:history与~/.bash_history
history:查看当前登录用户执行命令的历史记录。
~/.bash_history:记录当前用户执行命令的历史记录。
history -r:从~/.bash_history读取数据到内存供history指令使用。
history -w:将内存数据写入~/.bash_history中。
history -c:将内存中的指令历史记录清除(不会影响~/.bash_history)。
用户登入系统时bash会从~/.bash_history中读取数据到内存供history指令使用,登出系统时则将内存中的数据写入~/.bash_history中。若用户在多个终端登录了同一个账号,则每一次登出系统都会写一下文件,最后登出的终端的内存数据会覆盖其它所有终端写入的数据。
几个相关变量:
HISTFILE:~/.bash_history文件的绝对路径。
HISTSIZE:history指令最多输出的指令数量(在/etc/profile中定义)。
HISTFILESIZE:~/.bash_history文件中记录的最多指令数量。(若HISTSIZE<HISTFILESIZE,则history读取的是~/.bash_history文件中最后HISTSIZE条指令记录。)
HISTTIMEFORMAT:history指令输出默认只有序号和指令名称,定义这个变量可以使其输出指令执行的时间。使用示例如下:
在~/.bashrc文件最后两行配置:

配置之后记得使用source ~/.bashrc使配置立即生效,最后输出结果如下:

————————————————————————————————————————————————————————————————————————
语系设置:locale与/etc/locale.conf
locate:查询Linux系统当前语系设置,查询结果及各个变量说明如下图所示。

语系设置参数的优先级:LC_ALL > LC_* > LANG。其中LANG是所有变量的默认设置,12个LC_*变量中,没有设置值的变量都将使用LANG的值。如果设置了LC_ALL,则所有的LC_*变量都将使用LC_ALL的值,不管自身的值是什么。所以当LC_ALL设置了值之后,所有LC_*变量进行其他值设置都是无效的,除非先将LC_ALL设置为空。
设置这些变量时,设置之后需要执行export指令将其声明为全局变量才能生效,例如:export LC_TIME=”zh_CN.UTF-8”。然而这样设置也只能在本次登录系统期间生效,下次登录就又回到原来的值了,若想永久生效,需要将其配置写入/etc/locale.conf(centos7之前版本为/etc/sysconfig/i18n)文件中,然后重新登录即可生效,若不想重新登录则需要执行source指令重新读取这个文件,然后再执行export指令将设置的变量转为环境变量才能生效。
locale -a:查询当前Linux系统支持的所有语系。
该命令输出的每一种语系都对应/usr/lib/locale目录(centos7之前版本为/usr/share/i18n/locales)下的一个文件,这些文件就是对每一个语系的配置。可以查看其中一个文件例如zh_CN,可以看到里面使用Unicode编码定义了每一个LC_*变量的输出,例如LC_TIME变量中对于星期几的定义如下:

由上到下分别是“星期日”、“星期一”....直到“星期六”的定义。
—————————————————————————————————————————————————————————————————————
别名:alias与unalias
alias:查看当前所有命令别名定义(这些命令别名可能在设置文件中定义,如:~/bashrc,也可以是使用alias指令定义的)。

所以,执行cp就相当于执行cp -i。
alias指令用于定义命令别名,unalias用于取消命令别名,这里定义举一个例子,设置mkdir指令别名为mkd示例如下:

然而,使用alias定义的命令别名只是在本次登录系统过程中有效,若想永久生效则应该写入到设置文件中,例如可以写入~/.bashrc中。
为什么定义了命令别名之后就可以使用别名来执行命令了呢?这跟Linux系统中指令运行的顺序有关,Linux指令运行顺序如下:
1. 以相对/绝对路径运行指令。
2. 由alias找到指令执行。
3. 由bash内建的指令执行。
4. 使用$PATH变量中的路径搜索到第一个指令执行。
使用type指令可以查看某个指令的类型,使用type -a则可以查看某个指令的执行顺序,如type -a ls。

———————————————————————————————————————————————————————————————————————
一些特殊用途设置文件
/etc/issue和/etc/issue.net中的内容会在启动系统之后登录系统之前显示在屏幕上,其中/etc/issue设置的是在本地终端启动系统后展示的信息,而/etc/issue.net则是在远程连接主机时展示的信息。文件中可使用的转义字符及其意义如下(图借自鸟哥):

/etc/issue.net文件想要生效还需要修改ssh配置文件/etc/ssh/sshd_config中的Banner字段,需要将其值改为/etc/issue.net,然后重启ssh服务。
/etc/motd文件写入的则是登录系统之后显示的内容,而且不支持上述转义字符。
~/.bash_logout文件记录了登出bash之后,系统需要执行的动作,可以在这里进行数据备份、情况缓存等动作。
——————————————————————————————————————————————————————————————————————
一些变量相关指令
echo:输出变量的值,例如:echo $PATH.
unset:取消某个变量。
env:查看所有环境变量。
set:查看所有变量(包括环境变量和自定义变量)。’
选项参数:
-u:默认不启用,启用之后,使用未定义变量会显示错误信息。
-v:默认不启用,启用之后,输出信息之前先显示信息的原始内容。
-x:默认不启用,启用之后,执行指令之前会先显示指令内容。
可以使用echo $-查看所有的set设定值。
还有其他参数。。。
export:查看所有环境变量;将自定义变量转成环境变量。
declare:声明变量类型。
选项参数:
-a:声明变量为数组类型。
-i:声明变量为整形。
-x:将变量转为环境变量,功能与export相同。
-r:将变量设置为readonly类型,不可修改,也不能unset。
typeset:功能与declare功能相同。
stty -a:查看所有快捷键与其意义。(stty也可用于设置快捷键,设置方法参考stty -a输出内容)
————————————————————————————————————————————————————————————————————————
一些常用环境变量
-:所有的set设定值。
$:当前shell的PID
?:前一个指令执行的返回值,若为0表示正确执行,否则表示有错误。
HOME:当前用户家目录。
SHELL:当前使用的shell。
MAIL:使用mail指令收信时,系统读取的邮件信箱文件。
RANDOM:随机数。
PATH:执行指令文件的搜索路径。
PS1:命令行提示字符串。
Linux设置文件与Shell操作环境的更多相关文章
- 【linux之文件查看,操作】
一.shell如何处理命令 1.shell会根据在命令中出现的空格字符,将命令划分为多个部分 2.判断第一个字段是内部命令还是外部命令 内部命令:内置于shell的命令(shell builtin) ...
- 【linux之文件查看,操作,权限管理】
一.shell如何处理命令 1.shell会根据在命令中出现的空格字符,将命令划分为多个部分 2.判断第一个字段是内部命令还是外部命令 内部命令:内置于shell的命令(shell builtin) ...
- shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)
如何学习一门编程语言 数据类型 运算符 关键字 1 认识BASH 这个shell linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的.硬件.核心.用户之间的关系: 原理:所 ...
- linux中文件I/O操作(系统I/O)
我们都知道linux下所有设备都是以文件存在的,所以当我们需要用到这些设备的时候,首先就需要打开它们,下面我们来详细了解一下文件I/O操作. 用到的文件I/O有以下几个操作:打开文件.读文件.写文件. ...
- java通过sftp对linux服务器文件夹进行操作
本文主要讲sftp对linux服务器的文件和文件夹进行操作,windows server 服务器不支持. package com.lx.ftp; import java.io.File; import ...
- Linux(六)shell操作实用技巧
一.shell操作日期时间 linux 系统为我们提供了一个命令 date,专门用来显示或者设置系统日期时间的. 语法格式为: date [OPTION]... [+FORMAT] ...
- 记一次为解决Python读取PDF文件的Shell操作
目录 一.背景 二.问题 三.解决 四.一顿分析及 Shell 操作 五.后续 一.背景 本想将 PDF 文件转换为 Word 文档,然后网上搜索了一下发现有挺多转换的软件.有的是免费的.收费,咱也不 ...
- Linux设置文件权限和归属
前言:在Linux文件系统的安全模型中,为系统中的文件(或目录)赋予了两个属性:访问权限和文件所有者,简称为“权限”和“归属”.其中,访问权限包括读取.写入.可执行三种基本类型,归属包括属主(拥有该文 ...
- Linux设置文件读写权限
设置文件夹的读写权限: sudo chmod -R 777 /data 权限码描述 sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读 ...
随机推荐
- iPhone Scrollbars with iScroll
Since we've had web browsers and JavaScript, we've been intent on replacing native browser functiona ...
- Spring持久化之MyBatis
MyBatis是一个优秀的轻量级持久化框架,本文主要介绍MyBatis与Spring集成的配置与用法. 1. Spring MyBatis配置 1.1 添加Maven依赖 在pom.xml文件里添加m ...
- sublime text 3143 最新激活方法
1)输入激活码 —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60 ...
- UVa-156-反片语
这题比较精妙的是,我们对于单词重排,实际上是进行了标准化的处理,即按照字典序排序. 这样的话,就很方便地处理了单词的重排问题,我们不需要使用全排列函数进行排列尝试,我们直接化简为一,然后进行比较就可以 ...
- 微信小程序 wx.request POST请求------中文乱码问题
问题: 一个简单的表单,提交后台返回数据“提交成功”. 以为没问题了,但是没过多久后台小哥就问为啥那么多乱码,找了很久原因,发现在提交的时候就已经乱码了. 嗯,前端问题,然后测试GET/POST方法. ...
- perl学习之五:列表和数组
列表及其形式 数组 数组的赋值 数组的读取 数组片段 数组函数 二维数组简介 总结 1.列表形式: 1.(item1,item2,...) 2.qw(item1 item2 item3 ...) 3. ...
- 我的第一个ajax脚本
代码如下 //创建XMLHttpRequest对象 var xmlHttp=null; function creatXMLHttp(){ try{ xmlHttp = new XMLHttpReque ...
- 算法学习记录-图(DFS BFS)
图: 目录: 1.概念 2.邻接矩阵(结构,深度/广度优先遍历) 3.邻接表(结构,深度/广度优先遍历) 图的基本概念: 数据元素:顶点 1.有穷非空(必须有顶点) 2.顶点之间为边(可空) 无向图: ...
- PC上测试移动端网站和模拟手机浏览器
一.Chrome*浏览器 chrome模拟手机总共有四种方法,原理都一样,通过伪装User-Agent,将浏览器模拟成Android设备.以下标星的为推荐方法. 1.新建Chrome快捷方式 右击桌面 ...
- xshell连接linux
一些命令和快捷键: Ctrl + Alt 切换linux和windows的鼠标 Ctrl + c 或 Ctrl + d退出>状态 在xshell终端输入exit,退出与linux服务器的连接 登 ...