notebook notebook
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)

学习笔记

啦啦啦,向太阳~
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)
  • Linux

    • 韩顺平 2021 Linux 课程笔记

      • 基础篇
      • 实操篇(上)
      • 实操篇(下)
        • 1. 网络配置
          • 1.1 Linux 网络配置原理
          • 1.2 查看网络 IP 和网关
          • 1.3 ping 测试连通性
          • 1.4 Linux 网络环境配置
          • 1.5 设置主机名和 hosts 映射
          • 1.6 应用实例:浏览器解析 www.baidu.com 的过程
        • 2. 进程管理(重点)
          • 2.1 基本介绍
          • 2.2 ps 显示系统执行的进程
          • 2.3 kill 和 killall
          • 2.4 pstree 查看进程树
          • 2.5 服务(service)管理
          • 2.6 systemctl 命令
          • 2.7 防火墙打开和关闭指定端口
          • 2.8 top 动态监控进程
          • 2.9 netstat 监控网络状态
          • 2.10 ping 检测主机连接
        • 3. RPM 与 YUM
          • 3.1 RPM 包的管理
          • 3.2 yum
      • JavaEE 与 Python 定制篇
      • 大数据定制篇 - Shell 编程
    • TLCL(The Linux Command Line)

  • 云原生

  • 运维
  • Linux
  • 韩顺平 2021 Linux 课程笔记
yubin
2022-02-14
目录

实操篇(下)

# 1. 网络配置

# 1.1 Linux 网络配置原理

假设我们的物理主机在一个教室的局域网内:

image-20220214170223466

  • Linux 虚拟机和 vmnet8 在一个子网内形成一个网络,可以互通(ping 通)
  • 本机电脑的无线网卡与教室局域网的网管互通,vmnet8 又和无线网卡互通

# 1.2 查看网络 IP 和网关

# 1.2.1 查看虚拟机 IP

在 Linux 中的 ifconfig 可以看到本机的 IP:



 







$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.220.134  netmask 255.255.255.0  broadcast 192.168.220.255
        inet6 fe80::c84d:947f:c9c3:2aa3  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f9:c5:14  txqueuelen 1000  (Ethernet)
        RX packets 142  bytes 14858 (14.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 130  bytes 17101 (16.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
1
2
3
4
5
6
7
8
9

可以看到 Linux 虚拟机的 IP 为 192.168.220.134。

# 1.2.2 查看网络编辑器和网关

在 VMware 的虚拟网络编辑器中,可以看到 NAT 连接方式下本机的子网 IP:

image-20220214171502174

然后在点击 NAT 设置 可以看到网关:

image-20220214171709983

# 1.2.3 查看 Windows 环境中的 VMnet8 网络配置

使用 ipconfig 命令:

> ipconfig
...
以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::c823:6a37:c475:ed49%24
   IPv4 地址 . . . . . . . . . . . . : 192.168.220.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :
...
1
2
3
4
5
6
7
8
9
10

# 1.3 ping 测试连通性

ping 目的主机:测试当前服务器是否可以连接目的主机

测试是否可以连接百度:ping www.baidu.com

# 1.4 Linux 网络环境配置

# 1.4.1 第一种方法:自动获取

登录后,通过界面来设置自动获取 IP。特点:Linux 启动后会自动获取 IP,但每次自动获取的 IP 地址可能不一样。

image-20220214174016538

# 1.4.2 第二种方法:指定 IP ⭐️

直接修改配置文件来指定 IP,并可以连接到外网(程序员推荐)。

配置文件根据网卡不同名字有所区别,但文件路径一致:/etc/sysconfig/network-scripts/,常见的配置文件名有 ifcfg-eth0 或者 ifcfg-ens33,可以通过 ifconfig 查看后缀。

以 ifcfg-ens33 为例,使用 vim 修改此文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33:

YPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
- BOOTPROTO="dhcp"
+ BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="1af88ac9-573c-49da-993c-9ab4e6c73159"
DEVICE="ens33"
ONBOOT="yes"
+ IPADDR=192.168.200.130 # 本机 IP 地址
+ NETMASK=255.255.255.0 # 子网掩码
+ GATEWAY=192.168.200.2 # 默认网关
+ DNS1=192.168.200.2 # 域名解析器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

修改好后并保存。然后进入 VMware 的虚拟网络编辑器,将 NAT 配置中的子网 IP 改为 192.168.200.0,将网关 IP 改为 192.168.200.2。修改位置可见本文的 1.2.2 节所示。

完成以上操作后,重启网络服务或重启系统生效:

service network restart、reboot

以上这些操作就是将本文 1.1 节图中的 Linux 虚拟机和 vmnet8 的地址分别改成了 192.168.200.130 和 192.168.200.1。这时在虚拟机中使用 ifconfig 命令可以看到:



 







$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.200.130  netmask 255.255.255.0  broadcast 192.168.200.255
        inet6 fe80::c84d:947f:c9c3:2aa3  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f9:c5:14  txqueuelen 1000  (Ethernet)
        RX packets 792  bytes 825124 (805.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 456  bytes 33428 (32.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
1
2
3
4
5
6
7
8
9
  • 本机 IP 已经成功改为了 192.168.200.130。

# 1.5 设置主机名和 hosts 映射

# 1.5.1 设置主机名

为了方便记忆,可以给 Linux 系统设置主机名,也可以根据需要修改主机名。

指令 hostname:查看主机名

修改文件在 /etc/hostname 指定。修改后重启生效。

# 1.5.2 设置 hosts 映射

思考:如何通过主机名能够找到(比如 ping)某个 Linux 系统?

Hosts:一个记录 IP 和 hostname 之间映射关系的文本文件。

✏️ Windows 中,在 C:\Windows\System32\drivers\etc\hosts 文件指定即可。

案例:192.168.200.130 hspEdu100

  • 前半部分是 IP 地址,后半部分是其对应的主机名

PS:还有一个常见的案例是 127.0.0.1 localhost

✏️ Linux 中,在 /etc/hosts 文件指定即可。

案例:192.168.200.1 ThinkPad-PC

# 1.6 应用实例:浏览器解析 www.baidu.com 的过程

  1. 浏览器先检查浏览器中有没有该域名解析 IP,有就先调用这个 IP 完成解析。如果没有,就再检查 DNS 解析器缓存,如果有就直接返回 IP 完成解析。这两个缓存可以理解为本地解析器缓存。
  2. 一般来说,当电脑第一次成功访问某一个网站后,在一定时间内浏览器或 OS 会缓存它的 DNS 解析记录。
ipconfig /displaydns  // 查看 DNS 域名解析缓存
ipconfig /flushdns    // 手动清理 DNS 缓存
1
2
  1. 如果本地解析器缓存没有找到对应的映射,就检查系统中 hosts 文件中有没有对应的域名 IP 映射,有则完成解析并返回。
  2. 如果本地 DNS 解析器缓存和 hosts 文件都没能解析出对应的 IP,则到域名服务 DNS 进行解析域。

# 2. 进程管理(重点)

# 2.1 基本介绍

在 Linux 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号,即进程号,PID。

每个进程都可能以两种方式存在的:前台与后台。所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才才结束。

# 2.2 ps 显示系统执行的进程

# 2.2.1 ps 命令

ps 命令是 Process Status 的缩写,用来列出系统中当前正在运行的那些进程,就是执行 ps 命令的那个时刻的那些进程的快照。

ps 查看的结果不是动态连续的,如果想要动态的显示进程信息,就可以使用 top、htop 命令。

$ ps
   PID TTY          TIME CMD
  2149 pts/0    00:00:00 zsh
  2228 pts/0    00:00:00 ps
1
2
3
4
  • ps 显示的信息字段:

    • PID:进程识别号
    • TTY:终端机号
    • TIME:进程使用 CPU 的总时间
    • CMD:正在执行的命令或进程名
  • 常用选项:

    • -a:显示当前终端的所有进程信息
    • -u:以用户的格式显示进程信息
    • -x:显示后台进程运行的参数

常见情况下是 ps -aux | more 三个选项一块用,并分页查看

# 2.2.2 ps 详解

输入 ps -aux|more 后可以看到:

image-20220215124549030

  • USER:用户名称
  • %CPU:进程占用 CPU 百分比
  • %MEM:进程占用物理内存的百分比
  • VSZ:进程占用的虚拟内存大小(单位 KB)
  • RSS:进程占用的物理内存大小(单位 KB)
  • TTY:终端名称,缩写
  • STAT:进程状态。S 睡眠,s 表示该进程是会话的先导进程,N 表示该进程拥有比普通优先级更低的优先级,R 正在运行,D 短期等待,Z 僵死进程,T 被跟踪或被停止等
  • START:进程的启动时间
  • TIME:进程使用 CPU 的总时间
  • COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

但是直接 ps 会显示太多的进程了,如果想看有没有某个进程,可以用 ps -aux|grep xxx。

# 2.2.3 应用实例

要求:以全格式显示当前所有的进程

ps -ef:以全格式查看系统上的运行的所有进程 【常用】

  • -e:显示运行在系统上的所有进程
  • -f:全格式,即扩展显示输出

image-20220215130330330

  • C 字段是 CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行的优先级会降低;数值越小,表明进程是 IO 密集型运算,执行优先级会提高。
  • PPID:父进程的 PID

# 2.3 kill 和 killall

这部分在 CSAPP 中有讲解

kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。预设的信息为 SIGTERM(15),可将指定程序终止。

这里只讲用 kill 命令终止进程:

  • kill [选项] 进程号:终止进程

  • killall 进程名称:通过进程名称杀死进程(及其子进程),也支持通配符,这在系统因负载过大而变得很慢时很有用。

常用选项:

  • -9:表示强迫进程立即终止

# 🖊 案例 1:踢掉某个非法用户

我们先让用户 fox 登录,然后 root 下输入 ps -aux | grep sshd,可以看到:





 



$ ps -aux | grep sshd
root       1462  0.0  0.2 112984  4324 ?        Ss   12:24   0:00 /usr/sbin/sshd -D
root       2140  0.0  0.2 161072  5584 ?        Ss   12:24   0:00 sshd: yubin [priv]
yubin      2148  0.0  0.1 161072  2556 ?        S    12:24   0:00 sshd: yubin@pts/0
root       2900  0.3  0.2 161080  5584 ?        Ss   13:22   0:00 sshd: fox [priv]
fox        2907  0.0  0.1 161080  2560 ?        S    13:22   0:00 sshd: fox@pts/1
root       3006  0.0  0.0 112828   984 pts/0    S+   13:23   0:00 grep --color=auto sshd
1
2
3
4
5
6
7

可以看到 fox 登录的时候,是通过进程 2900 登录的,于是我们 kill 2900 后可以看到 fox 用户被踢掉。

# 🖊 案例 2:终止远程登录服务 sshd,并在适当时候再次重启 sshd 服务

类似于案例1,在案例 1 的输出中可以看到,sshd 服务(/usr/sbin/sshd -D 启动的进程)的进程号是 1462,所以 kill 1462 即可终止 sshd 服务。终止后会发现别的用户无法再远程登录。

终止 sshd 后,通过 /bin/systemctl start sshd.service 即可重启该服务。

# 🖊 案例 3:终止多个 gedit

先在图形化界面下用 gedit 打开多个文本编辑页面,然后 killall gedit 即可一次性关闭全部。

# 🖊 案例 4:强制杀掉一个终端

先开一个 bash 终端,然后 ps -aux|grep bash 即可看到所有的 bash 进程,找到要杀死的 bash 进程号 xxxx,然后使用 kill -9 bash对应的进程号 即可杀死。

  • 加上 -9 选项是因为如果不加的话,系统会认为由于要被 kill 的 bash 正在工作,而认为你的 kill 是一个误操作,从而置之不理,只有加了 -9 才会强制杀掉。

# 2.4 pstree 查看进程树

pstree [选项]:可以更加直观的来看进程信息。

  • -p:显示进程的 PID
  • -u:显示进程的所属用户

案例:

  • pstree -p:树状的形式显示进程的 PID。
  • pstree -u:树状的形式显示进程的用户

# 2.5 服务(service)管理

服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql、sshd、防火墙等),因此我们又称为守护进程。

# 2.5.1 service 管理指令

service 服务名 [start | stop | restart | reload | status]

  • 在 CentOS 7.0 后 不再使用 service ,而是 systemctl(后面专门介绍)
  • service 指令管理的服务在 /etc/init.d 查看,即 ls -l /etc/init.d 命令。

案例:

  • 查看网络:service network status
  • 关闭网络:service network stop
  • 启动网络:service network start

# 2.5.2 查看服务名

✏️ 方式一:执行命令 setup -> 系统服务 就可以看到全部:

image-20220215154611493
  • 带星号的是开机自启动的服务
  • 可以通过命令 sevice 或 systemctl 启动。

✏️ 方式二:运行 ls -l /etc/init.d 查看 service 指令管理的服务。

# 2.5.3 服务的运行级别

Linux 系统有7种运行级别(runlevel):常用的是级别 3 和 5。

  • 运行级别 0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。
  • 运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆。
  • 运行级别 2:多用户状态(没有 NFS),不支持网络。
  • 🔺运行级别 3:完全的多用户状态(有 NFS),无界面,登陆后进入控制台命令行模式。【工作常用】
  • 运行级别 4:系统未使用,保留。
  • 运行级别 5:X11 控制台,登陆后进入图形 GUI 模式
  • 运行级别 6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。

开机的流程说明:开机 -> BIOS -> /boot -> systemd 进程 1(所有进程的老祖宗)-> 确定运行级别 -> 启动运行级对应的服务

# 2.5.4 CentOS 7 后运行级别说明

在 /etc/initab 进行了简化,multi-user.target 等同于运行级别 3,graphical.target 等同于运行级别 5。

  • 命令 systemctl get-default:获取当前的运行级别
  • 命令 systemctl set-default multi-user.target:将默认运行级别设置为 mulit-user

# 2.5.5 chkconfig 指令

chkconfig 命令用于检查,设置系统的各种服务。通过 chkconfig 命令可以给每个服务的各个运行级别设置“自启动”/“关闭”,此处的服务是指 service 指令管理的服务,在 /etc/init.d 查看,即 ls -l /etc/init.d 命令。

在 CentOS 7.0之后,很多服务使用 systemctl 管理。

基本语法:

  • 查看服务:chkconfig --list | grep 服务名
  • chkconfig --level 5 服务名 on/off:将某一个服务在特定级别下设置为“自启动”/“关闭”

chkconfig 重新设置服务自启动或关闭后,需要重启机器才能生效。

# 2.6 systemctl 命令

systemctl:system ctl

# 2.6.1 systemctl 管理指令

命令:systemctl [start | stop | restart | status] 服务名

  • systemctl 指令管理的服务在 /usr/lib/systemd/system 目录查看

# 2.6.2 systemctl 设置服务自启动状态

  • systemctl list-unit-files| grep 服务名:查看服务开机启动状态,使用 grep 进行过滤。
  • systemctl enable:设置服务开机自启动。
  • systemctl disenable 服务名:关闭服务开机自启动。
  • systemctl is-enable 服务名:查询某个服务是否开机自启动。

案例:查看当前防火墙的状况,关闭并重启它 => firewalld.service

  • 查看状况:systemctl status firewalld
    • 这里写 firewalld 或者全名 firewalld.service 均可
  • 关闭防火墙:systemctl stop firewalld

细节讨论:这种关闭防火墙是立即生效,但只是临时生效,重启系统后还是回归以前对服务的设置。如果希望某个服务自启动或者关闭永久生效,要使用 systemctl [enable|disable] 服务名。

# 2.7 防火墙打开和关闭指定端口

在真正的生产环境,往往需要将防火墙打开。但如果把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。

防火墙的一个功能就是将请求允许的端口放行,不允许的端口过滤掉

firewall 指令:

  • 打开端口:firewall-cmd --permanent --add-port=端口号/协议
  • 关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
  • 重新载入,才能生效:firewall-cmd --reload
  • 查询端口是否开放:firewall-cmd --query-port=端口号/协议
  • 端口号和协议可以通过 netstat 进行监听

案例:

  1. 先启用防火墙,然后在 Windows 中测试请求 Linux 的 111 端口能否 telnet => 不能
> telnet 192.168.200.130 111
正在连接192.168.200.130...无法打开到主机的连接。 在端口 111: 连接失败
1
2
  1. 开放 111 端口:
$ firewall-cmd --permanent --add-port=111/tcp;
success
$ firewall-cmd --reload
success
1
2
3
4
  1. 在 Windows 中测试 telnet 就可以成功了
  2. 关闭 111 端口:
$ firewall-cmd --permanent --remove-port=111/tcp;
success
$ firewall-cmd --reload
success
1
2
3
4

# 2.8 top 动态监控进程

top 与 ps 命令很相似,它们都用来显示正在执行的进程。top 与 ps 最大的不同之处,在于 top 在执行一段时间可以更新正在运行的的进程。

命令:top [选项]

  • -d:指定 top 命令每隔几秒更新,默认 3 秒
  • -i:使 top 不显示任何闲置或者僵死进程
  • -p:通过指定监控进程 ID 来仅仅监控某个进程的状态

image-20220215171317028

  • 各字段含义可以百度

执行 top 后进入监控页面,还可以通过键盘输入一下按键来交互:

  • P:以 CPU 使用率排序,默认就是此项
  • M:以内存的使用率排序
  • N:以 PID 排序
  • q:退出 top

# 🖊 案例 1:监视特定用户

输入 top 命令,查看执行的进程,然后输入 u 回车,再输入用户名。

# 🖊 案例 2:终止指定的进程

输入 top 命令,查看执行的进程,然后输入 k 回车,再输入要结束的进程 PID 号。

# 2.9 netstat 监控网络状态

netstat [选项]:查看系统网络情况

  • -an:按一定顺序排列输出
  • -p:显示哪个进程在调用

案例:

  • 查看服务名为 sshd 服务的信息:netstat -anp|grep sshd

# 2.10 ping 检测主机连接

ping 是一种网络检测工具,它主要是用来检测远程主机是否正常,或是两部主机间的网线或网卡故障。如 ping 对方IP地址。

# 3. RPM 与 YUM

# 3.1 RPM 包的管理

rpm 是用于互联网下载包的打包及安装工具,它包含在某些 Linux 发行版中。它生成具有.RPM 扩展名的文件。RPM 是 RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似 Windows 的 setup.exe,这一文件格式名称虽然打上了 RedHat 的标志,但理念是通用的。Linux 的发行版本都有采用(RedHat,CentOS等等),可以算是公认的行业标准了。

# 3.1.1 rpm 包的简单查询指令

查询指令的选项是 -q(query),然后再和其他选项组合来使用。

rpm -qa:查询已安装的全部 rpm 软件包

案例:看看当前系统是否安装了 Firefox:rpm -qa|grep firefox

$ rpm -qa|grep firefox
firefox-91.5.0-1.el7.centos.x86_64
1
2

# 3.1.2 rpm 包名基本格式

一个 rpm 包名:firefox-91.5.0-1.el7.centos.x86_64

  • 名称:firefox
  • 版本号:91.5.0-1
  • 适用 OS:el7.centos.x86_64
    • 表示 centos7.x 的 64 位系统
    • 如果是 i686、i386表示32位系统,noarch 表示通用

# 3.1.3 RPM 包的其它查询指令

  • rpm -qa | grep 软件包名:查询所安装的是否有该软件包
  • rpm -qi 软件包名:查询软件包信息
  • rpm -ql 软件包名:查询软件包中的文件
  • rpm -qf 文件全路径:查询文件所属的软件包,如rpm -qf /etc/passwd

# 3.1.4 卸载 rpm 包

rpm -e RPM包的名称

  • 包名不需要写全称,比如卸载火狐只需要写 firefox 即可。
  • e —— erase

案例:删除 firefox 软件包:rpm -e firefox

细节问题

  • 如果其它软件包依赖于要卸载的软件包,卸载时则会产生错误信息。
  • 如果就是要删除这个 rpm 包,可以增加参数 --nodeps,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行。

# 3.1.5 安装 rpm 包

rpm -ivh RPM包全路径名称

  • -i:install,安装
  • -v:verbose,提示
  • -h:hash,进度条

案例:卸载和安装 Firefox 浏览器

  • 卸载:rpm -e firefox
  • 安装:rpm -ivh firefox的rpm安装包

# 3.2 yum

YUM 是一个 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。使用 YUM 的前提是可以联网。

  • 查询 YUM 服务器是否有需要安装的软件:yum list | grep 软件名
  • 安装指定的 yum 包:yum install 软件名

案例:使用 yum 的方式来安装 firefox

  • 删除 Firefox:rpm -e firefox
  • 查询 Firefox:yum install | grep firefox
  • 安装:yum install firefox
编辑 (opens new window)
上次更新: 2023/06/07, 13:42:57
实操篇(上)
JavaEE 与 Python 定制篇

← 实操篇(上) JavaEE 与 Python 定制篇→

最近更新
01
Deep Reinforcement Learning
10-03
02
误删数据后怎么办
04-06
03
MySQL 一主多从
03-22
更多文章>
Theme by Vdoing | Copyright © 2021-2024 yubincloud | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×