运维开发网

记录历史命令,history,命令补全和别名、通配符、输入输出重定向

运维开发网 https://www.qedev.com 2020-08-17 12:15 出处:51CTO 作者:六六天一
shellshell是一个命令解释器,提供用户与机器之间的交互,支持特定的语法(逻辑判断、循环等);每个用户都可以有自己特定的shell;centos7默认shell为bash,其他shell还有zsh、ksh等;命令历史history命令:可以查看历史命令;在用户的家目录下的.bash_history文件中保存着之前敲过的命令,默认最大存储1000条;history命令可以查询;更改存储数:更改

shell

shell是一个命令解释器,提供用户与机器之间的交互,支持特定的语法(逻辑判断、循环等);

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

centos7默认shell为bash,其他shell还有zsh、ksh等;

命令历史

history命令:

可以查看历史命令;

在用户的家目录下的 .bash_history文件中保存着之前敲过的命令,

默认最大存储1000条;

history命令可以查询;

更改存储数:

更改变量HISTSIZE来达到更改存储数;

编辑文件vim /etc/profile

vim /etc/profile

修改HISTSIZE值,将HISTSIZE=1000改为10000

HISTSIZE=10000

更新缓存文件

source /etc/profile

查看变量值

[root@jinkai01 ~]# echo $HISTSIZE

10000

给history命令加上时间与日期

临时生效:

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

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

[root@jinkai01 ~]# echo $HISTTIMEFORMAT

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

[root@jinkai01 ~]# history | head -5

1 2020/08/14 17:03:43 ls -l 123/

2 2020/08/14 17:03:43 chown :Linuxprobe 123/

3 2020/08/14 17:03:43 ls -l

4 2020/08/14 17:03:43 ls -l 123/

5 2020/08/14 17:03:43 ls -ld 123

永久生效方法:

vim /etc/profile

增加变量定义

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

HISTSIZE=10000

更新缓存

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

[root@jinkai01 ~]# echo $HISTTIMEFORMAT

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

额外加一条永久生效的命令,一条命令

echo 'HISTTIMEFORMAT="%F %T whoami "' >> /etc/profile && source /etc/profile

查看所有用户的命令历史

cat /etc/passwd|for tmp in awk -F: '$3>999 {print $1}' ;do cat /home/$tmp/.bash_history; done

特殊命令

!!:表示执行上一条命令;

[root@jinkai01 ~]# pwd

/root

[root@jinkai01 ~]# !!

pwd

/root

!n:这里的n表示数值,,表示执行命令历史中的第n条指令;

[root@jinkai01 ~]# history | tail -5

1068 2020-08-14 17:55:55 root echo $HISTTIMEFORMAT

1069 2020-08-14 17:58:01 root history

1070 2020-08-14 17:59:28 root pwd

1071 2020-08-14 18:00:08 root history | tail -n

1072 2020-08-14 18:00:11 root history | tail -5

[root@jinkai01 ~]# !1070

pwd

/root

!字符串:表示执行历史命令中最近一次一字符串开头的命令,必须两个以上;

[root@jinkai01 ~]# !pw

pwd

/root

命令补全和别名

命令补全

centos7支持命令参数补全;

centos6只支持命令补全,不支持参数补全;

安装bash-completion包:

yum install -y bash-completion

安装后,重启生效;

别名

别名存放目录:

用户家目录下:~/.bashrc文件;

其他命令目录:/etc/profile.d/目录下的

当常用的命令与参数过长,我们可以定义一个别名来实现;

格式:

alias 别名 = '源命令'

systemctl restart network.service

将这条重启网卡服务的命令定义一个新的命令restartnet

[root@jinkai01 ~]# alias restartnet='systemctl restart network'

[root@jinkai01 ~]# 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'

alias rm='rm -i'

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

[root@jinkai01 ~]# restartnet

这里有一个错误,我赋值给network,写成network.server的时候,后续执行restartnet 会报错,显示为 network.server.server 多了一个server

取消别名

格式:

unalias [自定义别名]

[root@jinkai01 ~]# unalias restartnet

[root@jinkai01 ~]# 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'

[root@jinkai01 ~]# restartnet

-bash: restartnet: 未找到命令

通配符

* 在bash下,可以用来匹配零个或多个字符;

?在bash下,?号表示匹配一个字符;

[n-n]:n表示数值,n-n表示范围,例如:[0-3]表示范围0到3;

实验1:使用*来查询;

[root@jinkai01 ~]# ls

1.txt 2.txt 3.txt 11.txt anaconda-ks.cfg wc

[root@jinkai01 ~]# ls *.txt

1.txt 2.txt 3.txt 11.txt

实验2:使用?来查询;

[root@jinkai01 ~]# ls ?.txt

1.txt 2.txt 3.txt 无法查到11.txt 因为11是两个字符

实验3:使用[n-n]方括号范围来查询;[]内只取一个字符

[root@jinkai01 ~]# ls [1-3].txt

1.txt 2.txt 3.txt

实验4:查询范围数字0-9的.txt 小写字母.txt ;[]内不区分大小写

[root@jinkai01 ~]# ls [0-9a-z].txt

1.txt 2.txt 3.txt a.txt A.txt b.txt

实验5:指定选取几个字符

[root@jinkai01 ~]# ls [1,3,a].txt

1.txt 3.txt a.txt

[root@jinkai01 ~]# ls [13a].txt

1.txt 3.txt a.txt

[root@jinkai01 ~]# ls {1,3,a}.txt

1.txt 3.txt a.txt

[root@jinkai01 ~]# ls {13a}.txt

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

[root@jinkai01 ~]# ls {1,11,3,a}.txt

11.txt 1.txt 3.txt a.txt

[ ] 内可以分开写,也可以连着写;{ } 内必须以逗号分开写另外{ }内可以写书多个字符的文件。

输入输出重定向

.>:输出重定向,将一个字符串输出到一个文本中;输入两次后只计算后面一次;

.>>:追加重定向,将一个字符串追加输入到一个文本中;

<:输入重定向;

2>:错误重定向,将错误信息重定向到某个文本中;

2>>:错误追加重定向,将错误信息追加到某个文本中;

实验1:输出重定向;

[root@jinkai01 ~]# echo 111111 > 1.txt

[root@jinkai01 ~]# cat 1.txt

111111

实验2:追加重定向;

[root@jinkai01 ~]# echo 22222 >> 1.txt

[root@jinkai01 ~]# cat 1.txt

111111

22222

实验3:错误重定向;

[root@jinkai01 ~]# ls [12].txt aaa.txt >1.txt 2>2.txt

[root@jinkai01 ~]# cat 1.txt

1.txt

2.txt

[root@jinkai01 ~]# cat 2.txt

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

实验4:正确和错误输出到一个文件

[root@jinkai01 ~]# ls [12].txt aaa.txt >&1.txt

[root@jinkai01 ~]# cat 1.txt

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

1.txt

2.txt

符号|:管道符,将前面的命令交给后面的命令;

实验1:统计1.txt的段落长度;

cat 1.txt |wc -l

[root@jinkai01 ~]# cat 1.txt | wc -l

3

[root@jinkai01 ~]#

实验2:查看1.txt文件,将文件中包含2的字符串打印出来;

cat 1.txt |grep '2'

[root@jinkai01 ~]# cat 1.txt | grep 2

2.txt

[root@jinkai01 ~]# cat 1.txt

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

1.txt

2.txt

作业控制

当运行进程时,可以使它后台暂停(ctrl+z),然后使用bg命令后台活动,使用fg命令恢复它;

例如:vim 2.txt 使用ctrl+z暂停

[root@jinkai01 ~]# vim 2.txt

[4]+ 已停止 vim 2.txt

fg命令:

[root@jinkai01 ~]# fg

vim 2.txt

恢复或切换到前台,多个后台可以使用fg [序列号] 来实现调回;

jobs命令

查询中断作业,后台运行;

[root@jinkai01 ~]# jobs```

[1] 已停止 vim a

[3]- 已停止 sleep 200

[4]+ 已停止 vim 2.txt

bg命令:

后台活动作业,可以让持续运行中的作业在后台继续保持运行中,但必须在暂停后才能bg切换到后台活动;

[root@jinkai01 ~]# sleep 1000

^Z

[5]+ 已停止 sleep 1000

[root@jinkai01 ~]# jobs

[1] 已停止 vim a

[4]- 已停止 vim 2.txt

[5]+ 已停止 sleep 1000

[root@jinkai01 ~]# bg 5

[5]+ sleep 1000 &

[root@jinkai01 ~]# jobs

[1]- 已停止 vim a

[4]+ 已停止 vim 2.txt

[5] 运行中 sleep 1000 &~~

0

精彩评论

暂无评论...
验证码 换一张
取 消