Linux的用户接口
操作系统为用户提供了两种接口:
第1种是命令接口,用户利用这些命令来组织和控制作业的执行,或者对计算机系统进行管理。
第2种是程序接口,编程人员使用他们来请求操作系统服务。
命令接口为:CLI(命令行界面)和GUI(图形用户界面),TUI(文本用户界面)。

什么是Shell?
想要听音乐需要什么?
首先需要声卡
操作系统的核心可以支持这个声卡(有相应的声卡驱动程序)
用户发出播放音乐的指令
必须发出指令,硬件才会工作。如果可以直接同硬件沟通,那么不需要内核。否则,用户的指令必须先发送给内核,然后内核再去控制硬件。shell正是用户与内核沟通的平台:
用户可以通过shell给内核发送指令
内核也可以把指令执行的过程或者结果信息发送到shell给用户看。
Shell为用户提供了输入命令和参数,并且可得到命令执行结果的环境。
Shell作为操作系统的外壳,为用户提供使用操作系统的接口,是命令语言、命令解释程序及程序设计语言的统称。
BASH Shell

早年的Unix年代,Unix发展者众多,所以shell有很多不同版本,例如常听到的 Bourne Shell (sh) 、在Sun中默认的C Shell、 商业上常用的K SHell以及TCSH 等,每一种Shell都各有其特点。
Linux 使用的是Bourne Again Shell(简称 bash),这个 Shell是Bourne Shell的增强版本,也是基于GNU的架构下发展出来的。
BASH Shell的特点:
命令记忆能力
Linux可以记忆以前输入过的命令,只要使用上下键就可以找到以前执行的指令来执行。
这些命令按照先后顺序记录在用户Home目录下的隐藏文件.bash_history中
.bash_history里面记录了上一次登录以前执行过的命令,本次登录执行的命令都保存在内存中,只有成功注销之后,内存数据才会刷新到.bash_history文件中
bash执行命令时,不会立刻将命令写入历史命令文件,而是先存放在内存的缓冲区中,该缓冲区被称为历史命令列表,等bash退出再将历史命令列表写入历史命令文件,
可以使用 bash 的内部命令 history ,来显示和编辑历史命令。
语法1:history [n] 
功能:当 history 命令没有参数,将显示整个历史命令列表的内容。如果使用 n 参数,将显示最后 n 个历史命令。

语法2:history [-a|n|r|w] [filename]
history 命令各选项及其功能说明见表。
选项 功能
-a 把当前的历史命令记录追加到历史命令文件中
-c 清空历史命令列表
-n 将历史命令文件中的内容加入到当前历史命令列表中
-r 将历史命令文件中的内容更新(替换)当前历史命令列表
-w 把当前历史命令列表的内容写入历史命令文件,并且覆盖历史命令文件的原来内容
filename  如果 filename 选项没有被指定,history 命令将使用环境变量HISTFILE指定的文件名

命令别名与历史:
执行历史命令的方法
方法1:!number
执行历史命令中编号为number的那个命令
方法2:!command
执行历史命令中最近一次以command开头的命令
方法3:!!
执行上一条命令

BASH Shell的特点:
命令补全补全功能
如果在执行命令的时候不想按下太多的按键(例如命令pcprofiledump),在输入了 pcprofile 之后,再按下 [Tab] 键的话,那么 bash 马上会自动的将后面的dump接上来。
如果有重复的命令,那么按下两次 [Tab] 将会把所有重复的命令列出来。
直接在提示字符后面连按两次 <tab> 键,则系统会将所有可以使用的命令都列出来。
例如,如果想要知道目前系统里面,所有以b开头的命令呢?就是按下 b 之后,连按两次<tab>就ok。
文件名称补全功能
如果用 vi 来读取某个文件,例如 /etc/man.config 这个文件,那么可以输入 vi /etc/man之后,直接按下 <tab> 键,该文件名称就会被自动的补上。
同样,出现文件多个匹配项时,可以按下两个TAB键来显示所有匹配项。
这样大大增加了指令输入的正确率。
命令别名设置功能
假如我需要知道某个目录底下的所有文件信息(包含隐藏文件)及所有的文件属性,那么我就必须要输入ls -al 这样的指令。
每次都输入多麻烦!
可以通过为自己经常使用的命令(包括参数)定义别名来避免过多输入。
例如:alias lm='ls -al' (注意=两边不要有空格)
那么以后lm就等于执行ls -al
直接输入alias,可以显示目前以及定义好的所有别名

语法:alias [别名]=[命令名称]
功能:设置命令的别名,如果不加任何参数,仅输入alias命令,将列出目前所有的别名设置。alias命令仅对该次登录系统有效,如果希望每次登录系统都能够使用该命令别名,可以编辑~/.bashrc文件(root用户是/root/.bashrc,普通用户是/home/*/.bashrc),按照如下格式添加一行命令:
alias 别名="要替换的终端命令"
保存.bashrc文件,注销,再次登录系统,就可以使用命令别名了。

实例: 设置命令别名
执行不加任何参数的alias命令,将列出目前所有的别名设置,如下所示。
[root@localhost ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

#alias showhome=‘ls -l /home’,为“ls -l /home”命令设置别名showhome,
使用showhome命令,再执行unalias showhome命令,取消别名设置,此时showhome已经不是命令了。