前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux学习第二十三篇:shell介绍,命令历史,命令补全和别名,通配符,输入输出重定向

linux学习第二十三篇:shell介绍,命令历史,命令补全和别名,通配符,输入输出重定向

作者头像
用户1215343
发布2018-02-05 17:18:08
1.1K0
发布2018-02-05 17:18:08
举报
文章被收录于专栏:linux运维学习linux运维学习

shell介绍

什么是shell, shell是一个命令解释器,提供用户和机器之间的交互。支持特定语法,比如逻辑判断、循环。每个用户都可以有自己特定的shell。CentOS7默认shell为bash(Bourne Agin Shell)。还有zsh、ksh等。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

命令历史

  1. 查看之前敲过的命令(最大1000条): history
  2. 之前敲过的命令会存到/root目录下的这个文件中,你打出的命令不会马上存到配置文件中,会先存在内存中,只有等你退出终端才会保存到配置文件中: .bash_history
  3. 查看系统设置的环境变量,命令最大可以存多少条: echo $HISTSIZE
  4. 可以清空内存history命令历史,但不会清空配置文件.bash_history里的命令历史: history -c
  5. 环境变量HISTSIZE可以在这个配置文件中修改,修改后需输入命令source /etc/profile生效: /etc/profile
  6. 指定变量的格式,可以在查看历史命令的同时也可以看到每个命令的执行时间日期,要想永久生效,可以将该命令添加到配置文件/etc/profile中,然后再输入命令source /etc/profile生效: HISTTIMEFORMAT=”%Y/%m/%d %H:%M:%S “
这里写图片描述
这里写图片描述
  1. 不想别人删除破坏配置文件中的命令历史,想要永久保存,可以增加隐藏权限a权限(只能追加,不能删除): chattr +a ~/.bash_history
  2. 表示执行上一条指令: !!
  3. 这里的n是数字,表示执行命令历史中第n条指令,例如 !100 表示执行命令历史中第100个命令: !n
  4. 表示执行最后一次执行word命令的命令,例如!echo,表示执行最后一次执行echo命令的命令: !word
这里写图片描述
这里写图片描述

命令补全和别名

  1. 命令,路径补全: tab键 //敲一下补全命令或路径,敲两下会显示跟你输入的命令或路径相似的命令或路径。
  2. Centos7里可以自动补全restart或start,但是默认不支持,需要下载相应包之后重启才会生效,安装bash-completion包: yum install -y bash-completion
  3. 给命令重新起个名字的命令: alias
这里写图片描述
这里写图片描述
  1. 各用户都有自己配置别名的文件~/.bashrc以及/etc/profile.d/目录下的脚本
  2. 自定义的alias可写到 ~/.bashrc配置文件中,否则重启之后会失效。
  3. 取消alias命令别名: unalias + 命令别名

通配符

  1. 列出后缀为.txt的所有文件: ls *.txt
  2. 列出名称是一个字符的所有.txt文件,?表示一个任意字符: ls ?.txt
  3. 列出名称包含0-9中任意一个的一个字符的所有.txt文件: ls [0-9].txt //也可以是字母如,ls [0-9a-zA-Z].txt
  4. 列出名称包含1或2中任意一个的一个字符的所有.txt文件: ls {1,2}.txt
代码语言:javascript
复制
[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. 把1.txt的内容覆盖到2.txt内容中,2.txt的内容会被删除重写: cat 1.txt >2.txt
  2. 把1.txt的内容追加到2.txt内容中,2.txt原来的的内容保存,不会被删除重写: cat 1.txt >> 2.txt
  3. 把命令的错误信息写入覆盖到err.txt文件中,2>就是错误信息的写入覆盖: ls aaa.txt 2>err.txt
这里写图片描述
这里写图片描述
  1. 把命令的错误信息写入追加到err.txt文件中,2>>就是错误信息的写入追加: ls aaa.txt 2>>err.txt
这里写图片描述
这里写图片描述
  1. 把命令输出的正常的和错误的信息都写入err.txt文件中,&>为覆盖,&>为追加,例如: ls [0-3].txt aaa.txt &> err.txt =ls [0-3].txt aaa.txt > err.txt 2>&1
这里写图片描述
这里写图片描述
  1. 把命令输出的正常的信息都写入right.txt而错误的信息写入err.txt文件中,便于区分,例如: ls [0-3].txt aaa.txt > right.txt 2> err.txt
这里写图片描述
这里写图片描述
  1. 把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了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年11月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • shell介绍
  • 命令历史
  • 命令补全和别名
  • 通配符
  • 输入输出重定向
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档