• Linux11:bash特性


    bash特性

    Shell是一种脚本语言,在linux中通过shell控制系统内核,完成内核和硬件的交互。

    linux支持的shell在/etc/shells中有描述:

    一般常用的shell就是bash,它也是linux预设的shell。bash具有很强大的特性,如历史命令、补全功能、设置命令别名、通配符等。

    在用户登录时系统就会分配给用户一个shell,这个信息记录在/etc/passwd中:

    如果系统不想让使用者登入,就可以给该用户分配一个奇怪的shell,这就是/sbin/nologin。

    查看指令是否是bash内置命令:type 命令名

    历史命令与命令补全

    执行history命令就会查看当前计算机执行过的命令。

    列出最近的3个命令:history 3

    这些历史记录也会被记录在家目录下的.bash_history中,但是只有当关机时才会将命令同步写入文件中(如果同时有多个用户登入,那么最后一个退出的命令会被记录在最后),如果想立即刷新到文件需要执行history -w,如果想清空历史命令记录就执行history -c,但是一般不建议清空历史命令,查看历史命令可以使不同开发成员间熟悉维护的操作。

    历史命令默认最多保存1000条,连续重复的命令只会保存一次,这个设置可以在文件/etc/profile中修改。将HISTSIZE=1000修改即可。

    使用上箭头或下箭头能直接调出历史命令,执行!数字可以执行对应的历史命令,执行history后每行的数字与命令一一对应,执行!!可以执行上一条命令,执行!ser可以执行最近执行的以ser开头的命令,频繁执行某条命令时很有用。

    tab可以补全命令,如果开头的命令不止一个则不会补全,此时按两下tab可以显示开头全部命令,然后再选择即可。

    别名与指令搜寻顺序

    可以给命令创建别名alias 别名='原命令'然后执行别名就相当于执行原命令。直接执行alias可以查看所有别名的设置。在linux中执行命令的优先级如下:

    1 第一顺位执行用绝对路径或相对路径执行的命令。
    2 第二顺位执行别名。
    3 第三顺位执行Bash的内部命令。
    4 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。(linux中的很多命令都是通过环境变量定位到绝对路径然后执行的)

    用alias命令设置别名只会暂时生效,想要永久生效需要修改家目录下的.bashrc文件,该文件还存储了变量设置相关内容。删除别名需要执行unalias 别名

    别名的主要用途就是把很麻烦的常用命令简单化,还可以设置alias rm = 'rm -i',这样所有的删除操作都必须确认一遍,增加了一定的安全性。

    输出重定向与输入重定向、双向重导向

    输出重定向就是将本来应该输出在屏幕上的内容输出到文件中,在日志记录中很有用。

    输出重定向命令,覆盖模式命令 > 文件,追加模式命令 >> 文件

    错误输出重定向,覆盖模式命令 2> 文件,追加模式命令 2>> 文件

    这两种命令需要事先确定命令是否正确执行,下一条命令可以直接将正确或错误结果直接写入文件:

    覆盖模式命令 &> 文件,追加模式命令 &>> 文件

    还可以将输出结果直接输出到dev/null文件,相当于取消输出,在不想显示输出结果时可以用到,如执行命令时在命令后加上空格2>/dev/null,那么错误信息就不会显示在屏幕上了

    可以将正确输出和错误输出分别分开输出追加到两个文件中:

    命令>>文件1 2>>文件2

    输入重定向可以取代键盘的标准输入,如将~/.bashrc的内容重定向到catfile中:

    cat > catfile < ~/.bashrc,这样就生成了一个和~/.bashrc相同的文件。

    输入重定向一般用来进行统计,wc 文件名就可以统计文件的字节数、单词数、行数。直接执行wc回车再输入内容,最后按ctrl+d,可以统计当前输入内容的字节数、单词数和行数。

    双向重导向说的是数据流可以同时输入到文件和屏幕上,将执行结果保留在文件一份,同时输出到屏幕:

    ls -l /home | tee ~/homefile | more,tee后跟选项-a可以向文件追加,默认是覆盖。

    多命令顺序执行

    两条命令用;分隔代表顺序执行两条命令,两条命令是独立状态不会相互影响。用date;命令;date可以测试命令的执行时间。

    用&&分隔代表第一条命令顺利执行第二条命令还执行,常用于一系列有顺序需求的命令执行时。$((1&&1))的结果是1,如果有一个不为1结果就是0。

    用||分隔代表第一条命令执行失败第二条命令执行,第一条命令执行成功第二条命令不执行,$((0||0))的结果是0,如果有一个不是0结果就是1。

    如果/tmp/abc存在就创建/tmp/abc/hehe:ls /tmp/abc && touch /tmp/abc/hehe

    如果/tmp/abc不存在就创建该目录:ls /tmp/abc || mkdir /tmp/abc

    不清楚/tmp/abc是否存在,但是就是要建立/tmp/abc/hehe:

    ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe

    创造类似三元运算符的指令:命令 && echo yes || echo no表示命令正确执行输出yes,否则输出no。

    管道符|

    基本格式为命令1 | 命令2,表示命令1正确执行的结果作为命令2的输入。

    ll -a /etc/ | more表示用more来查看ll命令输出的结果。

    netstat -an | grep "ESTABLISHED"表示在网络信息中提取已连接状态的信息并显示出来,相当于查看有多少远程工具连接到服务器。-an可以显示全部连接,此时tcp连接除了listen状态还有established状态(表示正在连接,打游戏时游戏服务器一定与本机连接,此时查找状态为established的连接就可以找到服务器的ip地址)。

    通配符和特殊字符

    通配符主要用来匹配文件名。

    bash中的特殊字符:

    当内容中有空格时,必须要用引号括起来,单引号会使括起来的内容原封不动的保存,而双引号中有些特殊字符由特殊含义,如$表示调用变量的值,echo "$name"echo '$name'两者的区别是后者会直接打印$name,而前者则会打印name变量真正的值。

    转义符也可以让空格变成一般字符:a1=aliba ba,这样设置也可以不用加单引号或双引号

    反引号``括起来的内容会被识别为系统命令,bash会先执行他,如abc=`date`会把date命令的结果赋值给abc,反括号很容易被看成单引号,所以$()用的更多一些,这两个符号用法相同。示例:

    cd /lib/modules/$(uname -r)/kernel

    一般把一个常用目录路径定义成变量,每次登入时就可以轻松进入该目录:cd $workdir,变量相关设置在家目录下的.bashrc文件中可以设置。

    欢迎提示信息

    登录后的欢迎/提示信息文件:/etc/issue(本地登录)、/etc/issue.net(远程登录)、/etc/motd(两种登录都生效)。一般会把大家都关注的信息放到里面,如维护时间等。

    想要编辑自己的欢迎信息必须明确该文件中各代码的含义:

    登录后提示字符root为#,一般用户未$。退出登录为exit。

  • 相关阅读:
    [教程]北京迅为iMX6ULL开发板上配置 AP 热点
    [QT进阶篇]迅为手把手视频教程嵌入式学习之QT进阶篇
    新手学习嵌入式Linux和Android开发板推荐
    【迅为免费教程】 嵌入式学习之Linux入门篇分享
    迅为 iTOP-i.MX6ULL 开发板-Mqtt 移植教程
    9月29日学习日志
    9月8日学习日志
    9月7日学习日志
    9月6日学习日志
    9月5日学习日志
  • 原文地址:https://www.cnblogs.com/yinyunmoyi/p/12535832.html
Copyright © 2020-2023  润新知