Linux文件部分的学习,有这一篇的博客足矣!
目录
[① mkdir创建目录](#① mkdir创建目录)
[② mkdir -p递归创建目录](#② mkdir -p递归创建目录)
[③ 使用mkdir同时创建多个目录](#③ 使用mkdir同时创建多个目录)
[① rmdir移除空目录](#① rmdir移除空目录)
[② rmdir -p递归删除空目录](#② rmdir -p递归删除空目录)
[③ 使用rmdir同时删除多个空目录](#③ 使用rmdir同时删除多个空目录)
[① touch创建文件](#① touch创建文件)
[② 使用touch命令同时创建多个文件](#② 使用touch命令同时创建多个文件)
[③ {1...5}根据序号同时创建多个文件](#③ {1…5}根据序号同时创建多个文件)
[① 普通删除](#① 普通删除)
[② 扩展:rm -rf /*,一定要慎重](#② 扩展:rm -rf /*,一定要慎重)
[① cp复制操作](#① cp复制操作)
[② cp复制并重命名文件](#② cp复制并重命名文件)
[③ cp复制文件夹到指定路径](#③ cp复制文件夹到指定路径)
[(2)、 Linux打包操作](#(2)、 Linux打包操作)
[(3)、 tar -tf以及tar -uf](#(3)、 tar -tf以及tar -uf)
[(4)、 打包并压缩(学习的重点)](#(4)、 打包并压缩(学习的重点))
[(5)、 对压缩包进行解压](#(5)、 对压缩包进行解压)
[① zip压缩](#① zip压缩)
[② unzip解压缩](#② unzip解压缩)
[三、vim文件编辑器的 概述 与 使用](#三、vim文件编辑器的 概述 与 使用)
[☆ 光标移动到首与尾](#☆ 光标移动到首与尾)
[☆ 翻屏](#☆ 翻屏)
[向上 翻屏,按键:ctrl + b (before) 或 PgUp](#向上 翻屏,按键:ctrl + b (before) 或 PgUp)
[向下 翻屏,按键:ctrl + f (after) 或 PgDn](#向下 翻屏,按键:ctrl + f (after) 或 PgDn)
[向上翻半屏,按键:ctrl + u (up)](#向上翻半屏,按键:ctrl + u (up))
[向下翻半屏,按键:ctrl + d (down)](#向下翻半屏,按键:ctrl + d (down))
[☆ 快速定位到指定行(重点)](#☆ 快速定位到指定行(重点))
[① 保存操作(write)](#① 保存操作(write))
[② 退出(quit)](#② 退出(quit))
[③ 保存并退出(掌握,常用)](#③ 保存并退出(掌握,常用))
[④ 强制(!)(掌握,常用)](#④ 强制(!)(掌握,常用))
[⑤ 搜索/查找](#⑤ 搜索/查找)
[⑦ 显示行号](#⑦ 显示行号)
[⑧ set paste与set nopaste(了解)](#⑧ set paste与set nopaste(了解))
[②grep搜索文件内容 (重要)](#②grep搜索文件内容 (重要))
一、文件的命名规则
1、可以使用哪些字符?
除了 " / " 字符之外,所有的字符都可以使用 ,但是要注意的是,在目录文件中,不建议使用其他特殊的字符,例如:<、>、?、*等等,尽量避免使用。
如果一个文件名中包含了特殊的字符 ,例如空格,那么在访问这个文件的时候,就需要使用双引号将文件名进行括起来。
建议的命名规则:
**1、**由于Linux严格区分大小写,所以尽量都用小写字母.
**2、**如果必须对文件名进行分割,建议使用 " _ " ,例如: xiaofeng_2024_12
2、文件名的长度
目录名或者文件名 的长度都不能超过255个字符。
3、Linux文件名的大小写
- Linux目录名或者文件名是严格区分大小写的,如xiaofeng、XiaoFeng和XIAOFENG,是互不相同的目录名或者文件名。
- 尽量不要使用大小写来区分不同的文件或目录。
- 建议文件名一律使用小写字母
4、Linux文件扩展名
Linux 的扩展名对操作系统本身是没有特殊的含义的,Linux系统并不以文件的扩展名来区分文件类型。例如:xiaofeng.txt就只是一个文件,该文件的扩展名 .exe 并不代表此文件就一定是可执行的。
在Linux系统中,文件的扩展名的用途是为了使运维人员更好的区分不同的文件类型。
二、文件管理命令
在日常工作中,我们需要经常对Linux的文件或者目录进行新建、删除、修改、查看、复制和移动等等。
1、目录的创建/删除
在实际应用中,有两个相关目录的操作:创建和删除。
(1)、目录的创建
① mkdir创建目录
基本语法:
# mkdir 目录名称
**主要功能:**就是根据目录的名称创建一个目录
> mkdir = make directory
**案例:**在家目录下创建一个xiaofeng的文件夹
# mkdir xiaofeng
② mkdir -p递归创建目录
基本语法:
# mkdir -p /usr/local/nginx/conf
选项说明:
-p:递归创建,从左边的路径开始一级一级创建目录,直到路径结束
**案例:**在已知目录(/usr/local)下创建多级目录(nginx/conf)
# mkdir /usr/local/nginx/conf
mkdir: cannot create directory '/usr/local/nginx/conf': No such file or directory
mkdir:不能创建目录conf,为什么呢?因为/usr/local目录下并没有nginx
解决方案:如果我们想同时创建多级目录,必须使用-p选项,其会从左向右一级一级创建目录。
# mkdir -p /usr/local/nginx/conf
③ 使用mkdir同时创建多个目录
# mkdir 目录名称1 目录名称2 目录名称3 ...
**案例:**在当前目录下创建a、b、c三个目录
bash
# mkdir a
# mkdir b
# mkdir c
或
# mkdir a b c
同时创建关于a的下标为1-10的目录文件
#mkdir a{1..10}
总结:
- 一个目录一个目录创建 # mkdir 目录名称
- 多级目录一起创建 # mkdir -p 目录名称1/目录名称2/...
- 同时创建多个目录 # mkdir 目录名称1 目录名称2 目录名称3 或 #mkdir 目录名称{num1..num2}
扩展:Linux快捷键(方向键上下)
在终端中:
- 按方向键=>向上,其会返回上一次输入的命令
- 按方向键=>向下,其会返回下一次输入的命令
(2)、目录删除(必须是空目录)
① rmdir移除空目录
基本语法:
# rmdir 目录名称
> rmdir = remove directory,移除目录
案例:把家目录下的xiaofeng删除(空目录)
bash
# rmdir xiaofeng
② rmdir -p递归删除空目录
基本语法:
# rmdir -p 目录名称1/目录名称2/目录名称3/...
主要功能: 从右向左一级一级删除空目录
案例:递归删除xiaofeng文件夹中的yunwei文件夹中的shenzhen3
bash
# rmdir -p xiaofeng/yunwei/shenzhen3
③ 使用rmdir同时删除多个空目录
# rmdir 目录名称1 目录名称2 目录名称3 ...
案例:删除家目录中的a、b、c三个空目录
# rmdir a b c
总结:
- # rmdir 目录名称 ,删除某个空目录
- # rmdir -p 目录名称1/目录名称2/目录名称3/... ,同时删除多级目录(从右向左一级一级删除)
- # rmdir 目录名称1 目录名称2 目录名称3 ,同时删除多个空目录
2、文件的创建/删除
(1)、创建文件
① touch创建文件
基本语法:
# touch 文件名称
主要功能: 在Linux系统中的当前目录下创建一个文件
案例:在当前目录下创建一个readme.txt文件
# touch readme.txt
② 使用touch命令同时创建多个文件
基本语法:
bash
# touch 文件名称1 文件名称2 文件名称3 ...
或者
#touch 文件名称{num1..num2}
案例:创建一个shop商城文件夹,然后在内部创建index.php/admin.php/config.php三个文件
# mkdir shop
# touch shop/index.php
# touch shop/admin.php
# touch shop/config.php
或
# touch shop/index.php shop/admin.php shop/config.php
> 提出问题:观察以下命令,看看有何区别?
>>>> 第一种写法:touch shop/index.php shop/admin.php shop/config.php > > 代表在shop目录下首先创建 一个index.php,再创建 一个admin.php,最后config.php
**>>>> 第二种写法:**touch shop/index.php admin.php config.php > > 代表在shop目录下首先创建index.php,然后在当前目录下创建admin.php,最后在当前目录下创建config.php
③ {1...5}根据序号同时创建多个文件
基本语法:
# touch 文件名称{开始序号..结束序号}
含义:
根据提供的开始序号~结束序号,一个一个创建文件
**案例:**创建file1、file2、file3、file4、file5共5个文件
# touch file1
# touch file2
# touch file3
# touch file4
# touch file5
或
# touch file{1..5}
总结:
touch 文件名称
touch 文件名称1 文件名称2 文件名称3 ...
touch 文件名称{开始序号...结束序号}
(2)、删除文件
① 普通删除
基本语法:
# rm [选项] 文件或文件夹的名称
选项说明:
-r :针对文件夹,代表递归删除,先把目录下的所有文件删除,然后在删除文件夹
-f :强制删除,不提示,初学者一定要慎重!!!
**案例:**删除readme.txt文件
# rm readme.txt
rm: remove regular empty file 'readme.txt'?这里可以回复y or n
y代表确认删除
n代表取消删除
案例 :强制删除admin.php,不提示(慎重)
# rm -f admin.php
案例 :删除非空的文件夹(-rf强制递归删除,不提示)
# rm -rf shop
提示信息: descend into directory 'itheima/'? ***含义:*是否进入itheima目录?
提示信息: remvoe directory 'itheima/'? ***含义:*是否删除itheima文件夹?
**扩展:**Ctrl + C在Linux下的使用方式> 在Linux操作系统中,Ctrl + C不是复制,而是中断某个操作
总结:
- # rm 文件名称
- # rm 文件名称1 文件名称2 文件名称3 ...
- # rm -f 文件名称 => 强制删除,不提示
- # rm -rf 文件夹名称 => 递归删除文件夹
② 扩展:rm -rf /*,一定要慎重
# rm -rf /* => 代表删除根目录下的所有文件(如果没有备份,恢复的几率不高)
rm :删除
-r :递归删除(无论文件夹是否为空)
-f :强制删除不提示
/ :代表根分区
* :所有
3、复制
① cp复制操作
基本语法:
# cp [选项] 源文件或文件夹 目标路径
选项说明:
-r :递归复制,主要针对文件夹
> cp = copy复制
**案例:**把readme.txt文件从当前目录复制一份放到/tmp文件夹中
# cp readme.txt /tmp/
② cp复制并重命名文件
基本语法:
# cp [选项] 源文件或文件夹 目标路径/新文件或文件夹的名称
案例: 把readme.txt文件从当前目录复制一份放到/tmp文件夹中并重命名为readme.txt.bak
# cp readme.txt /tmp/readme.txt.bak
③ cp复制文件夹到指定路径
基本语法:
# cp -r 源文件夹名称 目标路径/
**案例:**把shop目录连通其内部的文件统一复制到/tmp目录下
# mkdir shop
# touch shop/index.php shop/admin.php shop/config.php
# cp -r shop /tmp/
总结:
- 复制文件# cp 源文件名称 指定路径
- 复制文件并重命名# cp 源文件名称 指定路径/新文件名称
- 复制文件夹# cp -r 源文件夹 指定路径
4、剪切
基本语法:
# mv 源文件或文件夹 目标路径/
> mv = move,剪切、移动的含义
**案例:**把readme.txt文件剪切到/tmp目录下
# rm -rf /tmp/readme.txt
# mv readme.txt /tmp/
**案例:**把shop文件夹移动到/usr/local/nginx目录下
# mkdir /usr/local/nginx
# mv shop /usr/local/nginx/
5、重命名
**什么是重命名?**简单来说,就是给一个文件或文件夹更改名称
基本语法:
# mv 源文件或文件夹名称 新文件或文件夹的名称
**案例:**把readme.txt文件更名为README.md文件
# mv readme.txt README.md
**案例:**把shop文件目录更名为wechat目录
# mkdir shop
# mv shop wechat
总结:
- 剪切文件# mv 源文件名称 目标路径/
- 剪切文件夹 # mv 源文件夹名称 目标路径/
- 重命名 # mv 源文件或文件夹名称 新文件或文件夹名称
6、tard打包压缩与解压缩
(1)、几个概念
打包:++默认情况下,Linux的压缩概念一次只能压缩一个文件。针对多文件或文件夹无法进行直接压缩。++ 所以需要提前对多个文件或文件夹进行打包(创建归档文件),这样才可以进行压缩操作。
cpp
1.txt 5MB
2.txt 10MB
3.txt 15MB
1.txt + 2.txt + 3.txt = 打包 = 123.tar = 30MB
> 打包 ++只是把多个文件或文件夹打包放在一个文件中,但是并没有进行压缩,所以其大小还是原来所有文件的总和。++
压缩:++也是一个文件和目录的集合,且这个集合也被存储在一个文件中++ ,但它们的不同之处在于,压缩文件所占用的磁盘空间比集合中所有文件(归档文件)大小的总和要小。
cpp
1.txt 5MB
2.txt 10MB
3.txt 15MB
1.txt + 2.txt + 3.txt = 压缩 = 123.tar.gz = 20MB(体积变小了)
(2)、 Linux打包操作
基本语法:
# tar [选项] 打包后的名称.tar 多个文件或文件夹
选项说明:
-c :打包
-f :filename,打包后的文件名称
-v :显示打包的进度
-u :update缩写,更新原打包文件中的文件(了解)
-t :查看打包的文件内容(了解)
**案例:**把a.txt、b.txt、c.txt文件打包到abc.tar文件中(归档文件)
# tar -cvf abc.tar a.txt b.txt c.txt
**案例:**把wechat文件夹进行打包wechat.tar
# tar -cvf wechat.tar wechat
(3)、 tar -tf以及tar -uf
基本语法:
# tar -tf 打包后的文件名称
主要功能: 查看tar包中的文件信息
案例:查看abc.tar包中的文件信息
# tar -tf abc.tar
# tar -uf 打包后的文件名称
> u = update,更新,如果还想往tar包中更新或追加内容都可以通过-u选项
**案例:**向abc.tar包中添加一个d.txt文件
# touch d.txt
# tar -uf abc.tar d.txt
查看是否添加成功
# tar -tf abc.tar
扩展:如何把tar包中的文件释放(解压)出来
打包
# tar -cf abc.tar a.txt b.txt c.txt
释放
# tar -xf abc.tar
(4)、 打包并压缩(学习的重点)
基本语法:
# tar [选项] 压缩后的压缩包名称 要压缩的文件或文件夹
选项说明:
-cf :对文件或文件夹进行打包
-v :显示压缩进度
-z :使用gzip压缩工具把打包后的文件压缩为.gz
-j :使用bzip2压缩工具把打包后的文件压缩为.bz2
-J :使用xz压缩工具把打包后的文件压缩为.xz
压缩速度:tar.gz > tar.bz2 > tar.xz
压缩率: tar.gz < tar.bz2 < tar.xz
案例:把a.txt、b.txt、c.txt文件打包并压缩为abc.tar.gz
# tar -zcf abc.tar.gz a.txt b.txt c.txt
案例:把wechat文件夹压缩为wechat.tar.gz格式的压缩包
# tar -zcf wechat.tar.gz wechat
(5)、 对压缩包进行解压
解压过程 非常简单,就是把压缩的参数中的c换成x就可以实现解压缩了
基本语法:
*.tar.gz格式的压缩包
# tar -zxf 名称.tar.gz
*.tar.bz2格式的压缩包
# tar -jxf 名称.tar.bz2
*.tar.xz格式的压缩包
# tar -Jxf 名称.tar.xz
**案例:**把abc.tar.gz格式的压缩包进行解压缩操作
# tar -zxf abc.tar.gz
**案例:**把wechat.tar.gz格式的压缩包进行解压缩操作
# tar -zxf wechat.tar.gz
7、zip压缩与解压缩
① zip压缩
基本语法:
# zip [选项] 压缩后的文件名称.zip 文件或文件夹
选项说明:
-r :递归压缩,主要针对的是文件夹(只要压缩的时候有文件夹,就需要用该选项)
> Linux下已经有gzip、bzip2以及xz压缩命令了,为什么还需要使用zip压缩呢? > > 答:zip格式在Windows以及Linux中都是可以正常使用的。
案例:把a.txt、b.txt、c.txt进行压缩为abc.zip
# zip abc.zip a.txt b.txt c.txt
**案例:**把wechat文件夹压缩为wechat.zip
# zip -r wechat.zip wechat
② unzip解压缩
基本语法:
# unzip 压缩包名称 解压到当前目录
# unzip 压缩包名称 -d 指定路径 解压到指定路径下
案例:对abc.zip文件进行解压缩
# unzip abc.zip
**案例:**把wechat.zip解压到/usr/local/nginx目录下
# unzip wechat.zip -d /usr/local/nginx/
总结:
在Linux操作系统中,其拥有很多压缩工具,如gzip、bzip2、xz等等,但是其有一个缺点:
一次只能压缩一个文件(而且无法压缩文件夹),为什么要打包,就是为了后期的压缩操作。
① 打包,把一个或多个文件打成tar包,并不是压缩,只是把文件合并在一个tar文件中
bash1.txt 5MB 2.txt 10MB 3.txt 15MB 打包123.tar = 5MB + 10MB + 15MB = 30MB
②打包并压缩
# tar -zcf 压缩包名称.tar.gz 文件或文件夹名称 # tar -jcf 压缩包名称.tar.bz2 文件或文件夹名称 # tar -Jcf 压缩包名称.tar.xz 文件或文件夹名称
③ 解压缩
# tar 把c参数更换为x,就可以实现解压缩 压缩包名称.tar.gz
扩展:
# tar -zxf 压缩包名称.tar.gz [参数] 指定路径
第一种解决思路:随用随查,百度、Google
# tar -zxf 压缩包名称.tar.gz -C 指定路径
第二种解决思路:可以使用man命令(manual缩写,手册)
# man tar命令 # tar -zxf 压缩包名称.tar.gz -C 指定路径
④zip压缩与解压缩
给我们提供一种既可以在Windows中使用的,也可以提供一种在Linux中使用的通用的压缩格式。
# zip [-r] 压缩包名称.zip 要压缩的文件或文件夹
解压缩:
# unzip 压缩包名称.zip -d 指定路径
三、vim文件编辑器的 概述 与 使用
Vim文本编辑器,是由 vi 发展演变过来的文本编辑器,使用简单、功能强大、是 Linux 众多发行版的默认文本编辑器。
Vim(Vi improved)是vi编辑器的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用。
Centos通常都已经默认安装好了 vi 或 Vim 文本编辑器。当命令行中输入"Vim"显示如下 所示的画面时,视为 Vim 安装成功。
**注意:**如果你的yum源已经配置,那么你就只需要输入命令 yum install vim 即可,如果你本地没有配置yum源,那么你可能不能安装成功。后面我会写一篇博客关于yum源的配置的。当然感兴趣的小伙伴可以提前去搜索学习。
1、Vim打开文件
命令:++vim++
作用 :++编辑文件++
语法:++vim 文件名++
用法一:vim 文件名
示例代码:
#vim 1.txt
含义:用vim编辑器,打开1.txt文件,如果1.txt文件不存在,则新建一个空文件1.txt,保存
退出编辑器时会自动创建这个文件
2、Vim保存文件并退出
在任何模式下,都可以按两下ESC回到命令模式,在命令模式输入:wq 按回车键。
3、Vim不保存文件并退出
在任何模式下,都可以按两下ESC回到命令模式,在命令模式输入:q! 按回车键。
4、Vim命令模式操作(重点)
4.1、进入命令模式
**问:**如何进入命令模式?
答: vim 直接打开文件之后的模式就是命令模式;当然如果你当前如果是在其他模式下,你只需要按两下ESC回到命令模式。
4.2、光标快速移动操作
☆ 光标移动到首与尾
++光标移动到文件第一行的行首++ ,按键:gg
光标移动到文件最后一行的行首 ,按键:G[Capslk 再加 G 键] / [Shift + G 键]
☆ 翻屏
向上 翻屏,按键:ctrl + b
(before) 或
PgUp向下 翻屏,按键:ctrl + f
(after) 或
PgDn向上翻半屏,按键:ctrl + u
(up)
向下翻半屏,按键:ctrl + d
(down)
☆ 快速定位到指定行(重点)
数字 + G
150G
**注意:**常用于错误定位
4.3、复制
① 复制光标所在行
按键:yy
粘贴: 在想要粘贴的地方按下p 键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用P键。
②以光标所在行为准(包含当前行),向下复制指定的行数
按键:数字yy,如5yy
#vim 1.txt 在其中输入如下,可以用来测试5yy,比较清晰
4.4、剪切/删除
①剪切/删除光标所在行
按键: dd (删除之后下一行上移)
**注意:**dd 严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除的效果。
②剪切/删除光标所在行为准(包含当前行),向下删除/剪切指定的行
按键: 数字dd (删除之后下一行上移)
③ 剪切/删除光标所在的当前行(光标所在位置)之后的内容,但是删除之后下一行不上移
按键: D (删除之后当前行会变成空白行)
4.5、撤销/恢复
撤销:u(undo)
恢复:ctrl + r恢复(取消)之前的撤销操作【重做,redo】
5、Vim末行模式操作(重点)
5.1、进入末行模式
进入方式: 由命令模式进入,按下**:或者/(表示查找)**即可进入末行模式
退出方式:① 按下Esc键 ;② 连按 2 次Esc键;③ 删除末行全部输入字符。
那末行模式有哪些作用?我们能使用末行模式做什么呢?
请看下面的介绍。
5.2、末行模式相关功能
① 保存操作(write)
输入:
:w
保存文件 (了解)输入:
:w 路径
另存为(了解)② 退出(quit)
输入:
:q
退出文件(了解)默认情况下,退出的时候需要对已经进行修改的文件进行保存:w,然后才能退出
③ 保存并退出(掌握,常用)
输入::wq 保存并且退出
④ 强制(!)(掌握,常用)
输入:
:q!
表示强制退出,刚才做的修改操作不做保存备注:以后我们在更改系统配置文件时,很多时候不想保存之前的更改,甚至我们只想查看,没想更改。这时候一律使用q! 退出,可以保证我们的文件不被误更改。
⑤ 搜索/查找
输入:/关键词,再按下回车 【按下/也是进入末行模式的方式之一】
在搜索结果中切换上/下一个结果: N/n (大写N代表上一个结果,小写n代表next)
如果需要取消高亮 ,则需要在末行模式中输入::noh【no highlight】
⑥替换(了解)
通常在修改配置文件的时候,我个人很少使用批量替换,避免替换了一些自己不知道的内容
:s/搜索的关键词/新的内容 替换光标所在行的第一处符合条件的内容(只替换1次)
:s/搜索的关键词/新的内容/g 替换光标所在行的全部符合条件的内容
:%s/搜索的关键词/新的内容 替换整个文档中每行第一个符合条件的内容
:%s/搜索的关键词/新的内容/g 替换整个文档中所有符合条件的内容
⑦ 显示行号
输入::set nu,nu代表number
如果想取消显示,则输入::set nonu
⑧ set paste与set nopaste(了解)
问题: 为什么要使用paste模式?
**答案:**在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加。原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内容作为用户的键盘输入来处理。导致在遇到换行符的时候,如果Vim开启了自动缩进,就会默认的把上一行缩进插入到下一行的开头,最终使代码变乱。
**在粘贴数据之前,输入下面命令开启paste模式 :**set paste
**粘贴完毕后,输入下面命令关闭paste模式 :**set nopaste
6、编辑模式操作
进入和退出编辑模式
按字母i进入编辑模式,按ESC键退出编辑模式,回到命令模式。
7、可视化模式下复制
按键:****ctrl + v(可视块)或V(可视行)或v(可视),然后**按下↑ ↓ ← →**方向键来选中需要
复制的区块,按下y 键进行复制(不要按下yy),最后按下p 键粘贴,退出可视模式按下Esc
1).添加多行注释:(重点)
每行前面都加#
步骤1: 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;
步骤2: 在行首使用上下键选择需要注释的多行;
步骤3 :按下键盘**(大写)"I"键**,进入插入模式;
步骤4: 然后输入注释符("#");
步骤5: 最后按 两下"Esc"键。
2).删除多行注释:(重点)
步骤1: 首先按esc进入命令行模式下,按下Ctrl + v, 进入列模式;
步骤2:选定要取消注释的多行的第一列
步骤3: 按del键即可
8、Vim的一些实用功能
8.1、代码着色
之前说过vim 是vi 的升级版本,其中比较典型的区别就是vim 更加适合coding,因为vim比vi 多一个代码着色的功能,这个功能主要是为程序员提供编程语言升的语法显示效果,如下:
#vim index.php 在文件中添加以下内容: <?php echo 'hello world'; ?> 末行模式输入:syntax off和syntax on可看到效果
在实际应用中,我们如何控制着色显示与否?
> syntax:语法,临时调整
开启显示::syntax on
关闭显示::syntax off
8.2、异常退出(重点)
什么是异常退出?
在编辑文件之后并没有正常的去wq(保存退出),而是遇到突然关闭终端或者断电的情况,则会显示下面的效果,这个情况称之为异常退出。
解决办法:将交换文件(在编程过程中产生的临时文件)删除掉即可【在上述提示界面按下D 键,或者使用rm 指令删除交换文件】
8.3、退出方式
回顾: 在vim中,退出正在编辑的文件可以使用
:
q****或者:wq
除了上面的这个语法之外,vim 还支持另外一个保存退出(针对内容)方法**:x**
说明:
①**
:x
在文件没有修改的情况下,表示直接退出(等价于:q)**,在文件修改的情况下表示保存并退出(:wq)
② 如果文件没有被修改,但是使用wq 进行退出的话,则文件的修改时间会被更新;但是如果文件没有被修改,使用x 进行退出的话,则文件修改时间不会被更新的;主要是会混淆用户对文件的修改时间的认定。
问:我们该用x还是wq或者q!退出编辑器?
答:依据我们的工作场景和工作所所需。
五、文本文件处理命令
1、查看文件内容
①cat查看及合并
命令:cat
作用:查看文件内容
语法:cat 文件名称
cat 文件1 文件2 > 文件3
用法一:cat 文件名
示例代码:
#cat 1.txt
含义:显示1.txt文件的内容
特别注意:cat 命令用于查看文件内容时,不论文件内容有多少,都会一次性显示。如果文件非常大,那么文件开头的内容就看不到了。cat 命令适合查看不太大的文件。
用法二:cat 文件1 文件2 > 文件3
示例代码:
#cat 1.txt 2.txt > 3.txt
含义:将1.txt和2.txt文件内容合并后,输出到3.txt
②more分屏显示文件
命令: more
**作用:**分屏查看文件
语法:more 文件名
流程:more在读取文件时,默认已经加载文件的全部内容。
用法一:more 文件名
示例代码:
#more /var/log/boot.log
含义:分页显示/var/log/boot.log文件的内容
more 命令的执行会打开一个交互界面,下面是一些常用交互命令:
回车键 | 向下移动一行。 |
---|---|
d | 向下移动半页。 |
空格键 | 向下移动一页。 |
b | 向上移动一页。 |
/ 字符串 | 搜索指定的字符串。 |
:f | 显示当前文件的文件名和行号。 |
q 或 Q | 退出 more。 |
③less分屏显示文件
命令: less
**作用:**分屏查看文件
语法: less 文件名
流程:**不是加载整个文件,而是一点一点进行加载,**相对而言,读取大文件时,效率比较高。
示例代码:使用less命令查看/var/log/boot.log的文件内容
用法一:less 文件名
示例代码:
#less /var/log/boot.log
含义:分页显示/var/log/boot.log文件的内容
less 命令的执行也会打开一个交互界面,下面是一些常用交互命令(和more相同):
回车键 | 向下移动一行。 |
---|---|
d | 向下移动半页。 |
空格键 | 向下移动一页。 |
b | 向上移动一页。 |
/ 字符串 | 搜索指定的字符串。 |
:f | 显示当前文件的文件名和行号。 |
q 或 Q | 退出 more。 |
cat,more,less三者的对比:
cat | more | less | |
---|---|---|---|
作用 | 显示小文件(一屏以内) | 显示大文件(超过一屏) | 显示大文件(超过一屏) |
交互命令 | 无 | 有 | 有 |
上下键翻行 | 无 | 无 | 有 |
④head显示文件开头
命令: head
作用: 查看一个文件的前n 行,如果不指定n,则默认显示前10 行。
语法:head [参数选项] 文件名
常见参数 :-n 表示显示前n行的内容,n等于行数
用法一:head 文件名
示例代码:
#head /var/log/boot.log
含义:显示/var/log/boot.log文件的内容,默认为前10行
用法二:head -n 文件名
示例代码:
#head -3 /var/log/boot.log
含义:显示/var/log/boot.log文件的前3行内容
⑤tail显示文件结尾(重点)
命令:tail
作用:查看一个文件的最后n 行,如果n 不指定默认显示最后10 行
语法:tail -n 文件路径 【n 表示数字】
常见参数: -n 显示最后n行的内容,n等于行数
-f 输出文件变化后新增加的数据(动态查看内容的或者数据的变化)
用法一:tail 文件名
示例代码:
#tail /var/log/boot.log
含义:显示/var/log/boot.log文件的内容,默认为最后10行
用法二:tail -n 文件名
示例代码:
#tail -5 /var/log/boot.log
含义:显示/var/log/boot.log文件的最后5行内容
用法二:tail -f 文件名
示例代码:
#tail -f /var/log/messages
含义:显示/var/log/messages文件中,执行tail -f 命令后,新增的数据。
注意:作用相当于查看一个文件动态变化的内容,一般用于查看系统的日志的变化
按下ctrl+c可以退出查看状态
注意:ctrl+c 键 ,在命令行中c 不再表示copy,而表示cancel(取消),在程序执行过程中,通常都可以使用ctrl+c来终止程序运行或者退出程序。
2、统计文件信息
①wc统计文件内容数量
命令:wc,wc = word count
作用: 用于统计文件内容信息(包含行数、单词数、字节数)
语法:wc [参数选项] 文件名
常见参数:
**-l:**表示lines,行数(以回车/换行符为标准)
**-w:**表示words,单词数 依照空格来判断单词数量
-c:表示bytes , 字节数(空格,回车,换行)
用法一:wc -lwc 文件名 示例代码: #wc -lwc /var/log/boot.log 含义:统计/var/log/boot.log文件的行数,单词数,字节数
**注意:**wc命令选项可以混在一起搭配使用,但选项的顺序不影响输出结果,第一个是行数,第二个是单词数,第三个数字节数。
②du统计文件大小
命令:du
作用:查看文件或目录(会递归显示子目录)占用磁盘空间大小
语法: du [参数选项] 文件名或目录名
常见参数:
-s : summaries,只显示汇总的大小,统计文件夹的大小
**-h:** 表示以高可读性的形式进行显示 ,如果不写-h,默认以KB的形式显示文件大小
用法一:du 文件名 示例代码: #du /var/log/boot.log 含义:统计/var/log/boot.log文件的大小 用法二:du -h 文件名 示例代码: #du -h /var/log/boot.log 含义:统计/var/log/boot.log文件的大小,以高可读性显示
示例代码:统计 /var/log 目录大小
用法三:du 目录名 示例代码: #du /var/log/ 含义:统计/var/log/目录的大小,包含目录下每一个单独文件的大小 用法四:du -s 目录名 示例代码: #du -s /var/log/ 含义:统计/var/log/boot.log文件的大小,汇总只显示目录大小 用法五:du -sh 目录名 示例代码: #du -sh /var/log/ 含义:统计/var/log/boot.log文件的大小,汇总只显示目录大小,并采用高可读性
3、文本处理
①find文件查找(重点)
命令:find
作用:用于查找文档(其选项有55 个之多)
语法: find 路径范围 选项1 选项1的值 [选项2 选项2的值...]
常用参数:
**-name:**按照文档名称进行搜索(支持模糊搜索)
*: 通配符,匹配任意个任意字符
-type:按照文档的类型进行搜索,文档类型的值,f(file)表示文件,d(directory)表示文件夹
用法一:find 路径范围 选项1 选项1的值 选项2 选项2的值 示例代码: #find /var/ -name boot.log -type f 含义:在/var/目录下,查找名称等于boot.log,类型是文件的文档 用法二:find 路径范围 选项1 选项1的值使用通配符 选项2 选项2的值 示例代码: #find /var/log -name "*.log" -type f 含义:在/var/log目录下,查找所有.log结尾,类型是文件的文档,*.log需要用引号引起来。 用法一:find 路径范围 选项1 选项1的值 示例代码: #find /var/log -type d 含义:在/var/log目录下,查找所有文件夹
②grep搜索文件内容 (重要)
命令:grep
**作用:**在文件中直接找到包含指定信息的那些行,并把这些信息显示出来
语法:grep 要查找的内容 文件名
用法一:grep 查找的内容 文件名 示例代码: #grep network boot.log 含义:在boot.log文件中,查找包含network的行 用法二:grep 查找的内容 多个文件 示例代码: #grep network /var/log/* 含义:在/var/log目录下的所有文件中,查找包含network的行
③输出重定向
场景:
一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术。
>: 标准输出重定向 ,覆盖输出,会覆盖掉原先的文件内容
>>: 追加重定向,追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加
语法:有输出的命令 重定向符号 文件名
用法一:使用 > 进行覆盖输出 示例代码: #ll > llroot.txt 含义:将ll命令输出的内容,写入到llroot.txt文件中,如果llroot.txt文件中有其他内容,则先清空,在写入 注意:文件路径中的文件可以是不存在的文件,例如llroot.txt可以不存在,执行命令时会自动创建这个文件 用法二:使用 >> 进行追加输出 示例代码: #ll >> llroot.txt 含义:将ll命令输出的内容,追加写入到llroot.txt文件中 注意:文件路径中的文件可以是不存在的文件,例如llroot.txt可以不存在,执行命令时会自动创建这个文件
注:在编程的学习上要不断地练习,不要一味只看不练,只有你多练,你才会有不一样的体会。才能把别人优秀的东西转化为自己的财富