RHCE课程-初级部分4、shell及环境变量简介
Kernel
系统内核用于在计算机启动时载入基本内存、 管理基本输入输出、管理进程初始化和进程的调度。
Shell 
系统的命令解释器,翻译成中文也就叫壳,外壳的意思,就是最表面的,用于操作系统与用户的通信,相当于Dos中的command.com。Red Hat Linux 默认的shell 是Bash !
Shell与系统及子进程的层次关系
                                         + - - - - - - - - - - - - - - - - -- - - - - - - -  +
                                         |                        用户进程                           |
                                         | + - - - - - - - - -  - - - - - - -  - - - - - -+  |
                                         |  |                        shell                        |   |
                                         |  | + - - - - - - - - - - - - - - - - -  - -+  |   | 
                                         |  |  |                    Kernel                 |   |   |
                                         |  |  | + - - - - - - - - - - - - -- - - -+  |   |   |
                                         |  |  |  |              Hardware             |  |   |   |  
                                         |  |  | + - - - - - - - - - --- - -  - - -+  |   |   |
                                         |  | + - - - - - - - - - - - - - - -  - - - - +   |   |
                                         | + - - - - - - - - - - -- - - - - - - -- - - - - +  |
                                         + - - - - - - - - - - -- - - -- - - - - - - - - - - -+
真正工作的是硬件。kernel(内核)就是控制硬件的,但是怎么让内核知道我们想要硬件做什么工作呢? 那就需要shell, 在Unix系统中有各种Shell,Linux采用bash为其默认shell。Bash是GNU计划的一个组件,与Unix上的Bourne Shell完全兼容。支持命令行输入、操作历史查询、快捷键、使用变量等功能们都需要X来运行 。
想知道你们系统中有哪些shell,可以用这个命令:cat /etc/shells
这就是我们系统中所有的shell,不过我们一般使用的是第二种,bash
一个用户使用什么shell 可以在 /etc/passwd中查看
最后那项就是用户使用的shell
nologin 是个很特殊的shell,也很重要。大家现在 先了解下就可以了,以后我们还会讲

Terminal Emulator 用户交互的窗口界面
终端模拟器是用户shell运行的平台,在终端模拟器上用户可以交互的操作系统及运行程序并得到提示和反馈,就像在文本编辑器中一样。
X Window 以C/S模式提供的图形界面接口
在X中操作,你会重新找回Windows的感觉。当然不只是这样Red Hat Linux中图形界面的易用性已经有了显著的提高,并且通过像GTK+和QT这样的开放的开发工具包,你可以创立自己的图形应用程序。
Window Manager 提供图形功能
Window manager是个可以帮你移动窗口和改变它们大小的程序。它通常也支持把一个窗口缩成一个图标或任务条。通常有某种程序执行机构。用户可以使用window manager来做他想做的——任何X应用程序应该可以在任何窗口管理器上工作。但是你一次只能运行一个Window Manager。也就是说,你可以切换于任何多个window manager,但是同一时刻你只能运行一个。屏幕上的所有程序都可以被正在运行的window manager管理。
Desktop Environment 桌面环境
GNOME和KDE不是窗口管理器(它们是桌面环境)。KDE是和一个叫KWM的窗口管理器一起的。GNOME则没和任何窗口管理器做在一起,你可以使用任何你想用的窗口管理器,虽然有一些是特地为GNOME写的(Enlightenment就是一个)。但是它Bash是GNU计划的一个组件。

在Linux里有很多的变量,大致可分为3种:
环境变量
内部变量
用户变量

用户可以通过这些变量获得系统、环境的信息
环境变量相当于给系统或用户应用程序设置的一些变量, 具体起什么作用这当然和具体的环境变量相关。比如PATH, 是告诉系统, 当要求系统运行一个程序而没有告诉它程序所在的完整路径时, 系统除了在当前目录下面寻找此程序外, 还应到由PATH变量定义的目录中去查找.这个PATH和WINDOWS下面作用一样哈
在bash中有很多预定义环境变量
用户可以用set或env查询当前的环境变量
set:
env:
常用的预定义变量:
HOME:当前用户的主目录
PATH:当前用户的可执行文件搜索路径
LANG:程序应该使用的默认语言
PS1:行提示符
 
注意,我们系统中环境变量是很多的,但是我们需要注意的只要这几个,LINUX下面的变量名字基本都是大写字母哈.
可以用 echo  $变量名字 来查看变量
echo $PATH 这是可执行程序的搜索路径 
echo $LANG 当前语系
echo $HOME 当前用户主目录
echo $PS1就是我们提示框的变量
用户变量是用户在编写shell过程中,可以在shell程序内任意使用和修改的变量。(以字母或下划线开头,通常字母是大写母)
赋值:变量名=变量值
获取变量值  ${变量名}
例:VAR=hellorhce  ;赋值        
echo ${VAR}       ;显示变量值
使用echo完成简单地输出
echo “hello  world”
VAR=“hello”
echo ${VAR} world

也可以使用printf来产生各种格式的输出
printf “hello\nworld\n”

read 从标准输入读取数据来为var1这个变量赋值
-p输出提示字符
read -p "Enter a filename: " FILE
这样就把一个用户输入的数据变成一个变量,在编程的时候可以转入下个动作,大家试试。
 
RHCE课程-初级部分4、history命令、BASH、快捷键
在bash中输入history指令可以查询用户的过往操作。
RHCE课程-RH033Linux基础笔记四_linux 
内存中记录的过往指令数根据环境变量中HISTSIZE而定。(/etc/profile)
RHCE课程-RH033Linux基础笔记四_linux_02
history表存储在内存中,在用户logout时会记录入用户主目录下的.bash_history文件中。在下次login时载入。预定的记录为1000条,这些都定义在环境变量中。
RHCE课程-RH033Linux基础笔记四_职场_03
vim .bash_history
RHCE课程-RH033Linux基础笔记四_休闲_04
 
使用!来调用过往指令: 
!l:重复执行上一条以l为首的指令
RHCE课程-RH033Linux基础笔记四_职场_05

!!:重复执行上一条指令
RHCE课程-RH033Linux基础笔记四_休闲_06
 
!number:重复执行上一条在history表中记录号码为number的指令
RHCE课程-RH033Linux基础笔记四_休闲_07

!-number:重复执行前第number条指令
RHCE课程-RH033Linux基础笔记四_linux_08

!$:表示获得前面命令行中的最后一项内容
RHCE课程-RH033Linux基础笔记四_职场_09

可以用<ctrl+r>来在history表中查询某条过往指令
RHCE课程-RH033Linux基础笔记四_linux_10
 
命令行表达式
命令行输出——“ ” 将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,则转义。
命令行输出——‘ ’ 将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,不转义。
执行引用符——` ` 引用命令的执行结果
前段时间有朋友在论坛提问关于“”  ‘’ `` $ 的意思。 现在我们就再讲下
先说“”吧
大家这样的命令,结果会是什么?
hello good everone
那么我们把“” 改成 ‘’ 44看效果
总结:
命令行输出——“ ”
将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,则转义。
命令行输出——‘ ’
将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,不转义
大家能明白吗?
我们在date两边加上`` 
执行引用符——` `
引用命令的执行结果
这个大家能够明白吧?
最后一个$ 就不用讲了吧 ,HOHO,地球人都知道,嘻嘻!不知道$用处的举手,我捶死他~~~~
 
数学运算——$[2*5 ]
在中括号内的表达式会被数学计算
RHCE课程-RH033Linux基础笔记四_linux_11
 
脱逸符——\
用于取消命令行中字符的特殊含义
用于表示一行未结束

命令行结束符——;
用于在一行内分隔两个独立命令,表示一行已结束,作用相当于回车键
例:pwd ; ls –l
RHCE课程-RH033Linux基础笔记四_职场_12

子shell激活——()
在小括号内的命令行表示激活一个子shell后在子shell中运行
 
还有两个逻辑语符号&&和||
shell命令行支持在同一行的两条命令中插入&&(逻辑与)与  ||(逻辑或)
&&:当前一条指令执行成功时再执行后一条指令
  ||:当前一条指令执行失败时再执行后一条指令
 
&&  前面执行成功才执行后面
如果 ls 一个不存在的文件,大家操作下
||  前面执行失败或者为假,才执行后面的命令
 
定制登陆shell
bash 在用户登录时从四个文件中读取环境设定:
全局设置文件:
     ① /etc/profile 
     ② /etc/bashrc
用户设置文件:  
     ③ ~/.bash_profile
     ④ ~/.bashrc\
 
今天最后一个知识,alias 别名
在shell下键入alias可以查询当前alias列表。
用户可以alias来为一条命令取一个简单的别名
用户也可以用unalias来取消一条别名记录。
alias记录在shell中总是先行。
这是你当前用户的命令别名
这就是别名的作用
我们可以把很长的命令或者参数,用一个别名来表示,方便我们输入
创建别名的方法
这种方法是临时的,如果使你的更改永久生效,需要把他写入一个配置文件
按照他的格式,写在这里就可以了
 
常用快捷键
Ctrl + d:输入已结束。在shell下相当于一个exit
Ctrl + c:键盘中断请求。
Ctrl +s &Ctrl + q:暂停/恢复屏幕输出
Ctrl + l:清屏,相当于clear。
Tab:自动补完命令行与文件名
Tab键双击: 可以列出所有可能匹配的选择
Ctrl+u: 删除当前光标前的所有字符
ctrl+k: 删除当前光标后的所有字符
运行tree / 这个命令,然后 用Ctrl加s,q 和c 看看效果
ctrl+s暂停屏幕输出