一、文件管理
1 文件管理之:查看文件内容(cat tac less more head tail tailf grep …)
#------cat
# cp /etc/passwd ./pass
# cat pass #正常查看文件方式
# cat -n pass #-n显示文件有多少行
# cat -A pass #查看文件的特殊符号,比如文件中存在tab键
# tac pass #倒序查看文件
cat >> test2.txt < ads adf EOF #------less、more # less /etc/services #使用光标上下翻动,空格进行翻页,q退出 # more /etc/services #使用回车上下翻动,空格进行翻页,q退出(有百分比) #------head # head pass #查看头部内容,默认前十行 # head -n5 pass #查看头部5行,使用-n指定 # ps aux | head -5 # 只看头部5个进程 #------tail # tail pass # 查看文件尾部,默认10行 # tail -20 /var/log/secure # 查看文件尾部20行 # tail -f /var/log/messages #-f动态查看文件尾部的变化 # tailf /var/log/messages #查看文件尾部的变化 # ps aux | tail -2 #------grep过滤文件内容 # grep "^root" pass #匹配以root开头的行 # grep "bash$" pass #匹配以bash结尾的行 # grep -i "ftp" pass #忽略大小写匹配 # grep -Ei "sync$|ftp" pass #匹配文件中包含sync结尾或ftp字符串 # grep -n -A 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的下2行 # grep -n -B 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上2行 # grep -n -C 2 "Failed" /var/log/secure #匹配/var/log/secure文件中Failed字符串,并打印它的上下2行 # 上翻,下翻 control+b:下翻 control+f:上翻 cat 显示文本 -E 显示结尾的$符 -n 对显示的每一行进行编号 -b 对非空行进行编号 -s 对连续的空行进行压缩 tac 倒序显示 m[root@192 test]#cat issue \S Kernel \r on an \m m[root@192 test]#tac issue Kernel \r on an \m \S less 分屏显示文本 向下翻一屏 空格 向下翻一行 回车 q 退出 / 文本 搜索文本 n 向下查找 N向上查找 less 是man命令的默认分页器 more 分页显示文件 默认情况下显示读取的百分比 读取完成自动退出 q 退出 -d 显示翻屏和退出的提示 head 显示文件的前面的内容 默认显示前10行 -# 显示前#行 head -2 passwd -n # 显示前#行 -c # 显示前#个字符 tail 显示文件的后面的内容 默认显示后10行 -# 显示后#行 -n # 显示后#行 -c # 显示后#个字符,换行符也是一个字符 m[root@192 test]#tail -c 3 passwd sh 2 文件管理之:字符处理命令(sort、uniq、cut、sed、awk、wc、) cut 切割 cut OPTION... [FILE]... -c 按照字符切割 tail passwd |cut -c2-5 -d 指定切割符,默认是tab -f # 显示第#个字段 #,#,# 显示离散的多个 #-# 表示连续的 1-5,7 可以结合使用 # 以冒号为切割 tail passwd |cut -d: -f1-5,7 tail passwd |cut -d: -f1-5 tail passwd |cut -d: -f1,3,5 cut OPTION... [FILE]... #选项:-d 指定分隔符 -f 数字,取第几列 –f3,6三列和6列 -c 按字符取(空格也算) #echo "Im lqz, is QQ 306334678" >file.txt #过滤出文件里 lqz以及306334678 #实现上述题目几种思路 # cut -d " " -f2,5 file.txt # cut -d " " -f2,5 file.txt |sed 's#,##g' # sed 's#,# #g' file.txt | awk -F " " '{print $2 " " $5}' # awk '{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}' # awk -F "[, ]" '{print $2,$6}' file.txt # awk -F '[, ]+' '{print $2,$5}' file.txt # awk 取列 awk '{print $2,$5}' file.txt # -F 指定分隔符 awk '{print $2,$5}' file.txt | awk -F "," '{print $1,$2}' # sed 替换 sed 's###g' # sed 's###g' 固定写法 # sed 's#,##g' 把逗号替换成空 cut -d " " -f2,5 file.txt | sed 's#,##g' paste 合并 默认是相同行合并到一起,默认是tab键 -d 执行间隔符 -s 将所有的行按照列来显示 paste a.txt b.txt paste -d: a.txt b.txt paste -s a.txt b.txt wc 用来对文本进行统计 [root@localhost test]#wc b.txt 4 5 20 b.txt 行数 单词数 字节数 文件名 -l 只显示行数 -w 只显示单词数 -c 只显示字节数 -m 只显示字符数 -L 显示文件中最长行的长度 wc [OPTION]... [FILE]... #选项:-l显示文件行数 -c显示文件字节 -w显示文件单词 # wc -l /etc/fstab #统计/etc/fstab文件有多少行 # wc -l /etc/services #统计/etc/services 文件行号 # ls |wc -l #统计当前路径下有多少文件和文件夹 #扩展方法 # grep -n "." /etc/services | tail -1 # awk '{print NR $0}' /etc/services | tail -1 # cat -n /etc/services | tail -1 sort 排序 在有些情况下,需要对应一个无序的文本文件进行数据的排序,这时就需要使用sort进行排序了。 Usage: sort [OPTION]... [FILE]... or: sort [OPTION]... --files0-from=F 默认是按照字母排序 -r 倒序 -R 随机排序 -n 按照数字排序 -f 忽略大小写 -t 指定分隔符 -k # 指定按照第#个字段进行排序 sort -t: -k3 passwd sort -nt: -k3 passwd sort [OPTION]... [FILE]... # -r:倒序 -n:按数字排序 -t:指定分隔符(默认空格) -k:指定第几列, 指定几列几字符(指定1,1 3.1,3.3) #1.首先创建一个文件,写入一写无序的内容 [root@lqz ~]# cat >> file.txt < b:3 c:2 a:4 e:5 d:1 f:11 EOF #2.使用sort下面对输出的内容进行排序 [root@lqz ~]# sort file.txt a:4 b:3 c:2 d:1 e:5 f:11 #结果并不是按照数字排序,而是按字母排序。 #可以使用-t指定分隔符, 使用-k指定需要排序的列。 # -t 指定分隔符,-k指定列,按第二列排序 [root@lqz ~]# sort -t ":" -k2 file.txt d:1 f:11 #第二行为什么是11?不应该按照顺序排列? c:2 b:3 a:4 e:5 #按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。 #如果想要按照数字的方式进行排序, 需要使用 -n参数,按数字排序。 [root@lqz ~]# sort -t ":" -n -k2 file.txt d:1 c:2 b:3 a:4 e:5 f:11 #测试案例,下载文件http://fj.xuliangwei.com/public/ip.txt,对该文件进行排序 [root@lqz ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt uniq合并相同的行 如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq命令解决这个问题(但是必须配合sort使用,相邻的才能去重,所以要配合sort)。 相邻 完全一样 -c 显示相同的行出现的次数 -d 只显示重复的行 -u 显示从没有重复过的行 # d文件以空格为切割,第4的一个字符排序,显示相同的行出现的次数 cut -d" " -f4 d|sort |uniq -c uniq [OPTION]... [INPUT [OUTPUT]] #选项:-c 计算重复的行 #1.创建一个file.txt文件: [root@lqz ~]# cat >>file2.txt < abc 123 abc 123 EOF #2.uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起 [root@lqz ~]# cat file.txt |sort 123 123 abc abc #3.使用uniq去除相邻重复的行 [root@lqz ~]# cat file.txt |sort|uniq 123 abc #4.-c参数能统计出文件中每行内容重复的次数 [root@lqz ~]# cat file.txt |sort|uniq -c 2 123 2 abc pv page # 一天访问量 uv user # 访问用户 diff 对比文件 [root@localhost test]#echo "123" >> f [root@localhost test]#diff d f 11a12 > 123 [root@localhost test]#echo "1234" >> d [root@localhost test]#diff d f 12c12 < 1234 --- > 123 二、文件编辑 1.VIM基本概述 (1).什么是VIM? vi和vim是Linux下的一个文本编辑工具。(可以理解为windows的记事本,或word文档) (2).为什么要使用VIM? 因为Linux系统一切皆为文件,而我们工作最多的就是修改某个服务的配置(其实就是修改文件内容)。 也就是说如果没有vi/vim,我们很多工作都无法完成。 PS: vim是学习linux最重要的命令之一 (3).VI与VIM有什么区别? vi和vim都是文本编辑器,只不过vim是vi的增强版,比vi多了语法高亮显示,其他编辑功能几乎无差,所以使用vi还是vim取决个人习惯。 (相当于windows系统下的文本编辑软件“记事本”与”notepad++”的区别) PS:因为前期最小化安装CentOS系统,所以默认情况下没有vim命令,但可以使用yum install vim -y安装 (4).如何使用VIM编辑器? 在使用VIM之前,我们需要先介绍下VIM的三种模式: 普通模式、编辑模式、命令模式,每种模式分别支持多种不同的快捷键,要想高效率地操作文本,就必须先搞清这三种模式的操作区别以及模式之间的切换方法。 (5).打开文件 vim [option] .... file.... +# 直接定位到第#行 +/pattern 打开文件后,直接定位到第一个匹配到patter的地方 -b 以二进制方式打开文件 -d file1 file2 对比打开多个文件 -m file 只读方式打开文件 -e 直接以末行模式打开 (6) .VIM模式三种模式介绍 6.1 普通模式: 主要是控制光标移动,可对文本进行复制、粘贴、删除等工作。 使用vim filename 编辑一个文件时,一进入该文件就是普通模式了。 在这个模式下,可以进行光标移动、复制、删除、粘贴操作。 6.2 编辑模式: 主要进行文本内容编辑和修改 从普通模式进入编辑模式,只需你按一个键即可(i, I, a, A, o, O) 当进入编辑模式时,会在屏幕的最下一行会出现 “INSERT”标记 从编辑模式回到普通模式只需要按键盘左上方的 ESC 键即可。 6.3 末行模式: 主要用于保存或退出文本 在普通模式下,输入 “:” 或者 “/“ 即可进入命令模式。 在命令该模式下,可进行的操作有,显示行号、搜索、替换、保存、退出。 小结: vim编辑打开文件整体流程如下: 1.默认打开文件处于普通模式 2.从普通模式切换至编辑模式需要使用a、i、o 3.编辑模式修改完毕后需要先使用ECS返回普通模式 4.在普通模式输入”:”或”/“进入命令模式,可实现文件的保存与退出。 PS: 在vim中,无法直接从编辑模式切换到扩展命令模式。 模式 命令模式:可以光标,可以粘贴、复制文本,默认 插入模式或者编辑模式:可以修改文本 末行模式(扩展命令模式):保存、退出等等 esc 退出当前的模式 二.VIM模式使用 1 模式之间切换 命令模式- 插入模式 i 光标所在处插入 I 在当前光标所在的行的行首插入 a 光标所在位置的后面插入 A 在当前光标所在的行尾插入 o 在当前光标所在的行的下一行(新开)插入 O 在当前光标所在的行的上一行(新开一行)插入 插入模式- 命令模式 esc 命令模式 -- 末行模式 : 末行模式 -- 命令模式 esc esc esc enter 2 关闭文件 末行模式 :w 保存 :q 退出 :wq 保存并退出 :q! 强制退出 :wq!强制保存退出 :x 保存并退出 命令模式 ZZ 保存退出 ZQ 不保存退出 3 扩展命令行模式 按":" 来进入 w 写入 q 退出 wq 保存并退出 q! 强制退出 x 保存并退出 r file 读入文件 w file 另存为 !command 直接执行命令 r!command 直接把命令的结果写到文件中 4 命令模式跳转 字符之间跳转 l 向右 h 向左 j 向下 k 向上 单词间跳转 w 下一次的单词的词首 e 当前词的词尾或者下一个单词的词尾 b 当前词的词首或者上一词的词首 # command 直接跳转#个单词 页面间跳转 H 页首 L 页尾 M 页中 zt 将光标所在行移动到屏幕的顶端 zb 将光标所在行移动到屏幕的底部 zz 将光标所在行移动到屏幕的中间 行首行尾之间跳转 ^ 跳转到当前光标所在行的第一个非空字符 0(数字) 跳转到行首 $ 跳转到行尾 行间移动 #G 跳转到第#行 4G就是跳到4行 在命令扩展模式下,直接:# 跳转到对应的#行 G 直接到最后一行 gg 跳转到第一行 1G 跳转到第一行 段落之间跳转(空行分割为一段) { 上一段 } 下一段 翻屏 ctrl+f 向文件尾部翻一屏 ctrl+b 向文件首部翻一屏 ctrl+d 向文件尾部翻半屏 ctrl+u 向文件首部翻半屏 5 命令模式编辑 字符编辑 x 删除光标所在处的字符 #x 删除#个字符 xp 将光标所在处的字符和后面的字符互换位置 ~ 将光标所在的位置大小写互换 J 删除当前行的换行符 替换 r 替换当前光标所在处的字符 R 进入替换模式 删除 d 删除,需要跟字符跳转结合 d$ 删除到行尾,删除当前位置 d0 删除到行首,当前位置不删除 d^ 删除到非空字符 dw 删除一个单词 de 向后删除一个单词 db 向前删除一个单词 dd 删除正行 # dd 删除#行 dG 删除到结尾 dgg 删除到开头 D 相当于d$ 复制 y,也可以跟字符跳转结合 y$ y0 y^ yw ye yb yy 一正行 #yy 复制#行 yG 复制到结尾 ygg 复制到开头 Y 复制整行 粘贴 p 如果是整行的话,则粘贴到当前光标所在行的下一行,否则粘贴到光标的后面 P 如果是整行的话,则粘贴到当前光标所在行的上一行,否则粘贴到光标的前面 改变,删除以后并将模式切换成插入模式 c 可以跟光标的跳转做结合 c$ c0 c^ cw ce cb #command cc 删除正行并插入 C 相当于c$ #[i|I|a|A|o|O]string esc 将string粘贴#次 搜索 /pattern 从当前光标往下搜索 ?pattern 从当前光标往上搜索 n 同命令相同的方向 N 同命令相反的方向 撤销 u 撤销最近的修改 # u 撤销最近的#次修改 ctrl +r 撤销之前的撤销动作 . 重复最后一次操作 #. 最后一次操作重复执行#次 6 命令扩展模式 地址定界 :start,end # 具体到第#行 #,# 第#行到第#行 #,+n 从第#开始,到第#+n行结束 1,+2 ==>1,3 . 表示当前光标所在的行 $ 表示最后一行 $-1 表示倒数第二行 % 表示全文 /pat1/,/pat2/ 从第一个pat1匹配到的地方,到pat2第一次匹配到的地方 #,/pat/ 从第#行开始,到第一次被pat匹配到的地方 /pat/,$ 从第一次被pat匹配到的地方到结尾 可以使用的命令 d y w file 重新另存为文件 r file 将文件的内容写到匹配到的下一行 6.1 查找并替换 要使用地址定界来进行查找 s 在扩展命令模式下使用为替换(替换光标出的字符) 格式: %s/要查找的内容/要替换的内容/装饰器(加了%,就是全文查找) 要查找的内容可以使用正则 替换的内容不能为正则 可以为分组:%s/(nfs.*)/#\1/ \1表示第一个分组内的内容 \2 \3 & 可以代表前面匹配到的内容 %s/sshd/#&/ 在匹配到的字符sshd前加# 装饰器 i 忽略大小写 g 表示全部替换 gc 每一次替换之前都要询问是否替换 分隔符的替换还可以使用 @ # %s/@/etc/# etc前面的/替换成# 7 可视化 v 面向字符 V 面向行的 ctrl +v 面向块 可以结合所有的跳转键进行结合 对突出显示部分可以使用删除、复制、变更、过滤、替换、另存为等等 ctrl+v 进入可视块模式,选中需要注释的行 1.插入:按shift+i进入编辑模式,输入#,结束按ESC键 2.删除:选中内容后,按x或者d键删除 3.替换:选中需要替换的内容, 按下r键,然后输入替换后的内容 shift+v 进入可视行模式,选中整行内容 1.复制:选中行内容后按y键及可复制。 2.删除:选中行内容后按d键删除。 8 打开多个文件 vim file1 file2 file3 :next 下一个 :prev 上一个 :first 第一个 :last 最后一个 :qall 退出全部 :wall 保存全部 :wqall 保存并退出全部 :xall 保存并退出全部 9 使用多个窗口 vim -o 水平分隔 vim -O 垂直分隔 切换ctrl+w 加上上下左右箭头 退出:qall vim -o file2 passwd a 同时打开三个文件 vim -o file1 file2 #水平分割 vim -O file1 file2 #垂直分割 #ctrl+ww 文件间切换 10 相同文件之间差异对比,通常用于对比修改前后差异 # diff #文件对比 # vimdiff #以vim方式打开两个文件对比,高亮显示不同的内容 11 单文件切割 ctrl+w,s 水平切割 ctrl+w,v 垂直切割 ctrl+w,q 取消相邻的窗口 ctrl+w,o 取消全部窗口 12 如果VIM非正常退出 (ctrl+z)挂起或强制退出终端没关闭VIM后 #假设打开filename文件被以外关闭,需要删除同文件名的.swp文件即可解决 # rm -f .filename.swp 三、vim工作特性 配置文件 全局有效:/etc/vimrc 对当前用户有效: ~/.vimrc 行号:set nu 取消 set nonu 忽略大小写(搜索) set ic 取消set noic 自动缩进(同上一行) set ai 取消set noai(python中用的多) 设置高亮显示(搜索到的内容) set hls 取消set nohls 语法高亮 syntax on 取消 syntax off 文件格式 windows格式 set fileformat=dos unix set fileformat=unix 添加标识线: set cul 取消标识线 set nocul 获取帮助: set all 获取帮助信息: :help :help topic vimtutor