linux学习第二十三篇:shell介绍,命令历史,命令补全和别名,通配符,输入输出重定向
shell介绍
什么是shell, shell是一个命令解释器,提供用户和机器之间的交互。支持特定语法,比如逻辑判断、循环。每个用户都可以有自己特定的shell。CentOS7默认shell为bash(Bourne Agin Shell)。还有zsh、ksh等。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。
命令历史
- 查看之前敲过的命令(最大1000条): history
- 之前敲过的命令会存到/root目录下的这个文件中,你打出的命令不会马上存到配置文件中,会先存在内存中,只有等你退出终端才会保存到配置文件中: .bash_history
- 查看系统设置的环境变量,命令最大可以存多少条: echo $HISTSIZE
- 可以清空内存history命令历史,但不会清空配置文件.bash_history里的命令历史: history -c
- 环境变量HISTSIZE可以在这个配置文件中修改,修改后需输入命令source /etc/profile生效: /etc/profile
- 指定变量的格式,可以在查看历史命令的同时也可以看到每个命令的执行时间日期,要想永久生效,可以将该命令添加到配置文件/etc/profile中,然后再输入命令source /etc/profile生效: HISTTIMEFORMAT=”%Y/%m/%d %H:%M:%S “
- 不想别人删除破坏配置文件中的命令历史,想要永久保存,可以增加隐藏权限a权限(只能追加,不能删除): chattr +a ~/.bash_history
- 表示执行上一条指令: !!
- 这里的n是数字,表示执行命令历史中第n条指令,例如 !100 表示执行命令历史中第100个命令: !n
- 表示执行最后一次执行word命令的命令,例如!echo,表示执行最后一次执行echo命令的命令: !word
命令补全和别名
- 命令,路径补全: tab键 //敲一下补全命令或路径,敲两下会显示跟你输入的命令或路径相似的命令或路径。
- Centos7里可以自动补全restart或start,但是默认不支持,需要下载相应包之后重启才会生效,安装bash-completion包: yum install -y bash-completion
- 给命令重新起个名字的命令: alias
- 各用户都有自己配置别名的文件~/.bashrc以及/etc/profile.d/目录下的脚本
- 自定义的alias可写到 ~/.bashrc配置文件中,否则重启之后会失效。
- 取消alias命令别名: unalias + 命令别名
通配符
- 列出后缀为.txt的所有文件: ls *.txt
- 列出名称是一个字符的所有.txt文件,?表示一个任意字符: ls ?.txt
- 列出名称包含0-9中任意一个的一个字符的所有.txt文件: ls [0-9].txt //也可以是字母如,ls [0-9a-zA-Z].txt
- 列出名称包含1或2中任意一个的一个字符的所有.txt文件: ls {1,2}.txt
[root@xie-02 zzz]# ls
123123.txt 1.txt 2.txt 312324.txt 3.txt asd.txt gte.txt g.txt h.txt
[root@xie-02 zzz]# ls *.txt //列出后缀为.txt的所有文件
123123.txt 1.txt 2.txt 312324.txt 3.txt asd.txt gte.txt g.txt h.txt
[root@xie-02 zzz]# ls ?.txt //列出名称是一个字符的所有.txt文件,?表示一个任意字符
1.txt 2.txt 3.txt g.txt h.txt
[root@xie-02 zzz]# ls [0-9].txt //列出名称包含0-9中任意一个的一个字符的所有.txt文件
1.txt 2.txt 3.txt
[root@xie-02 zzz]# ls [0-9a-z].txt //列出名称包含0-9和a-z中任意一个的一个字符的所有.txt文件
1.txt 2.txt 3.txt g.txt h.txt
[root@xie-02 zzz]# ls {1,2}.txt //列出名称包含1或2中任意一个的一个字符的所有.txt文件
1.txt 2.txt
输入输出重定向
- 把1.txt的内容覆盖到2.txt内容中,2.txt的内容会被删除重写: cat 1.txt >2.txt
- 把1.txt的内容追加到2.txt内容中,2.txt原来的的内容保存,不会被删除重写: cat 1.txt >> 2.txt
- 把命令的错误信息写入覆盖到err.txt文件中,2>就是错误信息的写入覆盖: ls aaa.txt 2>err.txt
- 把命令的错误信息写入追加到err.txt文件中,2>>就是错误信息的写入追加: ls aaa.txt 2>>err.txt
- 把命令输出的正常的和错误的信息都写入err.txt文件中,&>为覆盖,&>为追加,例如: ls [0-3].txt aaa.txt &> err.txt =ls [0-3].txt aaa.txt > err.txt 2>&1
- 把命令输出的正常的信息都写入right.txt而错误的信息写入err.txt文件中,便于区分,例如: ls [0-3].txt aaa.txt > right.txt 2> err.txt
- 把1.txt的内容输入重定向到一个命令中(不常用): wc -l < 1.txt
扩展知识: >& :将一个句柄的输出写入到另一个句柄的输入中。
句柄 |
句柄的数字代号 |
描述 |
---|---|---|
STDIN |
0 |
键盘输入 |
STDOUT |
1 |
输出到命令提示符窗口 |
STDERR |
2 |
错误输出到命令提示符窗口 |
UNDEFINED |
3-9 |
句柄由应用程序单独定义,它们是各个工具特有的 |
要指定重定向到现有句柄,请使用与 (&) 字符,后面接要重定向的句柄号(即 &句柄号)。例如,下面的命令可以将句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):2>&1
试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出; 换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出. 你可以用 ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1; ls xxx 2>1测试,没有xxx这个文件的错误输出到了1文件中; ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了; ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。
- 左手用R右手Python系列之——表格数据抓取之道
- XML/HTML/JSON——数据抓取过程中不得不知的几个概念
- R语言网络数据抓取的又一个难题,终于攻破了!
- R语言数据清洗实战——高效list解析方案
- 左手用R右手Python系列——循环中的错误异常规避
- SpringBoot2.x开发案例之整合Quartz任务管理系统
- 给出一组非负整数,重新排序组成最大的数
- [机智的机器在学习] TensorFlow实现Kmeans聚类
- [机智的机器在学习] 利用TensorFlow实现多元线性回归分类器
- [数据结构和算法]《算法导论》动态规划笔记(1)
- [数据结构和算法]《算法导论》动态规划笔记(2)
- [算法与数据结构] 《算法导论》堆排序笔记
- [数据结构与算法] 链表的其他类型
- [数据结构与算法] 链接表总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python提示警告InsecureRequestWarning
- Day11.类和对象这回事儿
- Day12.魔法方法&方法重写
- Linux基础第一课——基础知识了解
- 【Vue CLI】手把手教你撸插件
- Linux基础第二课——系统架构
- Day13.继承&多态
- Linux第三课——目录操作
- Linux基础第四课——文件操作
- Linux基础第五课——用户管理
- Linux基础第六课——grep|awk|sort|uniq
- Python向上取整,向下取整以及四舍五入函数
- 使用requests模块post payload请求
- 解决HTTP status code is not handled or not allowed
- Day8.函数那些事儿