Linux用户和权限管理看了你就会用啦-程序员宅基地

前言

只有光头才能变强

回顾前面:

没想到上一篇能在知乎获得千赞呀,Linux也快期末考试了,也有半个月没有写文章了。这篇主要将Linux下的用户和权限知识点再整理一下。

那么接下来就开始吧,如果文章有错误的地方请大家多多包涵,不吝在评论区指正哦~

一、Linux下的用户

Linux是一个多用户的系统,我们可以多个用户同时登陆Linux~

  • 账户实质上就是一个用户在系统上的标识

Linux中的账户包括

  • 用户账户
    • 普通用户账户:在系统上的任务是进行普通工作
    • 超级用户账户(或管理员账户):在系统上的任务是对普通用户和整个系统进行管理。
  • 组账户(组是用户的集合)
    • 标准组:标准组可以容纳多个用户
    • 私有组:私有组中只有用户自己

当一个用户同属于多个组时,将这些组分为

  • 主组(初始组):用户登录系统时的组。
  • 附加组:登录后可切换的其他组

上面也说了,账户的实质上就是用户在系统上的标识,这些标识是用文件保存起来的:

  • 用户名和 UID 被保存在/etc/passwd文件中,文件权限 (-rw-r--r--)
  • 组和GID 被保存在 /etc/group文件中,文件权限(-r--------)
  • 用户口令(密码)被保存在 /etc/shadow文件中 ,文件权限(-rw-r--r-- )
  • 组口令被保存在 /etc/gshadow文件中 ,文件权限 (-r--------)

也就是说:我们创建的用户,这个用户的信息由不同的文件来保存着

AdWRQDe.png

B9miqDC.png

163eecd1986a7b85?w=1014&h=722&f=png&s=75426

163eecd19c5e4e0c?w=1013&h=687&f=png&s=70609

有了上面的知识点,下面我来简述一下创建用户的时候会发生什么:

  • 用户名和 UID 被保存在 /etc/passwd 这个文件中,用户的口令通常用shadow passwords保护
  • 当用户登录时,他们被分配了一个主目录和一个运行的程序(通常是 shell)
  • 若没有指定他所属于的组,RHEL/CentOS就建立一个和该用户同名的私有组,且用户被分配到这个私有组中

再来回顾一下:账户的实质上就是用户在系统上的标识,这些标识是用文件保存起来的。也就是说:我们是可以直接编辑修改系统账户文件来维护账户

  • 但是不建议这样做,如果明确要这样做的话,最好使用命令检测一下你编辑的语法是否有问题:
    • pwck:验证用户账号文件,认证信息的完整性。该命令检测文件“/etc/passwd”“/etc/shadow” 的每行中字段的格式和值是否正确
    • grpck:验证组账号文件,认证信息的完整性。该命令检测文件“/etc/group”“/etc/gshadow”的每行中字段的格式和值是否正确。

既然不建议我们直接编辑文件的方式来管理用户,那么Linux是肯定有现成的命令给我们使用的:

1.1管理Linux用户的命令

用户管理

  • useradd
  • usermod
  • userdel

组管理

  • groupadd
  • groupmod
  • groupdel

批量管理用户

  • 成批添加/更新一组账户:newusers
  • 成批更新用户的口令:chpasswd

组成员管理

  • 向标准组中添加用户
    • gpasswd -a <用户账号名> <组账号名>
    • usermod -G <组账号名> <用户账号名>
  • 从标准组中删除用户
    • gpasswd -d <用户账号名> <组账号名>

口令维护(禁用、恢复和删除用户口令):

  • 设置用户口令
    • passwd [<用户账号名>]
  • 禁用用户账户口令
    • passwd -l <用户账号名>
  • 查看用户账户口令状态
    • passwd -S <用户账号名>
  • 恢复用户账户口令
    • passwd -u <用户账号名>
  • 清除用户账户口令
    • passwd -d <用户账号名>

口令时效设置

  • 修改 /etc/login.defs 的相关配置参数

163eecd19c616464?w=953&h=423&f=png&s=48902

设置已存在用户的口令时效

  • chage命令

用户切换命令

  • su
    • 直接切换为超级用户
  • sudo
    • 直接使用 sudo 命令前缀执行系统管理命令。执行系统管理命令时无需知道超级用户的口令,使用普通用户自己的口令即可

更多资料查询:

用户相关的命令

  • id:显示用户当前的uid、gid和用户所属的组列表
  • groups:显示指定用户所属的组列表
  • whoami:显示当前用户的名称
  • w/who:显示登录用户及相关信息
  • newgrp:用于转换用户的当前组到指定的组账号,用户必须属于该组才可以正确执行该命令

1.2Linux用户的练习题

用cat命令,观察如下文件:/etc/passwd , /etc/shadow, /etc/group,/etc/gshadow;显示useradd命令添加用户参数的默认值

Z0xl5Eb.png

2Vjirzu.png

163eecd1f336da6b?w=276&h=405&f=png&s=6903

163eecd22de58362?w=240&h=399&f=png&s=6166

建立linux账户jkXX(XX为学生学号末两位),要求用户组为users,并设置密码;观察/etc/passwd和/etc/shadow文件的变化;退出root账户,用jkXX账户登录,在其主目录下建立一个myfirst文件,并用长格式列出myfirst文件

163eecd21b5fd3f6?w=510&h=165&f=png&s=4584

163eecd2340b7942?w=613&h=81&f=png&s=3615

TL8xZ9h.png

nwoSEIX.png

用root账户登录;添加组jsj;设置用户jkXX为jsj组用户,观察/etc/passwd、/etc/group和/etc/gshadow文件变化

163eecd821acf4ce?w=411&h=110&f=png&s=2877

dVQJTBi.png

163eecd8255fd565?w=366&h=64&f=png&s=1469

163eecd8510d9c08?w=340&h=62&f=png&s=1095

添加一个新用户airXX(XX为学生学号末两位),观察新用户airXX的用户id和组id;然后删除该用户,注意不要在命令中加选项,观察用户文件和组文件的变化;观察airXX用户的目录是否存在;

ZDF5hLJ.png

163eecd882d6f51d?w=466&h=62&f=png&s=2515

C4pzwfB.png

C0nJ582.png

Q7Jumfv.png

90ZZiOW.png

shadow文件中密码为*号和!!代表什么?

答:*代表账户禁用;!!代表密码锁定。

airXX用户组id是多少?这个组是什么类型的组?这样做有什么好处?

答:air08用户组id是501,这个组属于私有组。每个未指定组的用户会建立一个同名的组,这样的组称为私有组,只有一个用户,既有利于防止信息泄露,也也有利于防止不合理的授权。总之,有利于安全管理。

默认情况下删除用户,但却保留了用户的主目录,这样做有什么好处?

答:保留用户目录,防止将用户目录下有价值的资料误删除。

用cat命令,观察文件/etc/passwd;仿照passwd文件的格式,用vi编辑一个新的文件,文件名为userXX(XX为学生学号末两位),文件包括3条记录,用户名分别为jkXX(XX为学生学号末两位),peter,jason,他们的用户id大于1000,组id大于1000,要求peter和jason同组;用命令newusers根据文件userXX的内容批量生成用户;观察/etc/passwd文件的变化。

1LAd6i9.png

l1ldI5o.png

8PbOC7r.png

163eecd41261e31d?w=378&h=25&f=png&s=751

r7g0Xes.png

用cat命令,观察文件/etc/shadow;用vi编辑一个新文件,文件名为mimaXX(XX为学生学号末两位),文件包括3条记录,每条记录用户名与上一步骤要求相同,密码自行设置,用户名和密码用冒号:隔开;用命令chpasswd根据文件mimaXX的内容批量生成密码;观察文件/etc/shadow变化;用命令chpasswd -m再次批量生成密码,观察文件/etc/shadow变化;

163eecd41fb674e2?w=329&h=18&f=png&s=574

163eecd41fced644?w=137&h=63&f=png&s=870

163eecd42457805d?w=718&h=127&f=png&s=6710

2ddsA9y.png

退出root账户,用jkXX账户登录。退出jkXX账户,返回root账户,观察/etc/shadow文件;用passwd命令锁定用户jkXX,观察/etc/shadow文件变化;然后退出root账户,用jkXX账户登录,是否成功?

egMlCCL.png

SpuzIaU.png

F850utZ.png

WXznnt6.png

163eecd8f2974eb6?w=215&h=54&f=png&s=884

用chage命令查看peter账户的时间设置;重新设置peter账户的时间,要求两天内不能更改口令,且口令最长的存活期为 90 天,并在口令过期前 5 天通知用户,口令超期7天密码失效;用chage命令再次查看peter账户的时间设置

jwDDGh4.png

163eecd900929cd7?w=638&h=165&f=png&s=5122

用root账户登录;用su切换到jason账户;用cd进入用户主目录;创建一个新文件abc,用长格式列出abc文件;观察文件的用户和组的属性

163eecd91a5c3b27?w=267&h=66&f=png&s=1069

163eecd9208e967c?w=406&h=79&f=png&s=1598

锁定账户后,shadow文件发生了什么变化?

答:锁定账户的密码之前会锁定标志!!

用su切换用户后,建立的新文件文件属于哪个用户?

答:新文件属于切换之后的用户。

两次执行chpasswd命令,结果是否相同?加密算法md5和sha512哪个更安全?

答:两次执行chpasswd命令结果不同,默认情况采用sha512加密算法;-m选项时,采用md5加密算法;sha512更安全,因为加密信息长度更长,破解计算量大。

建立三个普通用户账户,要求如下:用户名分别为jkXX(XX为学生学号末两位),peter,jason,其中jkXX和jason为相同普通组成员;观察/etc/passwd文件的变化。为jkXX账户添加root组;

5BvxCvy.png

ZOXZmI0.png

oEe5PYX.png

分别练习id,groups,whoami,who命令,显示当前账户的信息;用su命令切换到jkXX账户,分别练习id,groups,whoami,who命令,显示当前账户的信息。用newgrp切换jkXX账户的组,分别练习id,groups,whoami,who命令,显示当前账户的信息

v1NXNum.png

aGBcCPW.png

z3OlnAd.png

二、权限管理

Linux是多用户的操作系统,允许多个用户同时在系统上登录和工作。 为了确保系统和用户的安全,Linux自然就有自己一套的权限管理机制了!

相信用过Linux的同学在检索文件夹文件的时候常常用到ls -l的命令,会出来一大串的数据。这些数据你能读懂了吗?

例如:


    drwxr-xr-x   3  osmond   osmond    4096  05-16 13:32   nobp

其实很简单:

163eecd4e3476fc0?w=1040&h=270&f=png&s=28790

其实我们看权限就是看drwxr-xr-x这么一串东西,看起来很复杂,但不是的,一下就可以理解了。我们来分解一下:

163eecd4e7150f31?w=895&h=269&f=png&s=24436

这9个字符每3个一组,组成 3 套 权限控制

  • 第一套控制文件所有者的访问权限
  • 第二套控制所有者所在用户组的其他成员的访问权限
  • 第三套控制系统其他用户的访问权限

rwx分别代表的意思:

163eecd4f15a4e5f?w=976&h=478&f=png&s=36561

看到这里来,如果前面的你看懂了,那drwxr-xr-x这么一串东西我觉得你很容易就能理解了:

  • d是文件夹,后面还有9个字母,每3个分成一组,-号表示没有。那么这个文件夹的权限就是:
    • 对当前用户是可读可写可执行,对同组的用户是可读可执行,对其他的用户是可读可执行

是不是很简单??r-read,w-write,x-execute,很好理解的。

对于这些rwx命令为了方便还可以换成八进制的数据来表示,我相信大家看完下面的demo也知道其实就这么一回事了:

IKO1mov.png

权限的优先顺序

  • 如果UID匹配,就应用用户属主(user)权限
  • 否则,如果GID匹配,就应用组(group)权限
  • 如果都不匹配,就应用其它用户(other)权限
  • 超级用户root具有一切权限,无需特殊说明

2.1管理Linux权限的常用命令

  • chmod
    • 改变文件或目录的权限
  • chown
    • 改变文件或目录的属主(所有者)
  • chgrp
    • 改变文件或目录所属的组
  • umask
    • 设置文件的缺省生成掩码

例子:

a3jWzKo.png

163eecd4f219ef23?w=960&h=517&f=png&s=22109

2.2权限扩展知识

上面提到了umask属性,它用来做这样的东西的:默认生成掩码告诉系统当创建一个文件或目录时不应该赋予其哪些权限

  • 默认的umask的值是022,我们看一下下面的例子应该就能懂了:

RIApHfP.png

除了上面所说的权限之外,Linux还提供了三种特殊的权限

  • SUID:使用命令的所属用户的权限来运行,而不是命令执行者的权限
  • SGID:使用命令的组权限来运行
  • Sticky-bit:目录中的文件只能被文件的所属用户和root用户删除

它们是这样表示的:

  • SUID和SGID用s表示;Sticky-bit用t表示
  • SUID是占用属主的x位置来表示
  • SGID是占用组的x位置来表示
  • sticky-bit是占用其他人的x位置来表示

例如:drwxrwxrwt 5 root root 4096 06-18 01:01 /tmp它就拥有sticky-bit权限。-rwsr-xr-x 1 root root 23420 2010-08-11 /usr/bin/passwd它就拥有SUID权限

SUID,SGID,sticky-bit同样也有数字的表示法:

gv8UKv6.png

使用的例子:

V4aQEYs.png


Linux内核中有大量安全特征。EXT2/3/4文件系统的扩展属性(Extended Attributes)可以在某种程度上保护系统的安全

常见的扩展属性:

  • A(Atime):告诉系统不要修改对这个文件的最后访问时间。
    • 使用A属性可以提高一定的性能
  • S(Sync):一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
    • 使用S属性能够最大限度的保障文件的完整性
  • a(Append Only):系统只允许在这个文件之后追加数据,不允许任何进程覆盖或者截断这个文件。如果目录具有这个属性,系统将 只允许在这个目录下建立和修改文件,而不允许删除任何文件。
  • i(Immutable):系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
    • a属性和i属性对于提高文件系统的安全性和保障文件系统的完整性有很大的好处

常用命令

  • 显示扩展属性:lsattr [-adR] [文件|目录]
  • 修改扩展属性:chattr [-R] [[-+=][属性]] <文件|目录>

2.3权限管理练习题

用root账户登录,创建一个文件aaaXX(XX为学生学号末两位),用长格式查看文件权限;用chmod命令,文字设定法,给aaaXX文件同组增加写属性,观察结果;用chmod命令,数字设定法,给aaaXX文件设置权限为766,观察结果;

TzOhiMZ.png

切换到peter账户,查看当前umask是多少,观察结果;创建一个目录foldXX(XX为学生学号末两位),查看其权限;创建一个新文件bbb,查看其权限;改变unmask为066,创建一个新文件ccc,查看其权限

sRmYceg.png

a2zYgCY.png

切换到jkXX账户;创建一个文件myfile,观察其属性;用chgrp改变文件myfile组属性为root;试着去改变文件myfile主属性为root,可以吗?切换到root账户,改变文件myfile主属性为root,观察结果

l7Fq6i4.png

3wkFGv2.png

163eecd9a78169ec?w=566&h=82&f=png&s=2436

数字设定766代表文件权限是什么?

答:766代表文件权限为rwx-rw-rw-

为什么用jkXX账户改变文件myfile的属主失败?

答:因为chown只有root账户才可以使用

Umask为022和066对新创建的文件属性影响一样吗?为什么?

答:影响当然不一样,umask定义的是默认不应该获得的权限,066比022转换成为二进制数后,多了两个限制比特位。

以root账户登录,复制/usr/bin/dir文件到用户主目录,用长格式列出,设置文件的suid和sguid为1,用长格式列出;切换帐号为jkXX,运行复制过来的文件dir(注意运行当前路径下的文件要带上路径,例如./dir);

163eecd9a7b5bd48?w=447&h=120&f=png&s=3299

163eecd9b4259aa2?w=609&h=145&f=png&s=4505

切换到jkXX账户,进入/tmp目录,建立文件夹myfold,设置文件夹myfold权限为777,并且sgid和sticky-bit为1,用长格式列出,观察myfold的属性;进入myfold,创建新文件aaa,设置属性为任何人可读可写,用长格式列出;切换到jason账户,进入/tmp/myfold目录,删除aaa文件,是否可以删除?

163eecd9b5250be7?w=384&h=64&f=png&s=1791

NR9H7oJ.png

BKv4xco.png

163eecd58bf53c56?w=338&h=32&f=png&s=936

163eecd592ecc713?w=415&h=63&f=png&s=1914

163eecd592ababfa?w=438&h=148&f=png&s=3641

root账户,进入用户主目录;创建一个文件bbb文件,查看文件的扩展属性;给文件bbb添加扩展属性i,然后试着删除该文件,是否成功,怎样才能删除;创建一个ccc文件,给文件ccc添加扩展属性a,用长格式列表/bin目录并重定向输出到ccc文件,观察ccc文件长度的变化,用长格式列表/etc目录,并重定向输出到ccc文件,是否成功

163eecd599687db1?w=387&h=93&f=png&s=1940

EqurGmy.png

VUVRpHw.png

BrTsgJP.png

4dzrCqg.png

切换到jkXX账户,在/tmp目录下创建一个目录myshare,用getfacl查看myshare目录文件访问控制表;设置myshare文件夹对于jason用户权限为rwx,查看文件访问控制表的变化;切换到jason账户,进入myshare文件创建文件yyy,是否成功;切换到peter账户,进入myshare文件创建文件zzz,是否成功,为什么?

DOztMSe.png

t5Ti7rl.png

Nasyxpf.png

vOXP3ky.png

NCPs7au.png

myfold目录下,为什么jason账户不能删除一个任何人都可读可写的文件?

答:因为文件所在的文件夹myfold被它的所属者jk08设置了stickybit位,该文件夹下面的所有文件,只有文件所属者,以及root用户才能删除。

为什么peter账户在在myshare文件夹里面不能创建文件?

答:因为myshare文件夹,属于jk08用户,只有jk08对该目录具备rwx权限。此外,采用facl的方式,给jason用户开放了该目录的rwx访问权限;peter既不是文件夹的拥有者,也没有在facl中开放rwx权限;依据权限设置情况,peter只有该文件夹的rx权限。因此,不能创建文件。

添加扩展属性a后,用重定向将输出内容给ccc文件,可能会失败,怎样才能输出成功?

答:应该采用追加方式的重定向>>,可以在文件末尾添加内容,这样才符合文件扩展属性a的安全规定。

三、总结

本文主要是总结了Linux下操作用户和权限的知识~~~这两个知识点在Linux下也是很重要的,是学习Linux的基础~

继续完善上一次的思维导图

1B4lbkK.png

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y。为了大家方便,刚新建了一下qq群:742919422,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友

文章的目录导航

转载于:https://www.cnblogs.com/Java3y/p/9169116.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/awxj68104/article/details/101636722

智能推荐

基于微信小程序的安全教育平台面向大学生-计算机毕业设计源码85871-程序员宅基地

文章浏览阅读940次,点赞14次,收藏19次。用户管理模块:(1)注册登录:游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现安全知识学习、学习签到、物品兑换等,就必须有这个系统的账号,如果没有账号的话,可以注册成员用户进行相关的操作,同时用户还可以通过“我的”这以按钮对个人信息以及操作的信息进行管控。(2)安全知识:用户谷点击导航栏中的“安全知识”进行安全知识的了解以及学习等。(3)安全测试:用户点击“安全测试”这个菜单按钮,可以在线进行安全知识的测试题测试。

【单片机毕业设计】【mcuclub-dz-191】基于单片机的GSM指纹密码锁系统设计-程序员宅基地

文章浏览阅读43次。随着科技的不断发展,人们对安全性的需求逐渐提升,特别是在门锁领域。传统的机械锁由于易于复制、钥匙笨重和易丢失等问题已不再满足安全和便利的要求。本研究致力于设计开发一种指纹密码锁,该锁具备操作便捷、安全可靠和用户权限分级等特点。本文系统地从结构、硬件电路、控制软件等方面进行了详细阐述,并通过测试验证,实现了设计目标。首先,研究了指纹密码锁的结构系统。该锁的控制方案通过程序验证用户录入的指纹或输入的密码是否有效,以实现开锁。指纹密码锁的核心在于指纹传感器,本设计所采用的单片机类型为STC12C5A60S2。具体

对抗攻击经典论文剖析(上)【FGSM、BIM、PGD、Carlini and Wagner Attacks (C&W)】_bim攻击-程序员宅基地

文章浏览阅读2w次,点赞32次,收藏147次。最近做数据增广做的心累,想要看一看对抗攻击!这个博文会对四种经典算法进行剖析,分别是FGSM、BIM、PGD、Carlini and Wagner Attacks (C&W)。对抗攻击和防御首先我们简单来说一说对抗攻击和防御的目的。攻击就是对原始样本增加扰动生成对抗版本最大化损失函数,同时扰动尽可能地小,让人类肉眼无法察觉;防御问题是基于这种攻击方法训练一个更具鲁棒性的神经网络。数学表..._bim攻击

HDFS:Edits和Fsimage详解与合并流程_为什么要将edit logs和fsimage定期合并。-程序员宅基地

文章浏览阅读2.6k次,点赞8次,收藏19次。HDFS:Edits和Fsimage详解与合并流程NameNode如何管理和存储元数据计算机中存储数据有两种:内存或磁盘元数据存储磁盘: 存储磁盘无法面对客户端对元数据信息的任意的快速低延迟的响应,但是安全性高元数据存储内存:元数据存放内存,可以高效的查询以及快速响应客户端的查询请求,数据保存在内存,如果断电,内存中的数据全部丢失因此,考虑上述两种存储方式的优缺点,HDFS采用了内存+磁盘的形式来管理元数据。即: NameNode(内存)+FsImage文件. 其中,NameNode文件维护了文件_为什么要将edit logs和fsimage定期合并。

import math在python种中的意思,Python中import使用-程序员宅基地

文章浏览阅读2.4w次,点赞2次,收藏10次。import的使用举例:#coding:utf-8import mathr=5print("半径是5的圆面积是:%.2f"%(math.pi*r**2))import math的意思为从Python标准库中引入math.py模块,这是Python中定义的引入模块的方法。import的标准语法如下:import module1[, module2[,… moduleN]]表示允许一个import导入..._import math

OpenAI新版GPT-4 Turbo向付费ChatGPT用户开放使用-程序员宅基地

文章浏览阅读447次,点赞8次,收藏8次。GPT-4 Turbo 还引入了若干新功能,如支持 JSON 模式、可复现输出和并行函数调用等,这些都是为了提高模型的实用性和灵活性。OpenAI近日宣布其新版GPT-4 Turbo模型正式向付费ChatGPT用户开放,该模型在多个关键方面进行了升级和优化。这一改进比原有的 GPT-4 模型的上下文窗口大得多,使得模型在处理长篇文章或复杂对话时更加高效。该模型在多个关键方面进行了升级和优化,旨在提供更强大的性能和更低的使用成本。这使得 Turbo 模型在理解和生成更复杂、更细致的内容方面具有更强的能力。

随便推点

pads单位切换的快捷键_PADS快捷键和技巧大全-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏7次。发一些最基本常用的几个快捷键:设置通孔显示模式:D+O设置铜只显示外框形式:P+O改变当前层:L(如改当前层为第二层,为L2)测量:从当前位置开始测量:Q改变线宽:W设置栅格:G对找元件管脚或元件:S寻找绝对坐标点:S(n)(n)改变走线角度:AA任意角,AD斜角,AO直角取消当前操作:UN,如UN(1)为取消前一个操作重复多次操作:RE设计规则检查:打开: DRP,关闭:DRO,忽略设计规则:D..._pads单位切换快捷键

React Native开发坑之null is not an object (evaluating 'inst.componentWillReceiveProps')_react native nativeevent 为什么是null-程序员宅基地

文章浏览阅读5k次。最近写react native发现一个坑,出现这个错误:null is not an object (evaluating 'inst.componentWillReceiveProps')坑的是完全没有提示是哪个类出错了。后面发现在render函数里面使用了//进行注释代码~真的是醉了,JSX中是不能使用//做注释,如果一定_react native nativeevent 为什么是null

力扣java刷题学习(代码随想录学习)2_代码随想录java版本代码-程序员宅基地

文章浏览阅读405次。【代码】力扣java刷题学习(代码随想录学习)2。_代码随想录java版本代码

简单爬取京东商品名称、价格(仅供学习)_爬京东价格-程序员宅基地

文章浏览阅读3.9k次。以下内容是原创,仅供初学者学习用,京东能够开放给我们学习实在不容易,请模拟人类的行为学习爬取。一 爬取的Python源码#爬取的代码import requestsimport reimport timegoods='书包' #搜索关键字depth = 1 #搜索深度为2,即爬取第1页,第2页start_url = 'https://search.jd.com/Search?k..._爬京东价格

Linux——分析和存储日志_linux c之log存储-程序员宅基地

文章浏览阅读514次。分析和存储日志_linux c之log存储

使用a标签的href来实现点击手机号拨打电话_a标签打电话-程序员宅基地

文章浏览阅读5.5k次,点赞2次,收藏4次。绝绝子,原来a标签还有这功能。在移动端页面,使用起来很方便。href = tel: + 电话号码 即可 <a :href="'tel:'+ '110' ">call police</a>_a标签打电话