Linux系统之ip命令的基本使用
Linux系统之ip命令的基本使用
- 一、ip命令介绍
- 1.1 ip命令简介
- 1.2 ip命令的由来
- 1.3 ip命令的安装包
 
- 二、ip命令使用帮助
- 2.1 ip命令的help帮助信息
- 2.2 ip命令使用帮助
 
- 三、查看网络信息
- 3.1 显示当前网络接口信息
- 3.2 显示网络设备运行状态
- 3.3 显示详细设备信息
- 3.4 查看路由表
- 3.5 查看ARP缓存
- 3.6 获取主机所有网络接口
- 3.7 提取本地IP地址
 
- 四、设置网卡IP地址
- 4.1 启用或停止网卡
- 4.2 设置默认网关
- 4.3 新增网卡地址
- 4.4 删除新增网卡的IP地址
- 4.5 删除默认网关
 
- 五、管理路由表
- 5.1 新增路由表
- 5.2 删除路由表条目
- 5.3 永久设置静态路由方法
 
- 六、ip命令总结

一、ip命令介绍
1.1 ip命令简介
IP命令是一个非常强大的命令行工具,用于管理与配置网络接口和路由表。
1.2 ip命令的由来
IP命令的由来可以追溯到Unix操作系统,IP命令是一个网络工具,用于配置和管理网络接口和路由表。它是从早期的Unix系统中的ifconfig命令发展而来的。ifconfig命令可以用于配置和管理网络接口,但是它的功能有限,不能管理路由表,因此IP命令应运而生。随着网络技术的不断发展,IP命令也不断进行更新和扩展,成为了一个功能强大的网络工具。现在,在许多Linux和Unix系统中,IP命令已经取代了ifconfig命令,成为管理网络接口和路由表的主要工具。
1.3 ip命令的安装包
ip 命令来自 iproute2 软件包,在 CentOS 7 中默认已安装(yum install -y iproute)。
[root@jeven ~]# rpm -ql iproute |grep bin
/usr/sbin/arpd
/usr/sbin/bridge
/usr/sbin/cbq
/usr/sbin/ctstat
/usr/sbin/devlink
/usr/sbin/genl
/usr/sbin/ifcfg
/usr/sbin/ifstat
/usr/sbin/ip
/usr/sbin/lnstat
/usr/sbin/nstat
/usr/sbin/routef
/usr/sbin/routel
/usr/sbin/rtacct
/usr/sbin/rtmon
/usr/sbin/rtpr
/usr/sbin/rtstat
/usr/sbin/ss
/usr/sbin/tc
二、ip命令使用帮助
2.1 ip命令的help帮助信息
[root@jeven ~]# ip --help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |vrf }OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |-h[uman-readable] | -iec |-f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |-4 | -6 | -I | -D | -B | -0 |-l[oops] { maximum-addr-flush-attempts } | -br[ief] |-o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |-rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}
2.2 ip命令使用帮助
- ip命令语法
ip(选项)(对象)
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }ip [ -force ] -batch filename
- ip命令对象介绍
OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |netns | l2tp | macsec | tcp_metrics | token }-V:显示指令版本信息;
-s:输出更详细的信息;
-f:强制使用指定的协议族;
-4:指定使用的网络层协议是IPv4协议;
-6:指定使用的网络层协议是IPv6协议;
-0:输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:显示主机时,不使用IP地址,而使用主机的域名。
- ip命令选项介绍
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |-h[uman-readable] | -iec |-f[amily] { inet | inet6 | ipx | dnet | bridge | link } |-4 | -6 | -I | -D | -B | -0 |-l[oops] { maximum-addr-flush-attempts } |-o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |-rc[vbuf] [size] | -n[etns] name | -a[ll] }网络对象:指定要管理的网络对象;
具体操作:对指定的网络对象完成具体操作;
help:显示网络对象支持的操作命令的帮助信息。
三、查看网络信息
3.1 显示当前网络接口信息
显示当前网络接口信息
[root@master ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 3e:85:b4:65:29:5a brd ff:ff:ff:ff:ff:ffinet 192.168.3.141/24 brd 192.168.3.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fd58:bc95:d4fb::6bd/128 scope global noprefixroute dynamicvalid_lft 41513sec preferred_lft 41513secinet6 fd58:bc95:d4fb:0:639d:3714:f9ef:bcf9/64 scope global noprefixroutevalid_lft forever preferred_lft foreverinet6 fe80::8c51:e8b9:1007:68ae/64 scope link noprefixroutevalid_lft forever preferred_lft forever
3.2 显示网络设备运行状态
使用以下命令,显示网络设备运行状态。
[root@master ~]# ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000link/ether 3e:85:b4:65:29:5a brd ff:ff:ff:ff:ff:ff
3.3 显示详细设备信息
使用以下命令,显示网卡的详细信息。
[root@master ~]#  ip -s link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00RX: bytes  packets  errors  dropped overrun mcast592        8        0       0       0       0TX: bytes  packets  errors  dropped carrier collsns592        8        0       0       0       0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000link/ether 3e:85:b4:65:29:5a brd ff:ff:ff:ff:ff:ffRX: bytes  packets  errors  dropped overrun mcast129963605  1427572  0       19748   0       0TX: bytes  packets  errors  dropped carrier collsns78253987   319575   0       0       0       0
3.4 查看路由表
- 显示核心路由表
[root@master ~]# ip route list
default via 192.168.3.254 dev eth0 proto static metric 100
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.141 metric 100
- 查看当前路由表信息
[root@master ~]# ip route show
default via 192.168.3.254 dev eth0 proto static metric 100
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.141 metric 100
3.5 查看ARP缓存
查看ARP缓存
[root@master ~]# ip neighbour show
192.168.3.190 dev eth0 lladdr d2:a0:fc:9d:f1:db STALE
192.168.3.174 dev eth0 lladdr 9a:1f:bc:b6:cf:20 STALE
192.168.3.168 dev eth0 lladdr 50:2b:73:dc:5d:d5 REACHABLE
192.168.3.143 dev eth0 lladdr d6:6c:02:9b:8e:a3 REACHABLE
192.168.3.238 dev eth0 lladdr 8c:7a:3d:64:ea:50 STALE
192.168.3.254 dev eth0 lladdr 7c:10:c9:db:21:58 REACHABLE
192.168.3.142 dev eth0 lladdr ae:5a:c7:0c:8c:1a REACHABLE
fe80::981f:bcff:feb6:cf20 dev eth0 lladdr 9a:1f:bc:b6:cf:20 STALE
fe80::a067:28ff:feff:a86f dev eth0 lladdr a2:67:28:ff:a8:6f router STALE[root@master ~]# ip neighbour list
192.168.3.190 dev eth0 lladdr d2:a0:fc:9d:f1:db STALE
192.168.3.174 dev eth0 lladdr 9a:1f:bc:b6:cf:20 STALE
192.168.3.168 dev eth0 lladdr 50:2b:73:dc:5d:d5 REACHABLE
192.168.3.143 dev eth0 lladdr d6:6c:02:9b:8e:a3 REACHABLE
192.168.3.238 dev eth0 lladdr 8c:7a:3d:64:ea:50 STALE
192.168.3.254 dev eth0 lladdr 7c:10:c9:db:21:58 STALE
192.168.3.142 dev eth0 lladdr ae:5a:c7:0c:8c:1a REACHABLE
fe80::981f:bcff:feb6:cf20 dev eth0 lladdr 9a:1f:bc:b6:cf:20 STALE
fe80::a067:28ff:feff:a86f dev eth0 lladdr a2:67:28:ff:a8:6f router STALE
3.6 获取主机所有网络接口
使用以下命令,获取主机所有网络接口。
[root@master ~]# ip link | grep -E '^[0-9]' | awk -F: '{print $2}'loeth0
3.7 提取本地IP地址
使用ip命令,提取本地网卡IP地址。
[root@master ~]# ip addr show | grep 'inet ' | awk '{print $2}' | awk -F/ '{print $1}'
127.0.0.1
192.168.3.141
四、设置网卡IP地址
4.1 启用或停止网卡
使用以下命令,启用或停止网卡。
ip link set <interface> up/down
4.2 设置默认网关
使用以下命令设置默认网卡地址,<gateway_ip>为网关地址,为网络接口。
ip route add default via <gateway_ip> dev <interface>
4.3 新增网卡地址
使用以下命令,给eth0网卡,新增ip地址。
 ip addr add 192.168.1.100/24 dev eth0
查看新增的IP地址,注意新增的IP地址是临时生效,要长久生效,修改网卡配置文件或者使用nmcli命令。
ip add show

4.4 删除新增网卡的IP地址
使用以下命令,删除新增网卡IP地址。
ip addr del 192.168.1.100/24 dev eth0
4.5 删除默认网关
使用以下命令,删除默认网关。
 ip route del default
五、管理路由表
5.1 新增路由表
使用以下命令,新增路由表。
ip route add 192.168.80.0/24 via 192.168.1.1
查看路由表信息。
[root@master ~]# ip route show
default via 192.168.3.254 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.141 metric 100
192.168.80.0/24 via 192.168.1.1 dev eth0
5.2 删除路由表条目
使用以下命令,删除路由表条目。
 ip route del 192.168.80.0/24 via 192.168.1.1
检查路由表中,该条目是否已删除。
[root@master ~]# ip route show
default via 192.168.3.254 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.141 metric 100
5.3 永久设置静态路由方法
进入网卡目录中
 cd /etc/sysconfig/network-scripts/
在网卡配置文件中,新建及编辑文件 route-eth0,内容如下:
[root@server01 network-scripts]# vim route-eth0
[root@server01 network-scripts]# cat route-eth0 
172.16.10.0/24 via 192.168.3.254
重启network服务
service network restart 
查看路由表
[root@master network-scripts]# ip route
default via 192.168.3.254 dev eth0 proto static metric 100
172.16.10.0/24 via 192.168.3.254 dev eth0 proto static metric 100
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.141 metric 100
六、ip命令总结
以下是对ip命令使用的总结:
1. ip命令是Linux下管理网络接口的主要工具之一,可以用于设置IP地址、路由表、网络接口等。2. ip命令的常见操作包括查看网络接口信息、设置IP地址、设置网络接口等。3. 查看网络接口信息的操作:
- ip addr:显示所有网络接口的详细信息,包括接口名称、MAC地址、IPv4地址、IPv6地址等。
- ip link:显示所有网络接口的名称和状态信息。4. 设置IP地址的操作:
- ip addr add IP地址/掩码 dev 网络接口名:给指定网络接口添加IP地址。
- ip addr del IP地址/掩码 dev 网络接口名:删除指定网络接口的IP地址。
- ip -4 addr add IP地址/掩码 dev 网络接口名:给指定网络接口添加IPv4地址。
- ip -6 addr add IPv6地址/掩码 dev 网络接口名:给指定网络接口添加IPv6地址。5. 设置网络接口的操作:
- ip link set 网络接口名 up/down:设置指定网络接口的状态为up或down。
- ip link set 网络接口名 name 新名称:给指定网络接口修改名称。
- ip link set 网络接口名 mtu MTU值:设置指定网络接口的最大传输单元大小。
- ip route add 目标地址/掩码 via 网关 dev 网络接口名:添加路由规则,指定目标地址走指定的网关。6. 其他常用操作:
- ip neigh:显示ARP缓存表。
- ip route:显示和管理路由表。
- ip rule:显示和管理路由策略。相关文章:
 
Linux系统之ip命令的基本使用
Linux系统之ip命令的基本使用 一、ip命令介绍1.1 ip命令简介1.2 ip命令的由来1.3 ip命令的安装包 二、ip命令使用帮助2.1 ip命令的help帮助信息2.2 ip命令使用帮助 三、查看网络信息3.1 显示当前网络接口信息3.2 显示网络设备运行状态3.3 显示详细设备信息3.4 查看路由表3.5 查…...
【推荐算法】ctr cvr联合建模问题合集
ctr和cvr分开建模相比ctcvr的优势? 在电商搜索推荐排序中,将ctr和cvr分开建模,相比直接建模ctcvr的优势是什么? - 萧瑟的回答 - 知乎 总结: 1、ctr的数据可以试试获取,能实时训练。但是cvr存在延迟现象&…...
安装njnx --chatGPT
gpt: 要在 Debian 11 上安装 Nginx(通常称为 "nginx"),您可以使用 apt 包管理器执行以下步骤: 1. **登录到您的 Debian 11 服务器**。您可以使用 SSH 客户端以 root 或具有管理员权限的用户身份登录。 2. **更新软件…...
 
性能测试需求分析
1、客户方提出 客户方能提出明确的性能需求,说明对方很重视性能测试,这样的企业一般是金融、电信、银行、医疗器械等;他们一般对系统的性能要求非常高,对性能也非常了解。提出需求也比较明确。 曾经有一个银行项目,已经…...
 
logback服务器日志删除原理分析
查看以下的logback官方文档 Chapter 4: Appendershttps://logback.qos.ch/manual/appenders.html 按文档说明,maxHistory是设置保存归档日志的最大数量,该数量的单位受到fileNamePattern里的值%d控制,如果有多个%d,只能有一个主%d࿰…...
 
到底什么才是真正的商业智能(BI)
随着人工智能、云计算、大数据、互联网、物联网等新一代信息化、数字化技术在各行各业内开始大规模的应用,社会上的数字化、信息化程度不断加深,而数据价值也在这样的刺激下成为了个人、机构、企业乃至国家的重要战略资源,成为了继土地、劳动…...
 
Pulsar Manager配置自定义认证插件访问
Pulsar Manager配置自定义认证插件访问 Pulsar Manager和dashboard部署和启用认证 pulsar自定义认证插件开发 前面博客讲了以token方式访问pulsar 这节博客讲如何配置自定义认证插件的方式访问pulsar #启动pulsar-manager docker run --name pulsar-manager -dit \-p 9527:…...
Java SimpleDateFormat linux时间字符串转时间轴的坑
Mon Oct 16 09:51:28 2023 这是linux 的 date命令得到的时间,要转换称时间戳。 EEE MMM dd HH:mm:ss yyyy 这样的格式,看起来就是正确的,可是就是报错 Unparseable date: "Mon Oct 16 09:51:28 2023" 下面是正确的代码 String[…...
 
202、RabbitMQ 之 使用 fanout 类型的Exchange 实现 Pub-Sub 消息模型---fanout类型就是广播类型
目录 ★ 使用 fanout 类型的Exchange 实现 Pub-Sub 消息模型代码演示:生产者:producer消费者:Consumer01消费者:Consumer02测试结果 完整代码ConnectionUtilPublisherConsumer01Consumer02pom.xml ★ 使用 fanout 类型的Exchange …...
 
web 性能优化详解(Lighthouse工具、优化方式、强缓存和协商缓存、代码优化、算法优化)
1.性能优化包含的方面 优化性能概念宽泛,可以从信号、系统、计算机原理、操作系统、网络通信、DNS解析、负载均衡、页面渲染。只要结合一个实际例子讲述清楚即可。 2.什么是性能? Web 性能是客观的衡量标准,是用户对加载时间和运行时的直观…...
 
docker-compose部署elk(8.9.0)并开启ssl认证
docker部署elk并开启ssl认证 docker-compose部署elk部署所需yml文件 —— docker-compose-elk.yml部署配置elasticsearch和kibana并开启ssl配置基础数据认证配置elasticsearch和kibana开启https访问 配置logstash创建springboot项目进行测试kibana创建视图,查询日志…...
 
解决java.lang.IllegalArgumentException: servlet映射中的<url pattern>[demo1]无效
当我使用tomcat启动使用servlet项目时,出现了报错: java.lang.IllegalArgumentException: servlet映射中的<url pattern>[demo1]无效 显示路径错误,于是去检查Web.xml中的配置,发现是配置文件的路径写错了,少写了…...
 
软件测试学习(三)易用性测试、测试文档、软件安全性测试、网站测试
目录 易用性测试 用户界面测试 优秀Ul由什么构成 符合标准和规范 直观 一致 灵活 舒适 正确 实用 为有残疾障碍的人员测试:辅助选项测试 测试文档 软件文档的类型 文档测试的重要性 软件安全性测试 了解黑客的动机 威胁模式分析 网站测试 网页基…...
 
Java中,对象一定在堆中分配吗?
在我们的日常编程实践中,我们经常会遇到各种类型的对象,比如字符串、列表、自定义类等等。这些对象在内存中是如何存储的呢? 你可能会毫不犹豫地回答:“在堆中!”如果你这样回答了,那你大部分情况下是正确…...
 
AI:38-基于深度学习的抽烟行为检测
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...
 
Hadoop 配置 Kerberos 认证
1、安装 Kerberos 服务器和客户端 1.1 规划 服务端: bigdata3 客户端(Hadoop集群): bigdata0 bigdata1 bigdata2 192.168.50.7 bigdata0.example.com bigdata0 192.168.50.8 bigdata1.example.com bigdata1 192.168.50.9 b…...
 
在 Elasticsearch 中实现自动完成功能 2:n-gram
在第一部分中,我们讨论了使用前缀查询,这是一种自动完成的查询时间方法。 在这篇文章中,我们将讨论 n-gram - 一种索引时间方法,它在基本标记化后生成额外的分词,以便我们稍后在查询时能够获得更快的前缀匹配。 但在此…...
 
美客多、亚马逊卖家如何运用自养账号进行有效测评?
到了10月,卖家朋友们都在忙着准备Q4旺季吧! 首先,祝愿所有看到这条推文的卖家朋友,今年旺季都能爆单,赚得盆满钵满! 测评是珑哥常谈,一直备受关注,不论是新老卖家都是一个逃不开的…...
 
MyBatis的缓存,一级缓存,二级缓存
10、MyBatis的缓存 10.1、MyBatis的一级缓存 一级缓存是SqlSession级别的,通过同一个SqlSession对象 查询的结果数据会被缓存,下次执行相同的查询语句,就 会从缓存中(缓存在内存里)直接获取,不会重新访问…...
 
GitLab(1)——GitLab安装
目录 一、使用设备 二、使用rpm包安装 Gitlab国内清华源下载地址: ①下载命令如下: ②安装命令如下: ③删除rpm包 ④配置 ⑤重载 ⑥重启 ⑦配置自启动 ⑧打开8989端口并重启防火墙 三、GitLab登录 ①访问GitLab的URL ②输入用户…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
 
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
 
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
 
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
 
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
 
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
 
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
 
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
 
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
 
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
