当前位置: 首页 > news >正文

删除账户相关信息

功能需求
  1. 获取正确的待删除账户名
  2. 杀死系统中正在运行的属于该账户的进程
  3. 确认系统中属于该账户的所有文件
  4. 删除该账户
1. 获取正确的待删除账户名

#让用户输入账户名
read -t 10 -p "please input account name: " accountif [ -z $account ]
thenecho "account name is empty"echo "exit script"exit
fi#检查是否存在这个账户account_info=$(cat < /etc/passwd | grep $account)
if [ $? -eq 1 ]
thenecho "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 分隔符

$ 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 命令查找属于用户的进程

ps -u $account

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

gawk '$1 ~ /[0-9]+/{print $1}' 

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

xargs -d '\n' kill -9

合在一起:

ps -u $account | gawk '$1 ~ /[0-9]+/{print $1}' | xargs -d '\n' kill -9
3. 确认系统中属于该账户的所有文件
find / -user $account > $report_file
4. 删除该账户
userdel $account
5. 创建脚本
#!/usr/bin/bash#让用户输入账户名
read -t 10 -p "please input account name: " accountif [ -z $account ]
thenecho "account name is empty"echo "exit script"exit
fi#检查是否存在这个账户account_info=$(cat < /etc/passwd | grep $account)
if [ $? -eq 1 ]
thenecho "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
http://www.lryc.cn/news/391377.html

相关文章:

  • JavaSE (Java基础):面向对象(下)
  • Element中的日期时间选择器DateTimePicker和级联选择器Cascader
  • Construct公司 从 0 到 1 基于 Kitex+Istio 的微服务系统建设
  • day04-组织架构
  • Web3 开发者入门手册:技能、工具和职业前景
  • 元宇宙虚拟实景展馆树立客户对企业的信任和好感
  • 【C语言】宏定义在 a.c 中定义,如何在 b.c 中使用?
  • vue3 滚动条滑动到元素位置时,元素加载
  • [Linux] 相对路径(Relative Path)与绝对路径(Absolute Path)
  • [ESP32] I2S播放wav文件
  • YOLOv8
  • 协程调度模块
  • 2024 最新docker仓库镜像,6月,7月
  • 探索Vim的文本处理能力:精通查找与替换
  • 2024.7.4学习日报
  • 享元模式(Flyweight Pattern)
  • Oracle连接mysql
  • golang 垃圾回收
  • React 中如何使用 Monaco
  • 开源RAG个人知识库项目开发分析
  • 事务底层与高可用原理
  • 树状数组基础知识
  • 【3分钟准备前端面试】vue3
  • 【数据采集】亮数据浏览器、亮网络解锁器实战指南
  • 暑期编程预习指南
  • 将带有 商店idr 商品信息的json导入到mongodb后,能不能根据商店id把所有商品全部提取并转为电子表格
  • 深入解析 androidx.databinding.BaseObservable
  • MySQL数据恢复(适用于误删后马上发现)
  • [数据结构】——七种常见排序
  • CPU占用率飙升至100%:是攻击还是正常现象?