Bash基础特性
bash的基础特性:
-
命令历史: shell进程会在其会话中保存此前用户提交执行过的命令
- history
- 上下键
- history会保存在文件中,登出了也还会存在
- 定制history的功能,可通过环境变量实现
- HISTSIZE :命令历史的条数
- HISTFILE :在管理员家目录下 la -a : .bash_history
- HISTFILESIZE: 历史文件大小
- 命令用法: help history
- -d :从指定位置删除历史
- -c: 删除所有条目
- -w : 将当前历史写入历史文件中
- -r : 从历史文件中读回来
- history 10 :显示最近10条命令
- !5 :再一次执行历史列表中的第5条命令
- !STRING :执行最近以STRING开头的命令 :重复执行需要依赖幂等性(多次执行结果相同)
- 调用上一个命令的最后一个参数 esc + . (很好用的技巧) !$ 也可以
- 控制命令历史记录的方式 : HISTCONTROL :
- 默认特性(忽略重复 ignordups)
- ignorespace :忽略以空格开头的命令
- ignoreboth :以上俩这同时生效
-
命令补全
- shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当做命令
- 命令处理机制
- 查找内部命令
- 根据PATH环境变量中设定的目录,自左而右的查找命令
- 按俩下tab :查找以指定字符开头的命令
- 按一下tab:给定的打头字符串如果能唯一的标识某命令程序文件,则直接补全
- 路劲补全:
- 根据给定的起始路径来补全
- 目录管理类的命令
- mkdir :创建目录 mkdir /tmp/x/y/z
- -p : 当路径不存在时,创建父目录
- -v :显示详细过程
- rmdir :仅用于删除空目录
- -p : rmdir -p /tmp/x/y :先删除y,如果其父目录为空,再删除父目录
- ~ :自动展开为用户的家目录,或指定用户的家目录
- {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
- 例如: /tmp/{a,b} 相当于 /tmp/a /tmp/b
- [root@csm ~]# mkdir -v /tmp/{a,b}_{c,d}
mkdir: 已创建目录 “/tmp/a_c”
mkdir: 已创建目录 “/tmp/a_d”
mkdir: 已创建目录 “/tmp/b_c”
mkdir: 已创建目录 “/tmp/b_d”
- tree :显示目录结构 : list contents of directories in a tree-like format.
- 参数(OPTIONS)
- -L (level) :指定要显示的层级
- 参数(OPTIONS)
- mkdir :创建目录 mkdir /tmp/x/y/z
- bash的基础特性: 命令的执行状态结果(bash通过状态返回值来输出此结果)
- 成功 : 0
- 失败 :1-255
- 命令执行完成之后,其状态返回值保存于bash $? 中。 echo $?
- 命令正常执行时,有的还有命令返回值
- 引用命令的执行结果 $(command) 或者
command
mkdir $(date +%H-%M-%S) :执行结果
- 引用命令的执行结果 $(command) 或者
- bash的基本特性: 引用
- 强引用 ’ ’
- 弱引用:" "
- 命令引用:``
- bash的基本特性:快捷键
- ctrl+a :跳转到命令行首部
- ctrl+e :跳转到命令行尾
- ctrl +u :删除行首到光标所在处之间的所有字符
- ctrl +k :删除光标到行位的所有字符
- Ctrl+l : 想当于clear
- 文本查看类命令:cat ,tac ,less ,more,tail,head,
- 分屏查看命令:more less
- more :只能向后分屏,翻屏到文件尾部后自动退出
- less : man命令支持的就是less命令
- head:查看文件的前n 行
- tail :查看文件的后n 行(默认10行)
- -n #
- -# :显示指定行
- -f : 查看文件尾部内容结束后不退出,跟随显示新增的行
- 分屏查看命令:more less
- stat命令:display file or file system status (查看文件的元数据)
- stat FILE
- [root@csm tmp]# stat /tmp/functions
文件:"/tmp/functions"
大小:15131 块:32 IO 块:4096 普通文件
设备:fd01h/64769d Inode:393264 硬链接:1
权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
access time:2020-03-31 09:04:01.854932173 +0800
modify time:2020-03-31 09:04:00.703888368 +0800
change time:2020-03-31 09:04:00.703888368 +0800
创建时间:- - 文件:俩类数据
- 元数据:mtadata (例如书的目录,书名)
- 数据:data (书的内容)
- touch 命令可以改变文件的时间戳 : touch - change file timestamps
- 经常用来创建空文件
- -c :不创建文件 :指定文件路径不存在时不创建
- -a change only the access time
- -m change only the modification time
- -t :改成指定的时间 [YYMMDD]
-
文件管理工具: cp,mv ,rm
- cp命令:copy
- 源文件 :目标文件
- 复制指的是复制文件的数据
- 单源复制 :cp [OPTION]… [-T] SOURCE DEST
多源复制: cp [OPTION]… SOURCE… DIRECTORY
多源复制:cp [OPTION]… -t DIRECTORY SOURCE… - 如果DEST不存在:则事先创建此文件,并复制源文件的数据流到DEST中
- 如果DEST存在:
- 如果DEST是非目录文件:覆盖DEST文件
- 如果DEST是目录文件: 则现在DEST目录下创建一个与源文件同名的文件,并复制数据流至目标文件
- 如果SOURCE是目录:略过目录
- 多源复制:
- 如果DEST不存在: 不允许
- -i :覆盖之前提醒用户确认
- -f : 强制覆盖目标文件
- -r ,-R :recursive :递归复制目录
- -d :复制符号链接文件本身,二非其指向的源文件
- –preserv= :保留云文件的时间戳
- node :权限
- timestamps:时间戳
- xattr:扩展属性
- all :上述所有属性
- -a :保留源文件的所有属性
- mv :移动文件和重命名
- mv hello hello.txt :重命名 ,当源文件和目标文件在同一个目录下
- 不在同一个目录下就是移动
- 常用选项
- -i :交互式
- -f :强制覆盖
- rm :删除文件
- linux系统没有回收站,找回文件非常困难
- rm [OPTION] FILE
- 常用选项:
- -r 递归删除
- -f :强制删除
- 可以自建一个回收站,把不用的文件都移动到回收站去,尽量不要删文件
- 危险操作:rm -rf /*
- cp命令:copy
-
变量: 命名的内存空间
- 变量类型:整型,浮点型,字符型,布尔型,日期时间型
- 字符型
- 数值型
- 精确数值
- 近似数值
- 存储格式,数据范围,参与运算:
- 8 :1000
- 16 : 10000
- ASCII 码 :128个
- 变量类型:整型,浮点型,字符型,布尔型,日期时间型
-
globbing:文件名匹配机制(整体文件名匹配)
- 匹配模式:所有的文本文件,文件名当中只包含数字的文件
- 元字符:
- *:匹配任意长度的任意字符
- ?: 匹配任意单个字符 pa? p?a
- []:匹配指定范围内的单个字符 啊[a-z] [0-9] [a-z0-9] [abcxyz] pa[0-9]
- 特殊的格式:[[:upper:]] :表示所有大写字母 [[:lower:]]
- [^] :匹配指定外的任意单个字符
IO重定向及管道
-
程序:指令+数据
-
程序:IO
-
重定向:
- 可用于输入的设备:键盘,文件,磁盘设备,网卡等
- 可用于输出的设备:文件,显示器,常规文件,网卡
-
输入的数据流:<–标准输入(stdin) 键盘
-
输出的数据流 --> 标准输出(stdout) 显示器
-
错误输出流 --> 标准输出(stderr) 显示器
-
fd :file descriptor :文件描述符 (windows中交句柄)
- 标准输入通常用 0 来表示
- 标准输出 :1
- 错误输出 :2
-
IO重定向 :将标准输入输出给改变
- 输出重定向: > 特性:覆盖输出 >> 追加输出重定向
- set -C :(j仅对当前有效)进制覆盖以存在的文件 强行覆盖: >|
- set +C :关闭特性
-
错误输出流重定向 : 2>
- 合并正常输出流和错误输出流 : &> > /path/to/somefile 2>&1
-
输入重定向: <
- tr 命令的使用: 把输入的数据当中的字符,凡是在set1定义的范围内出现的,通通对位转换成SET2出现的字符 : tr abc ABC
- 快捷键: backspace 用不了时 : 加上Ctrl建就可以了
- -d :tr -d [A-Z] < /etc/issue 删除文件中的大写字母显示在屏幕上
- << :here Document : 屏幕输入保存到文件中: cat > /tmp/cat.out <<END
-
管道: 把一个命令的执行结果,输入给另一个程序 |
- tee 命令:完成俩次输出(文件和屏幕)
- cat /etc/issue |tee /etc/issue.tee | tr ‘a-z’ ‘A-Z’ 保存在文件issue.tee中,并且输出给 tr一份
-
特殊设备: /dev/null :任何数据传给它都被丢弃
- 没用的数据(或者不需要输出,就可以丢给它 &> /dev/null)