每个程序员都应该知道的Linux基础知识!全文4900字,没有耐心的不建议看 ——( Linux文件系统 + 系统管理类命令 + bash基础特性)


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/105678252



- Linux的文件系统

首先我们来了解两个Linux的标准规范

- LSB

LSB: Linux Standard Base (Linux标准规范)是一个在Linux基金会结构下对Linux发行版的联合项目,其目标使Linux操作系统符合软件系统架构,或文件系统架构标准的规范及标准 —— 简单点说就是定义Linux文件系统架构规范的一个标准

- FHS

FHS:Filessystem Heirache Standard(文件系统层次结构标准)定义Linux操作系统中的主要目录及目录内容。

- 根文件系统

下面内容主要讲解linux根文件系统(linux root filesystem)下的目录结构

  • linux根文件系统下的主要目录有

/etc,/usr,/var,/root,/home,/dev

# 查看linux根目录下内容的命令
ls /
  • 查看结果如下:
[root@dayuanshuai ~]# ls /
bin   dev  home  lib    lost+found  mnt  proc  sbin     srv  tmp  usr
boot  etc  img   lib64  media       opt  root  selinux  sys  usb  var

- 对根文件系统下目录的概述:

/boot

引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录

/bin

供所有用户使用的基本命令:不能关联至独立分区,OS启动即会用到的程序

/sbin

管理类的基本命令:不能关联至独立分区,OS启动即会用到的程序

/lib

基本共享库文件,以及内核模块文件(lib/modules)

/lib64

专用于x86_64系统上的辅助共享库文件存放位置

/etc

配置文件目录(存放的配置文件都为纯文本文件)

  • /etc/opt

    • 存放 /opt 目录下的配置文件
  • /etc/X11

    • 存放 X Windows 系统的配置文件
  • /etc/passwd

    • 存放系统用户信息文件
  • /etc/passwd

    • 存放磁盘挂载信息文件
/home

普通用户的家目录,当使用useradd创建用户时,默认会在/home下创建一个与用户同名的文件夹,同时会复制 /etc/skel/ 下的文件到该目录下

在CentOS中,当创建新用户时,默认会将/etc/skel下的隐藏文件全部复制到该用户的家目录下。所以在你创建用户时,你会在该用户的家目录下发现一些隐藏文件。

# 查看隐藏文件的命令
ls -a
/root

管理员的家目录

  • 普通用户实现root权限的方法
  1. 对/etc/sudoers文件,进行配置。实现对用户的授权

  2. 执行sudo命令,然后输入该用户自己的密码

/media

挂载便捷式移动设备的目录

  • 当我们需要挂载一些移动设备时

    比如需要挂载光驱设备时,我们可以创建/media/cdrom文件夹,然后将光驱设备挂载到该文件夹上。同样的,挂载usb设备时,创建 /media/usb文件夹,然后挂载

  # 挂载光驱设备,请注意,使用该命令之前,请确定光驱已经插入
  mkdir /media/cdrom
  mount /dev/cdrom /media/cdrom
/mnt

临时文件系统的挂载点

/dev

设备文件及特殊文件存放目录

  • b:block device 块设备(随机访问设备)

  • c:character device 字符设备(线性访问设备)

/opt

第三方应用程序的安装位置

/srv

系统上允许的服务用到的数据

/tmp

临时文件存放位置

/usr

usr并不是代表user的意思,它的全名是Unix System Resource 即Unix系统资源,它是系统帮助文档以及源码包安装的位置。universal shared,read-only data 全局共享只读数据:(一般来说安装完系统后占用磁盘空间最大目录)

  • /usr/bin

  • /usr/sbin

  • /usr/lib

  • /usr/include

    • C程序的头文件(header files)
  • /usr/share:结构化的独立的数据

  • /usr/local:第三方应用程序的安装位置,在此目录下又有以下这些目录

    • bin,sbin,lib,lib64,etc,share
/var

存放可变数据文件(variable data files),此目录下的子目录有

  • cache:应用程序缓存数据目录

  • lib:应用程序状态信息

  • local:专用于为/usr/local 下的应用程序存储可变数据

  • lock:锁文件

  • log:日志目录及文件

  • opt:专用于为/opt下的应用程序存储可变数据

  • run:运行中的进程相关的数据,通常用于存储进程PID文件

  • spool:应用程序数据池

  • tmp:保存系统两次重启之间产生的临时数据

  • mail:用户邮箱文件

/proc

用于输出内核与进程信息相关的虚拟文件系统

/sys

用于输出当前系统上硬件设备相关信息的虚拟文件系统

/lost+found

Linux上ext文件系统格式化后默认产生的路径

/selinux

security enhanced Linux,selinux相关的安全策略等信息的存储位置


- Linux上的应用程序的组成部分

二进制程序

/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin

库文件

/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64

配置文件

/etc,/etc/DIRECTORY,/usr/local/etc

帮助文件

/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc


- Linux下的文件类型

  • - (f):普通文件

  • d:目录文件

  • b:块设备文件

  • c:字符设备文件

  • l:符号链接文件(软连接)

  • p:管道文件:fist in,fist out

  • s:套接字文件:socket




- Linux下基本的系统管理类命令

- 关机或重启命令

  • halt,poweroff 关机

  • reboot 重启

    • -f:强制,不调用shutdown
    • -p:切断电源
  • shutdown:

    • shutdown [OPTION] … TIME [MESSAGE]
    • -r:reboot(重启)
    • -h:halt(关机)
    • -c:cancel(取消)
    • TIME:
      • now 立刻
      • +m:相对时间表示法,从命令提交开始多久之后:例如 +3
      • hh:mm:绝对时间表示,指明具体时间
#linux下shutdown命令演示
shutdown -r now  # 立即重启
shutdown -h now  # 立即关机
shutdown -h +5 "shutdown in 5 minutes"  # 五分钟后关机,并向所有的登录用户发送"shutdown in 5 minutes"信息

- 用户信息查看命令

  • whoami:显示当前登录有效用户
[root@dayuanshuai local]# whoami
root

  • who:系统当前所有的登录会话
[root@dayuanshuai local]# who
root     tty1         2020-03-27 22:28
root     pts/2        2020-03-31 10:03 (192.168.200.1)

  • w:系统当前所有的登录会话及所做的操作
[root@dayuanshuai local]# w
 12:49:59 up 2 days, 23:51,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                Fri22   22:51m  0.07s  0.07s -bash
root     pts/2    192.168.200.1    10:03    0.00s  0.24s  0.10s w

Others

  • Macos(unix)资源回收能力好,节省电源,几年不关机都没事。然而Microsoft的系统资源回收能力弱,用几天就必须重启。



- bash基础特性及基础命令

- bash的基础特性

命令历史

  • history

    • 环境变量:
      • HISTSIZE:命令历史记录
      • HISTFILE:~/.bash_history
      • HISTFILESIZE:命令历史文件记录历史的条数
  • history -d OFFSET 删除某天历史命令,OFFSET代表偏移位

[dayuanshuai@dayuanshuai ~]$ history
..... # 前面的命令历史就不一一例举了
  641  ls -al /etc
  642  ls -al /etc | wc -l
  643  find /etc/ | grep "^/etc/[^/]*$" | wc -l
  644  find /etc/ | grep "^/etc/[^/]*$"
  645  ls
  646  exit
  647  history
[dayuanshuai@dayuanshuai ~]$ history -d 645 #删除第645条命令历史,也就是ls命令
[dayuanshuai@dayuanshuai ~]$ history
....
  641  ls -al /etc
  642  ls -al /etc | wc -l
  643  find /etc/ | grep "^/etc/[^/]*$" | wc -l
  644  find /etc/ | grep "^/etc/[^/]*$"
  645  exit
  646  history 
  647  history -d 645
  648  history
 # 可以看到ls命令历史被删除了
  • history -c 清空缓存中的历史命令
[xiao@dayuanshuai ~]$ history
.... #前面的历史省略
   19  rm a
   20  ls
   21  exit
   22  ls
   23  pwd
   24  exit
   25  ls
   26  whoami
   27  history
[xiao@dayuanshuai ~]$ history -c
[xiao@dayuanshuai ~]$ history  #使用history -c 命令后再来查看,发现缓存中的历史命令均已经删除
    1  history 
  • history #:显示历史中最近的#条命令
[xiao@dayuanshuai ~]$ history
    1  history 
    2  whoami
    3  ps
    4  top
    5  wc -l /etc/passwd
    6  history
[xiao@dayuanshuai ~]$ history 3  #查看最近三条命令
    5  wc -l /etc/passwd
    6  history
    7  history 3
  • -a:手动追加 —— 将缓存区中的历史命令手动追加到 ~/.bash_history
[xiao@dayuanshuai ~]$ history
    1  history 
    2  whoami
    3  ps
    4  top
    5  wc -l /etc/passwd
    6  history
    7  history 3
    8  ls -al
    9  history
[xiao@dayuanshuai ~]$ history -a
[xiao@dayuanshuai ~]$ cat ~/.bash_history #这个时候查看你就会发现命令已经被追加至~/.bash_history
  • 调用历史中的命令:
    • !#重复执行第#条命令

    • !!:执行上一条命令

    • !string:最近一条以string开头的命令

[xiao@dayuanshuai ~]$ history
.... # 前面命令省略
   52  whoami
   53  exit
   54  cat ~/.bash_history 
   55  history -a
   56  cat ~/.bash_history 
   57  ps
   58  ls
   59  history
   60  history -a
   61  cat ~/.bash_history 
   62  history 
   63  history -a
   64  history
[xiao@dayuanshuai ~]$ !58  #可以看到已经执行第58条命令 ls
ls
  • 调用上一条命令的最后一个参数
    • !$
    • ESC,.
    • Alt + .
[xiao@dayuanshuai ~]$ touch call.txt
[xiao@dayuanshuai ~]$ echo "call " > !$  #通过 !# 调用 上一条命令的最后一个参数(call.txt)
echo "call " > call.txt
[xiao@dayuanshuai ~]$ cat call.txt  #可以看到call已经被添加进去了
call

先按 ESC 然后再按 . 就会出现上一条命令的最后一个参数,比如:

先执行 touch ABC.TXT

后在键盘上进入 echo “call” > ESC .

就会显示 echo “call” > ABC.TXT的结果


  • 控制命令历史的记录方式

    设置环境变量:HISTCONTROL 来选择命令历史的记录方式,其参数分别有下列三种

  1. ignoredups:忽略重复的命令:连续且相同方为“重复”
  2. ignorespace:忽略所有以空白开头的命令
  3. ignorebothignoredups,ignorespace 也就是前面两种方式的
[xiao@dayuanshuai ~]$ echo $HISTCONTROL 
ignoredups
[xiao@dayuanshuai ~]$ history
   90  whoami
   91  whoami 
   92  history
   93  whoami
   94  history
[xiao@dayuanshuai ~]$ ls
call.txt  history_test.txt
[xiao@dayuanshuai ~]$ ls
call.txt  history_test.txt
[xiao@dayuanshuai ~]$ ls
call.txt  history_test.txt
[xiao@dayuanshuai ~]$ ls
call.txt  history_test.txt
[xiao@dayuanshuai ~]$ history #可以看到连续输入了四次ls,但是缓存中的命令历史只记录一次ls命令
   91  whoami 
   92  history
   93  whoami
   94  history
   95  ls
   96  history
[xiao@dayuanshuai ~]$ HISTCONTROL=ignorespace
[xiao@dayuanshuai ~]$ echo $HISTCONTROL
ignorespace
[xiao@dayuanshuai ~]$  w
 15:10:31 up 3 days,  2:11,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                Fri22   25:12m  0.07s  0.07s -bash
root     pts/0    192.168.200.1    13:07    0.00s  0.13s  0.00s w
[xiao@dayuanshuai ~]$ history  #因为w前面加入了空格,所以并没有加入命令历史
   97  HISTCONTROL=ignorespace
   98  echo $HISTCONTROL
   99  ls
  100  whoami 
  101  history
  • 修改环境变量的方式:export 变量名=“值”

    • 变量赋值:把赋值符号后面的数据存储于变量名指向的内存空间

说明:export 方式修改变量的值只对当前的shell及其子shell起作用。换个终端开启另外一个shell之后就不起作用了。


命令补全

  • bash执行命令:
  1. 内部命令:bash内置的命令有cd、set、umask等,查看一个命令的类型可以通过type查看
[xiao@dayuanshuai ~]$ type cd
cd is a shell builtin
  1. 外部命令:bash根据PATH环境变量定义的路径,自左向右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即为要执行的命令
  • 直接补全:Tab,用户给定的字符串只有一条唯一对应的命令,如果以用户给定的字符串为开头的命令不唯一,则再次按Tab键会给出列表

    • 路径补全:把用户给出的字符串当作路径开头,并在其指定的上级目录下搜索以指定的字符串开头的文件名
      - 如果唯一:则直接补全
      • 如果不唯一:再次按Tab键,给出列表
    [xiao@dayuanshuai ~]$ ls /etc/sys #路径补全的例子
    sysconfig/          sysctl.d/           system-release-cpe  
    sysctl.conf         system-release
    
    • 命令行展开

      • ~:展开为用户的主目录
        • ~USERNAME:展开为指定用户的主目录
  • {}可承载一个以逗号分隔的列表,并将其展开为多个路径

[xiao@dayuanshuai ~]$ ls
[xiao@dayuanshuai ~]$ touch file{1..4}.txt
[xiao@dayuanshuai ~]$ ls
file1.txt  file2.txt  file3.txt  file4.txt
  • 命令的执行结果状态

    成功

    失败

    bash使用特殊变量$?保存一条命令的执行状态结果:

    0:成功

    1-255:失败

[xiao@dayuanshuai ~]$ echo $? 
0
[xiao@dayuanshuai ~]$ sdfsadf
-bash: sdfsadf: command not found
[xiao@dayuanshuai ~]$ echo $? #通过echo $? 即可查看上一条命令的执行是否成功
127
  1. 目录管理、操作类命令
  • cd、pwd、ls
  • mkdir,rmdir
  • mkdir /etc/a/b/c/d;mkdir [OPTIONS] /path/to/somethere
    • 对于mkdir 来说目录和文件是一类东西,是不可以重名的。所以在Linux的同一目录下目录名和文件名不能重名
    • - p 创建目录,如果重名不会报错,同时可以递归创建目录
    • -v 可以显示目录的创建详细过程
    • - m MORE:创建目录时直接指定权限
[xiao@dayuanshuai ~]$ mkdir file
[xiao@dayuanshuai ~]$ touch file
[xiao@dayuanshuai ~]$ ls -l  #可以看到,我们创建了一个名叫file的目录,之后又创建一个file的文件,最后显示目录下只有一个名为file的目录 —— 因为同一目录下目录名和文件名不能重名
总用量 4
drwxrwxr-x. 2 xiao xiao 4096 3月  31 15:39 file
[xiao@dayuanshuai ~]$ mkdir -m 644 dire  #创建一个目录,其权限为644
[xiao@dayuanshuai ~]$ ls -ld dire  #查看该目录权限,发现该目录权限即为644
drw-r--r--. 2 xiao xiao 4096 3月  31 15:46 dire
  • rmdir 删除空目录
    • rmdir [OPTION]… [DIRECTORY]
    • -p 递归删除空目录
  • tree 显示树状文件结构
    • -d 仅显示目录
    • -L 显示树状结构可达到的层级
[root@dayuanshuai ~]# tree -d -L 2 /home/  #查看/home目录下的目录,层级为2层
/home/
├── dayuanshuai
│   ├── day04
│   ├── day1
│   ├── day2
│   ├── day3
│   └── day4
└── xiao
    ├── dire
    └── file

9 directories
  1. 文件查看类命令

cat,tac,more,less,tail,head

  • more [OPTION] FILE…
    • -d:显示翻页及退出提示
    • -num 一次显示的行数
    • +num 从第num行开始显示
[root@dayuanshuai tmp]# ls -l /etc | grep --color "^-" | sort -n -t' ' -k 6  #将/etc/目录下的文件按大小进行分类
-rw-r-----.  1 root root   3181 6月   7 2017 sudo-ldap.conf
-r-xr-----.  1 root root   3756 3月  29 16:56 sudoers
-rw-r--r--.  1 root root   4113 11月 29 2017 DIR_COLORS.lightbgcolor
-rw-r--r--.  1 root root   4439 11月 29 2017 DIR_COLORS
-rw-r--r--.  1 root root   4940 3月  22 2017 man.config
-rw-r--r--.  1 root root   5139 11月 29 2017 DIR_COLORS.256color
-rw-r--r--.  1 root root   6455 1月  12 2010 protocols
-rw-r--r--.  1 root root   8120 8月  31 2019 kdump.conf
-rw-r--r--.  1 root root  12288 8月  31 2019 aliases.db
-rw-r--r--.  1 root root  26168 9月  16 2019 ld.so.cache
-rw-r--r--.  1 root root 641020 3月  22 2017 services
#现在我们知道该目录占用磁盘空间最大的文件是services文件
[root@dayuanshuai tmp]# more -5 /etc/services #一次显示五行
# 进入文件视图模式之后的基本操作
空格			翻页
enter 		默认向下翻一行
3 enter		向下翻3行
b			向上翻1页
  • less

    • less [OPTIONS…] FILE…
[root@dayuanshuai tmp]# less /etc/services
#进入文件视图界面下的基本操作 —— 不需要记住太多,记太多你记不住。同时页掌握不牢靠。够用就行。
空格		向下翻一页
b		 向上翻一页
d		 向屏幕下方移动半屏
u		 向屏幕上方移动半屏
G		 移动到最后一行
g		 移动到第一行
q		 退出
170g	 移动到第170行
/STRING  在文本中向下查找字符串
?STRING	 在文本中向上查找字符串
n		 正向重复前一个搜索
N		 反向重复前一个搜索
[root@dayuanshuai tmp]# less -N /etc/services #进入文件视图模式时,显示其行号
  • head
    • head [OPTION]… [FILE]…
      • -c #:获取前#字节
      • -n #:指定获取前#行
[root@dayuanshuai tmp]# head -10 /etc/services 显示该文件的前十行
  • tail
  • tail [OPTION]… [FILE]…
    • -c #:指定获取后#字节
    • -n #:指定获取后#行
      • -#:指定获取后#行
    • -f:跟踪显示文件新追加的内容
[root@dayuanshuai tmp]# tail -5 /etc/services  #显示文件最后5行
blp5            48129/udp               # Bloomberg locator
com-bardac-dw   48556/tcp               # com-bardac-dw
com-bardac-dw   48556/udp               # com-bardac-dw
iqobject        48619/tcp               # iqobject
iqobject        48619/udp               # iqobject
  1. 文件的时间戳管理工具
  • touch
  • 文件:metadata,data
    • 查看文件状态:stat
    • 三个时间戳:
      • access time:访问时间,简写atime
      • modify time:修改时间,mtime
      • change time:改变时间,ctime
  • touch命令
    • touch [OPTION]… FILE…
      • -a:only atime(修改了atime也修改了ctime)
      • -m:only mtime(修改了mtime也修改了ctime)
      • -t STAMP:
        • [[CC]YY]MMDDhhmm[.ss]
      • -c:如果文件不存在,则不予创建
      • touch -r a b 将b的时间戳更新为和a一样的时间戳
[xiao@dayuanshuai ~]$ stat a.txt  #查看文件状态信息
  File: "a.txt"
  Size: 2               Blocks: 8          IO Block: 4096   普通文件
Device: 803h/2051d      Inode: 261693      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  501/    xiao)   Gid: (  501/    xiao)
Access: 2020-03-31 17:27:29.602775058 +0800
Modify: 2020-03-31 17:27:29.602775058 +0800
Change: 2020-03-31 17:27:29.602775058 +0800
[xiao@dayuanshuai ~]$ touch -a -t 200011121223.30 a.txt  #修改文件的访问信息
[xiao@dayuanshuai ~]$ stat a.txt 	#再次查看发现,文件访问时间已经变成我们设置的时间
  File: "a.txt"
  Size: 2               Blocks: 8          IO Block: 4096   普通文件
Device: 803h/2051d      Inode: 261693      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  501/    xiao)   Gid: (  501/    xiao)
Access: 2000-11-12 12:23:30.000000000 +0800
Modify: 2020-03-31 17:27:29.602775058 +0800
Change: 2020-03-31 17:28:27.296778801 +0800
[xiao@dayuanshuai ~]$ touch -r a.txt b.txtt     #将b.txt的时间戳更新为和a.txt一样
[xiao@dayuanshuai ~]$ stat b.txtt 
  File: "b.txtt"
  Size: 0               Blocks: 0          IO Block: 4096   普通空文件
Device: 803h/2051d      Inode: 261694      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  501/    xiao)   Gid: (  501/    xiao)
Access: 2000-11-12 12:23:30.000000000 +0800
Modify: 2020-03-31 17:34:33.034770458 +0800
Change: 2020-03-31 17:35:41.047772633 +0800



- 练习

  1. 创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b,/tmp/x/y2/a,/tmp/x/y2/b
[root@dayuanshuai ~]# mkdir -p /tmp/x/{y1,y2}/{a,b} 
[root@dayuanshuai tmp]# tree -d -L 2 /tmp/x/
/tmp/x/
├── y1
│   ├── a
│   └── b
└── y2
    ├── a
    └── b

6 directories

  1. 如何创建x_m,y_m,x_n,y_n
[xiao@dayuanshuai ~]$ mkdir {x,y}_{m,n}
[xiao@dayuanshuai ~]$ ls
x_m  x_n  y_m  y_n

  1. 如何创建/tmp/bin,/tmp/sbin,/tmp/usr,/tmp/usr/bin,/tmp/usr/sbin
[xiao@dayuanshuai tmp]$ mkdir -p /tmp/{bin,sbin,usr/{bin,sbin}} 
[root@dayuanshuai tmp]# tree -d /tmp/  #可以看到创建成功
/tmp/
├── bin
├── sbin
└── usr
    ├── bin
    └── sbin

5 directories

- 扩展

执行history命令查看历史命令时,让其显示时间

  • 方法一:临时生效
[xiao@dayuanshuai ~]$ HISTTIMEFORMAT='%F %T' #复制变量
[xiao@dayuanshuai ~]$ history  #查看命令
  185  2020-03-31 17:35:41touch -r a.txt b.txtt 
  186  2020-03-31 17:35:46stat b.txtt 
  187  2020-03-31 17:36:58stat a.txt 
  188  2020-03-31 17:37:04touch c.txt
  189  2020-03-31 17:37:19stat c.txt 
  190  2020-03-31 17:37:32touch -r a.txt c.txt 
  191  2020-03-31 17:37:35stat c.txt 
  192  2020-03-31 17:37:39stat a.txt 
  193* 2020-03-31 17:42:34unset HISTT
  194  2020-03-31 17:42:39history
  195  2020-03-31 17:43:39unset HISTTIMEFORMAT 
  196  2020-03-31 17:43:43history
  197  2020-03-31 17:49:32HISTTIMEFORMAT='%F %T'
  198  2020-03-31 17:49:38history 
  199  2020-03-31 17:50:26history
# 现在可以看到命令前面的均有时间戳了
[xiao@dayuanshuai ~]$ unset HISTTIMEFORMAT #取消命令前的时间戳
  • 方法二:永久生效
  1. 编辑 ~/.bashrc文件

  2. 在文件末尾加入 export HISTTIMEFORMAT=’%F %T’

  3. 执行 source ~/.bashrc ,即可永久生效

  • 取消命令前显示时间戳的方法
  1. unset HISTTIMEFORMAT
  2. 编辑 ~/.bashrc文件
  3. 删除export HISTTIMEFORMAT=’%F %T’



- 写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容运维 | 网工 | 软件技巧
  • 对于我文章的不足之处,欢迎您能批评指正!谢谢!
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

在这里插入图片描述

发布了5 篇原创文章 · 获赞 1 · 访问量 375

猜你喜欢

转载自blog.csdn.net/weixin_41633902/article/details/105678252