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

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

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
[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了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux学习第十九篇:压缩介绍,gzip,bzip2,xz压缩工具

    file命令可查看文件是压缩文件或者test文件等,如file 1.txt 可查看1.txt是什么类型的文件 linux压缩打包介绍 在windows下我们接...

    用户1215343
  • linux学习第二十五篇:cut,sort,wc,uniq,tee,tr,split命令,shell特殊符号

    * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 find /etc/ -type f -name “*conf” -exec ca...

    用户1215343
  • linux学习第二十篇:zip压缩,tar打包以及打包压缩

    zip压缩工具 zip可以压缩目录,zip压缩包不能直接查看文件内容,只能查看里面文件列表 zip 1.txt.zip 1.txt //压缩文件,不同...

    用户1215343
  • 6千万词汇的巨型汉语词库

    关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 算法+语料≈NLP 这是一个六千万词...

    昱良
  • 命令行通配符教程

    一次性操作多个文件时,命令行提供通配符(wildcards),用一种很短的文本模式(通常只有一个字符),简洁地代表一组路径。

    ruanyf
  • 对比文件内容

    苦咖啡
  • 如何查找软链接的最终目标文件

    一般我们查看软链接的目标文件都是用 ls -l 这种形式,但它只能查看该软链接的当前目标,如果该目标又是一个软链接的话,该命令并不会递归查找,最终输出真实的目标...

    wangyuntao
  • 8.5 输入输出重定向

    大于号,重定向 > 正确输出 >> 追加重定向 2> 错误重定向 2>> 错误追加重定向 >+2>等于&> 表示结合了正确和错误 cat 1.t...

    运维小白
  • 基于FPGA特征颜色目标的提取

    在实际世界中,机器视觉所要识别的目标环境是复杂的颜色多样的,不像我们之前的实验《基于FPGA的数字识别二》中白纸黑字,利用阈值分割就很容易将数字目标和背景分割开...

    FPGA开源工作室
  • hdu1020

    @坤的

扫码关注云+社区

领取腾讯云代金券