項目部署——LAMP、LNMP和LTMJ

前情提要

問:如何通過nginx的反向代理,代理多臺虛擬主機(一臺apache服務器上的虛擬主機)?

1.在nginx的配置文件中,將基于域名的訪問改為基于端口的訪問(nginx.conf)

upstream daili{server www1.xxhf.com;    #默認80端口server www2.xxhf.com:90;    #改為90端口server 192.168.77.79;}server {location / {proxy_pass http://daili;}}

2.在nginx服務器的hosts文件中配置域名解析(/etc/hosts)

192.168.77.78 www1.xxhf.com
192.168.77.78 www2.xxhf.com

3.修改apache主配置文件,監聽90端口

Listen 80
Listen 90

4.如果用rpm包安裝apache服務,則沒有子配置文件,需要到/usr/share/doc/httpd-core/httpd-vhost.conf中復制模版到/etc/httpd/conf.d目錄下

總結:反向代理的upstream可通過dns解析域名獲得ip,但因為解析時機要比調用時機更早,因為真正調用時只能獲取到相同的apache服務器ip,按順序找到第一臺虛擬主機。

一、靜態和動態資源

靜態資源 ? .html ?.htm

  • 使用靜態網頁開發技術發布的資源
  • 如:文本、音視頻、HTML、CSS、JS等
  • 標記語言、直接映射

動態資源? .php .java

  • 使用動態網頁開發技術發布的資源
  • 如:jsp/servlet、php等
  • 編程語言、有邏輯

1.服務器處理html文件

  • web服務器去網頁根目錄找到index.html文件,隨后將內容返回給瀏覽器去解析

2.服務器處理php文件

  • web服務器將動態的php頁面轉成靜態,即輸出代碼運行結果,將結果返回給瀏覽器

3.LAMP關系

  • LAMP:Linux + Apache + MySQL + PHP
  • Linux:系統,提供環境支持
  • Apache:網站服務,部署網站、處理網頁請求?
  • MySQL:數據庫,網站數據的持久化存儲
  • PHP:編程語言,網站動態資源的解析

4.A與P的關聯方法

  • mod_php:修改apache配置文件,使其識別*.php文件,進而加載php模塊解析動態頁面
  • php_fpm:啟動php-fpm進程,交給代理fastcgi,將http服務器和腳本解析器分離;當http服務器每次遇到動態請求時,直接交付給fastcgi進程去執行,然后把結果返回給瀏覽器

注:apache和php使用rpm包安裝,會自動配置關聯——php_fpm進程

二、Apache+PHP組合

服務器:77.79

1.rpm包安裝httpd和php

[root@localhost ~]# dnf -y install httpd
[root@localhost ~]# dnf -y install php

2.自動配置關聯

3.直接部署頁面,瀏覽器訪問

[root@localhost ~]# vi /var/www/html/test.php
<?phpecho "hello world";
?>

三、Nginx+PHP組合

服務器:77.77

1.rpm包安裝nginx和php

[root@localhost ~]# dnf -y install php nginx

2.修改php配置文件參數

注:nginx無法處理php腳本,需要安裝php解釋器調用腳本,但直接安裝的php解釋器默認用戶是apache服務,需要改成nginx

[root@localhost ~]# vi /etc/php-fpm.d/www.confuser = nginx
group = nginx

3.啟動php-fpm進程,重載服務

systemctl start php-fpm
vi /usr/share/nginx/html/test.php
<?phpecho "hello world";
?>
/sbin/nginx -s reload

4.采用其他方式載入動態資源

注:關閉77.77的php進程,通過反向代理,將動態請求移交給后端已經配置好php解釋器的apache(77.79)服務器去處理

(1)修改nginx.conf配置文件,同時修改apache服務頁面,以免混淆

[root@localhost ~]# systemctl stop php-fpm    #關閉php進程
[root@localhost ~]# vi /etc/nginx/nginx.conflocation ~ \.php {proxy_pass 192.168.77.79;    #將php文件請求移交給apache服務}

注:雖然關閉了php進程,但依舊有兩個文件影響了反向代理的跳轉,需要手動刪掉

rm -rf /etc/nginx/conf.d/php.conf
rm -rf /etc/nginx/default.d/php.conf

(2)重啟nginx,測試

????????????????????四、PHP調用MySql

注:php調用mysql的中間工具——php-mysqli、php-pdo

1.安裝mariadb數據庫

[root@localhost ~]# dnf -y install mariadb mariadb-server php-mysqli php-pdo

2.啟動數據庫,端口號3306

#開啟服務
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# ss -anpt | grep :3306
LISTEN 0      80                 *:3306            *:*    users:(("mariadbd",pid=3089,fd=17))                                                                    #執行mysql
[root@localhost ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.22-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.#創建用戶
MariaDB [(none)]> create user lisi @'%'identified by'123';
Query OK, 0 rows affected (0.002 sec)
#授權
MariaDB [(none)]> grant all on *.* to lisi@'%';
Query OK, 0 rows affected (0.001 sec)
#退出
MariaDB [(none)]> exit
Bye
#客戶端連接mysql服務器
[root@localhost ~]# mysql -h192.168.77.79 -p3306 -ulisi -p123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.5.22-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#創建一個庫
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.001 sec)
#查看mysql有哪些數據庫
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| db1                |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

3.部署wordpress項目

注:LAMP環境已經搭建好,wordpress項目也是通過php編寫的項目,可以直接導入web服務網頁根目錄(77.79),添加權限后啟動

[root@localhost html]# pwd
/var/www/html
[root@localhost html]# ll
total 12
-rw-r--r-- 1 root   root     20 Sep 15 16:30 index.html
-rw-r--r-- 1 root   root     60 Sep 15 21:50 test.php
drwxr-xr-x 5 apache apache 4096 Sep 16 09:08 wordpress
[root@localhost html]# 

也可以使用nginx(77.77)反向代理去訪問apache服務器(77.79)的wordpress項目,只需在nginx.conf配置文件中設置即可

        location /wordpress {proxy_pass http://192.168.77.79;}

五、Tomcat+java組合

服務器:77.77(恢復快照后的純凈版)

補充知識:

  • tomcat是web應用服務器,可以處理http請求和只處理動態java代碼

注:因為tomcat是有java代碼編寫,因此安裝tomcat前需要先安裝java環境

1.源碼包安裝

在網頁端下載jdk——java開發工具包,將其導入linux并解壓

[root@localhost ltmj-r9]# ls
apache-tomcat-9.0.48.tar.gz  jdk-11.0.11_linux-x64_bin.tar.gz  mariadb-10.6.17.tar.gz  mypress.war  mysql-connector-java-5.1.24.jar
[root@localhost ltmj-r9]# tar -zxf jdk-11.0.11_linux-x64_bin.tar.gz 
[root@localhost ltmj-r9]# ls
apache-tomcat-9.0.48.tar.gz  jdk-11.0.11_linux-x64_bin.tar.gz  mypress.war
jdk-11.0.11                  mariadb-10.6.17.tar.gz            mysql-connector-java-5.1.24.jar
[root@localhost ltmj-r9]# cp -a jdk-11.0.11 /usr/local/jdk11
#安裝jdk指定版本、覆蓋系統默認安裝的

2.配置環境變量

注:默認安裝的jdk在/usr/bin下

vi /etc/profile
export JAVA_HOME=/usr/local/jdk11
PATH=$PATH:$JAVA_HOME/bin
#這里之所以分出JAVA_HOME是因為有的java項目會去找這個變量
[root@localhost ltmj-r9]# source /etc/profile    #讓配置文件生效

3.測試環境,查看版本

#配置好環境變量之后,才能使用java命令
[root@localhost ~]# java -version
java version "11.0.11" 2021-04-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)
#說明jkd環境已經安裝完畢

4.創建java文件,測試效果

vim HelloWorld.javapublic class HelloWorld{
public static void main(String[] args) {
System.out.println("hello world~");
}
}

效果

#編譯,生成.class文件
[root@localhost ~]# javac HelloWorld.java 
[root@localhost ~]# ls
anaconda-ks.cfg  cat.sh  HelloWorld.class  HelloWorld.java  ltmj-r9  ltmj-r9.tar.gz
#執行
[root@localhost ~]# java HelloWorld
hello world~

5.源碼包安裝Tomcat

[root@localhost ltmj-r9]# tar -zxf apache-tomcat-9.0.48.tar.gz 
[root@localhost ltmj-r9]# ls
apache-tomcat-9.0.48         jdk-11.0.11                       mariadb-10.6.17.tar.gz  mysql-connector-java-5.1.24.jar
apache-tomcat-9.0.48.tar.gz  jdk-11.0.11_linux-x64_bin.tar.gz  mypress.war
[root@localhost ltmj-r9]# cp -a apache-tomcat-9.0.48 /usr/local/tomcat9

啟動服務

/usr/local/tomcat9/bin/catalina.sh start
/usr/local/tomcat9/bin/catalina.sh stop
或:
/usr/local/tomcat9/bin/startup.sh
/usr/local/tomcat9/bin/shutdown.sh

6.測試Tomcat服務器

基本參數

  • 默認端口:8080
  • 配置文件:安裝目錄/conf/server.xml
  • 網頁根目錄:安裝目錄/webapps
  • 默認網頁文件:安裝目錄/webapps/ROOT/index.jsp
  • 日志文件:安裝目錄/logs
[root@localhost ~]# /usr/local/tomcat9/bin/catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat9
Using CATALINA_HOME:   /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME:        /usr/local/jdk11
Using CLASSPATH:       /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
[root@localhost ~]# ss -anpt | grep :8080
LISTEN 0      100                     *:8080            *:*    users:(("java",pid=1844,fd=43))     

訪問頁面:

http://ServerIP:8080

六、Tomcat部署項目(LTMJ)

rpm包安裝(77.78)——純凈版

1.安裝tomcat和數據庫mariadb

[root@localhost ~]# dnf -y install tomcat mariadb mariadb-server[root@localhost ~]# systemctl start tomcat
[root@localhost ~]# ss -anpt | grep :8080
LISTEN 0      100                     *:8080            *:*     users:(("java",pid=14256,fd=46)) 

補充知識:

  • rpm包參數
  • 端口:8080
  • 配置文件:/usr/share/tomcat/conf/server.xml
  • 日志:/usr/share/tomcat/logs
  • 網頁根目錄:/usr/share/tomcat/webapps
  • 依賴庫:/usr/share/tomcat/lib
  • 默認網頁文件/usr/share/tomcat/webapps/ROOT/index.jsp

2.啟動數據庫,創建用戶

[root@localhost conf]# systemctl start mariadb
[root@localhost conf]# mysqlWelcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.22-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>  create user lisi @'%'identified by'123';
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]> grant all on *.* to lisi@'%';
Query OK, 0 rows affected (0.002 sec)MariaDB [(none)]> create database xiangmu;
Query OK, 1 row affected (0.001 sec)MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| xiangmu            |
+--------------------+
4 rows in set (0.001 sec)

3.創建默認網頁文件

注:當前網頁根目錄下沒有頁面,需要手動創建ROOT目錄和index.jsp網頁文件

[root@localhost webapps]# mkdir ROOT
[root@localhost webapps]# echo "hello world" >> ROOT/index.jsp

4.部署一個mypress項目

注:該mypress項目已經做好,只需要下載包到webapps目錄下即可自動解包和部署

[root@localhost webapps]# ls
mypress  mypress.war  ROOT

直接訪問頁面:192.168.77.78:8080/mypress

但是輸入數據后登錄卻發現請求失敗,是因為缺少了一個依賴,導致java無法連接數據庫

下載依賴到lib庫當中,這里我將包放在了77.77服務器上,可以直接拿過來

[root@localhost webapps]# cd ..
[root@localhost tomcat]# cd lib/
[root@localhost lib]# scp 192.168.77.77:/root/ltmj-r9/mysql-connector-java-5.1.24.jar .

再次重啟tomcat,點擊提交,就可以正常跳轉登錄界面

5.通過nginx代理訪問服務

(1)使用rmp包安裝nginx(77.79)

[root@localhost ~]# dnf -y install nginx

(2)修改配置文件,添加代理

        location /mypress {proxy_pass http://192.168.77.78:8080;} 

(3)重啟服務,通過網頁登錄測試:192.168.77.79/mypress

七、相關配置修改

1.Tomcat源碼包修改端口

(1)直接修改server.xml配置文件

    <Connector port="80" protocol="HTTP/1.1"

(2)重啟tomcat服務,測試

[root@localhost tomcat9]# ./bin/catalina.sh stop
[root@localhost tomcat9]# ./bin/catalina.sh start

2.Tomcat-RPM包修改端口

注:rpm修改端口時,無法將端口修改至1024以下,因為啟動進程的用戶是普通用戶tomcat,需要修改成root用戶才可以正常修改至80端口

(1)查看當前進程,發先用戶是tomcat

(2)修改配置文件,重啟進程,再查看進程

#注釋掉服務中的tomcat用戶
[root@localhost ~]# vi /usr/lib/systemd/system/tomcat.service 
#User=tomcat[root@localhost ~]# systemctl restart tomcat

(3)修改端口號為80,重啟服務測試(這里的頁面是我自己添加的默認網頁文件)

[root@localhost tomcat]# vi conf/server.xml 

3.使用域名訪問Tomcat

(1)修改配置文件server.conf

      <Host name="tomcat.xxhf.com"  appBase="webapps"unpackWARs="true" autoDeploy="true">

(2)添加到主機的hosts文件當中

(3)瀏覽器訪問

但很快就發現,使用ip無法正常訪問

(4)再次修改配置文件

<Engine name="Catalina" defaultHost="tomcat.xxhf.com">

(5)瀏覽器測試

注:這次域名和ip都可以正常訪問

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/97877.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/97877.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/97877.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

晨曦中,它已勞作:一臺有溫度的機器人如何重塑我們的潔凈日常

清晨六點&#xff0c;城市的輪廓在微光中逐漸清晰。某高端小區的路面上&#xff0c;一臺灰色機身、線條流暢的機器正在安靜地工作。它繞過停靠的車輛&#xff0c;精準地沿著路緣石前進&#xff0c;吸走落葉與塵土&#xff0c;遇到突然竄出的流浪貓時輕巧避讓&#xff0c;仿佛有…

【最新高級版】酷柚易汛生產管理系統v1.2.8 +uniapp全開源+文檔教程

酷柚易汛生產管理系統是基于FastAdminThinkPHPLayuiuniapp開發的生產管理系統&#xff0c;幫助企業數字化轉型&#xff0c;打造智能工廠&#xff0c;專業為生產企業量身開發的一套完整的生產管理系統。主要包含以下模塊&#xff1a;購貨模塊、生產模塊、倉庫模塊、資料模塊&…

40分鐘的Docker實戰攻略

一&#xff1a;什么是Docker &#xff08;1&#xff09;基本概念 Docker 是一種開源的 容器化平臺&#xff0c;用于快速構建、部署和運行應用程序。它通過將應用程序及其依賴項打包到輕量級的、可移植的容器中&#xff0c;實現了環境一致性&#xff0c;解決了“在我機器上能運…

qt使用camke時,采用vcpkg工具鏈設置OSG的qt模塊osgQOpenGLWidget

【免費】osgQOpenGLWidget嵌入qt模塊,VS2022使用cmake的方式,工具鏈vcpkg資源-CSDN下載 CMake中設置 1.查找osg相關的庫,同時也會設置對應include的路徑 # 檢查是否找到 osg find_package(OpenSceneGraph 3.6.5REQUIRED COMPONENTS osgosgUtilosgGAosgViewerosgDBosgAnimatio…

洛谷 P2245 星際導航(kruskal 重構樹 + 倍增優化求路徑最大邊權)

題目鏈接 題目難度 洛谷上是藍題&#xff0c;我覺得這道題挺簡單的&#xff0c;一眼就看穿了&#xff0c;應該是綠題。 題目解法概括 kruskal 重構樹 倍增優化求路徑最大邊權。 代碼 #include <iostream> #include <vector> #include <algorithm> #in…

STM32H743-ARM例程1-IDE環境搭建與調試下載

目錄實驗平臺環境搭建一、Keil MDK集成開發環境1.MDK簡介2.MDK5安裝3.程序下載與調試二、STM32CubeMX1.STM32CubeMX簡介2.JAVA JRE安裝3.STM32CubeMX安裝4.STM32CubeH7庫安裝實驗平臺 硬件&#xff1a;銀杏科技GT7000雙核心開發板-ARM-STM32H743XIH6&#xff0c;銀杏科技iTool…

FPGA學習篇——Verilog學習MUX的實現

PS&#xff1a;目前手上仍然沒有板子&#xff0c;按照野火視頻的講解&#xff0c;目前我們只能做到前面六步&#xff08;其實第一步設計規劃也是需要看板子的硬件的&#xff0c;但是現在沒有板子就完全與野火傳授的板子一致來看&#xff09; 首先我們以最簡單的2路選擇器MUX2_1…

OpenStack 學習筆記

OpenStack 1. 什么是 OpenStack 1.1 OpenStack 發展史 2006 年亞馬遜推出 AWS&#xff0c;正式開啟云計算的新紀元 2010 年 7 月美國國家航空航天局&#xff08;NASA&#xff09;與 Rackspace 合作&#xff0c;共同宣布 OpenStack 開放源碼計劃&#xff0c;由此開啟了屬于 Open…

mysql小數取整

1 向下取整 SELECT FLOOR(123.456); -- 結果: 1232 向上取整 SELECT CEIL(123.001); -- 結果: 1243 四舍五入 SELECT ROUND(123.456); -- 結果: 123 SELECT ROUND(123.556); -- 結果: 1244 截斷&#xff08;不四舍五入&#xff0c;直接截斷小數位&#xff09; SELECT …

Day43 PHP(mysql不同注入類型、mysql不同注入點、mysql傳輸不同數據類型 )

一、不同注入類型實際&#xff1a;我們未知sql是哪種類型&#xff0c;只能靠試/使用sql工具原理&#xff1a;閉合程序員寫的sql語句&#xff0c;并且執行我們所需要的sql語句&#xff0c;最后將閉合后多余的 用-- 或者#注釋掉。 總結一下就是先閉合&#xff0c;后注釋。共四種…

Linux應用開發(君正T23):三網智能切換及配網功能

前段時間接手了一個監控項目&#xff0c;其中甲方對于設備的要求有一條就是實現網口eth、WiFi、4G三種手段的聯網方式并且當某一個網絡不好的時候就去切換到下一個能用的網絡&#xff0c;讓監控設備持續不斷的有網絡&#xff0c;保證監控數據的上傳。這個部分的功能就交由我來實…

IvorySQL 4.6:DocumentDB+FerretDB 實現 MongoDB 兼容部署指南

背景 MongoDB 誕生之初&#xff0c;便以出色的易用性與詳盡的驅動程序文檔脫穎而出&#xff0c;堪稱對傳統關系型數據庫的一次重要革新&#xff0c;也正因如此&#xff0c;它迅速成為開發者社區的熱門之選。 然而&#xff0c;隨著其許可模式從開源轉向 SSPL 許可證&#xff0…

論文閱讀:arixv 2025 One Token to Fool LLM-as-a-Judge

總目錄 大模型相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2507.08794 https://www.doubao.com/chat/20698287584991234 速覽 這篇文檔主要講了一個關于“大語言模型當裁判”的重要發現——很多我們以為靠譜的AI裁…

webrtc弱網-AlrDetector類源碼分析與算法原理

AlrDetector&#xff08;應用受限區域檢測器&#xff09;是WebRTC中用于檢測發送端是否處于應用層限速狀態的核心組件。它通過維護一個基于時間間隔的預算系統&#xff0c;監控實際發送數據量與網絡容量之間的關系。當發送速率持續低于網絡容量的設定比例&#xff08;如65%&…

ABP + Verify(快照) 驅動的 PDF/Excel 導出回歸

ABP + Verify(快照) 驅動的 PDF/Excel 導出回歸 ?? ?? 目錄 ABP + Verify(快照) 驅動的 PDF/Excel 導出回歸 ?? 0) TL;DR ? 1) 背景與目標 ?? 2) 架構與職責(解耦渲染器) ?? 3) “確定性”前置條件(去偽差異) ?? 4) PDF 回歸策略(以 QuestPDF 為例) ?? 4.…

SIFT特征匹配實戰:KNN算法實現指紋認證

這個利用了前面學到的SIFT特征檢測來實現的&#xff0c;然后這里主要就是引入了一個新的匹配器。這里匹配是用KNN算法進行匹配的。下面來看下細節。介紹函數由于要頻繁展示&#xff0c;所以這里定義了一個函數。def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)導入…

網絡安全滲透測試第一步信息收集

信息收集是滲透測試中最基礎且關鍵的一步&#xff0c;它直接影響后續漏洞發現和利用的成功率。本文將系統介紹信息收集的常用方法、工具和技巧&#xff0c;幫助你在實戰中高效定位目標弱點。 一、搜索引擎利用 1. Google Hacking 通過Google搜索語法快速定位敏感信息、后臺地…

C++——類和對象1

1.類的定義1.1 類定義格式class為定義類的關鍵字&#xff0c;Stack為類的名字&#xff0c;{ }中的內容是類的主題為了&#xff0c;注意類定義結束時后面的分號不能省略。類體中的內容稱為類的成員&#xff1a;類中的變量稱為類的屬性或成員變量&#xff1b;類中的函數稱為類的方…

動手學Agent:Agent設計模式——構建有效Agent的7種模型

Agent本身的定義也不是絕對的&#xff0c;從LLM到最高等級的Agent&#xff0c;中間是有大量灰度地帶的&#xff0c;在Anthropic看來&#xff0c;Agent可以以多種方式定義&#xff0c;有些人將完全自主系統定義為Agent&#xff0c;而另一些團隊則將預定義的工作流程定義為Agent。…

Windows 下 .venv 激活腳本深度定制:同時注入 PyTorch 調試日志與國內網絡加速通道——從“能跑”到“好調”的完整工程化方案

Windows 下 .venv 激活腳本深度定制&#xff1a;同時注入 PyTorch 調試日志與國內網絡加速通道 ——從“能跑”到“好調”的完整工程化方案 一、為什么非得改激活腳本&#xff1f; 重復勞動最耗時 每次打開終端都要敲四五行 set/export&#xff0c;人腦就是不可靠的剪貼板。 環…