note_4.2_Shell

note_4.2_Shell_第1张图片

命令历史:shell进程会其会话中保存此前用户提交执行过的命令;
~]# history
定制history的功能,可通过环境变量实现:

  • HISTSIZE:shell进程可保留的命令历史的条数;
  • HISTFILE:持久保存命令历史的文件;
    .bash_history
  • HISTFILESIZE:命令历史文件的大小;

命令用法:

    history [-c] [-d 偏移量] [n] 
    或 history -anrw [文件名] 
    或 history -ps 参数 [参数...]
        -c: 清空命令历史;
        -d offset:删除指定命令历史
        -r: 从文件读取命令历史至历史列表中;
        -w:把历史列表中的命令追加至历史文件中;
    history n:显示最近的n条命令;

调用命令历史列表中的命令:
!#:再一次执行历史列表中的第#条命令;
!!:再一次执行上一条命令;
!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;

注意:命令的重复执行有时候需要依赖于幂等性;

调用上一条命令的最后一个参数:
快捷键:ESC, .
字符串:!$

note_4.2_Shell_第2张图片

控制命令历史记录的方式:
环境变量:HISTCONTROL
ignoredups:忽略重复的命令;
ignorespace:忽略以空白字符开头的命令;
ignoreboth:以上两者同时生效;

修改变量的值:
NAME='VALUE'


bash的基础特性

命令补全:

shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令;

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

给定的打头字符串如果能惟一标识某命令程序文件,则直接补全;
不能惟一标识某命令程序文件,再击tab键一次,会给出列表;

路径补全:

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

  • tab:
    如果能惟一标识,则直接补全;
    否则,再一次tab,给出列表;

目录管理类的命令:

mkdir, rmdir

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


mkdir不存在路径
        mkdir [OPTION]... DIRECTORY...
            -p: 自动按需创建父目录;
            -v: verbose,显示详细过程;
            -m MODE:直接给定权限;
rmdir:remove empty directories(必须是空目录)
        rmdir [OPTION]... DIRECTORY...

            -p:删除某目录后,如果其父目录为空,则一并删除之;
            -v: 显示过程;
note_4.2_Shell_第3张图片
mkdir、rmdir

问题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:

回答2:

问题3:创建如下目录结构:

        /tmp/mysysroot/
            |-- bin
            |-- etc
            |   `-- sysconfig
            |       `-- network-scripts
            |-- sbin
            |-- usr
            |   |-- bin
            |   |-- lib
            |   |-- lib64
            |   |-- local
            |   |   |-- bin
            |   |   |-- etc
            |   |   |-- lib
            |   |   `-- sbin
            |   `-- sbin
            `-- var
                |-- cache
                |-- log
                `-- run

回答3:[root@localhost ~]# mkdir -p /tmp/mysysroot/{bin,etc/sysconfig/network-scripts,sbin,usr{bin,lib,lib64,local/{bin,etc,lib,sbin},sbin},var/{cache,log,run}}

note_4.2_Shell_第4张图片

tree命令:
    tree [options] [directory]
        -L level:指定要显示的层级;

bash的基础特性:命令的执行状态结果

    命令执行的状态结果:
        bash通过状态返回值来输出此结果:
            成功:0
            失败:1-255

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

    命令正常执行时,有的还回有命令返回值:
        根据命令及其功能不同,结果各不相同;

    引用命令的执行结果:
        $(COMMAND)
        或`COMMAND`

bash的基础特性:引用

    强引用:''
    弱引用:""
    命令引用:``

bash基础特性:快捷键

    Ctrl+a:跳转至命令行行首
    Ctrl+e:跳转至命令行行尾

    Ctrl+u:删除行首至光标所在处之间的所有字符;
    Ctrl+k:删除光标所在处至行尾的所有字符;

    Ctrl+l:清屏,相当于clear

文件查看类命令:cat, tac, head, tail, more, less

分屏查看命令:more和less

    more命令:
        more FILE
            特点:翻屏至文件尾部后自动退出;

    less命令:
        less FILE

    head命令:
        查看文件的前n行;
            head [options] FILE
                -n #
                -#

    tail命令:
        查看文件的后n行;
            tail [options] FILE
                -n #
                -#
                -f:查看文件尾部内容结束后不退出,跟随显示新增的行;

    stat命令:
        stat - display file or file system status

        stat FILE...

        文件:两类数据
            元数据:metadata
            数据: data

        时间戳:
            access time:2015-12-10 16:12:22.776423693 +0800
            modify time:2015-12-10 16:12:22.776423693 +0800
            change time:2015-12-10 16:12:22.776423693 +0800

    touch命令:
        touch - change file timestamps

        touch [OPTION]... FILE...
            -c: 指定的文件路径不存在时不予创建;
            -a: 仅修改access time;
            -m:仅修改modify time;
            -t STAMP
                [[CC]YY]MMDDhhmm[.ss]

文件管理工具:cp,mv,rm

cp命令:copy

源文件;目标文件;

       单源复制:cp [OPTION]... [-T] SOURCE DEST
       多源复制:cp [OPTION]... SOURCE... DIRECTORY
                 cp [OPTION]... -t DIRECTORY SOURCE...

        单源复制:cp [OPTION]... [-T] SOURCE DEST
            如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;
            如果DEST存在:
                如果DEST是非目录文件:则覆盖目标文件;
                如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;

        多源复制:cp [OPTION]... SOURCE... DIRECTORY
                  cp [OPTION]... -t DIRECTORY SOURCE...

            如果DEST不存在:错误;
            如果DEST存在:
                如果DEST是非目录文件:错误;
                如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;

        常用选项:
            -i:交互式复制,即覆盖之前提醒用户确认
            -f:强制覆盖目标文件
            -r, -R:递归复制目录
            -d:复制符号链接文件本身,而非其指向的源文件
            -a:-dR --preserve=all, archive,用于实现归档
            --preserv=
                mode:权限
                ownership:属主和属组
                timestamps: 时间戳
                context:安全标签
                xattr:扩展属性
                links:符号链接
                all:上述所有属性

mv命令:move
       mv [OPTION]... [-T] SOURCE DEST
       mv [OPTION]... SOURCE... DIRECTORY
       mv [OPTION]... -t DIRECTORY SOURCE..         

       常用选项:
            -i:交互式;
            -f:force

rm命令:remove
        rm [OPTION]... FILE...

        常用选项:
            -i:interactive
            -f:force
            -r: recursive

            删除目录:rm -rf PATH_TO_DIR

                危险操作:rm -rf 

变量:

    命名的内存空间;
        变量类型:
            字符型:
            数值型
                精确数值:
                近似数值:

            存储格式、数据范围、参与运算;

你可能感兴趣的:(note_4.2_Shell)