我是大帅哥,擅长LINUX和C语言,还有脚本,希望和大家交朋友 mail:newhitler@163.com

《回答某位网友的LINUX作业题》

上一篇 / 下一篇  2007-07-22 11:38:11 / 个人分类:SHELL编程

LUPA开源社区4GJ/\+YnLQi@%i:m$M(B

1.        ABC软件开发公司的开发人员Tom将要参与一个新项目的开发。现在他需要在自己的个人目录下面建立一个子目录project,然后在该新建的子目录下面再分别建立三个子目录:Source、Doc和scrīpt。以便以后用来存放开发过程中需要用到的开发文档和源程序等文件(将结果使用截图保存)LUPA开源社区n;J8q!Sms JTcI
useradd -d /home/tom -s /bin/bash tomLUPA开源社区\5}8}(QOU4Ba
passwd tom
%_8skGhr*j0su - tom
(z:NUOb3ip,yy ||)H0mkdir -p project/SourceLUPA开源社区{5n5f.Cz
mkdir -p project/Doc
+^ w8{,_'{A0mkdir -p project/SecriptLUPA开源社区 I7Y-Un'ECw

9|6h~5t-h0LUPA开源社区+T,OIwG-l.Ij
2.        Linux系统的帐户资料(诸如用户名、密码等)是以文本文件的形式保存在/etc目录下,这些文件在整个系统中具有举足轻重的地位。ABC软件开发公司的系统管理员ray的日常工作之一是需要定期的查看系统的帐号文件,分析是否有异常情况。如果正常就备份该密码文件;如果不正常,就把以前备份的正常的密码文件恢复出来,以供系统实现。
g@S)LP p w.f0请设计一方案实现(描述设计思路,注意数据安全),并取出相应的截图。LUPA开源社区%EznP:n

LUPA开源社区u y I!ha_G6J

1)用md5sum做密码校验保存到相应的文件中LUPA开源社区N3x-hb/u3O-ox6ps
cp /etc/passwd /etc/passwd.bak
HF"}x"D,mJ'Zl"H0cp /etc/shadow /etc/shadow.bak
5uvc ~ S3L0chmod 400 /etc/passwd.bakLUPA开源社区(C8Y,iGT0Y*syaD2]
chmod 400 /etc/shadow.bakLUPA开源社区*P#s\&tmN(J]3o5s-D
md5sum /etc/passwd>/etc/md5_pasLUPA开源社区ZN'EPT vL/O*ta
md5sum /etc/shadow>/etc/md5_shw

ash} ~b4h8d0LUPA开源社区dM:JJ-]1`S4N u4K

2)LUPA开源社区 d5l,VR-l9JD
chmod 400 /etc/md5_pas /etc/md5_shwLUPA开源社区#| w~ I9TC%_

LUPA开源社区-n(k,D j R6v y&B

3)LUPA开源社区`JD P R&W
res_pas=`md5sum -c /etc/md5_pas`LUPA开源社区9L3`$@!z:|H.M\
res_md5=`md5sum -c /etc/md5_shw`

0r&I)A`9e0p0

1h S0cKlU04)if [ res_pas == 'OK' ]; then
!vN6m'b \ z7UK3H0 :
(xyRn-d3n g?!R0 else
8e$O` D6x%U7MY#HW.W0 cp -f /etc/passwd.bak /etc/passwd
{/`|2Ec$}#_r0 cp -f /etc/shadow.bak /etc/shadowLUPA开源社区A A'LU6X9S2~
 fiLUPA开源社区G-R&vx t]

+MX)G|aw&A'D"h0 LUPA开源社区P)A r GK

W'R{xx?03.        ABC软件开发公司的系统管理员ray经常需要查看和修改目录“/etc”下的系统配置文件。如何快速浏览目录“/etc”下的所有子目录的结构和分布,便成为ray的问题,请设计一个命令解决他的问题(提示:可以使用find 命令,参考帮助文件使用合适的参数)LUPA开源社区)u YL"d3y6O4vP
find /etc -type d>/tmp/directory_struct

{u(zy)d l:fb U*ow0LUPA开源社区 ^m'` ?6P i$I};|#m

4.        解释下列命令的作用ls –lR /etc
%h*` @;j3px4gNe0显示/etc/目录下所有目录和递归子目录下的所有文件

+o.rw.|3m$r+p7`/y%m0

2u:w`.l/P05.        备份的文件越多,其副作用越明显;一是严重浪费空间,因为通常的情况下,就算是一个字节大小的文件也占用了4KB的空间;二是对这些文件的搜索和再次复制的操作将大大降低速度。请写出备份一个文件夹压缩为一个文件的命令。文件夹的名字为姓名缩写,截图说明。LUPA开源社区*T$fM u]T`-s
方法1)
3GS/{rVar cvzf ck.tar.gz /etc
V%yVZ+TQ A'c.Yp0方法2)LUPA开源社区7nk,i ww1v$S
tar jcvf ck.tar.bz2 /etc/
D m/d {{;?!?^ S0方法3)LUPA开源社区/RL)eA4lD0}&v
find /etc -type f|cpio -o>/tmp/ck.cpioLUPA开源社区J$v5\7F5F8Uh

~]m0w L[(Ry3o AP2[06.        ABC软件开发公司即将开始在Linux系统上进行两个项目的开发。开发人员David和Peter组成一个小组,负责A项目的开发;开发人员Jack和Mike组成另一个小组,负责B项目的开发。LUPA开源社区)@j v2Q6h"\h9gE1M~
系统管理员ray需要为这四名开发人员分别建立用户账号,并满足以下要求:
h FX8?TD0(1)        建立目录“/Project_a”,该目录里面的文件只能由David和Peter两人读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;
z}Y f+r7V2Vt"l0(2)        建立目录“/Project_b”,该目录里面的文件只能由Jack和Mike两人读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何的访问操作;LUPA开源社区#f L%_p&{Zt eu$~
(3)        建立目录“/project”,该目录里面的文件只能由David、Peter、Jack和Mike四个人读取、增加、删除、修改以及执行,其他用户只可以对该目录进行只读的操作。
b1G/Z2` oR:O$@0请拟一个方案实现,并用相应的截图说明(仔细考虑,实现不要零乱)
#dlsZ E4D0groupadd dev_g1
;jr`r%X)rO4L0groupadd dev_g2LUPA开源社区hT*Qh1D'F
groupadd dev_otherLUPA开源社区 na.Y+r?`

$G fD9k{eT'^7b0useradd -G dev_g1,dev_other -s /etc/bash David
+S$G$Z2glC\r'Z]6d0useradd -G dev_g1,dev_other -s /etc/bash Peter
@g"b6\6be0useradd -G dev_g2,dev_other -s /etc/bash JackLUPA开源社区e%]Ej2gME7mU/t
useradd -G dev_g2,dev_other -s /etc/bash Mike

+y d w)IP#\9H0LUPA开源社区p{8Qd1F }

mkdir /Project_[a-b]
D L&bm xq0mkdir /Project

H WLq(B)I0LUPA开源社区+f&?'k){X,x

chgrp dev_g1 /Project_aLUPA开源社区L \1N@2F;c/t
chgrp dev_g2 /Project_b
8A*]']t] j:y m C!r0chgrp dev_other /ProjectLUPA开源社区7w!P!|7h#q$o$yv+N4e0P

LUPA开源社区VL$}5jwyK.Y

chmod 770 /Project_a
\m E U\9_0chmod 770 /Project_bLUPA开源社区Eb4B v#MO,kwTIr
chmod 774 /Project

0F'y+V2wad%_0LUPA开源社区7R1iu*`(y*z,fR

7.        ABC软件开发公司的开发人员Tom经常需要把两个文本文件合并为一个,如果使用vi合并,其操作比较繁琐。请使用vi之外的方法解决这个问题,文件名为“姓名缩写1”“姓名缩写2”,将命令和结果图截取LUPA开源社区v#ss^,h
方法1)纵向合并
"_ HW#p4Y0`[0cat username[1-2]>username3LUPA开源社区R\#?#M(t}|f_ l
方法2)横向合并
3k`&KZ+n1v:b a%B0paste username1 username2>username3LUPA开源社区$o bv8YQ3PW
方法3)横向关联合并
I)Iz yF!k+cA0join -b name usernam1 usernam2>username3LUPA开源社区Tj9o.[!H
orLUPA开源社区+oV A*l\mx
join -b project usernam1 username2>username3LUPA开源社区(fw%s L#JF(a

LUPA开源社区j&o.S"o3Rs

8.        ABC软件开发公司的系统管理员Ray经常需要检查目录/sbin下的可执行文件,防止自己或其他用户在执行某些命令的时候有意或无意的对重要文件产生破坏。Ray想到的办法,就是把目录/sbin下的每个文件名和文件大小记录到一个文本文件,以供对比参考。(因为可执行文件如果破坏会影响到文件的大小),写出能够实现这项操作的命令。(记录的目标文本文件名是姓名缩写),命令的结果用截图表示。
ko A'b#?-qa|Z7Ab0ls -l /sbin>/root/sbin_log

1r$uTR.xWf0LUPA开源社区R3y}/g#Q jd M

LUPA开源社区V2eE2kQ Z Ib
9.        使用网络设置命令设置IP地址为192.168.学号.1  子网掩码 255.255.255.0,将结果使用截图保存。LUPA开源社区*x7GG:K$Nb
查看本地的路由信息,将结果使用截图保存。
y;d4j/wg|}:KA0ifconfig eth0 192.168.学号.1 netmask 255.255.255.0LUPA开源社区#M7_.F;K1m dm"K
route -nLUPA开源社区z5m RU8teK$~.Lj7JK

t#g U G8b3d+O0LUPA开源社区 ]:y.u X(f$G
10.        Shell编程题(在机器上验证记分)
J;Z2GI lF u8W0(1)请使用shell编程实现系统数据备份功能,要求当系统时间为星期五时执行该操作。(10分)
qC ]^R:U)y)^0vi /etc/crontab
q*L3][4@}9@&dD(_9hF:[00 0 * * 5 root sh /root/Secript.sh
be(LQK]0(2)用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /姓名缩写dev 目录下(比如“/wdydev”)。(10分)LUPA开源社区D(I` MO&?qP:O
varchar1=`ls -l file1`LUPA开源社区!Xv*`K2]Ql9}
varchar2=`echo $varchar1|cut -c 1`
bg'oE0^k?,A"H0if [ varchar2 == 'c' ]; then
l.p8Dw3D&C b a!| Kb0 cp -f file1 /ckdev/LUPA开源社区T$_;v:VJwJ2i cf
fi

(n@ Ho+o{0

Q&O@6_z7D0(3)利用for语句实现前n个奇数之积(n由用户输入)(10分)LUPA开源社区qr t]j
用FOR来实现:
7er_@pUah&T0declare -i num1LUPA开源社区b0v,V2me3vS
declare -i nLUPA开源社区\6D~nv
declare -i init=1LUPA开源社区*F ~j-M$ip
declare -i xxx=1

/n&\xc,@e(Nn W'_u0LUPA开源社区J*Pi1?&fN

read -p "please n:" n

%j(f's Nqpd4i0LUPA开源社区?8|M4A+\/d3P-d1k

init=1
9Z,Ch7M(j0n=$(($n+1))
E WdX8\*}$Y/ISl0for (( init=1;init != n;init++ ))LUPA开源社区@,t;T#OlMi5@
{LUPA开源社区"Z!f:H/nNE:b@k
        num1=$(($init%2))
/cfR*M8_&f7aW'F0        if [ "$num1" == "1" ]; then
5C[ { `!_#if0                xxx=$(($xxx*$init))LUPA开源社区 j;on*?/hN g
        fi
B0_5WPSF:}2x-Sfi0}
*Dp)L.uD&o0echo "result:$xxx"LUPA开源社区7}(H"q/F0O:Z,Q2W

LUPA开源社区 E9Io-w)uU5q

用WHILE来实现:
'g4z;`c[\&J0declare -i num1LUPA开源社区 F'\C+f^8K7f
declare -i nLUPA开源社区y6G+{R8BF {m
declare -i init=1LUPA开源社区h:GI4l8p!s;x \ B
declare -i xxx=1LUPA开源社区!F3Ht0D G'V_

9Gj~F5W$@0read -p "please n:" n

1|qD5{4AR0

H"|UK%qFXugh0init=1
gIjclQs0n=$(($n+1))LUPA开源社区 MQ s4p+^|4{u5r
while [ $init != $n ]LUPA开源社区_-|8jltD
do

.d!fZ3Rv0LUPA开源社区 K D#Iv)n W

        num1=$(($init%2))
+x*Eg O f`2c:p}0        if [ "$num1" == "1" ]; thenLUPA开源社区~7j3q"b}_-ke }
                xxx=$(($xxx*$init))
WQ Km5k/UF2`8s$P0        fiLUPA开源社区g+n}DpNai ?
        init=$(($init+1))LUPA开源社区:}0@*\S5ru*sv
done
L"nE5C$Dn;Vm0echo "result:$xxx"

9o'{y"x)O6dIpx6m0

g.oPDO:pEk*y0(4)Cell宽带数据公司的客户服务中心每天都会接收到一些客户电话。值班人员为客户解答完毕后,客户可以通过电话按键对该值班人员的工作做出“满意”或“不满意”的投票评价,如果直接挂机则表示放弃投票。(15分)LUPA开源社区9_j-ajab+Z.N,`'X&B
   请编写一个shell脚本,读入每天电话的总数、“满意”或“不满意”的票数,统计放弃投票的数量。LUPA开源社区,q K\#fk{N-G
提示:放弃投票的数量=总数量-“满意”的票数-“不满意”的票数。可以使用while语句
)[,i X9x$? N0declare -i total_num=0
_ a]%aEo$x H.]4hQx0declare -i yes_num=0LUPA开源社区pa,P^E D?
declare -i no_num=0
Sa9{@U^,Sb0declare -i other_num=0

H E\4o!x0M0?!M1k0

/y0R!^LK(h0while [ 1 ]
~$bhaRI0do
;Qr&P'HX(X*H+R0date_new=`date '+%Y-%m-%d %H:%M:%S'`
!`Nup2O*BL Z[e9w0echo Today :$date_newLUPA开源社区-|3I6M6bg:~/Z&i"D
echo "online......"
;]0H+ig*yUUvm0sleep 20
v1G\5vX2N-CO Ilz0echo "reply is Satisfied/Dissatisfied:"
.W$jA5f ^LSG0echo "If satisfied input y/Y"LUPA开源社区yCqY4a)C
echo "If Dissatisfied input n/N"LUPA开源社区-q\QtH+GE ]
read -p  "input:" varchar1LUPA开源社区3C'f ~0e DU s_;_*N

+l*|J*K |'m$o0if [ "$varchar1" == "" ]; thenLUPA开源社区Vx{@c%_ l2c5P
        other_num=$((other_num+1))
2~$c'h a(K3N0        else
l,j0iX'W0        if [ "$varchar1" == "y" ] || [ "$varchar1" == "Y" ]; thenLUPA开源社区"T e#K A[H'Y)d@
                        yes_num=$((yes_num+1))LUPA开源社区X E-M$u!\-A^!o
                elseLUPA开源社区x5@S#pn:~pFz3U
                        if [ "$varchar1" == "n" ] || [ "$varchar1" == "N" ]; thenLUPA开源社区1C(N8f'Q"wWU9p
                                no_num=$((no_num+1))
2lp/I7ka/j0                        fiLUPA开源社区K8c4U/p Ag9\n:{
        fiLUPA开源社区 u @-gz H'i+M`t
fi
$L XsCu4B/i Ho\0        total_num=yes_num+no_num+other_numLUPA开源社区![9IH(X(S+e-[;j
        echo Total:$total_numLUPA开源社区.L w$S%z(NZ*P4{
        echo Satisfied:$yes_numLUPA开源社区#w'@2`$u,f3Z`,Hv6V
        echo Dissatisfied:$no_num
(l,? y;In/z}u%R5g0        echo Abord:$other_numLUPA开源社区5C&s {xyUc4N&G$~

Xl,g5XTo0done

XtRpU*mnj&}0LUPA开源社区G c'WbR6_{

(5)某数据公司需要录入客户的资料并保存到文件,每个客户的资料保存单独占一行。格式如下:(20分)
(o1Y`/\@ Y/I5e'xq0   客户号:姓名:地址:电话:邮政编码LUPA开源社区7Vt.oT9a{;r-EE9}
   其中要求客户号由系统自动产生,从2000起。
.i]bv7E0   请编写一个Shell脚本,实现菜单方式的程序:0:退出 1:提示输入每项数据,并按照规定的格式保存(保存的目标文件名为“姓名缩写.txt”)。2:可以根据用户输入的字符串进行查找记录,并显示。
:V:`|G]F0declare -i user_id
n3zFY-y'c0declare  usernameLUPA开源社区!`}dk(T*`}
declare  addressLUPA开源社区mF v ]7f9d9e.T;C#R
declare  telLUPA开源社区{1G*j r0f ~p+f
declare  codeLUPA开源社区2ws0J/} B(A*S#C%M
while [ 1 ]
Xa7z I"qH:k2[0do
s'`P\8kZ4f6y0echo "-----------------------------"
$w_M+y%H!i5{0echo "|0)Exit                     |"
#@\&E@2d^a0echo "|1)Input record             |"LUPA开源社区 ~:F/TY3b@8]
echo "|2)Search record            |"
rSGP3V0echo "_____________________________"

\Qan/D0LUPA开源社区;kT B*c"}n3g

read -p "choose 0/1/2)" num
(g!y*D&@!yT4q2`0case $num in
%P.@VbgS)U0"0")
SO#H y n0        exit;;

2_|7K*@m B{0LUPA开源社区vI:At5y"~Z5O

"1")LUPA开源社区C*@ F+mJ"S
read -p "first input (y/n):" flag
+]5CWxZpbaE0if [ $flag == "y" ] || [ $flag == "Y" ]; thenLUPA开源社区:K p6XfT
echo "user_id|usernam|address|telephone|code">/tmp/user.txt
`C+Gg:\Y0user_id=2000LUPA开源社区;v D Gg&EP,w Wh
elseLUPA开源社区blvja
count1=`wc -l /tmp/user.txt|awk '{print $1}'`LUPA开源社区8k4A'nOG(h,y/f8e
user_id=`cat /tmp/user.txt|sed -n "$count1"p|cut -d'|' -f 1`LUPA开源社区:| eKJ"VA D N+K
user_id=$(($user_id+1))
bU$y ~"Q0fi
M]ELI*s0clearLUPA开源社区&Z1QM y^zn
echo "user_id:$user_id"LUPA开源社区5H~1Q_ j2Ug
read -p "username:" username
j$ZMg:Vq+V1\ I D'\0read -p "address:" address
yVy@&l `,kW[(P0read -p "telephone:" tel
C2f#aZ?c0read -p "post code:" codeLUPA开源社区4U5UjQ_ V5Q1q)T

LUPA开源社区N8J ?9Z0}E9X!A

echo "$user_id|$username|$address|$tel|$code">>/tmp/user.txtLUPA开源社区'AM e{'e#a?kE
;;

y1S-B(y(k fXdmf0LUPA开源社区?(yf3L-o^

"2")LUPA开源社区\Izj8Fy
clearLUPA开源社区g8}'x*i.RY
read -p "Search record(username):" row
e f*cc\9Q{0count2=`wc -l /tmp/user.txt|awk '{print $1}'`LUPA开源社区 D6s D;U"W&SJ
init=2LUPA开源社区5u1h)FmwhU4G
count2=$(($count2+1))LUPA开源社区'L*R+Q"f M$|Aj
while [ $init != $count2 ]LUPA开源社区o~5l3}{g?E)~
do
)_Yk9q-b(^m0        row1=`cat /tmp/user.txt|cut -d '|' -f2|sed -n "$init"p`LUPA开源社区.r6feXzu8c |'q9V
        if [ "$row" == "$row1" ]; then
PfX!`n&d0                cat /tmp/user.txt|sed -n "$init"p
K h.RgIr+HN0        fiLUPA开源社区5@L/wkv'G BB e_A
        init=$(($init+1))LUPA开源社区AL3gC_r?/H^3H
doneLUPA开源社区Hl5cmu(@ dof
;;LUPA开源社区Xhvt9V lY3?`O Z

OWP|yE kf.N0esac
!E;[C-M;YQ2\F0doneLUPA开源社区.s w!M#N;F*z|


相关阅读:

TAG:

引用 删除 Guest   /   2008-08-19 09:43:04
5
thl_tha 引用 删除 thl_tha   /   2007-12-06 23:10:39
学习中。。。
翔云阁-桃李满天下是我的人生目标... 引用 删除 xautofzx   /   2007-09-27 07:57:00
Good
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-08-22  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 18698
  • 日志数: 60
  • 建立时间: 2007-07-22
  • 更新时间: 2008-07-30

RSS订阅

Open Toolbar