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

shell 基础

shell

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

命令历史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

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

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

###别名 alias 命令可以查看系统中所有的做过别名的命令

[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键会有两种情况出现:

  • 命令或路径的前几个字母(我们敲击出来的)是唯一的,系统会自动帮助补全
  • 命令或路径的前几个字母(我们敲击出来的)不是唯一的,需要按tab键两下,会列出跟敲击出的字母匹配的选项。
  • 默认情况下tab键不会补全参数,如果需要可以安装以下: yum install bash-complation ,重启系统后,tab键就可以补全参数了(还是得遵守上面两条的规则)。

通配符

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

  • *.txt 表示所有的以.txt结尾的文件

  • txt.*表示所有的以txt.开头的文件

  • *.txt*表示所有的中间带有.txt的文件

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

  • [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中

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

输入重定向 <

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

转载于:https://my.oschina.net/u/3731306/blog/1837254

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值