之前浅浅学习过shell知识,但因为没怎么用过,所以基本上忘光了,所以在重新复习下。
Github 地址:https://github.com/wangdoc/bash-tutorial
在线阅读: https://wangdoc.com/bash/
学习 Bash,首先需要理解 Shell 是什么。Shell 这个单词的原意是“外壳”,跟 kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。
具体来说,Shell 这个词有多种含义。
首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(command line interface,简写为 CLI)。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。本书中,除非特别指明,Shell 指的就是命令行环境。
其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。
最后,Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。
1、查看解释器
cat /etc/shells
2、修改用户解释器
usermod -s /bin/bash 用户名
or
chsh -s /bin/sh # ch ==change sh == bash 改变bash
root@Administrator:~# chsh -s /bin/sh
root@Administrator:~# chsh
Changing the login shell for root
Enter the new value, or press ENTER for the default
Login Shell [/bin/sh]: /bin/bash
4、输入输出重定向
输出重定向常见形式:
command > file #将标准输出1重定向到 file 里
command 1> file #将标准输出1重定向到 file 里,与上面的写法功能一样
command 2> file #将标准错误输出1重定向到 file 里
command &> file #将标准输出1 与 标准错误输出2 一起重定向到 file 里
不覆盖file的输出重定向 >>
&> 为一起重定向标准输出 与 标准错误输出的简便写法
输入重定向
与输出重定向类似,将文件内容重定向到标准输入0
command <file #重定向标准输入 command << xxx #here document |
<<xxx 这种形式被称为Here document,xxx为任意字符串,作为标签,为Here documen的起始,输入时直接在终端里输入多行内容,完成后再次输入xxx,标记输入完成。
#here document
command <<标签
>内容
>内容
>...
>标签
$ head -v <<abc #<<abc 是指here document的起始
> 123 #内容
> 123 #内容
> 123 #内容
> abc #abc 表示结束
==> standard input <== #Here document被定向为标准输入
123
123
123
5、 管道 |
“|”连接两个命令,shell会将前后两个进程的输入输出用一个管道相连,以便达到进程间通信的目的
用途,可以将多个命令连接,同时将上一个命令的输出作为下个命令的输入,送到下个命令中去
ls |grep *.txt
4、快捷键:
Bash 提供很多快捷键,可以大大方便操作。下面是一些最常用的快捷键,完整的介绍参见《行操作》一章。
Ctrl + L
:清除屏幕并将当前行移到页面顶部。Ctrl + C
:中止当前正在执行的命令。Shift + PageUp
:向上滚动。Shift + PageDown
:向下滚动。Ctrl + U
:从光标位置删除到行首。Ctrl + K
:从光标位置删除到行尾。Ctrl + W
:删除光标位置前一个单词。Ctrl + D
:关闭 Shell 会话。↑
,↓
:浏览已执行命令的历史记录。
除了上面的快捷键,Bash 还具有自动补全功能。命令输入到一半的时候,可以按下 Tab 键,Bash 会自动完成剩下的部分。比如,输入tou
,然后按一下 Tab 键,Bash 会自动补上ch
。
除了命令的自动补全,Bash 还支持路径的自动补全。有时,需要输入很长的路径,这时只需要输入前面的部分,然后按下 Tab 键,就会自动补全后面的部分。如果有多个可能的选择,按两次 Tab 键,Bash 会显示所有选项,让你选择。
光标移动
Readline 提供快速移动光标的快捷键。
Ctrl + a
:移到行首。Ctrl + b
:向行首移动一个字符,与左箭头作用相同。Ctrl + e
:移到行尾。Ctrl + f
:向行尾移动一个字符,与右箭头作用相同。Alt + f
:移动到当前单词的词尾。Alt + b
:移动到当前单词的词首。
清除屏幕
Ctrl + l
快捷键可以清除屏幕,即将当前行移到屏幕的第一行,与clear
命令作用相同。
目录堆栈
cd –
Bash 可以记忆用户进入过的目录。默认情况下,只记忆前一次所在的目录,cd -
命令可以返回前一次的目录。
pushd,popd
如果希望记忆多重目录,可以使用pushd
命令和popd
命令。它们用来操作目录堆栈。
pushd
命令的用法类似cd
命令,可以进入指定的目录。
$ pushd dirname
上面命令会进入目录dirname
,并将该目录放入堆栈。
第一次使用pushd
命令时,会将当前目录先放入堆栈,然后将所要进入的目录也放入堆栈,位置在前一个记录的上方。以后每次使用pushd
命令,都会将所要进入的目录,放在堆栈的顶部。
popd
命令不带有参数时,会移除堆栈的顶部记录,并进入新的堆栈顶部目录(即原来的第二条目录)。
下面是一个例子。
# 当前处在主目录,堆栈为空
$ pwd
/home/me
# 进入 /home/me/foo
# 当前堆栈为 /home/me/foo /home/me
$ pushd ~/foo
# 进入 /etc
# 当前堆栈为 /etc /home/me/foo /home/me
$ pushd /etc
# 进入 /home/me/foo
# 当前堆栈为 /home/me/foo /home/me
$ popd
# 进入 /home/me
# 当前堆栈为 /home/me
$ popd
# 目录不变,当前堆栈为空
$ popd