zoukankan      html  css  js  c++  java
  • Linux学习笔记之认识与学习Bash

    什么是shell:shell是一个翻译器,将所敲的命令翻译成CPU能理解的语言,之后CPU再去执行,CPU执行后返回给shell,shell再翻译成我们所能理解的语言并显示;终端并不是shell,而是建立了程序员与shell之间的桥梁。Linux中默认的shell为bash shell。

          Windows下putty相当于Linux中的终端。其实shell是用来对核心发送指令的,核心收到指令后,就会控制相应的硬件。

    为什么学习shell:命令行操作传输的速度快;大量的快捷键操作提高速度,Linux中通用。

    本地变量:在某一个shell中定义的变量为本地变量,只能在本shell中使用

    环境变量:会影响到所有的子shell

    位置变量:在脚本文件中使用,相当于形参,例如下面的$1等等,而$0表示脚本的名字,$#表示参数的个数,$*表示所有的参数,${10}表示第10个参数,而$10表示$1+0,即第一个参数加上0。

    命令别名与历史命令

    命令别名设置:alias,unalias

    历史命令:history(最多存储最近的1000条,可以通过更改变量HISTFILESIZE改变)

    Bash Shell的操作环境

    路径与命令查找顺序:执行顺序即为tpye –a 命令 显示的顺序

     

    Bash的登陆与欢迎信息:/etc/issue,登陆前的显示信息 d为当前信息

    /etc/motd, 登陆后的信息

     

    Bash的环境配置文件:login-shell 登陆所需要的shell

                                               用户的环境变量配置.bash_profile

                                                   所有用户的环境变量/etc/profile

    终端机的环境设置:stty,set

     

    通配符与特殊符号:一对中括号[]匹配一个字符,出现在中括号里的都是匹配的,例如[a-z]表示匹配26个字母,-表示到,如果要匹配-,则需要转义-;

                      ?表示匹配一个字符(不论是什么);

                      [^]或者[!]表示否定中括号中的匹配项;

                                              *表示匹配任意多个字符(不论是什么)。

     

    输出重定向:              目标1 > 目标2;将目标1所输出的内容输出到目标2中,如果目标2未被创建,则先创建,如果目标2存在,则先清空目标2的内容,再输出。

                                              目标1 >> 目标2 将目标1的输出内容追加到目标2的尾部

                                              > and >> 只重定向正确的命令,即目标1为有效命令;

                                              2> and 2>> 可以重定向错误的命令,即将错误输出重定向到目标2中, 如果目标1为有效输入,则不重定向到目标2,而是输出到屏幕上。

                                              &> and &>> 无论目标1是否有效,全部重定向到目标2中。

     

    输入重定向:              目标1 < 目标2 将目标2的内容输入到目标1的操作中

                                              << here文档,<<结束字段,则在文档中也要以结束字段结尾

     

    命令执行的判断依据:;,&&,||

    终端中同一个命令行中执行两个命令,则两个命令用”;”隔开,两个命令没有任何关系。Linux中有一个一个字符大小的容器来记录最近一次命令是否正确,查看该容器的值 echo $?,0表示正确,非0表示错误

    命令1 && 命令2: 命令1为假则不执行命令2,其他则全部要执行

    命令1 || 命令2 :命令1是真则不执行命令2,否则都执行。

     

    管道:                          命令1 | 命令2:命令1执行的结果是命令2执行的参数。

    命令1 | tee xx | 命令2:命令1的结果通过管道使保存在xx中,再给命令2做参数,xx中只保存最后一次的结果,即新的会覆盖旧的,tee –a xx  则会再末尾进行追加。

    xargs 一般用在不能使用管道时,find …| xargs ……

    选取命令:         Linux文件中的每行的每一部分大多以:隔开,可以通过cut命令查看某一文件的某一部分cut –d: –f2 files  表示通过指明分隔符:查看files的第2部分,其中:可以自定义

    命令

    cat  /etc/shells                             查看系统中有哪些shell,在终端敲shell的名字进行切换

    echo  $$                                               查看开启shell的进程PID

    type  命令名称                                  查看命令的来源(外部指令or bash内建指令)

    type –t  command                             显示command为外部指令还是bash内建指令,并显示别名

    type  -p  command                         当command为外部指令时,显示完整文件名

    type  -a  command                         由PATH变量定义的路径中,显示含command的指令

    export                                                     显示所有的环境变量

    env                                                           查看当前shell环境下,所有环境变量与其内容

    set                                                           列举Bash中的所有自定义变量

    一些系统的自定义变量

    RANDOM                                               为(0~32767)随机数环境变量

    COLUMNS                                              当前终端一行所能容纳的字符个数

    LINES                                                       目前终端所能容纳的行数

    OSTYPE                                                   操作系统的类型

    MACHTYPE                                            安装的系统类型

    PS1                                                           命令提示字符

    PS2                                                           续行的提示符(默认为>)

    $                                                               目前系统所使用的PID(线程代号 Process ID)

    ?                                                             上一条指令执行的回传值(0表示正确,非0位错误命令)

    cal                                                            显示日历

    date                                                         显示日期

    cal ; date                                                同一行敲多个命令,每两个命令间用”;”隔开

                                                                    可以另起一行敲命令,系统会认为下一行是上一行的延续

    $变量名                                                 引用变量;最佳的引用变量方式为${变量名}

    unset  变量名                                    取消变量

    变量名=值                                            本地变量

    Declare  变量名                                则变量的内容默认为字符串

    declare  +x  已定义变量              本地变量

    declare  +x     变量名=值                本地变量

    export 变量名=值                              环境变量

    export 已定义的变量名                  将该变量设定为环境变量

    declare  –x  变量名=值                 环境变量

    declare  -r  变量名                         设置变量为只读不可更改

    export  -p                                             显示所有的环境变量

    su  -  用户                                         切换到用户

    Locale                                                     查看系统语言编码

    Locale  -a                                             查看系统支持的所有语言编码(/usr/lib/locale/)

    echo –n $变量名                                 不换行

    read  -p  “*****”  变量名                   显示为*****;变量名的值从键盘读取

    数组名=(项1 项2 项3)                  定义一个数组,内部元素用空格隔开

    echo  ${数组名[下标]}                     显示数组中的第下标个元素

    echo  ${数组名[*]}                            显示数组的所有元素,可以用@代替*

    echo  ${!数组名[*]}                          查看所有元素的下标

    echo  ${#数组名[*]}                         查看数组中元素的个数

    readonly  变量名                              设置变量为只读

    ulimit  -a                                             查看所有的大小限制

    ulimit  -相应的命令字  大小       设置相应选项的大小限制 (大小的单位为字节)

    变量名1=${变量名2}                       将变量2的值赋值给变量1

    ${变量名#*需要删除的字段}         #表示从前往后删除,直到删除最近的一次关键字段

    ${变量名##*需要删除的字段}       ##表示从前往后删除,直到删除最后一次的关键字段为止

    ${变量名%*需要删除的字段}        %表示从后往前删除,删除最近的关键字段

    ${变量名%%*需要删除的字段}     %%表示从后往前删除,删除最后一次的关键字段

    变量1=${变量2-值}                           如果变量2被定义过,则将变量2的值赋给变量1,否则将值赋给变量1

    变量1=${变量2:-值}                         如果变量2被定义了,并且变量2是一个空值则将值赋给变量1

    变量1=${变量2:=值}                        如果变量2未被定义或定义了其值为空,则将值赋给变量2,再赋给变量1;如果变量2定义了其值不为空则赋给变量1

    变量1=${变量2:?值}                      如果变量2未被定义或定义了其值为空,则显示为值的警告信息,并且变量1还是未被定义;如果变量2定义了且有值,则将该值赋给变量1

    变量1=${变量2:+值}                        如果变量2定义了且其值不为空,则将+后的值赋给变量1;否则就不赋值

    Ifconfig  eth0                                      查看网卡信息

    alias aa=’ifconfig eth0’                       将aa设置为ifconfig eth0命令的别名

    unalias  aa                                           取消设置的别名aa

    !+history序号                                      快速调用第序号个历史命令

    History  -c                                            清空历史命令

    type  -a  命令                                   显示的顺序即为执行顺序

    ctrl+Alt+F5                                             进入非图形化界面

    ctrl+Alt+F1                                             退出非图形化界面进入图形化界面

    stty  -a                                                  显示终端 快捷键操作(^表示ctrl)

    set  -u                                                   当引用变量未定义时,系统给出提示

    set  +u                                                  关闭以上功能

    set  -x                                                   系统跟踪用户操作,+号取消该功能(对脚本进行排错)

    cal 2> files  1>&2                               表示:正确的像错误的一样导入,即将日历重定向到file中

    xxxxx > files  2>&1                            错误的像正确的一样导入

    grep 关键字 files                              在files中查找含有关键字的行(Linux严格区分大小写)

    grep 关键字 files –color                  在上面的基础上,高亮显示关键字

    grep –i 关键字 files                          不区分大小写过滤关键字

    grep –n 关键字 files                         显示过滤行出现的行号

    grep –v 关键字 files                         反向过滤, 除了含有关键字的行

    grep –A3 关键字 files                      同时显示关键字所在行的下面的三行

    grep –B3 关键字 files                      上面三行

    sort                                                          按照字符的大小排序(默认从小到大)

    sort  -n                                                 以数字的形式排序

    sort  -r                                                  从大到小排序

    sort  -t: -K3 files                                 在files中指明分隔符:来对第三部分进行排序

    sort  -u                                                 排出重复的行进行排序 = uniq命令

    uniq  -c  files                                     files中重复的次数

    wc  files                                                显示:行号l,单词数w,字符数c(每行后还有换行符)

    ls  -1                                                      以行显示

    tr ‘a-z’ ‘A-Z’ file                                    将file中的小写转换为大写显示,源文件不变

    tr  -d  “:”  files                               删除files中的:号

    tail  -7  files                                       显示files的尾7行

    col  -x  files                                        用空格键替换tab == expand命令

    cat  -A  files                                      显示files中的不可打印字符(^I表示tab,$表示结束符)

    paste  file1  file2                            将file1与file2按行进行组合

    join  file1  file2                                按行组合,但是省略file2中与file1相同的第1部分,默认分隔符为空格,只组合第一部分相同时的行(默认第一部分)

    join –t “:” -1 4 file1 -2 3 file2             比较file1的第四部分和file2的第三部分,以:作为分割符,进行组合,如果相同则组合,不同则不组合

    split –b 10K files 关键字                   将files按10k的大小进行分割,分割的文件以关键字名开头

    cat 关键字* > files                             将以关键字开头的文件组合成一个名为files的文件

    split –l 10 files 关键字                      按10行一个文件进行分割

  • 相关阅读:
    hdu1828线段树(两次扫描+离散化)
    hdu1542线段树(扫描线+离散化)
    二分思想
    hdu2871线段树区间更新
    git初体验
    python笔记-模块
    python笔记-动态类型
    AWS上创建EKS(K8S)集群
    Akamai CDN刷新(通过Akamai cli 自动刷新)
    创建Akamai cdn api授权
  • 原文地址:https://www.cnblogs.com/aaronbin/p/11360307.html
Copyright © 2011-2022 走看看