第五节——bash的基础特性 本文共有60235个字,关键词: 命令历史#history 相关的环境变量: $HISTSIZE 命令的历史条数 $HISTFILE 命令历史文件目录~/.bash_history $HISTFILESIZE 命令历史文件记录历史命令最大值 #history –d OFFSET(命令历史编号) -c 清空命令历史 -a 手动追加ache中的命令至缓存文件 ##(数字) 显示命令历史中最近##条命令 #!## 执行命令历史中第##条命令 #!! 执行上一次执行的命令 #!string 执行最近一个以指定字符串开始的命令 #!$ 调用上一条命令的最后一个参数 #ESC,. 在当前光标处调用上一条命令的参数 #Alt+. 调用上一条命令的参数在当前光标处 控制命令历史的记录方式: 环境变量:HISTCONTROL ignoredups 忽略重复的命令,所谓的重复就是指连续且相同 ignorespace 忽略以空白开头的命令 ignoreboth 以上两项都生效 #export HISTCONTROL=“ignorespace” 变量的声明方式,只对当前shell及其子shell生效 命令补全: 当我们在命令行总键入命令的时候,有一种简便的方式自动补全需要的命令,就是使用Tab键,当命令唯一时直接补全命令,当命令不唯一时列出所有相关的命令。 Tab键连续敲两次 为什么命令行下能够实现命令的补全?这与bash执行命令的方式有关。 内部命令就是shell程序自带的命令。 外部命令:bash会根据PATH环境变量定义的路径,自左而右在每个目录下搜索给定命令名称命名的文件,第一次找到的即为要执行的命令,找到以后会以hash的方式存储起来,如果将某个命令执行后移除,而又添加到了PATH环境变量中,但是命令就是执行失败,这时候就需要清空hash。hash –r 清空所有命令缓存。 路径补全: bash将用户给出的字符串作为路径的开头,并在其指定上级目录下进行搜索,如果搜索结果唯一则补全,如果不唯一则给出列表。 命令行展开: ~ 展开为用户的主目录 ~USERNAME 展开为指定用户的主目录 {} 可承载一个以逗号分隔的列表,并将其展开为多个路径。 /tmp/{a,b}=/tmp/a,/tmp/b 命令的执行状态结果: 成功 0 失败 1-255 失败的原因有很多 bash使用特殊变量$?,保存最近一条命令的执行状态结果。 程序的返回值:执行结果 程序的执行状态结果:成功,失败。 别名: #alias [name=’value’] 对命令进行别名 name为新定义的命令名称 value为定义的命令 命令别名只对当前shell进程有效,永久有效需要写入配置文件 ~/.bashrc 写入对应用户的家目录下的.bashrc文件 /etc/bashrc 写入对所有用户生效。 写入配置文件不会立即生效,需要重新读取或者重启。 source /path/to/config_file . /path/to/config_file 撤销别名: #unalias [-a] name(别名) -a 撤销所有别名 当我们不想执行别名,而想执行命令的原有意思时使用反斜线 #\COMMAND(alias) 执行命令原有的意思 bash的快捷键: ctrl + L 清屏操作 #clear 清屏操作 ctrl + a 将光标跳至首部 ctrl + e 将光标跳至尾部 ctrl + c 取消命令的执行,终止命令的执行 ctrl + u 删除命令行行首至光标处的内容 ctrl + k 删除光标所在处至命令行行尾的内容 bash的I/O重定向以及管道: 我们知道,程序是由指令+数据组成的 读入数据:input 输出数据:output 标准输入:缺省(默认)从键盘读取,描述符:数字0 计算机识别文件、用户进程都是靠ID号来识别的,我们用户看到的是文件名,但是在打开文件,内核内部为了实现文件追踪,会给打开的文件分配ID号,这个ID号称为文件描述符。 打开的文件都有一个fd(file descriptor文件描述符)。 程序运行结束时有数据输出,数据输出可以是到文件、到屏幕、到打印机等等,这么多位置应当有一个默认的输出位置。 标准输出:输出到显示器monitor,描述符为数字1 标准错误输出:输出到显示器monitor,描述符为数字2 I/O的重定向: 不从标准输入读取数据 不从标准输出输出数据 改变默认位置即为重定向。 输出重定向: COMMAND > NEW_POS,单个‘>’为覆盖重定向 COMMAND >> NEW_POS 两个‘>’为追加重定向 为了防止意外将文件内容覆盖,我们可以使用命令限制对文件的覆盖: #set –C 禁止将内容覆盖输出到已有文件中,但是我们确实需要覆盖怎么办?难道取消覆盖后在设置回来? #cat /etc/issue > |/tmp/test 强制覆盖文件 #set +C 允许将内容覆盖输出到文件。 错误输出是单独的数据流,使用2>进行重定向。 &>:合并数据流,定向至同一文件。 &>>:追加重定向,合并两个数据流,定向至同一文件。 #COMMAND >/path/to/file.out2>&1 将2定向到1 #COMMAND >>/path/to/file.out2>>&1 将2定向到1 输入重定向: < /path/to/filename #tr [option] SET1(字符集1) [SET2](字符集2) 不支持跟文件,作用是转换或者删除字符 -d 如果只有一个字符集,则删除出现在字符集中的内容。 如果有两个字符集,则将SET1 中的字符集按位替换成SET2中的字符。 #tr abc ABC < /etc/fstab 一般只使用一个参数,多个使用循环实现 ‘<<’表示此处生成文档 #cat<< EOF >abc >ABC >xyz >XYZ >EOF 保存键盘上键入的数据,此处是输出到屏幕,EOF为指定的结束符,我们可以指定其他字符。 #cat >>/tmp/test<<EOF >a >b >A >EOF 定向到文件中 EOF为特定字符串,End Of File #tee[option] file 一路输入两路输出,一路定向到文件,一路打印到屏幕。 tee是覆盖输出,可以在管道中截取数据。 管道:COMMAND1 |COMMAND2 |COMMAND3.... 管道的符号为‘|’,表示将前面一个命令的执行结果送入后一个命令,随后一个命令会在当前shell的子shell中执行。 shell下的编程: bash为我们提供了编程环境,依靠调用系统所提供的命令(已存在的二进制程序),组织成一定形式解释执行。 说道解释执行,我们就需要说一说程序的变成风格和编程语言分类。 程序的变成风格: 面向过程:以指令为中心,数据服务于指令。 面向对象:以数据为中心,指令服务于数据。 我们之前说过,程序是由指令和数据组成的。计算机只能识别二进制的指令,所以无论我们使用什么编程语言,最终都要转换为二进制指令才可以。 编程语言按接近人类语言的程度分为高级语言和低级语言,高级并不是说很厉害,高级指的是接近人类语言习惯,还有一些语言接近底层硬件,但是对人却不友好,所以称为低级语言。 编程语言按照执行方式可以分为编译型语言和解释性语言: 编译类型的语言:高级语言-->编译器-->目标代码 C语言、C++、JAVA等等 编译类型语言编写好代码后,需要通过编译器将代码转换成静态的二进制程序,可以独立执行。 解释类型的语言:高级语言-->解释器—>目标代码 shell、perl 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 基础笔记二 2017-03-21 评论 2655 次浏览