一、WSL 的安装和使用

因为大部分人的主力机器基本上都是 Windows OS,所以除了笨重的虚拟机外最合适的 Linux 子系统方案莫过于 WSL(Windows Subsystem for Linux)。

那么如何安装这个 WSL 呢?可以参见 Microsoft Learning 的原文:How to install Linux on Windows with WSL

下面简单说一下安装的步骤:

首先,需要确保你的操作系统版本必须大于 Windows 10 2004 及更高版本(也就是内核 Build 19041 或者更高)或者 Windows 11。这些信息你可以在电脑设置系统信息中关注 Windows 发布版本OS 内核版本得到。

然后,在控制面板>程序>程序和功能>启用或关闭 Windows 功能中找到“适用于 Linux的 Windows 子系统”选项,然后勾选并重启生效。

图1.1 适用于 Linux的 Windows 子系统

接着,以管理员身份打开 PowerShell 或 CMD,然后输入命令安装并重启

1
wsl --install

这个命令默认安装的是最新版 Ubuntu OS,同时默认指定为 WSL2 模式,但是你也可以自行选择自己需要的操作系统(将 [Distro] 替换为您想要安装的发行版的名称):

1
wsl.exe --install -d [Distro]

备注:wsl -l -owsl.exe --list --online 可以查看可通过在线商店下载的 Linux 发行版列表。

图1.2 Linux 发行版列表

同理,你也可以指定不同的 Linux OS 的模式(请将 <Distro> 替换为你想要更新的 Linux 发行版的名称):

1
wsl.exe --set-version <Distro> <1|2>

最后也不赘述什么内容了,详细的 WSL 命令可以查阅 Basic commands for WSL

二、Linux 的目录结构

这里没有什么好说的内容,就是记住一句话“Linux 上一切皆文件”!

这是“菜鸟教程”中展示的 Linux 目录层级结构,/ 是最顶层的目录,~ 是当前用户目录。

图2.1 树状目录结构

更详细的内容可以直接查阅菜鸟教程 - Linux 系统目录结构

三、Linux 基础命令

注意这里只说入门级别的基础命令,学会后基本覆盖大部分使用场景。如果你想补充一些内容,直接评论区留言即可(可以在当前页面右键菜单找到“直达评论”选项)。

3.1 ls 命令

该命令用于显示指定工作目录下之内容,其基本格式为 ls [OPTION]... [PATH]... -> list,其中常用参数为:

  1. -l, --long 展示详细信息。
  2. -a, --all 不要忽略隐藏文件(即以 . 开头命名的文件)。
  3. -h 以人类可读的方式显示文件和目录大小 -> hunman
  4. -t 按照修改时间排序(最新的在前) -> time
  5. -S 按照文件大小进行排序(最大的在前) -> Size

图3.1.1 ls 命令

3.2 cd 命令

该命令用于更改 Shell 的工作目录,其基本格式为 cd [dir] -> change directory,没有常用参数。

图3.2.1 cd 命令

3.3 pwd 命令

该命令用于打印输出当前工作目录的名称,其基本格式为 pwd -> print working directory,没有常用参数。

图3.3.1 pwd 命令

3.4 mkdir 命令

该命令如果指定的一个或多个目录不存在,则创建这些目录,其基本格式为 mkdir [OPTION]... DIRECTORY... -> make directory, 以下是常用参数:

  1. -p, --parents 根据需要创建父级目录(常用于一次性创建多级目录)。

图3.4.1 mkdir 命令

3.5 touch 命令

该命令用于将每个文件的访问时间与修改时间更新为当前系统时间,但是常用于新文件的创建,其基本格式为 touch [OPTION]... [FILE]...,无常用参数。

图3.5.1 touch 命令

3.6 cat 命令

该命令可以将一个或多个文件,或者标准输入,拼接输出到标准输出,其基本格式为 cat [OPTION]... [FILE]... -> concatenate,常用参数有:

  1. -n, --number 对所有输出行进行行号编号。
  2. -b, --number-nonblank 仅对非空的输出行编号,该选项会覆盖 -n 参数。

图3.6.1 cat 命令

3.7 more 命令

该命令可以以分页的形式在终端中显示文件的内容,其基本格式为 more [options] <file>...,常用参数有:

  1. -<number> 每页显示几行文件内容。
  2. +<number> 从指定行号开始显示文件内容。
  3. (鸡肋)-d, --silent 显示翻页提示。

图3.7.1 more 命令

3.8 cp 命令

该命令算是第一个稍微格式复杂的命令了,主要用于文件及文件夹的复制,其基本格式为 cp [OPTION]... [-T] SOURCE DESTcp [OPTION]... SOURCE... DIRECTORYcp [OPTION]... -t DIRECTORY SOURCE... -> copy

写了半天发现这里其实很复杂,状态机太多了,所以我打算换一种方式进行讲解!

这个命令常用的就以下几种情况:

  • 复制文件并改名:cp file.txt file_copied.txtcp file.txt a/file_copied.txt
  • 复制一个或多个文件到目标文件夹:cp file_0.txt acp file_0.txt file_1.txt file_2.txt a
  • 复制文件夹到目标文件夹:cp -r a b

常用参数:

  1. -R, -r, --recursive 递归复制目录及其内容(用于复制目录)。
  2. -f, --force 强制复制,覆盖目标文件而不提示。
  3. -v, --verbose 显示详细的复制过程。
  4. -p, --preserve[=ATTR_LIST] 保留文件的原始属性(如权限、时间戳等)。
  5. -a, --archive 等价于 -dR --preserve=alldpR,保留所有文件属性和递归复制目录(归档模式)。
  6. -l, --link 创建硬链接而不是复制文件。
  7. -s, --symbolic-link 创建符号链接(软链接)而不是复制文件。
  8. -u 仅当源文件比目标文件新时才复制(更新模式) -> update

图3.8.1 cp 命令

3.9 mv 命令

该命令主要用于将文件或目录移入其它位置,或为文件或目录改名!其基本格式类似于 cp 命令,其实也很复杂:mv [OPTION]... [-T] SOURCE DESTmv [OPTION]... SOURCE... DIRECTORYmv [OPTION]... -t DIRECTORY SOURCE...。但这个命令在刚入门时,其实并不用了解那么详细。我认为唯一需要记住的基本格式为第一类的无参数版 mv SOURCE DEST -> move

其中要注意的是 mv 命令是有更改文件或文件夹名称的能力的,这使得其在特殊状态机下有一些不同寻常的理解:

命令示例理解说明
mv file.txt file0.txtfile.txt 更名为 file0.txt
mv file.txt dirfile.txt 移入 dir 目录
mv dir0 dir1- dir1 存在:将 dir0 移入 dir1
- dir1 不存在:将 dir0 重命名dir1
mv dir0 file.txt执行报错

图3.9.1 mv 命令

4.1 rm 命令

该命令用于删除一个文件或者目录,其基本格式为 rm [OPTION]... [FILE]...,常用参数为:

  1. -i 删除每一个文件及文件夹前都进行提示确认 -> interactive(交互式的)
  2. -r, -R, --recursive 删除文件夹及文件夹中的所有内容。
  3. -f, --force 强制删除,无需任何确认。

图4.1.1 rm 命令

4.2 find 命令

该命令用于在指定目录下查找文件和目录,其基本格式为 find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression],常见用法为:

  1. 按文件名查找:-name,支持使用通配符 *(匹配任意长度任意字符「0 个或多个」)、?(匹配单个任意字符)和 [](匹配括号内任意一个字符)。
  2. 按文件大小查找:-size,支持使用 +- 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。。
  3. 按文件类型查找:-type,其中文件类型常见的有“f(文件)”、“d(文件夹)”、“l(链接)”等。

图4.2.1 find 命令

4.3 grep 命令

该命令用于查找文件里符合条件的字符串或正则表达式,其基本格式为 grep [OPTION]... PATTERNS [FILE]... -> global regular expression,常用参数如下:

  1. -n, --line-number 对输出内容打印行号。
  2. -i, --ignore-case 忽略大小写进行匹配。
  3. -r, --recursive 递归查找目录中的子文件。
  4. -c, --count 只打印匹配的数量

注释:该命令常借助 |(管道符)与 find 命令一起使用,find 查找到的内容通过 | 传递给 grep 命令作为输入,实现在 find 的查找结果中过滤出特定的信息。

图 4.3.1 grep 命令

4.4 wc 命令

该命令用于计算字数,基本格式为 wc [OPTION]... [FILE]... -> word count,常用参数如下:

  1. -c, --bytes 打印字节数。
  2. -m, --chars 显示字符数(注意与 -w 参数的区别)。
  3. -l, --lines 打印行数。
  4. -w, --words 显示单词总数(注意与 -m 参数的区别)。

图 4.4.1 wc 命令

4.5 echo 命令

该命令用于在终端中显示文本或变量的值(与 Windows 几乎一致),其基本格式为 wc [OPTION]... [CONTENT],常用参数为:

  1. -n 不输出结尾默认的换行符。
  2. -e 启用转移字符。
  3. -E 禁用转移字符(默认)。

图 4.5.1 echo 命令

图 4.5.2 echo 命令补充——输出其他命令的值

4.6 tail 命令

该命令可用于查看文件的内容,其基本格式为 tail [FLAG]... [FILE]...,常用参数为”

  1. -f, --follow 循环读取。
  2. -<num> 显示文件的尾部 num 行内容。
  3. +<num> 显示从文件的第 num 行到文件末尾的所有内容。

图 4.6.1 tail 命令

图 4.6.2 tail 命令补充——持续跟踪用法

4.7 vi/vim 命令

所有的 Unix 系统都会内建 vi 文本编辑器。但是目前我们使用比较多的是 vim 编辑器,因为 vim 具有相较于 vi 更强的编辑能力(vim ≈ vi pro max)。详细内容请参考 Linux vi/vim

命令模式按键功能说明
i在当前光标位置开始插入新内容
/进入“搜索模式”
n在“搜索模式”下,向后查找下一个
N在“搜索模式”下,向前查找上一个
dd删除当前行内容
ndd删除包括当前行在内的后 n 行内容
yy复制当前行内容
nyy复制包括当前行在内的后 n 行内容
p粘贴内容到当前行的下一行位置
u撤销修改
ctrl+r恢复修改
gg跳到文件行首
G跳到文件行尾
dgg删除当前行到行首的全部内容
dG删除当前行到行尾的全部内容
底线命令模式按键功能说明
:w仅保存
:q仅退出
:q!强制退出(未保存内容将被丢弃)
:set nu显示行号
:set paste带格式的粘贴模式(可粘贴带格式的复制内容)

四、Linux 上的用户管理

4.1 超级管理员与身份切换命令

  1. root 用户
    Linux 的超级管理员账号,拥有系统最高全部权限。
  2. su 命令:切换用户身份
  • 语法:su [-] [用户名]
  • 参数 -:切换用户时加载目标用户完整环境变量,实操中建议带上。
  • 用户名省略时,默认切换到 root。
  1. sudo 命令:单条命令临时提权
  • 作用:普通用户执行单条命令时,临时获得 root 权限。
  • 语法:sudo 待执行命令
  • 前提:root 用户需要通过 visudo 编辑配置,授权普通用户使用 sudo。

4.2 用户与用户组管理

Linux 原生支持多用户、多用户组,一个用户可以加入多个用户组;权限管控基于用户级别用户组级别两套维度。
常用管理命令清单:

  • groupadd:新建用户组;groupdel:删除用户组
  • useradd:新建用户;userdel:删除用户
  • usermod:修改用户所属组等用户信息
  • id:查看当前用户信息
  • getent passwd:查看系统内全部用户信息
  • getent group:查看系统全部用户组信息

4.3 ls -l 权限解读

执行 ls -l 列出文件详情,返回信息包含三大核心部分:

  1. 权限控制字符串(第一位代表文件类型:-普通文件、d文件夹、l软链接)
  2. 文件 / 目录的所属用户
  3. 文件 / 目录的所属用户组

权限串分为三段:所属用户权限、所属组权限、其他用户权限,每段由 r w x 三个标识组成:

  • r(读):文件 = 查看内容;目录 = 列出目录内文件(ls)
  • w(写):文件 = 修改内容;目录 = 在目录内新增、删除、重命名文件
  • x(执行):文件 = 可作为程序运行;目录 = 可以 cd 进入该目录

4.4 chmod:修改文件 / 目录权限

  • 功能:修改文件、文件夹的读写执行权限
  • 权限限制:仅文件所有者 或 root 用户可以执行
  • 语法:chmod [-R] 权限 文件或文件夹
  • 参数 -R:递归,对文件夹内部所有子文件、子目录统一应用权限
  • 数字权限规则:r=4,w=2,x=1,数值相加组合得到 0~7 的权限。
    例:7 = rwx,5 = r-x,1 = –x

4.5 chown:修改所属用户 / 用户组

  • 功能:修改文件、文件夹的所属用户与所属用户组
  • 权限限制:仅 root 用户可执行
  • 语法:chown [-R] [用户][:][用户组] 文件或文件夹
  • 参数 -R:递归修改目录内全部内容的归属
  • 冒号 ::用于分隔【用户】和【用户组】