zoukankan      html  css  js  c++  java
  • Bash特性

    Bash
    Linux系统终端概述
    图形化
           服务器终端切换:Ctrl + Alt + F1 _ F6
           虚拟机终端切换:Ctrl + Shift +Alt + F1 _ F6

    字符终端
           服务器终端切换:Alt + F1 _ F6
           pkill -9 -t tty2
                 -t:终端名称
                -9:强制

    2.Linux系统和Bash管理
    Linux提供的用户界面
           字符界面
                  shell
                         bash(默认)
    [root@oldboy ~]# echo $SHELL #查看当前系统使用的shell版本(默认是bash)
    /bin/bash

    [root@oldboy ~]# cat /etc/shells #查看Linux当前系统支持的shell版本有哪些
    sh -->bash的软(符号)链接
    bash
    nologin

    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash

    图形化界面
           gnome
           kde

    date
    查看时间
    一般使用+格式的方式来显示我们所需要的时间格式
    [root@oldboy ~]# date +%F_%R
    2019-10-15_14:37
    [root@oldboy ~]# date +%F-%R
    2019-10-15-14:38
    [root@oldboy ~]# date +"%F %R"
    2019-10-15 14:39

    touch log_`date +%F_%R`.bak
    touch log_$(date +%F_%R).bak

    whoami 查看当前位置

    Bash特性:命令补全
    通过上下方向键来调取过往执行过的Linux命令;
    命令或参数仅需输入前几位的可以用Tab键补全

    Bash特性:命令快捷键
    终端快捷键的使用可以帮助我们大大提升效率

    Ctrl + a #光标跳转至正在输入的命令行的首部 home
    Ctrl + e #光标跳转至正在输入的命令行的尾部 end
    Ctrl + c #终止前台运行的程序
    Ctrl + d #在shell中,ctrl-d表示推出当前shell。
    Ctrl + z #将任务暂停,挂至后台
    Ctrl + l #清屏,和clear命令等效。
    Ctrl + k #删除从光标到行末的所有字符
    Ctrl + u #删除从光标到行首的所有字符
    Ctrl + r #搜索历史命令, 利用关键字

    //在命令行前加“#”,则该命令不会被执行

    History查看系统命令历史,追溯之前发生情况

    [root@oldboy ~]# echo $HISTSIZE
    1000
    [root@oldboy ~]# HISTSIZE=200
    [root@oldboy ~]# echo $HISTSIZE
    200

    命令选项:
           -w 保存命令历史到历史文件
           -c 清空命令历史记录,不会情况文件
           -d 删除命令历史的第N条行
                !可以调用之前的命令
                      !num
                                调用第num行的命令历史
                       !!
                                执行上一条命令
                       !cmd
                                调用离当前最近以该cmd开头的命令
                       !$/按住ESC,松开按.
                                执行上条命令的参数

    命令别名
    alias
           alias cmd='cmd '
           unalias cmd
    注意:
           1.使用alias命令就可以查看当前生效的别名有哪些
           2.使用unalias 接别名名称 取消
           3.alias只对当前环境临时生效
           4.如需永久生效,需将定义别名的命令写入登录配置问价
                  ~/.bash_profile 只对当前用户生效,局部配置文件
                  ~/.bashrc 只对当前用户生效,局部配置文件
                  /etc/profile 对所有用户生效,全局配置文件
                  /etc/bashrc 对所有用户生效,全局配置文件

    [root@oldboy ~]# alias ifconfig='ifconfig ens33'


    命令流程 图1
    当我们执行一个命令,整个命令执行流程如下 :
    1.判断命令是否通过绝对路径执行
    2.判断命令是否存在别名
    3.判断用户输入的是内部命令还是外部命令
          内部命令:shell程序自带的命令
          外部命令:在系统PATH变量的某个路径下的可执行程序
          使用type命令检测用户输入的命令属于内部命令还是外部命令
    4.内部命令直接执行,外部命令检测是否存在缓存
    5.检测PATH路径,有执行,无报错

                                              图1                bash命令流程

    //表缓存命令所在位置
    [root@oldboy ~]# hash
    命中 命令
    3 /usr/bin/locate
    1 /usr/bin/ls
    1 /usr/bin/find

    //已缓存命令,如果移动位置会导致无法找到该命令
    [root@oldboy ~]# mv /usr/bin/find /tmp/
    [root@oldboy ~]# find
    -bash: /usr/bin/find: 没有那个文件或目录

    //删除缓存过的find命令,即可执行
    [root@oldboy ~]# hash -d find
    [root@oldboy ~]# find

    //当然可以清空缓存表
    [root@oldboy ~]# hash -r

    //命令缓存hash需要注意如下情况
    1.如果执行外部命令1次就会对该命令进行缓存
    2.如果将命令移动了位置
    a.使用绝对路径执行
    b.删除hash表的缓存指令

    总结,当我们执行了一个Ping命令之后,整个命令执行的流程步骤如下:

    1.检查执行的是否是绝对路劲
    2.检查该ping命令是否存在别名
    3.检查该ping命令是内部命令还是外部命令
    4.如果是内部命令直接执行,如果是外部命令
    5.检测该命令是否有缓存,如果没有,查找PATH变量
    6.检查PATH路径知道查到该命令然后执行
    7.如果没有找到该命令则返回错误。command not found

    路径展开
    思考:在/tmp路径下创建以下目录
    etc/init.date
    etc/sysconfig
    usr/lib
    usr/bin
    usr/include
    var/spool
    var/run
    proc
    sys
    bin

    mkdir -pv /tmp/{etc/{init.d,sysconfig},usr/{bin,lib,include},var/{spool,run},proc,sys,bin}

    [root@oldboy ~]# tree /tmp/
    /tmp/
    ├── bin
    ├── etc
    │   ├── init.d
    │   └── sysconfig
    ├── proc
    ├── sys
    ├── usr
    │   ├── bin
    │   ├── include
    │   └── lib
    └── var
    ├── run
    └── spool

    转义符
    反斜杠():使反斜杠后面的一个变量变为字符串
    单引号(''):转义其中所有的变量为单纯字符串
    双引号(""):保留其中的变量属性,不进行转义处理
    反引号(``): 把其中的命令执行返回结果

    //将特殊字符转换为正常字符
    [root@oldboy ~]# echo "shop is $500"
    shop is 00
    [root@oldboy ~]# echo "shop is $500"
    shop is $500
    //转义其中特殊字符为普通字符串
    [root@oldboy ~]# echo 'shop is $500'
    shop is $500

    //使用$()实现命令替换
    [root@oldboy ~]# echo "The dir is $(pwd)"
    The dir is /root
    //使用``实现命令替换
    [root@oldboy ~]# echo "The dir is `pwd`"
    The dir is /root

    //转义其中所有的变量为单纯的字符串
    [root@oldboy ~]# touch file-`date +%F-%H-%S`
    [root@oldboy ~]# ls
    anaconda-ks.cfg file-2019-10-17-22-54 log_2019-10-15_14:47.bak

    [root@oldboy ~]# touch 'file-`date +%F-%H-%S`'
    [root@oldboy ~]# ls
    file-`date +%F-%H-%S`

    [root@oldboy ~]# cat >>.bashrc <<EOF
    > echo "server ip is `ifconfig| awk 'NR==2{pring $2}'`"
    > EOF

  • 相关阅读:
    VMware安装CentOS系统与配置全过程
    Matplotlib学习笔记
    python正则表达式字符记录
    HyperLedger Fabric 学习思路分享
    fabric-sdk-container v1.0-beta 新增支持多服务节点
    HyperLedger/Fabric SDK使用Docker容器镜像快速部署上线
    HyperLedger/Fabric JAVA-SDK with 1.1
    HyperLedger Fabric 1.1 手动部署单机单节点
    Hyperledger Fabric CA User’s Guide——配置设置(四)
    Hyperledger Fabric CA User’s Guide——开始(三)
  • 原文地址:https://www.cnblogs.com/xmtxh/p/11695750.html
Copyright © 2011-2022 走看看