Linux学习(二十一)Shell基础认识shell命令历史命令补全别名通配符管道符与前后台控制
Posted 阮文武的网络日志
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习(二十一)Shell基础认识shell命令历史命令补全别名通配符管道符与前后台控制相关的知识,希望对你有一定的参考价值。
前言
这个系列我们学习shell的基础知识。
一、认识shell
我们经常使用的终端,其实就是一个shell。Bourne开发的shell原本叫shell,后来再版Bourne Again Shell叫做Bash。我们通常使用的shell就是Bash。
二、命令历史
history命令能够记录我们使用过的命令:
[root@ruanwenwu02 ~]# history|tail -n3 803 history|tail -n3 804 history 805 history|tail -n3
history -c能清除我们的history命令:
[root@ruanwenwu02 ~]# history -c [root@ruanwenwu02 ~]# history 1 history
我们退出终端,然后再进来,看是不是真的清空了:
实验发现,history -c并不是真的清空了,只是在内存里清除而已。
每个用户的history记录保存在家目录的.bash_history文件里,我们看看:
[root@ruanwenwu02 ~]# vim .bash_history
我们看每条命令前面都有一个编号,我们可以使用这个编号,便捷的使用该条命令:
809 vim .bash_history history 810 history [root@ruanwenwu02 ~]# !809
!!就是使用history中最后一条。
!vim会查找history中最后一条以vim开头的命令并执行。
现在我们讲关于history的两个变量。一个是HISTSIZE,一个是HISTTIMEFORMAT。我们看看这两个变量的值各是多少:
[root@ruanwenwu02 ~]# echo $HISTSIZE 1000 [root@ruanwenwu02 ~]# echo $HISTTIMEFORMAT [root@ruanwenwu02 ~]#
我们可以在BASH中直接修改他们的值:
[root@ruanwenwu02 ~]# HISTSIZE=2000 [root@ruanwenwu02 ~]# ECHO $HISTSIZE -bash: ECHO: 未找到命令 [root@ruanwenwu02 ~]# echo $HISTSIZE 2000
[root@ruanwenwu02 ~]# $HISTTIMEFORMAT=\'%Y%m%d %H:%M%s\'
-bash: =%Y%m%d %H:%M%s: 未找到命令
[root@ruanwenwu02 ~]# HISTTIMEFORMAT=\'%Y%m%d %H:%M%s\'
[root@ruanwenwu02 ~]# echo $HISTTIMEFORMAT
%Y%m%d %H:%M%s
[root@ruanwenwu02 ~]# history|tail -n3
826 20171115 10:331510713238HISTTIMEFORMAT=\'%Y%m%d %H:%M%s\'
827 20171115 10:341510713243echo $HISTTIMEFORMAT
828 20171115 10:341510713253history|tail -n3
但是这样的值,在我们退出终端后再进来就会消失:
821 echo $HISTTIMEFORMAT 822 :q 823 exit
如果要保存变量的值,我们可以使用在/etc/profile文件中修改,并source命令或者重新进入终端让改动生效。
vim /etc/profile
#在最末尾添加:
unset -f pathmunge HISTTIMEFORMAT=\'%Y%m%d %H:%M:%s\'
使用命令source /etc/profile,或者退出后重新登录:
Last login: Wed Nov 15 10:35:09 2017 from 192.168.38.1 [root@ruanwenwu02 ~]# echo $HISTSIZE 2000 [root@ruanwenwu02 ~]# ECHO HISTTIMEFORMAT -bash: ECHO: 未找到命令 [root@ruanwenwu02 ~]# echo $HISTTIMEFORMAT %Y%m%d %H:%M:%s [root@ruanwenwu02 ~]# hist|tail -n3 -bash: hist: 未找到命令 [root@ruanwenwu02 ~]# history|tail -n3 836 20171115 10:41:1510713665echo $HISTTIMEFORMAT 837 20171115 10:41:1510713671hist|tail -n3 838 20171115 10:41:1510713677history|tail -n3
发现修改已经永久生效了。
三、命令补全和别名
要点:
tab敲一下,如果没有相同的内容就会直接补全,如果有相同的就会列出选项。
但是如果想参数也能补全,就需要安装额外的插件:bash-completion:
yum install -y bash-completion
alias的作用是给命令起别名,它的简单用法:
[root@ruanwenwu02 ~]# alias lsi=\'ls -l\' [root@ruanwenwu02 ~]# lsi 总用量 80 drwxr-xr-x. 3 root root 28 10月 31 22:10 1 -rw-r--r--. 1 root root 1008 11月 5 20:08 1bak.zip -rw-r--r--. 1 root root 10240 11月 5 18:43 1.tar
一般个人的alias放在~/.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 ~
在/etc/profile.d目录中也有很多别名。比如:vim /etc/profile.d/colors.sh文件中就有这样的别名定义:
alias ll=\'ls -l\' 2>/dev/null
alias l.=\'ls -d .*\' 2>/dev/null
四、通配符
要点:
2>err代表错误输出。wc -l < 1.txt很少用,表示将1.txt的内容输入到wc -l。2>&1表示正确错误都输出到1.txt,也可以这样表示:
[root@ruanwenwu02 profile.d]# cd ~ [root@ruanwenwu02 ~]# ls 1 1.tar 2 3 3.tar.gz 4.tar 4.zip 5.zip anaconda-ks.cfg.xz 1bak.zip 1.zip.bz2 2.tar 33.tar 3.zip 4.tar.bip2 5 6 [root@ruanwenwu02 ~]# ls 1 333 >> 7.txt 2>&1 [root@ruanwenwu02 ~]# cat 7.txt ls: 无法访问333: 没有那个文件或目录 1: 1.txt 2
正确和错误分开记录:
[root@ruanwenwu02 ~]# ls 1 333 >> 8.txt 2>> 9.txt [root@ruanwenwu02 ~]# cat 8.txt 1: 1.txt 2 [root@ruanwenwu02 ~]# cat 9.txt ls: 无法访问333: 没有那个文件或目录
五、管道符
管道符的作用是将前面命令的标准输出作为后面命令的标准输入,比如:
[root@ruanwenwu02 ~]# ls|wc -l 21 [root@ruanwenwu02 ~]# ls|cat 1 1bak.zip 1.tar [root@ruanwenwu02 ~]# ls|cat -n3 cat:无效选项 -- 3 Try \'cat --help\' for more information. [root@ruanwenwu02 ~]# ls |head -n 3 1
xargs和管道符的区别是:xargs是拿前面的输出作为参数,而管道符只是作为标准的输入。例子:
[root@ruanwenwu02 ~]# echo \'--help\'|cat --help [root@ruanwenwu02 ~]# echo \'--help\'|xargs cat 用法:cat [选项]... [文件]... 将[文件]或标准输入组合输出到标准输出。 -A, --show-all 等于-vET -b, --number-nonblank 对非空输出行编号 -e 等于-vE -E, --show-ends 在每行结束处显示"$" -n, --number 对输出的所有行编号 -s, --squeeze-blank 不输出多行空行 -t 与-vT 等价 -T, --show-tabs 将跳格字符显示为^I -u (被忽略) -v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外 --help 显示此帮助信息并退出 --version 显示版本信息并退出 如果没有指定文件,或者文件为"-",则从标准输入读取。 示例: cat f - g 先输出f 的内容,然后输出标准输入的内容,最后输出g 的内容。 cat 将标准输入的内容复制到标准输出。 GNU coreutils online help: <http://www.gnu.org/software/coreutils/> 请向<http://translationproject.org/team/zh_CN.html> 报告cat 的翻译错误 要获取完整文档,请运行:info coreutils \'cat invocation\'
六、进程控制
要点:
实验:
[root@ruanwenwu02 ~]# vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 12 285228 2784 588204 0 0 2 9 64 103 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 50 86 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 52 81 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 43 70 0 0 100 0 0 ^Z [1]+ 已停止 vmstat 1 [root@ruanwenwu02 ~]# jobs [1]+ 已停止 vmstat 1 [root@ruanwenwu02 ~]# bg 1 [1]+ vmstat 1 & [root@ruanwenwu02 ~]# 3 0 12 285228 2784 588220 0 0 0 0 443 710 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 52 87 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 47 74 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 47 77 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 3 46 78 0 1 99 0 0 0 0 12 285228 2784 588220 0 0 0 0 47 79 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 55 84 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 50 80 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 52 76 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 49 82 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 4 67 97 1 1 98 0 0 0 0 12 285228 2784 588220 0 0 0 0 44 74 0 0 100 0 0 0 0 12 285228 2784 588220 0 0 0 0 45 72 0 0 100 0 0 f 0 0 12 285228 2784 588220 0 0 0 0 55 83 0 0 100 0 0 g 0 0 12 285228 2784 588220 0 0 0 0 53 80 0 1 99 0 0 0 0 12 285228 2784 588220 0 0 0 0 46 77 0 0 100 0 0 1 -bash: fg1: 未找到命令 [root@ruanwenwu02 ~]# 0 0 12 285148 2784 588220 0 0 0 0 70 103 0 0 100 0 0 f 0 0 12 285148 2784 588220 0 0 0 0 54 85 0 0 100 0 0 g vmstat 1 0 0 12 285148 2784 588220 0 0 0 0 65 96 0 1 99 0 0 0 0 12 285148 2784 588220 0 0 0 0 43 75 0 0 100 0 0 0 0 12 285148 2784 588220 0 0 0 0 46 72 0 0 100 0 0 ^Z [1]+ 已停止 vmstat 1 [root@ruanwenwu02 ~]#
bg命令,能让停止的命令继续在后台运行起来。
以上是关于Linux学习(二十一)Shell基础认识shell命令历史命令补全别名通配符管道符与前后台控制的主要内容,如果未能解决你的问题,请参考以下文章
Linux从青铜到王者第二十一篇:Linux网络基础第三篇之数据链路层