Linux实战:部署基于Postfix 与 Dovecot 的邮件系统

一、电子邮件系统简介

在电子邮件系统中,为用户收发邮件的服务器名为邮件用户代理(Mail User Agent,MUA),MTA (邮件传输代理)的工作职责是转发处理不同电子邮件服务供应商之间的邮件,把来自于 MUA 的邮件转发到合适的 MTA 服务器。

一般的网络服务程序在传输信息时就像拨打电话,需要双方同时保持在线,而在电子邮件系统中,用户发送邮件后不必等待投递工作完成即可下线。

如果对方邮件服务器(MTA)宕机或对方临时离线,则发件服务器(MTA)就会把要发送的内容自动地暂时保存到本地,等检测到对方邮件服务器恢复后会立即再次投递,期间一般无须运维人员维护处理,随后收信人(MUA)就能在自己的信箱中找到这封邮件了。

一个最基础的电子邮件系统肯定要能提供发件服务和收件服务,为此需要使用基于 SMTP的 Postfix 服务程序提供发件服务功能,并使用基于 POP3 协议的 Dovecot 服务程序提供收件服务功能,这里的 SMTP、POP3、IMAP4指的是收发邮件的协议。这样一来,用户就可以使用 Outlook Express 或 Foxmail 等客户端服务程序正常收发邮件了。
在这里插入图片描述

二、部署基础的电子邮件系统

1. 配置服务器主机名称

需要保证服务器主机名称与发信域名保持一致

[root@linuxprobe~]$ vim /etc/hostname
mail.xxx.com
[root@linuxprobe~]$ hostname
mail.xxx.com

修改主机名称文件后如果没有立即生效,可以重启服务器;或者再执行一条
hostnamectl set-hostname mail.xxx.com命令,立即设置主机名称。

2. 清空 iptables 防火墙默认策略

避免因防火墙中默认存在的策略阻止了客户端 DNS 解析域名及收发邮件。

[root@linuxprobe~]$ iptables -F
[root@linuxprobe~]$ iptables-save

别忘记 firewalld 防火墙,把 DNS 协议加入到 firewalld 防火墙的允许列表中。

[root@linuxprobe~]$ firewall-cmd --permanent --zone=public --add-service=dns
success
[root@linuxprobe~]$ firewall-cmd --reload
success
3. 为电子邮件系统提供域名解析
[root@linuxprobe~]$ dnf install bind-chroot
[root@linuxprobe~]$ cat /etc/named.conf
1 //
2 // named.conf
3 //
4 // Provided by Red Hat bind package to configure the BIND named DNS
5 // server as a caching only nameserver (as a localhost DNS resolver).
6 //
7 // See /usr/share/doc/bind*/sample/ for example configuration files.
8 //
9
10 options {
11 listen-on port 53 { any; };
12 listen-on-v6 port 53 { ::1; };
13 directory "/var/named";
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file "/var/named/data/named_stats.txt";
16 memstatistics-file "/var/named/data/named_mem_stats.txt";
17 secroots-file "/var/named/data/named.secroots";
18 recursing-file "/var/named/data/named.recursing";
19 allow-query { any; };
20
………………省略部分输出信息………………
[root@linuxprobe~]$ cat /etc/named.rfc1912.zones
zone "linuxprobe.com" IN {
type master;
file "linuxprobe.com.zone";
allow-update {none;};
};

建议在复制正向解析模板文件时,在 cp 命令后面追加-a 参数,以便让新文件继承原文件的属性和权限信息:

[root@linuxprobe~]$ cp -a /var/named/named.localhost /var/named/linuxprobe.com.zone
[root@linuxprobe~]$ cat /var/named/linuxprobe.com.zone

在这里插入图片描述

[root@linuxprobe~]$ systemctl restart named
[root@linuxprobe~]$ systemctl enable named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service→ /
usr/lib/systemd/system/named.service.

修改好配置文件后记得重启 bind 服务程序,这样电子邮件系统所对应的服务器主机名即为 mail.linuxprobe.com,而邮件域为@linuxprobe.com。把服务器的 DNS 地址修改成本地 IP 地址

在这里插入图片描述
让新配置的网卡参数立即生效:

[root@linuxprobe~]$ nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/
ActiveConnection/4)

最后,对主机名执行 ping 命令,若能 ping 通,则证明上述操作全部正确。注意,在执行
ping 操作时,也会获得主机名对应的 IP 地址,证明上述操作全部正确:

[root@linuxprobe~]$ ping -c 4 mail.linuxprobe.com
PING mail.linuxprobe.com (192.168.10.10) 56(84) bytes of data.
64 bytes from mail.linuxprobe.com (192.168.10.10): icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from mail.linuxprobe.com (192.168.10.10): icmp_seq=2 ttl=64 time=0.057 ms
64 bytes from mail.linuxprobe.com (192.168.10.10): icmp_seq=3 ttl=64 time=0.037 ms
64 bytes from mail.linuxprobe.com (192.168.10.10): icmp_seq=4 ttl=64 time=0.052 ms
--- mail.linuxprobe.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 45ms
rtt min/avg/max/mdev = 0.037/0.046/0.057/0.010 ms
4. 配置 Postfix 服务程序

Postfix 是一款由 IBM 资助研发的免费开源电子邮件服务程序,能够很好地兼容 Sendmail服务程序,可以方便 Sendmail 用户迁移到 Postfix 服务上。Postfix 服务程序的邮件收发能力强于 Sendmail 服务,而且能自动增加、减少进程的数量来保证电子邮件系统的高性能与稳定性。

另外,Postfix 服务程序由许多小模块组成,每个小模块都可以完成特定的功能,因此可在生产工作环境中根据需求灵活搭配。

安装 Postfix 服务程序:

[root@linuxprobe~]# dnf install postfix
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use
subscription-manager to register.
Last metadata expiration check: 0:10:38 ago on Mon 29 Mar 2021 06:40:32 AM CST.Installing:
postfix x86_64 2:3.3.1-8.el8 BaseOS 1.5 MInstall 1 Package
………………省略部分输出信息………………
Installed:
postfix-2:3.3.1-8.el8.x86_64
Complete!

配置 Postfix 服务程序。大家如果是首次看到 Postfix 服务程序主配置文件(/etc/
postfix/main.cf),估计会被 738 行的内容给吓到。其实不用担心,这里面绝大多数的内容依然是注释信息。刘遄老师在本书中一直强调正确学习 Linux 系统的方法,并坚信“负责任的好老师不应该是书本的搬运工,而应该是一名优质内容的提炼者”,因此在翻遍了配置参数的介绍,以及结合多年的运维经验后,最终总结出了 7 个最应该掌握的参数,如表所示。

myhostname 邮局系统的主机名
mydomain 邮局系统的域名
myorigin 从本机发出邮件的域名名称
inet_interfaces 监听的网卡接口
mydestination 可接收邮件的主机名或域名
mynetworks 设置可转发哪些主机的邮件
relay_domains 设置可转发哪些网域的邮件

在 Postfix 服务程序的主配置文件中,总计需要修改 5 处。首先是在第 95 行定义一个名为 myhostname 的变量,用来保存服务器的主机名称。请大家记住这个变量的名称,下面的参数需要调用它:

[root@linuxprobe~]# vim /etc/postfix/main.cf
86
87 # INTERNET HOST AND DOMAIN NAMES
88 #
89 # The myhostname parameter specifies the internet hostname of this
90 # mail system. The default is to use the fully-qualified domain name
91 # from gethostname(). $myhostname is used as a default value for many
92 # other configuration parameters.
93 #
94 #myhostname = host.domain.tld
95 myhostname = mail.linuxprobe.com
然后在第 102 行定义一个名为 mydomain 的变量,用来保存邮件域的名称。大家也要记住这个变量名称,下面将调用它:
96
97 # The mydomain parameter specifies the local internet domain name.
98 # The default is to use $myhostname minus the first component.
99 # $mydomain is used as a default value for many other configuration
100 # parameters.
101 #
102 mydomain = linuxprobe.com
103
在第 118 行调用前面的 mydomain 变量,用来定义发出邮件的域。调用变量的好处是避
免重复写入信息,以及便于日后统一修改:
105 #
106 # The myorigin parameter specifies the domain that locally-posted
107 # mail appears to come from. The default is to append $myhostname,
108 # which is fine for small sites. If you run a domain with multiple
109 # machines, you should (1) change this to $mydomain and (2) set up
110 # a domain-wide alias database that aliases each user to
111 # user@that.users.mailhost.
112 #
113 # For the sake of consistency between sender and recipient addresses,
114 # myorigin also specifies the default domain name that is appended
115 # to recipient addresses that have no @domain part.116 #
117 #myorigin = $myhostname
118 myorigin = $mydomain
1194 处修改是在第 135 行定义网卡监听地址。可以指定要使用服务器的哪些 IP 地址对外
提供电子邮件服务;也可以干脆写成 all,表示所有 IP 地址都能提供电子邮件服务:
121
122 # The inet_interfaces parameter specifies the network interface
123 # addresses that this mail system receives mail on. By default,
124 # the software claims all active interfaces on the machine. The
125 # parameter also controls delivery of mail to user@[ip.address].
126 #
127 # See also the proxy_interfaces parameter, for network addresses that
128 # are forwarded to us via a proxy or network address translator.
129 #
130 # Note: you need to stop/start Postfix when this parameter changes.
131 #
132 #inet_interfaces = all
133 #inet_interfaces = $myhostname
134 #inet_interfaces = $myhostname, localhost
135 inet_interfaces = all
136
最后一处修改是在第 183 行定义可接收邮件的主机名或域名列表。这里可以直接调用前
面定义好的 myhostname 和 mydomain 变量(如果不想调用变量,也可以直接调用变量中的值):
151
152 # The mydestination parameter specifies the list of domains that this
153 # machine considers itself the final destination for.
154 #
155 # These domains are routed to the delivery agent specified with the
156 # local_transport parameter setting. By default, that is the UNIX
157 # compatible delivery agent that lookups all recipients in /etc/passwd
158 # and /etc/aliases or their equivalent.
159 #
160 # The default is $myhostname + localhost.$mydomain + localhost. On
161 # a mail domain gateway, you should also include $mydomain.
162 #
163 # Do not specify the names of virtual domains - those domains are
164 # specified elsewhere (see VIRTUAL_README).
165 #
166 # Do not specify the names of domains that machine is backup MX
167 # host for. Specify those names via the relay_domains settings for
168 # the SMTP server, or use permit_mx_backup if you are lazy (see
169 # STANDARD_CONFIGURATION_README).
170 #
171 # The local machine is always the final destination for mail addressed
172 # to user@[the.net.work.address] of an interface that the mail system
173 # receives mail on (see the inet_interfaces parameter).
174 #
175 # Specify a list of host or domain names, /file/name or type:table
176 # patterns, separated by commas and/or whitespace. A /file/name
177 # pattern is replaced by its contents; a type:table is matched when
419
178 # a name matches a lookup key (the right-hand side is ignored).
179 # Continue long lines by starting the next line with whitespace.
180 #
181 # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
182 #
183 mydestination = $myhostname, $mydomain
184 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
185 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
186 # mail.$mydomain, www.$mydomain, ftp.$mydomain
187

创建电子邮件系统的登录账户。Postfix 与 vsftpd 服务程序一样,都可以调用本
地系统的账户和密码,因此在本地系统创建常规账户即可。最后重启配置妥当的 postfix 服务程序,并将其添加到开机启动项中。大功告成!

[root@linuxprobe~]# useradd liuchuan
[root@linuxprobe~]# echo "linuxprobe" | passwd --stdin liuchuan
Changing password for user liuchuan.
passwd: all authentication tokens updated successfully.
[root@linuxprobe~]# systemctl restart postfix
[root@linuxprobe~]# systemctl enable postfix
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service→ /
usr/lib/systemd/system/postfix.service.
5.配置 Dovecot 服务程序

Dovecot 是一款能够为 Linux 系统提供 IMAP 和 POP3 电子邮件服务的开源服务程序,安全性极高,配置简单,执行速度快,而且占用的服务器硬件资源也较少,因此是一款值得推荐的收件服务程序。

安装 Dovecot 服务程序软件包。

[root@linuxprobe~]# dnf install -y dovecot
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use
subscription-manager to register.
Last metadata expiration check: 0:49:52 ago on Mon 29 Mar 2021 06:40:32 AM CST.Installing:
dovecot x86_64 1:2.2.36-5.el8 AppStream 4.6 M
Installing dependencies:
clucene-core x86_64 2.3.3.4-31. e8e3d20git.el8 AppStream 590 kInstall 2 Packages
使用 Postfix 与 Dovecot 部署邮件系统
420
………………省略部分输出信息………………
Installed:
dovecot-1:2.2.36-5.el8.x86_64
clucene-core-2.3.3.4-31.20130812.e8e3d20git.el8.x86_64
Complete!

配置部署 Dovecot 服务程序。在 Dovecot 服务程序的主配置文件中进行如下修
改。首先是第 24 行,把 Dovecot 服务程序支持的电子邮件协议修改为 imap、pop3 和 lmtp。然后在这一行下面添加一行参数,允许用户使用明文进行密码验证。之所以这样操作,是因为 Dovecot 服务程序为了保证电子邮件系统的安全而默认强制用户使用加密方式进行登录,而由于当前还没有加密系统,因此需要添加该参数来允许用户的明文登录。

[root@linuxprobe~]$ vim /etc/dovecot/dovecot.conf
………………省略部分输出信息………………# Protocols we want to be serving.
protocols = imap pop3 lmtp
disable_plaintext_auth = no
………………省略部分输出信息………………

在主配置文件的第 49 行,设置允许登录的网段地址,也就是说我们可以在这里限制只有来自于某个网段的用户才能使用电子邮件系统。如果想允许所有人都能使用,则不用修改本参数:

# Space separated list of trusted network ranges. Connections from these
# IPs are allowed to override their IP addresses and ports (logging and
# for authentication checks). disable_plaintext_auth is also ignored for
# these networks. Typically you'd specify your IMAP proxy servers here.
login_trusted_networks = 192.168.10.0/24

配置邮件格式与存储路径。在 Dovecot 服务程序单独的子配置文件中,定义一
个路径,用于指定要将收到的邮件存放到服务器本地的哪个位置。这个路径默认已经定义好了,只需要将该配置文件中第 25 行前面的井号(#)删除即可。

[root@linuxprobe~]$ vim /etc/dovecot/conf.d/10-mail.conf
1 ##
2 ## Mailbox locations and namespaces
3 ##
4
5 # Location for users' mailboxes. The default is empty, which means that Dovecot
6 # tries to find the mailboxes automatically. This won't work if the user
7 # doesn't yet have any mail, so you should explicitly tell Dovecot the full
8 # location.
9 #
10 # If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u)
421
11 # isn't enough. You'll also need to tell Dovecot where the other mailboxes are
12 # kept. This is called the "root mail directory", and it must be the first
13 # path given in the mail_location setting.
14 #
15 # There are a few special variables you can use, eg.:
16 #
17 # %u - username
18 # %n - user part in user@domain, same as %u if there's no domain
19 # %d - domain part in user@domain, empty if there's no domain
20 # %h - home directory
21 #
22 # See doc/wiki/Variables.txt for full list. Some examples:
23 #
24 # mail_location = maildir:~/Maildir
25 mail_location = mbox:~/mail:INBOX=/var/mail/%u
26 # mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
27 #
………………省略部分输出信息………………

然后切换到配置 Postfix 服务程序时创建的 boss 账户,并在家目录中建立用于保存邮件的目录。记得要重启 Dovecot 服务并将其添加到开机启动项中。至此,对 Dovecot 服务程序的配置部署步骤全部结束。

[root@linuxprobe~]$ su - liuchuan
[liuchuan@linuxprobe~]$ mkdir -p mail/.imap/INBOX
[liuchuan@linuxprobe~]$ exit
logout
[root@linuxprobe~]$ systemctl restart dovecot
[root@linuxprobe~]$ systemctl enable dovecot
Created symlink /etc/systemd/system/multi-user.target.wants/dovecot.service→ /
usr/lib/systemd/system/dovecot.service.

大家肯定觉得少了点什么吧。是的,还要记得把上面提到的邮件协议在防火墙中的策略

予以放行,这样客户端就能正常访问了:

[root@linuxprobe~]$ firewall-cmd --permanent --zone=public --add-service=imap
success
[root@linuxprobe~]$ firewall-cmd --permanent --zone=public --add-service=pop3
success
[root@linuxprobe~]$ firewall-cmd --permanent --zone=public --add-service=smtp
success
[root@linuxprobe~]$ firewall-cmd --reload
success

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测 YOLOv5 - 推理时的数据增强

目标检测 YOLOv5 - 推理时的数据增强 flyfish 版本 YOLOv5 6.2 参考地址 https://github.com/ultralytics/yolov5/issues/303在训练时可以使用数据增强,在推理阶段也可以使用数据增强 在测试使用数据增强有个名字叫做Test-Time Augmentation (TTA) 实际使用中使…

PostgreSQL数据库的json操作

1.操作符 select json字段::json->key值 from order -- 对象域 select json字段::json->>key值 from order -- 文本 select json字段::json#>{key值} from order -- 对象域 select json字段::json#>>{key值} from order -- 文本对象域表示还能继续操作&#…

26、web攻防——通用漏洞SQL注入SqlmapOracleMongodbDB2

文章目录 OracleMongoDBsqlmap SQL注入课程体系; 数据库注入:access、mysql、mssql、oracle、mongodb、postgresql等数据类型注入:数字型、字符型、搜索型、加密型(base63 json)等提交方式注入:get、post、…

ES6之生成器(Generator)

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

如何使用Git进行代码版本管理

目录 建立仓库 分支管理 推送代码 问题 建立仓库 先在远程代码托管平台(如GitHub、GitLab等)上创建一个新的仓库 使用命令行或终端,进入你的本地项目目录 如果项目还没有使用Git进行版本控制,可以通过执行以下命令来初始…

Origin 2021软件安装包下载及安装教程

Origin 2021下载链接:https://docs.qq.com/doc/DUnJNb3p4VWJtUUhP 1.选中下载的压缩包,然后鼠标右键选择解压到"Origin 2021"文件夹 2.双击打开“Setup”文件夹 3.选中“Setup.exe”鼠标右键点击“以管理员身份运行” 4.点击“下一步" 5…

240101-5步MacOS自带软件无损快速导出iPhone照片

硬件准备: iphone手机Mac电脑数据线 操作步骤: Step 1: 找到并打开MacOS自带的图像捕捉 Step 2: 通过数据线将iphone与电脑连接Step 3:iphone与电脑提示“是否授权“? >>> “是“Step 4:左上角选择自己的设…

springboot3+vue3实现大文件分片上传和断点续传

大文件分片上传和断点续传 大文件分片上传是一种将大文件切分成小片段进行上传的策略。这种上传方式有以下几个主要原因和优势: 网络稳定性:大文件的上传需要较长时间,而网络连接可能会不稳定或中断。通过将文件切分成小片段进行上传&#xf…

低延时视频技术的应用场景和挑战

编者按 无线网络对人们的生活产生了巨大的影响,而5G技术的引入将彻底改变我们与世界互联互通的方式。在5G时代,实现万物互联离不开低延时技术的应用。 LiveVideoStackCon 2023 深圳站邀请到秒点科技的CEO扶凯,为大家分享低延时技术在物联网、…

【CF比赛记录】—— Good Bye 2023(A、B、C)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:CF比赛记录 💌其他专栏: 🔴每日一题 🟡 cf闯关练习 🟢 C语言跬步积累 🌈座右铭:广积粮,缓…

Big-endian与Little-endian详尽说明

大端与小端存储详尽说明 大端与小端存储详尽说明 大端与小端存储详尽说明一. 什么是字节序二. 什么是大端存储模式三. 什么是小端存储模式四. 大小端各自的特点五. 为什么会有大小端模式之分六. 为什么要注意大小端问题六. 大小端判定程序七. 大端小端的转换1)16位大…

详解Vue3中的鼠标事件mousedown、mouseup和contextmenu

本文主要介绍Vue3中的常见鼠标事件mousedown、mouseup和contextmenu。 目录 一、mousedown——鼠标按下事件二、mouseup——鼠标弹起事件三、contextmenu——页面菜单 下面是Vue 3中常用的鼠标事件mousedown、mouseup和contextmenu的详解。 一、mousedown——鼠标按下事件 mo…

当你的电脑在安装Windows更新后出现问题时怎么办,这里提供办法

Windows更新通常会为你的电脑带来错误修复、安全补丁和新功能,但它们也可能会带来性能下降甚至引发恐慌的数据丢失等问题,从而适得其反。如果你在安装更新后发现了一些奇怪之处,你可以将其回滚,尝试重新启动。 Windows更新主要有两种:质量更新和功能更新。高质量的更新包…

vmware安装openEuler 22.03 LTS操作系统

vmware安装openEuler 22.03 LTS操作系统 1、下载openEuler操作系统镜像文件2、安装openEuler操作系统3、配置openEuler操作系统3.1、配置静态IP地址 和 dns3.2、查看磁盘分区3.3、查看系统版本 1、下载openEuler操作系统镜像文件 官网下载链接 链接: https://www.openeuler.or…

【2023年终总结:轻舟已过万重山】

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注),发送【资料】可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景、中间件系列…

数据结构期末复习(fengkao课堂)

学习数据结构时,以下建议可能对您有所帮助: 理解基本概念:首先,确保您理解数据结构的基本概念,例如数组、链表、栈、队列、树、图等。了解它们的定义、特点和基本操作。 学习时间复杂度和空间复杂度:了解如…

Docker support for NVIDIA GPU Accelerated Computing on WSL 2

Docker support for NVIDIA GPU Accelerated Computing on WSL 2 0. 背景1. 安装 Docker Desktop2. 配置 Docker Desktop3. WLS Ubuntu 配置4. 安装 Docker-ce5. 安装 NVIDIA Container Toolkit6. 配置 Docker7. 运行一个 Sample Workload 0. 背景 今天尝试一下 NVIDIA GPU 在…

IoT 物联网常用协议

物联网协议是指在物联网环境中用于设备间通信和数据传输的协议。根据不同的作用,物联网协议可分为传输协议、通信协议和行业协议。 传输协议:一般负责子网内设备间的组网及通信。例如 Wi-Fi、Ethernet、NFC、 Zigbee、Bluetooth、GPRS、3G/4G/5G等。这些…

公司电脑文件防泄密|防止内部终端核心文件数据 \ 资料外泄

PC端访问地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 为了防止公司电脑文件泄密,可以采取以下措施: 文件加密:对重要文件进行加密是一种有效的防泄密方法。通过使用加密算法,…

Linux学习之系统编程1(关于读写系统函数)

写在前面: 我的Linux的学习之路非常坎坷。第一次学习Linux是在大一下的开学没多久,结果因为不会安装VMware就无疾而终了,可以说是没开始就失败了。第二次学习Linux是在大一下快放暑假(那个时候刚刚过完考试周)&#xf…