(一)bash的基础特性
- 命令补全
- shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令;
- 命令查找机制:shell首先会在内部命令中匹配查找,如果没有找到,则会在PATH环境变量设置的目录中,自左向右逐个搜索目录下的文件名
- 补全:如果给定的打头字符串可以唯一的标识某命令程序文件,则按“tab”键直接补全;否则需要按两下“tab”键,给出列表
- 路径补全
- 在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件。
- 如果能唯一标识,则按“tab”键直接补全;否则需要按两下“tab”键,给出列表
- 命令行展开
- ~:展开为用户的家目录,或指定的用户的家目录
- {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径。例如:/tmp/{a,b}相当于/tmp/a,/tmp/b
- 命令的执行状态结果
- bash通过状态返回值来输出此结果
- 成功:0
- 失败:1-255
- 命令执行完成之后,其状态返回值会保存于bash的特殊变量“$?”中。可以用“echo $?”查看。
- 命令的返回值和命令的执行状态返回值不是一回事儿
- bash通过状态返回值来输出此结果
- 引用
- 强引用:单引号'',其内部的任何字串都直接显示,不做任何替换
- 弱引用:双引号"",其内部的变量引用会做变量替换
- 命令引用:反引号``或者$()。例如mkdir $(date +%H-%M-%S)
- 快捷键
- ctrl+a:跳转至命令行首部
- ctrl+e:跳转至命令行尾部
- ctrl+u:删除行首至光标所在处之间的所有字符
- ctrl+k:删除光标所在处至行尾之间的所有字符
- ctrl+l:清屏,相当于clear
(二)目录管理类的命令
- mkdir:创建目录/make directories
- 命令的操作对象为路径的基名,基名之前的路径名必须要存在
- -p:会创建缺失的父目录
- -v:显示创建的详细过程,比如创建了哪些父目录/verbose
- -m MODE:创建目录时直接给定权限,否则则为默认权限
- rmdir:删除空目录/remove empty directories
- 目录不空会报错
- -p:迭代删除空目录
- -v:显示删除过程
问题1:如何创建四个路径:/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b?
答案:mkdir -pv /tmp/x/{y1/{a,b},y2}
问题2:如何创建四个路径:a_c, a_d, b_c, b_d?
答案:mkdir -v {a,b}_{c,d}
- tree:显示目录的树状结构,例如tree /tmp/x
- -L #:指定要显示的树的深度
(三)文本查看类命令:cat,tac,head,tail,more,less
- 分屏查看命令:more和less,
- more
- more FILE
- 翻屏至文件尾部后自动退出
- less
- less FILE
- man命令内部调用的就是less命令
- 空格往后翻,b往前翻,等等
- more
- head命令
- 查看文件的前n行,默认十行
- 例如:head -n 20 /etc/rc.d/init.d/functions,或者可以把-n 20直接写成-20
- tail命令
- 与head用法一样,查看文件的后n行
- -f:命令执行完不退出,跟随显示新增的行,可以用来显示日志新增的行
- stat命令
- 显示文件或文件系统的状态
- stat FILE
- 文件包含两类信息
- 元数据:metadata。stat命令看到的是元数据,cat等命令看到的是数据。
- 数据:data
- 时间戳
- 最近访问/Access Time:打开读取的时间
- 最近更改/Modify Time:改变数据,此时元数据一定改变
- 最近改动/Change Time:改变元数据
- touch命令
- 改变文件的时间戳
- touch FILE:三个时间戳都会变
- 如果文件不存在,会创建一个空文件
- -c:不创建空文件
- -a:仅修改access time
- -m:仅修改modify time
- -t time:将时间戳改为指定的时间,[[CC]YY]MMDDhhmm[.ss],例如:touch -m -t 0212010303.03 /tmp/functions。注:此时元数据变为当前时间,而不是改的那个时间。