Linux编程用户信息管理系统
Linux终端用户管理添加、删除和修改用户账户
Linux终端用户管理添加、删除和修改用户账户在Linux操作系统中,用户账户管理是系统管理员工作中的一项基本任务。
通过终端可以方便地完成用户账户的添加、删除和修改操作。
本文将介绍如何在Linux终端中进行用户账户管理的相关操作。
一、添加用户账户要添加一个新的用户账户,可以使用以下命令:```shellsudo useradd [选项] 用户名```其中,[选项]为可选参数,可根据需要使用不同的参数来添加用户。
常用参数如下:- `-c`:指定用户的注释。
- `-m`:自动创建与用户同名的主目录。
- `-s`:指定用户的默认Shell。
- `-g`:指定用户的主要用户组。
- `-G`:指定用户的附加用户组。
例如,要添加一个用户名为"testuser",注释为"Test User",并将其加入primarygroup主要用户组和secondarygroup附加用户组,可以使用以下命令:```shellsudo useradd -c "Test User" -g primarygroup -G secondarygroup testuser ```添加用户时,还需设置用户的密码。
可以通过以下命令为用户设置密码:```shellsudo passwd 用户名```在输入以上命令后,系统会提示你输入新密码并进行确认。
二、删除用户账户要删除一个用户账户,可以使用以下命令:```shellsudo userdel 用户名```该命令将删除指定的用户账户和相关的用户组,但不会删除用户的主目录和个人文件。
如果需要同时删除用户的主目录,可以使用以下命令:```shellsudo userdel -r 用户名```请在使用删除用户命令时,谨慎操作,确保不会误删重要用户账户。
三、修改用户账户要修改一个用户账户的属性,可以使用以下命令:```shellsudo usermod [选项] 用户名```其中,[选项]为可选参数,可根据需要使用不同的参数来修改用户属性。
Linux系统第4章_用户管理
• 实例:
# groupmod -n group g1 # groupmod -g 860 g2
4)添加/删除组成员
• 格式: gpasswd [参数] 组名 • 参数:
-a -d 用户名 用户名 //向指定组添加用户 //从指定组中删除用户
(2) chown • 功能:改变文件拥有者 • 格式: # chown <用户名> <文件名> • 实例: # chown user1 f1
(3)chgrp 功能:更改文件所属的组 格式: # chgrp <组名称 > <文件名> 实例: # chgrp ahxh /home/abc.txt
(4)umask
已过去多少天
需要再过多少天这个口令可以被修改 口令的有效期 口令失效多少天前发出警告
保留字段
4、用户管理 1)添加新用户
• 格式: useradd/adduser [参数] 用户名 • 参数:
-u UID -g 组名 -G 组名 //指定用户的UID值 //指定用户所属的默认组 //指定用户附加组
(2) 操作符号 + 添加某个权限。 - 取消某个权限。 = 赋予给定权限并取消其他所有权限(如果有 的话)。
(3) 所表示的权限可用下述字母的任意组合 r 可读。 w 可写。 x 可执行。
实例:
# chmod # chmod # chmod # chmod
o+w u-w o-rx o=rx
/home/abc.txt /home/abc.txt /home/abc.txt /home/abc.txt
linux实验五 用户管理
集美大学Linux系统管理课程实验报告课程名称:Linux系统管理班级:软件1115实验成绩:指导教师:范明红姓名:许云云实验项目名称:实验五:用户管理学号:2011813035上机实践日期:1.实验目的:1)熟悉Linux操作系统中的用户和组的概念。
2)掌握Linux操作系统中用户管理。
3)理解用户管理涉及的系统配置文件。
2.实验要点:1.认真阅读课本相关的内容,掌握相关指令的使用。
2. 理解系统管理中的用户管理的概念,掌握如何在Linux系统中管理用户和组。
3.实验准备:1 熟悉useradd(adduser)和userdel指令的使用2 熟悉groupadd和groupdel指令的使用3 熟悉passwd指令的使用4了解who、id、,finger,chfn,groups、whoami、newgrp指令的用法5 学习使用用户管理器管理用户4.实验内容:设置系统以字符界面方式启动:4.1用户管理1:使用useradd(adduser)指令添加名称为user1、user2、user3、user4的用户,分别为其设定密码。
2:使用userdel指令删除user4用户3.使用chfn指令添加用户的详细信息,并使用finger指令察看相关信息。
4.锁定user1用户,使其无法登陆。
(有2种方法)5.在其他终端使用用户user1、user2等登陆验证。
6.为user1解锁,使其能正常登陆。
方法一:使用usermod锁定:解锁:方法二:使用passwd锁定:解锁:4.2组管理。
1:使用groupadd指令添加user和group两个组2:使用groupdel指令删除group组3: 将用户user1、user2、user3添加到user组中。
4:指定user1为组管理员。
5.使用user1账户登陆,删除组内成员user3.6.更改user1账户的主组为user并验证。
4.3其他指令使用who、id、whoami、groups等指令1:使用who指令查看当前登陆系统的用户2:使用id指令查看当前用户的UID与GID3:使用whoami指令查看当前使用shell的用户名称4.4 打开用户管理配置文件/etc/passwd,/etc/shadow,/etc/group察看内容:查看/etc/passwd文件部分内容:查看/etc/ shadow文件部分内容:查看/etc/group文件部分内容:4.5 打开图形界面,使用用户管理器管理用户和组。
Shell脚本编写如何进行用户和权限管理
Shell脚本编写如何进行用户和权限管理在Linux系统下,Shell脚本是一种强大的工具,可以用来编写自动化任务和批处理程序。
而用户和权限管理是Linux系统中非常重要的一部分,通过Shell脚本可以方便地进行用户和权限的管理。
本文将介绍如何使用Shell脚本进行用户和权限管理的基本操作。
一、添加用户在Linux系统中,使用`useradd`命令可以添加用户。
以下是一个示例的Shell脚本,用于添加一个名为"testuser"的用户:```shell#!/bin/bashusername="testuser"password="password"home_dir="/home/${username}"# 创建用户useradd -m -d ${home_dir} -s /bin/bash ${username}# 设置密码echo "${username}:${password}" | chpasswd# 设置用户的组usermod -a -G groupname ${username}# 设置用户的初始环境cp /etc/skel/.bashrc ${home_dir}cp /etc/skel/.bash_profile ${home_dir}echo "User ${username} has been created."```在上述脚本中,使用了`useradd`命令添加了一个名为"testuser"的用户,并设置了密码。
用户的主目录被设置为`/home/testuser`,并且将其所属的初始组设置为"groupname",将`/etc/skel/`目录下的`.bashrc`和`.bash_profile`复制到用户的主目录中。
二、删除用户使用`userdel`命令可以删除用户。
linux管理用户和组实训
linux管理用户和组实训以Linux管理用户和组为主题的实训,主要涉及到在Linux系统中如何管理用户和组的相关操作。
本文将从用户和组的概念、用户和组的创建与删除、用户和组的权限管理以及用户和组的管理工具等方面进行介绍和实操,帮助读者更好地理解和掌握Linux系统中用户和组的管理方法。
一、用户和组的概念在Linux系统中,用户和组是用于区分和管理不同用户和用户组的一种机制。
用户是系统中的一个实体,可以通过用户名和密码登录系统。
组是一组具有相同权限的用户的集合,通过将用户划分为不同的组来实现权限管理和资源共享。
二、用户和组的创建与删除1. 创建用户:可以使用命令`useradd`来创建用户,例如`useradd username`,其中`username`为要创建的用户名。
2. 删除用户:可以使用命令`userdel`来删除用户,例如`userdel username`,其中`username`为要删除的用户名。
3. 创建组:可以使用命令`groupadd`来创建组,例如`groupadd groupname`,其中`groupname`为要创建的组名。
4. 删除组:可以使用命令`groupdel`来删除组,例如`groupdel groupname`,其中`groupname`为要删除的组名。
三、用户和组的权限管理1. 用户权限:可以使用命令`chmod`来修改用户对文件或目录的权限,例如`chmod u+r file`,表示给用户添加读权限。
2. 组权限:可以使用命令`chmod`来修改组对文件或目录的权限,例如`chmod g+w file`,表示给组添加写权限。
3. 其他用户权限:可以使用命令`chmod`来修改其他用户对文件或目录的权限,例如`chmod o-x file`,表示禁止其他用户执行该文件。
四、用户和组的管理工具1. useradd命令:用于创建用户,可以设置用户的密码、家目录、所属组等信息。
linux操作系统知识点
Linux 操作系统基础知识概览以下是一些关于Linux 操作系统的常见知识点:1.Linux 基础:●Linux 的起源和发展历史●Linux 的主要组成部分:内核、Shell、文件系统等●常见的Linux 发行版(如Ubuntu、Debian、CentOS 等)●常用的命令行工具和基本命令(如ls、cd、mkdir、rm 等)2.用户和权限管理:●用户账户的创建和管理●用户组的概念和使用●文件和目录的权限设置和管理●sudo 权限和root 用户的重要性3.文件系统:●Linux 文件系统的层级结构●常见的文件系统类型(如ext4、XFS、Btrfs 等)●挂载和卸载文件系统●磁盘和分区管理工具(如fdisk、parted 等)4.进程管理:●进程的概念和属性●进程的创建、终止和管理●进程状态的了解和监控●进程间通信的方式(如管道、信号、共享内存等)5.网络和安全性:●网络配置和网络接口管理●网络命令和工具(如ifconfig、ping、ssh 等)●防火墙和安全性措施(如iptables、SELinux 等)●远程访问和远程管理(如SSH、SCP、rsync 等)6.软件包管理:●软件包管理系统(如apt、yum、dnf 等)●软件包的安装、升级和卸载●软件包的依赖关系和解决依赖问题●软件源和仓库的管理7.Shell 脚本编程:●Shell 脚本的基础语法和结构●变量、条件语句、循环和函数的使用●Shell 命令和管道的组合●脚本的调试和错误处理以上只是Linux 操作系统知识的一些常见方面,涵盖了基础知识、用户和权限管理、文件系统、进程管理、网络和安全性、软件包管理以及Shell 脚本编程等。
要深入学习Linux,建议进一步学习和实践这些知识点,并探索更多高级主题,如网络服务配置、系统性能优化等。
Linux操作系统应用编程课件(完整版)
2.Linux操作系统的发行版
Linux操作系统发行版实际就是Linux内核加上外围实用程序 组成的一个大软件包。相对于Linux操作系统的内核版本,发行版 的版本号随发布者的不同而不同,与Linux操作系统内核的版本号 是相对独立的。因此把SUSE、RedHat、Ubuntu、Slackware等直 接称为Linux是不确切的,它们是Linux操作系统的发行版。更确 切地说,应该将它们称为“以Linux为核心的操作系统软件包”。
Shell是Linux操作系统的一种用户界面,它作为操作系统 的“外壳”,为用户提供使用操作系统的接口。Shell主要有以 下两大功能特点。
(1)Shell是一个命令解释器,它拥有自己内建的Shell命令集。 (2)Shell的另一个重要特性是它自身就是一种解释型的程序设 计语言。
当用户成功登录Linux系统后,系统将执行一个Shell程序。 正是Shell进程提供了命令提示符。作为默认值,Shell对普通用 户用“$”作提示符,对超级用户(root)用“#”作提示符。
1.4.4 联机手册
联机手册命令man可向用户提供系统中各种命令、系统调用、 库函数和重要系统文件的详细说明,包括名字、使用语法、功能 描述、应用实例和相关参考文件等。其格式如下:
$ man [拥有哪个级别的帮助。 -k:查看和命令相关的所有帮助。
查看who命令的详细说明示例如下。 $ man who
Linux操作系统 应用编程
本章主要介绍Linux文件系统,包括文件系统的结构、文 件的定义与分类、目录与文件操作命令、文件的权限管理等, 让读者对Linux文件系统有一定的认识和理解,为后文的学习 打下基础。
2.1.1 组织结构
Linux操作系统中所有文件存储在文件系统中,文件被组织 到一棵“目录树”中,其文件系统层次结构(树状目录结构)如 图2.1所示。树根在该层次结构的顶部,树根的下方衍生出子目 录分支。
Linux网络操作系统项目项目3 管理Linux服务器的用户和组
bobby:!!:17656:0:99999:7:::
user1:!!:17656:0:99999:7:::
shadow文件保存投影加密之后的口令以及与口令相关的一系列信息,每个用户的信息在 shadow文件中占用一行,并且用“:”分隔为9个域,各域的含义如表3-3所示。
表3-3 shadow文件字段说明
3.6 使用用户管理器管理用户 3.7 使用常用的账户管理命令 3.8 企业实战与应用 3.9 项目实录
3.1 任务1 理解用户账户和组群
4
Linux操作系统是多用户多任务的操作系统,允许多个用户同时登录到系统,使用系 统资源。用户账户是用户的身份标识。用户通过用户账户可以登录到系统,并且访问已 经被授权的资源。系统依据账户来区分属于每个用户的文件、进程、任务,并给每个用 户提供特定的工作环境(例如,用户的工作目录、shell版本以及图形化的环境配置等), 使每个用户都能各自不受干扰地独立工作。
6
用户账户信息和组群信息分别存储在用户账户文件和组群文件中。
3.2.1 子任务1 理解用户账户文件
1./etc/passwd文件
准备工作:新建用户bobby、user1、user2,将user1和user2加入bobby群组
[root@RHEL7-1 ~]# useradd bobby [root@RHEL7-1 ~]# useradd user1 [root@RHEL7-1 ~]# useradd user2 [root@RHEL7-1 ~]# usermod –G bobby user1 [root@RHEL7-1 ~]# usermod –G bobby user2
在Linux系统中,所创建的用户账户及其相关信息(密码除外)均放在/etc/passwd配置
Linux中创建管理用户用户组命令linux操作系统电脑资料
Linux中创建管理用户、用户组命令linux操作系统 -电脑资料在这里我们给大家介绍在linux中用户及组的基本概念,以及如何创建管理用户、组 ,有需要了解的朋友可一起来看看,Linux中创建管理用户、用户组命令linux操作系统。
使用Linux时,需要以一个用户的身份登陆,从而限制一个使用者能够访问的资源;而组则是用来方便组织管理用户。
用户与组•每个用户拥有一个UserID•每个用户属于一个主组,属于一个或多个附属组•每个组拥有一个GroupID•每个进程以一个用户身份运行,并受该用户可访问的资源限制•每个可登陆用户有一个指定的SHELL系统中的文件都有一个所属用户及所属组,用户、组信息保存在以下三个文件中:/etc/passwd 用户信息/etc/shadow 用户密码/edc/group 组信息命令id用以显示当前用户的信息,命令passwd可以修改当前用户的密码;以下命令可以显示登陆用户信息:whoami 显示当前用户who 显示当前登陆的用户信息w 显示登陆用户的详细信息命令useradd添加一个用户:useradd 用户名-d 指定用户家目录-s 指定用户登陆shell-u 指定用户uid-g 指定用户所属主组-G 指定用户所属附属组命令usermod修改一个用户的信息:usermod 参数用户名-l 修改用户名-u 修改uid-g 修改用户主组-G 修改用户附属组-L 锁定用户-U 解锁用户例1:# useradd -d /usr/sam -m sam此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录),电脑资料《Linux中创建管理用户、用户组命令linux操作系统》。
例2:# useradd -s /bin/sh -g group -G adm,root gem此命令新建了一个用户gem,该用户的登录Shell是/bin/sh,他属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
linux用户管理
Linux用户管理一.权限控制机制Linux系统是个多用户系统,能做到不同的用户能同时访问不同的文件,因此一定要有文件权限控制机制。
Linux系统的权限控制机制和 Windows的权限控制机制有着很大的差别。
Linux的文件或目录被一个用户拥有时,这个用户称为文件的拥有者(或文件主),同时文件还被指定的用户组所拥有,这个用户组称为文件所属组。
一个用户可以是不同组的成员,这可以由管理员控制。
文件的权限由权限标志来决定,权限标志决定了文件的拥有者、文件的所属组、其他用户对文件访问的权限。
用户和权限1.基本概念(1)文件主 Linux为每个文件都分配了一个所有者,称为文件主,并赋予文件主唯一的注册名。
对文件的控制取决于文件主或超级用户(root)。
文件的所属关系是可以改变的,你可以将文件或目录的所有权转让给其他用户,但只有文件主或root才有权改变文件的所属关系。
可以用chown 命令更改某个文件或目录的所有权。
例如,超级用户把自己的一个文件复制给用户user1,为了让用户user1能够访问这个文件,超级用户(root)应该把这个文件的属主设为user1,否则,用户user1无法访问这个文件。
如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的控制权(2)用户组 Linux下,每个文件又属于一个用户组。
当创建一个文件或目录时,系统会赋予它一个用户组关系,chgrp命令可以改变文件的组关系。
(3)访问权限 Linux系统中的每个文件和目录都有访问权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
2.访问权限Linux系统中规定了3种不同类型的用户:文件主(user)、同组用户(group)、可以访问系统的其他用户(others)。
访问权限规定3种访问文件或目录的方式:读(r)、写(w)、可执行或查找(x)(1)文件访问权限读权限(r)表示只允许指定用户读取相应文件的内容,禁止对它做任何的更改操作。
基于Linux系统的学生信息管理系统
程序设计报告基于Linux系统的学生信息管理系统功能:在Linux系统下,实现学生信息的管理功能开发环境:Linux Ubuntu 12.04,Intel 64位处理器开发语言:C语言运行环境:普通PC机编译环境:gcc Makefile本系统对学生信息进行管理,分有学生、老师、老板三种板块,不同权限的用户登录会进入不同的界面进行操作。
系统主界面分为注册,登录,忘记密码,关于以及退出,如果没有这个系统的账号和密码可以进行注册,注册时候会问你要注册的权限是什么,并且根据你注册的权限进去相应的界面。
登录时候需要输入账号以及密码,如果账号密码均正确将进入账号所属权限的界面;如果有错误,会根据错误类型提醒用户。
忘记密码可通过管理员用户查看进行找回。
关于则是一点具体信息。
退出则会退出此程序。
以下具体介绍每个权限中的具体功能:1.学生界面:学生的功能包括查看学生信息,考试,提交试卷,修改密码,返回以及退出的功能。
将各个函数封装成一个box,然后在主函数中进行调用,具体代码如下:①box中的各函数:#include "stu_box.h"#include <stdio.h>#include <stdlib.h>#include <string.h>static void init_node(struct stu_info *head, struct stu_info info){strcpy(head->name, );strcpy(head->sex, info.sex);head->age = info.age;strcpy(head->cid, info.cid);strcpy(head->tel, info.tel);strcpy(head->addr, info.addr);strcpy(head->object, info.object);head->next = head;head->prev = head;}static void __add(struct stu_info *a, struct stu_info *new, struct stu_info *b){a->next = new;new->next = b;b->prev = new;new->prev = a;}static int add(struct stu_info *head, struct stu_info info){struct stu_info *new = NULL;new = (struct stu_info *)malloc(sizeof(struct stu_info));init_node(new, info);__add(head, new, head->next);return 1;}static int read_from_stdin(struct stu_box *box){struct stu_info *head = box->head;struct stu_info info;printf("\t\t\t\t\t\t请输入学生信息:\n");printf("\t\t\t\t\t\t例如:张山男23 123456789 136000000 上海市嵌入式\n\t\t\t\t\t\t");scanf("%s %s %d %s %s %s %s",, info.sex, &info.age, info.cid, info.tel,info.addr, info.object);add(head, info);return 1;}static int read_from_file(struct stu_box *box){struct stu_info *head = box->head;struct stu_info info;//1.fopenFILE *fp = NULL;fp = fopen("dat/stu_info.dat", "r+");if(fp == NULL){perror("fopen");return -1;}while( (fscanf(fp, "%s %s %d %s %s %s %s",, info.sex, &info.age, info.cid, info.tel,info.addr, info.object)) != EOF){add(head, info);}fclose(fp);return 0;}static int edit(struct stu_box *box){return 1;}static int display(struct stu_box *box){struct stu_info *tmp = box->head;for(tmp = box->head->next; tmp != box->head; tmp= tmp->next){printf("\t\t\t\t%s\t%s\t%d\t%s\t%s\t %s\t%s\n",tmp->name, tmp->sex, tmp->age, tmp->cid, tmp->tel,tmp->addr, tmp->object);}return 1;}static void init_head(struct stu_info *head){struct stu_info info = {"abc", "男",22, "123456789012345678", "123456789", "上海市", "嵌入式"};init_node(head, info);}static int del(struct stu_box *box){char name[32];printf("\t\t\t\t\t\t请输入需要删除学生的姓名:\n\t\t\t\t\t\t");scanf("%s", name);struct stu_info *tmp = box->head;for(tmp = box->head->next; tmp != box->head; tmp= tmp->next){if(strcmp(tmp->name, name) == 0){tmp->prev->next = tmp->next;tmp->next->prev = tmp->prev;init_head(tmp);free(tmp);break;}}return 1;}static int save(struct stu_box *box){struct stu_info *head = box->head;struct stu_info *tmp = NULL;//1.打开文件FILE *fp = NULL;fp = fopen("dat/stu_info.dat","w+");if(fp == NULL){perror("fopen()");return -1;}for(tmp = head->next; tmp != head; tmp = tmp->next){//2.往文件里面写入fprintf(fp, "%s %s %d %s %s %s %s\n",tmp->name, tmp->sex, tmp->age, tmp->cid, tmp->tel,tmp->addr, tmp->object);}//3.关闭文件fclose(fp);return 0;}struct stu_box *init_stu_box(){struct stu_box *box = NULL;box = (struct stu_box *)malloc(sizeof(struct stu_box));//创建链表struct stu_info *head = NULL;head = (struct stu_info *)malloc(sizeof(struct stu_info));init_head(head);box->head = head;box->edit = edit;box->del = del;box->display = display;box->save = save;box->readin = read_from_stdin;box->readfp = read_from_file;return box;}②主函数:#include "user_box.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <time.h>#include "user.h"#include "stu_box.h"static void display_menu(){// system("clear");printf("\t\t\t\t\t\t*****************************************\n");printf("\t\t\t\t\t\t* *\n");printf("\t\t\t\t\t\t* 1. 查看学生信息*\n");printf("\t\t\t\t\t\t* 2. 考试*\n");printf("\t\t\t\t\t\t* 3. 提交试卷*\n");printf("\t\t\t\t\t\t* 4. 修改密码*\n");printf("\t\t\t\t\t\t* 5. 返回*\n");printf("\t\t\t\t\t\t* 0. 退出*\n");printf("\t\t\t\t\t\t* *\n");printf("\t\t\t\t\t\t*****************************************\n");}void display_stu_info(struct stu_box *box){box->readfp(box);system("clear");printf("\n\n\n\n\n");printf("\t\t\t\t *****学生信息***** \n");printf("\n\n\t\t\t\t++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++\n");box->display(box);printf("\t\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++\n");box->save(box);}//考试int test(){//printf("__%s__\n", __func__);char path[32];printf("\t\t\t\t\t\t请输入存放试卷的路径:\n\t\t\t\t\t\t");scanf("%s", path);//getchar();FILE *fp_s = NULL;fp_s = fopen("dat/test.txt", "r+");if(fp_s == NULL){perror("fopen():fp_s");return -1;}FILE *fp_d = NULL;fp_d = fopen(path, "w+");if(fp_d == NULL){perror("fopen():fp_d");return -1;}char c;while( (c = fgetc(fp_s)) != EOF){fputc(c, fp_d);}fclose(fp_s);fclose(fp_d);return 0;}//提交试卷int upload(struct user *u){char path[32];printf("\t\t\t\t\t\t请输入存放答案的路径:\n\t\t\t\t\t\t");scanf("%s", path);FILE *fp_s = NULL;fp_s = fopen(path, "r+");if(fp_s == NULL){perror("fopen():fp_s");return -1;}char str[32];sprintf(str, "%s%s%s", "dat/", u->name, "_ret.txt");FILE *fp_d = NULL;fp_d = fopen(str, "w+");if(fp_d == NULL){perror("fopen():fp_d");return -1;}char c;while( (c = fgetc(fp_s)) != EOF){fputc(c, fp_d);}fclose(fp_s);fclose(fp_d);return 0;}//修改密码int mod_pd(){struct user_info_box * box1= init_user_box();box1->readfp(box1);box1->chmm(box1);box1->save(box1);return 0;}int stu_main(struct user *u){// struct user_info_box *box1= init_user_box();struct stu_box *box = init_stu_box();int ret;int y = 0;while(y == 0){system("clear");printf("\n\n\n\n\t\t\t\t\t\t 欢迎进入学生界面\n\n");time_t t;t = time(NULL);struct tm *tm = localtime(&t);char ts[20];sprintf(ts,"%04d-%02d-%02d-%02d:%02d:%02d",tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,tm->tm_hour, tm->tm_min,tm->tm_sec);printf("\t\t\t\t\t\t欢迎%s登录%s\n", u->name,ts);display_menu();printf("\t\t\t\t\t\t请选择:");scanf("%d", &ret);getchar();switch(ret)case 1://查看学生信息box->readfp(box);display_stu_info(box);box->save(box);preAnyone();break;case 2://考试if(test()==0){printf("\t\t\t\t\t\t抽取试卷成功!!!\n");preAnyone();}else{printf("\t\t\t\t\t\t抽取试卷失败!!!\n");preAnyone();}break;case 3://提交试卷upload(u);break;case 4//修改密码mod_pd();preAnyone();break;case 5:y = 6;break;case 0:exit(0);break;default:printf("\t\t\t\t\t\t您的输入有误!\n");preAnyone();break;}}return 0;}老师的功能包括编辑学生信息,上传试卷,批改试卷,修改密码,返回以及退出的功能。
Linux中用户与用户组管理
Linux中⽤户与⽤户组管理1.基础知识Linux作为⼀种多⽤户的操作系统(服务器系统),允许多个⽤户同时登陆到系统上,并响应每个⽤户的请求。
任何需要使⽤操作系统的⽤户,都需要⼀个系统账号,账号分为:管理员账号与普通⽤户账号。
在Linux中,操作系统根据UID来判断⽤!根据UID来判断⽤户!⽽不是⽤户名!只要id为0就是管理员,哪怕有多个id为0 的账号系统在新建账号时,会根据账号类型,⾃动分配递增账号的UID与GID (⽤户⾝份编号,组编号),也可⾃⾏分配。
通常情况下,应当保证UID与GID 唯⼀且不重复。
1.1 组的类别在Linux中,每个⽤户必须有⼀个主组。
当创建账号时,系统会⾃动创建⼀个同名组作为该账户的主组。
⽤户必须属于⼀个且只有⼀个主组。
⽤户可以属于零个或者多个附加组。
1.2 ⽤户与组的配置⽂件在Linux中,万物皆⽂件,所以⽤户与组也以配置⽂件的形式保存在系统中,以下为⽤户和组的主要配置⽂件详解:- /etc/passwd:⽤户及其属性信息(名称、 UID、主组ID等)- /etc/group:组及其属性信息- /etc/shadow:⽤户密码及其相关属性- /etc/gshadow:组密码及其相关属性passwd⽂件格式如下图:依次含义为:登录⽤户名密码UIDGID全名或注释⽤户主⽬录⽤户默认使⽤shellgroup⽂件格式如下图:依次含义为:群组名称群组密码(通常不需要设定,密码被记录在/etc/gshadow)GID:群组ID附加组(以,来分割,该账户没有附加组所以为空)shadow⽂件格式如下图:依次含义为:登录⽤户名密码(通常使⽤shad512加密)从1970年1⽉1⽇起计算到现在为⽌密码最近⼀次被更改的时间密码再过⼏天就可以被修改(0表⽰随时可改)密码⼏天后必须变更(99999表⽰永不过期)密码过期前多久提⽰⽤户密码过期多久后账户将被锁定多少天后账户将失效(从1970-1-1算起)gshadow⽂件格式如下图:依次含义为:群组名称群组密码组管理员列表当前⽤户的附加组2.⽤户账号管理在Linux,管理员在默认情况下为root账户,UID=0。
高级用户管理Linux命令之useradd与usermod
高级用户管理Linux命令之useradd与usermodLinux操作系统是一种强大而灵活的操作系统,广泛应用于各种场景,尤其是服务器领域。
在Linux系统中,用户管理是一项重要的任务,管理员需要能够有效地管理和控制系统上的用户账户。
其中,useradd和usermod是两个常用的命令,用于创建新用户和修改已有用户的属性。
本文将详细介绍这两个命令的使用方法和相关注意事项。
一、useradd命令使用方法useradd命令用于在Linux系统中创建新用户账户。
其常用的语法格式如下:useradd [选项] 用户名1. 添加用户要添加一个新用户,只需在命令中指定用户名即可。
例如,下面的命令将创建一个名为"testuser"的新用户:useradd testuser2. 指定用户的UID和基本信息在默认情况下,useradd命令会自动分配一个唯一的UID(用户标识符)给新建用户,并创建一个与用户名相同的用户组。
但是,我们也可以通过选项来指定用户的UID和基本信息。
例如,下面的命令将创建一个UID为1001的新用户,并指定了用户的基本信息:useradd -u 1001 -c "This is a test user" testuser3. 指定用户的家目录和登录Shelluseradd命令还可以通过选项指定新建用户的家目录和登录Shell。
例如,下面的命令将创建一个家目录为"/home/testuser",登录Shell为"/bin/bash"的新用户:useradd -d /home/testuser -s /bin/bash testuser二、usermod命令使用方法usermod命令用于修改已有用户的属性,包括用户名、UID、基本信息、家目录、登录Shell等。
其常用的语法格式如下:usermod [选项] 用户名1. 修改用户名要修改一个用户的用户名,只需在命令中指定新的用户名即可。
《Linux的用户管理》课件
3 如何更改密码
探索如何更改用户密码,以应对安全性风险 和密码泄露。
4 许可期间和密码过期
了解许可期间和密码过期对用户管理的重要 性,并学习如何设置和管理。
用户管理的进阶技巧
用户管理的最佳实践
探索用户管理的最佳实践,以提 高系统安全性和资源管理效率。
学习如何创建新的用户账户, 以实现个性化的用户访问控 制。
修改用户账户信息
探讨如何修改用户账户信息, 以适应不同的用户需求。
禁用和删除用户账户
了解如何禁用或删除不再需 要的用户账户,以维护系统 安全和资源管理。
密码管理
1 密码的基本要求
了解创建强密码的基本原则,以保护用户账 户的安全。
2 如何创建密码
探索将用户添加到用户组的方法, 并了解其影响。
权限管理
1
文件权限的基础知识
深入了解Linux中的文件权限系统,以实现精确的权限控制。
2
如何修改文件和目录的权限
学习如何更改文件和目录的权限,以满足不同的安全需求。
3
ACL权限控制
探索使用ACL进行更细粒度权限控制的方法,并了解其优势。
用户账户管理
创建新用户账户
SSH的远程访问
学习如何通过SSH实现远程访问,并探索其在用 户管理中的作用。
配置用户登录Shell
探讨如何设置用户的登录Shell以增强系统安全性。
用户组
用户组的基本概念
了解用户组的概念及其在用户管 理中的作用。
创建、修改和删除用户组
学习如何创建、修改和删除用户 组以灵活管理用户。
如何将用户添加到用户组
《Linux的用户管理》PPT 课件
LinuxCentos7账号与权限管理(超详细实例操作)精选全文完整版
LinuxCentos7账号与权限管理(超详细实例操作)Linux/Centos7账号与权限管理1. 管理⽤户账号、组账号2. 查询账号信息3. 设置⽂件和⽬录的权限4. 设置⽂件和⽬录的归属⼀、前⾔概述作为多⽤户、多任务(Multi-Users,Multi-tasks)的服务器操作系统,Linux提供了严格的权限管理机制,主要从⽤户⾝份、⽂件权限两个⽅⾯对资源进⾏限制。
Linux基于⽤户⾝份对资源访问进⾏控制。
· ⽤户账号类别:1. 超级⽤户——root,权限最⾼2. 普通⽤户——⾃定义⽤户 匿名⽤户(nobody)类似于Windows中的Guest3. 程序⽤户——控制程序和服务的,⽆法登陆· 组账号——⽤户的集合(其实可以认为是⽤户权限的集合)4. 基本组(私有组)——伴随着⽤户创建⽽创建 与⽤户同名(也可以⾃⼰设置) 但创建⼀个⽤户的时候必有其组5. 附加组(公有组)——直接创建空组,可以添加已有的⽤户,给组设置权限,该组中所有⽤户都具备此权限· UID和GID6. UID(User IDentity) ——⽤户标识号 (默认情况下0表⽰root 1~999 表⽰(系统)程序⽤户 1000~60000 表⽰(登录)普通⽤户)7. GID(Group IDentity)——组标识号⼆、⽤户账号⽂件/etc/passwd——保存⽤户名称、宿主⽬录、登录shell等基本信息[root@lokott ~]# head -2 /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologinroot:x:0:0:root:/root:/bin/bash——以冒号分隔 下⾯进⾏逐⼀解释1. root——⽤户账号名称2. x——使⽤加密算法加密的密码,这⾥是不会显⽰的3. 0——⽤户UID号4. 0——所属基本组账号的UID5. root——⽤户全名,可以填写⽤户详细信息6. /root——宿主⽬录7. /bin/bash——指定⽤户的登录Shell/etc/shadow——保存⽤户的密码、账号有效等信息[root@lokott ~]# head -2 /etc/shadow //查看头两⾏信息root:$6$P0mVYDgJo8HZnZWl$oYlITJyv.hP.6wS/OCuAdc61QoWTkYJMcONdy9aAjRW4Cpmc5Mor40xn/RiZ9Hi1PzhVoX5Chur4VfFB8JmKO1::0:99999:7:: :bin:*:17110:0:99999:7:::[root@lokott ~]#root:66P0mVYDgJo8HZnZWl$oYlITJyv.hP.6wS/OCuAdc61QoWTkYJMcONdy9aAjRW4Cpmc5Mor40xn/RiZ9Hi1PzhVoX5C hur4VfFB8JmKO1::0:99999:7:::——以冒号分隔,下⾯逐⼀解释1. root——⽤户账号名称2. 粗体部分——表⽰加密算法加密的密码,登录输⼊该密码是⽆效的3. ::——之间的内容是上次修改时间4. 0——密码的最短有效天数(0表⽰随时可以更改)5. 99999——密码的最长有效天数6. 7——提前7天提醒⽤户⼝令将过期:::——表⽰的是密码和账号过期之后的操作处理(基本可以忽略)⼆、管理⽤户账号1.添加⽤户账号——useradd命令选项1. -u ——指定⽤户的UID号,且该UID号没有被其他⽤户使⽤2. -d ——指定⽤户的宿主⽬录位置(与-M⼀起使⽤时不⽣效!)3. -e——账号失效时间(过期时间)4. -g——基本组5. -G——附加组6. -M——不创家⽬录7. -s ——指定⽤户的登录shell实例:useradd -d /opt/mike (-g mike) -G caiwu -s /sbin/nologin mike[root@lokott ~]# useradd -d /opt/mike -G caiwu -s /sbin/nolgin mike //注意需要先有caiwu组——groupadd caiwu[root@lokott ~]# tail -2 /etc/passwd //查看passwd⽂件最后两⾏信息lokott:x:1000:1000:lokott:/home/lokott:/bin/bashmike:x:1001:1001::/opt/mike:/sbin/nolgin[root@lokott ~]# tail -2 /etc/groupcaiwu:x:1002:mikemike:x:1001:[root@lokott ~]# tail -2 /etc/shadowlokott:$6$aq3AU9oDZf/ERE2D$Ol.zBTLNqbsPDdsJYE0yU3Wa7EUU1SonR3rUQ616PsgA2u.DtQ99ecTUbdw2y2RhmlaL75WlcqMsfEUNretgb0:18192:0:99 999:7:::mike:!!:18200:0:99999:7:::[root@lokott ~]# id mike //查看mike的id信息uid=1001(mike)gid=1001(mike)组=1001(mike),1002(caiwu)[root@lokott ~]# ls /home/ //因为-d 指定了⽤户的宿主⽬录,所以家⽬录创建在了指定的/opt/mike⽬录中demo lokott[root@lokott ~]# ls /opt/demo01.txt mike rh test[root@lokott ~]#2.设置/更改⽤户⼝令(密码)passwdpasswd 选项 … ⽤户名1. -d 清除密码2. -l 锁定3. -S 查看是否锁还是未锁 (⼤写)4. -u 解锁[root@lokott ~]# useradd -d /opt/lisi -s /sbin/nologin lisi[root@lokott ~]# tail -2 /etc/passwdlokott:x:1000:1000:lokott:/home/lokott:/bin/bashlisi:x:1001:1001::/opt/lisi:/sbin/nologin //这⾥/sbin/nologin是表⽰⽤户⽆法登录[root@lokott ~]# passwd lisi更改⽤户 lisi 的密码。
操作系统实训课程学习总结Linux系统管理与Shell脚本编程
操作系统实训课程学习总结Linux系统管理与Shell脚本编程在操作系统实训课程中,我学习到了Linux系统管理与Shell脚本编程的知识与技能。
通过这门课程的学习,我对操作系统的原理与架构有了更深入的理解,掌握了Linux系统的基本命令和操作方法,还学会了编写Shell脚本来自动化管理任务。
本文将从三个方面对我学习Linux系统管理与Shell脚本编程的经验进行总结。
一、Linux系统基础知识的学习在课程的开始阶段,我首先学习了Linux系统的基本架构和特点。
Linux作为一种开源的操作系统,具有高度的稳定性和安全性,广泛应用于服务器和嵌入式设备等领域。
通过学习Linux系统的内核结构、文件系统和进程管理等基础知识,我对操作系统的工作原理有了更深入的认识。
其次,我学习了Linux系统的常用命令和操作方法。
通过终端界面,我可以使用一系列的命令来管理文件和目录、配置网络、安装软件等。
例如,使用ls命令可以查看当前目录的文件列表,使用cd命令可以切换目录,使用cp命令可以复制文件,使用grep命令可以搜索文件内容等。
同时,我还学会了重定向和管道命令来进行文件的输入输出和管道传输,这些都是Linux系统管理的基本操作。
二、Shell脚本编程的学习与实践Shell脚本是一种用Shell语言编写的程序,可以通过执行一系列的命令来实现特定的功能。
在课程的后期,我学习了Shell脚本的基本语法和编写方法,并进行了实践练习。
首先,我学习了Shell脚本的变量和表达式。
通过定义变量,我可以存储数据和结果,并在脚本中进行计算和操作。
例如,可以使用变量来保存文件路径、用户名等信息,并进行字符串拼接和数值计算等操作。
同时,我还学会了使用if语句、for循环和while循环等控制结构来实现条件判断和循环执行,以及使用函数来封装一系列的命令和操作。
其次,我学习了Shell脚本的文件操作和系统管理。
通过脚本编程,我可以自动化执行一些繁琐的管理任务,提高工作效率。
Linux系统远程登录管理脚本使用Shell脚本实现对Linux系统远程登录的管理和控制
Linux系统远程登录管理脚本使用Shell脚本实现对Linux系统远程登录的管理和控制Shell脚本是一种用于自动化任务和批处理的编程语言,通过编写一段脚本,我们可以实现对Linux系统的远程登录管理和控制。
本文将介绍如何使用Shell脚本来实现这一功能。
一、介绍Linux系统远程登录管理脚本的背景和目的随着技术的不断发展和普及,很多组织和个人都拥有多台Linux服务器,而远程登录管理这些服务器成为了一项必要的任务。
为了简化和提高远程登录管理的效率,我们可以利用Shell脚本来自动化这一过程。
二、创建Linux系统远程登录管理脚本首先,我们需要创建一个Shell脚本文件,命名为“remote_login.sh”。
在脚本文件的开头,我们需要指定脚本运行的解释器,即Shell的路径。
一般情况下,我们可以使用/bin/bash作为解释器。
```#!/bin/bash```接下来,我们需要定义一些变量,用于存储远程服务器的IP地址、用户名和密码等信息。
可以通过如下方式定义这些变量:```ip="192.168.1.100"username="admin"password="password"```通过以上的定义,我们可以灵活地修改和配置这些变量,以适应不同的远程服务器。
接下来,我们可以使用SSH命令来实现远程登录。
使用SSH命令可以安全地在本地和远程服务器之间建立连接,并执行相应的命令。
在Shell脚本中,我们可以使用SSH命令来执行远程登录操作,如下所示:```sshpass -p $password ssh $username@$ip```以上命令中,我们通过`sshpass`命令将密码传递给SSH命令,实现自动登录的功能。
三、远程登录管理脚本的应用通过上述步骤,我们已经创建了一个简单的远程登录管理脚本。
接下来,我们可以对脚本进行扩展,以实现更多功能。
Linux系统编程介绍
write系统调用
用write()系统调用将数据写到一个文件中
函数原型:
ssize_t write(int fd, const void *buf, size_t count);
函数参数: - fd:要写入的文件的文件描述符 - buf: 指向内存块的指针,从这个内存块中读取数据写入 文件中 - count: 要写入文件的字节个数 返回值 如果出现错误,返回-1 如果写入成功,则返回写入到文件中的字节个数
打开文件的方式
打开方式 O_RDONLY 打开一个供读取的文件 描述
O_WRONLY
O_RDWR O_APPEND O_CREAT O_EXCL O_TRUNC
打开一个供写入的文件
打开一个可供读写的文件 写入的所有数据将被追加到文件的末尾 打开文件,如果文件不存在则建立文件 如果已经臵O_CREAT且文件存在,则强制open()失败 在open()时,将文件的内容清空
6
系统调用与C库关系
系统调用与C库从形式上来看都C函数 C库函数有些是调用系统调用来实现的,比如说 malloc、free调用brk,printf调用write系统用, 有些函数不需要任何系统调用,比如abs、strcpy、 atoi等,因为它并不是必需要使用内核服务 系统调用通常提供的是最小界面,而C库函数通 常提供更复杂的功能。
close系统调用
为了重新利用文件描述符,用close()系统调用释 放打开的文件描述符
函数原型:int close(int fd); 函数参数: - fd :要关闭的文件的文件描述符 返回值 如果出现错误,返回-1 调用成功返回0
creat系统调用2-1
为 了 维 持 与 早 期 的 UNIX 系 统 的 向 后 兼 容 性 , Linux也提供可选的创建文件的系统调用,它称为 creat()。 函数原型:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一绪论§1.1设计背景Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
它主要用于基于Intel x86系列CPU的计算机上。
这个系统是由全世界各地的成千上万的程序员设计和实现的。
§1.2设计目的在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。
请设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。
你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。
二需求分析§2.1系统概述§2.1.1 任务概述Linux作为多用户、多任务的操作系统,其系统资源是所有用户共享的。
对用户的管理是操作系统的重点。
LINUX课程设计要用shell编程实现,将理论学习付诸实践。
设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。
§2.1.2需求规定程序要包括四个文件,即menu,add,delete,passwd四个文件。
passwd文件是用来保存用户信息;menu文件是主菜单,要求运行的时候能显示一个菜单供用户选择;addusers 文件是用来增加信息;deluser文件是用来删除信息。
在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。
对于任务6和7,需要编写单独的Shell 脚本文件(必须分别命名为addusers和deluser)并且在主脚本menu文件中调用这些脚本文件。
§2.2功能需求在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。
在不同任务的中,这些操作能自动实现以下功能:1、在屏幕上显示当前所有用户的记录2、在屏幕上显示当前所有用户(经过格式化和排序的)的记录3、只在屏幕上显示用户名和用户ID4、只在屏幕上显示(经过格式化和排序的)用户名和用户ID5、查询并显示特定用户的记录6、往passwd文件里增加新的用户记录7、从passwd文件里删除某个用户记录你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。
对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为addusers和deluser)并且在你的主脚本menu文件中调用这些脚本文件。
三系统设计§3.1结构层次图§3.2.运行流程(1)总运行流程(2)addusers模块运行流程(3)deluser模块用户运行流程用户删除Y进入主菜单Y提示错误N是否存在用户ID输入用户ID 是否删除N删除成功四 系统实现主菜单:选择1:打印当前所有用户选择2:打印当前所有用户记录(格式化后)选择3:打印用户名和用户ID选择4:打印用户名和用户ID(格式化后)选择5:查询特定用户没有输入关键字和输入关键字没有记录:查找到记录:选择6:添加用户添加成功:用户名无效情况:用户名只能是数字或字母,用户名不能为空,密码无效:密码不能小于6,密码不能为空,密码只能是数字或字母,密码必须和确认密码相同用户ID无效:用户ID不能为空,用户ID不能小于500,用户ID只能为数字组ID无效:组ID不能为空,组ID不能小于500,组ID只能为数字登录shell无效:shell只能是bash,sh,kash,csh中的一种,shell不能空选择7:删除用户查找用户ID存在,是否要删除选Y,删除成功:用户ID不存在和没有输入用户ID情况:用户ID存在,在确认删除选N和其他字符是退出:选择Q:退出不正确选择:五代码实现1)主菜单代码#! /bin/bash#删除用户clearecho " 用户删除 "echo "========================="while truedoread -p "输入用户ID:" useridsif( test ` expr match "$userids" "[0-9]*" ` -ne ` expr length "$userids" `) then echo "输入的用户ID只能是数字,请重新输入"elif ( test -z "$userids" ) thenecho "用户ID不能为空"elsebreakfidonegetuserid=$( awk -F ':' ' $3 == "'$userids'" {print $3} ' passwd )if ( test $getuserid ) thenread -p "是否要删除(Y/N):" ackif (test "$ack" = "Y" ) thensed -i '/'"$userids"'/d' passwdif ( test $? -eq 0) thenecho "删除成功"elseecho "删除失败"breakfielsebreakfielseecho "用户不存在"fi2)用户添加代码#! /bin/bashclear#用户名echo " 新用户添加 "echo "=============================="while truedoecho -n "请输入用户名:"read usernamea=` expr match "$username" "[0-9a-zA-Z]*" `b=` expr length "$username" `if ( test $a -ne $b ) thenecho "用户名只能是数字或字母,请重新输入用户名:"elif ( test -z "$username" ) thenecho "用户名不能为空,请重新输入用户名:"elsebreakfidone#用户密码while truedoread -p "请输入密码:" passwdif ( test ` expr match "$passwd" "[0-9a-zA-Z]*" ` -ne ` expr length "$passwd" ` ) thenecho "用户密码只能为数字或字母,情重新输入密码"elif ( test -z "$passwd" ) thenecho "用户密码不能为空,请输入密码"elif ( test ` expr length "$passwd" ` -lt 6 ) thenecho "密码长度不能小于6"elseread -p "请输入确认密码:" ackpwif(test "$passwd" = "$ackpw" ) thenbreakelseecho "两次的密码不匹配"fifidone#用户IDwhile truedoread -p "请输入用户ID:" useridif ( test ` expr match "$userid" "[0-9]*" ` -ne ` expr length "$userid" ` ) then echo "用户ID只能为数字"elif ( test -z "$userid") thenecho "用户ID不能为空"elif ( test $userid -lt 500 ) thenecho "用户ID不能小于500,请重新输入"elsebreakfidone#组IDwhile truedoread -p "请输入组ID:" groupidif ( test ` expr match "$groupid" "[0-9]*" ` -ne ` expr length "$groupid" ` ) then echo "组ID只能为数字"elif ( test -z "$groupid" ) thenecho "组ID不能为空, 请重新输入"elif ( test $groupid -lt 500 ) thenecho "组ID不能小于500,请重新输入"elsebreakfidone#登录shellwhile truedoread -p "请输入登录shell(bash,sh kash,csh):" shellnameif (test "$shellname" != "bash" -a "$shellname" != "sh" -a "$shellname" != "kash" -a "$shellname" != "csh" ) thenecho "你输入的shell名不存在本系统中,请重新输入"elsebreakfidone#添加用户userinfo="$username:$passwd:$userid:$groupid:$username:/home/$username:/bin/$shellname"if ( test $? -ne 1 ) thenecho $userinfo >> passwdif ( test $? -eq 0 ) thenecho "用户添加成功"elseecho "用户添加失败"fifi3)用户删除代码#! /bin/bash#删除用户clearecho " 用户删除 "echo "========================="while truedoread -p "输入用户ID:" useridsif( test ` expr match "$userids" "[0-9]*" ` -ne ` expr length "$userids" `) then echo "输入的用户ID只能是数字,请重新输入"elif ( test -z "$userids" ) thenecho "用户ID不能为空"elsebreakfidonegetuserid=$( awk -F ':' ' $3 == "'$userids'" {print $3} ' passwd )if ( test $getuserid ) thenread -p "是否要删除(Y/N):" ackif (test "$ack" = "Y" ) thensed -i '/'"$userids"'/d' passwdif ( test $? -eq 0) thenecho "删除成功"elseecho "删除失败"breakfielsebreakfielseecho "用户不存在"fi六心得体会在本次shell大作业中,学习了很多知识,掌握的很多Linux的相关命令,同时也对Linux有了更深的了解,在shell编程中也找到了一些技巧,加深了对shell编程的能力和认识。