鸟哥的私房菜学习笔记 重要的Bash Shell的操作环境

来源:互联网 发布:学钢琴 软件 编辑:程序博客网 时间:2024/05/17 22:15

一、命令执行的顺序

1、相对/绝对路径运行命令

2、由alias找到命令来运行,命令别名

3、由bash内建的buildin命令来运行,只适用于内建命令

4、透过PATH这个环境变量的顺序搜寻到的第一个命令来运行


二、bash的环境配置文件

为了让bash更好的运行,在启动时bash会直接读取环境配置文件,这些配置文件包括:

1、全体系统的配置文件

2、用户个人偏好配置文件

前面讲到的命令别名在bash注销后也睡着注销,如果想要保留这个配置,那么必须要写入配置文件


两个概念:login 和 non-login shell

  • login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登陆,需要输入用户的账号与密码,此时取得的 bash 就称为『 login shell 』啰;

  • non-login shell:取得 bash 接口的方法不需要重复登陆的举动,举例来说,(1)你以 X window 登陆 Linux 后, 再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。(2)你在原本的 bash 环境下再次下达 bash 这个命令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。
login shell只会读取两个配置文件

1、/etc/profile:这个是系统整体的配置,鸟哥警告说最好不要修改这个文件

此外他还会呼叫一下文件

/etc/inputrc  决定配置INPUTRC这个变量,就是看用户有没有自定义输入的按键功能

/etc/profile.d/*.sh 其实这个目录里面有很多文件,里面的文件包括规范操作接口的颜色,语系,ll和ls命令,命令别名等等

/etc/sysconfig/i18n 这个文件是由/etc/profile.d/lang.sh呼叫进来的!这也是我们决定bash默认使用何种语系的重要配置文件!文件里最重要的就是LANG这个变量的配置了

2、~/.bash_profile或者~/.bash_login或者~/.profile:这里属于个人配置,你要改自己的数据也写在这里。其实很多情况下我们得到的知识系统用户中的一个,并没有系统的root权限,在安装软件的时候配置环境变量也就在这里个人配置里面设置

个人配置文件其实主要有三个:

~/.bash_profile

~/.bash_login

~/.profile

其实bash的login shell配置只会读取上面三个文件中的一个,而读取的顺序则是依照上面的顺序。

在~/.bash_profile里面有句话很重要

PATH=$PATH:$HOME/bin

export PATH

这句话通过累加的方式把用户目录下的~/bin/目录,有点,可以直接运行改运行档而不需要使用绝对/相对路径了


整个login shell的读取流程为:

login shell 的配置文件读取流程


实线的方向是主线程,虚线的方向则是被呼叫的配置文件。

个人偏好配置是记录在~/.bashrc文件的


二、source命令

通常在修改完/etc/profile或者~/.bash_profile都得注销后再登录配置文件才会生效,直接读取配置文件而不用注销登陆的方法及时使用source

[root@www ~]# source 配置文件档名范例:将家目录的 ~/.bashrc 的配置读入目前的 bash 环境中[root@www ~]# source ~/.bashrc  <==底下这两个命令是一样的![root@www ~]#  .  ~/.bashrc

利用source和小数点都能够将这些配置文件读取到目前的环境中


三、~/.bashrc文件

如果是non-login shell 这种非登陆情况,读取的配置文件只有~/.bashrc

[root@www ~]# cat ~/.bashrc# .bashrc# User specific aliases and functionsalias rm='rm -i'             <==使用者的个人配置alias cp='cp -i'alias mv='mv -i'# Source global definitionsif [ -f /etc/bashrc ]; then  <==整体的环境配置        . /etc/bashrcfi

/etc/bashrc的作用

1、依据不同的UID规范出umask的值

2、依据不同的UID规范出提示字符,也就是PS1变量

3、呼叫/etc/profile.d/*.sh的配置


你要注意的是,这个 /etc/bashrc 是 CentOS 特有的 (其实是 Red Hat 系统特有的),其他不同的 distributions 可能会放置在不同的档名就是了。由于这个 ~/.bashrc 会呼叫 /etc/bashrc 及 /etc/profile.d/*.sh , 所以,万一你没有 ~/.bashrc (可能自己不小心将他删除了),那么你会发现你的 bash 提示字符可能会变成这个样子:

-bash-3.2$  

不要太担心啦!这是正常的,因为你并没有呼叫 /etc/bashrc 来规范 PS1 变量啦!而且这样的情况也不会影响你的 bash 使用。 如果你想要将命令提示字符捉回来,那么可以复制 /etc/skel/.bashrc 到你的家目录,再修订一下你所想要的内容, 并使用 source 去呼叫 ~/.bashrc ,那你的命令提示字符就会回来啦!


四、其他相关的配置文件

这个还是看鸟哥自己写的,感觉比较受用

  • 其他相关配置文件

事实上还有一些配置文件可能会影响到你的 bash 操作的,底下就来谈一谈:

  • /etc/man.config

    这个文件乍看之下好像跟 bash 没相关性,但是对于系统管理员来说, 却也是很重要的一个文件!这的文件的内容『规范了使用 man 的时候, man page 的路径到哪里去寻找!』所以说的简单一点,这个文件规定了下达 man 的时候,该去哪里查看数据的路径配置!

    那么什么时候要来修改这个文件呢?如果你是以 tarball 的方式来安装你的数据,那么你的 man page 可能会放置在 /usr/local/softpackage/man 里头,那个 softpackage 是你的套件名称, 这个时候你就得以手动的方式将该路径加到 /etc/man.config 里头,否则使用 man 的时候就会找不到相关的说明档啰。

    事实上,这个文件内最重要的其实是 MANPATH 这个变量配置啦! 我们搜寻 man page 时,会依据 MANPATH 的路径去分别搜寻啊!另外,要注意的是, 这个文件在各大不同版本 Linux distributions 中,檔名都不太相同,例如 CentOS 用的是 /etc/man.config ,而 SuSE 用的则是 /etc/manpath.config , 可以利用 [tab] 按键来进行文件名的补齐啦!

  • ~/.bash_history

    还记得我们在历史命令提到过这个文件吧?默认的情况下, 我们的历史命令就记录在这里啊!而这个文件能够记录几笔数据,则与 HISTFILESIZE 这个变量有关啊。每次登陆 bash 后,bash 会先读取这个文件,将所有的历史命令读入内存, 因此,当我们登陆 bash 后就可以查知上次使用过哪些命令啰。至于更多的历史命令, 请自行回去参考喔!

  • ~/.bash_logout

    这个文件则记录了『当我注销 bash 后,系统再帮我做完什么动作后才离开』的意思。 你可以去读取一下这个文件的内容,默认的情况下,注销时, bash 只是帮我们清掉屏幕的信息而已。 不过,你也可以将一些备份或者是其他你认为重要的工作写在这个文件中 (例如清空缓存盘), 那么当你离开 Linux 的时候,就可以解决一些烦人的事情啰!

五、终端机的环境设置:stty,set

tty1~tty6是终端机环境的文字接口,不同的接口有不同的字符配置

stty的意思呢就是set tty     就是设置终端机的意思

stty -a可以列出目前环境中的所有按键列表


eof:end of file的意思,代表结束输入

erase:向后删除字符

intr:送出一个interrupt(中断)的讯号给目前正在run的程序

kill:删除在目前命令列上的所有文字

quit:送出一个quit的讯号给目前正在run的程序

start:在某个程序停止后,重新启动它的output

stop:停止目前屏幕的输出

susp:送出一个terminal stop的讯号给正在run的程序


其中^是CTRL的意思

通过如下命令可以修改linux的热键

stty command key

exp:

stty erase ^h

上面的命令将删除键修改为ctrl+h

stty erase ^? 修改回backspace


六、常用的快捷键
组合按键运行结果Ctrl + C终止目前的命令Ctrl + D输入结束 (EOF),例如邮件结束的时候;Ctrl + M就是 Enter 啦!Ctrl + S暂停屏幕的输出Ctrl + Q恢复屏幕的输出Ctrl + U在提示字符下,将整列命令删除Ctrl + Z『暂停』目前的命令

七、通配符,这个很重要


符号意义*代表『 0 个到无穷多个』任意字符?代表『一定有一个』任意字符[ ]同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』[ - ]若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的![^ ]若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。

常见的用法:

[root@www ~]# LANG=C              <==由于与编码有关,先配置语系一下范例一:找出 /etc/ 底下以 cron 为开头的档名[root@www ~]# ll -d /etc/cron*    <==加上 -d 是为了仅显示目录而已范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名[root@www ~]# ll -d /etc/?????    <==由于 ? 一定有一个,所以五个 ? 就对了范例三:找出 /etc/ 底下文件名含有数字的文件名[root@www ~]# ll -d /etc/*[0-9]*  <==记得中括号左右两边均需 *范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:[root@www ~]# ll -d /etc/[^a-z]*  <==注意中括号左边没有 *范例五:将范例四找到的文件复制到 /tmp 中[root@www ~]# cp -a /etc/[^a-z]* /tmp


八、bash环境中比较特殊的符号


符号内容#批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行\跳脱符号:将『特殊字符或通配符』还原成一般字符|管线 (pipe):分隔两个管线命令的界定(后两节介绍);;连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)~用户的家目录$取用变量前导符:亦即是变量之前需要加的变量取代值&工作控制 (job control):将命令变成背景下工作!逻辑运算意义上的『非』 not 的意思!/目录符号:路径分隔的符号>, >>数据流重导向:输出导向,分别是『取代』与『累加』<, <<数据流重导向:输入导向 (这两个留待下节介绍)' '单引号,不具有变量置换的功能" "具有变量置换的功能!` `两个『 ` 』中间为可以先运行的命令,亦可使用 $( )( )在中间为子 shell 的起始与结束{ }在中间为命令区块的组合!












组合按键运行结果Ctrl + C终止目前的命令Ctrl + D输入结束 (EOF),例如邮件结束的时候;Ctrl + M就是 Enter 啦!Ctrl + S暂停屏幕的输出Ctrl + Q恢复屏幕的输出Ctrl + U在提示字符下,将整列命令删除Ctrl + Z『暂停』目前的命令
符号意义*代表『 0 个到无穷多个』任意字符?代表『一定有一个』任意字符[ ]同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』[ - ]若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的![^ ]若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。
0 0
原创粉丝点击