zoukankan      html  css  js  c++  java
  • bash小结

    context:CentOS

    什么是shell?

      shell就是与计算机交互的接口。

    linux支持的shell

    [root@node1 ~]# cat /etc/shells 
    /bin/sh      #被 /bin/bash 所取代
    /bin/bash      #Linux 预设的 shell
    /sbin/nologin    #特殊的shell
    /bin/dash
    /bin/tcsh      #整合 C Shell ,提供更多的功能
    /bin/csh       #被tcsh取代

    shell的功能:

    1. 历史命令查询功能:(history)(.bash_history 记录上次登录之前执行的命令,本次登录命令在内存中,注销时会刷入文件)
    2. 命令与文件补全功能 :(Tab)
    3. 命令别名设定功能: (alias)
    4. 工作控制、前景背景控制: (job control, foreground, background)
    5. 程序化脚本: (shell scripts)
    6. 通配符
    7. bash 的进站与欢迎讯息: /etc/issue, /etc/motd
    8. 终端机设定stty,set

    bash中指令的运行顺序

    1. 以相对/绝对路径执行指令,例如『/bin/ls 』或『./ls 』;
    2. 由 alias 找到该指令来执行;
    3. 由 bash 内建的 (builtin) 指令来执行;
    4. 透过 $PATH 这个变量的顺序搜寻到的第一个指令来执行

      

      ps:先alias,然后是$PATH中的/bin/ls。

      type -a CMD,查询命令是否为内建命令,同时它也指出了执行该命令时,去哪里寻找该命令路径的顺序。

    bash 的环境配置

    1.login和nolog

    • inlogin shell:

      取得 bash 时需要完整的登入流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登入,需要输入用户的账号与密码,此时取得的 bash 就称为login shell 

    • non-login shell:

      取得 bash 接口的方法不需要重复登入的举动,举例来说:
      (1)你以 X window 登入 Linux 后,再以 X 的图形化接口启动终端机,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 nologin shell 了。
      (2)你在原本的 bash 环境下再次下达 bash 这个指令,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 nologin shell 。

    2.login shell读取配置文件流程

      

    ps:

    1.  /etc/profile:这是系统整体的设定,你最好不要修改这个文件;
    2.  ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设定,你要改自己的数据,就写入这里!

     数据流重导向

    stdin   0  <  <<

    stdout   1  >  >>

    stderr    2  2>  2>>

    示例1:

    [root@node1 test]# ls
    a
    [root@node1 test]# cat a b
    1
    cat: b: No such file or directory
    [root@node1 test]# cat a b >stdout 2>stderr
    [root@node1 test]# ls
    a  stderr  stdout
    [root@node1 test]# cat std*
    cat: b: No such file or directory
    1
    [root@node1 test]# cat stderr
    cat: b: No such file or directory
    [root@node1 test]# cat stdout 
    1

    示例2:垃圾桶/dev/null

    [root@node1 test]# cat a b &>/dev/null 
    [root@node1 test]# cat a b >/dev/null 2>&1

    示例3:读取键盘输入

    [root@node1 test]# cat >catfile
    hello world
    what a good day!        #Ctrl+d结束输入
    [root@node1 test]# cat catfile 
    hello world
    what a good day!
    
    #eof取代信号
    [root@node1 test]# cat >catfile <<eof
    > Helo!
    > What a good day!
    > eof
    [root@node1 test]# cat catfile 
    Helo!
    What a good day!

    示例4:读取文件输入

    [root@node1 test]# cat >catfile <a
    [root@node1 test]# cat catfile 
    1
    [root@node1 test]# cat a
    1

    什么时候需要重定向?

    1. 屏幕输出的信息很重要,而且我们需要将他存下来的时候;
    2. 背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
    3. 一些系统的例行命令 (例如写在 /etc/crontab 中的文件) 的执行结果,希望他可以存下来时;
    4. 一些执行命令的可能已知错误讯息时,想以『2> /dev/null 』将他丢掉时;
    5. 错误讯息与正确讯息需要分别输出时。
  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/chbo/p/7064303.html
Copyright © 2011-2022 走看看