Linux用户管理-初级

编程知识 更新时间:2023-04-17 02:10:14

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

每个用户账号都拥有一个惟一的用户名和各自的口令。

用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

实现用户账号的管理,要完成的工作主要有如下几个方面:

用户账号的添加、删除与修改。
用户口令的管理。
用户组的管理。

用户或者用户组分组的方式,站在不同的角度,可以进行不同的区分.
通过用户类型分组,我们可以把用户分为:
1.管理员
2.普通用户

通过用户组类型分组,我们可以把用户组分为:
1.管理员组
2.普通用户组

从用户的角度,我们可以把用户组分为:
1.基本组(默认组)
2.额外组(附加组)

对于普通用户,我们还可以分为:
1.系统用户
2.普通用户

因此,对于普通用户组,我们也可以分为:
1.系统用户组
2.普通用户组

操作系统中的用户名和密码存放在数据库中,在 Linux 下,它是处于 /etc 下的一个叫 passwd 的文件。使用文本查看命令查看该文件

 /etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段
 

name:uid:gid:gecos:directory:shell
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

用户名(name)是代表用户账号的字符串。通常长度不超过8个字符,并且由大小写字母和/或数字组成。登录名中不能有冒号(:),因为冒号在这里是分隔符。为了兼容起见,登录名中最好不要包含点

口令部分是密码占符位,其值不是真正的密码,真正的密码保存在/etc/shadow中。

用户标识号(UID):是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。
0 表示管理员(root)

1 - 500 表示系统用户(Centos7中1-999):linux为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统。UID在1-499之间(centos7为1-999之间)。像上面的sshd、deamon等等用户即是此类用户。它类似于Windows中的system帐户,当然权限远没有system帐户高

501 -60000 表示普通用户(Centos7中是1000-60000):由root管理员创建供用户登录系统进行操作使用的账号,UID在500以上(centos7为1000以上)。它类似于Windows系统中users用户组中的帐户
不同的 Linux 发行版,这些数字可能不一样

组标识号(GID):字段记录的是用户所属的用户组。这是当前用户的工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标 识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。每个用户可以同时属于多个组。除了在 passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。linux组的类别:
用户的主要组(primary group):用户必须属于一个且只有一个组
用户的附加组(supplementary group):一个用户可以属于一个或者零个附加组
其中管理员组:root,0 管理员组的GID是0
系统组:1-499(centos6) 1-999(centos7)
普通组:500+(centos 6) 1000+(centos 7)

注释性描述(GECOS):字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途。在不同的Linux系统中,这个字段的格式并没有统一。在许多Linux系统中,这个字段存放的是一段任意的注释性描述文字,用做finger命令的输出。

主目录(home_directory):也就是用户的起始工作目录,它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。

  登录Shell(Shell):用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。
  用户的登录Shell可以指定为某个特定的程序(此程序不是一个命令解释器)。利用这一特点,我们可以限制用户只能运行指定的应用程序,在该应用程序运行结束后,用户就自动退出了系统。有些Linux系统要求只有那些在系统中登记了的程序才能出现在这个字段中。
  系统中有一类用户称为伪用户(psuedo users),这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。

练习题1:列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可

任何一个虚拟控制台登录都会产生一个tty, 每一个远程连接都会产生一个pts。查看用户登陆信息可以使用w或者who,w查看到的用户信息比who更为详细,可以看到用户当前的行为

users 表示当前系统登陆用户总数为4。
LOAD AVERAGE 与后面的数字一起表示系统在过去1,5,10分钟内的负载程度,数值越小,系统负载越轻。
从第二行开始构成一个表格,共有8个栏目,分别显示各个用户正在做的事情及该用户所占用的系统资料。
USER:显示登陆用户帐号名。用户重复登陆,该帐号也会重复出现。
TTY:用户登陆所用的终端。
FROM:显示用户在何处登陆系统。
LOGIN@:是LOGIN AT的意思,表示登陆进入系统的时间。
IDLE:用户空闲时间,从用户上一次任务结束后,开始记时。
JCPU:一终端代号来区分,表示在某段时间内,所有与该终端相关的进程任务所耗费的CPU时间。
PCPU:指WHAT域的任务执行后耗费的CPU时间。
WHAT:表示当前执行的任务
当登陆系统用户很多的时候,可以在W后面加上某个用户名,则会查看该用户执行任务的情况

而是用who的话仅查看当前的用户登陆
[root@izwz95rptd09gfx867uwm6z ~]# who
root pts/0 2018-09-04 15:07 (121.15.134.242)
milkoto pts/1 2018-09-04 15:14 (121.15.134.242)
milkoto pts/2 2018-09-04 15:15 (121.15.134.242)
root pts/3 2018-09-04 15:15 (121.15.134.242)

查看出来用户信息后需要对该文本进行处理,这里使用cut命令进行切割;
cut
文件内容查看
显示行中的指定部分,删除文件中指定字段
显示文件的内容,类似于下的type命令。
该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数file所指明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如cut fl f2 > f3将把文件fl和几的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件f3中。
当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。
    为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。
    按Ctrl+C(中断键可以终止该命令的执行,并且返回Shell提示符状态。
语法
cut(选项)(参数)
选项
-b:仅显示行中指定直接范围的内容;
-c:仅显示行中指定范围的字符;
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;
-n:与“-b”选项连用,不分割多字节字符;
–complement:补足被选择的字节、字符或字段;
–out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
–help:显示指令的帮助信息;
–version:显示指令的版本信息。

可以看到文本中使用了空格进行分割,所以使用-d选项进行文本分割,而用户名称在第一列,使用-f 1指定第一列,这样可以得出分割后的用户名称

得出来的结果与题目中要求的只显示一次的用户有出入,这里我使用排序处理把重复的用户字段删除,

sort(选项)(参数) 参数为待排序的文本或者字段
选项:
-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-u –unique,去掉重复的行输出排序结果,功能类似于uniq功能

sort命令中sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出,所以使用-u选项可以清楚重复字段
这题的答案是:

[root@izwz95rptd09gfx867uwm6z ~]# w | cut -d ” ” -f 1|sort -u

milkoto
root
USER

练习题2:取出最后登录到当前系统的用户的相关信息。
这题可以使用w或者who来查看到用户信息,最后登陆的一般都是在前面的,但是这里另外再介绍一个命令last,last命令用于显示用户最近登录信息。单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。
语法
last(选项)(参数)
选项
-a:把从何处登入系统的主机名称或ip地址,显示在最后一行;
-d:将IP地址转换成主机名称;
-f <记录文件>:指定记录文件。
-n <显示列数>或-<显示列数>:设置列出名单的显示列数;
-R:不显示登入系统的主机名称或IP地址;
-x:显示系统关机,重新开机,以及执行等级的改变等信息。
参数
用户名:显示用户登录列表;
终端:显示从指定终端的登录列表。

而head命令和tail命令就像他的名字一样浅显易懂,它是用来显示开头或者结尾某个数量的文字区块,head用来显示档案的开头至标准输出当中,而tail想当然就是查看档案的结尾
答案为:

练习题3:取出当前系统上被用户当作其默认shell的最多的那个shell
查看/etc/passwd可以查看到当前系统上用户所使用的shell,他们之前是使用”:”进行分割的,所以使用cut命令进行切割,切割后单独取出shell字段,shell字段需要整理去除重复行并且进行计数,可以使用uniq来进行计数处理;
将重复的数据仅列出一个显示,消除重复行

uniq

          -i     忽略大小写字符的不同

          -c   进行计数

          -d   只显示重复出现的行列


得出的结果可以使用sort进行排序了
所以答案是

第四题:将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中

sort 命令中先使用-t指定分割符号,第三行作为属性使用-k3指定,然后最大的后10位提取出来是

这里需要进行大小写转换使用tr命令
tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符

语法
tr(选项)(参数)
选项
-c或——complerment:取代所有不属于第一字符集的字符;
-d或——delete:删除所有属于第一字符集的字符;
-s或–squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t或–truncate-set1:先删除第一字符集较第二字符集多出的字符。
参数
字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”;
字符集2:指定要转换成的目标字符集。

>: 会重写文件,如果文件里面有内容会覆盖。
>>这个是将输出内容追加到目标文件中。如果文件不存在,就创建文件。
>>:追加文件,也就是如果文件里面有内容会把新内容追加到文件尾。
> 是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空。一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用>,将日志文件清空(文件大小变成0字节)。

所以答案是

练习题5:取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分
这里需要使用文本处理进行对ifconfig信息进行切割

作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,grep命令的常用格式为:grep [选项] ”模式“ [文件]
grep家族总共有三个:grep,egrep,fgrep。
常用选项:
  -E :开启扩展(Extend)的正则表达式。
  -i :忽略大小写(ignore case)。
  -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
  -n :显示行号
  -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
  -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
  -o :只显示被模式匹配到的字符串。
  –color :将匹配到的内容以颜色高亮显示。
  -A n:显示匹配到的字符串所在的行及其后n行,after
  -B n:显示匹配到的字符串所在的行及其前n行,before
  -C n:显示匹配到的字符串所在的行及其前后各n行,context

模式部分
  1、直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提高查找速度,比如我要匹配一下hello.c文件中printf的个数:grep -c “printf” hello.c
  2、使用基本正则表达式,下面谈关于基本正则表达式的使用:
    匹配字符:
      . :任意一个字符。
      [abc] :表示匹配一个字符,这个字符必须是abc中的一个。
      [a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。

      [^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符。
      对于一些常用的字符集,系统做了定义:
      [A-Za-z] 等价于 [[:alpha:]]
      [0-9] 等价于 [[:digit:]]
      [A-Za-z0-9] 等价于 [[:alnum:]]
      tab,space 等空白字符 [[:space:]]
      [A-Z] 等价于 [[:upper:]]
      [a-z] 等价于 [[:lower:]]
      标点符号 [[:punct:]]

 匹配次数
      {m,n} :匹配其前面出现的字符至少m次,至多n次。
      \? :匹配其前面出现的内容0次或1次,等价于{0,1}。
      * :匹配其前面出现的内容任意次,等价于{0,},所以 “.*” 表述任意字符任意次,即无论什么内容全部匹配。
  位置锚定
      ^ :锚定行首
      $ :锚定行尾。技巧:”^$”用于匹配空白行。
      \b或\<:锚定单词的词首。如”\blike”不会匹配alike,但是会匹配liker
      \b或>:锚定单词的词尾。如”\blike\b”不会匹配alike和liker,只会匹配like
      \B :与\b作用相反。
 分组及引用
      (string) :将string作为一个整体方便后面引用
        \1 :引用第1个左括号及其对应的右括号所匹配的内容。
        \2 :引用第2个左括号及其对应的右括号所匹配的内容。
        \n :引用第n个左括号及其对应的右括号所匹配的内容。

这里需要注意的是grep命令只能提取行号的内容,提取完之后的字符段需要其他命令进行处理。由于centos7前面有大量的空白符,如果使用cut -d ” “这样的话我这边是失败的

所以需要把这些空白符给删除,我这里使用tr命令将这些空白符给整合成1个然后再进行分割(这里的第一段居然是“ ”wo haimei xiangtong

练习题6:列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。

练习题7:显示/var目录下一级子目录或文件的总个数。

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

1.命令格式:
wc [选项]文件…
2.命令功能:
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
3.命令参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息

所以是

练习题8:取出/etc/group文件中第三个字段数值最小的10个组的名字。
使用sort排序 ,其中“:”中是分割字段,第三段

练习9将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。

练习10:请总结描述用户和组管理类命令的使用方法并完成以下练习:

(6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
(7)、修改slackware的默认shell为/bin/tcsh;
(8)、为用户slackware新增附加组admins;

useradd命令用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
useradd(选项)(参数)

[选项]:

-d<登入目录> 指定用户登入时的目录。
-g<群组>制定主要群组(默认系统会创建一个与自己名字相同的group)
-G<群组>加入次要群组
-N 不要创建以用户名称为名的群组。
-s 指定用户登入后所使用的shell。
-u:指定uid
-m 使用者目录如不存在则自动建立。如使用-k选项skeleton_dir内的档案将复制至使用者目录下。然而在/etc/skel目录下的档案也会复制过去取代。任何在skeleton_diror/etc/skel的目录也相同会在使用者目录下一一建立。The-k同-m不建立目录以及不复制 任何档案为预设值。
-M 不建立使用者目录,即使/etc/login.defs系统档设定要建立使用者目录。
-n 预设值使用者群组与使用者名称会相同。此选项将取消此预设值。
-r 此参数是用来建立系统帐号。系统帐号的UID会比定义在系统档上/etc/login.defs.的UID_MIN来的小。注意useradd此用法所建立的帐号不会建立使用者目录,也不会在乎纪录在/etc/login.defs.的定义值。如果你想要有使用者目录须额外指定-m参数来建立系 统帐号。这是REDHAT额外增设的选项。

groupadd命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件/etc/group中
groupadd(选项)(参数)
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加组ID号不唯一的工作组。

(1) 创建组distro,其GID为2016;
groupadd disrto -g 2016

(2)、创建用户mandriva, 其ID号为1005;基本组为distro;
使用useradd命令,这里-u指定uid,基本组使用-g指定disrto
useradd mandriva1 -g distro

(3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
useradd mageia -u 1100 -d /home/linux

(4)、给用户mageia添加密码,密码为mageedu;

(5)、删除mandriva,但保留其家目录;
需要使用userdel 命令
userdel命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
userdel(选项)(参数)
选项
-f:强制删除用户,即使用户当前已登录;
-r:删除用户的同时,删除与用户相关的所有文件。
参数
用户名:要删除的用户名。
userdel mandriva

(6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
需要提前建立用户组peguin
这里可以使用id 用户名 或者groups 用户名查看用户的所有组,似乎/etc/passwd下无法查看到用户的所有组

(7)修改slackware的默认shell为/bin/tcsh;

usermod命令用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id,必须确认这名user没在电脑上执行任何程序。

usermod(选项)(参数)
选项
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s:修改用户登入后所使用的shell;
-u:修改用户ID;
-U:解除密码锁定。
参数
登录名:指定要修改信息的用户登录名。

(8)、为用户slackware新增附加组admins;

更多推荐

Linux用户管理-初级

本文发布于:2023-04-13 16:05:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/6c16cd83d5885d0637025759ae172176.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:用户   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 73109文章数
  • 14阅读数
  • 0评论数