第8章Linux系统管理第7章作业解答按要求编写程序,实现下列shell命令的功能:$catm1.c|wc–c假设m1.c文件中的内容不超过20个字节。要求:1.写出包括头文件在内的完整程序代码;2.使用fork函数;3.分别用管道机制和消息队列的方式实现;(即:分别写出两个C语言程序)intmain(){intfields[2];intfd1;intnbytes=0;charbufwr[20],bufrd[20];pid_tpid;fd1=open(“m1.c”,O_RDONLY);if(fd10){printf(“openfilem1.cerror”);exit(EXIT_FAILURE);}if(pipe(fields)0)exit(EXIT_FAILURE);方法一:管道else{wait();nbytes=read(fields[0],bufrd,20);printf(thelengthofm1.cis%dbytes\n,nbytes);}close(fields[0]);close(fields[1]);exit(EXIT_SUCCESS);}if((pid=fork())0){perror(“forkerror”);exit(EXIT_FAILURE);}elseif(pid==0){nbytes=read(fd1,bufwr,20);if(nbytes0)write(fields[1],bufwr,nbytes);}structmsg{longtype;chartext[20];};intmain(void){intqid,nbytes;intlen;structmsgpmsg_w,pmsg_r;if((qid=msgget(IPC_PRIVATE,IPC_CREAT|0666))0){printf(error:msgget);return(EXIT_FAILURE);}方法二消息队列intpid=fork();if(pid==0){intfd1=open(“m1.c”,O_RDONLY);if(fd10){printf(error:oppen1.txt\n);return(EXIT_FAILURE);}nbyte=read(fd1,pmsg_w.text,20);pmsg_w.type=10;if((msgsnd(qid,&pmsg_w,nbyte,IPC_NOWAIT))0){printf(error:msgsnd!\n);return(EXIT_FAILURE);}printf(“messagehasbeenposted!\n);}elseif(pid0){intstate;wait(NULL);if((len=msgrcv(qid,&pmsg_r,20,10,IPC_NOWAIT))=0){printf(“messagereaderror!\n);return(EXIT_FAILURE);}else{printf(thelengthofm1.cis%d\n,len);pmsg_r.text[len]='\0';printf(thecontentofm1.cis%s\n,pmsg_r.text);}}第八章主要内容与Linux系统管理相关的计算机术语用户和工作组管理的基本概念和方法Linux文件系统管理的基本概念和方法Linux系统后备的基本概念和方法Linux系统安全,安全管理方法、策略有关Linux系统性能优化的基本概念与技巧8.1系统管理概述(1)设置整个计算机系统,包括硬件和软件(2)做适当的备份和恢复(3)处理由于可供使用的计算机资源(如磁盘空间、进程数目等)有限而遇到的问题。(4)排除由于连接问题而造成的网络阻塞。(5)进行操作系统的升级和维护。(6)为用户提供常规支持。系统管理员的工作主要包括:8.2用户和工作组管理8.2.1有关用户账号的文件有关用户账号的文件:为了管理用户账号,系统设置了多个文件,存放有关信息,最重要的3个为:/etc/passwd文件/etc/shadow文件group文件下面是root用户在此文件中对应的行:root:X:0:0:root:/root:/bin/bashpasswd是一个文本文件,用于定义系统的用户账号,该文件位于“/etc”目录下,包含了一个系统账户列表,给出每个账户一些有用的信息,由于所有用户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。各字段含义如下:字段命名account用户账号名称,用户登录时所使用的用户名password用户口令,出于安全性考虑,现在已经不使用该字段保存口令,而用字母“x”来填充该字段,真正的的密码保存在shadow文件中UID用户号,唯一表示某用户的数字GID用户所属的私有组号,该数字对应group文件中的GIDGECOS可选的用户信息说明字段,通常用于保存用户全名的信息directory用户的宿主目录,用户成功登录后的默认目录shell用户所使用的shell,如:“/bin/bash”各字段的含义passwd文件格式每行定义一个用户帐号各字段之间用“:”分隔passwd文件按字段划分accountpasswordUIDGIDGECOSdirectoryshellrootx00root/root/bin/bashbinx10bin/bin/sbin/nologin该文件位于/etc目录下该文件只有root用户可以读取每行定义了一个用户信息,行中各字段各字段用“:”隔开;为进一步提高安全性,shadow文件中保存的是已加密的口令。用户口令文件—shadowshadow文件的具体内容其9个字段按先后顺序分别是:(1)登录名。(2)加密密码。(3)上次更改密码时间距1970年1月1日的天数。(4)密码更改后,不可以更改的天数。(5)密码更改后,必须再次更改的天数(即密码的有效期)。(6)密码失效前警告用户的天数。(7)密码失效后距账号被查封的天数。(8)账号被查封时间距1970年1月1日的天数。(9)保留字段。工作机制:当需要使用password文件的时候,系统自动将shadow文件中有关密码和密码有效期等字段的信息覆盖到password文件中对应的字段上,如此以来,可以使普通用户能够正确访问password文件,又可以防止普通用户访问到真正存放密码的shadow文件。group文件:用户组账号文件用户组是逻辑地组织用户账号集合的方便途径,它允许用户在组内共享文件。系统中任何一个文件都归属于某个组中的一个用户。每个用户至少属于一个组,系统中的每个组都对应文件/etc/group中的一行记录。每行记录的形式如下:组名:密码:组标志号:用户列表例如:root:x:0:rootbin:x:1:root,bin,daemonusers:x:100:mengqcGroup文件位于/etc目录下,用于存放用户的组帐号信息该文件的内容任何用户都可以读取group文件的各字段group_namepasswordGIDuser_listrootx0rootbinx1root,bin,daemondaemonx2root,bin,daemongroup文件字段说明字段说明group_name用户组的名称password用户组口令,由于安全性原因,已不使用该字段保存口令,用“x”占位GID用户组标识号,该数字用于惟一表示一个用户组user_list属于该组的用户成员列表,列表中多个用户间用“,”分隔Linux的组有私有组、系统组、标准组之分。建立帐户时,若没有指定帐户所属的组,系统会建立一个组名和用户名相同的组,这个组就是私有组,这个组只容纳一个用户。而标准组可以容纳多个用户,组中的用户都具有所拥有的权利。Linux下的组和组文件使用RedHat用户管理器管理用户和组从桌面启动用户管理器的两种方法:(1)单击面板上的“主菜单—系统设置-用户和组群”命令;(2)在终端提示下输入redhat-config-users命令。8.2.2用户账号的创建和维护1.图形界面下管理用户和组利用rfuser用户和组管理工具,可以方便地管理系统中的用户和用户组,包括完成新建、查看、管理账号、密码、权限等所有操作。在控制面板的“系统配置”项中选择“本地用户和组”,或在KDE桌面环境下使用命令rfuser,即可打开本地用户和组管理器。(图8.18.28.3)(1)查看用户和用户组(2)添加新用户(3)编辑用户属性(4)添加新组(5)编辑组属性(6)删除本地用户和组对系统而言,创建一个用户账号需要完成以下步骤:①添加一个记录到/etc/passwd文件。②创建用户的主目录。③在用户的主目录中设置用户的默认配置文件(如.bashrc)。几乎所有的Linux系统中都提供了useradd或adduser命令,能完成上述一系列工作。这两个命令没有区别。2.命令界面下管理用户8.3文件系统及其维护在Linux中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等IDE或SCSI设备也不例外。Linux把各种IDE设备分配了一个由hd前缀组成的文件;而对于各种SCSI设备,则分配了一个由sd前缀组成的文件。例如,第一个IDE设备,Linux就定义为hda;第二个IDE设备就定义为hdb;下面以此类推。而SCSI设备就应该是sda、sdb、sdc等。相关概念文件系统的树型结构Linux文件系统继承了UNIX的特点,它采用了树型目录结构,并把文件目录分解成符号目录和基本目录。把设备视为文件,设备与文件使用统一的接口进行处理树型结构的最上层是根目录,用/表示系统在运行中可以通过使用命令进入任何一层目录相关概念一个软盘或硬盘分区在作为文件系统使用时,必须进行初始化,并将如何组织文件的数据结构写到这些介质上,这个过程就是建立文件系统过程。相关概念/(root)binetcdevbootdevhomemntsbintmpusrvarprocdefaultInit.dconfig文件系统的目录结构图/bin包含对系统运行极为重要的二进制可执行程序/etc包含系统配置文件和一些系统可执行文件。/proc进程(process)目录,将当前运行的进程映射为文件/dev设备目录,包含特殊文件,包括所有设备。/boot该目录下没有子目录,包含了Linux的核心和引导配置文件。/home包含用户帐号(家目录)。/mnt该目录下的子目录用于作为系统中可移动存储设备的挂载点,如光盘的挂载点为“/mnt/cdrom”;软盘的挂载点为“/mnt/floppy”/sbin包含系统主要的可执行程序/tmp是一个临时目录/usr包含用户相关程序和库文件。type表示需要安装的文件系统类型;device表示该文件系统所在分区名,mount-point表示安装新文件系统的路径名,通常是一个空目录名,专门为安装新的文件系统而准备的.如何安装文件系统:mount命令命令格式:将一个文件系统架设到主文件系统上mount[-ttype]devicemount-point相关参数:(可以使用manmount命令查看)目录/mnt是常用的文件系统安装目录,默认情况下,CDROM和软驱都安装在其子目录中;文件系统也可以安装在其他空目录中。如果是装在非空目录中,则原有内容会被新文件系统覆盖。mount-point的选择常用类型type有:光盘或光盘镜像:iso9660DOSfat16文件系统:msdosWindows9xfat32文件系统:vfatWindowsNTntfs文件系统:ntfs利用mount命令可以在Linux操作系统下读取windows系统分区1、进入linux后,打开shell终端,也就是命令行。2、为即将挂接的windows分区指定一个文件夹,因为所有的系统分区在linux内都是以文件形式记录和查看的。所以windows分区在linux内看到的也是一个文件夹。建议在mnt内创建一个分区文件夹,比如W