Linux centos7 shell 介绍、 命令历史、命令补全和别名、通配符、输入输出重定向

一、shell介绍

shell脚本是日常Linux系统管理工作中必不可少的,不会shell,就不是一个合格管理员。

shell是系统跟计算机硬件交互使用的中间介质,一个系统工具。实际上在shell和计算机硬件之间还有一层——系统内核。如果吧计算机比作人的躯体,那系统内核就是人的大脑,至于shell,把它比做人的五官更贴切。

其实,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传给系统内核,接着内核再去支配计算机硬件去执行各种操作。

CentOS安装的shell版本是bash(Bourne Again Shell),是sh(Bourne Shell)的增强版。Bourne Shell是最早流行起来的版本,创始人是Steven Bourne,为了纪念他将其命名为Bourne Shell 简称sh

二、命令历史

我们执行过的命令都会记录,预设可记录1000条历史命令,这些命令保存在用户的家目录的.bash_history文件中。

只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history

!是与命令历史有关的一个特殊字符

!!:连续连个表示执行上一条指令

!n:这里的n是数字,表示执行命令史中的第n条指令

!字符串(字符串大于等于1):!pw表示执行历史最近一次以pw开头的命令

[root@davery ~]# ls /root/.bash_history

/root/.bash_history

[root@davery ~]#

[root@davery ~]# cat !$ 可存1000条

cat /root/.bash_history

ping wwwbaiducom

vi /etc/sysconfig/network-scripts/ifcfg-ens33

systemctl restart network.service

ifconfig

route -n

ping www.baidu.com

if config

ifconfig

ping wwww.baudu.com

systemctl restsrt network.service

systemctl restart network.service

journactl -xe

systemctl status network.service

etc/profile

systemctl restart network.service

ssh 192.168.1.106

....

[root@davery ~]# echo $HISTSIZE 查看可保存多少

1000

[root@davery ~]#history -c 清除历史命令,但不会删除命令,依旧可以使用命令

[root@davery ~]# history 查看使用过的命令

[root@davery ~]# vi /etc/profile 查看文本

HOSTNAME=`/usr/bin/hostname 2>/dev/null`

HISTSIZE=1000 最大存储量

改为500条

HISTSIZE=5000

[root@davery ~]# echo $HISTSIZE

1000

[root@davery ~]# source /etc/profile 刷新一下

[root@davery ~]# echo $HISTSIZE

5000

[root@davery ~]#

[root@davery ~]# HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 指定格式

[root@davery ~]# echo $HISTTIMEFORMAT

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

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

HOSTNAME=`/usr/bin/hostname 2>/dev/null`

HISTSIZE=5000

HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 粘贴变量

[root@davery ~]#

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

[root@davery ~]# source /etc/profile

[root@davery ~]# echo $HISTTIMEFORMAT

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

[root@davery ~]#

chattr +a ~ /.bash_history 永久保存

[root@davery ~]# chattr +a ~/.bash_history

[root@davery ~]# init 0 正常关机才能保存

[root@davery ~]# pwd

/root

[root@davery ~]# !! 执行上一条命令

pwd

/root

[root@davery ~]# !555 执行第555条命令

fdisk -l

[root@davery ~]# !pw 执行最近一次以pw开头的命令

pwd

/root

[root@davery ~]#

三、命令补全和别名

1.命令补全:Tab,敲一下,可以帮我们补全一个指令、一个路径或者一个文件名;敲两下,系统会把所有的命令或者文件都列出来

参数补全,安装bash-completion

[root@davery ~]# yum install -y bash-completion

已加载插件:fastestmirror

base | 3.6 kB 00:00:00

extras | 3.4 kB 00:00:00

updates | 3.4 kB 00:00:00

Loading mirror speeds from cached hostfile

* base: mirrors.cn99.com

* extras: mirrors.aliyun.com

* updates: mirrors.aliyun.com

正在解决依赖关系

--> 正在检查事务

---> 软件包 bash-completion.noarch.1.2.1-6.el7 将被 安装

--> 解决依赖关系完成

依赖关系解决

=========================================================================================================================================

Package 架构 版本 源 大小

=========================================================================================================================================

正在安装:

bash-completion noarch 1:2.1-6.el7 base 85 k

事务概要

=========================================================================================================================================

安装 1 软件包

总下载量:85 k

安装大小:259 k

Downloading packages:

bash-completion-2.1-6.el7.noarch.rpm | 85 kB 00:00:00

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

正在安装 : 1:bash-completion-2.1-6.el7.noarch 1/1

验证中 : 1:bash-completion-2.1-6.el7.noarch 1/1

已安装:

bash-completion.noarch 1:2.1-6.el7

完毕!

[root@davery ~]# reboot

[root@davery ~]# system

systemctl systemd-coredumpctl systemd-inhibit systemd-run

systemd-analyze systemd-delta systemd-loginctl systemd-stdio-bridge

systemd-ask-password systemd-detect-virt systemd-machine-id-setup systemd-sysv-convert

systemd-cat systemd-escape systemd-notify systemd-tmpfiles

systemd-cgls systemd-firstboot systemd-nspawn systemd-tty-ask-password-agent

systemd-cgtop systemd-hwdb systemd-path

[root@davery ~]# systemctl res

rescue reset-failed restart

2.别名

alias给命令重新起名字

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

或者在ls /etc/profile.d/

取消自定义别名

unalias

自定义alias放到~/.bashrc

[root@davery ~]# systemctl restart network.service

[root@davery ~]# alias restartsev='systemctl restart network.service'

[root@davery ~]# restartsev

[root@davery ~]# 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 restartsev='systemctl restart network.service'

alias rm='rm -i'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[root@davery ~]#

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

[root@davery ~]# vi .bashrc

# .bashrc

# User specific aliases and functions

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

# Source global definitions

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

~

[root@davery ~]# unalias restartsev 取消别名

[root@davery ~]#

[root@davery ~]# restartsev

-bash: restartsev: 未找到命令

[root@davery ~]#

四、通配符、、输入输出重定向

ls *.txt

ls ?.txt

ls [0-9].txt

ls {1,2}.txt

cat 1.txt > 2.txt 把1.txt指定输入到2.txt

cat 1.txt >> 2.txt 把1.txt追加到2.txt

ls aaa.txt 2 >err

ls aaa.txt 2 >>err

wc -| < 1.txt

command >1.txt 2>&1

[root@davery ~]# ls *.txt

[root@davery ~]# ls *

0.txt.gz 4913 5036 anaconda-ks.cfg.01 anaconda-ks.cfg.1 davery davery~ user1

1.txt:

make:

uear1:

[root@davery ~]#

[root@davery ~]# touch 1.txt

[root@davery ~]# touch 2.txt

[root@davery ~]# touch 3.txt

[root@davery ~]# ls ?.txt

2.txt 3.txt

1.txt:

[root@davery ~]#

[root@davery ~]# ls [0-3].txt

2.txt 3.txt

1.txt:

[root@davery ~]# ls [1].txt

[root@davery ~]# ls [123].txt

2.txt 3.txt

1.txt:

[root@davery ~]# ls [13].txt

3.txt

1.txt:

[root@davery ~]# ls [23].txt

2.txt 3.txt

[root@davery ~]#

[root@davery ~]# ls [0-9a-zA-Z].txt

2.txt 3.txt

1.txt:

[root@davery ~]#

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

ls: 无法访问.txt: 没有那个文件或目录

2.txt 3.txt

1.txt:

[root@davery ~]#

输入、输出重定向

[root@davery ~]# cat 1.txt > 2.txt

[root@davery ~]# cat 1.txt >> 2.txt

[root@davery ~]# ls [12].txt aaa.txt &> 2.txt

[root@davery ~]# ls 2.txt

2.txt

[root@davery ~]# ls [12].txt aaa.txt &>> 2.txt

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

转自:https://www.cnblogs.com/davery/p/8721049.html