第三周学习内容:继续bash的基础特性、文件系统部分知识。
第三周作业:
1、列出当前系统上所有已经登录的用户的用户名,同一个用户名登录多次只显示一次。
who命令:显示当前系统已经登录的所有用户。
cut命令:移除文档内某行或某列显示。-d:分隔,表示以哪个符号隔开;-f:保留,表示保留以分隔符分隔好的哪一列。
sort命令:排序,默认情况会以最左边,也就是第一个字母按序进行排序。-u:重复的行只保留一份。
答案:who | cut -d' ' -f 1 | sort -u。
2、取出最后登录到当前系统的用户的相关信息。
tail命令:查看文件的后几行,-数字:表示去最后几行。配合上上一题所用的who和cut,可以找出最后登录到当前系统的用户。
id命令:显示用户的基本信息。把找出最后登录到当前系统的用户送给id命令,就能列出相关信息了。
答案:who | cut -d' ' -f 1 | tail -1 | id
3、取出当前系统上被用户当做默认shell的最多的那个shell。
uniq命令:也是统计类命令,报告或略过或移除重复的行,效果和sort -u相似,但是通过选项可以做到更多的功能,-c:计数,把每一行出的次数做统计。系统中所有用户名信息都保存在/etc/passwd文件内,通过对此文件的编辑就可以找出当前系统上被用户当做默认shell的shell有哪些并做计数。
再通过前面所说的排序命令,按出现次数按有小到大进行排序,再单独显示最后一行就好啦。
答案:cat /etc/passwd | cut -d: -f7 | uniq -c | sort -n | tail -1
4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
sort命令:排序命令,还有一些选项:-t:分隔,表示以哪个符号隔开;-k:排序,表示以分隔符分隔好的哪一列进行排序。
tr命令:替换命令,可以将文件中的内容进行替换。这里是要将小写替换为大写,用文件通配符表达为[a-z] [A-Z],也可以是[[:lower:]] [[:upper:]]。
最后将这段文本重定向输出至指定文件中即可。
答案:cat /etc/passwd | sort -t: -k3 -n | tail -10 | tr [[:lower:]] [[:upper:]] > /tmp/maxusers.txt
5、取出当前主机的ip地址,要对ifconfig命令进行切割。
灵活运用上面提到过的cut、tail、head命令,虽然能显示ip地址,但感觉比较勉强,若学习了awk和grep后会舒服很多。
答案:ifconfig ens33 | cut -d' ' -f10 | head -2 | tail -1
6、列出/etc/目录下所有以.conf结尾的文件的文件名,并将其名字改为大写后保存至/tmp/etc.conf文件中。
利用ls、通配符、tr命令将/etc/目录下以.conf结尾的文件列出,并转换为大写。接着就重定向输出至指定目录即可。
答案:ls *.conf | tr [a-z] [A-Z] > /tmp/etc.conf
7、显示/var目录下一级子目录和文件的个数。
wc命令:单词统计,依次显示文件的行数,单词数和字节数。-l:只显示行数;-w只显示单词数;-c只显示字节数,可以和管道符配合着使用。
答案:ls /var/ | wc -w
8、取出/etc/group文件中的第三个字段数字最小的10个组的名字。
依然是利用sort、head、cut命令,灵活运用,熟练掌握。
9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
可以先将/etc/fstab文件的内容重定向输出(>)到/tmp/etc.test文件中,然后再将/etc/issue文件的内容追加重定向输出(>>)到tmp/etc.test文件中去。
也可以使用命令行展开,一次性将两个文件重定向输出到指定文件中去。
答案:cat /etc/fstab > /tmp/etc.test;cat /etc/issue >> /tmp/etc.test或cat /etc/{fstab,issue} > /tmp/etc.test
10、请总结描述用户和组管理类命令的使用方法并完成几个小练习。
groupadd:groupadd+[option]+组名:创建组命令,什么选项也不加会自动groupid。常用选项如下:-g:指明GID;-r:创建系统组。关于系统组:Linux系统中每一个运行的进程都带着某一个用户的身份在运行的,某用户发起的进程自然就以该用户的身份运行,然而系统开机自动启动的进程的发起者既不能是管理员,也不能是登录用户,因为在用户还未登录时这些进程已然启动,那这些进程的所带的用户身份就是系统用户,多个系统用户所在的组也就称为系统组。总结来说就是为了能够让后台进程或服务类进程以非管理员身份运行,通常要创建多个普通用户,这类用户从不用登录系统,因此被称为系统组或系统用户。
groupdel和groupmod:groupadd+组名:删除组命令;groupmod+[option]+组名:修改组属性命令。-g:修改GID;-n:修改组名。
useradd:useradd+[option]+用户名:创建用户还能更新默认新用户的信息,什么选项也不加会自动生成UID并会为这个用户创建一个与其名字相同的私有组。常用选项如下:-u:指定UID;-g:指定主组(基本组)ID或组名,这个组必须是已经创建的,否则会报错;-c:添加注释;-G:指定附加组;-d:指定家目录,不指定就在/home目录下创建以该用户名命名的目录作为其家目录;-s:指定默认shell;-r:创建系统用户。比较特殊的一个选项:-D:查看创建用户时的默认配置属性信息,可以在-D后添加各种选项修改器默认值。
userdel和usermod:userdel+用户名,删除用户。选项:-r:可以同时删除用户的家目录;usermod+[option]+用户名,修改用户属性,用法和groupmod几乎一样,有一个比较特别的选项:-L:锁定用户密码,让密码永远不会匹配。
passwd:passwd+[option]+[用户名],管理用户密码,不加用户名表示修改的是现在正在操作的用户密码,也可以可以指定想要修改的用户名密码,不过只有管理员有此权限了。
gpasswd:gpasswd+[option]+[组名],管理组密码,并且可以管理组内用户。常用选项:-a:给组内添加用户;-d:移除组内用户,gpasswd -d+用户名+组名。
newgrp:newgrp+组名,切换组,可以临时将主组与附件组切换,也可以切换到一个新的组。当主组与附加组之间切换时无需输入密码,但当一个用户要切换到一个全新的组时,就需要该组的组密码了。
id:id+[用户名],显示用户的基本信息。
su:su+[option]+[-]用户名,切换到指定用户。有两种方式:su - 用户名叫登录式切换,会初始化用户环境;su 用户名叫非登录式切换,不会初始化。
小练习:(1)创建组distro,其GID为2016;
(2)创建用户mandriva,其ID为1005,基本组为distro;
(3)创建用户mageia,其ID为1100,家目录为/home/linux;
(4)给用户mageia添加密码,密码为mageedu;
(5)删除mandriva,但保留其家目录;
(6)创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
(7)修改slackware的默认shell为/bin/tcsh;
(8)为用户slackware新增附加组admins。