Red Hat Enterprise Linux 8系统学习(三)

Red Hat Enterprise Linux 8系统学习(三)

一、常用系统工作命令

1、echo

echo命令用于在终端设备上输出字符串或变量提取后的值,语法格式为:“echo [字符串] [$变量]”。

执行“echo 字符串”或“echo 变 量 ” 就 可 以 , 其 中 变量”就可以,其中 符号意思是提取变量的实际值,以便后续的输出操作。

例如,把指定字符串“zjs.com”输出到终端屏幕的命令为:

[root@zjs ~]# echo zjs.com

该命令会在终端屏幕上显示如下信息:

zjs.com

使用“$变量”的方式提取变量出SHELL的值,并将其输出到屏幕上:

[root@zjs ~]# echo $SHELL
/bin/bash

2、date

date命令用于显示或设置系统的时间与日期,语法格式为:“ date [+指定的格式]”。

​ date命令中的参数以及作用

参数 作用
%S 秒(00~59)
%M 分钟(00~59)
%H 小时(00~23)
%I 小时(00~12)
%m 月份(1~12)
%p 显示出AM或PM
%a 缩写的工作日名称(例如:Sun)
%A 完整的工作日名称(例如:Sunday)
%b 缩写的月份名称(例如:Jan)
%B 完整的月份名称(例如:January)
%q 季度(1~4)
%y 简写年份(例如:20)
%Y 完整年份(例如:2020)
%d 本月中的第几天
%j 今年中的第几天
%n 换行符(相当于按下回车键)
%t 跳格(相当于按下Tab键)

按照默认格式查看当前系统时间的date命令如下所示:

[root@zjs ~]# date
Sat Sep 5 09:13:45 CST 2020

按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间的date命令如下所示:

[root@zjs ~]# date "+%Y-%m-%d %H:%M:%S"
2020-09-05 09:14:35

将系统的当前时间设置为2020年11月1日8点30分的date命令如下所示:

[root@zjs ~]# date -s "20201101 8:30:00"
Sun Nov 1 08:30:00 CST 2020

再次使用date命令并按照默认的格式查看当前的系统时间,如下所示:

[root@zjs ~]# date
Sun Nov 1 08:30:08 CST 2020

date命令中的参数%j可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:

[root@zjs ~]# date "+%j"
306

3、reboot

reboot命令用于重启系统,输入后回车执行即可。

由于重启计算机这种操作会涉及硬件资源的管理权限,因此最好使用root管理员来重启,普通用户可能会被拒绝,其命令如下:

[root@zjs ~]# reboot

4、poweroff

poweroff命令用于关闭系统,输入后回车执行即可。还可使用halt或init 0命令关闭系统。

与上面相同,该命令也会涉及到硬件资源的管理权限,因此最好还是用root管理员来关闭电脑,其命令如下:

[root@zjs ~]# poweroff

5、wget

此处忽略,后续章节学习。

6、ps

ps命令用于查看系统中的进程状态,英文全称为:“processes”,语法格式为:“ps [参数]”。

​ ps命令中的参数以及作用

参数 作用
-a 显示所有进程(包括其他用户的进程)
-u 用户以及其他详细信息
-x 显示没有控制终端的进程

Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。五种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示。

**R(正在服务):**进程正在运行或在运行队列中等待。

**S(等待服务):**进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。

**D(不可中断):**进程不响应系统异步信号,即便用kill命令也不能将其中断。

**Z(僵死、没有服务):**进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。

**T(停止):**进程收到停止信号后停止运行。

除了上面的五种常见进程状态,还有可能是高优先级(<),低优先级(N),被锁进内存(L),包含子进程(s)以及多线程(l)这五种补充形式。

当执行“ps aux”命令后通常会看到如下表所示的进程状态,下面只是列举了部分输出值,而且正常的输出值中不包括中文注释:

​ 进程状态

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程的所有者 进程ID号 运算器占用率 内存占用率 虚拟内存使用量(单位是KB) 占用的固定内存量(单位是KB) 所在终端 进程状态 被启动的时间 实际使用CPU的时间 命令名称与参数
root 1 0.0 0.5 244740 10636 ? Ss 07:54 0:02 /usr/lib/systemd/ systemd --switched-root --system --deserialize 18
root 2 0.0 0.0 0 0 ? S 07:54 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 07:54 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 07:54 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< 07:54 0:00 [kworker/0:0H-kbl
root 6 0.0 0.0 0 0 ? I< 07:54 0:00 [mm_percpu_wq]
root 7 0.0 0.0 0 0 ? S 07:54 0:00 [ksoftirqd/0]
root 8 0.0 0.0 0 0 ? I 07:54 0:00 [rcu_sched]
root 9 0.0 0.0 0 0 ? S 07:54 0:00 [migration/0]
……………… 省略部分输出信息 ………………

Tips

如前面所提到的,在Linux系统中的命令参数有长短格式之分,长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后仅保留一个-(减号)。另外ps命令可允许参数不加减号(-),因此可直接写成ps aux的样子。

7、top

top命令用于动态地监视进程活动及系统负载等信息,输入后回车执行即可。

上面命令都是静态的查看系统状态,不能实时滚动最新数据,而top命令就能够动态地查看系统状态,完全可以将它看作是Linux中的“强化版的Windows任务管理器”,是相当好用的性能分析工具,top命令的运行界面如下图所示。

在这里插入图片描述

其中,user在RHEL6、RHEL7版本表示的是终端数,在8版本中代表用户数

load average,系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值为动态的,应该从右至左看,数值越小意味着负载越低)

us:当前CPU使用率

id:当前CPU空闲率

8、pidof

pidof命令用于查询某个指定服务进程的PID号码值,语法格式为:“pidof [参数] 服务名称”。

每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程,来查询本机上sshd服务程序的PID:

[root@zjs ~]# pidof sshd
2156

9、kill

kill命令用于终止某个指定PID值的服务进程,语法格式为:“kill [参数] 进程的PID”。

接下来,使用kill命令把上面用pidof命令查询到的PID所代表的进程终止掉,其命令如下所示。这种操作的效果等同于强制停止sshd服务:

[root@zjs ~]# kill 2156

但也有时候会提示进程无法被终止,则可以加参数-9,代表最高级别的强制杀死进程:

[root@zjs ~]# kill -9 2156

10、killall

killall命令用于终止某个指定名称的服务所对应的全部进程,语法格式为:“killall [参数] 服务名称”。

通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果用上面kill命令的方式逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程,下面以httpd服务程序为例,来结束其全部进程。

[root@zjs ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@zjs ~]# killall httpd
[root@zjs ~]# pidof httpd
[root@zjs ~]# 

二、系统状态命令检测

1、ifconfig

ifconfig命令用于获取网卡配置与网络状态等信息,英文全称为:“interface config”,语法格式为:“ifconfig [参数] [网络设备]”。

使用ifconfig命令来查看本机当前的网卡配置与网络状态等信息时,其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量:

[root@zjs ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::c8f8:f5c5:8251:aeaa  prefixlen 64  scopeid 0x20
        ether 00:0c:29:7d:27:bf  txqueuelen 1000  (Ethernet)
        RX packets 304  bytes 33283 (32.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 91  bytes 11052 (10.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、uname

uname命令用于查看系统内核版本与系统架构等信息,英文全称为:“Unix name”,语法格式为:“uname [-a]”。

3、uptime

uptime命令用于查看系统的负载信息

uptime命令可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近1分钟、5分钟、15分钟内的压力情况,负载值越低越好:

[root@zjs ~]# uptime
22:49:55 up 10 min, 1 users, load average: 0.01, 0.19, 0.18

Tips

负载值越低越好指的是对运维人员来讲的,越低越安全省心。但是公司购置的硬件设备如果长期处于空闲状态,明显是种资源浪费。所以建议是负载值保持在1左右,不要超过5就好。

4、free

free命令用于显示当前系统中内存的使用量信息,语法格式为:“free [-h]”。

为了保证Linux系统不会因资源耗尽而突然宕机,运维人员需要时刻关注内存的使用量。在使用free命令时,可以结合使用-h参数以更人性化的方式输出当前内存的实时使用量信息。下图所示为执行“free -h”命令之后的输出信息。需要注意的是,输出信息中的汉字注释是作者自行添加的内容,实际输出时没有相应的参数解释。

[root@zjs ~]# free -h

​ 执行free -h命令后的输出信息

内存总量 已用量 空闲量 进程共享的内存量 磁盘缓存的内存量 缓存的内存量 可用量
total used free shared buffers buff/cache available
Mem: 1.9Gi 1.4Gi 99Mi 20Mi 450Mi 348Mi
Swap: 2.0Gi 80Mi 1.9Gi

如果不使用-h(易读模式)查看内存使用量情况则默认以KB为单位,那服务器如果有几百GB的内存,划算下来就会是一大长串的数字,真不利于阅读。

5、who

who命令用于查看当前登入主机的用户终端信息。

6、last

last命令用于调取主机的被访记录。

[root@zjs ~]# last
root     pts/1        192.168.10.1     Tue May 18 10:30 - 11:03  (00:32)
root     tty2         tty2             Fri Jul 24 06:26    gone - no logout
reboot   system boot  4.18.0-80.el8.x8 Fri Jul 24 05:59   still running
root     tty2         tty2             Tue Jul 21 05:19 - down   (00:00)
reboot   system boot  4.18.0-80.el8.x8 Tue Jul 21 05:16 - 05:19  (00:02)

wtmp begins Tue Jul 21 05:16:47 2020

7、history

history命令用于显示执行过的命令历史,语法格式为:“history [-c]”。

执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,可以使用-c参数清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令

[root@zjs ~]# history
1 ifconfig
2 uname -a
3 cat /etc/redhat-release
4 uptime
5 free -h
6 who
7 last
8 ping -c 192.168.10.10
9 ping -c 192.168.10.20
10 tracepath www.zjs.com
11 netstat -a
12 netstat -i
13 history
[root@zjs ~]# !3
cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)

历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用cat命令查看其文件内容:

[root@zjs ~]# cat ~/.bash_history

要清空当前用户在本机上执行的Linux命令历史记录信息,可执行如下命令:

[root@zjs ~]# history -c

8、sosreport

sosreport命令用于收集系统配置及架构信息并输出诊断文档。

当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。

在下面的输出信息中,加粗的部分是收集好的资料压缩文件以及校验码,将其发送给技术支持人员:

[root@zjs ~]# sosreport
sosreport (version 3.6)
This command will collect diagnostic and configuration information from
this Red Hat Enterprise Linux system and installed applications.

An archive containing the collected information will be generated in
/var/tmp/sos.9_i0glu8 and may be provided to a Red Hat support
representative.

Any information provided to Red Hat will be treated in accordance with
the published support policies at:
https://access.redhat.com/support/
The generated archive may contain data considered sensitive and its
content should be reviewed by the originating organization before being
passed to any third party.

No changes will be made to system configuration.
Press ENTER to continue, or CTRL-C to quit.
此处按下回车键进行确认
Please enter the case id that you are generating this report for []:此处按下回车键进行确认
Setting up archive ...
Setting up plugins ...
Running plugins. Please wait ...
………………省略部分输出信息………………
Finished running plugins 
Creating compressed archive...

Your sosreport has been generated and saved in:
/var/tmp/sosreport-zjs.com-2021-05-18-jnkaspu.tar.xz

The checksum is: 9fbecbd167b7e5836db1ff8f068c4db3
Please send this file to your support representative.

三、工作目录切换命令

1、pwd

pwd命令用于显示用户当前所处的工作目录。

2、cd

cd命令用于切换当前的工作路径,语法格式为:“cd [参数] [目录]”。

“cd -”命令返回到上一次所处的目录

“cd…”命令进入上级目录

“cd ~”命令切换到当前用户的家目录

“cd ~username”切换到其他用户的家目录。

例如,切换进/etc目录中:

[root@zjs ~]# cd /etc

同样的道理,可使用下述命令切换到/bin目录中:

[root@zjs etc]# cd /bin

此时,要返回到上一次的目录(即/etc目录),可执行如下命令:

[root@zjs bin]# cd -
/etc
[root@zjs etc]#

还可以通过下面的命令快速切换到用户的家目录:

[root@zjs etc]# cd ~
[root@zjs ~]#

3、ls

ls命令用于显示目录中的文件信息,语法格式为:“ls [参数] [文件名称]”。

使用ls命令的“-a”参数看到全部文件(包括隐藏文件)

使用“-l”参数可以查看文件的属性、大小等详细信息

这两个参数整合之后,再执行ls命令即可查看当前目录中的所有文件并输出这些文件的属性信息:

[root@zjs ~]# ls -al
total 48
dr-xr-x---. 15 root root 4096 Jul 24 06:33 .
dr-xr-xr-x. 17 root root  224 Jul 21 05:04 ..
-rw-------.  1 root root 1407 Jul 21 05:09 anaconda-ks.cfg
-rw-------.  1 root root  335 Jul 24 06:33 .bash_history
-rw-r--r--.  1 root root   18 Aug 13  2018 .bash_logout
-rw-r--r--.  1 root root  176 Aug 13  2018 .bash_profile
-rw-r--r--.  1 root root  176 Aug 13  2018 .bashrc
drwx------. 10 root root  230 Jul 21 05:19 .cache
drwx------. 11 root root  215 Jul 24 06:27 .config
-rw-r--r--.  1 root root  100 Aug 13  2018 .cshrc
drwx------.  3 root root   25 Jul 21 05:16 .dbus
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Desktop
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Documents
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Downloads
-rw-------.  1 root root   16 Jul 21 05:19 .esd_auth
-rw-------.  1 root root  620 Jul 24 06:26 .ICEauthority
-rw-r--r--.  1 root root 1562 Jul 21 05:18 initial-setup-ks.cfg
drwx------.  3 root root   19 Jul 21 05:19 .local
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Music
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Pictures
drwxr-----.  3 root root   19 Jul 21 05:19 .pki
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Public
-rw-r--r--.  1 root root  129 Aug 13  2018 .tcshrc
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Templates
drwxr-xr-x.  2 root root    6 Jul 21 05:19 Videos
-rw-------.  1 root root 3235 Jul 24 06:32 .viminfo

如果想要查看目录属性信息,则需要额外添加一个-d参数。例如,可使用如下命令查看/etc目录的权限与属性信息:

[root@zjs ~]# ls -ld /etc
drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc

四、文本文件编辑命令

1、cat

cat命令用于查看纯文本文件(内容较少的),语法格式为:“cat [参数] 文件名称”。

如果在查看文本内容时还想顺便显示行号的话,在cat命令后面追加一个-n参数。

2、more

more命令用于查看纯文本文件(内容较多的),语法格式为:“more [参数] 文件名称”。

3、head

head命令用于查看纯文本文件的前N行,语法格式为:“head [参数] 文件名称”。

4、tail

tail命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为:“tail [参数] 文件名称”。

tail命令最强悍的功能是可以持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”。

[root@zjs ~]# tail -f /var/log/messages
Sep 15 00:14:01 localhost rsyslogd[1392]: imjournal: sd_journal_get_cursor() failed: Cannot assign requested address [v8.37.0-9.el8]
Sep 15 00:14:01 localhost rsyslogd[1392]: imjournal: journal reloaded... [v8.37.0-9.el8 try http://www.rsyslog.com/e/0 ]
Sep 15 00:14:01 localhost systemd[1]: Started update of the root trust anchor for DNSSEC validation in unbound.
Sep 15 00:14:01 localhost sssd[kcm][2764]: Shutting down
Sep 15 00:14:06 localhost systemd[1]: Starting SSSD Kerberos Cache Manager...
Sep 15 00:14:06 localhost systemd[1]: Started SSSD Kerberos Cache Manager.
Sep 15 00:14:06 localhost sssd[kcm][3989]: Starting up
Sep 15 00:14:26 localhost NetworkManager[1203]: <info> [1600100066.4675] audit: op="sleep-control" arg="off" pid=3990 uid=0 result="fail" reason="Already awake"
Sep 15 00:19:04 localhost org.gnome.Shell.desktop[2600]: Window manager warning: last_user_time (2361102) is greater than comparison timestamp (2361091). This most likely represents a buggy client sending inaccurate timestamps in messages such as _NET_ACTIVE_WINDOW. Trying to work around...
Sep 15 00:19:04 localhost org.gnome.Shell.desktop[2600]: Window manager warning: W14 (root@local) appears to be one of the offending windows with a timestamp of 2361102. Working around...

5、tr

tr命令用于替换文本内容中的字符,语法格式为:“tr [原始字符] [目标字符]”。

在很多时候,我们想要快速地替换文本中的一些词汇,又或者把整个文本内容都进行替换,如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实。这时,就可以先使用cat命令读取待处理的文本,然后通过管道符(详见第3章)把这些文本内容传递给tr命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:

[root@zjs ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
#VERSION=RHEL8
IGNOREDISK --ONLY-USE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --ALL --INITLABEL --DRIVES=SDA
# USE GRAPHICAL INSTALL
GRAPHICAL
REPO --NAME="APPSTREAM" --BASEURL=FILE:///RUN/INSTALL/REPO/APPSTREAM
# USE CDROM INSTALLATION MEDIA
CDROM
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8
# NETWORK INFORMATION
NETWORK --BOOTPROTO=DHCP --DEVICE=ENS160 --ONBOOT=OFF --IPV6=AUTO --NO-ACTIVATE
NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN
# ROOT PASSWORD
ROOTPW --ISCRYPTED $6$TTBUW5DKOPYQQ.VI$RMK9FCGHOJOQ2QAPRURTQM.QOK2NN3YFN/I4F/FALVGGGND9XOIYFBRXDN16WWIZIASJ0/CR06U66IPEOGLPJ.
# X WINDOW SYSTEM CONFIGURATION INFORMATION
XCONFIG --STARTXONBOOT
# RUN THE SETUP AGENT ON FIRST BOOT
FIRSTBOOT --ENABLE
# SYSTEM SERVICES
SERVICES --DISABLED="CHRONYD"
# SYSTEM TIMEZONE
TIMEZONE ASIA/SHANGHAI --ISUTC --NONTP
………………省略部分输出信息………………

6、wc

wc命令用于统计指定文本文件的行数、字数或字节数,语法格式为:“wc [参数] 文件名称”。

​ wc命令中的参数以及作用

参数 作用
-l 只显示行数
-w 只显示单词数
-c 只显示字节数

在Linux系统中,/etc/passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询:

[root@zjs ~]# wc -l /etc/passwd
45 /etc/passwd

7、stat

在这里插入图片描述

8、cut

cut命令用于按列提取文本内容,语法格式为:“cut [参数] 文件名称”。

系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:

[root@zjs ~]# head -n 2 /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin

一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。

接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

[root@zjs ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
………………省略部分输出信息………………

9、diff

diff命令用于比较多个文件之间内容的差异,语法格式为:“diff [参数] 文件名称A 文件名称B”。

在使用diff命令时,不仅可以使用–brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较:

[root@zjs ~]# cat diff_A.txt
Welcome to zjs.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@zjs ~]# cat diff_B.txt
Welcome tooo zjs.com

Red Hat certified
Free Linux LeSSonS
.....
Professional guidance
Linux Course

接下来使用diff --brief命令显示比较后的结果,判断文件是否相同:

[root@zjs ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ

最后使用带有-c参数的diff命令来描述文件内容具体的不同:

[root@zjs ~]# diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2020-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2020-08-30 18:08:52.203860389 +0800
***************
*** 1,5 ****
! Welcome to zjs.com
Red Hat certified
! Free Linux Lessons
Professional guidance
Linux Course
--- 1,7 ----
! Welcome tooo zjs.com
!
Red Hat certified
! Free Linux LeSSonS
! .....
Professional guidance
Linux Course

2021/1/8 23:55

猜你喜欢

转载自blog.csdn.net/weixin_45603370/article/details/112386408