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_historyhistory文件,存放命令
# 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
原文地址:http://blog.51cto.com/13578154/2083929