-f 强迫删除文件,不询问用户
-r 递归删除。(将参数中列出的全部目录和子目录删除) -i 进行交互式删除
7)more命令:每次以一个page显示
一般和别的命令用管道符配合使用。例如: ls -l |more
8)cat命令: 显示文件的内容
cat data.txt 显示文件的内容
9)移动或更改文件名的mv命令
mv data.txt .. 移动文件 mv data1.txt data2.txt 更改文件名 10)显示目前所在目录的pwd命令
pwd
11)重定向与管道符
| 管道操作,前一个命令的输出是后一个命令的输入
〉 可将结果输出到文件中,如果该文件原来就存在,则该文件原有内容
会被删除。
》 将结果附加到文件后面,原文件内容不会被清除。 ls –l > dir.txt
cat data1.txt>> all_data.txt 12)chmod命令:修改文件的权限 chmod u+rwx file1 chmod u-x file1 chmod g+rw,o+r file1 //同组用户对file1增加权限是可读、可写,其它用户则只能读
chmod 700 file1
13)ps命令: 查询正在执行的进程
(2)输入以下程序并执行,体会shell编程技巧
启动Linux,输入用户名和密码;“系统工具/终端”进入shell,在提示符下键入 vi ex1.sh,回车,进入vim编辑系统,按I,或a或o进入输入模式,键入该程序,结束后,按Esc键进入命令模式,按“:”进入最后行模式,按wq回车,存盘并退出vim,在shell下执行ex1.sh程序.
1)输入下列程序并存为文件ex1.sh #!/bin/csh
var=”hello” echo$var
echo”The program $0 is now running ” echo”The first parameter was $1” echo”The second parameter was $2” echo”The parameter list was $*”
31
echo”The user’s home directory is $HOME” echo”please enter a new word” read var echo $var exit 0
键入‖sh ex1.sh one two thre‖ 或 ‖sh>ex1.sh one two thre‖ 运行结果为:
Hello
The program ex1.sh is now running The first parameter wse one The second parameter wse two The parameter list wse one two thre The user‘s home directory is /home/y Please enter a new word Baby Baby
2)输入下列程序并存为文件ex2.sh
#!/bin/csh count=1
While test $count –le 5 do
echo ”here is cycle” count=$(($count+1)) done exit 0
运行结果为:here is cyle
here is cyle here is cyle here is cyle here is cyle
实验二 进程管理
3、实验内容 (1)参考程序
# include
{ int p1, p2;
while((p1=fork())= = -1);
32
if(p1= =0)
putchar(?b‘); else
{ while((p2=fork())= =-1); if(p2= =0) putchar(?c‘); else
putchar( ?a‘); } }
在shell提示符下键入vi jc1.c,进入vi编辑状态,在此状态下输入上述程序。完毕后按ESC键,按:,键入wq,推出vi。
在shell提示符下键入 cd /usr/bin
gcc296 –o /home/y/jc1.out /home/y/jc1.c cd
执行程序: ./jc1.out 运行结果:bca
(2) # include
main()
{ int p1, p2, i;
while((p1=fork())== -1); if(p1==0)
for(i=0;i<5;i++)
printf(“child%d\\n”,i); else
{ while((p2=fork())==-1); if(p2==0)
for(i=0;i<5;i++)
printf(“son%d\\n”,i); else
for(i=0;i<5;i++)
printf(“daughter%d\\n”,i); } } 操作同上 运行结果: child0 child1 child2 child3 child4 son0 son1
33
son2 son3 son4
daughter0 daughter1 daughter2 daughter3 daughter4
在程序中加入系统调用lockf()
#include
{ int p1, p2, i;
while((p1=fork())== -1); if(p1==0) {
lockf(1,1,0); /*加锁,这里第一个参数为stdout(标准输出设备的描述符)*/ for(i=0;i<5;i++)
printf(“child%d\\n”,i);
lockf(1,0,0); /*解锁*/ }
else
{ while((p2=fork())==-1); if(p2==0)
{
lockf(1,1,0); /*加锁*/ for(i=0;i<5;i++)
printf(“son%d\\n”,i);
lockf(1,0,0); /*解锁*/ }
else {
lockf(1,1,0); /*加锁*/ for(i=0;i<5;i++)
printf(“daughter%d\\n”,i); lockf(1,0,0); /*解锁*/
}
} }
运行结果和上一个相同
分析:因为上述程序执行时,不同进程之间不存在共享临界资源问题,所以加
锁与不加锁效果相同。 (3)
1)编制一段程序,使其实现进程的软中断通信。
34
要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止。
Child Processl1 is killed by Parent! Child Processl2 is killed by Parent!
父进程等待两个子进程终止后,输出下列信息后终止。 Parent Process is Killed!
参考程序:
#include
int p1,p2;
while((p1=fork())==-1); if(p1>0) {
while((p2=fork())==-1); if(p2>0) {
wait_mark=1;
signal(SIGINT,stop); waiting(0); kill(p1,16); kill(p2,17); wait(0);
wait(0);
printf(―parent process is killed!\\n‖); exit(0); } else
{
wait_mark=1; signal(17,stop); waiting( ); lockf(stdout,1,0);
printf(―child process2 is killed by parent!\\n‖); lockf(stdout,0,0);
exit(0);
}
35