继续补充一点vim指令的一些知识点,当需要同时操作多个文件时,使用vim指令可同时打开几个文件加载至内存中。命令格式为vim file1 file2 file3,其中不同文件用空白字符隔开,默认操作第一个文件,当需要操作其他文件时,在末行模式下输入:next/:prev/:first/:last分别对应为下一个、前一个、第一个、最后一个文档的内容。当需要同时查看不同文件内容时,使用选项-o/O为竖屏/横屏分屏显示文件内容。在分屏情况下切换当前操作文件使用ctrl+w+左右键,ctrl前可加数字以跳至指定文件。当操作一个文件时,如若需要分屏显示此文件内容使用快捷键ctrl+w+s/v,将一个文件水平/垂直分屏显示,注意s/v不按住ctrl键,切需要在编辑模式下操作。需要保存/退出当前打开的所有文件内容,在末行模式下输入:qa/:wa,不能执行:qwa/qawa此类型操作。
如果在vim下操作当前文件内容时需要加载其它文件内容至当前文件中,末行模式下使用:r PATH/TO/SOMEFILES命令。在vim下需要与shell进行交互时,末行模式下使用:!后接任何命令即可进行交互。如果需要部分另存为操作,末行模式下使用:m/.,n/+nw后可保存至其他文件下,也可保存至当前文件中,只需后面加上!即可。
什么是shell?shell即为用户完成命令操作的操作接口,为用户提供简单易用的命令行操作界面。一些Linux操作系统默认使用的shell是bash,命令cat /etc/shells就能查看默认系统中所支持的shells,如果需要切换不同的shells使用的话,直接输入shell名称,执行即可。
bash的特性:
一、定义命令别名的功能,(un)alias命令可以用来(撤销)定义和显示命令的别名,但是使用alias命令定义的命令,其生命周期仅为当前shell的生命周期,即退出当前shell,定义的命令别名即失效。但是可以通过修改配置文件(~/.bashrc)的方法永久性更改命令的别名,更改配置文件之后别名并不会立即生效,需要重新加载该文件(. .bashrc注意空白字符)至内存中才会生效,并且永久生效。通常需要两种方式结合操作以保证设置的别名及时生效。
二、查看命令历史的功能,会保存其回话中用户曾经执行过的命令,以方便用户重复执行某个命令。通过bash提供的历史命令文件来持久保存此前执行过的命令,每个用户都有其私有的历史文件。登陆shell的时候,bash会自动读取~/.bash_history文件中记录的所有命令。history显示历史命令,选项-c清空历史缓冲区中的历史命令,-d #选项删除指定位置的历史列表。使用ctrl p/arrow/!!/!-#/!/!?可重复执行之前的命令。ctrl r在历史缓冲区中搜索目标字符;!$:表示最后一次命令中最后一个参数;esc松手.=alt+.最后一个参数;!^上个命令首个参数;!:#上个命令中的第#个参数;!第几条命令:第几个参数。与历史相关的bash变量:HISTSIZE设置历史缓冲区长度;HISTFILESIZE设置bash_history文件长度;HISTTIMEFORMAT更改历史指令能否显示时间;HISTCONTROL历史命令记录掌控,其中ignoredups可忽略连续重复的命令,ignorespace可忽略以空白字符开头的命令,ignoreboth即以上两个控制模式全开。
三、bash中的快捷键,Ctrl缩写为C,Alt缩写为M,Esc缩写为E,DEL缩写为Backspace。C+l清屏。C+a光标跳转至命令行行首,C+e 光标跳转至命令行行尾,C+k删除光标所在位置至行尾的命令行信息,
C+u删除光标所在位置至行首的命令行信息,C+c结束前台进程,取消命令的运行。
四、命令补全机制,可以理解为两个方面:命令本身的字符串的补全和参数的补全。通过TAB键可以完成命令补全,如果给出的字符串不能作为唯一标识,则bash不予补全,两次TAB键给出参考列表,如果参考列表过多,会询问是否显示该列表。根据提供的参数路径来进行补全,如果参数没有任何提示信息,则默认从工作目录进行查找。shell命令的执行过程:shell会根据用户键入ENTER来判断用户的输入结束,shell会将收集的命令信息,根据空白字符来分段token,第一个分段被理解为命令字段,判断第一个字段是内部命令还是外部命令,如果是内部命令,则直接运行;如果是外部命令,通过PATH变量所指示的路径信息,去查找相关的位置,以确定是否存在同名文件,如果有,就执行,否则报错。判断选项是否正确,判断参数是否正确。
五、shell命令行的展开:输入~,bash会自动将其展开为当前登录用户的家目录;输入~string,bash会自动将其展开为string为用户名的家目录;输入~+,调用shell变量PWD的值;输入~-,调用shell变量OLDPWD的值;使用{},可以填充一个以,分割的路径列表,bash会将其展开为多个独立的路径。
六、命令的执行结果:任何一个Linux命令都有两种执行结果,即正常输出结果和状态返回值。执行状态返回值($?)保存在bash的一个特殊变量中,跟命令执行成与否相关:0表示命令执行成功;1,2,127为内置状态返回值,1表示出现小问题,2表示出现严重问题,127表示命令本身有问题,3~126,128~255为用户自定义状态信息。
七、引用特性:双引号("")、单引号('')、反引号(``)。其中双引号为弱引用,被其引用的内容中,有一些特殊字符仍然会保留其特殊含义,如$、\、"";单引号为强引用,被其引用的内容,bash一律将其视为普通字符,忽略其特殊功能;反引号,也称为命令引用,即可执行被引用的命令,与$()相同。
八、转义功能:bash中定义\为转义字符,其后面的一个字符失去特殊意义,如果\后输入回车符,则需要继续进行输入,回车符失去其执行功能。
九、Globbing文件名通配符:*、?、[]、^。*匹配任意长度的任意字符,除了某些特殊的.(隐藏文件)不能匹配;?匹配任意的单个字符,必须且只有一个字符被匹配;[]匹配指定范围内的任意单个字符,必须且只有一个字符被匹配;^表示取反匹配。[a-z]匹配的字符为a,A,b,B,c,C……y,Y,z,此处应注意并不包括大写的Z;[A-Z]同理,注意不包括小写的a;[:lower:]表示所有的小写字母;[:upper:]表示所有的大写字母;[:digit:]表示所有的十进制数字;[:alnum:]表示所有的大小写字母和十进制数字;[:alpha:]表示所有的大小写字母,等同于[a-Z];[:space:]表示所有的空白字符;[:punct:]表示所有的标点符号;注意此处如果需要匹配任意单个的所有小写字母,要以形式书写[[:lower:]]。使用中通配符?使用频率不大,了解即可。
十、输入输出重定向:在使用计算机时,实现某种功能的主体是:程序=指令+数据,数据来源于文件和IO设备。键盘设备、文件系统中的常规文件、网卡设备、声卡设备等均属于可用于输入的设备;显示器、文件系统中的常规文件、网卡设备、声卡设备等均属于可用于输出的设备。每一种程序,都会有三种形式的数据流:输入数据流、输出数据流、错误数据流。以至于就有默认输入数据流来源为键盘,默认的输出数据流为显示器,默认的错误输出数据流也为显示器。即从键盘输入的数据流称为标准输入,从显示器上输出数据流称为标准输出,从显示器上输出的错误数据流称为标准错误输出。所以便有了重定向的概念,即采用非标准设备文件实现的IO操作,称为IO重定向。输入重定向为<,输出重定向有两种表示形式:>和>>,>称为覆盖输出重定向,>>为追加输出重定向。set +/-C可关闭/开启防误覆盖开关。同理,错误重定向也有2>和2>>,为覆盖和追加错误重定向。合并标准输出和标准错误输出的重定向有两种方式:&>,&>>和COMMAND>|>> /PATH/TO/SOMEFILE 2>&1。如果只关注状态返回值并不关注输出结果时,可将标准输出重定向至/dev/null(位桶),不占用资源,吞噬一切。当用到tr时需要用到输入重定向<。
十一、管道的概念:|,符号左边命令的输出赋予为符号右边命令的输入。注意,所有用于管道连接的命令都应该是能够有标准输出流的命令。