linux
Linux是一个免费开源的操纵系统,凭借其高效的内核、安全稳定的特性成为服务器容器的最佳选择,被誉为数字世界的“引擎”。
-
在Linux系统中,以( )方式访问设备 。
-
试编写一个SHELL程序,该程序能接收用户从键盘输入的100个整数,然后求出其总和、最大值及最小值。(6分)答:#!/bin/sh read max min=$max sum=$max i=1 while [$i –lt 100] do read x sum=`expr $sum + $x` if [ $max –lt $x ] then max=$x fi if [ $ x –lt $min ] then min=$x fi i=`expr $i + 1` done echo "sum = $sum ; max = $max min = $min "
-
在Linux系统中运行下面程序,最多可产生多少个进程?画出进程家族树。(6分)main() { fork(); fork(); fork(); }答:最多可以产生7个进程 3分家族树如右 3分
-
下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。(8分)#!/bin/bash #(1) dir=$1 #(2) if [ -d $dir ] #(3) then cd $dir #(4) for file in * do if [-f $file ] #(5) then cat $file #(6) echo “end of file $file” fi done else echo “bad directory name $dir” fi答:#(1)使用/bin/bash解释脚本#(2)将位置变量1赋值给变量dir#(3)如果dir所指为目录#(4)将当前目录改为dir#(5)如果循环变量file所指是普通文件#(6)显示文件file的内容 6分程序功能:若命令行参数是一个合法目录则显示该目录下所有普通文件的内容,否则显示错误的目录名信息。
-
从内核实现的角度说明Linux进程共享文件的方式有哪几种?举例说明什么情况下会产生对应的共享情况?答:进程通过多个file结构共享一个inode,进程共享一个file结构。
-
什么是位置变量?shell的变量类型有哪些种?答:位置变量是指命令行上传递给程序的参数。1分Shell变量可以分为:用户自定义变量、环境变量、位置变量、特殊变量
-
vi编辑器有哪几种工作模式?如何在这几种工作模式之间转换?答:Vi的工作模式有三种:命令模式、输入模式、末行模式。3分在命令模式下输入a、A、i、I、o、O等命令之一可以进入输入模式,在输入模式下按Esc键回到命令模式;在命令模式下输入:进入末行模式,末行命令执行完后回到命令模式。
-
交换线程通过三种途径来缩减已使用的内存页面:____、____、____
-
磁盘限额管理可以使用 ______ 软件工具,其中硬限额的容量应该______软限额。
-
命令组合(命令表)将 ______ 来执行命令。
-
df命令完成______ 功能,du命令完成 ______ 功能。
-
超级块是描述 ______ 信息的数据结构,索引节点是描述 ______ 信息的数据结构。
-
每个设备文件名由主设备号和从设备号描述。第二块IDE硬盘的设备名为 ______,它上面的第三个主分区对应的文件名是 ______ 。
-
Linux在I386体系结构中支持 ______分页机构。
-
Linux为用户提供的接口有____ 、____、____
-
在Linux 中,管道分为 ______ 种类型,若创建或打开管道时获得的描述符存放在fd中,则fd[1]是 __ 。
-
在Linux2.4.0版本中,进程有 ______ 种状态,进程使用 ______ 系统调用后进入僵死状态。
-
设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。答:#!/bin/sh i=1 groupadd class1 while [ $i -le 30 ] do if [ $i -le 9 ] ;then USERNAME=stu0${i} else USERNAME=stu${i} fi useradd $USERNAME mkdir /home/$USERNAME chown -R $USERNAME /home/$USERNAME chgrp -R class1 /home/$USERNAME i=$(($i + 1)) #或let “i=i+1” done
-
填写标记代码行的意义,给出功能描述和前6行程序输出。#include <unistd.h> #include <signal.h> int ntimes=0; main(int argc, char *argv[]) { int pid,ppid; int p_action( ), c_action( ); signal(SIGUSR1 , p_action); #(1) switch(pid=fork( )) { #(2) case -1: perror("fork failed?); exit(1); case 0: signal(SIGUSR1,c_action); ppid=getppid( ); for ( ; ; ) ; default: { for( ; ; ) { pause; sleep(1); kill(pid,SIGUSR1); #(3) } } } } p_action( ) { printf("parent caught signal #%d\n",++ntimes); } c_action( ) { printf("child caught signal #%d\n",++ntimes/*, ++ltimes*/); int ppid; ppid = getppid(); #(4) kill(ppid, SIGUSR1); sleep(3); }答:#(1)在父进程中为信号SIGUSR1绑定函数p_action#(2)创建子进程#(3)向子进程发送信号SIGUSR1#(4)获取父进程的PID4分父进程无线循环向子进程发送信号,子进程收到信号后向父进程发送相同信号,父子进程之间各自记录全局变量的变化,结果如:#1child caught signal #1parent caught signal #2child caught signal #2parent caught signal #3child caught signal #4parent caught signal
-
下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。#!/bin/sh DIRNAME=`ls /root | grep bak` #(1) if [ -z "$DIRNAME" ] ; then #(2) mkdir /root/bak ; cd /root/bak #(3) fi YY=`date +%y` ; MM=`date +%m` ; DD=`date +%d` #(4) BACKETC=$YY$MM$DD_etc.tar.gz #(5) tar zcvf $BACKETC /etc #(6) echo "fileback finished!"答:#(1)获取/root中名称包含bak的文件或目录#(2)判断1结果为空#(3)创建目录/root/bak并进入该目录#(4)获取当前时间的年月日#(5)按照年(2位)月(2位)日(2位)_etc方式构造压缩文件名#(6)压缩etc目录并保存在/root/bak中程序功能:若/root/bak不存在则创建之,然后将/etc按日期打包保存于该目录中。