目录

一. 用户和用户组管理

1.1 新增组的命令groupadd

1.2 删除组的命令groupdel

1.3 增加用户的命令useradd

1.4 删除账户的命令userdel

二. 用户密码管理

2.1 认识/etc/passwd和/etc/shadow

2.2 /etc/passwd解说

2.3 使用命令chfn更改用户的finger

2.4 /etc/shadow解说

2.5 命令passwd

三. 用户身份切换

3.1 命令su

3.2 命令sudo

3.3 不允许root远程登录Linux

四. 更改文件权限

4.1 命令chmod

4.2 命令umask

4.3 命令chgrp

4.4 命令chown


Linux系统是一个多用户系统,每个账号用来干什么,我们必须了如指掌,因为这涉及安全问题。

安装完系统后,我们就一直使用root账号来操作,其实这并不安全。因为root账号权限太高,容易误操作。建议你以后在工作中尽量避免直接使用root账号登录系统,使用普通用户也可以完成大部分工作。

一. 用户和用户组管理

1.1 新增组的命令groupadd

命令groupadd的格式为 groupadd [-g GID] groupname,示例命令如下:

# groupadd grptest1
# tail -n1 /etc/group
grptest1:x:1003:

如果不加-g选项,则按照系统默认的gid创建组。跟uid一样,gid也是从1000开始的。我们也可以按如下操作自定义gid

# groupadd -g 1008 grptest2
# tail -n2 /etc/group
grptest1:x:1003:
grptest2:x:1008:

1.2 删除组的命令groupdel

有时,我们会有删除组的需求,此时可进行如下操作:

# groupdel grptest2
# tail –n2 /etc/group
user1:x:1002:
grptest1:x:1003:

命令groupdel没有特殊选项,但有一种情况不能删除组,如下所示:

# groupdel user1
groupdel:不能移除用户“user1”的主组

上例中,user1组中包含user1账户,只有删除user1账户后才可以删除该组。

1.3 增加用户的命令useradd

从字面意思上来看,useradd就是增加用户,该命令的格式为useradd,其中各个选项的具体含义如下。

  • -u:表示自定义UID。
  • -g:表示使新增用户属于已经存在的某个组,后面可以跟组id,也可以跟组名。
  • -d:表示自定义用户的家目录。

下面我们先来新建一个用户test10,示例命令如下:

# useradd test10
# tail -n1 /etc/passwd
test10:x:1002:1004::/home/test10:/bin/bash
# tail -n1 /etc/group
test10:x:1004:

如果useradd不加任何选项,直接跟用户名,则会创建一个跟用户名同名的组。当然,很多时候需要我们自己去定义uidgid或者所属的组,示例命令如下:

# useradd -u1005 -g 1004  user11
# useradd -u1006 -g grptest1 user12

1.4 删除账户的命令userdel

命令userdel的格式为userdel [-r] username,其中-r选项的作用是,当删除用户时,一并删除该用户的家目录。下面我们先来看看user12的家目录,示例命令如下:

# ls -ld /home/user12
drwx------ 3 user12 grptest1 4096 5月  11 07:12 /home/user12

如果不加-r选项,则会直接删除用户user12,但保留其家目录,如下所示:

# userdel user12
# ls -ld /home/user12
drwx------ 3 user12 grptest1 78 2月  18 18:46 /home/user12

此时user12的家目录还在,那么我们再加上-r选项删除user1用户,如下所示:

# ls -ld /home/user1
drwx------ 3 user1 user1 78 2月  18 11:31 /home/user1
# userdel  -r user1
# ls -ld /home/usre1
ls: 无法访问/home/user1: 没有那个文件或目录

此时user1的家目录已经不复存在。


二. 用户密码管理

密码对于一个用户来说是非常关键的,而密码管理也是系统管理员的一项非常重要的任务。

2.1 认识/etc/passwd和/etc/shadow

这两个文件可以说是Linux系统中最重要的文件之一。如果没有这两个文件或者这两个文件出了问题,则无法正常登录系统。下面咱们先来看看/etc/passwd文件,示例命令如下:

# cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

  head前面的符号|,我们称为管道符,它的作用是把前面的命令的输出再输入给后面的命令。cat /etc/passwd | head 代表显示文件的前10行。

2.2 /etc/passwd解说

/etc/passwd由:分割成7个字段,每个字段的具体含义如下所示。

  • 第1个字段为用户名(如第1行中的root就是用户名),它是代表用户账号的字符串。用户名中的字符可以是大小写字母、数字、减号(不能出现在首位)、点或下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位。另外,减号也不建议使用,容易造成混淆。
  • 第2个字段存放的是该账号的口令。这里为什么是x呢?早期的Unix系统口令确实存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,这里只用一个x代替。
  • 第3个字段为一个数字,这个数字代表用户标识号,也称为uid。系统就是通过这个数字识别用户身份的。这里的0就是root,也就是说我们可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。uid的取值范围是0~65535,0是超级用户(root)的标识号,CentOS 7的普通用户标识号从1000开始。如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于1000的。
  • 第4个字段也是数字,表示组标识号,也称为gid。这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd基本类似。
  • 第5个字段为注释说明,没有实际意义。通常记录该用户的一些属性,例如姓名、电话、地址等。
  • 第6个字段为用户的家目录,当用户登录时,就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,用户家目录是可以自定义的。
  • 最后一个字段为用户的shell。用户登录后,要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有sh、csh、ksh、tcsh、bash等多种,而Red Hat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash,还有很多/sbin/nologin,它表示不允许该账号登录。如果想建立一个不允许登录的账号,可以把该字段改成/sbin/nologin,默认是/bin/bash。

2.3 使用命令chfn更改用户的finger

  chfn(change finger的简写)命令用于更改用户的finger,这里只简单介绍一下。finger其实就是在/etc/passwd文件第5个字段中显示的信息,那么如何去设定这个信息呢?这就要用到chfn命令了,其具体用法如下:

# chfn user11
Changing finger information for user11.
名称 []: user11
办公 []: user11's office
办公电话 []: 12345678
住宅电话 []: 78654312
Finger information changed.

  chfn命令可以修改用户的finger信息,比如nameofficeoffice phone以及home phone。修改完后,就会在/etc/passwd文件user11的那一行的第5个字段中看到相关信息了。

2.4 /etc/shadow解说

/etc/shadow和/etc/passwd类似,由:分割成9个字段,示例命令如下:

# cat /etc/shadow |head -n 3
root:$6$QjKfx0Vu$OAsBzIKnzEwsUMfsEvxEvHMqK4ZWJ6MzAG/eMDoArh8rqvqKtYkDcCghHmKb9B7m1COBn5GqKZPqSaoYCtKhY/:17212:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::

每个字段的含义如下所示。

  • 第1个字段为用户名,与/etc/passwd对应。
  • 第2个字段为用户密码,是该账号的真正密码。这个密码已经加密,但是有些黑客还是能够解密的。所以,将该文件属性设置为000,但root账户是可以访问或更改的。
  • 第3个字段为上次更改密码的日期,这个数字以1970年1月1日和上次更改密码的日期为基准计算而来。例如,上次更改密码的日期为2012年1月1日,则这个值就是365* (2012-1970)+(2012-1970)/4+1=15341。如果是闰年,则有366天。
  • 第4个字段为要过多少天才可以更改密码,默认是0,即不受限制。
  • 第5个字段为密码多少天后到期,即在多少天内必须更改密码。例如,这里设置成30,则30天内必须更改一次密码;否则,将不能登录系统。默认是99999,可以理解为永远不需要改。
  • 第6个字段为密码到期前的警告期限。若这个值设置成7,则表示当7天后密码过期时,系统就发出警告,提醒用户他的密码将在7天后到期。
  • 第7个字段为账号失效期限。如果这个值设置为3,则表示密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,这个账号便失效,即锁定。
  • 第8个字段为账号的生命周期。跟第3个字段一样,这个周期是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号将作废。
  • 最后一个字段作为保留用的,没有什么意义。

2.5 命令passwd

为用户设置密码时,可以使用命令passwd,其格式为passwd [username]。该命令后面若不加用户名字,则是为自己设定密码,示例命令如下:

# passwd
更改用户root的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

如果你登录的是root账户,后面可以跟普通账户的名字,意思是修改指定账户的密码,示例命令如下:

# passwd user11
更改用户 user11 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

需要注意的是,只有root才可以修改其他账户的密码,普通账户只能修改自己的密码。


三. 用户身份切换

Linux系统中,有些事情只有root用户才能做,普通用户是不能做的,这时就需要临时切换到root身份了。下面我们做一个小试验,创建test账户,并修改其密码,这样我们就可以使用test账户登录Linux了。具体操作方法如下:

# useradd test
# passwd test
更改用户 test 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。

然后用test账户登录Linux,示例命令如下:

login as: test
test@192.168.188.128's password:
$ whoami
test

登录后,使用whoami命令查看,发现当前用户是test。普通用户和root用户的shell提示符号有些区别,root账户是#,普通用户是$。

3.1 命令su

命令su的格式为su [-] username,普通用户的su命令不加username时,就是切换到root用户。当然,root用户同样可以使用su命令切换到普通用户。

该命令后面可以跟-,也可以不跟。加上-后,会初始化当前用户的各种环境变量。

接下来做个简单的试验来说明加与不加-的区别,示例命令如下:

$ pwd
/home/test
$ su
密码:
# pwd
/home/test
# exit
登出
$ su -
密码:
# pwd
/root

如果不加-切换到root账户时,当前目录没有变化;而加上-切换到root账户时,当前目录为root账户的家目录。这跟直接登录root账户是一样的。当由root切换到普通用户时,是不需要输入密码的。

3.2 命令sudo

su可以切换用户身份,而且,如果每个普通用户都允许切换到root身份,那就需要每个每个普通用户都知道root密码。如果某个用户不小心泄漏了root的密码,那岂不是系统非常不安全?没错,为了改进这个问题,Linux系统工程师设计了sudo这个命令。使用sudo命令执行一个只有root才能执行的命令是可以办到的,但是需要输入密码。这个密码并不是root的密码,而是用户自己的密码。

默认情况下,只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的。使用visudo命令编辑/etc/sudoers配置文件(必须要使用root用户,如果没有visudo这个命令,请使用命令yum install -y sudo安装。),在文档中加入一行(test ALL=(ALL) ALL)

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       ALL

此时可以验证一下test账户的权限了,方法如下(如下操作是在root账号下进行的):

# su test
$ ls  //当前目录是在/root下
ls: 无法打开目录.: 权限不够
$ sudo ls
We trust you have received the usual lecture from the local system
Administrator. It usually boils down to these three things:#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.
[sudo] password for test:
123  456  anaconda-ks.cfg  Desktop  Documents  Downloads  initial-setup-ks.cfg  Music  Pictures  Public  Templates  Videos

由于切换到test账户后当前目录还是/root,test账户没有任何权限,所以使用命令ls查看时,提示权限不够。然而使用命令sudo ls输入test账户自身的密码后,就有权限了。初次使用sudo命令时,会出现上面的一大段提示,当再次使用sudo命令时则不再提示。

如果每增加一个用户就设置一行,这样太麻烦了,所以可以这样设置:把# %wheel ALL=(ALL) ALL前面的#去掉,让这一行生效。它的意思是,wheel这个组的所有用户都拥有了sudo的权利。接下来,只要把需要设置sudo权限的所有用户加入到wheel这个组中即可。如下所示:

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

3.3 不允许root远程登录Linux

/etc/ssh/sshd_config为sshd服务的配置文件,默认允许root账户通过ssh远程登录Linux。要想不允许root用户远程登录Linux,具体操作方法为:修改配置文件/etc/ssh/sshd_config,在文件中查找#PermitRootLogin yes并修改为 PermitRootLogin no。保存配置文件后,需要重启sshd服务,如下所示:

# systemctl restart sshd.service

需要注意的是,这个方法只适用于通过ssh远程登录Linux的情况。


四. 更改文件权限

4.1 命令chmod

Linux的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

为了方便更改文件的权限,Linux使用数字代替rwx,具体规则为:r等于4,w等于2,x等于1,-等于0。

例如,rwxrwx---用数字表示就是770,其具体算法为:rwx=4+2+1=7rwx=4+2+1=7---=0+0+0=0

命令chmod(change mode的简写)用于改变用户对文件/目录的读写执行权限,其格式为:chmod [-R] xyz 文件名(这里的xyz表示数字,-R 表示递归操作)。

# ls -ld dir3
drwxr-xr-x 2 user1 testgroup 19 2月  18 11:31 dir3# ls -l dir3
总用量 0
-rw-r--r-- 1 user1 testgroup 0 2月  18 11:31 test3# chmod 750 dir3
# ls -ld dir3
drwxr-x--- 2 user1 testgroup 19 2月  18 11:31 dir3
# ls -l dir3/test3
-rw-r--r-- 1 user1 testgroup 0 2月  18 11:31 dir3/test3# chmod 700 dir3/test3
# ls –l dir3/test3
-rwx------ 1 user1 testgroup 0 2月  18 11:31 dir3/test3# chmod -R 700 dir3
# ls -ld dir3
drwx------ 2 user1 testgroup 19 2月  18 11:31 dir3
# ls -l dir3
总用量 0
-rwx------ 1 user1 testgroup 0 2月  18 11:31 test3

  chmod还支持使用rwx的方式来设置权限。从之前的介绍中可以发现,基本上就9个属性。我们可以使用ugo来分别表示usergroupothers的属性,用a代表all(即全部)。示例命令如下:

# chmod u=rwx,og=rx dir3/test3
# ls -l dir3/test3
-rwxr-xr-x 1 user1 testgroup 0 2月  18 11:31 dir3/test3# chmod a=x dir3/test3
# ls -l dir3/test3
---x--x--x 1 user1 testgroup 0 2月  18 11:31 dir3/test3

这样可以把dir3/test3的文件权限修改为rwxr-xr-x。此外,我们还可以针对ugoa,增加或者减少它们的某个权限(读、写或执行),示例命令如下:

# chmod u-x dir3/test3
# ls -l dir3
总用量 0
-rw-r-xr-x 1 user1 testgroup 0 2月  18 11:31 test3# chmod a-x dir3/test3
# ls -l dir3/test3
-rw-r--r-- 1 user1 testgroup 0 2月  18 11:31 dir3/test3# chmod u+x dir3/test3
# ls -l dir3/test3
-rwxr--r-- 1 user1 testgroup 0 2月  18 11:31 dir3/test3

4.2 命令umask

默认情况下,目录的权限值为755,普通文件的权限值为644,那么这个值是由谁规定的呢?究其原因,便涉及umask了。

命令umask用于改变文件的默认权限,其格式为:umask xxx(这里的xxx代表3个数字)。如果要查看umask的值,只要在命令行输入umask,然后回车即可,如下所示:

# umask
0022

这里umask的预设值是0022,这表示什么含义呢?咱们先来看以下两条规则。

  • 若用户建立普通文件,则预设没有可执行权限,只有rw两个权限,最大值为666(-rw-rw-rw-)。
  • 若用户建立目录,则预设所有权限均开放,即777(drwxrwxrwx)。

  umask数值代表的含义为以上两条规则中的默认值(文件为666,目录为777)需要减掉的权限,所以:

目录的权限为rwxrwxrwx – ----w--w- = rwxr-xr-x
普通文件的权限为rw-rw-rw- – ----w--w- = rw-r--r--

  umask的值是可以自定义的,比如设定umask为002,你再创建目录或者文件时,默认权限分别为:

rwxrwxrwx – -------w- = rwxrwxr-x(目录的权限)
rw-rw-rw- – -------w- = rw-rw-r--(文件的权限)

示例命令如下:

# umask 002
# mkdir dir4
# ls -ld dir4
drwxrwxr-x 2 root root 6 2月  18 13:43 dir4
# touch test4
# ls -l test4
-rw-rw-r-- 1 root root 0 2月  18 13:45 test4

这里我们可以看到创建的目录的默认权限变为775,而文件的默认权限变为664。如果要把umask改回来,具体操作方法如下:

# umask 022
# touch test5
# ls -l test5
-rw-r--r-- 1 root root 0 2月  18 13:45 test5

  umask可以在/etc/bashrc里面更改,默认情况下,root的umask为022,而一般使用者则为002。可写的权限非常重要,因此预设会去掉写权限。系统里面是4位,而我们讲的umask是3位,因为最前面还有一个0,这个0加与不加没有影响,它表示umask数值是八进制的。

4.3 命令chgrp

  chgrp(change group的简写)命令可以更改文件的所属组,其格式为:chgrp [组名] [文件名],示例命令如下:

# groupadd testgroup
# mkdir /tmp/4_6  //创建实验用的目录
# cd /tmp/4_6
# touch test1
# ls -l test1
-rw-r--r-- 1 root root 0 2月  18 11:16 test1
# chgrp testgroup test1
# ls -l test1
-rw-r--r-- 1 root testgroup 0 2月  18 11:16 test1

上例中用到了groupadd命令,其含义为增加一个用户组。

chgrp命令还可以更改目录的所属组,示例命令如下:

# mkdir dir2
# touch dir2/test2
# ls –ld dir2
drwxr-xr-x 2 root root 6 2月  18 11:19 dir2
# chgrp testgroup dir2
# ls -ld dir2
drwxr-xr-x 2 root testgroup 6 2月  18 11:19 dir2
# ls –l dir2
总用量 0
-rw-r--r-- 1 root root 0 2月  18 11:19 test2

上例中,chgrp命令只更改了目录本身,而目录下的文件并没有更改。如果要想级联更改子目录以及子文件,加-R选项可以实现,示例命令如下:

# chgrp -R testgroup dir2
# ls -l dir2
总用量 0
-rw-r--r-- 1 root testgroup 0 2月  18 11:25 test2

chgrp命令不常用,因为还有一个命令可以替代它,那就是chown

4.4 命令chown

  chown(change owner的简写)命令可以更改文件的所有者,其格式为:chown [ -R ] 用户名 文件名或者chown [ -R ] 账户名:组名 文件名。这里的-R选项只适用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件也全部更改。示例命令如下:

# mkdir dir3
# useradd user1    // 创建用户user1,useradd命令会在5.2.3节中介绍
# touch dir3/test3   // 在dir3目录下创建test3文件
# chown user1 dir3
# ls -ld dir3    // dir3目录所有者已经由root改为user1
drwxr-xr-x 2 user1 root 19 2月  18 11:31 dir3
# ls -l dir3    // 但是dir3目录下的test3文件的所有者依旧是root
总用量 0
-rw-r--r-- 1 root root 0 2月  18 11:31 test3
# chown -R user1:testgroup dir3
# ls -l dir3
总用量 0
-rw-r--r-- 1 user1 testgroup 0 2月  18 11:31 test3

上例中,chown -R user1:testgroup会把test目录以及该目录下的文件都修改成所有者为user1,所属组为testgroup。

Linux操作系统——系统用户与用户组管理相关推荐

  1. Linux云计算架构-用户及用户组管理

    文章目录 Linux云计算架构-用户及用户组管理 1. 用户管理命令 1. 查看用户信息 2. 添加用户 3. 添加组 4. 修改用户信息 5. 修改组信息 6. 删除用户 7. 删除组 8. 用户密 ...

  2. 2019/12/11学习内容摘要(Linux系统用户与用户组管理①)

    一,认识/etc/passwd和/etc/shadow 1. /etc/passwd :文件中保存系统中所有的用户和用户的主要信息. 在命令行输入 cat /etc/passwd  | head  ( ...

  3. linux管理用户和组实验报告,LINUX实验:用户与用户组管理

    实验:用户与用户组管理 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 熟悉Linux操作系统中的用户和组的概念,掌握Linux操作系统中用户管理,理解用户管理涉及的系统配置文件. 二.实 ...

  4. Linux下的用户与用户组管理命令(含上机作业)

    文章目录 用户与用户组管理 一.用户与组文件目录 1.用户账号文件--/etc/passwd 2.用户影子文件--shadow 3.用户组账号文件--group和gshadow 4.使用pwck和gr ...

  5. 2020.3.6Linux系统用户与用户组管理

    认识/etc/passwd和/etc/shadow /etc/passwd文件中: head前面的符号 | 称为管道符,作用是把前面的命令的输出再输入给后面的命令. /etc/passwd由" ...

  6. linux入门教程(七) linux系统用户以及用户组管理

    关于这部分内容,笔者在日常的linux系统管理工作中用到的并不多,但这并不代表该内容不重要.毕竟linux系统是一个多用户的系统,每个账号都干什么用,你必须了如指掌.因为这涉及到一个安全的问题. [认 ...

  7. 【身份鉴别-身份标识】Linux系统用户及用户组管理

    目录 1 认识/etc/passwd 和 /etc/shadow 1.1 /etc/passwd 1.2 /etc/shadow 2 新增/删除用户和用户组 2.1 新增一个组 2.2 删除组 3 c ...

  8. Linux系统用户与用户组管理

    3.1用户配置文件和密码配置文件 用户的配置文件在/etc/passwd:文件权限见下图: 用户的配置文件/etc/passwd内的每一行代表一个用户.用户又划分三类,如下: 第一类 超级用户(系统管 ...

  9. Linux学习总结(十六)系统用户及用户组管理

    先来认识两个文件 /etc/passwd /etc/shadow 我们打印出首尾三行,来了解下: 每行由:分割为7段,每段含义为: 第一段:用户名,比如root 用户,普通用户test,lv,test ...

最新文章

  1. sql按条件进行批量查询或update的关键字in
  2. 2018 Multi-University Training Contest 7
  3. 文巾解题 面试题 01.06. 字符串压缩
  4. Mysql 的 聚簇索引和二级索引
  5. Linux 查看显存带宽,Vega 20规格与Vega 10相近,显存带宽翻倍,但目前只能跑Linux - 超能网 - IT帮...
  6. ubuntu下docker环境、php环境以及laravel的安装
  7. 使用Jenkins来发布和代理.NetCore项目
  8. 阿里云:助力数字经济新基建,打造物联网安全基石
  9. java中的URLConnection
  10. ELK 6下日志平台监控Nginx日志构建实践
  11. linux 配置redis密码
  12. SketchUp Pro 2021 v21.0.391 草图大师安装说明
  13. 浅层砂过滤器 全自动浅层介质过滤系统
  14. 模型运行速度FPS测试以及参数Parameter计算代码
  15. aardio - 虚表库全新升级,支持图片系列专题
  16. 自动登陆qq空间代码
  17. 狂神说Java系列视频教程之docker(记录到swarm安装)
  18. Python123-练习题
  19. python并发编程书籍推荐_《吐血整理》-顶级程序员书单集
  20. Vmware上安装openstack(Queens版)

热门文章

  1. 带宽和下载速率 及 给你一天的流量 大概计算出 需要多少带宽
  2. Nexus 搭建及基础使用
  3. 新闻源是什么意思?怎么样才能做好新闻源软文推广?
  4. 简约素雅公司企业简介PPT模板
  5. 利用txt索引图像路径或直接对目录下的图像进行逐一测试
  6. 46个不可不知的常识收藏
  7. 由于找不到服务器或出现DNS错误
  8. 微信小程序——章节自测六
  9. [数据分析与可视化] ​数据绘图要点5-误差线的问题
  10. [work] 如何理解泛函以及变分