Shell基础知识

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell基础知识相关的知识,希望对你有一定的参考价值。

shell介绍:

    shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取。通过用户输入命令,和内核进行沟通!简单点理解就是:用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

    shell只是系统的一个工具,是系统跟计算机硬件交互时使用的中间介质。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。

    shell有bash、zsh、ksh等;而centos7默认使用的是Bourne agin shell,也就是bash。

命令历史:
    我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。

    如果你要修改记录的最大值,需要在/etc/profile文件中修改变量HISTSIZE;如果你还想记录输入命令的时间,可以在/etc/profile文件添加HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "。当然如果你想永久保存所有的命令历史:chattr +a ~/.bash_history

    技术分享图片

    与命令历史有关的特殊字符"!":

        !! 表示执行上一个指令;

        !n 这里的n是数字,表示执行命令历史中第n条指令,例如 !1002 表示执行命令历史中第1002个命令;

        !word (word大于等于1),例如 !pw 表示执行命令历史中最近一次以 ‘pw’ 为开头的指令。

命令补全和别名:

    命令补全:使用tab键;按一下tab键是补全命令或路径,按两下tab键是列出所有匹配的命令。若想参数补全的话,需要yum安装bash_completion

    alias别名:alias [命令别名]=['具体的命令'];这样可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。解除别名命令:unalias [命令别名]。

    技术分享图片

    注意:每个用户都有自己的配置别名文件:~/.bashrc,所以用户自定义的alias应该放在此文件;系统内置的别名一般在/etc/profile.d/目录下。

通配符:

    在bash下,可以使用 * 来匹配零个或多个字符,而用 ? 匹配一个字符。还有[0-9]匹配个位数字,{1,2}匹配1和2 等等的使用

    技术分享图片

输入输出重定向:

    输入重定向:<    追加输入重定向:<<    

    输出重定向:>    追加输出重定向:>>

    错误输出重定向:2>    错误追加重定向:2>>

    &> 等于 2>&1

管道符和作业控制:

    管道符 “|”, 就是把前面的命令运行的结果丢给后面的命令

    作业控制:

        Ctrl+c 终止任务

        Ctrl+z 暂停任务

        jobs 可以看到在被暂停或者在后台运行的任务

        bg [id] 暂停的任务丢在后台跑起来

        fg [id] 把任务调到前台

        & 在命令后面加上& 表示直接把任务放到后台执行,它会显示pid信息。

        kill pid杀死进程;如果遇到杀不死的进程时,可以在kill 后面加一个选项: kill -9 [pid](需谨慎)

shell变量:

    之前介绍过环境变量PATH,这个环境变量就是shell预设的一个变量,通常shell预设的变量都是大写的。还有HOME、PWD、LOGNAME等等。可以输入命令env查看系统预设的全部系统环境变量,你还可以使用set命令把系统预设的全部变量都显示出来。set不仅可以显示系统预设的变量,也可以连同用户自定义的变量显示出来。

    要想系统内所有用户登录后都能使用自定义的变量,则修改在配置文件/etc/profile追加,如export mymsql=/usr/local/mysql;修改完配置文件后记得source /etc/profile让配置文件生效噢。

    如果只想让当前用户使用该变量,则在用户主目录下的 .bashrc 文件最后一行加入export mysql=/usr/local/mysql 然后运行 source .bashrc 就可以生效了

    设置全局变量使用export命令,取消某个变量:unset [变量名]

环境变量配置文件:

    几个环境变量配置文件:/etc/profile、/etc/bashrc、~/.bashrc、~/.bash_profile、~/.bash_history、~/.bash_logout

        /etc/profile:这个文件预设了几个重要的系统全局变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE等等

        /etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就是我们在敲命令时,前面那串字符:[[email protected] ~]#

        ~/.bashrc:包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中。

        ~/.bash_profile:定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。

        ~/.bash_history:记录命令历史用的。

        ~/.bash_logout:当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。

    【当用户执行shell文件时,读取配置文件的顺序为:/etc/profile.d/*  --> /etc/profile --> /etc/bashrc --> ~/.bashrc --> ~/.bash_profile --> ~/.bash_logout 】

shell特殊字符:

    * 代表零个或多个任意字符

    ? 只代表一个任意的字符

    # 表示注释说明的意思

    \ 脱衣字符

    | 管道符,它的作用是将符号前面命令的结果丢给符号后面的命令

还有下面这些:

    $ 变量前缀,!$组合,正则里面表示行尾

    ; 多条命令写到一行,用分号分割

    ~ 用户家目录,后面正则表达式表示匹配符

    & 放到命令后面,会把命令丢到后台

    > >> 2> 2>> &> 前面提及的输出重定向

    [] 指定字符中的一个,[0-9],[a-zA-Z],[abc]

    ||和&& 用于命令之间作为分隔符;|| 表示或者, && 表示并且

        (1)command1 ; command2     不管command1是否执行成功都会执行command2

        (2)command1 && command2    只有command1执行成功后,command2才会执行,否则command2不执行

        (3)command1 || command2    command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行

几个和管道有关的命令:cut、sort、wc、uniq、tee、tr、split

    cut:用来截取某一个字段

        格式:cut -d '分隔字符' [-cf] n ;这里的n是数字

        -d:后面跟分隔字符,分隔字符要用单引号括起来

        -c :后面接的是第几个字符

        -f :后面接的是第几个区块

    示例:

        技术分享图片

    sort:用于排序

        格式:sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1 < n2

        -t 分隔符 :作用跟cut的-d一个意思

        -n :使用纯数字排序

        -r :反向排序

        -u :去重复

        -kn1,n2 :由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序

    示例:

        技术分享图片

    wc:用于统计文档的行数、字符数、词数

        常用选项有:

        -l :统计行数

        -m :统计字符数

        -w :统计词数

    示例:wc不跟任何选项,直接跟文档,则会把行数、词数、字符数依次输出

        技术分享图片

    uniq:去重复的行

        常用的选项只有一个:

        -c :统计重复的行数,并把行数写在前面

    【使用uniq 的前提是需要先给文件排序,否则不管用。所以经常与sort命令一起使用】

    示例:

       技术分享图片 技术分享图片

    tee:后跟文件名,类似与重定向 “>”, 但是比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上。

    示例:

        技术分享图片

    tr:替换字符,常用来处理文档中出现的特殊符号

        常用的选项:

        -d :删除某个字符,-d 后面跟要删除的字符

        -s :把重复的字符去掉

    示例:最常用的就是把小写变大写: tr ‘[a-z]’ ‘[A-Z]’

        技术分享图片

    split:切割文档

        常用选项:

        -b :依据大小来分割文档,单位为byte

        -l :依据行数来分割文档

    示例:如果split不指定目标文件名,则会以xaa xab... 这样的文件名来存取切割后的文件。当然我们也可以指定目标文件名123开头

        技术分享图片


以上是关于Shell基础知识的主要内容,如果未能解决你的问题,请参考以下文章

Linux 基础知识 | shell知识

Linux 基础知识 | shell知识

Shell基础知识

Shell-- 基础知识

shell基础知识

Shell基础知识