Linux环境部署与命令技巧

news2024/11/15 21:41:31

Linux环境部署与命令技巧

在这里插入图片描述

  1. 安装Java
    首先确保已经安装了Java。通过运行以下命令检查Java是否已安装:
java -version # 查看Java版本

如果未安装Java,可以使用以下命令安装OpenJDK:

sudo yum install java-11-openjdk # 安装OpenJDK 11
  1. 创建一个新用户
    为了避免使用root用户运行Tomcat,需要创建一个新用户。这里我们创建一个名为tomcat的用户:
sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat # 创建名为tomcat的系统用户

这将创建一个系统用户tomcat,其家目录设置为/opt/tomcat,并使用/bin/false作为shell,以防止直接登录。

  1. 下载并安装Tomcat
    从Tomcat官网下载最新版本的Tomcat。将下载的文件放在/opt/tomcat目录下:
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz # 下载Tomcat 9
sudo tar xvf apache-tomcat-9.0.56.tar.gz -C /opt/tomcat --strip-components=1 # 将下载的Tomcat解压到/opt/tomcat目录
  1. 更改文件所有权和权限
    将Tomcat目录的所有权更改为刚创建的tomcat用户:
sudo chown -R tomcat: /opt/tomcat # 修改/opt/tomcat目录的所有权为tomcat用户

修改目录权限以确保安全:

sudo chmod -R 755 /opt/tomcat # 修改/opt/tomcat目录的权限为755
sudo chmod 400 /opt/tomcat/conf/*.* # 修改/opt/tomcat/conf目录下的配置文件权限为400
  1. 创建并配置systemd服务
    创建一个名为tomcat.service的systemd服务文件:
sudo vi /etc/systemd/system/tomcat.service # 创建并编辑tomcat.service文件

将以下内容复制到该文件中:

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

请确保JAVA_HOME路径与实际安装的Java版本相匹配。

  1. 启动并启用Tomcat服务
    现在可以启动Tomcat服务并将其设置为开机启动
  • 为什么把配置文件的权限设置成400

  • 将配置文件的权限设置为400的原因是为了提高安全性。在Linux系统中,文件权限分为读(read,4)、写(write,2)和执行(execute,1)三种。权限值400表示文件拥有者具有读取权限,而其他用户和组没有任何权限。

当你将Tomcat配置文件的权限设置为400时,意味着只有文件的所有者(通常是创建这些文件的用户,例如tomcat用户)可以读取这些文件。其他用户无法修改、删除或执行这些配置文件。这有助于防止未经授权的用户访问或篡改配置文件,从而提高了系统的安全性。

  • sudo chmod -R 755 /opt/tomcat 命令的作用是递归地将 /opt/tomcat 目录及其所有子目录和文件的权限设置为755。

在Linux系统中,文件权限分为三组,分别是文件所有者(owner)、所属组(group)和其他用户(others)。权限值755表示文件所有者具有读(read,4)、写(write,2)和执行(execute,1)权限(4+2+1=7),而文件所属组和其他用户仅具有读和执行权限(4+1=5)。

/opt/tomcat 目录及其所有子目录和文件的权限设置为755,可以确保 tomcat 用户(作为文件所有者)具有对这些文件的完全访问权限,而其他用户只能读取和执行这些文件,无法进行修改。这样的权限设置有助于保护系统安全,同时确保了其他用户可以正常访问和使用Tomcat服务。

  • 为什么 /opt/tomcat给其他的用户设置读和执行的权限,设置成400不行吗

  • /opt/tomcat 目录及其所有子目录和文件的权限设置为755而不是400,主要是为了确保其他用户(除了tomcat用户之外)可以正常访问和使用Tomcat服务。权限值755允许其他用户读取和执行这些文件,而权限值400则完全禁止其他用户访问。

在某些情况下,例如系统管理员或其他服务需要访问Tomcat的文件或目录时,给其他用户设置读和执行权限是必要的。这样可以确保Tomcat与其他服务或应用程序正常协作,同时避免因权限过于严格而导致的潜在问题。

当然,根据具体的安全需求和场景,你可以根据需要调整权限设置。例如,如果你希望限制其他用户对某些敏感文件或目录的访问,可以将其权限设置为更严格的值,如400。但是,请注意,在修改权限时确保不会影响Tomcat服务的正常运行。

  • 当用户访问Tomcat服务时,通常是通过HTTP或HTTPS协议与Tomcat服务进行通信。用户与Tomcat服务的交互不是直接访问文件系统,而是通过Tomcat服务处理请求。因此,你提到的"用户"实际上并不直接访问文件系统。

在这种情况下,为什么要给其他用户设置读和执行权限呢?主要原因在于系统的其他组件、服务或应用程序可能需要访问Tomcat的文件和目录。例如,系统管理员可能需要查看日志文件,或者其他服务可能需要与Tomcat进行某种集成。为了确保这些场景下的正常运行,给其他用户提供一定程度的访问权限是必要的。

在CentOS系统中部署Tomcat时,我们创建了一个名为tomcat的用户,该用户用于运行Tomcat服务。这意味着在处理请求时,Tomcat服务是以tomcat用户的身份运行的。因此,当用户通过HTTP或HTTPS访问Tomcat服务时,实际上是在与tomcat用户关联的服务进行交互。

总之,给其他用户设置读和执行权限主要是为了确保其他系统组件、服务或应用程序可以正常访问和使用Tomcat。当用户通过HTTP或HTTPS访问Tomcat服务时,他们实际上是与tomcat用户关联的服务进行交互。

  • 为什创建用户的时候要加sudo
    ,直接用root创建不行吗

  • 在创建用户时使用sudo的原因是为了提高系统安全性。sudo命令允许普通用户(非root用户)以root用户的身份执行命令。通过使用sudo,你可以避免以root用户直接登录系统和执行命令,从而降低安全风险。

当然,你也可以直接使用root用户创建新用户。但是,不建议直接以root用户登录和操作系统,因为root用户具有对整个系统的完全控制权。如果在执行命令时出现错误,可能会导致严重的系统损坏。而使用普通用户加sudo命令执行敏感操作,可以在一定程度上减轻此类风险。

总之,为了提高系统安全性,建议使用sudo命令(而非直接使用root用户)来创建新用户。

  • useradd -r -m -U -d参数的意思

  • useradd 是在 Linux 系统中添加新用户的命令。接下来,我将逐一解释您提到的参数:

  • -r:创建系统用户。系统用户通常用于运行系统服务,而不是登录和使用。系统用户的 UID 通常小于 1000(具体取决于系统配置)。

  • -m:创建用户的主目录。如果不使用此选项,可能不会为新用户创建主目录。主目录通常位于 /home/username

  • -U:创建一个同名的用户组,并将新创建的用户作为该组的唯一成员。如果不使用此选项,新用户将被添加到默认组(通常是 users 组)。

  • -d:指定新用户的主目录。您需要在 -d 之后提供一个路径,例如:-d /path/to/home/directory。如果没有指定此选项,系统将使用默认的主目录(通常位于 /home/username)。

综上所述,使用这些参数组合的 useradd 命令将创建一个系统用户,并为其指定主目录和用户组。例如:

useradd -r -m -U -d /path/to/home/directory newuser

把这个tomcat.service脚本给我解释下

  • tomcat.service 是一个 systemd 服务单元文件,用于在 Linux 系统上管理 Tomcat 服务。以下是一个示例的 tomcat.service 文件,我将逐行进行解释:
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
  • [Unit] 部分包含服务的一般信息和依赖关系。
  • Description:描述服务的目的。
  • After:指定此服务应在其他服务(例如网络服务)启动之后启动。
  • [Service] 部分描述了服务的主要属性和执行参数。
  • Type:指定服务的启动类型。forking 表示服务在启动时将创建一个子进程。
  • Environment:设置服务运行时的环境变量。
  • ExecStart:指定启动服务时要执行的命令。
  • ExecStop:指定停止服务时要执行的命令。
  • User:指定运行服务的用户。
  • Group:指定运行服务的用户组。
  • UMask:设置服务运行时的文件创建掩码。
  • RestartSec:指定服务重启之间的等待时间(以秒为单位)。
  • Restart:定义服务在何种情况下应自动重启。always 表示服务无论何时终止,都应自动重启。
  • [Install] 部分描述了服务的安装设置。
  • WantedBy:定义服务应作为哪个目标的依赖项。multi-user.target 表示在多用户模式下启动此服务。

通过创建一个名为 tomcat.service 的文件并将上述内容放入文件中,您可以将 Tomcat 服务集成到 systemd 系统管理器中。将该文件放置在 /etc/systemd/system/ 目录下,然后运行 systemctl daemon-reloadsystemctl enable tomcat 命令,以便在系统启动时自动启动 Tomcat 服务。

  • 用最安全的方式在Centos上部署一个nginx,不要用root用户部署

ChatGPT:

  • 在 CentOS 上以非 root 用户部署和运行 Nginx 的步骤如下:
  1. 首先,创建一个新的非 root 用户和组,专门用于运行 Nginx 服务。在这个例子中,我们将创建一个名为 nginx 的用户和组:
sudo groupadd nginx
sudo useradd -r -M -g nginx -s /sbin/nologin -c "Nginx user" nginx
  1. 安装 Nginx:
sudo yum install epel-release
sudo yum install nginx
  1. 更改 Nginx 的文件和目录权限,使其由新创建的 nginx 用户和组拥有:
sudo chown -R nginx:nginx /usr/share/nginx
sudo chown -R nginx:nginx /var/lib/nginx
sudo chown -R nginx:nginx /var/log/nginx
  1. 更改 Nginx 配置文件 /etc/nginx/nginx.conf,使其使用新创建的 nginx 用户和组运行:
sudo sed -i 's/user  nginx;/user  nginx nginx;/' /etc/nginx/nginx.conf
  1. 更改 Nginx 的 systemd 服务单元文件 /usr/lib/systemd/system/nginx.service,以便它能够以非特权端口(大于 1024)运行。将 httphttps 更改为非特权端口,例如,80808443。同时,将 ExecStartPreExecStartPost 行注释掉,因为这些命令需要 root 权限:

编辑 /usr/lib/systemd/system/nginx.service 文件,将其更改为以下内容:

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1848617
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target
  1. 重新加载 systemd 配置并启动 Nginx:
sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl enable nginx
  1. 配置防火墙,允许新配置的端口(在本例中为 8080 和 8443):
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
sudo firewall-cmd --reload

现在,您已经以非 root 用户成功部署了 Nginx。请注意,由于我们将 Nginx 配置为在非特权端口上运行,因此您需要在访问时指定端口(例如,`http://your用最安全的方式在Centos上部署一个tomcat,不要用root用户部署,把命令和脚本的命令的参数写上详细解释

  1. 安装 Java:

Tomcat 需要 Java 环境才能运行。我们将使用 OpenJDK 8,您可以根据需要选择其他版本:

sudo yum install java-1.8.0-openjdk-devel
  1. 创建一个新的非 root 用户和组,专门用于运行 Tomcat 服务。在这个例子中,我们将创建一个名为 tomcat 的用户和组:
sudo groupadd tomcat
sudo useradd -r -m -U -d /opt/tomcat -s /bin/false -g tomcat tomcat

解释:

  • groupadd tomcat:创建一个名为 tomcat 的新组。
  • useradd:创建新用户。
  • -r:创建系统用户。
  • -m:创建用户主目录。
  • -U:创建与用户名相同的组。
  • -d /opt/tomcat:将用户主目录设置为 /opt/tomcat
  • -s /bin/false:将用户的登录 shell 设置为 /bin/false,禁止该用户登录。
  • -g tomcat:将用户添加到 tomcat 组。
  • tomcat:指定新用户的名称。
  1. 下载并解压 Tomcat:
cd /tmp
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.58/bin/apache-tomcat-9.0.58.tar.gz
sudo mkdir /opt/tomcat
sudo tar xf apache-tomcat-9.0.58.tar.gz -C /opt/tomcat --strip-components=1
  1. 更改 Tomcat 目录的所有权以及权限:
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 755 /opt/tomcat
  1. 创建 systemd 服务文件:
sudo vi /etc/systemd/system/tomcat.service

将以下内容粘贴到文件中:

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat
UMask=0007
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=always

[Install]
WantedBy=multi-user.target

解释:

  • [Unit]:描述服务的元数据和依赖关系。
  • Description:服务的描述。
  • After:定义服务启动的顺序。
  • [Service]:定义服务的启动和运行行为。
  • Type:服务的启动类型。
  • UserGroup:指定运行服务的用户和组。
  • UMask:设置文件和目录的默认权限。
  • ExecStart:指定启动服务时执行的命令。
  • ExecStop:指定停止服务时执行的命令。
  • Restart:指定何时自动重启服务。
  • [Install]:定义如何安装服务。
  • WantedBy:指定服务安装到哪个目标。
  1. 启动并启用 Tomcat 服务:
sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl enable tomcat

解释:

  • systemctl daemon-reload:重新加载 systemd 配置。
  • systemctl start tomcat:启动 Tomcat 服务。
  • systemctl enable tomcat:设置 Tomcat 服务在系统启动时自动启动。
  1. 配置防火墙,允许访问 Tomcat 的默认端口(8080):
sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

解释:

  • firewall-cmd --zone=public --permanent --add-port=8080/tcp:在公共区域永久添加 8080 端口的 TCP 访问。
  • firewall-cmd --reload:重新加载防火墙配置以应用更改。

现在,您已经以

  • 非 root 用户成功部署了 Tomcat。请注意,Tomcat 默认使用 8080 端口,您需要在访问时指定端口(例如,http://your.server.ip:8080)。

如果您需要修改 Tomcat 的配置,例如更改端口或其他设置,可以编辑 /opt/tomcat/conf/server.xml 文件。在进行更改后,请确保重新启动 Tomcat 服务以使更改生效:

sudo systemctl restart tomcat

这样,在 CentOS 上以非 root 用户安全地部署和运行 Tomcat 的过程就完成了。

  • 用最安全的方式在Centos上部署一个Nginx,不要用root用户部署,把命令和脚本的命令的参数写上详细解释

  • 在 CentOS 上以非 root 用户部署和运行 Nginx 的步骤如下:

  1. 安装 EPEL 仓库:

Nginx 软件包位于 EPEL(Extra Packages for Enterprise Linux)仓库中。首先,您需要安装 EPEL 仓库:

sudo yum install epel-release
  1. 安装 Nginx:
sudo yum install nginx
  1. 创建一个新的非 root 用户和组,专门用于运行 Nginx 服务。在这个例子中,我们将创建一个名为 nginx 的用户和组:
sudo groupadd nginx
sudo useradd -r -m -U -d /var/lib/nginx -s /bin/false -g nginx nginx

解释:

  • groupadd nginx:创建一个名为 nginx 的新组。
  • useradd:创建新用户。
  • -r:创建系统用户。
  • -m:创建用户主目录。
  • -U:创建与用户名相同的组。
  • -d /var/lib/nginx:将用户主目录设置为 /var/lib/nginx
  • -s /bin/false:将用户的登录 shell 设置为 /bin/false,禁止该用户登录。
  • -g nginx:将用户添加到 nginx 组。
  • nginx:指定新用户的名称。
  1. 更改 Nginx 目录的所有权以及权限:
sudo chown -R nginx:nginx /var/lib/nginx
sudo chown -R nginx:nginx /var/log/nginx
sudo chown -R nginx:nginx /etc/nginx
  1. 修改 Nginx 配置文件:

编辑 Nginx 主配置文件 /etc/nginx/nginx.conf,更改 user 指令:

sudo vi /etc/nginx/nginx.conf

将以下内容更改为:

user  nginx;
  1. 创建 systemd 服务文件覆盖文件:
sudo vi /etc/systemd/system/nginx.service.d/override.conf

将以下内容粘贴到文件中:

[Service]
User=nginx
Group=nginx

解释:

  • [Service]:定义服务的启动和运行行为。
  • UserGroup:指定运行服务的用户和组。
  1. 重新加载 systemd 配置,启动并启用 Nginx 服务:
sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl enable nginx

解释:

  • systemctl daemon-reload:重新加载 systemd 配置。
  • systemctl start nginx:启动 Nginx 服务。
  • systemctl enable nginx:设置 Nginx 服务在系统启动时自动启动。

现在,您已经以非 root 用户成功部署了 Nginx。请注意,Nginx 默认使用 80 端口,您可以在访问时使用您的服务器 IP 或域名(例如,http://your.server.iphttp://your.domain)。

如果您需要修改 Nginx 的配置,例如更改端口或其他设置,可以编辑 /etc/nginx/nginx.conf 或在 /etc/nginx/conf.d 目录中创建

  • 新的配置文件。在进行更改后,请确保重新启动 Nginx 服务以使更改生效:
sudo systemctl restart nginx
  1. 配置防火墙,允许访问 Nginx 的默认端口(80 和 443):
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
sudo firewall-cmd --reload

解释:

  • firewall-cmd --zone=public --permanent --add-service=http:在公共区域永久添加 HTTP 服务(端口 80)。
  • firewall-cmd --zone=public --permanent --add-service=https:在公共区域永久添加 HTTPS 服务(端口 443)。
  • firewall-cmd --reload:重新加载防火墙配置以应用更改。

至此,在 CentOS 上以非 root 用户安全地部署和运行 Nginx 的过程就完成了。在未来的配置和管理中,请确保使用刚刚创建的非 root 用户,以确保更高的安全性。

  • 创建 systemd 服务文件覆盖文件干什么

  • 创建 systemd 服务文件覆盖文件的目的是自定义或修改系统中已有的服务配置。这对于修改已有服务的行为,如设置运行服务的用户和组,而不直接更改原始服务文件是非常有用的。这种方法的一个好处是,覆盖文件不会在软件包升级过程中被覆盖,因此您的自定义配置可以保持不变。

在前面的 Nginx 示例中,我们创建了一个 systemd 服务覆盖文件 /etc/systemd/system/nginx.service.d/override.conf,用于指定运行 Nginx 服务的用户和组为我们创建的非 root 用户 nginx 和组 nginx。这样,Nginx 服务将在非 root 用户的权限下运行,从而提高了系统安全性。

这是一个覆盖文件的例子:

[Service]
User=nginx
Group=nginx

这个覆盖文件中的内容告诉 systemd,当启动和运行 Nginx 服务时,使用 nginx 用户和 nginx 组,而不是默认的 root 用户和组。覆盖文件的使用使得对服务的修改更加灵活和安全。

  • 文件名必须教这个吗

  • 不一定非得使用 “override.conf” 这个文件名。systemd 允许您为服务文件创建一个目录,名称与服务文件相同,但扩展名替换为 “.d”。例如,在本例中,我们为 Nginx 服务创建了一个目录 /etc/systemd/system/nginx.service.d。在该目录中,您可以创建多个以 “.conf” 结尾的覆盖文件。

您可以根据需要使用任何符合要求的文件名。这里选择 “override.conf” 只是一个常见的命名约定。您可以为文件使用其他名称,例如 “custom.conf” 或 “user-group.conf”。只要确保文件扩展名是 “.conf”,并放置在正确的服务目录下(如 /etc/systemd/system/service_name.service.d/),systemd 就会正确地读取并应用这些覆盖文件。

在创建多个覆盖文件的情况下,它们将按字母顺序应用。所以,如果您希望某个特定的覆盖文件在其他文件之后应用,可以使用适当的命名策略,例如在文件名前加上数字前缀(如 “10-custom.conf”,“20-another.conf” 等)。

  • 上面的tomcat怎么不创建这个文件

  • 在上面的 Tomcat 示例中,我们没有创建一个覆盖文件,而是直接编辑了 systemd 服务文件。这种方法在某些情况下也是可行的,但它有一些潜在的缺点。当您直接编辑服务文件时,这些文件可能会在软件包更新过程中被覆盖,导致您的自定义配置丢失。

在 Tomcat 示例中,我们创建了一个名为 tomcat.service 的 systemd 服务文件,并将其放置在 /etc/systemd/system/ 目录下。这是一个完整的服务文件,包含了运行 Tomcat 服务所需的所有信息。

要使用覆盖文件方法,您需要首先在 /etc/systemd/system/ 目录下创建一个与服务文件名称相对应的目录,如 /etc/systemd/system/tomcat.service.d/。然后,在该目录中创建一个或多个以 “.conf” 结尾的覆盖文件,例如 “override.conf”。在这些覆盖文件中,您可以添加或修改原始服务文件中的配置。

以下是一个将用户和组设置为 “tomcat” 的覆盖文件示例:

[Service]
User=tomcat
Group=tomcat

这种方法的优点是,您的自定义配置将不会在软件包更新过程中丢失。同时,您可以更容易地管理和跟踪服务的自定义配置。

总之,虽然在上述 Tomcat 示例中我们直接创建了一个服务文件,但使用覆盖文件方法通常更加安全和灵活。

  • 类似tomcat和nginx这种脚本文件,我们应该如何写,有教程吗

  • 要编写类似 Tomcat 和 Nginx 这样的 systemd 服务文件,您需要了解 systemd 服务文件的基本结构和语法。systemd 服务文件是由不同的单元组成的,如 [Unit]、[Service] 和 [Install]。这些单元包含配置信息,用于描述服务的行为。

以下是一些有关编写 systemd 服务文件的教程和参考资料:

  1. systemd 入门教程 :这篇文章为 systemd 初学者提供了一个很好的入门教程,详细介绍了如何创建和管理 systemd 服务文件:Understanding Systemd Units and Unit Files
  2. systemd 官方文档 :systemd 官方文档是学习 systemd 服务文件的最佳资源。您可以在这里找到有关服务文件的详细信息,以及如何编写它们:systemd System and Service Manager
  3. 实例教程 :您可以参考一些特定服务的 systemd 服务文件编写教程。这些教程通常会为您提供针对特定服务的示例配置和说明。例如:
  • How to create a systemd service unit file
  • How To Use Systemctl to Manage Systemd Services and Units
  • Creating and Modifying systemd Unit Files

通过学习这些教程和文档,您将掌握编写 systemd 服务文件的基本知识和技能。在编写服务文件时,请确保遵循最佳实践,如使用非 root 用户运行服务(如适用),确保服务在失败时自动重启,以及正确配置服务的依赖关系等。这将有助于确保您的服务可靠、安全地运行。

  • 你给我仔细讲讲了解 systemd 服务文件的基本结构和语法

  • systemd 服务文件是用来定义和配置系统服务的。它们通常位于 /etc/systemd/system/ 目录下(对于自定义服务)或 /lib/systemd/system/(对于预安装的服务)。服务文件使用 INI 文件格式,分为几个部分,称为 “sections”(单元),每个单元包含一组 “key-value”(键值)对。

以下是 systemd 服务文件的基本结构和语法:

  1. [Unit] 单元 :这个单元包含一般性的信息,如服务的描述、依赖关系等。一些常见的键值对包括:
  • Description:对服务的简短描述。
  • Documentation:指向文档资源的 URL,例如服务的手册页或在线文档。
  • AfterBefore:指定服务的启动顺序。例如,如果服务 A 需要在服务 B 启动之后启动,可以在服务 A 的 [Unit] 部分添加 After=B.service
  • RequiresWants:定义服务的依赖关系。Requires 表示服务强依赖于另一个服务,如果依赖的服务失败,本服务也会失败。Wants 表示服务的弱依赖,如果依赖的服务失败,本服务仍然会尝试启动。
  1. [Service] 单元 :这个单元包含有关如何启动和停止服务的详细信息。一些常见的键值对包括:
  • ExecStart:定义启动服务时要执行的命令。
  • ExecStop:定义停止服务时要执行的命令。
  • ExecReload:定义重新加载服务配置时要执行的命令。
  • Restart:指定在服务意外停止时是否应自动重启。例如,可以设置为 alwayson-failureno
  • UserGroup:指定运行服务的用户和组。为了提高安全性,建议使用非 root 用户运行服务(如果适用)。
  1. [Install] 单元 :这个单元定义了服务的安装目标。当您使用 systemctl enable 命令启用服务时,会创建指向服务文件的符号链接。一些常见的键值对包括:
  • WantedBy:指定服务应该被哪个目标启用。例如,设置为 multi-user.target 表示服务将在多用户模式下启动。

以下是一个简单的 systemd 服务文件示例:

[Unit]
Description=My Custom Service
After=network.target

[Service]
Type=simple
User=myuser
Group=mygroup
ExecStart=/usr/bin/my-custom-service
Restart=always

[Install]
WantedBy=multi-user.target

通过研究这个示例和查阅 systemd 官方文档,您将能够更好地理解和编写自己的服务文件。

  • Type啥意思

  • 在 systemd 服务文件的 [Service] 单元中,Type 键值定义了服务的启动类型,即进程如何启动和运行。Type 的值影响了 systemd 如何处理服务的启动、停止和重启。以下是一些常用的 Type 值:

  1. simple (默认值):systemd 认为该服务在 ExecStart 指定的命令行立即成功启动。这意味着,一旦命令行开始执行,服务就被认为是活动的。大多数服务都可以使用此类型,除非服务需要执行额外的初始化步骤。
  2. forking :此类型适用于传统的 Unix 守护进程,它们在启动时 “fork”(分叉)一个子进程并使父进程退出。在这种情况下,systemd 将等待父进程退出,然后认为服务已启动。通常,您需要在 [Service] 单元中设置 PIDFile 键值,以便 systemd 能够跟踪子进程的进程 ID。
  3. oneshot :此类型用于只运行一次的服务,例如初始化脚本或单次任务。systemd 将等待 ExecStart 指定的命令完成,然后认为服务已停止。如果服务需要在系统启动时执行一次性任务,此类型很有用。
  4. dbus :此类型用于依赖 D-Bus 的服务。systemd 将等待服务在 D-Bus 上获取名称后,才认为服务已启动。
  5. notify :此类型用于支持 systemd 通知 API 的服务。这意味着服务将在完成初始化后发送一个 “READY=1” 通知给 systemd,此时 systemd 认为服务已启动。这对于需要在启动过程中与 systemd 通信的服务很有用。
  6. idle :此类型类似于 “simple”,但在服务启动前,systemd 会等待其他任务完成。这可以避免服务在系统繁忙时启动,但通常不建议使用。

在选择服务类型时,请确保根据服务的需求和行为选择合适的类型。这将确保 systemd 能够正确地处理服务的启动、停止和重启。

  • forking是什么意思

  • forking 是一个在 Unix 类操作系统中常用的术语,它描述了进程创建子进程的过

上面的forking是什么意思

  • 在 systemd 服务文件中,forking 类型是指服务在启动时会创建一个子进程(即 “fork” 一个新的进程),而父进程会立即退出。这是许多传统的 Unix 守护进程的典型行为。

当使用 Type=forking 时,systemd 会在父进程退出后认为服务已启动。通常,您需要在 [Service] 单元中设置 PIDFile 键值,以便 systemd 能够跟踪子进程的进程 ID。

在这种情况下,服务首先作为一个父进程运行,然后创建一个子进程并将服务的实际工作转交给该子进程。父进程随后退出,子进程独立运行并执行实际的服务任务。这样做的一个原因是使服务与其启动环境分离,使其在后台独立运行。另一个原因可能是为了以特定的用户和组权限运行服务。

在编写适用于这种启动行为的服务的 systemd 服务文件时,请确保将 Type 设置为 forking。这将使 systemd 能够正确处理服务的启动、停止和重启。

  • Tomcat服务脚本type是forking,而ngoni是什么类型,为什么没有设置

  • 在 Nginx 的 systemd 服务文件中,Type 通常被设置为 Type=forking,因为 Nginx 也是使用类似传统 Unix 守护进程的方式启动的。当启动 Nginx 时,主进程会创建一个或多个子进程,并将实际的服务工作交给这些子进程。主进程随后继续运行,负责管理子进程。

然而,在某些情况下,可能会省略 Type 设置,这时 systemd 默认使用 Type=simple。在这种情况下,systemd 认为服务在 ExecStart 指定的命令行立即成功启动。对于 Nginx,这通常不会导致问题,因为 Nginx 进程在启动时非常快。

尽管如此,为了确保 systemd 能够正确处理 Nginx 服务的启动、停止和重启,最好还是在服务文件的 [Service] 单元中明确设置 Type=forking。这将使 systemd 更准确地了解服务的启动行为。

  • Tomcat为什么是Tomcat服务脚本type是forking

  • Tomcat 服务脚本的 Type 被设置为 forking,是因为 Tomcat 在启动时会创建一个子进程(即 “fork” 一个新的进程),而父进程会退出。这是许多传统的 Unix 守护进程的典型行为,Tomcat 也遵循了这种模式。

当使用 Type=forking 时,systemd 会在父进程退出后认为服务已启动。这允许 Tomcat 在后台运行,并且 systemd 可以准确地跟踪其状态。

设置 Type=forking 的主要原因是让 Tomcat 与其启动环境分离,使其在后台独立运行。这种方式有助于服务更好地管理资源、日志记录以及在出现问题时进行故障排查。

因此,在编写适用于 Tomcat 的 systemd 服务文件时,应确保将 Type 设置为 forking。这将使 systemd 能够正确处理服务的启动、停止和重启。

  • 上面的Nginx安装方式,把它都按在什么目录,详细说明目录

  • 在上面的 Nginx 安装方式中,我们使用了以下目录结构:

  1. /opt/nginx:这是 Nginx 的安装目录。这个目录将包含 Nginx 的所有文件和子目录。/opt 目录通常用于存放可选的应用程序和第三方软件。
  2. /opt/nginx/conf:这个目录包含 Nginx 的配置文件。主要的配置文件是 nginx.conf。在这个目录下,你还可以创建子目录来存放其他的配置文件,例如虚拟主机配置文件。
  3. /opt/nginx/logs:这个目录用于存放 Nginx 的日志文件。默认情况下,Nginx 会生成两个日志文件:access.log(访问日志)和 error.log(错误日志)。
  4. /opt/nginx/html:这个目录用于存放 Nginx 服务器上托管的静态网页文件。你可以在此目录下放置你的 HTML、CSS、JavaScript 等文件。
  5. /opt/nginx/sbin:这个目录包含 Nginx 可执行文件。你将在此目录下找到 nginx 可执行文件,用于启动、停止和重启 Nginx 服务。
  6. /etc/systemd/system:这个目录用于存放 systemd 服务文件。在此示例中,我们创建了一个名为 nginx.service 的服务文件,以便通过 systemctl 命令管理 Nginx 服务。

上述目录结构是根据我们在安装过程中设置的路径。你可以根据自己的需求调整这些目录。只要确保正确配置了 Nginx 配置文件和 systemd 服务文件中的路径,这些目录可以根据你的实际需求进行调整。

Person:

  • /etc/nginx,var/log/nginx,var/lib/nginx是什么目录

ChatGPT:

  • 这些目录通常在默认的 Nginx 安装中出现。它们的作用如下:
  1. /etc/nginx:这个目录用于存放 Nginx 的配置文件。主要的配置文件是 nginx.conf。通常,这个目录还包含子目录,例如 sites-availablesites-enabled,用于存放虚拟主机的配置文件。/etc/nginx 目录是在许多 Linux 发行版中 Nginx 配置文件的默认位置。
  2. /var/log/nginx:这个目录用于存放 Nginx 的日志文件。默认情况下,Nginx 会生成两个日志文件:access.log(访问日志)和 error.log(错误日志)。/var/log/nginx 目录是在许多 Linux 发行版中 Nginx 日志文件的默认位置。
  3. /var/lib/nginx:这个目录通常用于存放 Nginx 服务运行时所需的临时文件,例如缓存文件、临时文件和会话存储文件。这些文件可能对 Nginx 服务的正常运行至关重要,但它们通常不需要手动管理。

这些目录在许多 Linux 发行版中是 Nginx 的默认目录。你可以在安装和配置 Nginx 时选择使用这些目录,也可以选择使用自定义的目录结构。无论选择哪种方式,只要确保正确配置了 Nginx 配置文件和 systemd 服务文件中的路径即可。

  • 如何在linux上开放8088端口,详细解释每个命令的作用

  • 在 Linux 上开放 8088 端口,您需要配置防火墙允许传入的连接。以下是针对 iptablesfirewalld 的操作步骤。这两种工具是在不同的 Linux 发行版中常见的防火墙工具。请根据您的系统选择适当的步骤。

** 开放 8088 端口:**

  1. 添加规则以允许传入的连接:
sudo iptables -A INPUT -p tcp --dport 8088 -j ACCEPT

在这个命令中:

  • -A INPUT:将规则追加到 INPUT
  • -p tcp:指定协议为 TCP
  • --dport 8088:指定目标端口为 8088
  • -j ACCEPT:将匹配到的数据包设置为接受
  1. 保存修改的规则:
sudo iptables-save

这个命令会将当前 iptables 规则保存到默认的配置文件,通常是 /etc/sysconfig/iptables

  1. 重启 iptables 服务以应用新规则:
sudo systemctl restart iptables

** 开放 8088 端口:**

  1. 添加规则以允许传入的连接:
sudo firewall-cmd --zone=public --add-port=8088/tcp --permanent

在这个命令中:

  • --zone=public:指定操作应用于公共区域
  • --add-port=8088/tcp:添加 TCP 端口 8088 到允许的端口列表
  • --permanent:将规则设置为永久生效
  1. 重新加载 firewalld 以应用新规则:
sudo firewall-cmd --reload

完成这些步骤后,您的 Linux 系统将允许通过 8088 端口的传入连接。请确保您的应用程序或服务已经配置为在这个端口上监听。

  • selinux有什么用

  • SELinux(Security-Enhanced Linux)是一种用于 Linux 系统的强制访问控制(MAC)安全模块。它提供了一个安全框架,用于限制用户、进程和文件之间的交互。SELinux 的主要目的是提高系统安全性,以防止潜在的攻击者利用系统漏洞获取未经授权的访问。

SELinux 的主要功能和作用包括:

  1. 最小权限原则:SELinux 通过强制访问控制策略来实施最小权限原则。它为每个进程分配最小必要的权限,从而限制潜在攻击者的影响范围。
  2. 隔离和沙箱:SELinux 可以将应用程序和服务隔离到单独的安全上下文中,以限制它们访问其他进程和文件的能力。这有助于减少潜在攻击者利用漏洞从一个应用程序或服务获得对其他部分系统的访问权限的可能性。
  3. 审计和日志记录:SELinux 提供了一种记录所有访问控制决策的机制。这可以帮助系统管理员追踪潜在的安全问题,并在系统受到攻击时分析攻击路径。
  4. 灵活性:SELinux 提供了多种预定义的安全策略,可以根据系统的安全需求进行选择和配置。此外,系统管理员还可以创建自定义策略以满足特定的安全需求。

总之,SELinux 是一种提高 Linux 系统安全性的方法,它通过强制访问控制来限制进程和文件之间的交互,防止潜在攻击者利用漏洞获得未经授权的访问。虽然 SELinux 可能增加了一定的管理复杂性,但在许多情况下,它可以显著提高系统的安全性。

  • 开放端口的时候需要关闭selinux吗

  • 开放端口时,并不一定需要关闭 SELinux。实际上,关闭 SELinux 可能会降低系统的安全性。您可以在 SELinux 开启的情况下调整其策略,以允许某个特定端口的通信。

例如,假设您想要在 CentOS 或 RHEL 系统上开放端口 8080,同时保持 SELinux 处于启用状态,您可以执行以下操作:

  1. 使用 semanage 命令添加一个新的端口映射。这需要安装 policycoreutils-python-utils 包。安装该包后,运行以下命令,将端口 8080 添加到允许的端口列表中:
sudo semanage port -a -t http_port_t -p tcp 8080

这个命令告诉 SELinux 允许具有 http_port_t 类型的服务监听 TCP 端口 8080。

  1. 确保防火墙(如 firewalld 或 iptables)允许通过端口 8080 的通信。例如,如果您使用 firewalld,可以运行以下命令:
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

这将在防火墙中添加一个规则,允许 TCP 端口 8080 上的通信,并重新加载防火墙配置。

通过这种方式,您可以在 SELinux 保持启用的情况下,为特定服务开放端口,而无需关闭 SELinux。这样可以在保持系统安全性的同时,确保所需的端口可用。

  • Tomcat WebApp目录部署项目的时候,项目名和访问的时候需要注意什么?root目录是做什么的

  • 在 Tomcat 中部署 Web 应用程序时,需要注意以下几点:

  1. 项目名和访问路径:
    项目的名称将用作 Web 应用程序的上下文路径。例如,如果您的项目名为 myapp,则可以通过 http://<your-server-address>:<port>/myapp 访问该应用程序。因此,在为项目命名和部署时,请确保名称不包含空格或特殊字符,并尽量保持名称简短且具有描述性。
  2. WebApp 目录结构:
    在 Tomcat 中,Web 应用程序通常位于 webapps 目录下。这是 Tomcat 的默认应用程序部署目录。您需要将项目的 WAR 文件或解压后的文件夹放入该目录中。文件夹名称应与上下文路径相同。
  3. ROOT 目录:
    在 Tomcat 的 webapps 目录中,有一个特殊的目录称为 ROOT(通常为大写)。当用户访问 Tomcat 服务器的根 URL(例如 http://<your-server-address>:<port>/)时,服务器将提供 ROOT 目录中的 Web 应用程序。ROOT 目录是默认应用程序,用于在不指定任何特定上下文路径的情况下提供内容。

如果您希望将自己的应用程序设置为默认应用程序,可以采用以下方法之一:

  • 将您的应用程序的 WAR 文件或目录重命名为 ROOT(注意大写),然后替换原有的 ROOT 目录或文件。
  • 或者,您可以在 Tomcat 的 conf/server.xml 文件中更改默认应用程序。找到 <Host> 元素并添加 appBase 属性,将其设置为您的应用程序的路径。例如:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="/path/to/your/app" />
    ...
</Host>

注意,在此示例中,path 属性为空字符串,表示根 URL,而 docBase 属性指向您的应用程序的路径。

总之,在部署 Tomcat Web 应用程序时,需要注意项目名称和访问路径、WebApp 目录结构以及 ROOT 目录的用途。

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

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

相关文章

用Swagger(工具Knife4j )代替postman来进行构建、测试和调试 API

什么是Swagger&#xff1f; Swagger 是一个用于设计、构建和文档化 RESTful Web 服务的开源框架。它允许开发者设计 API&#xff0c;然后生成对应的 API 文档&#xff0c;提供给团队成员或者第三方开发者查阅。Swagger 的核心是 OpenAPI 规范&#xff08;之前称为 Swagger 规范…

来学习线程啦

线程的相关概念 程序 简单点说&#xff1a;程序就是我们写的代码&#xff1b;也可以理解为&#xff1a;为完成特定任务&#xff0c;用某种语言编写的一组指令的集合 进程 进程是指运行中的程序。 比如&#xff1a;我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系…

Centos 6.10 安装oracle10.2.0.1

由于阿里云机房要下架旧服务器&#xff0c;单位未购买整机迁移服务&#xff0c;且业务较老不兼容Oracle11g&#xff0c;所以新购买一台新服务器进行安装Oracle10.2.0.1 &#xff0c;后续再将数据迁移到新服务器上。 对外ip 内部ip 数据库版本 操作系统版本 实例名 源库 1…

【MATLAB】Enigma机加密原理与自实现

文章目录 什么是EnigmaEnigma机加密通信流程Enigma的物理构造Enigma的加密设置Enigma加密通信密码重新设置Enigma加密消息拼接注意 Enigma的解密分解设置Enigma解密通信密码重新设置Enigma解密消息 Enigma的弱点MATLAB自实现Enigma加密与解密Enigma_functionRotate_functiontes…

排序(一)----冒泡排序,插入排序

前言 今天讲一些简单的排序,冒泡排序和插入排序,但是这两个排序时间复杂度较大,只是起到一定的学习作用,只需要了解并会使用就行,本文章是以升序为例子来介绍的 一冒泡排序 思路 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的序列&#xff0c;每次比较相邻…

K8S内容

K8S介绍 1、故障迁移:当某一个node节点关机或挂掉后&#xff0c;node节点上的服务会自动转移到另一个node节点上&#xff0c;这个过程所有服务不中断。这是docker或普通云主机是不能做到的 2、资源调度:当node节点上的cpu、内存不够用的时候&#xff0c;可以扩充node节点&…

详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西

Cookie Cookie是一种小型的文本文件&#xff0c;由网站在用户访问时存储在其计算机或移动设备上&#xff0c;Cookie主要用于跟踪、识别和存储有关用户的信息。 简单来说Cookie就是用来存储某些后端发送给前端的数据&#xff0c;例如我们登陆后&#xff0c;后端会返回一个登录…

求正方形阴影部分面积

正方形边长6&#xff0c;求阴影部分面积 xy6① vw6② 1/26v1/23x1/263③ 1/26v1/26y1/266④ ③是左下角三角形的面积&#xff0c;④是左上角三角形的面积。 求解方程组得到x2 阴影部分面积1/2*3x3.

海豚调度器如何看工作流是在哪个worker节点执行

用海豚调度器&#xff0c;执行一个工作流时&#xff0c;有时成功&#xff0c;有时失败&#xff0c;怀疑跟worker节点环境配置不一样有关。要怎样看是在哪个worker节点执行&#xff0c;在 海豚调度器 Web UI 中&#xff0c;您可以查看任务实例&#xff0c;里面有一列显示host&a…

网络安全快速入门(九)MySQL进阶操作

上一章我们了解了对表及库的基本增删查改操作&#xff0c;本章我们针对增删查改内容进行与一些拓展&#xff0c; 9.1字段修饰及数据类型 我们之前在创建表时用到的格式为&#xff1a; create table 表名 ( 字段名1 字段数据类型&#xff08;数据类型长度&#xff09;, 字段名2 …

刷代码随想录有感(65):回溯算法——组合问题

题干&#xff1a; 代码&#xff1a; class Solution { public:vector<vector<int>> res;vector<int> tmp;void backtracking(int n, int k, int start){if(tmp.size() k){res.push_back(tmp);return;}for(int i start; i < n; i){tmp.push_back(i);bac…

[Algorithm][回溯][组合][目标和][组合总和]详细讲解

目录 1.组合1.题目链接2.算法原理详解3.代码实现 2.目标和1.题目链接2.算法原理详解3.代码实现 3.组合总和1.题目链接2.算法原理详解3.代码实现 1.组合 1.题目链接 组合 2.算法原理详解 思路&#xff1a;每次都只选一个数&#xff0c;此后只能选它后面的数函数设计&#xff…

全面提升数据采集效率:亮数据产品的应用与评估详解

全面提升数据采集效率&#xff1a;亮数据产品的应用与评估详解 文章目录 全面提升数据采集效率&#xff1a;亮数据产品的应用与评估详解背景应用场景&#xff1a;平台首页信息抓取准备评测素材详细的产品使用和评测流程产品介绍亮数据的IP代理服务亮数据的爬虫工具及采集技术 注…

elasticsearch使用Ngram实现任意位数手机号搜索

文章目录 Ngram自定义分词案例实战问题拆解 Ngram分词器定义Ngram分词定义Ngram分词示例Ngram分词应用场景 Ngram分词实战 Ngram自定义分词案例 当对keyword类型的字段进行高亮查询时&#xff0c;若值为123asd456&#xff0c;查询sd4&#xff0c;则高亮结果是&#xff1c;em&a…

项目管理-案例重点知识(整合管理)

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 一、整合管理 案例重点 重点内容&#xff1a; &#xff08;1&#xff09;项目章程内容和作用 &#xff08;2&#xff09;项目管理计划…

乡村振兴的农业科技创新:加大农业科技投入,推广农业科技成果,提升农业科技创新水平,推动美丽乡村农业现代化

一、引言 随着全球化和信息化时代的到来&#xff0c;农业作为国民经济的基础&#xff0c;其现代化进程日益受到关注。在乡村振兴战略的大背景下&#xff0c;农业科技创新成为推动乡村经济转型升级、实现农业现代化的关键力量。本文旨在探讨如何通过加大农业科技投入、推广农业…

【PB案例学习笔记】-02 目录浏览器

写在前面 这是PB案例学习笔记系列文章的第二篇&#xff0c;该系列文章适合具有一定PB基础的读者&#xff0c; 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上…

蓝桥杯单片机之模块代码《串口发数据》

过往历程 历程1&#xff1a;秒表 历程2&#xff1a;按键显示时钟 历程3&#xff1a;列矩阵按键显示时钟 历程4&#xff1a;行矩阵按键显示时钟 历程5&#xff1a;新DS1302 历程6&#xff1a;小数点精确后两位ds18b20 历程7&#xff1a;35定时器测量频率 历程8&#xff…

初识鸿蒙之ArkTS基础

前言 学习一种应用程序开发&#xff0c;需要从这种程序的开发语言开始&#xff0c;比如说Android开发从入门到放弃&#xff0c;肯定是从Java基础或者是Kotlin语言基础开始学习的&#xff0c;IOS程序开发也肯定是从object-c开始学习的。鸿蒙软件开发也不例外&#xff0c;如果做…

平衡三进制小数详解与进制转换

标准三进制是“逢三进一&#xff0c;退一还三”的机制&#xff0c;平衡三进制与之类似&#xff0c;但就是偏移了一下变得对称了&#xff0c;平衡三进制与标准三进制可以相互转换&#xff0c;但这样显得有点多余了&#xff0c;所以这里只讲平衡三进制与十进制的转换。 数字系统的…