zoukankan      html  css  js  c++  java
  • 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命令,能让停止的命令继续在后台运行起来。 

    坚持!
  • 相关阅读:
    Oracle 11g安装过程工作Oracle数据库安装图解
    Anaconda和虚拟环境
    NLP(三)
    Spring Cloud
    Flink 更新中
    Hadoop(四)小项目练习 更新中
    大数据环境搭建
    zookeeper
    .net(四) winform应用程序
    负载均衡中间件(二)LVS负载均衡软件和基于云计算平台的架构
  • 原文地址:https://www.cnblogs.com/doubilaile/p/7837453.html
Copyright © 2011-2022 走看看