第一列返回的是行数,第二列是字数,第三列则是比特数。
我们可以让它只计算行数:
wc -l test.txt
或者只计算字数:
wc -w test.txt
或者只计算比特数:
wc -c test.txt
在 ASCII 字符集中,比特数等于字符数。但对于非 ASCII 字符集,由于一些字符可能占用多个比特,字符的数目可能会不同(这在 Unicode 里有发生过)。
这种情况下使用 -m
参数可以得到正确的数目:
wc -m test.txt
Linux 中的 grep
命令
grep
命令是一个非常有用的工具。假若掌握了它,对日常的编码工作会有很大的帮助。
如果你比较好奇,
grep
的全写是 global regular expression print (全局正则表达式打印)。
你可以使用 grep
在文件中进行搜索,或者与管道符配合使用,将输出结果传递到其他命令。
例如,可以用以下命令在 index.md
文件里搜寻 document.getElementById
这一行出现的次数:
grep -n document.getElementById index.md
使用 -n
参数可以显示行号:
grep -n document.getElementById index.md
一个非常有用的方法是告诉 grep 在相应行的前后各输出 2 行,以提供更多的上下文。这可以用参数 -C
来完成,它可以受取其后的若干行数:
grep -nC 2 document.getElementById index.md
搜索默认是区分大小写的。使用参数 -i
可以使其不再区分。
如上所述,你可以使用 grep 来过滤其他命令的输出。我们可以使用以下方法重现前述的功能:
less index.md | grep -n document.getElementById
搜索字符串中可以使用正则表达式,这让 grep
变得非常强大。
另一个你可能发现很有用的方法是——使用参数 -v
反转结果,排除与特定字符串匹配的行:
Linux 中的 sort
命令
假定你有一份文本文件,里面包含一些狗狗的名字:
这串名字并没有进行排序。
而 sort
命令会帮你按照名称顺序排列它们:
使用 r
参数倒转排序结果:
默认情况下,排序区分大小写,并且遵循英文字母顺序。使用 --ignore-case
参数进行不区分大小写的排序,使用 -n
参数可按数值大小顺序进行排序。
如果文件包含重复的行:
你可以使用 -u
参数移除它们:
sort
命令不像多数 UNIX 命令那样,只是用于操作文件,它还可以与管道符配合使用。因此你可以将它用在其他命令的输出上。例如,你可以用它排序 ls
命令传回的文件列表:
ls | sort
sort
的功能非常强大,它还支持更多的参数,你可以输入 man sort
来探索:
Linux 中的 uniq
命令
uniq
命令可以帮助你排序文本文件中的行。
这些行可以通过文件获取,或用管道符从另一个命令的输出中得到:
uniq dogs.txt
ls | uniq
此处需要考虑一个关键点: uniq
只会检测相邻的重复行。
这意味着你可能会将它与 sort
配合使用:
sort dogs.txt | uniq
sort
命令拥有自己的参数—— -u
(unique) 来移除重复的行。但 uniq
更为强大。
默认情况下,它会删除重复的行:
你可以告诉它只是显示重复的行,例如,使用 -d
参数:
sort dogs.txt | uniq -d
还可以使用 -u
参数,那样就只会显示不重复的行:
使用 -c
参数计算每一行的出现次数:
使用以下的特殊命令组合:
sort dogs.txt | uniq -c | sort -nr
即可将文件内的行按最常见的频率排序:
Linux 中的 diff
命令
diff
是一个非常方便的命令。假定有两个文件,它们包含几乎相同的信息,你没有办法找出区别。
diff
会处理文件,然后告诉你有差异的地方。
假定有两个文件: dogs.txt
和 moredogs.txt
。它们的区别是: moredogs.txt
比前者多了一条狗狗的名字:
diff dogs.txt moredogs.txt
会告诉你后者多了一行,在第 3 行有 Vanille
这一行:
如果你改变两个文件的顺序,它会告诉你后者的第三行丢失了,也就是 Vanille
那一行:
使用 -y
参数会逐行对比两个文件:
你可能更熟悉 -u
参数,因为在 Git 版本管理系统中,它一样是用来显示不同版本文件差异的:
对于目录,比较的方式是一样的。你必须使用 -r
选项来进行递归比较(进入子目录):
如果你只对哪个文件存在差异感兴趣,而非关注文件的内容,可以使用 r
和 q
参数:
它还支持更多参数,你可以用 man 页面来探索,只需键入 man diff
:
Linux 中的 echo
命令
echo
命令会做一件简单的事情:它将传递给自身的参数打印输出。
以下示例:
echo “hello”
会将 hello
输出到终端。
我们可以将输出追加到文件中:
echo “hello” >> output.txt
我们可以对环境变量进行插值:
echo “The path variable is $PATH”
注意,特殊字符需要用反斜杠进行转义。以 $
为例:
这只是个开始。当与 Shell 功能交互时,我们可以用它来做一些很棒的事情。
我们可以输出当前文件夹中的文件:
echo *
我们还可以输出当前文件夹中所有以字母 o
开头的文件:
echo o*
任何有效的 Bash(或者是你使用的其他 Shell)命令和功能可以在此使用。
你可以输出你的主文件夹(home)的路径:
echo ~
你还可以执行命令,并且将执行结果打印到标准输出(或者是文件,正如你看到的):
echo $(ls -al)
注意,输出在默认情况下不保留空白。如需留白,必须用双引号来包裹命令:
你可以用它生成字符串列表,例如指定一个范围:
echo {1…5}
Linux 中的 chown
命令
在 Linux 或 macOS 操作系统(或是任一 UNIX 系统)中,每个文件或目录都有所有者。
所有者可以对文件做任何事情。它可以决定文件的命运。
使用 chown
命令,所有者(以及 root
用户)也可以将文件所有权转移给另一个用户:
chown <所有者> <文件>
像这样:
chown flavio test.txt
例如,假设有一个为 root
所拥有的文件,作为其他用户,你无法对它进行写入:
你可以使用 chown
将文件所有权转移到你:
一种需求十分常见:改变目录的所有权,同时遍历修改其中包含的文件、子目录以及子目录中的文件的所有权。
你可以使用 -R
参数来完成:
chown -R <所有者> <文件>
文件和目录不仅属于所有者,同时还属于用户组。使用以下命令,你可以在变更所有者的同时,更改其所属用户组:
chown <所有者>:<用户组> <文件>
举例:
chown flavio:users test.txt
你还可以使用 chgrp
命令,只更改文件的所属用户组:
chgrp <用户组> <文件名>
Linux 中的 chmod
命令
在 Linux 或 macOS 操作系统(或是任一 UNIX 系统)中,每个文件都有三种权限:读取、写入和执行。
进入一个文件夹,并运行 ls -al
命令。
你在文件列表每一行见到的,像是 drwxr-xr-x
这样的奇怪字符串,定义了文件或文件夹的权限。
让我们来剖析一下。
第一个字母表示文件的类型:
-
-
表示这是一个常规的文件 -
d
表示这是一个目录 -
l
表示这是一个链接
之后你就有了三组值:
-
第一组代表文件所有者拥有的权限
-
第二组代表文件所关联的用户组成员拥有的权限
-
第三组代表其他人拥有的权限
这些组由三个值组成。rwx
代表特定 角色 拥有读取、写入和执行访问权限。任何被移除的权限会被替换为 -
,因此你可以将不同的值,及其代表的相关权限进行组合:例如 rw-
、r--
、r-x
等等。
你可以使用 chmod
命令来改变一个文件的权限。
chmod
有两种用法。其一是使用符号参数,其二是使用数字参数。首先来试试更为直观的符号参数。
终端输入 chmod
,空格,之后加上一个字母:
-
a
表示 all,即全体 -
u
表示 user,即用户 -
g
表示 group,即用户组 -
o
表示 others,即其他人
然后输入 +
或 -
并加上一个或多个权限符号(r
、w
、x
),来添加或删除任意权限。
键入以上所有命令和参数之后,都要加上文件或文件夹名称。
以下是一些例子:
chmod a+r filename #每个人都可以读取
chmod a+rw filename #每个人都可以读取和写入
chmod o-rwx filename #其他人(非文件所有者,也不在文件所属用户组中的用户)无法读取、写入或执行文件
只需要在 +
/-
前添加多个字母,即可将相同的权限批量应用到不同的身份:
chmod og-r filename #其他人,和用户组无法读取文件。
如果你正在编辑一个文件夹,你可以使用 -r
(递归)参数将权限应用到该文件夹中的每个文件。
使用数字参数速度更快,但我认为当你不是每天都使用的话,是很难记住它们的。数字在此代表任一角色的权限。这个数字值最大可以是7,它是这样计算的:
-
拥有执行权限,记为
1
-
拥有写入权限,记为
2
-
拥有读取权限,记为
4
这又给我们带来四种组合:
-
0
代表无权限 -
1
代表可以执行 -
2
代表可以写入 -
3
代表可以写入和执行 -
4
代表可以读取 -
5
代表可以读取和执行 -
6
代表可以读取和写入 -
7
代表可以读取、执行和写入
我们使用三组数字,来同时设置所有 3 个用户身份的全部权限:
chmod 777 filename
chmod 755 filename
chmod 644 filename
Linux 中的 umask
命令
创建一个文件时,不需要事先决定权限。权限有默认值。
这些默认值可以使用 umask
命令来控制和修改。
不带参数输入 umask
,它会显示当前的 umask 值,本例中为 0022
:
0022
是什么意思? 这是一个代表权限的八进制数值。
另一个常见的数值是 0002
.
使用 umask -S
查看更具可读性的注释:
在这里,用户(u
),也就是文件的所有者,拥有对文件的读取、写入和执行的权限。
和所有者位于同一用户组的用户(g
)拥有对文件的读取和执行权限,除此之外的其他用户(o
)也一样。
在数字符号中,我们通常会改变最后3位数字。
以下列表给出了这些数字的含义:
-
0
代表读取、写入与执行 -
1
代表读取与写入 -
2
代表读取与执行 -
3
代表只读 -
4
代表写入与执行 -
5
代表仅写入 -
6
代表仅执行 -
7
代表没有权限
注意,这里的数字含义与前述 chmod
命令中用到的并不同。
可以用数值格式,为权限掩码设置一个新的值:
umask 002
也可以更改特定角色的权限:
umask g+r
Linux 中的 du
命令
du
命令会计算整个目录的大小:
du
这里的 32
是一个单位为字节(Byte)的值。
运行 du *
会单独计算每个文件的大小:
你也可以执行 du -m
或 du -g
,以兆字节(MB)或千兆字节(GB)为单位显示文件大小。
使用 -h
选项,会显示更为可读的,适应大小的数值:
添加 -a
选项同样会输出文件夹中每一个文件的大小:
一个方便的做法是按大小对目录进行排序:
du -h | sort -nr
然后通过管道输出到 head
,从而仅获取前 10 个结果:
Linux 中的 df
命令
df
命令用来获取磁盘的使用情况信息。
它的基础形式会输出当前挂载的磁盘卷信息:
使用 -h
参数 (df -h
)会将值以更为可读的方式显示:
你也可以指定任一文件或目录名,以获取其所在的特定卷的信息:
Linux 中的 basename
命令
假设有一个文件路径,比如 /Users/flavio/test.txt
。
执行
basename /Users/flavio/test.txt
会返回 text.txt
字符串:
如果你在任一指向目录的路径字符串上执行 basename
,你会得到路径的最后一节。在以下例子中,/Users/flavio
是一个目录:
Linux 中的 dirname
命令
假设有一个文件路径,比如 /Users/flavio/test.txt
。
执行
dirname /Users/flavio/test.txt
会返回 /Users/flavio
字符串:
Linux 中的 ps
命令
电脑每时每刻都在运行大量不同的进程。
你可以用 ps
命令检查它们:
这是当前会话中运行的,由用户发起的进程列表。
此处我打开了一些 fish
Shell 实例,大多数是在 VS Code 编辑器内部启动的,还运行了一个 Hugo 实例,用来生成网站的开发预览。
这些只是分配给当前用户的命令。要列出所有进程,我们需要给 ps
传递一些参数。
我最常使用的命令是 ps ax
:
a
参数用来同时列出其他用户的进程。x
显示那些未与终端相连的进程(不是由用户通过终端发起的)。
如你所见,较长的命令被截断了。使用 ps axww
继续在新的行上列出命令,而非截断。
我们需要输入
w
两次来应用这个设置(这不是笔误)。
你可以配合使用 grep
和管道符来搜索特定的进程,比如像这样:
ps axww | grep “Visual Studio Code”
ps
返回的列表达了一些重要信息。
第一个信息是 PID
,也就是进程 ID。当你想在另一个命令中引用这个进程时,比如说要杀死它,这是关键的。
然后是 TT
,它告诉我们进程所使用的终端 ID。
接下来 STAT
告诉我们进程的状态:
I
代表闲置的进程(睡眠时间超过约 20 秒)
R
代表可运行的进程
S
代表睡眠时间少于 20 秒的进程
T
代表已停止的进程
U
代表处于不间断等待中的进程
Z
代表已死亡的进程(zombie,即僵尸进程)
如果出现一个以上的字母,那么第二个字母代表进一步的、可能非常有技术性的信息。
常见的是 +
,它代表相应进程在终端中处于前台。而 s
代表相应进程是一个 会话领头进程(session leader).
TIME
则告诉我们进程已经运行了多长时间。
Linux 中的 top
命令
top
命令用来显示系统中正在运行的进程的动态实时信息。
如果要了解系统发生了什么,这条命令真的很方便。
它的用法很简单。你只需要输入 top
,终端会完全沉浸到新的视图中:
这个进程是持续运行的。要退出,你可以输入字母 q
或按下 ctrl-C
。
它给出了很多信息:进程数量、有多少进程在运行或休眠、系统负载、CPU 使用率,还有更多信息。
在下方,占用 CPU 和内存资源最多的进程列表不断刷新。
默认情况下,进程按 CPU 使用率排列,正如你在高亮标记的 %CPU
列中看到的那样。
你可以添加一个参数,要求进程列表按内存利用率排列:
top -o mem
Linux 中的 kill
命令
Linux 进程可以接收信号并做出反应。
这是我们与运行中进程打交道的一种方式。
kill
程序可以向任一程序发送多种信号。
虽然这个命令的名字暗示了它的主要功能,但它不只是用来终止程序的。
它的用法是:
kill
默认情况下,它会向指定的进程 ID 发送 TERM
信号。
我们可以使用参数来发送其它信号,包括以下这些:
kill -HUP
kill -INT
kill -KILL
kill -TERM
kill -CONT
kill -STOP
HUP
代表 hang up(挂起)。 如果在终止进程之前,先关闭了启动它的终端窗口,这一信号将被自动发送。
INT
代表 interrupt(干扰),这个信号和在终端中按下 ctrl-C
组合键的作用一样,常常用来终结进程。
KILL
信号并不直接发送给进程,而是发送到操作系统内核,内核会让指定进程立刻停止并终结。
TERM
代表 terminate(终结)。这是本命令的默认信号,进程收到它会自主终结。
CONT
代表 continue(继续)。它可以用来恢复一个被停止的进程。
STOP
信号并不直接发送给进程,而是发送到操作系统内核,内核会让指定进程立刻停止(但不终结)。
有时你也会见到用数字表示状态的情况,例如 kill -1 <PID>
。在这种情况下,
1
对应 HUP
2
对应 INT
9
对应 KILL
15
对应 TERM
18
对应 CONT
15
对应 STOP
Linux 中的 killall
命令
与 kill
命令类似, killall
也向进程发送状态信号,但区别是后者可以同时向多个进程发送信号,而非前者只能向单个进程 ID 发送信号。
这是它的命令语法:
killall
name
也就是进程的名字。例如,假设有多个 top
程序的实例在运行, killall top
命令将完全终结它们。
你可以指定某一个信号,就像使用 kill
命令那样(请向上翻阅 kill
命令的指南以了解更多具体可以发送的信号),例如:
killall -HUP top
Linux 中的 jobs
命令
当我们在 Linux / macOS 中运行命令时,我们可以在末尾加入 &
符号,使其在后台运行。
例如,让 top
命令在后台运行:
top &
这对于需要长时间运行的程序来说很方便。
要返回切入后台的程序,可以使用 fg
命令。如果后台只有一个作业进程,那么直接使用就好;否则要在后面加上作业进程的号码,如: fg 1
、fg 2
,以此类推。
要获取作业进程号,我们可以使用 jobs
命令。
假设我们运行了 top &
,之后再运行 top -o mem &
,因而我们有两个 top 实例在运行。此时 jobs
命令会这样告诉我们:
现在我们可以利用 fg <作业号>
切回任意一个实例。要再次终止程序,可以按下 cmd-Z
。
运行 jobs -l
也会列出每一个作业的进程 ID。
Linux 中的 bg
命令
当命令执行时,你可以按下 ctrl-Z
暂停它。
按下后,命令会即刻停止,并将你带回到 Shell 终端。
你可以恢复命令在后台的执行,这样既可以使命令保持运行,同时又不会妨碍你在终端中做其他工作。
在这一例子中,有 2 个命令停止了:
运行 bg 1
即可在后台恢复作业 #1 的执行。
我也可以不带任何参数执行 bg
命令,它会默认选取作业列表中的 #1 项。
Linux 中的 fg
命令
当命令在后台运行时,由于此前你已经在命令末尾加上了 &
(例如 top &
,或是使用了 bg
命令将命令放到后台),此时你可以用 fg
命令将其切换回前台。
执行
fg
它将在前台恢复最后被暂停的作业。
你也可以加上作业号,即可指定任一你想在前台恢复的作业,作业号可以使用 jobs
命令获得。
执行 fg 2
将恢复作业 #2:
Linux 中的 type
命令
命令可分为以下四种类型:
-
可执行程序
-
Shell 内置程序
-
Shell 功能
-
命令别名
如果你很想知道或只是很好奇,type
命令可以帮你分清这些。它会告诉你某一命令如何被解析。
输出根据 Shell 的类型而有所不同,这是在 Bash 中的样子:
这是在 Zsh 中的样子:
这是在 Fish 中的样子:
其中一个有趣的现象是:对于别名,它会告诉你某个别名将被解析到何处。例如,在 Bash 和 Zsh 中, ll
显示为一个别名,而在 Fish 中,由于 ll
是默认提供的,所以它会告诉你这是内置的 Shell 功能。
Linux 中的 which
命令
假定你有一个可直接执行的命令,因为它处在 Shell 路径中,但你想知道它的具体位置。
你可以用 which
来做这件事。这个命令会返回指定命令的路径。
which
只对存储在磁盘上的可执行文件起作用,对别名或内置 Shell 功能无效。
Linux 中的 nohup
命令
有时你必须在远程机器上运行一个长时间活跃的进程,但之后你需要断开连接。
或者,你只是想防止当本地和服务器之间有任何网络问题时,命令被停止执行。
要让任一命令在登出或关闭服务器会话后继续运行,可以使用 nohup
命令。
执行 nohup <命令>
可以让某个进程在你登出后继续工作。
Linux 中的 xargs
命令
在 UNIX Shell 中,xargs
命令用来将标准输入的数据转换成命令的参数。
换句话说,使用 xargs
,可以将一条命令的输出,用作另一条命令的输入。
下面是你将会用到的语法:
command1 | xargs command2
我们使用管道符(|
)将输出传递给 xargs
。它将负责运行 command2
命令,使用 command1
的输出作为参数。
我们来做个简单的例子。假设你要删除某个目录下的一些特定文件。这些文件列在一个文本文件中。
我们有三个文件: file1
、 file2
、 file3
。
在 todelete.txt
中,我们有一份想要删除的文件列表,在这一例子中是 file1
和 file3
:
我们将通过 xargs
把 cat todelete.txt
的输出引向 rm
命令。
就像这样:
cat todelete.txt | xargs rm
以下是执行结果,我们列出的文件现在已经被删除:
它的工作方式是:xargs
会运行 rm
2次,为 cat
返回的每一行运行一次。
这是 xargs
最简单的用法。我们还可以使用以下的一些参数。
在我看来,其中最有用的是 -p
(特别是刚开始学习 xargs
时)。使用这个选项将使 xargs
打印出一个确认提示,说明它要采取的行动:
-n
选项令 xargs
每次执行若干个迭代,因此你可以用 -p
单独确认它们。这里我们用 -n1
告诉 xargs
一次执行一个迭代:
另一个广泛应用的参数是 -I
。它可以将输出内容放入占位符,之后你可以用来做各种事。
其中一件事是同时运行多个命令,例如:
command1 | xargs -I % /bin/bash -c ‘command2 %; command3 %’
你可以将上方的
%
符号换成其他任何东西——它只是个变量。
Linux 中的 vim
编辑器命令
vim
是一个非常流行的文件编辑器,特别是在程序员中。 它被积极开发且经常更新,且有巨大的社区力量围绕着。甚至还有一个 Vim 会议!
在现代系统中,vi
只是 vim
的一个别名,意思是“改进的 vi
”(即 “vi
im
proved”)。
你可以在命令行运行 vi
启动它。
调用时指定一个文件名,你就可以编辑对应的文件:
vi test.txt
你需要了解的是,Vim 有两个主要的模式:
-
命令(command) 模式,也称为 普通(normal) 模式
-
插入(insert) 模式
当你启动编辑器时,默认处于命令模式。这时你无法像期望的那样,在基于图形界面的编辑器中输入文本。你需要进入插入模式。
可以按下 i
键进入插入模式。当你这样做之后, 在编辑器下方会出现 -- 插入 --
(或 INSERT)字样:
现在你可以开始输入了,用文件内容来填充终端屏幕:
你可以用方向键在文件中移动光标,或者使用 h
- j
- k
- l
四个键。 h-l
代表左和右,j-k
代表上和下。
当完成编辑时,按下 esc
键即可退出插入模式,回到命令模式。
此时你可以浏览文件,但无法向其添加内容(要注意按下了哪个键,某些键可能是编辑器的命令)。
现在你可能想知道如何保存文件。可以按下 :
(冒号),然后输入 w
,即 :w
要保存并退出,可以按下 :
然后输入 w
和 q
,即 :wq
要退出但不保存文件,可以按下 :
然后输入 q
和 !
,即 :q!
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
i` 启动它。
调用时指定一个文件名,你就可以编辑对应的文件:
vi test.txt
你需要了解的是,Vim 有两个主要的模式:
-
命令(command) 模式,也称为 普通(normal) 模式
-
插入(insert) 模式
当你启动编辑器时,默认处于命令模式。这时你无法像期望的那样,在基于图形界面的编辑器中输入文本。你需要进入插入模式。
可以按下 i
键进入插入模式。当你这样做之后, 在编辑器下方会出现 -- 插入 --
(或 INSERT)字样:
现在你可以开始输入了,用文件内容来填充终端屏幕:
你可以用方向键在文件中移动光标,或者使用 h
- j
- k
- l
四个键。 h-l
代表左和右,j-k
代表上和下。
当完成编辑时,按下 esc
键即可退出插入模式,回到命令模式。
此时你可以浏览文件,但无法向其添加内容(要注意按下了哪个键,某些键可能是编辑器的命令)。
现在你可能想知道如何保存文件。可以按下 :
(冒号),然后输入 w
,即 :w
要保存并退出,可以按下 :
然后输入 w
和 q
,即 :wq
要退出但不保存文件,可以按下 :
然后输入 q
和 !
,即 :q!
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-0CjxVPqF-1712508047644)]
[外链图片转存中…(img-6FV6oiIZ-1712508047644)]
[外链图片转存中…(img-Q5sJHIVR-1712508047645)]
[外链图片转存中…(img-HJgvCvMj-1712508047645)]
[外链图片转存中…(img-HP7ivV5s-1712508047645)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
[外链图片转存中…(img-Ra9prdqt-1712508047646)]