湖北汽车工业学院Linux期末复习Linux期末复习
一、填空题(每空1分共20分)
1、Linux桌面系统(2个空)桌面系统:它控制桌面图标和目录的出现位置、桌面和目录菜单的内容,以及控制在桌面图标、目录和菜单上进行鼠标操作所产生的效果。KDE和Gnome是Linux操作系统上最流行的桌面环境系统。
2、gcc编译步骤(2个空)预处理 ----> 编译 ----> 汇编 ----> 连接用gcc带不同参数编译下列hello.c程序:(1)只作预处理,生成hello.i,相应命令为: gcc -E hello.c -o hello.i(2)只进行编译,不做汇编,生成汇编代码,命令为: gcc –S hello.c (3)只进行汇编,不做连接,生成目标代码,命令为: gcc –c hello.c(4)以默认方式生成可执行程序a.out,命令为: gcc hello.c (5)生成可执行程序hello,命令为: gcc o hello.o hello.c
3、shell(2个空)linux几种常见的Shell:sh、bash、csh、tcsh、ashLinux下默认的Shell是bash执行shell脚本的方式: (1)输入重定向的执行方式: $ bash < 脚本名
(2)以脚本名作为bash参数: $ bash 脚本名 [参数]
(3)添加执行权限,直接进行执行: $ chmod a+x text $ PATH=$PATH:. $ text4、cal命令 cal命令用于用于显示当前或者指定日期的日历。使用该命令不带任何参数:显示当前月份的日历只有一个参数:显示当前年份的日历含有两个参数:前者表示月,后者表示年。例:$cal 10 :显示公元10年的日历$cal 10 2006 :显示2006年10月的日历5、文件的类型及权限(ls -l)文件类型:-普通文件,d目录文件,b块设备文件,c字符设备文件,l符号链接文件。文件权限:r读(4),w写(2),x执行(1),- 没有权限(0)。例题:某⽂件的权限为drw- r- - r- - ⽤数值形式表⽰该权限,则该⼋进制数值为( 644 ),该⽂件属性是( 目录文件 )6、管道(第4章) 管道就是将前一个命令的标准输出作为后一个命令的标准输入。 管道线是由竖杠“|”隔开的若干个命令组成的序列, 每个命令执行时都有一个独立的进程, 前一个命令的输出是下一个命令的输入; 管道线中有一类命令也成为“过滤器”,即:首先读取输入,然后将以某种简单方式进行变换, 相当于过滤,再将处理结果输出, 如:grep,sort,wc等命令就是过滤器; 一个管道线中可以包括多条命令: ls -l $HOME | wc –l ls | grep m*.c | wc –l 该命令的功能是:显示当前目录中文件名是以m开头的C文件的数目7、read命令功能:从键盘上读取数据,然后赋给指定的变量。格式 :read 变量1 [变量2…]变量个数与给定数据个数相同,则依次对应赋值变量个数少于数据个数,则从左至右对应赋值,但最后一个变量被赋予剩余的所有数据。变量个数多于给定数据个数,则依次对应赋值,而没有数据与之对应的变量取空串8、cat命令(书上例子搞明白) 功能:一是显示文件的内容;二是连接两个或多个文件 例题: $ cat m1 显示文件m1的内容 $ cat m1 m2 显示文件m1和m2的内容 $ cat m1 m2 > m3 把文件m1和m2的内容合并起来放在m3中9、Linux文件命名(区分大小写) 理论上除了字符“/”之外,所有的字符都可以使用,但是要注意,在目录名或文件名中,不建议使用某些特殊字符,例如, <、>、?、* 等尽量避免使用。文件的命名规则:由于linux严格区分大小写,所以尽量都用小写字母 如果必须对文件名进行分割,建议使用"_",例如:itheima_bj_2020.log目录名或文件名的长度不能超过 255 个字符
10、vi编辑器的工作模式vi编辑器有三种工作方式命令方式、输入方式和ex转义方式(1)命令方式:在shell提示符后输入命令vi,进入vi编辑器就处于vi的命令方式。 (2)输入方式:通过输入vi的插入命令( i )、附加命令( a )、打开命令(o )、替换命令( s )、修改命令( c )或取代命令( r )可以从命令方式进入到输入方式。 无需按回车键!由输入方式回到命令方式的办法是按下<Esc>键(3)ex转义方式: 也叫底行方式,在ex方式中,命令是以<Enter>键结束的正文行为了使用ex转义方式,先要输入一个冒号:例如:退出vi的四种ex转义方式:wq 把编辑缓冲区的内容写到你编辑的文件中,退出编辑器,回到 shell下。:ZZ 仅当作过修改时才将缓冲区内容写到文件上。:x 与 :ZZ相同。:q! 强行退出vi。感叹号(! )告诉vi,无条件退出,丢弃缓冲区内容。例题:在vi编辑器中的命令模式下,若用户想要编辑文件,需要切换到插入模式才能够输入字符,这时在命令模式下按下( i )键即可进入插入模式。使用( o或a )命令可以使vi由文本输入模式进入到命令模式在 vi 编辑环境下,使用( Esc )键进行模式转换。
11、vi编辑器删除指定的行(命令/底行)删除字符的命令(键): x 删除光标所在的字符 X 删除光标前面的那个字符删除文本对象的命令(键): dd 删除光标所在的整行 D 从光标位置开始删除到行尾 d<光标移动命令> 从光标位置开始删到由光标移动限定的文本对象的末尾 例题:在vi编辑器里,命令( dd )用来删除当前的行。
12、shell通配符 输入输出重定向符 通配符:当要查找某个文件时,不知道该文件的全名,只知道这个文件包含几个特定的字母,此时用查找命令也是可找到相应文件的。这时在给字查找文件名时通配符“*”、“?”。注意:要找的文件包括在引号中。 例如,还是查找文件“httpd.conf”,但仅记得该文件名包含“http”字符串,可使用如下命令查找:#find / –name “*http*” -print 输入输出重定向符:(1)输入重定向符“<”作用:把命令的标准输入定向到指定的文件 形式:命令 < 文件名(2)输出重定向符“>”作用:把命令的标准输出重新定向到指定的文件形式:命令 > 文件名(3)输出附加定向符“>>”作用:把命令的标准输出附加到指定文件的后面,原有内容不变形式:命令>>文件名
13、设备文件的命名方式(硬盘如何命名) 第8章P242 /dev /sda
在Linux中,没有盘符这个概念,通过设备名来访问设备,设备名存放在/dev目录中。 SCSI接口类型的硬盘用sd来标识, IDE接口类型的硬盘用hd来标识。 在Linux中,不同硬盘的命名规则如下: 第一块SCSI接口类型硬盘:/dev/sda 第二块SCSI接口类型硬盘:/dev/sdb 第一块IDE接口类型硬盘:/dev/had 第二块IDE接口类型硬盘:/dev/hdb第四个位置的字母反映了磁盘如何分区。由于最多可以有四个主分区:1、2、3、4,因此,第一个生成的逻辑盘在位置5,如:windows的分区D对应hda5,F区就是/hda7 例题:每个设备文件名由主设备号和从设备号描述。第二块IDE硬盘的设备名为( hdb )它上面的第三个主分区对应的文件名是 ( hdb3 )。二、单选题(每题2分共30分)
1、Linux文件权限(ls–l) 第一列10个字符使用"ls -l"选项将显示当前目录每行一个内容的长列表格式。该行以"文件或目录权限,所有者和组名,文件大小,创建/修改日期和时间,文件/文件夹名称"的一些特征开始。文件类型:-普通文件,d目录文件,b块设备文件,c字符设备文件,l符号链接文件。文件权限:r读(4),w写(2),x执行(1),- 没有权限(0)。例题1:在某个目录下执行shell命令ls–l,得到如下的输出:lrwxr-x--x 3 bob student 1024 May 7 8 :30 test则下述说法错误的是:( D )A. test是个链接文件 B. 该文件的属主是bob C. 与bob同组的用户可以执行该文件 D. student组外的用户对文件test具有写的权限例题2:某文件的组外成员的权限为只读,所有者有全部权限,组内的权限为读与写,则该 文件的权限为(D)A.467 B.674 C.476 D.7642、如何终止进程前台:ctrl+c 后台:kill(ps查看进程信息)例题:终止一个前台进程可能用到的命令和操作( B ) A.kill B. ctrl+ c C.shut down D.halt3、ls –l ls –a ls-i ls -a 将列出所有以 ( '.' ) 格式开头的隐藏文件以及普通文件。 ls -i将列出每个文件和目录的索引编号。 例题: 用ls–al 命令列出下面的文件列表,( D )文件是符号连接文件。 A -rw-rw-rw- 2 hel-s users 56 Sep 09 11:05 hello B -rwxrwxrwx 2 hel-s users 56 Sep 09 11:05 goodbey C drwxr--r-- 1 hel users 1024 Sep 10 08:10 zhang D lrwxr--r-- 1 hel users 2024 Sep 12 08:12 cheng4、如何新建文件(命令) touch a.txt vi a.txt cat > a.txt
5、设备文件(/dev) 考所有设备文件的归属 例题:linux文件系统的文件都按其作用分门别类的放在相关的目录下,对于外部设备文件,一般应将其放在(C) A./bin B./etc C./dev D./lib 6、光盘的文件系统类型:ISO9660例题:光盘所使用的文件系统类型为( D )。 A.ext2 B.ext3 C.swap D.ISO9660
7、光盘如何挂载和卸载(块设备)挂载:命令格式:mount [-t type] device dir 其中:-t type:指定文件系统类型; device:待安装文件系统的块设备名; dir: 安装点(目录); 例如:在软驱中插入一张磁盘,然后将软驱挂载为msdos文件类型。 挂载软磁盘的命令:mount -t msdos /dev/fd0 /mnt/floppy卸载:命令格式:umount <分区名或分区安装点> 例如:卸载软盘的msdos文件系统:umount -t msdos /dev/fd0例题:将光盘CD-ROM(hdc)安装到文件系统的/mnt/cdrom目录下的命令是( C ) A.mount /mnt/cdrom B.mount /mnt/cdrom/dev/hdc C.mount /dev/hdc /mnt/cdrom D.mount /dev/hdc 将光盘/dev/hdc卸载的命令是( B ) A.unmount /dev/hdc B.umount /dev/hdc C.unmount /mnt/cdrom D.umount /mnt /cdrom/dev/hdc
8、如何确定一个文件的类型(file命令)给你一个文件名,确定什么类型文件类型:-普通文件,d目录文件,b块设备文件,c字符设备文件,l符号链接文件。
file命令查看文件类型9、文件的权限(chmod)chmod命令——用于改变或设置文件或目录的存取权限(1)以符号模式改变权限格式:chmod [who] [+ | - | =] [mode] 文件名 操作对象who可是下述字母中的任一个或者它们的组合: u 表示“用户(user)”, g 表示“同组(group)用户”, o 表示“其他(others) 用户”。a 表示“所有(all)用户”。 操作符号可以是:+ 添加某个权限。- 取消某个权限。 = 赋予给定权限并取消其他所有权限(如果有的话)。 设置 mode 所表示的权限可用下述字母的任意组合: r 可读。 w 可写。 x 可执行。 X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。 s 在文件执行时把进程的属主或组ID置为该文件的文件属主。 t 保存程序的文本到交换设备上。 u 与文件属主拥有一样的权限。 g 与和文件属主同组的用户拥有一样的权限。 o 与其他用户拥有一样的权限。 例:$chmod a+x ex1(2)以绝对方式改变权限格式: chmod mode 文件名mode是以3位八进制数字出现的,第一位表示文件主权限,第二位表示组用户权限,第三位表示其他用户权限r- - r- - r- - 可读 二进制:100 100 100 八进制:444rw- rw- rw- 可读可写 二进制: 110 110 110 八进制:666rwx rwx rwx 例:$chmod 664 ex1 例题1:文件exerl的访问权限为rw--r--,现要增加所有用户的执行权限和同组用户的写权限,下列命令正确的是( B ) A.chmod a+x g+w exerl B.chmod 765 exerl C.Chmod o+x exerl D.chmod g+w exerl 例题2:执行命令 chmod o+rw file 后,file文件的权限变化为( B )。 A.同组用户可读写 file 文件 B.所有用户都可读写 file 文件 C.其他用户可读写 file 文件 D . 文件所有者可读写 file 的10、用户账号 P234 /password /shadow /group三个文件的作用 /etc/passwd用于存放用户帐号信息 /etc/shadow用于存放每个用户加密的密码, /etc/group用于存放用户的组信息。
11、根目录下子目录的作用(/bin /dev /etc /root /usr) 8.3.3/bin :存放了使用者最常用的命令。/dev:包含了所有linux系统中使用的外部设备。/etc :包含了系统系统管理所需要的配置文件和子目录。 /home :用来存放用户的主目录。/lib :存放系统最基本的动态链接库。/root :超级用户root的主目录,一般用户没有访问权限。/usr :linux系统中占用硬盘空间最大的目录,存放用户的应用程序和文件。
12、shell的环境变量(如何查看环境变量内容) 第4章 4.6.8HOME:用户主目录的全路径名LOGNAME:即你的注册名,由Linux自动设置MAIL:你的系统信箱的路径PATH:shell从中查找命令的目录列表。可以设置它, 如:PATH=$PATH:$HOME/binPS1:shell的主提示符。 bash默认的主提示符一般为“\s-\v\$ ”。 其中,\s表示shell的 名称; \v表示bash的版本号。可以随意设置PS1的值,如: PS1="Enter Command> “ 则:主提示符改成:”Enter Command>”PWD:你当前工作目录的路径SHELL:你当前使用的shellTERM:你的终端类型
13、export命令(环境变量) 为了使其后的各个子进程能继承父进程中定义的变量,就必须用export(转出)命令将这些变量送入进程转出区。export命令的一般使用形式是:export [ 变量名 ] 同一个export命令行上可以有多个变量名。例题:$ major=“computer science” $ export major $ cat exam12 major=“English” /*局部变量,在子进程内部优先使用*/ echo “His major is $major” exam13 $ cat exam13 /*没有定义新的变量*/ echo “her major is $major” $ exam12 His major is ? English Her major is ? Computer science14、gcc gdb(调试条件和gcc有关)结合 gdb程序调试的对象是可执行文件,而不是程序的源代码文件; 要调试的可执行程序需要有源代码,并且源代码应该放在与可执行文件相同的目录下; 如果要让产生的可执行文件可以用来调试,需在执行gcc指令编译程序时,加上-g参数,指定程序在编译时包含调试信息。
15、根目录下的子目录(8.3.3)/bin :存放了使用者最常用的命令。/dev:包含了所有linux系统中使用的外部设备。/etc :包含了系统系统管理所需要的配置文件和子目录。 /home :用来存放用户的主目录。/lib :存放系统最基本的动态链接库。/root :超级用户root的主目录,一般用户没有访问权限。/usr :linux系统中占用硬盘空间最大的目录,存放用户的应用程序和文件。三、操作题(每题10分20分)
1、10个小题(每题1分)
⑴创建目录例:用 mkdir建立一个目录subdir。 命令: mkdir subdir
⑵切换工作目录例:将当前目录改到subdir。命令: cd subdir ↲
⑶新建文件例:新建文件a.text 命令:touch↲ a.text⑷文件改名例:将文件file2改名为file3 命令:mv file2 file3↲
⑸删除文件例:删除文件file1 命令:rm file1
⑹改文件权限chmod命令——用于改变或设置文件或目录的存取权限例:$chmod 664 ex1
⑺复制文件例:将file1内容复制到file2中命令:cp file1 file2
⑻删除目录例:删除目录mydir 运行命令: rmdir mydir 如果mydir目录里有内容应该先清空mydir子目录内容,再删除该子目录。 运行命令:rm mydir/*, rmdir mydir。⑼查看当前登录用户有哪些 命令:who am i ⑽查看敲过的历史命令 命令:history 如果不带任何参数,则history命令会显示历史命令的清单 2、5个小题(每题2分) 第8章
⑴新建组(groupadd)例:新建一个新组work,并为指定GID是600命令:#groupadd -g 600 work
⑵新建用户(useradd)例:建一个用户账号user01,主目录为/home/user01,登录时用bash作为hell程序命令:#useradd -d /homeuser01 –s /bin/bash user01
⑶删除用户例:删除用户帐号user01命令:#userdel user01
⑷删除组work#groupdel work(5)解压缩(tar命令)。
tar [-cxtzjvf] 文档和目录 ....
参数: -c :建立一个压缩文档的参数指令 (create 的意思 ) ;
-x :解开一个压缩文档的参数指令!
-t :查看 tarfile 里面的文档!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩和解压缩。
-z :是否同时具备 gzip 的属性?亦即是否需要用 gzip 压缩?
-v :压缩的过程中显示文档!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile 』就是错误的写法, 要写成 『 tar -zcvPf tfile sfile 』才对喔! 范例:
范例一:将整个 /etc 目录下的文档全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc
范例二:查阅上述 /tmp/etc.tar.gz 文档内有哪些文档?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
由于我们使用 gzip 压缩,所以要查阅该 tar file 内的文档时, 就得要加上 z 这个 参数了!这很重要的!四、程序填空题(每题10分共20分)
1、关于fork创建子进程(每空2分) 第7章内容 参考书本例题7.3.2(P216 )
【例7.3】该实例说明如何使用有关进程操作的系统调用。每个进程都有唯一的进程ID号(PID)。PID通常在数值上逐渐增大。因此,子进程的PID一般要比其父进程大。当然,PID的值不可能无限大,当它超过系统规定的最大值时,就反转回来使用最小的尚未使用的PID值。如果父进程死亡或退出,则子进程会被指定一个新的父进程int(其PID为1)。 本程序利用fork()创建子进程,利用getpid()getppid()分别获得进程的PID和父进程的PID,使用sleep()将相关进程挂起几秒钟。#include <unistd.h>#include <sys/types.h>#include <stdio.h>#include <errno.h>int main(int argc,char **argv){pid_t pid,old_ppid,new_ppid; pid_t child,parent; parent=getpid( ); /*获得本进程的PID*/ if((child=fork( ))<0){ printf(“fork error”); }else if(child==0){ /*此时是子进程被调度运行*/ old_ppid=getppid(); sleep(2); new_ppid=getppid(); } else { sleep(1); exit(0); } /*父进程退出*/ 、 /*下面仅子进程运行*/ printf(“Original parent:%d\n”,parent); printf(“Child:%d\n”,getpid()); printf(“Child’s old ppid:%d\n ”,old_ppid); printf(“Child’s new ppid:%d\n”,new_ppid); exit(0);}程序运行结果如下:$./proclOriginal parent: 2009Child: 2010Child’s old ppid: 2009Child’s new ppid: 1 请读者根据输出结果自行分析程序的运行情况。注意,进程是并发执行的;当子进程被成功调度后,调度程序的返回值是0。2、shell 第4章内容
参考习例题4.15(P132) 课后习题4.9
【例4.15】for语句的使用——显示给定目录下指定文件的内容 $cat ex14 #display files under a given directory #$1-the name of the directory #$2-the name of files dir=$1 ; shift if [ -d $dir ] then cd $dir for name do if [ -f $name ] then cat $name echo “End of ${dir}/$name” else echo “Invaid file name ${dir}/$name” fi done else echo “Bad directory name :$dir” fi 执行这个shell脚本时,如果第一个位置参数是合法的目录,那么就把后面给出的各个位置参数所对应的文件显示出来;若给出的文件名不正确,则显示出错信息。如果第一个位置参数不是合法的目录,则显示目录名不对。 结合一起看考题跟课后习题4.9有点儿相似 编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件复制到第一个位置参数指定的目录中。答:#!/bin/bash //调用bash程序对其解释执行,相当与于头文件dir=$1 //初始化 shift //参数向左移 while [$1] //循环 do file=$1 // 初始化 ,赋值现在位置的参数1cp $1 $dir //将现位置参数1中的值复制到目录中 shift //参数左移done ls $dir //显示指定目录中的列表运行:bash+代码名称+要移动的目录+要移动的文件五、编程题(10分) 原题!!!
斐波那契数列 课后习题4.14
编写一个shell脚本,求斐波那契数列的前10项及总和。#!/bin/bash
num1=1
num2=1
echo "斐波那挈数列前10项和:"
echo -n "$num1+$num2"
sum=2
for((i=1;i<=8;i++))
do
((tmp=num1+num2))
echo -n "+$tmp"
((num1=num2))
((num2=tmp))
((sum=sum+tmp))
done
echo "=$sum" |