描述

  • userdel命令用于删除用户帐户和相关文件。
  • userdel命令修改系统账户文件,删除所有涉及用户的信息,指定的用户(LOGIN)必须存在。

语法

  • userdel [options] LOGIN

选项列表

选项(常用的已加粗) 说明
-f, --force

强制删除用户账户,即使用户处于登录状态。它强制删除用户家目录和邮件池(一般在/var/spool/mail/目录下),即使其他用户家目录和指定的用户家目录同名或指定的用户没有邮件池。

如果在/etc/login.defs中将USERGROUPS_ENAB定义为yes,并且存在与删除的用户同名的组,那么这个组也会被删除,即使它是另一个用户的主组。

注意:该选项很危险,可能会导致系统处于不一致的情况,谨慎使用。

-r, --remove

删除用户的家目录和邮件池(文件),包括它们自身。必须搜索和手动删除其他文件系统下的相关文件

-R, --root CHROOT_DIR 指定在CHROOT_DIR(改变后的根目录)下更改生效以及使用CHROOT_DIR目录下的配置文件
-Z, --selinux-user 删除用户登录的任何SELinux用户映射

说明

  • 应该先手动检查所有的文件系统,确保没有任何文件仍然属于该用户。
  • 不能删除NIS客户端上的任何NIS属性,这必须在NIS服务器上执行。
  • 如果正在运行属于该账户的进程,userdel将不会允许删除该账户;此时,你需要先kill该进程或锁定用户的口令(或账户),然后再删除账户;当前也可以使用-f选项强制删除。
  • 如果/etc/login.defs的USERGROUPS_ENAB设置为yes, userdel将删除与用户同名的组。为了避免口令和组数据库中的不一致,userdel会检查该组不会作为另一个用户的主组,否则只会警告而不会删除组。-f选项可以强制删除该组

实例

  • 分别使用-f和-r选项测试删除共享的主组。

[root@pople ~]# ls -la /home/test/ /var/mail/test /var/spool/mail/test
-rw-rw---- 1 test mail 0 Apr 10 13:05 /var/mail/test
-rw-rw---- 1 test mail 0 Apr 10 13:05 /var/spool/mail/test /home/test/:
total 16
drwx------ 2 test test 83 Apr 10 18:53 .
drwxr-xr-x. 5 root root 41 Apr 10 13:05 ..
-rw------- 1 test test 41 Apr 10 18:53 .bash_history
-rw-r--r-- 1 test test 18 Oct 31 01:07 .bash_logout
-rw-r--r-- 1 test test 193 Oct 31 01:07 .bash_profile
-rw-r--r-- 1 test test 231 Oct 31 01:07 .bashrc
[root@pople ~]# useradd -g test test_userdel # 添加一个新用户,设置它的初始主组为用户test的主组
[root@pople ~]# id test && id test_userdel                       # 共享一个用户组:test
uid=1002(test) gid=1002(test) groups=1002(test)
uid=1003(test_userdel) gid=1002(test) groups=1002(test)
[root@pople ~]# userdel -r test                              # 删除用户test,提示不能删除组test,因为该组也是另一个用户的主组,但除用户组之外的信息都已经删除了。
userdel: group test is the primary group of another user and is not removed.
[root@pople ~]# tail -2 /etc/passwd && tail -2 /etc/group               # 可以发现test组还存在,用户test已删除。
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
test_userdel:x:1003:1002::/home/test_userdel:/bin/bash
tss:x:59:
test:x:1002:
[root@pople ~]# useradd -g test test                           # 恢复用户test,进行下一步测试。
[root@pople ~]# id test && id test_userdel              # 对比两用户信息。
uid=1004(test) gid=1002(test) groups=1002(test)
uid=1003(test_userdel) gid=1002(test) groups=1002(test)
[root@pople ~]# userdel -f test               # 可以看到跟使用-r选项不同的是使用-f选项没有报任何异常,强制性删除。
[root@pople ~]# tail -2 /etc/passwd && tail -2 /etc/group              # 所有有关用户test的信息已删除,包括其主组,即使该组是另一个用户的主组。
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
test_userdel:x:1003:1002::/home/test_userdel:/bin/bash
stapdev:x:158:
tss:x:59:
[root@pople ~]# id test_userdel                              # 可以发现/etc/group文件里已经没有组test文件的信息,用户test_userdel的gid是不存在的,无效的。
uid=1003(test_userdel) gid=1002 groups=1002
[root@pople ~]# su - test_userdel
/usr/bin/id: cannot find name for group ID 1002 # 切换到该用户下提示没有找到用户的gid对应的组名
[test_userdel@pople ~]$ touch a.txt # 但是依旧能创建一个文件,不过文件的属组是不存在的。
[test_userdel@pople ~]$ ls -l a.txt
-rw-r--r-- 1 test_userdel 1002 0 Apr 15 15:36 a.txt

总结:删除一个用户账户,应该确保没有任何文件仍然属于该账户,而且应谨慎使用-f选项,手动检查用户组不被其他用户当作主组来使用,否则会导致组信息异常。

linux基础命令--userdel 删除用户帐户和相关文件的更多相关文章

  1. Linux入门:usermod - 修改用户帐户信息

    一.什么是usermod? usermod 命令通过修改系统帐户文件来修改用户账户信息usermod [options] user_name选项(options)-a|--append ##把用户追加 ...

  2. linux基础命令--groupdel 删除群组

    描述 groupdel命令用于删除用户组. groupdel命令会去修改系统下的/etc/group和/group/gshadow文件,删除有关用户组的所有项目(一般来说使用groupadd或user ...

  3. linux基础命令--rmdir 删除空目录

    描述 rmdir命令用于删除空目录. 语法 rmdir [OPTION]... DIRECTORY... 选项列表 选项(常用的已加粗) 说明 --ignore-fail-on-non-empty 忽 ...

  4. Linux基础命令---lprm删除打印任务

    lprm lprm指令用来删除当前打印队列上的任务,如果没有指定,那么就删除当前打印任务.您可以指定一个或多个职务ID编号来取消这些职务,或者使用选项”-”取消所有作业. 此命令的适用范围:RedHa ...

  5. Linux基础命令---显示登录用户w

    w 显示哪些用户登录,并且显示用户在干什么.报头按此顺序显示当前时间.系统运行时间.当前登录用户数以及过去1.5和15分钟的系统平均负载.接着为每个用户显示以下条目:登录名.TTY名称.远程主机.登录 ...

  6. Linux基础命令---显示登录用户logname

    logname 显示当前登录的用户名称.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法        logname   2 ...

  7. userdel -删除使用者帐号及相关档案

    总览 SYNOPSIS userdel [-r] login 描述 userdel 命 令 修 改 系 统 帐 号 档 删 除 所 有 login 会 参 考 的 部 份 . 使 用 者 名 称 必 ...

  8. Linux基础命令汇总109条

    1       文件管理 1.1     basename 1.1.1     功能说明 从文件名中去掉路径和扩展名 例:basename include/stdio.h .h Output &quo ...

  9. 测试常用——linux 基础命令

    测试常用 的 linux 基础命令 1,查看服务器日志vi 查看文件(查找关键字:exception/exception  :  从上往下找,按n查找下一个关键字,按shift+n查找上一个关键字?e ...

随机推荐

  1. 【原创】Linux基础之iptables

    iptables 1.4.21 官方:https://www.netfilter.org/projects/iptables/index.html iptables is the userspace ...

  2. 【原创】大叔问题定位分享(14)Kylin频繁OOM问题

    公司一个kylin集群,每到周二下午就会逐个节点OOM退出,非常有规律,kylin集群5个节点,每个节点分配的内存已经不断增加到70多G,但是问题依旧: 经排查发现,每周二下午kylin集群的请求量确 ...

  3. mysql只删除表不删除库

    1.备份数据库mysqldump -uroot -P13306 -h10.1.50.14 -p 库名 > /opt/20190109.sql2.删除所有表mysql -uroot -P13306 ...

  4. const与#define相比有什么不同?

    C++语言可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的优点:● const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符 ...

  5. C语言学习及应用笔记之五:C语言typedef关键字及其使用

    在C语言中有一个typedef关键字,其用来定义用户自定义类型.当然,并不是真的创造了一种数据类型,而是给已有的或者符合型的以及复杂的数据类型取一个我们自己更容易理解的别名.总之,可以使用typede ...

  6. java----SAX解析XML

    XML: 可扩展标记语言 1.充当显示数据 2.储存数据 3.传输数据 SAX: 水电费 基于事假驱动,顺序读写,速度快 不能任意读取节点,灵活性差 解析时,占用内存小 import org.xml. ...

  7. .NET Core 添加Java 服务引用(WebService) 曲折历程(二)

    简介: 以为添加完插件后获取内容会一帆风顺,认真你就错了...,安装之后异步结果各种Error错误,获取不到任何信息. 在这里给大家个建议,查资料还是要用微软必应:https://cn.bing.co ...

  8. 关闭 Window 之后,无法设置 Visibility,也无法调用 Show、ShowDialogor 或 WindowInteropHelper.EnsureHandle。

    参考网址: 1.WPF Tips: Window.ShowDialog()方法:Cannot set Visibility or call Show, ShowDialog, or WindowInt ...

  9. 习题集1b: 额外练习 (可选)

    1.练习:4.样本特点 用来描述样本的数字叫做? □ 参数   (√)□ 统计量 □ 变量 □ 常数 2.练习:5.大一学生体重情况 Freidman 博士在一所大学任教,她记录了所在大学每位大一新生 ...

  10. Git基本操作指令

    Git是世界上目前最先进的分布式版本控制系统. 工作原理图: Workspace工作区,Index暂存区,Repository本地仓库区,Remote远程仓库. SVN与Git的最主要的区别? SVN ...