博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS-用户的管理
阅读量:5945 次
发布时间:2019-06-19

本文共 14424 字,大约阅读时间需要 48 分钟。

用户组及配置文件

用户的类型

Linux是一个多用户、多任务的操作系统,如果要使用系统资源,就必须向系统管理员申请一个用户,通过这个用户进入系统,通过建立不同属性的用户实现

不同的作用或权限,可以合理利用和控制系统资源。
Linux系统中用户角色分为三类:
1、管理员用户
默认是root用户,它的UID 和GID均为0,系统安装完成后自动生成的,默认通过它就可以登录系统,拥有最高的管理权限。
2、普通用户
由系统管理员root创建的,创建完成后可以登录系统,但默认无法创建、修改和删除任何管理员下的文件;UID从500-65535
3、虚拟用户(系统用户)
安装系统后默认生成的用户,大多数不能登录系统,但它们是系统正常运行不可缺少的,它们的存在主要是为了方便系统管理,满足相应的系统进程对文件所属用户的要求;UID从 1-499
类型        UID
root         0
虚拟用户    1-499
虚拟用户时为了满足系统中每个服务/进程在运行的时候都要有一个用户和家庭。
普通用户    500+

常用的命令解释器

/bin/bash       普通用户默认的命令解释器/sbin/nologin   虚拟用户(傀儡用户)使用[root@znix ~]# cat /etc/shells/bin/sh/bin/bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh

用户及组配置文件

[root@znix ~]# ll /etc/passwd /etc/shadow /etc/group /etc/gshadow-rw-r--r-- 1 root root  648 Sep 12 12:05 /etc/group         用户组信息---------- 1 root root  529 Sep 12 12:05 /etc/gshadow       用户组密码-rw-r--r-- 1 root root 1271 Sep 12 12:05 /etc/passwd        用户信息---------- 1 root root  936 Sep 12 12:09 /etc/shadow        用户密码

/etc/passwd 

/etc/passwd  存放用户信息

存储用户信息,每一行表示一个用户信息,有多少行就表示多少个用户信息。

[root@nfsnobody ~]# cat /etc/passwd  存放用户信息root:x:0:0:root:/root:/bin/bashroot     :x             :0     :0      :root             :/root           :/bin/bashnobody   :x             :99    :99     :Nobody           :/               :/sbin/nologinclsn     :x             :500   :500    :                 :/home/clsn      :/bin/bash用户名   原来密码的位置  UID   GID    用户的说明信息     用户的家目录     命令解释器

/etc/shadow

存储用户密码信息文件

[root@nfsnobody ~]# cat /etc/shadowLH : ! !: 17751: 0: 99999: 7: : :此文件由9个字段的数据组成,字段之间用“:”分隔,格式如下:1用户名 2 密码 3 最近改动密码的日期 4 密码不可被更动的天数 5 密码需要重新变更的天数 6 密码需要变更期限前的警告期限 7 密码过期的恕限时间8帐号失效日期 9 保留

/etc/group

主要存储组相关信息的文件

[root@nfsnobody ~]# cat /etc/groupnfsnobody  :    x      :     500        :组名       组密码      组ID(GID)   组成员此文件由4个字段的数据组成,字段之间用“:”分隔

/etc/gshadow

主要用来存储组密码信息

[root@nfsnobody ~]# cat /etc/gshadownfsnobody     :    !         :               :组名          组密码           组管理员       用户组成员此文件由4个字段的数据组成,字段之间用“:”分隔

/etc/skel 

/etc/skel目录是在linux下面添加一个新用户使用的用户老家的模板。和创建用户相关的目录

此目录用来存放新用户需要的所有基础环境变量文件的目录。
用户家目录缺少.bash开头的文件    会出现的错误

[nfsnobody@nfsnobody ~]$ rm -f .bash* 删除用户家目录下的环境变量后,退出-bash-4.1$ 重新登录

新用户家目录中的三个隐藏文件,与/etc.skel中的相同。

[root@znix skel]# useradd alex888[root@znix skel]# su - alex888[alex888@znix ~]$ ll -atotal 20drwx------  2 alex888 alex888 4096 Sep 12 10:18 .drwxr-xr-x. 6 root    root    4096 Sep 12 10:18 ..-rw-r--r--  1 alex888 alex888   18 Mar 23 08:15 .bash_logout-rw-r--r--  1 alex888 alex888  176 Mar 23 08:15 .bash_profile-rw-r--r--  1 alex888 alex888  124 Mar 23 08:15 .bashrc.bash_logout   用户登出的时候运行这个文件里的内容.bash_profile  环境变量.bashrc        存放用户的别名数

模拟故障

通过故障 了解/etc/skel 文件的作用

[f:\~]$ ssh 10.0.0.200 22         本地shell使用ssh登录进nfsnobody用户[nfsnobody@nfsnobody ~]$ ls -a    ls -a 查看下家目录下的文件 包括隐藏文件.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .viminfo[nfsnobody@nfsnobody ~]$ rm -rf .bash*    删除.bash开头的文件  模拟故障[nfsnobody@nfsnobody ~]$ exit     退出  重新登录logout如果模拟故障不成功,原因分析:1、vim /etc/profile   2、注释掉PS=那行 3、 source /etc/profile[f:\~]$ ssh 10.0.0.200 22         重新登录-bash-4.1$ ls -a                  命令行 变了 出现故障.  ..  .bash_history  .viminfo-bash-4.1$ cp /etc/skel/.bash* ~  把/etc/skel目录下.bash开头的文件 复制一份到家目录-bash-4.1$ exit                    退出 重新登录logout[f:\~]$ ssh 10.0.0.200 22[nfsnobody@nfsnobody ~]$ ls -a     命令行恢复  故障解决.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .viminfo

useradd工作原理

useradd命令工作原理有以下几步完成:

1、不带任何参数使用添加用户时,首先读/etc/login.defs    /etc/default/useradd 预先定义的规则
2、根据设置的规则添加用户,同时会向/etc/passwd  /etc/group文件添加新建的用户和组,但/etc/shadow   /etc/gshadow也会同步生成记录
3、同时系统会根据/etc/login.defs    /etc/default/useradd文件中配置的信息建立用户的家目录,并复制/etc/skel中所有隐藏的环境配置文件到新用户的家目录中,以完成对用户环境的初始化设置。

/etc/login.defs  控制用户的默认信息/etc/login.defs文件定义了与/etc/password和/etc/shadow配套的用户限制设定。这个文件是需要的,缺失并不会影响系统的使用,但是也许会产生意想不到的错误。如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs。

用户相关命令

useradd

useradd 命令创建用户

语法格式:useradd  [options] [login] 
useradd  [选项]    [用户名]
参数:
-n 不创建以用户名为名的组
-c 创建用户时,添加个人信息
-u 用户ID值,这个值必须是唯一的
-s 用户登录后使用的shell
-g 指定用户对应的组,对应的组必须在系统中存在

useradd命令不使用参数

useradd 命令创建用户

xshell不允许用户无密码登录

[root@nfsnobody ~]# useradd LH            创建一个新用户[root@nfsnobody ~]# tail -1 /etc/passwd   创建后的用户 信息都是默认的  没有密码LH:x:502:502::/home/LH:/bin/bash             创建成功  /etc/passwd 可以查到[root@nfsnobody ~]# grep LH /etc/group    使用grep 过滤下LH的组信息 LH:x:502:                         创建了一个以用户名为名的组

useradd -n

-n 不创建以用户名为名的组

[root@nfsnobody ~]# useradd -n LH1               创建一个用户[root@nfsnobody ~]# grep LH1 /etc/passwd         过滤检验下 创建成功LH1:x:503:100::/home/LH1:/bin/bash[root@nfsnobody ~]# grep LH1 /etc/group          过滤下组信息 没有同名的组LH:x:502:[root@nfsnobody ~]# id LH1                       使用id命令看下 LH1这个用户在users这个组里uid=503(LH1) gid=100(users) groups=100(users)

useradd -c

-c 创建用户时,添加个人信息

创建用户的同时,添加agan2用户的个人信息,个人信息使用逗号隔开

[root@localhost ~]# useradd -c nfsnobody,15810516499,河北LH     格式[root@localhost ~]# grep  "LH" /etc/passwd                 过滤下信息查看LH:x:506:506:nfsnobody,15810516499,河北:/home/LH:/bin/bash

useradd -u 

-u 用户ID值,这个值必须是唯一的

创建用户的同时,修改用户默认的UID

[root@localhost ~]# useradd -u 888 LH                      格式规范[root@localhost ~]# grep  "LH" /etc/passwd                 过滤下信息查看LH:x:888:888::/home/LH:/bin/bash

useradd -s

-s指定用户登录后的shell

/sbinlogin 表示禁止登录
此例在企业中部署nginx、mysql等服务时经常用到

[root@localhost ~]# useradd -s /sbinlogin  tian[root@localhost ~]# grep -w "tian" /etc/passwd tian:x:8892:8892::/home/tian:/sbinlogin

useradd -g

-g 指定用户对应的组,对应的组必须在系统中存在

-G参数会把修改记录在/etc/group
让用户,隶属于到edu组,这里通过id 命令来查看用户,所属于的组。
因为使用-g 组信息记录在/etc/passwd中。事实上系统确认一个用户的所属组的时候是根据/etc/passwd的组ID。 
因此,useradd -g仅仅修改/etc/passwd,而不会修改/etc/group。 
加"-G"参数会把修改记录在/etc/group

[root@nfsnobody ~]# groupadd HH           创建一个新的组[root@nfsnobody ~]# tail -1 /etc/group        查看新建的组信息HH:x:503:[root@nfsnobody ~]# useradd -g HH LH2     使用-g创建一个新用户使他属于HH这个组[root@nfsnobody ~]# id LH2                查看uid=504(LH2) gid=503(HH) groups=503(HH)[root@nfsnobody ~]# grep LH2 /etc/passwd  查看下用户的信息LH2:x:504:503::/home/LH2:/bin/bash[root@nfsnobody ~]# tail -1 /etc/group    查看下组的信息  虽然加入了组 但是在group这个文件里 并没有显示出来HH:x:503:[root@nfsnobody ~]# useradd -G HH LH3      用-G创建一个新用户 并加入到这个组[root@nfsnobody ~]# grep LH3 /etc/group    查看LH3的组信息  可以发现同时属于两个组HH:x:503:LH3LH3:x:505:[root@nfsnobody ~]# grep LH3 /etc/passwd   过滤下LH3用户信息LH3:x:505:505::/home/LH3:/bin/bash[root@nfsnobody ~]# id LH3                  -G创建的LH3 同时属于两个组uid=505(LH3) gid=505(LH3) groups=505(LH3),503(HH)[root@nfsnobody ~]# id LH2                  -g创建的LH2 属于HH这个组uid=504(LH2) gid=503(HH) groups=503(HH)[root@nfsnobody ~]# grep HH /etc/groupHH:x:503:LH3

usermod

usermod 修改系统已经存在的用户信息

语法:usermod   [options]    [login]
      usermod   [选项]       [用户名]
参数:
-c   修改用户的个人信息,同useradd 的-c功能  
-g   修改用户对应的用户组,同  useradd的-d功能
-s   修改用户登录后使用的shell名称,同useradd的-s功能
-u   修改用户的uid ,同useradd 的-u功能
-l   修改用户的名称

usermod

格式

usermod  -l  u1   LH
            新名 已存在的名
把LH的用户名改为u1

[root@nfsnobody ~]# ls /home/        查看一下信息LH  LH1  LH2  LH3  nfsnobody  www[root@nfsnobody ~]# id LH            LH的ID信息uid=502(LH) gid=502(LH) groups=502(LH)[root@nfsnobody ~]# usermod -l u1 LH   修改名字[root@nfsnobody ~]# id u1              查看u1的IDuid=502(u1) gid=502(LH) groups=502(LH)   [root@nfsnobody ~]# id LH            查看LH的id: LH: No such user                    修改成LH已经不存在了[root@nfsnobody ~]# ls /home/        查看家目录LH  LH1  LH2  LH3  nfsnobody  www[root@nfsnobody ~]# su - u1          切换到u1用户[u1@nfsnobody ~]$ pwd                u1用户的家目录还是LH  家目录名称没有变/home/LH

useradd与usermod的区别

useradd与usermod 有很多相同的参数

命令不同之处  
useradd是对新用户(要创建的用户)作用/配置
usermod是对已存在的用户配置

userdel

userdel 删除用户

语法:userdel   [options]  [login]
      userdel   [选项]     [用户名]
参数:           
-f     强制删除用户
-r     删除用户的同时,删除与用户相关的所有文件(包含邮箱信息)
userdel可以直接删除参数  注意需要加-r参数 不然会删除不彻底(不干净)会导致以后创建同名的用户无法创建

彻底删除用户

userdel -rf  彻底删除删除与用户相关的所有文件(包含邮箱信息)

可以不加f  但是想彻底删除一个用户 必须要加-r

[root@nfsnobody ~]# ls /home/LH1  LH2  LH3  nfsnobody  www[root@nfsnobody ~]# userdel -rf LH1    -rf 彻底删除一个用户 [root@nfsnobody ~]# id LH1id: LH1: No such user[root@nfsnobody ~]# ls /home/LH2  LH3  nfsnobody  www[root@nfsnobody ~]# ls /var/spool/mail/LH2  LH3  nfsnobody  root  www

未彻底删除补救方法

未彻底删除导致的问题

[root@nfsnobody ~]# ls /home/       查看下用户家目录信息LH2  LH3  nfsnobody  www[root@nfsnobody ~]# userdel LH2     未使用参数删除用户[root@nfsnobody home]# id LH2       确实已经删除了  id也查询不到id: LH2: No such user[root@nfsnobody ~]# useradd LH2     但是创建同名用户显示用户已存在useradd: warning: the home directory already exists.Not copying any file from skel directory into it.Creating mailbox file: File exists        大概意思是用户已存在

补救方法

[root@nfsnobody ~]# cd /var/spool/mail/   进入到用户的邮箱  删除LH2的邮箱[root@nfsnobody mail]# ls                 先看一下LH2  LH3  nfsnobody  root  www[root@nfsnobody mail]# rm -rf LH2[root@nfsnobody mail]# cd /home/        进入到/home目录  这是普通用户的家目录[root@nfsnobody home]# lsLH2  LH3  nfsnobody  www[root@nfsnobody home]# rm -rf LH2      删除LH2这个目录[root@nfsnobody home]# ls /home/       检查是否删除LH3  nfsnobody  www                          已删除[root@nfsnobody home]# vim /etc/passwd删除或注释里面开头是LH2的信息[root@nfsnobody home]# vim /etc/group删除或注释里面开头是LH2的信息[root@nfsnobody home]# useradd LH2       重新尝试创建 可以创建[root@nfsnobody home]# id LH2            检查uid=506(LH2) gid=506(LH2) groups=506(LH2)passwd

修改用户密码命令

语法:passwd [option] [username]
passwd [选项]   [用户名]
参数:
--stdin //从标准输入读取密码字符串

修改当前用户的密码

普通用户使用passwd 修改密码时,必须满足密码复杂性要求;root 修改密码不需要满足密码复杂性。

[root@localhost ~]# passwd Changing password for user root.New password:                     输入新密码BAD PASSWORD: it is WAY too shortBAD PASSWORD: is too simpleRetype new password:              再次输入passwd: all authentication tokens updated successfully.  更新成功

修改普通用户的密码

root用户可以直接修改 不用满足密码复杂性

[root@localhost ~]# useradd u1[root@localhost ~]# passwd u1Changing password for user u1.New password: BAD PASSWORD: it is WAY too shortBAD PASSWORD: is too simpleRetype new password: passwd: all authentication tokens updated successfully.

非人工交互设置密码

--stdin  这个命令在工作中批量设置密码时很有用

一条命令非人工交互设置密码(企业使用技巧)

[root@localhost ~]# echo "123456" | passwd --stdin u1Changing password for user u1.passwd: all authentication tokens updated successfully.  密码更新成功

批量更新用户的密码

批量更新用户的密码

格式  
用户名:密码,
用户必须存在才可以,一行一个用户

[root@localhost gj]# chpasswd    输入命令root:123456                      格式  用户名:密码,用户必须存在才可以,一行一个用户u1:123456u2:654321                        输入完成后,直接ctrl+D 结束输入

此命令有一个缺点 当一行输入错误后,不能返回修改。

当使用useradd 命令批量创建用户后,可以使用chpasswd 命令批量设置密码或批量修改密码。
把用户和密码字符串放到文件里执行批量改密码

[root@localhost gj]# cat passwd.txt         先将密码写入一个文件u1:123u2:321u3:123[root@localhost gj]# chpasswd < passwd.txt  然后使用

su和sudo

su的使用

su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。

su 切换用户却不切换工作环境 , su - 同时切换用户与工作环境
缺点:用户通过su root命令直接获取root权限 从而造成用户的权限太大 也就可能给系统造成危险
su  与  su - 

[root@nfsnobody home]# cd /etc/     先进入/etc目录下[root@nfsnobody etc]# su nfsnobody     使用su 切换用户[nfsnobody@nfsnobody etc]$ exit        切换后还在/etc目录下  退出[root@nfsnobody etc]# su  - nfsnobody  使用su - 切换[nfsnobody@nfsnobody ~]$               切换后自动返回当前用户的家目录[nfsnobody@nfsnobody ~]$ pwd/home/nfsnobody

sudo

su的缺点造就了sudo的诞生

由于用户通过su root命令直接获取root权限 从而造成用户的权限太大 也就可能给系统造成危险。
为了既保证系统的安全又可以执行相应命令,sudo 也就以此诞生。
sudo作用:通过配置文件来限制用户的权限 ,可以让普通用户在执行指定的命令或程序时,拥有超级用户的权限。
sudo的工作过程如下:
当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
若密码输入成功,则开始执行sudo后续的命令
root执行sudo时不需要输入密码(因为sudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
给普通用户u1提权,让普通用户可以查看root用户的家目录;普通用户可以使用useradd命令,创建新用户
分析步骤:

useradd   u1visudo=vi打开/etc/sudoers文件 或  vim  /etc/sudoers visudo会检查内部语法,避免用户输入错误信息,所以我们一般使用visudo,编辑此文件要用root权限编辑文件的第98行,编辑完成后,wq! 强制保存退出root    ALL=(ALL)     ALLu1      ALL=(ALL)     /bin/ls,/usr/sbin/useradd 使用u1 用户登录测试       sudo    useradd  u11     可成功创建用户,证明提权成功sudo    ls   /root       可查看root的家,证明提权成功sudo   -l         -l 参数是列出当前用户可执行的命令,但只有在sudoers文件里的用户才能使用该选项。[nfsnobody@nfsnobody ~]$ sudo -l(小L)

用户查询命令

w命令

w  用于显示目前登入系统的用户信息。

执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序。
单独执行 w 指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

显示当前登录的用户

[root@nfsnobody etc]# w17:35:19 up 23:28,  2 users,  load average: 0.00, 0.00, 0.00USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHATroot     tty1     -                Wed12    2days  0.00s  0.00s -bashroot     pts/0    10.0.0.1         13:16    0.00s  0.12s  0.00s w

w -h

w -h不打印头信息;

[root@nfsnobody etc]# w -hroot     tty1     -                Wed12    2days  0.00s  0.00s -bashroot     pts/0    10.0.0.1         13:16    0.00s  0.12s  0.00s w -h

1557799730999-21a44096-b7f2-40ce-ae4f-eec5ebf5945c.png#align=left&display=inline&height=447&originHeight=510&originWidth=1195&status=done&width=1047

id命令

id命令 查看用户的UID 、GID

id -u   显示用户ID
id -g   显示用户所属群组的ID。
id -G   显示用户所属附加群组的ID。

[root@nfsnobody /]# id user6uid=8897(user6) gid=8899(z11) groups=8899(z11)[root@nfsnobody /]# id -g user68899[root@nfsnobody /]# id -G user68899[root@nfsnobody /]# id -u user68897

last和lastlog

last命令用了显示用户登录情况,以下是直接显示固定行数的记录:

lastlog 命令 显示linux中所有用户最近一次远程登录的信息

[root@nfsnobody etc]# last[root@nfsnobody etc]# lastlog

组相关信息

groupadd

添加用户组命令 groupadd

语法:groupadd  [options]   [group]
      groupadd  [选项]      [用户组]
参数:
-g   gid   指定用户组的GID,GID唯一不能为负数,如果不指定GID从500开始
-f         新增一个组,强制覆盖一个已存在的组,GID、组成员不会改变。
添加组z11,查看添加后的组信息

[root@nfsnobody ~]# groupadd z11[root@nfsnobody ~]# grep "z11" /etc/groupz11:x:8895:[root@nfsnobody ~]# tail -1 /etc/groupz11:x:8895:

gpasswd

将已存在的用户加入到组中的命令 gpasswd

语法:gpasswd [options] [user]   [group]
gpasswd [选项]    [用户名] [组名]
参数:
-a:添加一个用户到组,可以追加到组
-M:添加多个用户到组,覆盖之前的组成员
-d:从组删除用户
把user1用户添加到z1,并且查看是否添加成功 
-a选项只能添加一个用户,需要同时添加多用户时,使用-M参数

[root@nfsnobody gj]# groupadd z1[root@nfsnobody gj]# useradd user1[root@nfsnobody gj]# gpasswd -a user1 z1Adding user user1 to group z1[root@nfsnobody gj]# grep "z1" /etc/groupz1:x:8896:user1

同时添加user2、user3用户到z1组(先创建user2、user3用户)

使用-M参数添加多个用户时,多用户之间使用逗号分割;添加批量用户时,先使用-a参数,在使用-M参数,就会覆盖之前添加过的用户;所以添加多用户时,先使用-M 参数。

[root@nfsnobody gj]# gpasswd -M user2,user3 z1[root@nfsnobody gj]# grep "z1" /etc/groupz1:x:8896:user2,user3将user2用户从组中删除[root@nfsnobody gj]# gpasswd -d user2 z1 Removing user user2 from group z1[root@nfsnobody gj]# grep "z1" /etc/groupz1:x:8896:user3

groupmod

修改组信息的命令 groupmod

语法:groupmod  [options]  [group]
      groupmod  [选项]    [组名]
groupmod  -n  新名  旧名
groupmod  -g  8888  dir
参数:
-n    修改组名
-g    修改GID

修改z1组的GID

[root@nfsnobody gj]# grep "z1" /etc/groupz1:x:8896:user3[root@nfsnobody gj]# groupmod -g 8888 z1[root@nfsnobody gj]# grep "z1" /etc/groupz1:x:8888:user3

修改z1组的组名为newz1

[root@nfsnobody gj]# grep "z1" /etc/groupz1:x:8888:user3[root@nfsnobody gj]# groupmod -n z1new z1[root@nfsnobody gj]# grep "z1" /etc/groupz1new:x:8888:user3

groupdel  

删除组的命令 groupdel  

查看用户属于到哪些组,使用命令:groups
语法:groupdel   [group]
      groupdel   [组名]
范例:
groupdel 组名 
删除组,删除组后,用户名依然存在

groups

看用户属于到哪些组,命令:groups 

语法:groups   [user] 
      groups   用户名

[root@nfsnobody lh]# groups user1user1 : user1 z2

转载于:https://www.cnblogs.com/wenrulaogou/p/10904896.html

你可能感兴趣的文章
CentOS使用chkconfig增加开机服务提示service xxx does not support chkconfig的问题解决
查看>>
微服务+:服务契约治理
查看>>
save
查看>>
Android DrawLayout + ListView 的使用(一)
查看>>
clear session on close of browser jsp
查看>>
关于吃掉物理的二次聚合无法实现的需要之旁门左道实现法
查看>>
mysql出现unblock with 'mysqladmin flush-hosts'
查看>>
oracle exp/imp命令详解
查看>>
开发安全的 API 所需要核对的清单
查看>>
Mycat源码中的单例模式
查看>>
WPF Dispatcher介绍
查看>>
fiddler展示serverIP方法
查看>>
已释放的栈内存
查看>>
Android网络之数据解析----SAX方式解析XML数据
查看>>
Java递归列出所有文件和文件夹
查看>>
[关于SQL]查询成绩都大于80分的学生
查看>>
Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery
查看>>
LeetCode - Longest Common Prefix
查看>>
Android图片处理
查看>>
2015年第21本:万万没想到,用理工科思维理解世界
查看>>