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

    命令别名
      alias 显示当前shell中定义的所有别名
      alias 别名='原始命令'
      unalias 别名 取消定义的别名
    在命令前加使用命令本身,而不是别名(或者使用绝对路径执行命令使用命令本身)
     仅对当前用户生效:~/.bashrc
     对所有用户生效:/etc/bashrc
     配置文件配置后不会立即生效需要重新运行配置文件
       source /etc/bashrc
      . /etc/bashrc

    文件名通配(globbing)
      * 匹配任意长度的任意字符
      ? 匹配任意单个字符
     [^] 匹配指定字符范围外的任意单个字符
      [ ] 匹配指定字符范围内的任意单个字符,不区分大小写
      [[:upper:]] 大写字母[A-Z]
      [[:lower:]] 小写字母[a-z]
      [[:alpha:]] 所有字母[A-Za-z]
      [[:digit:]] 所有数字[0-9]
      [[:alnum:]] 字母+数字[0-9A-Za-z]
      [[:space:]] 空格
      [[:punct:]] 标点符号 特殊字符

    命令历史
      bash默认会保持此前执行过的命令列表,当前shell进程的保存在缓冲区中,缓冲区中的命令会在shell退出时保存在文件.bash_history;使用上下箭头键可以翻看此前执行过的命令:
      history命令用法
      选项:
      -c  清空命令历史
      -d 删除历史中指定的命令 history -d 3
      #  显示最近的#条历史命令 history 5
      -a 追加本次会话新执行的命令历史列表至历史文件
      -n 读取所有在会话列表中的,但是不在当前会话列表中的
      -r 读历史文件附加到历史列表
      -w 保存历史列表到指定的历史文件
      -p 展开历史参数成多个行,但不存在历史列表中
      -s 展开历史参数成一行,附加在历史列表后 (伪造命令)

    命令历史相关的环境变量
      HISTSIZE 历史命令中可以保存的个数
      HISTFILE 历史命令保存的文件
      HISTFILESIZE 历史文件中可以保存的命令个数
      HISTTIMEFORMAT="%F %T" 显示时间格式
      HISTCONTROL 控制命令历史的生成机制
          ignoredups  忽略记录重复的命令,连续的相同命令
          ignorespace 以空格开头的命令不会被记录
          ignoreboth 同时具有上面两种特性
        erasedups  删除重复命令

      !#    执行history中第#条的命令
     !!    上一条命令
     !-#    表示执行命令列表中的倒数第#条命令
     !$     执行上个命令中的最后一个参数:ESC,.
     !string 执行命令列表中的最近一次以string开头的命令

    命令及路径补全
      内部命令:bash程序本身提供的命令
     外部命令:在系统某路经下有一个可执行程序
     命令补全:是通过在PATH环境变量定义的路径中从左往右搜索补全
     路径补全:在给出的打头路径下补全,如果没有打头路径,则为当前目录

    Bash快捷键
      Ctrl+A 把光标移动到命令行开头
     Ctrl+E 把光标移动到命令行结尾
     Ctrl+C 非正常中断—终止前台进程
     Ctrl+D 输入完成的正常信号(退出当前终端)
     Ctrl+G 终端声效
     Ctrl+J 换行—与Enter键功能相同
     Ctrl+L 换页—使bash清屏,也可以用来刷新屏幕,对于许多基于屏幕的语言程序而言,如vi,如果意外的信息弄乱了显示,使用Ctrl+L可以让程序刷新屏幕,正确的重绘屏幕
     Ctrl+S 锁住终端显示
     Ctrl+Q 解锁终端显示
     Ctrl+H 后退一格—删除前一个字符
     Ctrl+W 删除或剪切光标前的单词
     Ctrl+K 删除或剪切光标之后的内容
     Ctrl+U 删除光标前的所有内容(如果密码输入错误了,可以用Ctrl+U清除)
     Ctrl+Y 粘贴ctrl+U或ctrl+K剪切的内容
     Ctrl+Z 挂起前台进程,转入后台运行(fg调回命令)
     Ctrl+R 在历史命令中搜索
     Ctrl+P 重复上一条命令
     ESC+T  调换光标前的两个单词
     Ctrl+向右箭头  光标移动到下一个词首
     ESC+F     光标移动到下一个词首
     Ctrl+向左箭头 光标移动到上一个词首 
     ESC+B     光标移动到上一个词首
     ESC+.     调用上一条命令的参数

    命令行展开
     ~ 展开为当前用户的家目录
      ~USERNAME 展开为指定用户的家目录
      { } 里面是一个以逗号分割的列表,并将其展开为多个路径
      例如:/tmp/{a,b} 相当于 /tmp/a、/tmp/b

    多命令执行
      复合式: 命令会一个接一个的执行
        COMMAND1;COMMAND2;COMMAND3;...
      date; who | wc -l

     子shell:所有的输出看做一个整体,都被发送给单个STDOUT和STDERR
      (date; who | wc -l ) >>/tmp/trace
    演示:
    [root@centos7 ~]# date;who
    2017年 02月 19日 星期日 11:51:24 CST
    root tty1 2017-02-19 11:50
    root pts/0 2017-02-19 11:02 (192.168.1.100)

    # 按顺序执行
    [root@centos7 ~]# date;who |wc -l
    2017年 02月 19日 星期日 11:50:21 CST
    2

    # 为子shell,括号中的执行结束后,再管道
    [root@centos7 ~]# (date;who) |wc -l
    3

    Bash特性引用
     '' 强引用,不会进行变量替换
     "" 弱引用,会进行变量替换
     `` 命令替换,引用命令的执行回显结果,另外一种方式$()
     ${变量名} 变量替换,或者直接"$变量名"

    I/O重定向及管道
      I/O设备在系统起来的时候注册IO端口(这些端口其实就是寄存器),注册IO端口就是给这些寄存器一个地址,CPU通过这些寄存器地址跟IO设备交互

     Linux系统中标识用户用UID,标识组用GID,标识进程用PID;都是通过名称解析将名字转换成ID;同样的系统在运行的时候,会打开很多文件,这些打开的文件也有ID,通常叫文件描述符(windows中叫文件句柄):file descriptor简写为FD,是内核用来追踪当前打开的文件属性;文件描述符是内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符;读写文件也需要使用文件描述符来指定待读写的文件

     INPUT:标准输入/dev/stdin  文件描述符为0  标准默认输入是键盘
     OUTPUT:标准输出/dev/stdout  文件描述符为1 标准默认输出是显示器
      标准错误输出:/dev/stderr  文件描述符为2 标准默认错误输出是显示器

    I/O重定向:改变标准的输入和输出位置就是I/O重定向
     输入重定向 <、<<
       <  输入重定向
      << 此处创建文件,常用于在脚本中创建文件或生成菜单
      创建文件例子:将输出信息保存到/tmp/filename文件
        cat > /tmp/filename << EOF
        a:show user info
        b:show disk info
        c:show cpu info
        EOF      
       生成菜单例子:EOF为起始结束符,可以用任意字符,但是起始结束符要一样
        cat << EOF
        a:show user info
        b:show disk info
        c:show cpu info
        EOF
       
      输出重定向 >、>>
      >  以覆盖的方式,把命令的正确输出重定向到指定的文件或设备
      >> 以追加的方式,把命令的正确输出重定向到指定的文件或设备

    set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。
      set -C 禁止覆盖重定向至已经存在的文件
      set +C 关闭上述特性
      >|    在-C 特性下,强制使用覆盖重定向

      /dev/null:bit bucket 位桶,所有输入到该设备的信息都会被丢弃,在编写脚本不需要命令指定的返回结果就可以重定向到该设备

    错误重定向:2>、2>>,会输出正确信息
       2>  以覆盖的方式,把命令的错误输出重定向到指定的文件或设备
      2>> 以追加的方式,把命令的错误输出重定向到指定的文件或设备

      同时重定向正确输出和错误输出:
      &>  以覆盖的方式,把命令的正确和错误输出重定向到指定的文件或设备
      &>> 以追加的方式,把命令的正确和错误输出重定向到指定的文件或设备
       command &> /path/to/somefile
       command > /path/to/somefile 2>&1

      正确输出到outfile,错误输出errfile
        command > /path/to/outfile 2>/path/to/errfile

    合并多个程序的标准输出
      (ls;who) > /tmp/test.txt

      管道:把前一个命令的输出当下一个命令的输入
        组合目的单一的小程序完成复杂的任务
       command1 | commadn2 | command3 | ......
        command1、commadn2是在当前shell执行的,command3(最后一个命令)第三个命令后是在子shell中运行
    tee 分叉输出,命令不会处理,会送到下一个管道
     将输出信息分叉,/etc/passwd的文件内容输出到/tmp/filename;同时给管道的下一个命令wc命令作为输入统计行数
      cat /etc/passwd | tee /tmp/filename | wc -l 

    tr命令
      转换或删除字符,tr '集合1' '集合2',必须使用管道输出作为该命令参数
     转换字符:会把第一个字符集的对应转换为第二个字符集中的对应转换
      [root@localhost ~]# echo "hello word" | tr [a-z] [A-Z]
      HELLO WORD
     -d 删除字符集中出现的字符
       [root@localhost ~]# echo "hello word" | tr -d r
       hello wod
     -s 压缩输入中重复的字符
       [root@localhost ~]# echo "GNU is     not    UNIX. Recursive right ?" | tr -s ' ' (去除连续重复的空白字符)
       GNU is not UNIX. Recursive right ? 
     -c 取字符集的补集 

    演示:
    tr 加选项 -t 和不加的区别,如下:
    # 对位替换
    [root@centos7 ~]# echo abcde |tr 'a-c' 'A-Z'
    ABCde
    [root@centos7 ~]# echo abcde |tr 'abc' 'A-Z'
    ABCde
    [root@centos7 ~]# echo abcde |tr 'abc' 'D-Z'
    DEFde
    [root@centos7 ~]# echo abcde |tr 'a-c' 'xyz'
    xyzde

    # 如果SET2对应的位数不及SET1时,会用SET2对应SET1对应的最后一位补全SET1替换位
    [root@centos7 ~]# echo abcde |tr 'abcde' 'xyz'
    xyzzz
    [root@centos7 ~]# echo abcde |tr 'abcd' 'xyz'
    xyzze

    # 将第一字符集对应的字符转化为第二字符集对应的字符。
    [root@centos7 ~]# echo abcde |tr -t 'abcd' 'xyz'
    xyzde

    # 用空格替换回车换行符
    [root@centos7 ~]# ls /root/ |tr ' ' ' '

    #处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格
    [root@centos7 ~]# echo "xt.,l 1 jr#'[:digit:]'mn2 c*/fe3 uz4" |tr -cd '[:digit:] '
    1 2 3 4

    #将PATH变量显示在独立的一行
    [root@centos7 ~]# echo $PATH
    /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@centos7 ~]# echo $PATH |tr ':' ' '
    /usr/lib64/qt-3.3/bin
    /usr/local/sbin
    /usr/local/bin
    /usr/sbin
    /usr/bin
    /root/bin

  • 相关阅读:
    ASP字符串16进制互转
    LINQ Dictionary加速查询(TryGetValue)
    ASP中将UTF8格式的URL进行解码。函数
    C# 保护进程不被结束(源代码)防任务管理器结束进程
    用WebBrowser做web 打印时的权限不足。。。。
    .net 2.0 中 ‘注册为 allowDefinition='MachineToApplication' 的节是错误的’
    sql 2005 中分页
    BitComet web 插件和 flash get web 插件 对脚本的影响
    同时使用 C# and VB.NET 在 .net 2.0 中
    用触发器实现主从表关系(主表更改从表更改 )
  • 原文地址:https://www.cnblogs.com/Link-Luck/p/9849279.html
Copyright © 2011-2022 走看看