bash的功能

    • 历史命令
    • 命令补全与文件补全 一个字母后是命令补全 2 个字母是文件补全
    • 别名
    • shell脚本、
    • 通配符

    使用命令 type 查询 命令是是否为bash 的内置命令

    1. [root@ds ~]# type cd
    2. cd is a shell builtin
    3. [root@ds ~]# type locate
    4. locate is hashed (/bin/locate)

    内置命令 有 cp cd ls
    变量
    unset 命令取消设置的命令
    tips: 父进程设置的变量子进程是不存在的无法使用的
    父进程的环境变量子进程是可以使用的
    特殊符号
    “ “ 双引号中的特殊符号可以保留 例如 PATH=”$PATH”:/root
    ` 反引号中可以填入命令 例如 PATH="$PATH":ls -l <br />tips:我们一般都是用 $( ls -l ) 不使用ls-l`
    env 命令查询所有的环境变量
    set 查询所有的变量 包括环境变量
    几个特殊的变量

    1. PATH环境变量 echo $PATH
    2. PSI 变量 echo $PS!
    3. 语系变量 locale 命令

    系统默认的语系 放在 /etc/locale.conf
    linux 终端是无法显示中文这样复杂的编码文字的 设置了中文也没用
    想要中文的话需要安装一些中文界面的软件

    1. 位置变量 $? $1 $2 $3

      echo $?
      export 将自定义变量 转化为 环境变量
      ①export + 变量ID
      myname=ds
      export myname
      ② export 后边不跟 显示所有的环境变量
      read 命令 人机交互输入命令
      read -p “pelase input word “ -t 30 name
      -p 提示 信息 -t 等待30s
      输入的内容 就是变量name 的内容
      declare 命令 声明变量类型
      declare 啥不跟 跟set命令 一样
      declare -x myname
      把myname 设置为环境变量
      declare -i sum=100+200+300
      默认输出 sum=100+200+300 结果还是100+200+300
      因为 linux 默认变量内容为字符串
      声明为整数之后 就会显示出 600 linxu 默认的数值运算之能到整数
      所以 1/3=0 !!
      还有数组 类型 以及别的 你可以
      declare —help
      ulimit 限制用户资源的 比如开启的文件数 cpu的使用时间
      ulimit —help 查看
      命令别名
      alias unalias 设置、取消
      history 历史命令
      bash操作环境
      1.命令查找顺序
      绝对/相对路径 —> alias —> bash内置命令 —> PATH
      例子 ls 有颜色 /bin/ls 没有颜色
      因为 默认的 ls 加了别名
      2.bash的登陆与欢迎信息
      /etc/issue /etc/motd
      本地终端 | 远程登录
      直接去看配置文件
      3.bash 加载过程
      image.jpeg
      我们的Bash加载过程 分为 login shell 和 non-login shell
      这两个 加载的配置文件是不一样的
      /etc/profile 这个文件是 login shell 文件会读取的
      然后会调用一系列的文件 和脚本 来定义 你的字符 别名变量等内容
      然后回去读取
      ~/bash.profile
      ~/.bash_login
      ~/.profile
      .bashrc 这个文件 是 non-login shell 会读取的
      只会读取这个文件 这个文件 会调用 /etc/bashrc文件
      这个文件定义了命令提示符 如果你的命令提示符无法正常显示
      就是你把这个文件给删除了
      特殊的文件
      ~/.bash_logout 这个是注销bash之后系统帮我做完什么之后在离开

    数据流 重定向
    标准输入 代码0 表示 < << 覆盖|追加
    标准输出 代码1 表示 > >> 同理
    标准错误输入 代码2 使用 2> 2>>
    使用范例
    find /home -name .bashrc > list_right 2> list_error
    #将正确和错误信息 分开
    例2
    find /home -name .bashrc 2> /dev/null
    #把错误的信息 丢掉只显示正确输出的信息到屏幕上
    要求: 将正确和错误数据都写入一个文件中
    1)find /home -name .bashrc > list 2> list
    2)find /home -name .bashrc 2>&1 list
    3) find /home -name .bashrc >& list
    第一种写法 是错误的 因为他会让正确的和错误的交叉写入配置文件中
    不是原来格式的输出信息 会造成次序的错乱
    第2和3中 是正确的 我们一般使用 2>&1 的形式
    #这个可以这么理解 吧错误信息转为正确信息
    同理 也有把正确信息 转为错误信息 1>&2
    例子:

    [root@ds ~]# echo dsdsds 1>&2 
    dsdsds
    [root@ds ~]# echo dsdsds 2> /dev/null  1>&2 
    [root@ds ~]# echo dsdsds 2> /dev/null
    


    命令执行判断的依据
    ; && ||
    例子:

    ls /root/ds  ||  mkdir  /root/ds   &&  touch  /root/ds/ss
    

    管道命令

    1.管道符只会 处理标准正确输出的命令 不会处理错误输出的命令
    我们可以使用上边的 2>&1 来吧错误命令转化为 标准正确输出命令 就可以识别

    2.选取命令
    cut grep
    cut
    例子:

    [root@ds ~]# echo ${PATH} |  cut -d ':'  -f  5
    /usr/sbin
    

    以: 为分隔符 取出第5段的内容
    # -d 指定分隔符
    #-f 取出第几段 和 -d 配合使用

    export | cut -c 12-
    #取得12个字符之后的内容
    export | cut -c 12-20
    #取得12-20个字符的内容

    grep
    选项 -n -i -v 输出行号|忽略大小写|取反

    3.排序命令
    sort wc uniq
    sort
    -n -k -t 按数字 | 哪个区间 | 分隔符

    [root@ds ~]#  cat  /etc/passwd  |  sort  -t   ':'  -k   3  -n  
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    

    吧第三段按照数字的大小排序 这个文件下

    wc
    默认显示 行 字数 字符数
    对应 选项 -l -w -m

    双向从定向 tee
    选项 -a
    不加-a 就是 > 加了就是 >>
    例子:
    cat /etc/passwd | grep root | tee -a ./testhome | more
    #保存一份在使用more

    4.字符转换命令
    tr col join paste ecpand
    有需要自己查看 不在详解

    5.划分命令 split

    6.参数代欢 xargs
    cat /etc/passwd | cut -d ‘:’ -f 1 | head -n 3 | xargs id
    #id命令只能一次接受一次参数 我们需要吧参数分隔开 一个给id一个参数
    这就是这个命令作用
    find /usr/sbin -perm /7000 | xargs ls -l
    或者 ls -l $( find /usr/sbin -perm /7000 )
    ls -l 一次也只能接受一个参数



    鸟哥 重点回顾

    1. 由于核心在内存中是受保护的区块,因此我们必须要通过“ Shell ”将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作
    2. 学习 shell 的原因主要有:命令行的 shell 在各大 distribution 都一样;远端管理时命令行 速度较快; shell 是管理 Linux 系统非常重要的一环,因为 Linux 内很多控制都是以 shell 撰写的。
    3. 系统合法的 shell 均写在 /etc/shells 文件中;
    4. 使用者默认登陆取得的 shell 记录于 /etc/passwd 的最后一个字段;
    5. bash 的功能主要有:命令编修能力;命令与文件补全功能;命令别名设置功能;工作控 制、前景背景控制;程序化脚本;万用字符
    6. type 可以用来找到执行指令为何种类型,亦可用于与 which 相同的功能;
    7. 变量就是以一组文字或符号等,来取代一些设置或者是一串保留的数据
    8. 变量主要有环境变量与自订变量,或称为全域变量与区域变量
    9. 使用 env 与 export 可观察环境变量,其中 export 可以将自订变量转成环境变量;
    10. set 可以观察目前 bash 环境下的所有变量;
    11. $? 亦为变量,是前一个指令执行完毕后的回传值。在 Linux 回传值为 0 代表执行成功;
    12. locale 可用于观察语系数据;
    13. 可用 read 让使用者由键盘输入变量的值
    14. ulimit 可用以限制使用者使用系统的资源情况
    15. bash 的配置文件主要分为 login shell 与 non-login shell。login shell 主要读取 /etc/profile

    与 ~/.bash_profile, non-login shell 则仅读取 ~/.bashrc

    1. 在使用 vim 时,若不小心按了 [crtl]+s 则画面会被冻结。你可以使用 [ctrl]+q 来解除冻结
    2. 万用字符主要有: *, ?, [] 等等
    3. 数据流重导向通过 >, 2>, < 之类的符号将输出的信息转到其他文件或设备去;
    4. 连续命令的下达可通过 ; && || 等符号来处理
    5. 管线命令的重点是:“管线命令仅会处理 standard output,对于 standard error output 会 以忽略” “管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理 才行。”
    6. 本章介绍的管线命令主要有:cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs 等。