1. 命令历史
环境变量:
用HISTSIZE控制历史命令的总数
内存中的history条数,退出登陆之后会写到~/.bash_history文件里
+ export HISTSIZE=450
文件中存储的最大history条数,文件:~/.bash_history
+ export HISTFILESIZE=450
如果你想禁用history,不让shell记录命令,把HISTSIZE设为0即可
+ export HISTSIZE=0
使用HISTFILE改变历史文件名
默认情况下,命令历史被储存在.bash_history文件中,把下面的一行添加到.bash_profile文件中,重新登录shell,则新文件将取代.bash_history文件用来储存历史命令。你可以使用这个命令来追踪不同终端中执行的命令,届时只需要将不同终端中所执行的命令保存在不同的历史文件中即可。
HISTSIZE:命令历史记录的条数;
HISTFILE:~/.bash_history;
HISTFILESIZE:命令历史文件记录历史的条数;
history -d OFFSET
-c
history #: 显示历史中最近的#条命令;
-a: 手动追加当前会话缓冲区的命令历史至历史文件中;
调用历史中的命令:
!#: 重复执行第#条指令;
!!:
!string
调用上一条命令的最后一个参数:
!$:
ESC, .
Alt+.
控制命令历史的记录方式:
环境变量:HISTCONTROL
ignoredups:忽略重复的命令;连续且相同方为“重复”;
ignorespace:忽略所有以空白开头的命令;
ignoreboth:ignoredups, ignorespace;
修改环境变量值的方式:export 变量名="值"
变量赋值:把赋值符号后面的数据存储于变量名指向内存空间;
2. 命令补全
bash执行命令:
1. 内部命令:
2. 外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到即为要执行的命令;
直接补全:
- Tab,用户给定的字符串只有一条惟一对应的命令;
- 以用户给定的字符串为开头对应的命令不惟一,则再次Tab会给出列表;
3. 路径补全
把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名;
如果惟一:则直接补全;
否则:再次Tab,给出列表;
4. 命令行展开
~: 展开为用户的主目录
~USERNAME:展开为指定用户的主目录
{}:可承载一个以逗号分隔的列表,并将其展开为多个路径
/tmp/{a,b} = /tmp/a, /tmp/b
/tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi
5. 命令的执行结果状态
成功
失败
bash使用特殊变量$?保存最近一条命令的执行状态结果:
0:成功
1-255:失败
程序执行有两类结果:1.程序的返回值;2.程序的执行状态结果;
6. 命令别名(alias)
通过alias命令实现:
(1) alias
显示当前shell进程所有可用的命令别名;
(2) alias NAME=’VALUE’
定义别名NAME,其相当于执行命令VALUE;
注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
Note: 编辑配置给出的新配置不会立即生效;
bash进程重新读取配置文件:
source /path/to/config_file
. /path/to/config_file
撤消别名:unalias
unalias [-a] name [name …]
Note: 如果别名同原命令的名称,则如果要执行原命令,可使用”\COMMAND”;
7. glob (globbing)
bash中用于实现文件名“通配”
通配符:*, ?, []
(1) * 任意长度的任意字符
(2) ? 任意单个字符
(3) [] 匹配指定范围内的任意单个字符
[0-9]
[a-z]:不区分字符大小写
[A-Z]: 大写字母
(4) [^] 匹配指定范围外的任意单个字符
[^0-9]
专用字符集合:
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:空格
[:punct:]:标点符号
8. I/O重定向
程序:指令+数据! 读入数据:Input 输出数据:Output
打开的文件都有一个fd: file descriptor (文件描述符)
- 标准输入:keyborad, 0
- 标准输出:monitor, 1
- 标准错误输出:monitor, 2
I/O重定向:改变标准位置
1. 输出重定向:
>:覆盖重定向,目标文件中的原有内容会被清除;
>>: 追加重定向,新内容会追加至目标文件尾部;
2>: 覆盖重定向错误输出数据流;
2>>: 追加重定向错误输出数据流;
# set -C: 禁止将内容覆盖输出至已有文件中;
强制覆盖:>|
# set +C:
标准输出和错误输出各自定向至不同位置:
COMMAND > /path/to/file.out 2> /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向:
&>:覆盖重定向
&>>:追加重定向
2. 输入重定向:<
9. 管道
COMMAND1 | COMMAND2 | COMMAND3 |…
Note:最后一个命令会在当前shell进程的子shell进程中执行;
tee命令:
tee [OPTION]... [FILE]...
#[read from standard input and write to standard output and files]
一路输入,产生两路输出。
tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。
附录
BASH快捷键
- Ctrl+l::清屏,相当于clear命令;
- Ctrl+a:跳转至命令开始处;
- Ctrl+e:跳转至命令结尾处;
- Ctrl+c:取消命令的执行;
- Ctrl+u::删除命令行首至光标所在处的所有内容;
- Ctrl+k::删除光标所在处至命令行尾部的所有内容;