Linux学习文档(2):Linux的Bash特性(1)

Bash的基础特性(1)

(1)命令历史
    history
        环境变量:
            $HISTSIZE:命令历史记录的条数
            $HISTFILE:~/.bash(用户的家目录)
            $HISTFILESIZE:命令历史文件记录历史的条数
    删除历史:
        history 
                -d 要删除的第几条
                -c:清空历史
    显示历史
        数字:显示历史中最近的多少条命令        
    手动追加历史
        -a:手动追加会话缓冲区中的命令历史至命令历史文件中
    调用历史
        !#:调用历史中的第#条指令(#代表数字)
        !!:执行上一条指令
        !string:最近一个以"string"开头的指令
    调用上一条命令的最后一个参数
        !$或者ESC+.(ESC键和点一起按)
    控制命令历史的记录方式
        环境变量:HISTCONTROL
            ignoredups(忽略连续且重复的命令,变量的默认值)
            ignorespace(忽略以空白开头的命令)
            ignoreboth(以上两种都生效)
    变量赋值的方法export 变量名=变量值
        变量赋值:把赋值符号后面的数据存储于变量名指向内存空间,只对当前shell有效
            export HISTCONTROL=ignorespace(忽略以空白开头的命令)
            export HISTCONTROL=ignoreboth(忽略连续且重复的命令同时忽略以空白开头的命令)

(2)命令补全
    直接补全:用户给定的字符串只对应唯一的一条命令
    列表显示:以用户给定的字符串对应的命令不唯一,按两下"Tab"键就会列出,如下图所示

这里写图片描述

bash执行命令过程(bash补全也是按照如下这种过程):
    内部命令:当你键入一个命令并且执行的时候,系统会首先判断是否为内部命令,如果是就直接执行
    外部命令:如果不是内部命令,就根据$PATH环境变量定义的路径,从左向右在每个路径下搜寻用户给定的命令名命名的文件,第一
    次找到的则是要执行的文件

(3)路径补全
    把用户给出的字符串当做路径的开头,并在指定的上级目录下搜寻以指定字符串开头的文件名,如果唯一,直接补全,否则还是两
    次"Tab"键给出列表

(4)命令行展开
    ~:展开为用户的家目录
    ~USERNAME:展开为指定用户的家目录
    {}:可承载一个以逗号分隔的列表,并将其展开为多个路径
        /tmp/{a,b} = /tmp/a,/tmp/b
        /tmp/{tom,jerry}/hi = /tmp/tom/hi,/tmp/jerry/hi
(5)命令执行结果状态
        成功
        失败

        bash使用特殊变量"$?"保存最近一条命令的执行状态结果
        0:成功
        1-255:失败
        echo $? 获取上一条指令的执行结果状态
    程序执行有两类结果:
        程序的返回值:结果
        程序的运行状态结果:成功/失败

这里写图片描述

目录管理类命令:

ls(查看目录下内容,以下选项只是我常用的,还有部分没写,到时可以查帮助)
    -l或ll:显示目录下文件的详细信息
    -a:显示所有文件包括隐藏文件
    -d:显示当前目录下的目录
pwd(显示当前所在位置)
cd(进入目录)
    -:回到上一个所在目录
    ..:向前返回一次
    /PATH:进入指定的绝对路径下
tree(列出目录的树形结构)
    -d:仅以树状结构显示目录
    -L level:限制层级,后面跟数字

mkdir [options] /path 
    -p:如果目标父级目录不存在,就需要使用此选项,在创建目标的过程中同时创建父目录,如果目录已存在也不会报错采取不处理
    -v:显示详细创建过程
    -pv:两个命令结合起来使用
    -m MODE:创建目录时直接指定权限,后面会写权限的文章

rmdir:只能删除空目录
    rmdir [option]...DIRECTORY...
        -v:显示过程

练习:

    (1)如何创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b,/tmp/x/y2/a,/tmp/x/y2/b
        解:(1)mkdir /tmp/x/{y1,y2}/{a,b}
           (2)mkdir /tmp/x/y1 /tmp/x/y2 /tmp/x/y1/a /tmp/x/y1/b /tmp/x/y2/a /tmp/x/y2/b

这里写图片描述

    (2)如何创建x_m,y_m,x_n,y_n
        解:mkdir x_{m,n} y_{m,n}

这里写图片描述

    (3)如何创建/tmp/bin,/tmp/sbin,/tmp/usr,/tmp/usr/bin,/tmp/usr/sbin
        解:mkdir /tmp/{bin,sbin,usr/{bin,sbin}} -pv

这里写图片描述

文本文件查看类命令:

cat,tac
more,less,tail,head

more [OPTION...] FILE...
    -d:显示翻页和退出提示
        空格向后翻篇
        q:退出
        b:倒退一篇,翻到尾部就无法倒退了
less
    less [OPTION...] FILE
head
    -c #:指定获取前#个字节
    -n #或-#:指定获取前#行
tail
    -c #:指定获取后#个字节
    -n #或-#:指定获取后#行
    -f:跟踪指定文件新追加进来的行

文件的时间戳管理工具

touch

文件:metadata,data
    查看文件状态:stat

    三个时间戳:
        access time:最近一次访问时间,简写为atime,读取文件内容
        modify time:最近一次修改时间,简写为mtime,改变文件内容(数据)
        change time:最近一次修改时间,简写为ctime,元数据发生改变

    touch [OPTIONS]...FILES...
        -a:只改访问时间戳,默认会改为执行命令时的时间
        -m:只改mtime时间戳,默认会改为执行命令时的时间
        -t STAMP:自己指定要改为的时间戳
            [[CC]YY]MMddhhmm[.ss](时间格式):年月日小时分钟秒
                例子:touch -m -t 201807121512.50 test.txt
        -c:如果后方文件存在,则touch时间戳,如果不存在也不创建

猜你喜欢

转载自blog.csdn.net/kaikai0720/article/details/81016702