shell、tab、通配符、输出输入重定向

shell 基础

shell

shell是一个命令解析器,提供用户和机器之间的交互,相似于DOS下的command.com和后来的cmd.exe。它接收用户命令,而后调用相应的应用程序。 支持特定语法,好比逻辑判断,循环等。CentOS 默认的shell是bash ,若是有须要使用zsh,ksh能够使用yum install zsh/ksh 安装shell

命令历史history

  • 存放命令历史的文件叫.bash_history 这个文件在用户的家目录下,默认最多记录1000条,当正常退出终端时,当前敲的命令历史才会从内存写到该文件中。命令历史的最大记录量由$HISTSIZE变量控制,而定义关于history的变量的文件是/etc/frofile。
[root@localhost ~]# echo $HISTSIZE
1000
[root@localhost ~]# vim /etc/profile
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=5000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
  • vim /etc/profile的内容有不少,上面只是选取了与history有关的内容 能够经过修改HISTSIZE=1000这个选项的数值来更改最大记录量。不过更改完了以后须要运行source /etc/profile 来使配置生效。
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# !echo
echo $HISTSIZE
1000
[root@localhost ~]# source /etc/profile
[root@localhost ~]# !echo
echo $HISTSIZE
5000
  • 若是不想将本次操做的命令历史写入到.bash_history下能够使用history -c 来清除本次操做的命令记录(已写入文件的不会受影响)。若是想查看命令历史也想知道命令是何时执行的,能够在/etc/profile中写入一行HISTTIMEFORMAT="%Y/%m/%d%H:%M:%S"
[root@localhost ~]# history 
    1  2018/06/29  02:03:21ifconfig\
    2  2018/06/29  02:03:21ifconfig
    3  2018/06/29  02:03:21yum install -y tree
    4  2018/06/29  02:03:21tree
    5  2018/06/29  02:03:21clear
    6  2018/06/29  02:03:21cd 
    7  2018/06/29  02:03:21cd
    8  2018/06/29  02:03:21pwd
    9  2018/06/29  02:03:21cd /etc/sysconfig

显示的内容就是如上所示的了。vim

  • 若是想记录全部的历史命令,能够给.bash_history 加一个a权限(只能追加内容) chattr +a ~/.bash_history 就能够了。
  • !!两个叹号表示上一条命令
  • !n(n是数字)第n条命令
  • !command 从命令历史中寻找最近一次运行的以command开头的命令

###别名 alias 命令能够查看系统中全部的作过别名的命令bash

[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

也能够使用这个命令作别名,举个例子,重启网络服务systemctl restart network.service ,能够给他作一个简单的别名 ,alias restartnet='systemctl restart network.service'网络

[root@localhost ~]# alias restartnet='systemctl restart network.service'
[root@localhost ~]# alias restartnet
alias restartnet='systemctl restart network.service'

命令补全

tab键 ,在咱们使用命令或者敲路径的时候用tab键会有两种状况出现:spa

  • 命令或路径的前几个字母(咱们敲击出来的)是惟一的,系统会自动帮助补全
  • 命令或路径的前几个字母(咱们敲击出来的)不是惟一的,须要按tab键两下,会列出跟敲击出的字母匹配的选项。
  • 默认状况下tab键不会补全参数,若是须要能够安装如下: yum install bash-complation ,重启系统后,tab键就能够补全参数了(仍是得遵照上面两条的规则)。

通配符

以前咱们使用过命令#ls *.txt#来列出当前目录下以.txt结尾的全部的文件,其中的星号就是通配符。rest

  • *.txt 表示全部的以.txt结尾的文件code

  • txt.*表示全部的以txt.开头的文件内存

  • *.txt*表示全部的中间带有.txt的文件cmd

  • ?.txt 中的问好也是通配符,表示1个任意的字符(仅仅是一个)io

  • [0-3].txt 这个[]也是通配符,表示符合0-3这四个字符的文件(也能够表示成[0123]),例如:1.txt就符合,5.txt就不符合。[]中的内容能够使0-9,a-z ,A-Z 之间的阈值。

  • {1,2}.txt其中{}也是通配符,跟[]相似,可是它们的数字之间有,间隔。这个也比较严谨。

输入输出重定向

  • 输出重定向符号>,例如显示1.txt的内容并输出到2.txt文件中 cat 1.txt >2.txt这个用法会把原先2.txt文件的内容删除,并把1.txt的内容写入到2.txt中。
  • 追加剧定向符号>>,例如把1.txt的内容显示并追加到2.txt文件中 cat 1.txt >2.txt这个用法不会删除2.txt的内容,只会把1.txt的内容追加到2.txt中
[root@localhost tmp]# vi 1.txt 
[root@localhost tmp]# vi 2.txt
[root@localhost tmp]# cat 1.txt 
lilililililili
[root@localhost tmp]# cat 2.txt
chaochaochaochaochaochaochao
[root@localhost tmp]# cat 1.txt >2.txt
[root@localhost tmp]# cat 2.txt 
lilililililili
[root@localhost tmp]# cat 1.txt >>2.txt 
[root@localhost tmp]# cat 2.txt 
lilililililili
lilililililili
  • 错误输出重定向2>,好比咱们执行一条命令时,命令报错,会把错误信息输出到指定的文件中(会把指定的文件中的内容删除)。
  • 错误追加剧定向2>>,好比咱们执行一条命令式,命令报错,会把错误信息追加到指定的文件中(不会删掉指定文件中的内容)
[root@localhost tmp]# cat 3.txt
cat: 3.txt: 没有那个文件或目录
[root@localhost tmp]# cat 3.txt 2>1.txt 
[root@localhost `
tmp]# cat 1.txt 
cat: 3.txt: 没有那个文件或目录
[root@localhost tmp]# cat 4.txt 2>>1.txt 
[root@localhost tmp]# cat 1.txt 
cat: 3.txt: 没有那个文件或目录
cat: 4.txt: 没有那个文件或目录

上面代码显示,当咱们cat不存在的3.txt时会提示错误,但咱们在命令中加上了2>1.txt错误输出重定向符号,发现,错误信息把1.txt文件中原先的内容替换掉了。而后咱们在cat不存在的4.txt时加上了2>>1.txt参数,发现新的报错信息被追加到了1.txt中。

  • 有一个将正确信息和错误信息(仍是上面那个例子)输出/追加到一个文件中的参数 cat 2.txt 3.txt &>1.txt
[root@localhost tmp]# cat 2.txt 3.txt &>1.txt 
[root@localhost tmp]# cat 1.txt 
lilililililili
lilililililili
cat: 3.txt: 没有那个文件或目录
[root@localhost tmp]# cat 2.txt 3.txt &>>1.txt 
[root@localhost tmp]# cat 1.txt 
lilililililili
lilililililili
cat: 3.txt: 没有那个文件或目录
lilililililili
lilililililili
cat: 3.txt: 没有那个文件或目录
  • 上面这个能够将正确的信息和错误信息分开输入到不一样的文件中
[root@localhost tmp]# cat 1.txt 4.txt>3.txt 2>2.txt 
[root@localhost tmp]# cat 3.txt 
lilililililili
lilililililili
cat: 3.txt: 没有那个文件或目录
lilililililili
lilililililili
cat: 3.txt: 没有那个文件或目录        这些内容是1.txt中的内容不要搞迷糊了
[root@localhost tmp]# cat 2.txt 
cat: 4.txt: 没有那个文件或目录        这个是错误信息输出到了2.txt中

追加跟上面用法同样,不过是把>换成了>>

输入重定向 <

这个符号不经常使用 是把后面的内容输出给前面的命令来执行,了解一下就好

相关文章
相关标签/搜索