一个操作系统的组成中,shell是与用户最接近的部分
shell:外壳,也是一种程序
GUI:Gnome,KDE,Xface
CLI:sh,csh,ksh,bash,tcsh,zsh
Linux中大多使用bash
-
既然shell也是一种程序,那么shell在什么时候启动?
当用户登陆时,shell就会被打开。 -
如果有两个用户同时使用shell,那么需要几个可执行的shell程序?
程序只有一个,但进程可以有多个。因此进程可以看作程序的副本。
Linux允许一个用户登录多次,开启多个shell,每个进程互不相干。
进程:在每个进程看来,当前主机上只存在内核和当前进程。
进程是程序的副本,进程是程序执行实例 - 我们可以在shell中打开shell
shell是一个外部命令,但shell里面自身带有其它很多命令
用户的工作环境:
bash:
shell,子shell:用pstree可以看到
bash——bash
子shell和父shell之间没有任何关系,谁也不会影响谁
bash的特性:
1、支持命令历史
2、支持管道,重定向
3、支持命令别名
4、支持命令行编辑
5、支持命令行展开
6、支持文件名通配
7、支持使用变量
8、支持编程
命令行编辑:
-
光标跳转:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+d:删除
Ctrl+u: 删除光标至命令行首的内容
Ctrl+k: 删除光标至命令行尾的内容
Ctrl+l: 清屏 -
查看命令历史:history(显示在此执行过的所有命令)
用户使用过的命令历史在运行时都在内存缓冲区里面!
-c:清空整个命令历史
-d n: 删除指定位置的命令(删除第n个命令)
-d a b:删除第a个命令后的b个命令
-w:保存命令历史至历史文件中 ls -a (显示隐藏文件)有个.bash_history -
环境变量
PATH:命令查找路径
HISTSIZE: 命令历史缓冲区大小,可以保存过去多少条命令。 -
命令历史的使用技巧:
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令;
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数;
Esc, .
Alt+. - 命令补全:【tab】或两下【tab】
-
路径补全:【tab】或两下【tab】
-
命令别名:比如Windows清屏为cls,Linux清屏为clear
alias CMDALIAS=COMMAND [options] 如alias cls=clear
同时也可以将cd /。。。一些经常用到的文件目录取一个别名!提高效率!!!
单打一个命令 alias可以显示系统上的所有别名
在shell中定义的别名仅在当前shell生命周期中有效;别名的有效范围仅为当前shell进程;
如果想永久有效,可以将这个命令写在bash的配置文件中。
unalias可以撤销命令别名。
有些命令的别名与命令本身同名,只不过在后面加了些选项,此时可以用"\COM"使用命令本身。 -
命令替换:把命令中某个子命令替换为其执行结果的过程
$(COMMAND) 或者反引号COMMAND
比如说:echo the current directory is $(pwd)
就会打印出一行:the current directory is /root (/root就是所在的目录)
比如:touch ./file-$(date +%F-%H-%M-%S).txt
会在当前目录下创建 file-2018-4-15-12-34.txt (以当前时间为固定格式的一个文件)*bash支持的引号: ``: 命令替换 " ": 弱引用,可以实现变量替换 ' ': 强引用,不完成变量替换
-
文件名通配:globbing
星号 * : 可以匹配任意长度的任意字符
?:匹配任意单个个字符
[ ] :匹配指定范围内的任意单个字符比如在当前目录下有这些文件:a abc a123 ab123 x12 xyz xyz123 ls a*: a abc a123 ab123 ls a*3 : a123 ab123 ls *b* : abc ab123 。。。。。。(mkdir一个空目录 在空目录里面touch几个文件自己练一下)
[abc],[a-m],[a-z],[A-Z],[a-zA-Z],[0-9],[0-9a-zA-Z]
[^] : 匹配指定范围之外的任意单个字符
[^0-9]:非数字
- 空格也可以作为文件名touch 'a b'就可以创建一个有空白字符的文件
[[:space:]]:空白字符
[[:punct:]]:标点符号
[[:lower:]]:小写字母
[[:digit:]] : 数字
[[:alnum:]] : 数字和大小写字母
同时字符集也可以去反比如:[^[alpha]]表非大小写字母集 - man 7 glob有说明
转载于:https://blog.51cto.com/13691207/2103469