bash基础特性

Linux系统上的文件类型:

  1. -:常规文件,即f
  2. d:directory,目录文件
  3. b:block device,块设备文件[已block为单位,支持随机访问]
  4. c:character device, 字符设备[已character,支持线性访问]
    major number: 主设备号,标识设备类型,进而确定要加载的驱动程序
    minor number: 次设备好,标识同一种类型中的不同设备
    早期设备号是8位二进制(0-255)表示,现在好像是16位
  5. symbolic link:符号链接文件
  6. p:pipe命名管道,
  7. s:socket 套接字文件

基本命令:
  命令类型:
    外部命令:文件系统有与之对应的二进制执行程序
    内部命令: 一般是shell自带
    type COMMAND:
      内部:buildin
      外部:显示为命令文件路径;
        注意:命令还可以有别名,别名可以与原名相同,此时原名被隐藏。此时如果需要运行原命令,则使用\COMMAND
    命令别名:
      获取所有命令的别名:
        alias
      定义别名:
        alias NAME='COMMAND'
        注意:进对当前shell有效
      撤销别名:
        unalias NAME
    which命令:
      显示命令绝对路径
      which --skip-alias 忽略别名
    whereis命令:
      显示命令地址,man手册地址
      whereis -b 仅搜索二进制程序路径
      whereis -m 仅搜索使用手册文件路径
    who命令:
      显示谁在登录
      who -b 系统此次启动的时间
      who -r 运行级别
    w命令:
      增强版的who命令


bash的基础特性

  1. 命令历史:shell进程会在会话中保存此```
    本地初始化的项目 与 github 版本不一致, 导致无法提交

$ git pull origin master

  • branch master -> FETCH_HEAD
    fatal: 拒绝合并无关的历史
    解决方法

在pull 时候, 添加–allow-unrelated-histories参数 即可.

$ git pull origin master --allow-unrelated-histories
来自 https://github.com/itaken/python-login-demo

  • branch master -> FETCH_HEAD
    Merge made by the 'recursive' strategy.
    LICENSE | 21 +++++++++++++++++++++
    1 file changed, 21 insertions(+)
    create mode 100644 LICENSE
    -  history  历史命令列表
    - 定制history功能,可通过环境变量实现
        - HISTSIZE : shell 进程可保留的命令历史的条数
        - HISTFILE : 保留历史记录的文件
        - HISTFILESIZE : 文件的大小
    -  命令语法
        - history [-c] [-d 偏移量] [n] 
        -  history -anrw [文件名] 
        - history -ps 参数 [参数...]
        - -c: 清空命令历史
        - -d offset: 删除指定历史命令
        - -r: 从文件读取历史命令至历史列表中
        - -w: 把历史列表中的命令追加至历史文件中
        - history n:显示最近的n条命令
    - 使用历史列表中的命令
        - !n : 使用历史列表中的第n条命令(中间没有空格)
        - !! : 在一次执行上一次命令
        - **!STRING** : 再一次执行命令列表中最近一个与STRING开头的命令
        - **注意命令的重复执行有时需要幂等性支持**
    - 调用上一条命令最后一个参数
        - **esc+.** 
        - **!$**
        - **alt+.**
    - 控制命令历史记录的方式:
        - HISTSCONTROL : 
            - ignoredups: 忽略重复的命令
            - ignorespace: 忽略已空白字符的命令
            - ignoreboth: 以上两者同时生效
    - 修改环境变量的值
        - NAME='value' 该方式仅对当前进程有效
2. 命令补全
3. 目录管理命令
    - mkdir: make dir
        - -p : 自动按需创建父目录
        - -v :   显示详细创建过程
        - -m : 设置权限
    - rmdir : remove empty directories
        - -p : 删除某目录后,如果其父目录为空则一并删除
        - -v : 显示详细过程
    - 问题1:如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a ,tmp/x/y1/b
    - 问题2:如何创建 a_c, a_d, b_c, b_d;
---
###bash 基础特性:命令行展开
- ~ : 自动展开为用户的家目录,或制定用户的家目录
- {} : 可承载已逗号分割的路径列表,并能够展开为多个路径,花括号还可以嵌套
    - 例如: /tmp/{a,b}    相当于 /tmp/a       /tmp/b
- 问题1: mkdir -pv /tmp/x/{y1/{a,b},y2}
- 问题2:mkdir -pv {a,b}_{c,d}
- 问题3:创建如下目录结构:
    - /tmp/mysysroot/
        - bin
        - sbin
        - etc
            - sysconfig
                - network-scripts
        - usr
            - bin
            - sbin
            - local
                - bin
                - sbin
                - etc
                - lib
            - lib
            - lib64
        - var
            - cache
            - log
            - run

mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}
tree /tmp/mysysroot

tree : 显示目录树状结构
---
bash 基础特性:命令的执行状态结果
- 命令执行的状态结果
    - bash通过状态返回值来输出此结果
        - 成功: 0
        - 失败: 1-255
    - 命令完成之后,其状态返回值保存于bash的特殊变量$?中;  
- 命令正常执行时,有的还会有命令返回值
    - 根据命令及功能不同,结果各不相同
- 引用命令的执行结果
    - $(COMMAND)
    - 或 `COMMAND`
---
### bash 基础特性:引用
- 强引用: ''   ,其内部的任何子串都直接显示
- 弱引用:""  , 进行变量替换
- 命令引用: ``或$()
---
### bash 基础特性:快捷键
- ctrl + a: 跳转至命令行首部
- ctrl + e: 跳转至命令行尾部
- ctrl + u: 删除命令行首至光标处所有内容
- ctrl + k: 删除命令行尾至光标出所有内容
- ctrl + l : 清屏
---
### bash基础特性 globing: 文件名通配
- 一种匹配模式 : 元字符
    - * : 匹配任意长度的任意字串
    - ? : 匹配
    - [] : 匹配指定范围内的任意单个字符
        - 有几种特殊格式
            - [a-z] , [A-Z]:  默认不区分大小写
            - [0-9] : 所有数字
            - [a-z0-9] : 所有数字和字母
            - [[:upper:]] : 所有大写字母    **外城中括号表示范围,与上面三个例子中括号意思一致**
            - [[:lower:]] : 所有小写字母
            - [[:alpha:]] : 所有字母
            - [[:digit:]] : 所有数字
            - [[:alpha:][:digit:]] : 所有数字和所有字母
            - [[:alnum:]] : 所有数字和所有字母
            - [[:space:]] : 所有空白字符
            - [[:punct:]] : 所有标点符号
    - [^] : 匹配指定范围外的任意单个字符
        - 例如: [^[:upper:]] : 匹配大写字母之外的所有字符;[^0-9] : 匹配所有数字之外的所有字符、 [^[:alnum:]] : 匹配所有非正常字符的任意字符
    - 练习
        1. 显示/var 目录下所有l开头,已一个小写字母结尾,且中间出现一位任意字符的文件或目录
        2. 显示/etc目录下已任意一位数字开头,且已非数字结尾的文件或目录
        3. 显示/etc目录下已非字母开头,后面根一个字母及其它任意长度任意字符的文件或目录
        4. 复制/etc目录下所有已m开头已非数字结尾的文件或目录,至/tmp/xiang目录
        5. 复制/usr/share/man 目录下所有已man开头,后跟一个数字结尾的文件或目录至/tmp/man目录下
        6. 复制/etc目录下所有已.conf结尾且已m、n、r、p开头的文件或目录至/tmp/conf.d/目录下
        ---
        1. ls -d /var/l?[[:lower:]]
        2. ls /etc/[0-9]*[^0-9] 或者 ls /etc/[0-9]*[^[digit]]
        3. ls /etc/[^[:alpha:]][[:alpha:]]* -d  或 ls /etc/[^a-z][a-z]*
        4. cp /etc/m*[^[:digit:]] -r /tmp/benbenxiang
        5. cp /usr/share/man/man[0-9] -r /tmp/benbenxiang/
        6. cp /etc/[mnrp]*.conf -r /tmp/benbenxiang/conf.d/
    ---
### bash基础特性:IO重定向及管道
程序:指令+数据
可用于输入的设备:
    文件、键盘设备、网卡等
可用于输出的设备:
    文件系统上的常规文件、网卡等。
程序有三种数据流:
    输入的数据流: <-- 标准输入(stdin), 默认情况是键盘
    输出数据流: --> 标准输出(stdout),默认显示器
    错误输出流: --> 错误输出(stderr),默认显示器

fd file descriptor: 文件描述符
    标准输入:0
    标准输出:1
    错误输出:2

**IO重定向**
    输出重定向:>  
          特性:覆盖输出重定向
    输出重定向:>>
        特性:追加输出
    set -C : 仅对当前进程有效
        禁止覆盖输出重定向至已存在的文件
     强行覆盖输出: >|
    set +C : 关闭上述特性
    错误输出重定向(覆盖):2> 
    错误输出重定向(追加):2>> 

    合并正常输出流和错误输出流
         (1):&> (覆盖)或 &>> (追加)
         (2)  :COMMAND > /path/somefile 2>&1
          :COMMAND >> /path/somefile 2>&1

        特殊设备: /dev/null   :数据黑洞

    输入重定向:< 
    tr 命令
        tr [option]... SET1 [SET2]
            吧输入的数据当中的自负,凡是在SET1定义范围内出现的,统统对位转换为SET2出现的字符。
        用法1:
            tr SET1 SET2 < /PATH/FROM/SOMEFILE
        用法2:
            tr -d SET1 < /PATH/FROM/SOMEFILE
            **注意: 不修改源文件**
     << : Here Document (此处创建文档)
        cat << EOF ... EOF
        cat > /PATH/TO/SOMEFILE << EOF ... EOF

    管道:  链接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
         COMMAND | COMMAND2 | COMMAND3 | ...

        tee命令:COMMAND | tee /PATH/TO/SOMEFILE | tr 'a-z' 'A-Z'
            tee将输入流输出一份到文件,并且又输出一份到管道。

    练习1: 把/etc/passwd文件的前6行的信息转换为大写字母并输出
     head -n 6 /etc/passwd | tr 'a-z' 'A-Z'
**命令总结:tr tee**












你可能感兴趣的:(bash基础特性)