湖北汽车工业学院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、ash
Linux下默认的Shell是bash
执行shell脚本的方式:
(1) 输入重定向的操作方式: bash < 脚本名**
(2) 使用脚本名为bash参数: ** bash 脚本名 [参数]
(3) 赋予文件执行权限,直接运行: $ chmod a+x text
PATH=PATH:.
$ text
4、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,
and
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文件命名(区分大小写 )
理论上来讲,在大多数情况下除了‘/’这个特殊符号之外的所有其他字符都可以被正确地应用并发挥其作用。特别地,在用于命名 directories or files 的时候需要注意遵循这一原则,并且应尽量 avoid 在这些名称中出现以下特定符号:<, >, ?, * 等符号的混用可能会导致解析上的混乱或其他潜在问题。
文件的命名规则:
- 由于linux严格区分大小写,所以尽量都用小写字母
如果必须对文件名进行分割,建议使用"_",例如:itheima_bj_2020.log
目录名或文件名的长度不能超过 255 个字符
10、vi编辑器的工作模式
vi编辑器有三种工作方式命令方式、输入方式和ex转义方式
工作方式:通过在shell提示符处输入指令 vi ,可以使 vi 编辑器启动,并且处于使用 vi 作为编辑器的状态。
(2)输入方式:通过使用vi的各种操作指令(i)执行插入操作(i)、附加操作(a)、打开文件操作(o)、替换内容操作(s)、修改文本操作(c)或以另一种替代方式进行操作(r),可以从命令方式进入到输入方式
无需按回车键!由输入方式回到命令方式的办法是按下
(3)ex转义方式: 也叫底行方式,在ex方式中,命令是以
为了使用ex转义方式,先要输入一个冒号:
例如:退出vi的四种ex转义方式
- 使用:wq命令会将当前编辑缓冲区中的内容复制到你正在编辑的文档中,并脱离Vi编辑器返回到shell环境。
- 在进行任何修改之前使用:ZZ命令会将当前的缓冲区内容存储在文档中。
- 使用:x命令等价于使用:ZZ命令。
- 使用:q!命令会强制执行Vi的退出流程,并放弃当前的编辑内容。
例题:在Vi编辑器的命令模式中,在用户希望编辑文件时必须切换至插入模式才能输入字符;此时,在命令模式下按下(i)键即可切换到插入状态。通过使用(o或a)命令可以将Vi从文本输入状态转换至命令状态
在 vi 编辑环境下,使用( Esc )键进行模式转换。
11、vi编辑器删除指定的行(命令/底行)
- 删除字符的命令(键):
x 删除光标所在的字符
X 删除光标前面的那个字符
- 删除文本对象的命令(键):
dd 删除光标所在的整行
D 从光标位置开始删除到行尾
d<光标移动指令> 从光标位置删除至指定范围内的文本对象末尾
例题:在vi编辑器里,命令( dd )用来删除当前的行。
12、shell通配符 输入输出重定向符
当我们需要寻找某个文件时(注意:没有完全知道该文件的名字),只记得它包含几个特定字母(比如常见的组合),此时使用查找命令同样能够定位到相应的文档(也就是说,在给字查询的时候使用通配符也能定位到相应的文档)。这时候,在进行给字名称搜索时使用通配符‘*’和‘?’(特别提示:搜索的目标文档应置于引号内)。
比如,在继续查找文件'HTTPD.COMF'时
输入输出重定向符:
(1)输入重定向符“<”
作用:把命令的标准输入定向到指定的文件
形式:命令 < 文件名
(2)输出重定向符“>”
作用:把命令的标准输出重新定向到指定的文件
形式:命令 > 文件名
(3)输出附加定向符“>>”
作用:把命令的标准输出附加到指定文件的后面,原有内容不变
形式:命令>>文件名
在第8章第242页的位置上讨论文件命名规则时会涉及以下内容:硬件设备的命名方法。在Linux系统中不使用类似'盘符'的概念而是以具体的硬件名称来标识存储器资源其名称通常会被存储于$/.config/systemd/system/目录下。
SCSI接口类型的硬盘用sd来标识, IDE接口类型的硬盘用hd来标识。
在Linux中,不同硬盘的命名规则如下:
第一块SCSI接口类型硬盘:/dev/sda 第二块SCSI接口类型硬盘:/dev/sdb
第一块IDE接口类型硬盘:/dev/had 第二块IDE接口类型硬盘:/dev/hdb
第四个位置的字母揭示了磁盘分区的方式。当主分区数量最多时为1至4个时,在生成过程中最先形成的逻辑分区位于第5位。例如,在Windows系统中,默认情况下将D盘设为hda5;而F区则被配置为/hda7的位置。
例题如下:每个设备的文件名由主设备号与从设备号共同构成。对于第二块IDE硬盘而言,其设备名为( HDB ),其中该硬盘上第三个主分区对应的文件名为 HDB3, 其相关存储空间标识符为 HDB3-***
二、单选题(每题2分共30分)
1、Linux文件权限(ls–l) 第一列10个字符

该命令通过'-l'参数呈现详细且简洁的当前目录信息列表。此输出项按顺序列出各项属性及其对应值,并特别强调了文件或目录权限、所有者及组名、文件大小、创建/修改日期和时间等关键信息。
文件类型:-普通文件,d directory file,b block device file,c character device file,l symbolic link file.
文件权限: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.764
2、如何终止进程
前台:ctrl+c 后台:kill(ps查看进程信息)
例题:终止一个前台进程可能用到的命令和操作( B )
A.kill B. ctrl+ c C.shut down D.halt
3、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 cheng
4、如何新建文件(命令)
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;目录、d;块设备、b;字符设备、c;符号链接、l。 使用file命令来查看
9、文件的权限(chmod)
chmod命令——用于改变或设置文件或目录的存取权限
(1)以符号模式改变权限
格式:chmod [who] [+ | - | =] [mode] 文件名
操作对象who可是下述字母中的任一个或者它们的组合:
u 代表普通用户群体;g 是同一组成员的代称;o 包括除上述以外的其他普通用户;a 涵盖全体注册用户的账户
操作符号可以是:+ 添加某个权限。- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。
设置 mode 所表示的权限可用下述字母的任意组合:
r 可读。 w 可写。 x 可执行。
X 仅在目标文件对某些用户的可执行性满足或该文件为目录时才会附加x属性
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。
t 保存程序的文本到交换设备上。
u 与文件属主拥有一样的权限。
g 与和文件属主同组的用户拥有一样的权限。
o 与其他用户拥有一样的权限。
例:$chmod a+x ex1
(2)以绝对方式改变权限
格式: chmod mode 文件名
mode是由3个八进制数字组成的字段值,在该字段中:第1个数字代表文件主用户的权限信息;第2个数字代表组用户(group)的权限信息;而第3个数字则代表其他非组用户的权限信息。
r- - r- - r- - 可读 二进制:100 100 100 八进制:444
rw- rw- rw- 可读可写 二进制: 110 110 110 八进制:666
rwx rwx rwx
例:$chmod 664 ex1
例题1:文件exerl的访问权限设置为rw-r--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)是Linux操作系统中的基础资源库,在程序运行时提供各种函数调用所需的基本运行环境支持。
- 超级用户根目錄(/root)只允许具有超级权限的root账户进行读取操作,在大多数情况下普通账户无法访问这一重要的资源区域。
- 应用程序与文件目錄(/usr)是Linux系统中占用硬盘空间最大的一个主要存储区域,在这里集中存储着各种应用程序软件包以及相关的共享文件资源等重要数据项。
12、shell的环境变量(如何查看环境变量内容) 第4章 4.6.8
HOME:用户主目录的全路径名
LOGNAME:即你的注册名,由Linux自动设置
MAIL:你的系统信箱的路径
PATH:shell从中查找命令的目录列表。可以设置它,
如:PATH=PATH:HOME/bin
PS1:shell的主提示符。
通常情况下,默认情况下,在Bash环境中使用的控制台提示符形式为‘\s-\v$’。其中,在Bash环境中使用的控制台提示符形式‘\s-\v$’中的各个组成部分分别代表:‘\s’对应于Shell名称;‘\v’则代表Bash版本号。允许用户自定义控制台提示符内容(即PS1),例如:$PS1=zxj
PS1="Enter Command> “
则:主提示符改成:”Enter Command>”
PWD:你当前工作目录的路径
SHELL:你当前使用的shell
TERM:你的终端类型
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 science
14、gcc gdb(调试条件和gcc有关)结合
gdb程序调试的对象是可执行文件,而不是程序的源代码文件;
正在调试的可执行程序必须包含其对应的源代码,并且该源代码应位于与可执行文件处于同一目录空间中。
为了使最终生成的可执行文件能够供调试使用,在使用gcc指令进行编译时,请告诉编译器包含调试信息
15、根目录下的子目录(8.3.3)
- /bin :用于存储用户认为最重要的常用指令。
- /dev:包含所有Linux系统中使用的外部设备。
- /etc :包含与系统管理相关的配置文件以及相关子目录。
- /home :为每位用户分配了一个主目录空间。
- /lib :存储了操作系统的基本动态链接库。
- /root :代表了超级用户root的所有资源。
- /usr :通常占据磁盘空间最大容量,并用于存储应用程序和文件。
三、操作题(每题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 这个 参数了!这很重要的!
该实例展示了如何利用与进程操作相关的系统调用。每个进程都具有唯一的进程中断号(PID)。PID通常按照数值顺序递增,在一般情况下,子程序的PID会比其主进程中断号大。然而,在某些情况下(如当超过系统定义的最大值时),则会反转使用最小未使用的 PID 值。需要注意的是,在父进程中出现故障或退出的情况下(如指定 PID 为 1 的新主程),则会影响相关处理逻辑。
本程序通过调用fork函数创建子进程,并利用getpid函数获取当前进程的PID以及getppid函数获取父进程的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);
}
程序运行结果如下:
$./procl
Original parent: 2009
Child: 2010
Child’s old ppid: 2009
Child’s new ppid: 1
请读者通过输出结果来独立分析程序的行为模式。请注意,在该系统中,默认情况下进程采用并发 执行;一旦子进程被正确分配到资源,则调度程序将返回一个零指示。
例4.15
例4.15
案例分析
$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有点儿相似
该脚本将所有位于第二个位置参数及之后的所有参数所指定位点上的文件进行复制操作,并将其放置至第一个位置参数所指定位点中的对应目录下。
答:#!/bin/bash //调用bash程序对其解释执行,相当与于头文件
**dir=$1 //**初始化
**shift //**参数向左移
**while [$1] //**循环
do
**file=$1 //**初始化 ,赋值现在位置的参数1
**cp 1 dir //**将现位置参数1中的值复制到目录中
**shift //**参数左移
done
**ls $dir //**显示指定目录中的列表
运行:bash+代码名称+要移动的目录+要移动的文件
五、编程题(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" **
