命令 '>' | >> file 标准输入重定向(覆盖);(追加) 2> | 2>> file 标准错误重定向(覆盖);(追加) file < 标准输入重定向 &> file == >file 2>&1 全部标准输出重定向 &> /dev/null 不显示输出,$?显示结果(0或非0) mail -s “标题” 用户 发邮件 mail 收邮件 tr 转换和删除字符 tee [-a] file1 将stdin存入file1并输出(追加) cmd1 | cmd2 | cmd3 ... 管道(多次) seq -s + 1 100 |bc 从1加到100 vipw == nano /etc/passwd (vi==nano) 编辑用户信息文件 vigr == nano /etc/group 编辑组信息文件 pwck | grpck 检查用户|组文件格式 useradd 创建用户 newusers 批量创建用户 chpasswd 批量修改用户口令 usermod 修改用户信息 userdel 删除用户 id 查看用户id信息 getent passwd|group|shadow|gshadow 查看这几个文件 su [-] 切换用户(不完全切换,-完全切换) passwd 修改用户密码 echo “passwd”|passwd --stdin name 用管道修改密码 chage 修改用户密码策略(时间参数) chfn 修改用户信息(描述) finger 查看用户信息 chsh 修改shell类型 groupadd 创建组 groupmod 修改组信息 groupdel 删除组 gpasswd 修改组密码 newgrp 临时切换主组 groupmems 查看或更改组成员 groups 查看用户所属组列表 chown 修改文件所有者 chgrp 修改文件所属组 chmod 修改文件权限 chattr 设定文件特殊属性 lsattr 显示特定属性 setfacl 设置文件acl getfacl 备份acl cat 查看文本文件 tac 反写(下上) rev 反写(右左) more 分页查看 less 一页一页查看 head 显示文件头(默认前世行) tail 显示文件尾(默认后十行) cut 截取文件 paste 合并文件(按行合并) wc 显示文件行、单词、字节、字符数 sort 文本排序显示(取列排序) uniq 删除重复行 diff 比较文件不同 patch 复制在其它文件中进行的改变 grep 打印匹配到的行 openssl rand -base64 10 随机生成10位字符串 scp 用户名@ip路径 跨服务器复制 reset 重置字符 last 显示用户登录信息 netstat 网络连接查看 namp -v -sP ip地址 扫描ip地址网段的地址up or down7

附加: " ", ' ', 反引间区别

" ":能识别其中的变量 ' ':不识别其中内容 反引:能识别其中任何内容(用于引用命令行)

标准输入和输出 程序:指令+数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: file descriptor (文件描述符) Linux给程序提供三种I/O设备 标准输入(STDIN)-0 默认接受来自键盘的输入 标准输出(STDOUT)-1 默认输出到终端窗口 标准错误(STDERR)-2 默认输出到终端窗口 I/O重定向:改变默认位置

把输出和错误重新定向到文件 STDOUT和STDERR可以被重定向到文件 命令:操作符号+文件名 '>' 把STDOUT重定向到文件 2> 把STDERR重定向到文件 &> |2>&1 把所有输出重定向到文件 '>' 操作文件内容会被覆盖 '>> '原有内容基础上,追加内容 ( ;) 合并多个程序的STDOUT 从文件中导入STDIN < 重定向标准输入 cat > filea < fileb 单行重定向:回车结束一次 多行重定向:<< 终止符

tr命令 转换和删除字符 tr [optino]...set1 [set2] set1转换成set2 -d 将字符串中的set删除 -c 取字符串的补集 -s 压缩连续的字符 -t 将第一个字符集对应字符转化为第二字符集对应的字符

管道:pipe cmd1 | cmd2 | cmd3 | ...
cmd1的stdout作为cmd2的stdin,cmd2的stdout作为cmd3的stdin stdout stderr |& cmd ==(等价于) stdout stderr 2>&1 | cmd
stdout和stderr共同作为stdout作为cmd标入使用 less:一页一页地查看输入 ls -l /etc | less mail:通过电子邮件发送输入 echo "test email" | mail -s "test" user@example.com lpr:把输入发送给打印机 echo "test print" | lpr -P printer_name 管道中-符号 将 /home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,将 tar -cvf - /home 传送给后面的 tar -xvf - , 后面的这个 - 则是取前一个命令的 stdout, 因此,就不需要使用临时file了 tar -cvf - /home | tar -xvf -

tee命令 将命令执行结果存入文件并输出 cmd1 | tee [-a] 文件名 | cmd2 将cmd1的stdout存入文件并输出,作为cmd2的stdin使用(-a 追加不覆盖) 标准输入: cat tr mail bc(高级运算命令 计算器) 等

用户、组和权限 安全3A Authentication:认证 Authorization:授权 Accouting|Audition:审计

用户user 令牌token(uid,gid,groups),identity file(授权uid,read读r write写w excute执行x) 访问资源时根据token中携带的信息给与相应的授权 linux用户:Username/UID 管理员:root/0 普通用户:1-65535 系统用户:1-499,1-999(centos7) 登录用户:500+,1000+(centos7) 交互式登录

组group linux组:Groupname/GID 管理员组:root/0 系统组:1-499,1-999(centos7) 普通组:500+,1000+(centos7) Linux组的类别 用户的主要组(primary group) 用户必须属于一个且只有一个主组 组名同用户名,且仅包含一个用户,私有组 用户的附加组(supplementary group) 一个用户可以属于零个或多个,辅助组

安全上下文 context(运行此程序的用户身份,用户组身份) 以进程(proces)发起者的身份运行: root:/bin/cat user:/bin/cat 进程所能够访问资源的权限取决于进程的运行者的身份

用户和组的配置文件 /etc/passwd:用户及其属性信息(NAME、UID、主组ID等) 七个字段: 用户名:密码:uid:gid:描述:家目录路径:shell类型 /etc/shadow:用户密码及其相关属性(密码一般用sha512加密) 用户:密码:口令修改时间:最短口令有效期:最长口令有效期:提前通知时间:宽限期:账户有效期:保留字段 /etc/group:组及其属性信息 组名:密码:gid:组员(以当前组为附加组的用户) /etc/gshadow:组密码及其相关属性 组名:密码:组长:组员(以当前组为附加组的用户) 附: 1、/etc下大部分都是配置文件(文本文件),可修改但有严格格式 2、创建给服务用的账号shell类型用nologin 3、feild 域 列 字段 属性;record 行 记录 4、与创建用户和组相关的文件: /etc/passwd /etc/shadow /etc/login.defs /etc/default/useradd /etc/skel/* /etc/group /etc/gshadow

文件操作 vipw == nano /etc/passwd (vi==nano) vigr == nano /etc/group pwck | grpck 检查用户|组文件格式

用户管理命令 用户创建: useradd [options] name 创建用户(adduser -> useradd) -u 创建用户指定UID -o 配合-u选项,不检查UID唯一性 -g 创建用户到指定组 -c 创建用户并描述 -d 创建用户到指定家目录 -s 创建用户指定shell类型(可用列表:/etc/shells) -r 创建系统用户(ID:1-499centos6;1-999centos7) -G 创建用户到指定附加组... -N 创建用户指定主组users -m 创建家目录,用于系统用户 -M 不创建家目录,用于非系统用户 -D 显示默认设置 newusers 批量创建用户 chpasswd 批量修改用户口令 用户属性修改: usermod [option] name 修改用户属性 -u 新UID -g 新GID -G 新附加组,覆盖原组,-a追加新组 -s 新的默认shell -c 新的用户描述 -d 新家目录不自动创建,-m创建新家目录并移动原家目录数据 -l 新用户名 -L 加锁 -U 解锁 -e 设置账号过期日期 -f 设置非活动期限 删除用户: userdel [option] name 删除用户(若某用户正在使用,该用户不能删) -r 删除用户和家目录和邮箱 查看用户ID信息: id [option] name 显示用户信息(判断用户是否存在) -u 显示UID -g 显示GID -G 显示所属组ID -n 显示用户名,配合u,g,G使用 getent passwd|group|shadow|gshadow
查看这几个文件,后跟u|g,只查看文件中的u|g 切换用户: su(switch user) user 切换用户(不完全切换) su - user 切换用户(完全切换) root切换至其他用户无须密码;非root用户切换时需要密码 设置密码: passwd [option] name 修改指定用户密码 -d 删除指定用户密码 -l 锁定指定用户 -u 解锁指定用户 -e 强制用户下次登录修改密码 -f 强制操作 -n 指定最短使用期限 -x 最长使用期限 -w 提前警告天数 -i 非活动期限 ehco ‘passwd’|passwd --stdin name 从标准输入接收用户密码 修改用户密码策略: chage [option] name 交互式修改用户密码时间参数 -d 修改最后期限 -E 修改过期时间 -I 修改非活动期限 -m 修改最短期限 -M 修改最长期限 -W 修改提前警告天数 -l 显示密码策略 用户相关其他命令: chfn 修改个人信息 chsh 修改shell finger 查看用户信息

组管理命令 创建组: groupadd [option] name 创建组 -g 指明GID -r 创建系统组(GID:1-499centos6;1-999centos7) 修改组: groupmod [option] name
-n 修改新名字 -g 修改新GID 删除组: groupdel 删除组(若某组是某用户主组,该组不能删) 更改组密码: gpasswd [option] name 交互式给组加口令(密码) -a user 将user添加至指定组 -d user 从指定组中移除user -A user1,user2,... 设置有管理权限的用户列表 newgrp 临时切换主组(若用户不在此组,需密码) 更改和查看组成员: groupmems [option] [action] 显示指定组成员 options: -g 更改为指定组 action: -a 指定用户加入组 -d 从组中删除用户 -p 从组中清除所有成员 -l 显示组成员列表 groups [option].[username]... 查看用户所属组列表

文件权限 文件属性操作: 修改文件的所有者 chown
用法: owner owner:group :group “:”可用“.”替换 -R 递归 chown [option]... --reference=file1 file2 修改file2所有者与file1相同 修改文件的所属组 chgrp 用法: chgrp [option]... group file... file属于group chgrp [option]... --reference=file1 file2... file2与file同属一组
-R 递归

文件权限介绍 文件权限主要针对三类对象进行定义: owner:所有者(u) group:所属组(g) other:其他(o) 每个文件针对每类访问者都定义了三种权限: readable:读权限(r) writable:写权限(w) excutable:执行权限(x) 文件: r:可使用文件查看类工具获取其内容 w:可修改其内容 x:可以把此文件提进内核启动为一个进程 目录: r:可以使用ls查看此目录文件列表 w:可以在此目录中创建文件,也可以删除文件 x:可以使用ls -l查看此目录文件列表,可以cd进入此目录 X:只给目录x权限,不给文件x权限 规则: 1、普通用户不能改文件所有者,可以改所属组(文件所有者是自己,且自己在组里) 2、目录dir是一种特殊文件,其内容就是文件列表 删除文件需要的是对该文件所在的目录的w权限 3、对目录来讲,没有x,即使有r,也无法进入目录,无法查看目录属性,无法访问目录下文件 4、root对r w不受控制,对x受控制;r w x 对普通用户有控制 二进制r权限不是必须的 5、用户获取权限顺序:u-g-o,一旦匹配,不往下执行 6、文件属性由文件系统决定,不是由操作系统决定

修改文件权限 chmod(change mod) -R 递归修改 修改一类用户所有权限: u= g= o= a= 修改一类用户某个权限: u+/- g+/- o+/- a+/- chmod [option]...--reference=file1 file2... 修改file2权限与file1相同

方法1:mode法 chmod who opt per file who:u g o a(all) opt:+ - = per:r w x X(只对目录加x,如果文件已有x,也对文件加x) 方法2:数字法(八进制授权) rwx ... --- 111 ... 000 r:4 w:2 x:1 rwx ... --- 7 ... 0

修改默认权限法 默认权限(file:644;dir:755) umask+default(默认)=file666/dir777(对位相加) 目录777-umask,文件666-umask umask真正含义:掩码 功能:取消对应的权限 例: 666 125 110110110 001010101(逢1取消权限,1->0) 110100010 642 目录公式不变,文件偶数不变奇数加一

特殊权限 suid(4)(u+s) 继承程序所有者权限,只适合作用在二进制可执行程序 sgid(2)(g+s) 1)继承程序所属组权限 2)作用于目录,该目录下新建文件继承目录所属组 Sticky(1)(o+t) 粘滞位,作用在文件夹,此目录文件只能被所有者删除

设定文件特定属性 chattr +i 不能删除,改名,更改 chattr +a 只能追加内容(echo 内容 >>file,不能用nano) lsattr 显示特定属性

访问控制列表 ACL:Access Control List 实现灵活的权限管理 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限 ACL生效顺序:所有者,自定义用户,自定义组,其他人 setfacl -m u/g:name:rwx file/diretory 针对用户/组设置文件/目录权限 -x 删除用户/组的文件/目录权限 setfacl -m mask::rwx file/diretory 设置文件/目录的mask权限 setfacl -b file/diretory 清空所有ACL权限 -Rm 递归设置 -M file.acl 批量设置(引用file.acl文件) -X file.acl 批量删除 getfacl -R /tmp/dir1 > acl.txt 备份acl setfacl -R --set-file=acl.txt /tmp/dir1 setfacl --restore acl.txt 恢复acl mask权限 相当于限高杆的作用,是除所有者外的最高权限 ACL文件上的group权限是mask值(自定义用户、自定义组、拥有组的最大权限),而非传统的组权限

文本处理工具 文件查看 命令: cat 查看文本文件 -E 显示行结束符$ -A 显示所有控制符 -n 对显示出的每一行进行编号 -b 非空行编号 -s 压缩连续空行成一行 tac 反写cat(下->上) rev 反写(右->左) 分页查看文件内容 命令: more 分页查看文件 -d 显示翻页及退出提示 less 一页一页查看文件或stdin输出 /文本 搜索文本 n 跳到下一个匹配 N 跳到上一个匹配 less命令是man命令使用的分页器 显示文本前或后行内容 命令 head 显示文件头(默认前10行) -c # 指定获取前#字节 -n # 指定获取前#行 -# 指定行数 tail 显示文件尾(默认后10行) -c# 指定获取后#字节 -n# 指定获取后#行 -# 指定行数 -f 显示文件新追加的内容,常用于日志监控 -F 跟踪文件名 tailf类似tail -f,但当文件不增长时并不访问文件

抽取和合并文本 命令: cut 取出部分文件(列) -d 指明分隔符,默认tab -f# 第#个字段(#可多个,可连续) -c 按字符切割 paste 合并两个文件同行号列到一行 -d 指定分隔符,默认用tab -s 所有行合成一行显示

分析文本 收集文本统计数据: wc 显示文件行、单词、字节、字符数 -l 只计数行数 -w 只计数单词总数 -c 只计数字节总数 -m 只计数字符总数 -L 显示文件中最长行的长度 文本排序: sort 文本排序显示(取列排序) -r 执行反方向(上至下)整理 -R 随机排序 -n 按数字大小整理 -f 忽略字符串中字符的大小写 -u 删除输出中的重复行 -t c 使用c做为字段的界定符 -k 3 按第3列排序 删除重复行: uniq 删除重复行 -c 显示每行重复的次数 -d 仅显示重复过的行 -u 仅显示不曾重复的行 注:连续且完全相同的即为重复 比较文件 diff 比较文件不同,命令的输出被保存在一种叫“补丁”的文件中 -u 输出“统一的”diff格式文件,最适用于补丁文件 patch 复制在其它文件中进行的改变(慎用) -b 自动备份改变了的文件

linux文本处理三剑客 grep:文本过滤工具(模式:pattern) 打印特定的行 三个变种:grep,egrep(支持扩展正则表达式),fgrep(不支持正则表达式搜索) sed:stream editor,文本编辑工具 awk:linux上的实现gawk,文本报告生成器

grep 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检 查;打印匹配到的行 模式:由正则表达式字符及文本字符所编写的过滤条件 grep 打印匹配到的行 --color=auto: 对匹配到的文本着色显示 -v 显示没被pattern匹配到的行 -i 忽略字符大小写 -n 显示匹配的行号 -c 统计匹配的行数 -o 仅显示匹配到的字符串 -q 静默模式,不输出任何信息 -A # 多显示后#行(After) -B # 多显示前#行(Before) -C # 多显示前后各#行(context) -e 实现多个选项间的逻辑or关系 -w 匹配整个单词(数字字母下划线都算是单词的一部分) -f 引用文件内容匹配 -E 使用ERE,使用扩展模式 -F 相当于fgrep,不支持正则表达式

正则表达式 REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能 程序支持: grep,sed,awk,vim,less,nginx,varnish等 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE(grep -E,egrep) 正则表达式引擎: 采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions) 元字符分类: 字符匹配、匹配次数、位置锚定、分组 查看帮助: man 7 regex

基本正则表达式元字符 正则表达式元字符匹配的是字符串(通配符匹配的是文件名) \ 转义符 字符匹配: . 匹配任意单个字符(.转义为 .;[.]也表示.) [] 匹配指定范围内的任意单个字符 [^] 匹配指定范围外的任意单个字符 [:alnum:] 字母和数字 [:alpha:] 任意大小写字符,[A-Z,a-z] [:lower:] 小写字母 [:upper:] 大写字母 [:blank:] 空白字符,空格和制表符 [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广) [:cntrl:] 不可打印的控制字符(退格、删除、警铃...) [:digit:] 十进制数字 [:xdigit:] 十六进制数字 [:graph:] 可打印的非空白字符 [:print:] 可打印字符 [:punct:] 标点符号 匹配次数: 用在要指定次数的字符后面,用于指定前面的字符要出现的次数 * 匹配前面的字符任意次,包括0次(贪婪模式:尽可能长的匹配) .* 任意长度的任意字符 ? 匹配其前面的字符0或1次 + 匹配其前面的字符至少1次 {n} 匹配前面的字符n次 {m,n} 匹配前面的字符至少m次,至多n次 {,n} 匹配前面的字符至多n次 {n,} 匹配前面的字符至少n次
位置锚定: 定位出现的位置 ^ 行首锚定,用户模式的最左侧 $ 行尾锚定,用于模式的最右侧 ^PATTERN$ 用于模式匹配整行: ^$ 空行 ^[[:space:]]*$ 空白行 < 或 \b 词首锚定,用于单词模式的左侧 > 或 \b 词尾锚定,用于单词模式的右侧 <PATTERN> 匹配整个单词 分组: () 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:(root)+ 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ... \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 示例:(string1+(string2)) \1 :string1+(string2) \2 :string2 后向引用:引用前面的分组括号中的模式所匹配的字符结果,而非模式本身 或者:| 示例:a|b: a或b C|cat: C或cat (C|c)at:Cat或cat

egrep及扩展的正则表达式 egrep = grep -E 扩展正则表达式的元字符 字符匹配: . 任意单个字符 [] 指定范围的字符 [^] 不在指定范围的字符 次数匹配: * 匹配前面字符任意次 ? 0或1次 + 1次或多次 {n} 匹配n次 {n,m} 至少n,至多m次 位置锚定: ^ 行首 $ 行尾 <, \b 语首 >, \b 语尾 分组: () 后向引用: \1, \2, ... 或者: a|b: a或b C|cat: C或cat (C|c)at:Cat或cat

vim简介 vi:Visual Interface(虚拟接口),文本编辑器 文本:ASCII,Unicode 文本编辑种类: 行编辑器:sed 全屏编辑器:nano,vi(vim -Vi Improved) nano,vi 单个编辑 sed 批量编辑 其他编辑器: gedit 一个简单的图形编辑器 gvim 一个Vim编辑器的图形版本 打开文件 vim [option]... file... +# 打开文件后,让光标处于第#行的行首,+默认行尾 +/PATTERN 打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 -b 二进制方式打开文件 -d 比较多个文件 -m 只读打开文件 ex file|vim -e 直接进入ex模式 如果文件存在,文件被打开并显示内容 如果文件不存在,当编辑后第一次存盘是创建文件 Vim模式 vim是一个模式编辑器 击键行为是依赖于vim的模式 三种模式: 命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本 插入(Insert)或编辑模式:修改文本 扩展命令(extended command)模式:保存,退出等 Esc键 退出当前模式(总是返回到命令模式)

模式和转换 命令模式: 字符间光标跳转: h左,l右,j下,k上 #command:跳转#个数的字符 单词间跳转: w下一个单词首,e当前或下个单词尾,b当前或前个单词首 #command:跳转#个数的单词 当前页跳转: H页首,M页中间行,L页底 行首、尾跳转 ^跳转至行首的第一个非空字符 0跳转至行首 $跳转至行尾 行间移动: #G、扩展模式:跳转至#行 G最后一行 1G,gg第一行 句间移动: )下一句 (上一句 段落间移动: }下一段 {上一段 翻屏操作: Ctrl+f 向文件尾部翻一屏 Ctrl+b 向文件首部翻一屏 Ctrl+d 向文件尾部翻半屏 Ctrl+u 向文件首部翻半屏 操作: 字符编辑: x删除光标处字符 #x删除光标处起始#个字符 xp交换光标所在处字符与其后面字符位置 ~转换大小写 J删除当前行后的换行符 替换: r(replace)替换光标所在处的字符 R切换成替换(REPLACE)模式 删除: d删除命令,可结合光标跳转字符,实现范围删除 d$删除到行尾 d^删除到非空行首 d0删除到行首 dw删除到下个单词首 de删除到当前或下个单词尾 db删除到当前或上个单词首 #command指定#个 dd删除光标所在行 #dd多行删除 D从当前光标位置一直删除到行尾,留空行,等同于d$ 复制: y复制,行为相似于d命令 ($,0,^,e,w,b,#command) yy复制行 #yy复制多行 Y复制整行 粘贴 p(paste)缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处后面 P整行,粘贴当前光标所在行上方;否则,粘贴至当前光标所在处前面 撤销更改: u撤销最近更改 #u撤销#次更改 U撤销光标落在这行后所有此行的更改 ctrl+r重做最后的“撤销”更改 .重复前一个操作 n.重复前一个操作n次 关闭文件: ZZ 保存退出 ZQ 不保存退出

命令模式-->插入模式 改变模式: c(change)修改后切换成插入模式 ($,^,0,b,e,w,#command) cc删除当前行并输入新内容 #cc删除#行并输入新内容 C删除当前光标到行尾,并切换成插入模式 i insert,在光标所在处输入 I 在当前光标所在行的行首输入 a append,在光标所在处后面输入 A 在当前光标所在行的行尾输入 o 在当前光标所在行的下方打开一个新行 O 在当前光标所在行的上方打开一个新行 插入模式-->命令模式 ESC

命令模式-->扩展命令模式 按“:”进入Ex模式 创建一个命令提示符,处于底部的屏幕左侧 w 写(存)磁盘文件 wq 写入并退出 x 写入并退出 q 退出 q! 不存盘退出 r filename 读文件内容到当前文件中 w filename 将当前文件内容写入另一个文件 !command 执行命令 r!command 读入命令的输出 地址定界: #具体第#行 #,#从左侧#表示起始行,到右侧#表示结尾行 #,+#从左侧#表示起始行,加上右侧#的行数 .当前行 $最后一行 %全文,相当于1,$ /pat1/,/pat2/从匹配到pat1的行开始,到第一次匹配到pat2行结束 #,/pat/从#行开始到pat /pat/,$从pat到最后一行 后跟一个编辑命令 d删除所选范围 y复制所选范围 w file将范围内的行另存为file r file在范围内插入指定文件中的所有内容 查找 /PATTERN从当前光标所在处向文件尾部查找 ?PATTERN从当前光标所在处向文件首部查找 n与命令同方向 N与命令反方向 查找并替换 s在扩展模式下完成查找替换操作 格式 s/查找内容/替换内容/修饰符 查找内容:可使用模式 替换内容:不能使用模式,但可以使用\1,\2...后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容 修饰符: i忽略大小写 g全局替换;每行只替换第一次出现 gc全局替换,每次替换前询问 查找替换中的分隔符“/”可替换成其他字符 扩展命令模式-->命令模式 ESC,enter

vim的寄存器 26个命名寄存器(a,b,...z),1个无命名寄存器,长存放在不同的剪贴板内容,可以不同会话间共享 格式: #+"寄存器+命令 如:3"tyy表示复制3行到t寄存器;"tp表示将t寄存器内容粘贴 未指定,将使用无命名寄存器 有10个数字寄存器,用0,1,...9表示,0存放最近复制内容,1存放最近删除内容。当新文本变更和删除时,1转存到2,2转存到3,以此类推。数字寄存器不能在不同会话间共享

编辑二进制文件 vim -b binaryfile 以二进制方式打开(二进制文件) 扩展模式下: %!xxd 转换成十六进制 %!xxd -r 转换回二进制

可视化模式 允许选择的文本块 v面向字符 V面向行 ctrl-v面向块 可视化键可以用于与移动键结合使用: w,),},箭头等 突出显示的文件可被删除,复制,变更,过滤,搜索,替换等

多文件模式 vim file1 file2 file3... next下一个 prev前一个 first第一个 last最后一个 wall保存所有 qall退出所有 wqall保存退出所有

多窗口模式 多文件: vim -o file1 file2 水平分屏file1和file2 vim -O file1 file2 垂直分屏file1和file2 窗口间切换:ctrl+w,Arrow 单文件: ctrl+w,s(split)水平分屏 ctrl+w,v(vertical)垂直分屏 ctrl+w,q取消相邻窗口 ctrl+w,o取消全部窗口 wqall保存退出全部

定制vim的工作特性 配置文件:永久有效 全局:/etc/vimrc 个人:~/.vimrc 扩展模式:当前vim进程有效 (1)行号 显示:set number, 简写为set nu 取消显示:set nonumber, 简写为set nonu (2)忽略字符的大小写 启用:set ic 不忽略:set noic (3)自动缩进 启用:set ai 禁用:set noai (4)智能缩进 启用:set smartindent 简写 set si 禁用:set nosi (5)高亮搜索 启用:set hlsearch 禁用:set nohlsearch (6)语法高亮 启用:syntax on 禁用:syntax off (7)显示Tab和换行符 (^I 和$显示) 启用:set list 禁用:set nolist (8)文件格式 启用windows格式:set fileformat=dos 启用unix格式:set fileformat=unix 简写:set ff=dos|unix (9)设置文本宽度 启用: set textwidth=65 (vim only) 禁用: set wrapmargin=15 (10)设置光标所在行的标识线 启用:set cursorline,简写cul 禁用:set no cursorline (11)复制保留格式 启用: set paste 禁用: set nopaste