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

    bash的基础特性

    命令历史

    shell进程会记录用户提交执行过的命令

    可以是用history查看:

    复制代码
    [root@localhost dev]# history 
        1  ss -tnl
        2  ifconfig
        3  vi /etc/sysconfig/network-scripts/ifcfg-ens33 
        4  reboot 
        5  systemctl stop firewalld
        6  systemctl disable firewalld
        7  ifconfig
        8  ifconfig
        9  startx
       10  ping 114.114.114.114
       11  top
    ......
      140  who -b
      141  who -r
      142  date
      143  w
      144  history 
    复制代码

    定制history的功能

    HISTSIZE:shell进程可以保留的命令历史的条数

    [root@localhost dev]# echo $HISTSIZE
    1000

    HISTFILE:持久保存命令历史的文件,当退出登录的时候,此次的命令历史才会被写入到HISTFILE中

    [root@localhost dev]# echo $HISTFILE
    /root/.bash_history
    复制代码
    [root@localhost dev]# cat /root/.bash_history
    ss -tnl
    ifconfig
    vi /etc/sysconfig/network-scripts/ifcfg-ens33 
    reboot 
    systemctl stop firewalld
    systemctl disable firewalld
    ifconfig
    ifconfig
    startx
    ping 114.114.114.114
    top
    ifconfig
    ifconfig --help
    type ls
    type ifconfig
    ......
    bash
    export name
    echo $name
    bash
    复制代码

    HISTFILESIZE:命令历史文件的大小

    [root@localhost dev]# echo $HISTFILESIZE
    1000

    history常用命令用法

    -c:清空命令历史

    -d offset:删除指定命令历史,offset为指定的行数

    -r:从文件读取命令历史至历史列表中

    -w:把历史列表中的命令追加至历史文件中

    history #:显示最近的#条命令

    调用命令历史列表中的命令

    !#:再次执行历史列表中第#条命令

    !!:再一次执行上一条命令

    !STRING:再一次执行命令历史列表中最近一个以STRING开头的命令

    调用上一条命令的最后一个参数

    快捷键:按一下ESC再按点.

    或者使用字符串:!$

    控制命令的记录方式

    [root@localhost /]# echo $HISTCONTROL
    ignoredups

    ignoredups:忽略重复的命令;

    ignorespace:忽略以空白字符开头的命令;

    ignoreboth:以上两者同时生效;

    补全功能

    命令补全

    shell程序在接受到用户执行命令的请求时,最左侧的字符串会被当做命令

    命令查找机制:首先查找内部命令,根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名

    [root@localhost /]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

     使用Tab键补全

    路径补全

     在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下每个文件

    目录管理类命令

    mkdir

    make directories 创建目录

    mkdir [OPTION]... DIRECTORY...

    常用选项:

    -p:自动按需创建父目录

    [root@localhost tmp]# mkdir -p /tmp/x/y/z
    [root@localhost tmp]# cd /tmp/x/y/z/
    [root@localhost z]# 

     -v:显示详细过程,verbose

    [root@localhost z]# mkdir -pv /tmp/a/b/c
    mkdir: created directory ‘/tmp/a’
    mkdir: created directory ‘/tmp/a/b’
    mkdir: created directory ‘/tmp/a/b/c’

    -m MODE:直接给定权限

    注意:路径基名方为命令的作用对象,基名之前的路径必须得存在

    rmdir

    remove empty direcories

    移除空目录

    常用选项:

    -p:删除某目录后,如果其父目录为空,则一并删除之

    -v:显示过程

    [root@localhost b]# rmdir -pv /tmp/a/b/c/
    rmdir: removing directory, ‘/tmp/a/b/c/’
    rmdir: removing directory, ‘/tmp/a/b’
    rmdir: removing directory, ‘/tmp/a’
    rmdir: removing directory, ‘/tmp’
    rmdir: failed to remove directory ‘/tmp’: Device or resource busy

    命令行展开

    {}:可承载一个以逗号分隔的路径,并能够将其展开为多个路径

    例如:/tmp/{a,b}相当于 /tmp/a  /tmp/b

    例子:

    如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?

    [root@localhost tmp]# mkdir -p /tmp/x/{y1/{a,b},y2}

    如何创建a_c, a_d, b_c, b_d?

    [root@localhost tmp]# mkdir -p /tmp/{a,b}_{c,d}

     如何创建如下目录结构:

    复制代码
                /tmp/mysysroot/
                    |-- bin
                    |-- etc
                    |   `-- sysconfig
                    |       `-- network-scripts
                    |-- sbin
                    |-- usr
                    |   |-- bin
                    |   |-- lib
                    |   |-- lib64
                    |   |-- local
                    |   |   |-- bin
                    |   |   |-- etc
                    |   |   |-- lib
                    |   |   `-- sbin
                    |   `-- sbin
                    `-- var
                        |-- cache
                        |-- log
                        `-- run
    复制代码
    mkdir -p /tmp/mysysroot/{bin,etc/sysconfig/networkscripts,sbin,usr/{bin,lib,lib64,local/{bin,etc,lib,sbin},sbin},var/{cache,log,run}}

     tree

     可使用tree来查看目录的层级结构

     

    -L #,指定要显示的层级

     命令的执行状态结果

    bash通过状态返回值来输出此结果:

    成功:0

    失败:1-255

    命令执行完成之后,其状态返回值保存于bash的特殊变量$?中

    复制代码
    [root@localhost tmp]# ls /tmp/x/
    y1  y2
    [root@localhost tmp]# echo $?
    0
    [root@localhost tmp]# ls /tmp/y
    ls: cannot access /tmp/y: No such file or directory
    [root@localhost tmp]# echo $?
    2
    复制代码

    引用

     引用命令的执行结果:

     $(COMMAND)或者`COMMAND`

     

     强引用,单引号:

    [root@localhost ~]# echo '$PATH'
    $PATH

     弱引用,双引号:

    [root@localhost ~]# echo "$PATH"
    /usr/local/sbin:/usr/loca

    快捷键

    ctrl+a:跳转至命令行行首

    ctrl+e:跳转至命令行行尾

    ctrl+u:删除行首至光标所在处之间的所有字符

    ctrl+k:删除光标所在处至行尾的所有字符

    ctrl+l:清屏,相当于clear

    文件查看类命令

     cat

    cat [OPTION]... [FILE]...

    查看文件内容,直接显示到文件底部

    常用选项:

    -n:可以显示行数

    复制代码
    [root@localhost tmp]# cat /etc/passwd
    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
    ......
    gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
    avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    复制代码

    tac

    tac [OPTION]... [FILE]...

    反向查看文件内容

    复制代码
    [root@localhost tmp]# tac /etc/passwd
    tcpdump:x:72:72::/:/sbin/nologin
    avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
    ......
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    bin:x:1:1:bin:/bin:/sbin/nologin
    root:x:0:0:root:/root:/bin/bash
    复制代码

    more

     分屏查看文件内容

    head

    head  [OPTION]... [FILE]...

    查看文件的前n行,默认为前10行

    复制代码
    [root@localhost tmp]# head /etc/passwd
    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
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    复制代码
    常用选项:
    head -n  #:显示前#行或者是head -#

    tail

    查看文件的后n行

    tail  [OPTION]... [FILE]...

    复制代码
    [root@localhost tmp]# tail /etc/passwd
    colord:x:992:987:User for colord:/var/lib/colord:/sbin/nologin
    qemu:x:107:107:qemu user:/:/sbin/nologin
    setroubleshoot:x:991:986::/var/lib/setroubleshoot:/sbin/nologin
    rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    gdm:x:42:42::/var/lib/gdm:/sbin/nologin
    sssd:x:990:985:User for sssd:/:/sbin/nologin
    gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
    avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    复制代码

    常用选项:

    tail -n #:显示最后#行或者是tail -#

    -f:查看文件尾部内容,结束后不退出,跟随显示新增的行

    stat

    display file or file system status

    文件:两类数据

    元数据:metadata,文件的状态,创建时间,修改时间,大小,权限等

    数据:文件里面的内容

    复制代码
    [root@localhost tmp]# stat /etc/passwd
      File: ‘/etc/passwd’
      Size: 2235          Blocks: 8          IO Block: 4096   regular file
    Device: fd00h/64768d    Inode: 19840519    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: system_u:object_r:passwd_file_t:s0
    Access: 2017-07-06 09:25:43.555083116 -0400
    Modify: 2017-07-01 08:00:52.140151303 -0400
    Change: 2017-07-01 08:00:52.141154779 -0400
     Birth: -
    复制代码

    stat显示的就是文件的元数据,包含文件路径,大小,blocks数目,IO block,文件类型,inode号,权限,uid,gid和三个时间戳等

    三个时间戳:

    access:最近一次访问的时间

    modify:最近一次修改文件的时间

    change:文件最近一次改变的时间,即改变元数据的时间

    touch

    change file timestamps  修改时间戳

    touch [OPTION]... FILE...

    文件不存在则创建文件,当直接使用命令去touch一个文件的时候,修改的是所有的时间戳

    常用选项:

    -c:指定的文件路径不存在时不予以创建

    -a:仅修改access time

    -m:仅修改modify time

    -t   STAMP

           [[CC]YY]MMDDhhmm[.ss]

    (不能修改change time,只当元数据发生变化时,才会改变)

    复制代码
    [root@localhost tmp]# touch -t 201212121200.30  test.txt -m
    [root@localhost tmp]# stat test.txt 
      File: ‘test.txt’
      Size: 0             Blocks: 0          IO Block: 4096   regular empty file
    Device: fd00h/64768d    Inode: 17251556    Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: unconfined_u:object_r:user_tmp_t:s0
    Access: 2017-07-07 03:17:12.640883844 -0400
    Modify: 2012-12-12 12:00:30.000000000 -0500
    Change: 2017-07-07 03:19:17.667997201 -0400
     Birth: -
    [root@localhost tmp]# 
    复制代码

    文件管理工具

    cp

    复制文件或者目录

    单源复制:

    cp [OPTION]... [-T] SOURCE DEST

    如果DEST不存在,则先创建此文件,并复制源文件的数据流至DEST文件中

    如果DEST存在:

        如果DEST是非目录文件,则覆盖DEST文件

        如果DEST是目录文件,则在DEST目录下创建一个与源文件同名的文件,并复制其数据

    多源复制:

    cp [OPTION]... SOURCE... DIRECTORY
    cp [OPTION]... -t DIRECTORY SOURCE...

    如果DIRECTORY不存在,则报错

    如果DIRECTORY存在:

         如果DIRECTORY是非目录文件,则报错

         如果DIRECTORY是目录文件,分别复制每个文件至目标目录中,并保持原名

    常用选项:

    -i:交互式复制

    -f:强制覆盖目标文件

    -r,-R:递归复制目录

    -d:复制符号链接文件本身,而非指向的源文件

    -a:-dR --preserve=all, archive,用于实现归档;

    --preserv=

           mode:权限

            ownership:属主和属组

            timestamps: 时间戳

            context:安全标签

            xattr:扩展属性

            links:符号链接

            all:上述所有属性

    mv

    move

    移动文件,可用来重命名文件

    SYNOPSIS
           mv [OPTION]... [-T] SOURCE DEST
           mv [OPTION]... SOURCE... DIRECTORY
           mv [OPTION]... -t DIRECTORY SOURCE...

    常用选项:
    -i:交互式

    -f:强制覆盖文件

    rm

    remove

    移除文件

    rm [OPTION]... FILE...

    常用选项:

    -i:交互式移除文件

    -f:强制删除文件

    -r:递归删除

    注意:所有不用的文件建议不要直接删除,可以移动至某个专用的目录(用来做回收站的目录)

    Globbing

    文件名通配:是对整体文件名匹配,不是部分匹配

    匹配字符:

    *:匹配任意长度的任意字符

    ?:匹配任意单个字符

    [ ]:匹配指定范围内的任意单个字符‘

          [a-z],[A-Z],[0-9],[a-z0-9]   不区分大小写

          特殊格式:

         [[:upper:]]:所有大写字母

         [[:lower:]]:所有小写字母

         [[:alpha:]]:所有字母

         [[:digit:]]:所有数字

         [[:alnum:]]:所有的字母和数字

         [[:space:]]:所有空白字符

         [[:punct:]]:所有标点符号

    [^]:中括号加托字符,匹配指定范围外的任意单个字符

         [^0-9]:匹配数字之外的任意单个字符  

         [^[:upper:]]:匹配大写字母以外的任意单个字符

    练习:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录;

    ls -d /var/l?[[:lower:]]

     练习:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下;

    cp -r /etc/[mnrp]*.conf /tmp/conf.d/

    IO重定向及管道

    IO即输入和输出设备,可用于输入的设备一般有键盘、文件系统上的常规文件、网卡等,可用于输出的设备有显示器、文件系统上的常规文件、网卡等;

    程序的三种数据流:

    输入的数据流:标准输入(stdin),键盘;

    输出的数据流:标准输出(stdout),显示器;

    错误的输出流:错误输出(stderr),显示器;

    文件描述符:fd,file descriptor

    标准输入:0

    标准输出:1

    错误输出:2

     IO重定向

    输出重定向:

    >    覆盖输出

    >>    追加输出

    小特性:

    set -C:禁止覆盖输出重定向至已存在的文件

    set +C:开启覆盖输出重定向至已存在的文件(默认)

    错误输出重定向:

    2>    覆盖输出

    2>>    追加输出

    合并正常输出流和错误输出流

    1.

    &>    覆盖输出

    &>>    追加输出

    2.

    COMMADN > /PATH/TO/somefile  2>&1 :如果命令执行成功则覆盖输出至somefile,执行不成功也覆盖输出至somefile

    COMMAND >> /PATH/TO/somefile 2>&1:如果命令执行成功则追加覆盖至somefile,执行不成功也追加输出至somefile

    注意:特殊设备:/dev/null  当不需要命令的执行结果,只需要知道命令的执行状态,则可以重定向至/dev/null,/dev/null相当于一个垃圾桶。

    输入重定向:<

    Here Document:<<,可以作为指定文件的结束符,常用于shell编程

    [root@localhost tmp]# cat <<EOF
    > how are you
    > my name is Frank
    > EOF
    how are you
    my name is Frank

     tr

    tr [OPTION]... SET1 [SET2]

    把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符,不修改原文件

    用法1: tr SET SET2 < /PATH/FROM/SOMEFILE  

     

    用法2:tr -d SET1  <  /PATH/FROM/SOMEFILE     删除SET1中的字符,区分大小写

     

    管道

    连接程序,实现将前面一个命令的输出直接定向后一个程序当做输出数据流

    COMMAND1 | COMMAND2 | COMMAND3 ...

    [root@localhost tmp]# echo 'abcd' | tr 'a-z' 'A-Z' | tr -d 'AD' 
    BC
    tee

     显示程序的输出并将其复制到一个或多个文件中

    [root@localhost tmp]# echo 'abcd' | tee /etc/fstab | tr 'ab' 'AB' 
    ABcd
    [root@localhost tmp]# cat /etc/fstab 
    abcd

     如上例子,使用tee命令输出到/etc/fstab,又将标准输入作为了后面tr的输入。

     
    分类: Linux
    标签: bash特性
  • 相关阅读:
    [ZT]SAP ECC5.0 Working Log TO 2008.5.26
    VS错误:Lc.exe 已退出错误 返回代码 1
    如何实现两个数据库的同步?
    sp_configure 'max server memory'
    [轉]中国油价世界最高 是美国7倍!
    C#WinForm App自动更新(Live Update)架构
    利用批處理自動在異地備份數據庫
    18种根据屏幕字段查找潜在数据的技巧
    [ZT]2008年到校园招聘各企业待遇曝光
    吉祥物由于具有商业气息,所以历届奥运会吉祥物都没有出场。
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/7146866.html
Copyright © 2011-2022 走看看