删除账户相关信息

功能需求
  1. 获取正确的待删除账户名
  2. 杀死系统中正在运行的属于该账户的进程
  3. 确认系统中属于该账户的所有文件
  4. 删除该账户
1. 获取正确的待删除账户名
shell 复制代码
#让用户输入账户名
read -t 10 -p "please input account name: " account

if [ -z $account ]
then
    echo "account name is empty"
    echo "exit script"
    exit
fi

#检查是否存在这个账户

account_info=$(cat < /etc/passwd | grep $account)
if [ $? -eq 1 ]
then
    echo "account "$account" not exist"
    echo "exit script"
    exit
fi

#账户存在
#确认是否要删除这个账户
echo "Is $account the user account"
echo $account_info
read -p "you wish to delete from the system?[y/n]: " isdel
case $isdel in
Y|y);;
*)
echo "exit script"
exit
;;
esac
2. 杀死系统中正在运行的属于该账户的进程

xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令.

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令。

命令格式:

somecommand |xargs -item command

参数:

-d delim 分隔符

shell 复制代码
$ echo 'loop.sh
fileout
sedout' | xargs -d "\n" ls -l
-rw-rw-r-- 1 ubuntu ubuntu 32 Jun 12 20:09 fileout
-rwxrw-r-- 1 ubuntu ubuntu  0 Jun 13 18:04 loop.sh
-rw-rw-r-- 1 ubuntu ubuntu 22 Jun 21 12:53 sedout

由于ls 不支持管道,所以通过xargs将 echo 输出 fileout、loop.sh、sedout传给了 ls。下面开始处理属于用户的正在运行的进程。

1、先通过 ps -u 命令查找属于用户的进程

shell 复制代码
ps -u $account

2、将ps 的结果传给gawk,解析出pid

shell 复制代码
gawk '$1 ~ /[0-9]+/{print $1}' 

3、最后将pid列表通过xargs传给kill命令

shell 复制代码
xargs -d '\n' kill -9

合在一起:

shell 复制代码
ps -u $account | gawk '$1 ~ /[0-9]+/{print $1}' | xargs -d '\n' kill -9
3. 确认系统中属于该账户的所有文件
shell 复制代码
find / -user $account > $report_file
4. 删除该账户
shell 复制代码
userdel $account
5. 创建脚本
shell 复制代码
#!/usr/bin/bash

#让用户输入账户名
read -t 10 -p "please input account name: " account

if [ -z $account ]
then
    echo "account name is empty"
    echo "exit script"
    exit
fi

#检查是否存在这个账户

account_info=$(cat < /etc/passwd | grep $account)
if [ $? -eq 1 ]
then
    echo "account "$account" not exist"
    echo "exit script"
    exit
fi

#确认是否要删除这个账户
echo "Is $account the user account"
echo $account_info
read -p "you wish to delete from the system?[y/n]: " isdel
case $isdel in
Y|y);;
*)
echo "exit script"
exit
;;
esac

#查找正在运行的属于该账户的进程

ps -u $account | gawk '$1 ~ /[0-9]+/{print $1}' | xargs -d '\n' kill -9

#查找账户文件
find / -user $account > report_file

#删除账户
userdel $account
相关推荐
未来之窗软件服务21 分钟前
WAF负载均衡+蜜罐混淆安全体系-东方仙盟
运维·安全·负载均衡·仙盟创梦ide·东方仙盟·阿雪技术观·网关开发
yyyang8828 分钟前
蓝牙系统整体架构详解
学习·信息与通信
GeW40 分钟前
新质生产力路线图下,Linux 和数据库不能拆成两件事做
linux
云和数据.ChenGuang43 分钟前
Python 闭包详解:从原理到实战
linux·开发语言·人工智能·python·kubernetes
Linux-lucky44 分钟前
46-Linux学习之旅之LVS负载均衡与keepalived高可用
linux·运维·学习·ubuntu·负载均衡·lvs
Jenni see1 小时前
服装厂裁剪自动化怎么搞?自动铺布+激光裁床+六轴机械手裁片分拣,省料省人的实战指南
运维·自动化
Fruiticecake1 小时前
C 变量住在哪里,进程内存为什么越来越大:从 .data / .bss 到 smaps 排查内存增长
linux
Escalating_xu1 小时前
【Linux 网络编程】NAT、代理服务与内网穿透:从一个公网 IP,到一条真正可达的连接
linux·网络·tcp/ip
阿标在干嘛1 小时前
容器编排的“场景适配”:我们为什么在部分服务中回归了Docker Compose?
运维·docker·容器