8.1 shell介绍
什么是shell?
shell是一个命令解释器,提供用户和机器之间的交互
支持特定语法,比如逻辑判断,循环 if 。。然后。。。 for。。。 然后 。。。
每个用户都可以有自己特定的shell
CentOS7默认shell为bash(Bourne Agin Shell) bourne 是一个用户的名字,为了纪念他 他的shell是sh后来在基础上优化开发形成了一个bash
还有zsh,ksh等
用户配置文件最后一段,是用户的shell ,
8.2 命令历史
敲过的命令 只有正常退出终端的时候才能保存到配置文件里去
history 命令 敲过命令的历史
.bash_history 敲过命令的历史存在用户家目录的.bash_history文件里
最大1000条历史命令 敲过的命令 最多能存1000条
变量HISTSIZE 最多存1000条 由系统环境变量设置
history -c 清空当前内存命令历史,无法清空配置文件的命令历史
/etc/profile $HISTSIZE 环境变量 在 profile定义 可以修改命令历史数值。
修改后要重新进终端,或者使用命令 source /etc/profile
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S" 指定HISTTIMEFORMAT变量的格式 ,显示记录对应命令的运行日期时间 只在当前终端显示, Y=年 m=月 d=日 H=小时 M=分 S=秒
如果要在每个终端用户都显示 就需要编辑 /etc/profile 配置文件 把定义变量放进配置文件里
修改完后 source 一下 或者 重新终端就生效
永久保存 chattr +a ~/.bash_history 让历史命令永久保存 不能删除 增加个隐藏权限 +a 只能追加不能删除
!! 执行的是你上一条命令。
!n n代表数字。 执行你要运行命令历史里的第几条命令
!word word代表命令。 执行倒着的最近一条以该命令开头的命令行
8.3 命令补全和别名
tab 键,敲一下,敲两下 不紧补全命令,也可以补全文件路径,开头名多个文件 敲两下。才会显示相关开头的文件目录
参数补全,安装bash-completion 默认不支持参数补全 如果要有这个功能 需要安装
安装完后 需要重启下系统才能启用
alias别名,给命令重新起个名字 可以给一整行命令 做个单个命令别名
列子
直接使用alias 可以列出所有命令别名 包括自定义的
各个用户都有自己配置别名的文件 ~/.bashrc 在用户家目录里的
还有的一些别名在 /etc/profile.d/ 目录内
取消自定义的别名 使用命令 unalias 命令别名 就是取消
自定义的alias放到~/.bashrc 把自定义的别名 写入 .bashrc内 永久保存别名。
8.4 通配符
ls *.txt *代表通配 表示任何数字字符多位 不分前后
ls ?.txt ?表示一个任意的字符数字。
ls [0-9].txt 方括号里面 可以写的是范围 数字或者字母
ls {1,2}.txt 跟方括号比较像,但是里面要加逗号
8.5 输入输出重定向
cat 1.txt >2.txt 大于号 把前面命令的输出直接输出到后面的文件里面去。会删除后面文件的内容 重写
cat 1.txt>> 2.txt 大于号 把前面命令的输出直接输出到后面的文件里面去但是不会删除输入文件,只会在末尾追加
ls aaa.txt 2>err 2> 表示错误的信息 输出指定文件 会删除指定文件的内容重新写入
ls aaa.txt 2>>err 2>> 表示错误的信息追加输出到指定文件 不会删除指定文件的内容,只会在末尾追加
wc -l < 1.txt 把右边的文件内容,把它输入到左边的命令里去
command >1.txt 2>&1
把正确的输出信息 写入 1.txt 把错误的输出信息写入a.txt 正确与错误分开输入
&> 把正确与错误的输出信息定向到同一个文件 也支持追加 &>>