目录
vim简介
什么是vim?
vim是一个类似于vi的文本编辑器。
为什么要用vim?
vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 确性,方便程序设计。
vim的三种模式
一般模式
打开文件后直接进去vim的一般模式,可以使用上下左右来移动光标,也可以使用删除字符或删除整行来 处理文件内容, 也可以使用复制、粘贴来处理文件数据。
按Esc退回到一般模式。
一般模式下常用快捷键
– h或← 光标左移一个字符。如果是30h,表示左移30个字符,下同
– j或↓ 光标下移一个字符
– k或↑ 光标上移一个字符
– l或→ 光标右移一个字符
– [Ctrl]+[f] 屏幕向下移动一页
– [Ctrl]+[b] 屏幕向上移动一页
– 0或[Home] 移动到此行最前面字符处
– H 光标移到当前屏幕最上方行的第一个字符
– M 光标移到当前屏幕最中间行的第一个字符
– L 光标移到当前屏幕最下方行第一个字符
– G 到此文件最后一行
– nG 移动到第n行
– gg 相当于1G,即到行首
– n[Enter] 光标下移n行
– /word 向下查找单词“word”
– ?word 向上查找单词“word”
– n 英文按键,表示重复前一个查找操作
– N 与n相反(反向查找,跟?相同)
– :s/word1/word2/g 在当前行查找word1替换成word2
– :%s/word1/word2/g 在当前文件查找word1替换成word2
– :n1,n2s/word1/word2/g 在n1到n2行查找word1替换成word2
– :1,
s/word1/word2/g在1到最后一行查找word1替换成word2–:1,
s
/
w
o
r
d
1
/
w
o
r
d
2
/
g
在
1
到
最
后
一
行
查
找
w
o
r
d
1
替
换
成
w
o
r
d
2
–
:
1
,
s/word1/word2/gc 同上,在替换前confirm用户是否替换
– x 向后删除一个字符
– nx 向后删除n个字符
– X 向前删除一个字符
– dd 删除光标所在行
– ndd 删除光标所在行以下n行
– d1G删除光标所在行到第一行所有数据
– dG 删除光标所在行到最后一行所有数据
– d
删除光标所在处到同行最后一个字符–d0删除光标所在处到同行第一个字符–yy复制光标所在行–nyy复制光标所在向下n行–y1G复制光标所在行到第一行所有数据–yG复制光标所在行到最后一行所有数据–y
删
除
光
标
所
在
处
到
同
行
最
后
一
个
字
符
–
d
0
删
除
光
标
所
在
处
到
同
行
第
一
个
字
符
–
y
y
复
制
光
标
所
在
行
–
n
y
y
复
制
光
标
所
在
向
下
n
行
–
y
1
G
复
制
光
标
所
在
行
到
第
一
行
所
有
数
据
–
y
G
复
制
光
标
所
在
行
到
最
后
一
行
所
有
数
据
–
y
复制光标所在处到同行最后一个字符
– y0 复制光标所在处到同行第一个字符
– p 将已复制的数据粘贴到光标所在下一行
– P 同上,粘贴到上一行
– u 复原前一个操作
编辑模式
按下i,I,o,O,a,A,r,R等任何一个字母后进入编辑模式。 按下以上按键后,在画面的左下方会出现INSERT或REPLACE的字样, 此时才可以进行编辑。 编辑模式下可以输入文件内容。 而如果要回到一般模式时, 按下Esc
按键即可。
编辑模式快捷键
– i 从光标所在处插入
– l 从所在行第一个非空白字符处插入
– a 从光标所在下一个字符处插入
– A 从光标所在行最后一个字符处插入
– o 在光标所在处下一行插入新的一行
– O 在光标所在处上一行插入新的一行
– r 替换光标所在处字符一次
– R 一直替换光标所在处文字直到按下Esc
命令模式
在一般模式当中,输入: / ? 三个中的任何一个按钮,就可以将光标移
动到最底下那一行。在这个模式当中,可以提供查询、替换等功能。同时,存盘、替换 字符、离开vi、显示行号等等命令都是在此模式进行。
命令模式快捷键
– :w[filename] 另存为filename
– :r[filename] 读取filename到光标所在行后面
– :n1,n2 w[filename] 将n1到n2行另存为filename
– :! command 临时切换到命令行模式下执行command,
如 :! ls /tmp
– :q!
不保存离开
– :wq! 保存后离开
– :set nu 显示行号
– :set nonu 取消显示行号
常见shell命令
变量设置
变量读取echo $variable
echo $LOGNAME
echo $HOME
echo ${LOGNAME}
变量设置
变量与变量内容通过=号来链接
等号两边不能包含空格
变量名称只能是英文字母与数字,不能以数字开头
变量内容包含空格,使用单引号或双引号
变量内容由其他命令提供使用“或是$()
通常变量名大写为系统默认变量,自己定义变量可以使用小写,方 便区分
取消变量的定义 unset 变量名 unset version
数据重定向
数据重定向就是将某个命令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方,例如传输到文件或是其他命令 。通常执行一条命令的时候会有标准输出和标准错误输出。
标准输入(stdin):编号为0
标准输出(stdout):编号为1
标准错误输出(stderr):编号为2
1>:以覆盖的方法,将正确的数据输出到文件;
1>>:以累加的方法,将正确的数据输出到文件;
2>:以覆盖的方法,将错误输出的数据输出到文件;
2>>:以累加的方法,将错误输出的数据输出到文件;
举例:将ls的输出重定向到ls.log当中去
ll 1> ls.log
cat ls.log
命令执行判断
- $?:命令回传值
- &&:若cmd1执行完毕且正确执行( ?=0),则开始执行cmd2,若cmd1执行完毕且为错误( ? = 0 ) , 则 开 始 执 行 c m d 2 , 若 c m d 1 执 行 完 毕 且 为 错 误 ( ?≠0),则cmd2不执行。
- ||:若cmd1执行完毕且正确执行( ?=0),则cmd2不执行。若cmd1执行完毕且为错误( ? = 0 ) , 则 c m d 2 不 执 行 。 若 c m d 1 执 行 完 毕 且 为 错 误 ( ?≠0),则开始执行cmd2
管道命令
利用Linux所提供的管道符“|”将两个命令隔开,管道符左边 命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的 输入,第二个命令的输出又会作为第三个命令的输入,依此类推 。
举例:
– 将ls的查询信息传递给grep命令进行搜索
drwxr-xr-x 11 demo games 4096 Nov 5 02:18 R-3.1.0
-rw-r–r– 1 root root 28469975 Apr 18 2014 R-3.1.0.tar.gz
find命令
- 命令功能: linux中最有用的命令之一。 在一个目录(及子目录)中搜索文件,可以指定一些匹配条件 ,如按文件名、文件类型、用户甚至是时间戳查找文件
命令格式: find [path…] [-option]
-path:find命令所查找的目录路径。例如用.来表示当前目录,用 /来表示系统根目录
-options:
-print:将匹配的文件输出到标准输出
-exec:对匹配的文件执行该参数所给出的shell命令。相应命令的形式为‘command’ { } \;,注意{ }和\;之间的空格。find ./ -size 0 -exec ls {} \; 显示文件大小为零的文件
find / -name demo 在/目录及其子目录下面查找名字 为demo的文件
find . -name “*.java” 在当前目录及其子目录(用“.” 表示)中查找任何扩展名为“java”的文件
perm 按照文件权限来查找文件。
find . -perm 755 –print 在当前目录下查找文件权限位为755的 文件,即文件所有者可以读、写、执行,组与其他用户可以读、 执行的文件
- user 按照文件所有者来查找文件。
find ~ -user chinahadoop –print 在$HOME目录中查找文件属 主为chinahadoop的文件
group 按照文件所属的组来查找文件。
find / -group hadoop –print 在/目录下查找属于hadoop用户 组的文件
mtime -n +n
按照文件的更改时间来查找文件, -n表示文件更改时间距现在n 天以内,+n表示文件更改时间距现在n天以前。nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不 存在。- type
查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。 - size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
sed命令
非交互式文本处理工具。 把每一行都存在临时缓冲区中,对这个副本进行编辑,所以 不会修改原文件。
sed [option] “[action]” [filename]
– option:
• -h或—help 显示帮助。
• -n仅显示script处理后的结果。
• -V或—version 显示版本信息。
• -e :允许对输入数据应用多条sed命令进行编辑。
• -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作。
– action:
• s:字符串替换
• i:插入
• d:删除
• a:追加
• c:替换
• p:打印指定的输出行
sed “s/chinahadoop/hadoop/g” demo.txt s表示替换命令,/chinahadoop/表示匹配chinahadoop /hadoop/表示把匹配替换成hadoop /g 表示一行上的替换所有的匹配
- \如果我们需要一次替换多个模式 第一种方式 sed ‘s/l/L/1;s/o/O/3g’ demo.txt 第二种方式 sed -e ‘s/l/L/1’ -e ‘s/o/O/3g’ demo.txt
grep命令
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来) , 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并 把匹配的行打印出来。
grep [OPTIONS] PATTERN [FILE…]
-?:同时显示匹配行上下的?行 如:grep -2 pattern filename同时显示匹配行的上下2行。
-b,–byte-offset 打印匹配行前面打印该行所在的块号码。
-c,–count 只打印匹配的行数,不显示匹配的内容。
-f File,–file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h,–no-filename 当搜索多个文件时,不显示匹配文件名前缀。
-i,–ignore-case 忽略大小写差别。
-q,–quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。
-n,–line-number 在匹配的行前面打印行号。
-v,–revert-match 反检索,只显示不匹配的行。
在ls显示的内容中查看包含demo的行并用颜色区分并添加行号
ll | grep demo –color -n
tail命令
把某个档案文件的最后几行显示到终端上,如果该档案有更新 ,tail会自动刷新,确保你看到最新的档案内容。
tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
-f 该参数用于监视File文件增长。
-c Number 从 Number 字节位置读取指定文件
-n Number 从 Number 行位置读取指定文件。
-m Number 从 Number 多字节字符位置读取指定文件,比如你的文 件如果包含中文字,如果指定-c参数,可能导致截断,但使用-m则会 避免该问题。
-b Number 从 Number 表示的512字节块位置读取指定文件。
-k Number 从 Number 表示的1KB块位置读取指定文件。
– File 指定操作的目标文件名
当涉及到number,如果不指定,默认显示10行。Number前面可 使用正负号,表示该偏移从顶部还是从尾部开始计算
sort命令
sort命令默认的情况下是按照字符排序
-n 按照数值排序
-u 不出现重复的行
-r 逆向排序
-t 指定分段的符号
-k 指定的第几个段
cut命令
cut命令在文件中负责剪切数据用的。命令格式: cut [-option] file
option:
-b 字节
-c 字符
-f 提取第几列
-d 按指定分隔符分割列
history命令
用于显示全部历史。
history 5
显示执行过的上5条命令
使用上下箭头键也可以查看上一条跟下一条命令
!!
运行上一条命令
!88
运行第88条命令
!88 /test
运行第88条命令并在命令后面加上/test
!?CF?
运行上一个包含CF字符串的命令
!ls
运行上一个ls命令
!ls:s/CF/l
运行上一个ls命令,其中把CF替换成l
fc
编辑并运行上一个历史命令 fc 66 编辑并运行第66个历史命令 fc -e /usr/bin/vim 66
使用vim编辑第66个命令并运行
使用ctrl+r
搜索历史中的字符串
history -c
清空历史命令