8.1 shell介绍
8.2 命令历史
8.3 命令补全和别名
8.4 通配符
8.5 输入输出重定向



8.1 shell介绍


Linux Shell基础

介绍shell的特性,用法。

  • shell是一个命令解释器,提供用户和机器之间的交互。

  • 支持特定语法,比如逻辑判断、循环。

  • 每个用户都可以有自己特定的shell


CentOS7默认shell为bash(Bourne Agin Shell)

Bourne是一个用户,他开发的shell是sh.

后来CentOS7默认使用的shell是bash,基于sh优化而来。


shell还有zsh、ksh等


8.2 命令历史


history命令

.bash_history

history文件,存放命令

# cat /root/.bash_history


历史命令最大可以存1000条 (要修改最大值,可以修改/etc/profile文件)

查看变量HISTSIZE值, 

# echo $HISTSIZE 
1000

有时候敲命令,可以敲到1000+ ,这是因为这些命令还没有真正写到文件里,因为现在运行的命令是暂时存在内存中。



#history -c

清空当前命令历史,不能清空相关历史配置文件的,对配置文件无任何影响。只有退出终端,命令历史记录才会被写入文件中。


要改变$HISTSIZE,需在/etc/profile中修改

修改profile中的history参数之后,需要让修改生效,利用#source /etc/profile 

[root@centos7 ~]# vi /etc/profile


[root@centos7 ~]# echo $HISTSIZE
1000
[root@centos7 ~]# source /etc/profile
[root@centos7 ~]# echo $HISTSIZE 
5000

用时间显示使用过的命令历史记录。

使用参数:HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "

[root@centos7 ~]# echo HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "

Y年m月d日H时M分钟S秒

HISTTIMEFORMAT=%Y/%m/%d %H:%M:%S

[root@centos7 ~]# vi /etc/profile修改profile文件

[root@centos7 ~]# source /etc/profile
使参数修改生效
[root@centos7 ~]# history 
    6  2018/03/07 15:08:26 history 
    7  2018/03/07 15:08:32 ls
    8  2018/03/07 15:08:33 history 
    9  2018/03/07 15:09:16 cd /etc/
   10  2018/03/07 15:09:19 cd -
   11  2018/03/07 15:09:23 history

用久保存

 chattr +a ~/.bash_history

如果不正常退出,保存的命令会不全。


  • !! 上一条命令,则history的最后一条命令。

  • !n  !接n条命令。例如!6 执行history的第6条命令

  • !word 从history倒退网上找最近一条相关word命令。例如!echo,从history里找最后一条echo的命令。


# history 
      26  2018/03/07 16:02:29 history 
   27  2018/03/07 16:04:17 echo HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 
   28  2018/03/07 16:04:29 HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
   29  2018/03/07 16:06:06 history 
# !echo
echo HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 
HISTTIMEFORMAT=%Y/%m/%d %H:%M:%S



8.3 命令补全和别名


命令补全及别名

tab键,敲一下,敲两下

敲一下补全效果,

敲两下,列出相关补全文件或目录名


系统参数命令在未安装bash-completion之前,是不能补全的,例如敲入:

#systemctl restart network.service

会发现未安装之前是不能全部敲入的。


参数补全,安装bash-completion,安装完成后重启。

#yum install -y bash-completion
# rpm -qa bash-completion安装成功,
bash-completion-2.1-6.el7.noarch

alias别名给命令重新起个名字

给systemctl restart network.service做一个alias,名为:restartnet

[root@centos7 ~]# alias restartnet='systemctl restart network.service'
[root@centos7 ~]# restartnet
[root@centos7 ~]# 
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 restartnet='systemctl restart network.service'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

alias存放目录 

各用户都有自己配置别名的文件 ~/.bashrc

ls /etc/profile.d/

自定义的alias放到 ~/.bashrc

~/.bashrc 部分在这

/etc/profile.d/  
grep,colors


#unalias restartnet取消restartnet的alias



8.4 通配符


介绍

*用法

[root@centos7 ~]# ls
1.txt  1.xtx  2.txt  a_(2).txt  anaconda-ks.cfg  anaconda-ks.cfg.1  a.txt  temp.1
[root@centos7 ~]# ls *txt目录下所有TXT文件
1.txt  2.txt  a_(2).txt  a.txt
[root@centos7 ~]# ls 1*txt目录下1开头的TXT文件
1.txt
[root@centos7 ~]# ls *2*.txt目录下名称含有2的TXT文件
2.txt  a_(2).txt

?用法

[root@centos7 ~]# touch 3.txt 4.txt a.txt bb.txt
[root@centos7 ~]# ls
1.txt  1.xtx  2.txt  3.txt  4.txt  a_(2).txt  anaconda-ks.cfg  anaconda-ks.cfg.1  a.txt  bb.txt  temp.1
[root@centos7 ~]# ls ?.txt 文件名只有一个字的TXT文件名
1.txt  2.txt  3.txt  4.txt  a.txt
[root@centos7 ~]# ls ??.txt 文件名有两个字的TXT文件名
bb.txt

[]数字范围用法,支持特定数字,也支持特定范围。

[root@centos7 ~]# ls [0-4].txt
1.txt  2.txt  3.txt  4.txt
[root@centos7 ~]# ls [14].txt
1.txt  4.txt
[root@centos7 ~]# ls [1234].txt
1.txt  2.txt  3.txt  4.txt

英文和数字用法

[root@centos7 ~]# touch A.txt
[root@centos7 ~]# ls [0-9a-zA-Z].txt
1.txt  2.txt  3.txt  4.txt  a.txt  A.txt

{}用法,例如{1,2,3}=[1-3]

[root@centos7 ~]# ls {1,2,3}.txt
1.txt  2.txt  3.txt
[root@centos7 ~]# ls [1-3].txt
1.txt  2.txt  3.txt

8.5 输入输出重定向



输出重定向>

cat 1.txt >2.txt

 把1.txt输出的内容结果重定向输入到2.txt的文件里。

cat 1.txt >>2.txt

>>和>差不多,只是>>是追加,>>不把1.txt的文件内容删掉,会保留着,并且输入到2.txt,这个动作叫做追加。

>把前面输出的内容结果,重定向输入到后面的文件里。(前面被重定向的内容会被删掉)



ls aaa.txt 2>4.txt lsaaa.txt 
产生的错误信息指定输出到4.txt里
[root@centos7 ~]# ls aaa.txt 2> 4.txt
[root@centos7 ~]# cat 4.txt
ls: 无法访问aaa.txt: 没有那个文件或目录
ls aaa.txt 2>>4.txtlsaaa.txt 产生的错误信息指定输出追加到4.txt里

2>产生的错误信息指定输出到指定文件里
2>>产生的错误信息指定输出追加到指定文件里
>正确的信息,2>错误的信息

>+2>=&> &>=>正确信息 2>的结合



&>举例演示

[root@centos7 ~]# ls [1-2].txt aaa.txt &>a.txt
[root@centos7 ~]# cat a.txt 
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt
2.txt

&>>演示

[root@centos7 ~]# ls [1-2].txt aaa.txt &>>a.txt
[root@centos7 ~]# cat a.txt 
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt
2.txt
ls: 无法访问aaa.txt: 没有那个文件或目录
1.txt
2.txt

用2个文件区分 正确与错误输出结果

[root@centos7 ~]# ls [1-2].txt aaaa.txt >1.txt 2>a.txt
[root@centos7 ~]# cat 1.txt 
1.txt
2.txt
[root@centos7 ~]# cat a.txt 
ls: 无法访问aaaa.txt: 没有那个文件或目录

输入重定向<,格式一般是:命令 < 文件 (这个比较少用)

[root@centos7 ~]# wc -l < 1.txt
2