一、背景知识

1、Linux 系统中一切皆文件

在 Linux 系统中任何东西都是以文件形式来存储的。这其中不仅包括我们熟知的文本文件、可执行文件等等,还包括硬件设备、虚拟设备、网络连接等等,甚至连目录其实都是一种特殊的文件。

2、Linux 文件系统

在 Windows 中,每一个盘符下是一个独立的文件系统,硬盘有多少个分区就有多少个文件系统。

而在 Linux 系统中不管创建了多少个硬盘分区都只有一个文件系统。整个文件系统的根目录是“/”

3、Linux 系统中的路径

绝对路径:从“/”根目录开始逐层查找文件和目录。

相对路径:以当前目录或上一级目录为基准逐层查找文件和目录

当前目录:“./”

当前目录的上一级目录:“../”

“./”可以省略不写,也同样表示当前目录

注意:“/”代表的是最顶层、最上面的根目录,不是当前目录

4、用户的家目录

Linux 是一个多用户系统,每个登录到系统的用户都需要有一个自己专属的目录保存自己私有的文件。系统当然看到了这个需求。

所以每创建一个普通用户,系统就会在 /home 目录下创建一个和用户同名的目录作为这个用户的家目录。

比如:创建一个名为 tom 的用户,它的家目录就是/home/tom

可以使用 ~ 代表用户的家目录。

特殊的是作为系统的超级管理员,root 用户的家目录是/root 目录。

5、文件扩展名不敏感

在 Windows 系统中,操作系统会负责根据文件扩展名识别文件类型,然后再根据文件类型匹配打开这种文件的应用程序。让用户不必记忆大量的对应关系,用哪个直接打开就好了。

而 Linux 是一个命令行系统,虽然现在也有了图形化界面,但是还是以命令行使用为主。

所以 Linux 系统中通常是使用命令去打开文件。而这个命令和文件是否匹配,那就需要运行命令的人自己注意。

6、一级目录简介

目录名是否重要作用
/binbin 是 binary 的缩写,这个目录存放着最经常使用的命令。
/boot这里存放的是启动 Linux 时用到的引导程序文件。
/devdevice(设备)的缩写,该目录下存放的是 Linux 的外部设备。
/etc存放系统和第三方应用程序的配置文件。
/home存放普通用户家目录。
/lib 和/lib64系统开机所需要最基本的动态连接共享库。
/media挂载 Linux 系统会自动识别的设备,例如 U 盘、光驱等。
/mnt专门用于挂载操作的目录。
/opt存放安装第三方应用程序时使用的压缩包文件。
/proc这个目录是一个虚拟的目录,它是系统内存的映射。
/root超级管理员 root 用户的家目录。
/run存放进程产生的临时文件,关机重启后会消失。
/sbins 是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序。
/srvservice 缩写,该目录存放一些服务启动之后需要提取的数据。
/sys该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs。
/tmp存放临时文件。
/usr应用程序的默认安装目录,类似于 Windows 下的 program files 目录。
/var存放经常变化的内容,例如日志文件。

二、文件和目录相关命令

1、命令行环境下快捷键:

按键作用
Ctrl+l清屏
Ctrl+c强制终止程序
Ctrl+Insert复制
Shift+Insert粘贴
Ctrl+s锁屏
Ctrl+q解除锁屏
tab自动补全

2、创建目录(mkdir)

命令:mkdir

对应单词:make directory

作用:创建目录

格式:mkdir [OPTION]… DIRECTORY…

创建单层目录:mkdir 新目录的路径

单层目录说明:

mkdir aaa/bbb/ccc

其中 aaa/bbb 是存在的目录,要创建的仅仅是 ccc

创建多层目录:mkdir -p 新目录的路径

多层目录说明:

mkdir -p aaa/bbb/ccc/ddd

其中 bbb/ccc/ddd 都不存在,现在想一次性把这些目录都建出来

3、进入目录(cd)

命令:cd

对应单词:change directory

作用:切换当前目录

格式: cd 目标目录路径

用法 1:使用绝对路径

用法 2:使用相对路径

用法 3:使用 cd ~ 跳转到当前用户的家目录

如果是 root 用户, cd ~ 相当于 cd /root

如果是普通用户, cd ~ 相当于 cd /home/

4、查看目录内容(ls)

命令:ls

对应单词:list

作用:列出目录中的内容,这里所说的目录可以是当前目录也可以是其他目录(需要指定路径)。

格式:ls [OPTION]… [FILE]…

常用参数

参数说明
-A显示目录内容时把隐藏资源也显示出来
-l以详细信息形式显示资源
-R递归查看目录内容

命令的参数既可以单独使用也可以组合使用。ls -l 可以简写为 ll

5、当前所在的目录(pwd)

命令:pwd

对应单词:print work directory

作用:打印当前所在的目录

6、新建文件(touch)

命令:touch

作用:创建空文件

格式:touch 新建文件的路径

7、复制(cp)

命令:cp

对应单词:copy

作用:复制文件或目录

复制文件:cp 被复制的文件的路径 目标目录的路径

复制目录:cp -r 被复制的目录的路径 目标目录的路径

8、移动(mv)

命令:mv

对应单词:move

作用:移动文件或目录

格式:mv 被移动的文件或目录的路径 目标目录

特殊效果:将目录或文件在当前位置移动可以起到重命名的作用

9、删除(rm)

命令:rm

对应单词:remove

作用:删除目录或文件

删除文件:rm 被删除的文件的路径

强制删除文件:rm -f 被删除的文件的路径

递归删除目录:rm -r 被删除的目录的路径

强制删除目录:rm -rf 被删除的目录的路径

10、vim

① 命令:vim

作用:在命令行环境下编辑文本文件

② 三种模式

一般模式:通过按键控制 VIM 工作

编辑模式:可以自由输入

指令模式:通过执行指令完成一些特殊操作

③ 打开一个文件

[1]vim content.txt

即使这个文件不存在也没关系,vim 知道我们打算新建一个文件

[2]进入编辑模式

进入编辑模式有很多种方法,现在我们先使用其中一种方法:按一下i键。

然后再按 Esc 键回到一般模式

[3]显示行号

接着上一步继续,在回到一般模式后,输入英文冒号,输入 set nu 回车就可以显示行号了。

[4]保存已修改的内容

当**:set nu这个指令执行完成后,vim 就又回到了一般模式。此时我们使用:w 指令**就可以保存文件

[5]退出

使用:q 指令就可以退出 vim 了

[6]保存退出

:w 是保存,:q 是退出,:wq 就是保存退出

[7]不保存退出

当我们退出 vim 时,如果有部分修改还没有保存,当我们想要放弃对文件的修改,不保存直接退出就使用 :q!

④ 移动光标

[1]上下左右移动光标

[2]HJKL 移动光标

⑤ 前往指定行

[1]第一行

输入 gg,将光标定位到第一行开头的位置

[2]最后一行

输入 G,将光标定位到最后一行开头的位置

[3]指定行号

假设我们要去第 12 行,那么依次输入“1”、“2”、“G”即可

⑥ 在一般模式下通过按键来编辑文件

按键效果
dd删除光标所在的行
d5d从光标所在行开始,向下连续删除 5 行(包括光标所在行)
u撤销刚才的操作
Ctrl+r重做刚才撤销的操作
yy复制光标所在的行
p将当前复制的行粘贴到光标所在位置的下一行
y3y从光标所在行开始,向下连续复制 5 行(包括光标所在行)
r替换光标所在位置的一个字符 第一步:按一下 r 键 第二步:输入新的字符

⑦ 进入编辑模式

按键光标动作
i不动,就在当前位置,开始输入
I移动到当前行的开头,开始输入
a光标向后移动一格,然后开始输入
A光标移动到行的末尾,然后开始输入
o先在光标所在行的下面插入空行 然后把光标移动到空行的开头,再开始输入

⑧ 进入指令模式搜索

一般模式下输入“/”,进入专门用于搜索关键词的指令模式,然后输入需要搜索的关键词,回车执行搜索,关键词匹配到的内容会被高亮显示。

[1]遍历匹配内容

在匹配到搜索结果后,可以逐个遍历各个匹配内容:

  • 输入 n 向下找
  • 输入 N 向上找

[2]取消高亮显示

使用 :noh 指令即可取消高亮

⑨ 进入指令模式替换

一般模式下输入

:%s/需要替换的内容/新内容

注意:每一行只有第一个匹配的内容被替换了,后面的没有被替换。

这是因为对正则表达式来说,它是以行为单位查找匹配的内容。每一行只要找到第一个匹配那么就可以判断这一行就是匹配的,没有必要继续向后查找了。如果我们需要将一行中的每一个匹配都替换,可以在指令后加/g,

:%s/需要替换的内容/新内容/g

⑩ 常见问题

[1]另一种形式的指令模式

先输入了字母再输入冒号,这其实也是正常的指令模式,上面列出了我们执行过的指令,可以按上、下键即可在指令历史中选择一个具体指令,然后回车执行。

也可以输入按一下 i 键输入新的指令,然后回车执行。

也可以什么都不做直接离开,直接回车即可。

[2]提示存在交换文件

(1)产生原因

vim 在打开一个文件的时候会同时创建一个临时文件,命名方式是“.原文件名.swp”,这就是所谓的交换文件。而当 vim 正常退出时,这个交换文件会被删除。所以如果正常操作我们是看不到这个提示界面的。

而之所以会出现上面的提示,是因为当前的 vim 命令在创建新的交换文件之前就已经检测到了已存在的交换文件

再往前推理一步,为什么会有交换文件残留?

  • 可能原因 1:其他窗口正在使用 vim 打开同一个文件
  • 可能原因 2:非正常关机等原因导致 vim 没有正常退出
(2)解决办法

先根据最下面的提示输入 Q 退出,然后检查是否在其他窗口已经用 vim 打开了这个文件:

  • 是:继续在这个 vim 中编辑文件。
  • 否:删除交换文件,重新编辑。

11、显示文件全部内容(cat)

命令:cat

作用:显示文件全部内容

适用场景:较短小的文件

用法:

cat 文件名

12、分屏查看文件内容(less)

命令:less

作用:分屏查看文件内容

适用场景:文件中内容太多

① 用法

less 文件名

② 控制方式

按键效果
空格向下滚动一屏
b向上滚动一屏
回车向下滚动一行
q退出
/关键词搜索 n 向下找 N 向上找
=显示详细的文件信息

13、显示文件末尾的部分内容(tail)

命令:tail

效果:显示文件末尾的部分内容

用法:

查看文件末尾 5 行的内容:tail -n 5 文件名

实时监控文件末尾新增加的内容:tail -F 文件名,使用 Ctrl+c 退出实时监控

14、查找文件或目录(find)

命令:find

作用:查找文件或目录

用法:

find 查找范围 参数 表达式

15、查找文件或目录(locate)

命令:locate

作用:查找文件或目录,但它是基于索引查询查询

用法:

locate 文件名

locate 命令的原理

系统启动时把每一个目录、每一个文件的完整路径保存到索引库中。使用 locate 命令搜索关键词时,就使用关键词查询索引库,把匹配的路径字符串返回。

而新建的文件或目录不会被系统把路径存入索引库,那么使用 locate 命令就搜索不到。此时使用 updatedb 命令更新一下索引库就行了。

updatedb

16、返回匹配的内容(grep)

命令:grep

作用:将文件内容中匹配的行返回

用法:

grep 参数 查找内容 源文件

返回不匹配的行

grep -v 查找内容 源文件

返回不匹配的行并显示行号

grep -nv 查找内容 源文件

补充:grep 命令的关键词匹配和 vim 中的关键词搜索的区别

  • vim 需要打开文件进入到 vim 命令自己的界面中而 grep 命令不需要
  • grep 命令显示搜索结果时可以将匹配行抽取出来显示,而 vim 是在全部文件内容中把关键词高亮显示
  • grep 命令可以同时搜索多个文件

17、管道 pipe(|)

管道不是命令,而是一个符号:“**|”。它的用法是:命令 A | 命令 B**。作用是把命令 A 的输出作为命令 B 的输入。

18、tar 包解压命令(tar)

在 Linux 系统环境中,很多程序安装包都是以 tar 包的形式提供下载的:

tar -zxvf tar 包路径

默认解压到当前目录下,如果当前目录下有同名的目录或文件会被直接覆盖没有任何提示

参数作用说明:

参数名称作用
-z用 gzip 对存档压缩或解压
-x解压
-v详细显示处理的文件
-f指定存档或设备 (缺省为 /dev/rmt0)