Shell_00_初识Shell
Shell基础
CLI(Command Line Interface):命令行界面
1)CLI仅接受文本输入,并仅输出文本和基本图形;
2)Linux系统启动后,在系统内存中默认创建5~6个CLI终端会话运行
//可通过Ctrl+Alt+(F2~F7)进行切换,F1为图形界面
Shell:用户与Linux内核交互的程序(基于C语言编写)
Shell种类 | 说明 |
---|---|
csh (C Shell) | 语法类似C语言,内部命令52个 目前使用已不多,已经被/bin/tcsh所取代 |
Ksh (Korn Shell) | 语法类似Bourne Shell,内部命令42个 具备csh易用特点,相对于bash有一点的限制性 |
tcsh | 属于csh的增强版,与csh完全兼容 |
sh | 属于快捷方式 已被/bin/bash所取代 |
zch | Linux中最庞大的Shell,内部命令84个 使用较为复杂,很少使用该Shell |
bash | CentOS系统默认使用的Shell |
1)bash的路径为:/bin/bash;
2)在/etc/passwd每一行的最后一个字段为用户的默认shell
Bash Shell
Bash(GNU Bourne-Again Shell):众多Linux发行版中默认的Shell解释器
1)以下内容由Shell名称代替Bash Shell名称;
2)Bash Shell本质是一个程序(当运行时,就成为了一个进程)
Shell功能
(1)记录历史命令(history)
1)“~/.bash_histroy”记录登录执行的所有命令(默认1000个);
2)登录执行的命令存在内存中,注销系统后由内存记录到~/.bash_history文件;
3)记录命令数可通过修改HISTFILESIZE来增加/减少
history命令:操作Shell中的历史命令
指令格式1:histroy n
1)N为数字,显示最近N条历史命令
2)若没有N,则默认显示所有历史命令
指令格式2:history 选项 //对历史命令进行操作
选项 | 含义 |
---|---|
-c | 将当前Shell中的所有history内容清除 |
-a | 将新增的history缓存写入到~/.bash_history文件中 |
-r | 将~/.bash_history文件的内容读到history缓存中 |
-w | 将目前的history缓存写入到~/.bash_history文件中 |
!命令:执行执行第N个历史命令
指令格式:!N
//!!是执行上一个命令
(2)命令/文件补全功能(Tab)
1)仅打出命令/文件名称的前缀,通过Tab键可自动补全;
2)若有多个命令/文件名称的前缀相同时,则列出全部具体名称
(3)命令别名设置(alias)
1)配置“~/.bashrc”文件实现命令别名
alias命令:设置别名命令(临时设置)
指令格式:alias 别名命令=‘命令 选项’
1)直接输入alias则显示所有的别名命令
unalias命令:取消命令别名
指令格式:unalias 别名命令
(4)程序化脚本(shell scripts)
(5)任务管理、前台、后台控制(job control、foreground、background)
(6)通配符(Wilecard)
父/子Shell
父Shell:登录CLI或GUI中运行终端仿真器时,默认启动的交互Shell
子Shell:在父Shell的环境下,通过调用命令创建的新Shell程序
1)子Shell仅能继承父Shell的全局环境变量;
bash命令:创建/调用子Shell
指令格式:bash 选项
选项 | 含义 |
---|---|
-c 命令 | 调用子Shell执行指定命令后,并返回至父Shell |
-i | 创建子Shell,并进入子Shell |
-l | 以login shell形式创建子Shell,并进入子Shell |
-r | 创建子Shell,并进入子Shell 但子Shell不能切换目录 |
exit命令:退出Shell
指令格式:exit
1)若Shell本身为子Shell,则会返回至相对于子Shell的父Shell;
2)若Shell本身为最高层Shell,则会关闭Shell;
如:调用子Shell执行指定命令
如:创建子Shell,并进入子Shell后退回至父Shell
如:创建受限的子Shell
内建命令
外部命令(文件系统命令):Bash Shell之外的程序
1)通常位于/bin、/usr/bin、/sbin或/usr/sbin中;
3)调用外部命令,需指定外部命令的绝对路径;
2)调用外部命令时,默认通过创建子Shell运行外部命令;
which命令:根据命令名称查询命令的完整路径
指令格式:which 选项 命令名称
选项 | 含义 |
---|---|
-a | 将所有由PATH目录中可找到的命令列出 |
-v | 显示命令的版本信息 |
1)本质就是根据环境变量(PATH)所规范的路径,去查询文件名
2)没有选项,则默认显示找到的第一个完整路径
如:查询ls命令的完整路径
内键命令:Bash Shell的组成部分(编译成一体)
1)内键命令默认在父Shell中运行;
type命令:查询命令是否为Bash shell内置命令
命令格式:type 选项 命令名
选项 | 含义 |
---|---|
-a | 将PATH变量定义的路径中 所有含该命令名文件路径都列出(包括alias) |
-p | 命令为外部命令,才会显示完整文件路径 若不是外部命令,则不显示任何数据 |
-t | 以特殊字段表示命令属性 |
1)type命令本质类似which命令:找出执行文件
2)特殊字段为:file(外部命令)、alias(命令别名)、builtin(内键命令)
常见的内键命令如下:
命令 | 功能 |
---|---|
: | 扩展参数列表,执行重定向操作 |
. | 读取并执行指定文件中的命令 |
alias | 指定命令定义别名 |
bg | 将任务以后台方式运行 |
bind | 将键盘序列绑定到一个readline函数或宏 |
break | 退出循环 |
builtin | 执行指定的Shell内建命令 |
caller | 返回活动子函数调用的上下文 |
cd | 切换目录 |
command | 执行指定命令,不进行Shell查找 |
compgen | 指定单词生成可能的补全匹配 |
complete | 显示指定的单词补全过程 |
compopt | 修改指定单词的补全选项 |
continue | 跳过本次循环,进行下一次循环 |
declare | 声明变量或变量类型 |
dirs | 列出当前存储目录的列表 |
disown | 删除任务列中指定的任务 |
echo | 输出指定文本到stdout |
enable | 启用/禁用指定的内建命令 |
eval | 将指定的参数拼接成一个命令,并执行 |
exec | 指定命令替换Shell进程 |
exit | 强制Shell以指定的退出状态码退出 |
export | 指定变量为环境变量 |
fc | 从历史记录中选择命令 |
fg | 将任务调到前台运行 |
getopts | 分析指定的位置参数 |
hash | 查询并记录指定命令的全路径名 |
help | 列出帮助文档 |
history | 显示命令的历史记录 |
jobs | 列出任务列表 |
kill | 向指定的PID进程发出信号 |
let | 计算一个数学表达式中的每个参数 |
local | 在函数中创建一个作用域受限的变量 |
logout | 退出Shell |
mapfile | 从stdin读取数据行,并加入索引数据组 |
popd | 从目录栈中删除记录 |
printf | 使用格式化字符串显示文本 |
pushd | 向目录栈中添加一个目录 |
pwd | 显示当前工作目录的路径 |
read | 从stdin读取一行数据,并将其赋给指定变量 |
readarray | 从stdin读取数据行,并将其放入索引数据组 |
readonly | 从stdin读取一行数据,并将其赋给只读变量 |
return | 强制函数以指定值退出 |
set | 设置并显示环境变量的值和Shell属性 |
shift | 依次移动位置参数 |
shopt | 打开/关闭控制Shell可选行为的变量值 |
source | 读取并执行指定文件中的命令 |
suspend | 暂停Shell的执行,直到收到SIGCONT信号 |
test | 基于指定条件返回退出状态码0或1 |
times | 显示累计的用户和系统时间 |
trap | 若收到指定的系统信号,则执行指定命令 |
type | 检测是否为内建命令 |
typeset | 声明变量或变量类型 |
ulimit | 为系统用户设置指定的资源上限 |
umask | 指定文档权限的默认掩码 |
unalias | 删除指定的别名 |
unset | 删除指定的环境变量或Shell属性 |
wait | 等待指定的进程完成,并返回退出状态码 |