Bash的基础特性(1)
(1)命令历史
history
环境变量:
$HISTSIZE:命令历史记录的条数
$HISTFILE:~/.bash(用户的家目录)
$HISTFILESIZE:命令历史文件记录历史的条数
删除历史:
history
-d 要删除的第几条
-c:清空历史
显示历史
数字:显示历史中最近的多少条命令
手动追加历史
-a:手动追加会话缓冲区中的命令历史至命令历史文件中
调用历史
!#:调用历史中的第#条指令(#代表数字)
!!:执行上一条指令
!string:最近一个以"string"开头的指令
调用上一条命令的最后一个参数
!$或者ESC+.(ESC键和点一起按)
控制命令历史的记录方式
环境变量:HISTCONTROL
ignoredups(忽略连续且重复的命令,变量的默认值)
ignorespace(忽略以空白开头的命令)
ignoreboth(以上两种都生效)
变量赋值的方法export 变量名=变量值
变量赋值:把赋值符号后面的数据存储于变量名指向内存空间,只对当前shell有效
export HISTCONTROL=ignorespace(忽略以空白开头的命令)
export HISTCONTROL=ignoreboth(忽略连续且重复的命令同时忽略以空白开头的命令)
(2)命令补全
直接补全:用户给定的字符串只对应唯一的一条命令
列表显示:以用户给定的字符串对应的命令不唯一,按两下"Tab"键就会列出,如下图所示
bash执行命令过程(bash补全也是按照如下这种过程):
内部命令:当你键入一个命令并且执行的时候,系统会首先判断是否为内部命令,如果是就直接执行
外部命令:如果不是内部命令,就根据$PATH环境变量定义的路径,从左向右在每个路径下搜寻用户给定的命令名命名的文件,第一
次找到的则是要执行的文件
(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:失败
echo $? 获取上一条指令的执行结果状态
程序执行有两类结果:
程序的返回值:结果
程序的运行状态结果:成功/失败
目录管理类命令:
ls(查看目录下内容,以下选项只是我常用的,还有部分没写,到时可以查帮助)
-l或ll:显示目录下文件的详细信息
-a:显示所有文件包括隐藏文件
-d:显示当前目录下的目录
pwd(显示当前所在位置)
cd(进入目录)
-:回到上一个所在目录
..:向前返回一次
/PATH:进入指定的绝对路径下
tree(列出目录的树形结构)
-d:仅以树状结构显示目录
-L level:限制层级,后面跟数字
mkdir [options] /path
-p:如果目标父级目录不存在,就需要使用此选项,在创建目标的过程中同时创建父目录,如果目录已存在也不会报错采取不处理
-v:显示详细创建过程
-pv:两个命令结合起来使用
-m MODE:创建目录时直接指定权限,后面会写权限的文章
rmdir:只能删除空目录
rmdir [option]...DIRECTORY...
-v:显示过程
练习:
(1)如何创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b,/tmp/x/y2/a,/tmp/x/y2/b
解:(1)mkdir /tmp/x/{y1,y2}/{a,b}
(2)mkdir /tmp/x/y1 /tmp/x/y2 /tmp/x/y1/a /tmp/x/y1/b /tmp/x/y2/a /tmp/x/y2/b
(2)如何创建x_m,y_m,x_n,y_n
解:mkdir x_{m,n} y_{m,n}
(3)如何创建/tmp/bin,/tmp/sbin,/tmp/usr,/tmp/usr/bin,/tmp/usr/sbin
解:mkdir /tmp/{bin,sbin,usr/{bin,sbin}} -pv
文本文件查看类命令:
cat,tac
more,less,tail,head
more [OPTION...] FILE...
-d:显示翻页和退出提示
空格向后翻篇
q:退出
b:倒退一篇,翻到尾部就无法倒退了
less
less [OPTION...] FILE
head
-c #:指定获取前#个字节
-n #或-#:指定获取前#行
tail
-c #:指定获取后#个字节
-n #或-#:指定获取后#行
-f:跟踪指定文件新追加进来的行
文件的时间戳管理工具
touch
文件:metadata,data
查看文件状态:stat
三个时间戳:
access time:最近一次访问时间,简写为atime,读取文件内容
modify time:最近一次修改时间,简写为mtime,改变文件内容(数据)
change time:最近一次修改时间,简写为ctime,元数据发生改变
touch [OPTIONS]...FILES...
-a:只改访问时间戳,默认会改为执行命令时的时间
-m:只改mtime时间戳,默认会改为执行命令时的时间
-t STAMP:自己指定要改为的时间戳
[[CC]YY]MMddhhmm[.ss](时间格式):年月日小时分钟秒
例子:touch -m -t 201807121512.50 test.txt
-c:如果后方文件存在,则touch时间戳,如果不存在也不创建