table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}
1、描述个人计算机基本输入输出系统(BIOS)的一般功能,以及引导加载程序如何使用其嵌入式例程。
PC BIOS 功能概述
PC BIOS 的一般功能包括:
在开机时执行基本初始化任务,发现并配置外围硬件;
管理板载硬件时钟,可在 BIOS 配置中设置日期和时间,设置后内部时钟会记录时间并提供给操作系统,操作系统也能设置硬件时钟;
配置存储设备,现代 PC 有多种存储设备,新系统能自动检测和配置部分硬件,旧 BIOS 版本需手动配置;
可配置启动设备顺序;
进行资源分配,涉及 PC 架构的内部资源,如中断(IRQ)、I/O 等的选择。
引导加载程序的作用
引导加载程序(如 LILO 或 GRUB)的工作是在开机时启动 Linux 内核。BIOS 会将引导加载程序加载到内存并启动它,引导加载程序从 BIOS 发现和配置好的存储设备中寻找操作系统或操作系统加载器软件,以启动操作系统。
BIOS 的磁盘访问限制
BIOS 存在访问磁盘限制,若引导加载程序或内核镜像位置超出 BIOS 可访问范围,可能导致启动失败。
2、1024硬盘柱面对Linux引导加载程序有什么意义?
BIOS加载引导加载程序到内存并启动它时,无法访问第1024个柱面之后的磁盘部分,若无法读取全部引导加载程序,会导致启动失败。此外,旧版本的LILO要求内核映像位于前1024个柱面内。因此在安装时分区需要规划,将内核安装在第1024个柱面以下。
3、请说出 /proc 文件系统中包含系统资源分配信息的三个文件。
interrupts、dma、ioports
4、以下哪种SCSI接口的数据传输速率最快:SCSI – 1、SCSI – 2、Ultra SCSI还是Fast – Wide SCSI?
以下是调整为Markdown格式的内容:
Ultra SCSI
的数据传输速率为
20MBps
,
Fast – Wide SCSI
的数据传输速率为
20MBps
,
SCSI – 1
和
SCSI – 2
的数据传输速率均为
5MBps
,因此
Ultra SCSI
和
Fast – Wide SCSI
的数据传输速率最快。
5、用于 USB 硬盘的驱动程序是什么?
用于 USB 硬盘这类大容量存储设备的驱动程序是 usb – storage.o。
6、启动你的电脑并进入BIOS配置实用程序。检查硬件日期和时间设置是否正确。
在启动电脑时,大多数PC会显示进入BIOS配置实用程序的方法,通常是在启动期间按下特定按键。进入后,在菜单式屏幕中找到日期和时间设置项,查看并确保其设置正确。
BIOS可管理板载硬件时钟,最初需在BIOS配置中输入日期和时间,之后内部时钟会记录时间并提供给操作系统,操作系统也能在有准确外部时间参考(如NTPD服务器)时设置硬件时钟。
7、检查你电脑上调制解调器和声音的外部接口。这些设备是集成在主板上,还是独立的扩展卡?如果是扩展卡,请确定它是ISA卡还是PCI卡。
需检查 PC 的调制解调器和声音外部接口,判断设备是集成在主板上还是独立扩展卡,若是扩展卡则确定是 ISA 或 PCI 类型。
8、请给出 cat /proc/dma 和 cat /proc/ioports 的输出示例
cat /proc/dma 输出如下:
0: MS Sound System
1: MS Sound System
2: floppy
4: cascade
cat /proc/ioports 输出如下:
0000 - 001f : dma1
0020 - 003f : pic1
0040 - 005f : timer
0060 - 006f : keyboard
0070 - 007f : rtc
0080 - 008f : dma page reg
00a0 - 00bf : pic2
00c0 - 00df : dma2
00f0 - 00ff : fpu
0170 - 0177 : ide1
02f8 - 02ff : serial(auto)
0370 - 0371 : OPL3 - SAx
0376 - 0376 : ide1
0388 - 0389 : mpu401
9、如何使用minicom连接调制解调器,并检查其对AT命令的响应以及手动拨打互联网服务提供商(ISP)并观察输出?
操作步骤为:
在命令行输入
minicom /dev/modem
连接调制解调器;
观察其对
AT
命令的响应是否为
OK
;
手动拨打 ISP 并观察调制解调器输出。
10、将一个 USB 设备(鼠标、打印机等)连接到你的系统。运行 lsmod 命令来验证相应的驱动程序是否已加载。
操作步骤
连接设备
先将 USB 设备连接到系统。
执行命令
在命令行输入以下命令并回车执行:
bash
lsmod
查看输出结果
根据所连接的设备类型,检查输出结果中是否有对应的驱动模块:
–
鼠标
:查看是否存在
mousedev
模块
–
打印机
:查看是否存在
printer
模块
判断驱动状态
– 若输出结果中包含相应模块,表示驱动已加载。
– 若未找到对应模块,可能驱动未加载,需进一步排查问题。
11、/var 目录为何通常单独位于一个分区?
/var
目录存储日志文件,若出现问题或文件未定期清理,会占满可用空间,单独分区可避免影响根文件系统。
12、作为一个拥有多个工作站和一台中央 NFS 文件服务器的网络系统管理员,如何在安全地与用户共享 /usr 目录的同时,仍能控制其内容?
可以在
/etc/exports
文件中添加相关配置来共享
/usr
目录。为了安全共享并控制其内容,可设置只读权限。示例配置如下:
/usr *.example.com(ro) orion(rw)
其中:
*.example.com(ro)
表示允许 example.com 域下的所有主机以只读方式访问
/usr
目录。
orion(rw)
表示允许名为 orion 的主机以读写方式访问。
之后使用以下命令使更改生效:
exportfs -a
并使用以下命令验证 NFS 共享状态:
nfsstat
13、描述如何创建一个tar归档文件以及如何提取其内容。
## tar 归档与提取操作说明
### 创建 tar 归档文件
- 使用 `-c` 选项创建新的 tar 文件
- 使用 `-f` 选项指定要生成的 tar 文件
- 可搭配 `-v` 选项用于报告进度
**示例:**
创建 `/etc` 目录在 SCSI 磁带上的归档并报告进度,命令为:
```bash
tar cvf /dev/st0 /etc
提取 tar 归档文件内容
使用
-x
选项从 tar 文件中提取文件
使用
-f
选项指定 tar 文件
搭配
-v
选项报告进度
示例 1:
提取 SCSI 磁带 0 上 tar 归档的全部内容并报告进度,命令为:
tar xvf /dev/st0
示例 2:
仅提取
/etc/hosts
文件,命令为:
tar xvf /dev/st0 etc/hosts
处理压缩的 tar 文件(tarball)
方法 1:
先使用
gzip -d
或
gunzip
解压缩,再使用
tar xvf
提取:
bash
gzip -d file.tar.gz
tar xvf file.tar
方法 2:
使用管道
gzip -dc | tar xv
直接处理:
bash
gzip -dc file.tar.gz | tar xv
方法 3:
使用以下命令一步完成解压缩和提取:
针对 gzip 压缩:使用
tar zxvf
bash
tar zxvf file.tar.gz
针对 bzip2 压缩:使用
tar jxvf
bash
tar jxvf file.tar.bz2
##14、总体而言,描述从源代码编译和安装免费或开源软件的步骤。
# 编译和安装免费或开源软件的步骤如下:
1. 提取源代码。
2. 确保系统有合适的工具,如 `gcc` 和 `make`。
3. 运行配置脚本:
多数大型源代码包有配置脚本,运行时会检查系统以验证编译器、库、实用程序等是否存在,为软件包生成定制的 `Makefile`。
4. 编译代码:
使用 `make` 工具,通过定义目标及其依赖关系控制和脚本化软件编译,只重新编译自上次编译后更改的源文件。
5. 安装软件:
大多数成熟的源代码项目在文件系统中有预定的可执行文件安装位置,很多 `Makefiles` 包含名为 `install` 的特殊目标,执行 `make install` 命令可将文件复制并设置适当属性。
##15、什么是共享库?如何确定编译后的可执行文件存在哪些库依赖关系?
共享库是多个应用程序共享的动态链接库。动态链接程序利用相同的例程,但不包含库代码,而是在运行时链接到可执行文件中。这使得多个程序可以使用内存中的相同库代码,并使可执行文件更小。
可以使用 `ldd` 实用程序来确定特定可执行文件所需的库。其语法为:
ldd programs
运行该命令会显示命令行上列出的每个程序所需的共享库,以及库在文件系统中预期的位置。
##16、简要描述rpm的主要功能模式。
rpm的主要功能模式有:
- **安装模式**(`rpm -i`):用于安装新软件包
- **升级模式**(`rpm -U`):将已安装的软件包升级到更新版本
- **刷新模式**(`rpm -F`):仅升级系统中已安装旧版本的软件包,但不处理依赖变化
- **查询模式**(`rpm -q`)
- **验证模式**(`rpm -V`)
- **卸载模式**(`rpm -e`)
##17、为什么 Debian Linux 管理员安装软件包时可能使用 dpkg -iG 而非简单的 dpkg -i?
使用 `dpkg -iG` 安装软件包,在遇到已安装相同软件包时,不会用旧版本覆盖安装,而 `dpkg -i` 无此限制。
##18、检查系统目录如何映射到系统的磁盘分区。/var 和 /tmp 是否有独立分区?/boot 是否在第 1024 个柱面内有独立分区?根文件系统是否相对较小?
```markdown
/var 和 /tmp 通常有独立分区,这有助于防止临时文件和日志文件填满根文件系统。/boot 常被分离出来以确保引导加载程序文件位于物理磁盘的前 1024 个柱面内。根文件系统相对较小,仅包含必要的系统目录和其他文件系统的挂载点。
19、使用 ldd 工具检查系统中可执行程序的库依赖关系。
可以使用
lddd programs
命令来显示命令行中列出的每个程序所需的共享库,结果会显示库的名称以及该库在文件系统中预期的位置。
例如,要检查 bash 外壳的库依赖,可执行:
ldd /bin/bash
20、在使用dpkg的系统中,使用命令“dpkg -l | less”获取由dpkg管理的所有已安装软件包列表。在列表中找到一个看起来不熟悉的软件包,然后使用“dpkg -s pkg_name”查询该软件包的信息。
按步骤操作:
先在终端执行以下命令查看已安装软件包列表:
dpkg -l | less
在列表中找到陌生包后,将
pkg_name
替换为该包名,执行以下命令查询其信息:
dpkg -s 包名
21、在使用RPM的系统中,使用命令
rpm -qa | less
获取RPM管理下安装的所有软件包列表。在列表中找到一个不熟悉的软件包,并使用
rpm -qi pkg_name
查询该软件包的信息。
rpm -qa | less
rpm -qi pkg_name
首先在终端输入
rpm -qa | less
命令,该命令会列出 RPM 管理下安装的所有软件包,并且可以使用
less
命令的交互界面逐页查看。
在列表中找到不熟悉的软件包名称(假设为
pkg_name
),然后输入
rpm -qi pkg_name
命令,即可查询该软件包的详细信息。
22、描述 shell 变量和环境变量的区别。
shell 变量仅为本地 shell 所知,不会传递给其他进程;而环境变量会传递给其他进程,包括子 shell。shell 变量可通过 `export` 命令转换为环境变量。
23、比较并对比内置命令、显式定义的命令和在PATH中找到的命令。
要使命令执行成功,它必须满足以下条件之一:
是 bash 内置命令
能在
PATH
变量所包含的目录列表中找到
或是被显式定义的命令
具体说明如下:
内置命令
:是 bash 自带的命令,可直接使用。
在 PATH 中的命令
:其可执行程序存储在
PATH
变量列出的目录中。
显式定义的命令
:是用户通过特定方式明确指定的命令。
24、bash中默认历史编辑键绑定的来源程序是什么?
Emacs编辑器
25、解释管道作为 shell 功能的概念,并通过两个或多个过滤程序的示例进行说明。
管道是一种将一个程序的输出连接到另一个程序的输入的功能。
在 shell 中,管道通过使用管道符号(
|
)来连接命令。例如,若用
ls
命令列出当前目录下所有文件和文件夹,再用
grep
命令筛选出包含特定字符串的条目,可写成:
ls | grep '特定字符串'
这样
ls
命令的输出就作为
grep
命令的输入,实现了管道功能。
26、给出两个能被通配符??[!1 – 5]匹配的文件示例。
该通配符表示前两个位置为任意单个字符,第三个位置为除
1-5
之外的任意单个字符,例如
ab6
、
xy9
。
27、说出三种标准I/O流及其功能。
三种标准I/O流及其功能分别为:
标准输入(stdin)
:是文本输入流,默认关联键盘,用于向交互式文本程序输入字符,也称为文件描述符0;
标准输出(stdout)
:是用于正常程序输出的文本输出流,默认关联终端(或终端窗口),命令产生的输出会写入此流进行显示,也称为文件描述符1;
标准错误(stderr)
:也是文本输出流,专门用于输出错误信息或与程序成功结果无关的其他信息。
28、给出重定向运算符 > 的一个示例,并描述使用 >> 运算符时结果会有何不同。
示例:
$ ls -i * | awk '{print $1}' | sort -nu > in.txt
使用
>
时,shell 会创建一个空文件(in.txt)并打开用于写入,sort 的标准输出将结果放入该文件,若文件已存在则会被覆盖。
使用
>>
时,若文件已存在,会将内容追加到文件末尾;若文件不存在,则会创建文件并将内容插入。例如:
$ echo "end of list" >> in.txt
29、所有系统进程的最终祖先进程是什么?请同时给出进程ID和程序名称。
进程ID为1,程序名称是init。
30、请列举三个常用于进程监控的工具。
ps、pstree、top
31、当一个典型的守护进程收到SIGHUP信号时会发生什么?如果收到SIGKILL信号,其行为会有何不同?
当典型守护进程收到
SIGHUP
信号时,它会重新读取配置文件。
若收到
SIGKILL
信号,进程会被无条件且立即终止,无法忽略该信号,不会关闭文件或进行其他清理操作,可能使程序数据处于不一致状态。
32、比较并对比后台和前台作业,并说明在命令行上将命令置于后台的语法。
前台作业与后台作业
前台作业是当前正在执行且占用终端的作业,用户可以与之进行交互;后台作业则在后台运行,不占用终端,用户可以继续在终端执行其他命令。
将作业置于后台的语法有两种情况:
在启动命令时直接在命令末尾加上
&
;
使用
bg
命令,其语法为
bg [jobspec]
,若不指定
jobspec
,则使用 shell 认为的当前作业。
33、解释进程的优先级数(nice number)与其执行优先级之间的关系。
优先级数说明
优先级数是用户提供给内核用于分配进程优先级的参数。
默认情况下,用户进程的优先级数为
零
。
正数
优先级数会
降低
进程相对于其他进程的优先级。
负数
优先级数会
提高
进程的优先级。
即:
“优先级数”
越高
,进程的执行优先级
越低
。
“优先级数”
越低
,进程的执行优先级
越高
。
示例
若有一个长时间运行的程序,不希望影响交互性能,可设置
正数优先级数
以降低其优先级。
优先级数范围
优先级数范围是
-20 到 +19
。
普通用户
只能设置
正数
优先级数。
超级用户
才能设置
负数
优先级数以提高进程优先级。
34、构成正则表达式的字符分为哪两类?
正则表达式由元字符(具有特殊含义)和文字字符(除元字符之外的所有字符)两类字符组成。
35、正则表达式 [A – Z]
和 ^[A – Z]
$ 有什么不同?
下面是给定的【文本内容】:
[A-Z]*
表示匹配零个或多个大写字母,但不限制其在文本中的位置。
^[A-Z]*$
则表示匹配整个文本,该文本需由零个或多个大写字母组成,即文本开头到结尾都只能是大写字母。
36、将vi编辑器置于命令模式意味着什么?
在命令模式下,vi允许用户在文件中导航并输入命令,键盘按键会被解释为vi命令而非文本。例如:
可使用
h
、
j
、
k
、
l
等按键进行移动操作
使用
i
键切换到插入模式
若要从插入模式回到命令模式,可按
Escape 键(Esc)
。
37、在控制台或终端窗口中启动一个bash shell并输入以下命令:MYVAR1=”Happy”; MYVAR2=”Birthday”; export MYVAR1; bash; echo $MYVAR1 $MYVAR2; exit; echo $MYVAR1 $MYVAR2 。a. 两个echo命令的行为是否相同?b. 如果相同,原因是什么?如果不同,原因又是什么?c. 执行bash命令后立即发生了什么?d. 哪个变量是环境变量?
a. 两个`echo`命令的行为不相同。
b. 第一个`echo`命令在子shell中执行,由于`MYVAR1`是环境变量,能被子shell继承,而`MYVAR2`是普通shell变量,不能被子shell继承,所以输出只有`MYVAR1`的值;第二个`echo`命令在父shell中执行,能输出`MYVAR1`和`MYVAR2`的值。
c. 执行`bash`命令后,会启动一个新的子shell。
d. `MYVAR1`是环境变量。
38、file命令用于检查文件内容并显示文件类型。解释使用以下命令的结果:$ cd / ; file $(ls | head – 10)
该命令首先使用
cd /
切换到根目录,然后
ls | head -10
会列出根目录下的前10个文件或目录名,最后
file
命令对这前10个文件或目录进行检查并显示它们的文件类型。
39、在系统上执行此命令:$ cut -d: -f1 /etc/passwd | fmt -w 20 | head -1 。a. 显示了什么?b. 你看到了多少行输出?为什么?c. 输出的宽度是多少?为什么?
a. 显示了
/etc/passwd
文件中以冒号分隔的第一列内容,经过
fmt
命令格式化宽度为 20 后,取第一行的内容。
b. 看到 1 行输出,因为
head -1
命令的作用是只输出第一行。
c. 输出宽度是 20,因为
fmt -w 20
命令将文本格式化为宽度为 20 的内容。
40、执行以下 sed 替换命令并解释为什么它可能会用于 /etc/passwd 文件:$ sed ‘s/:[^:]*:/:—:/’ /etc/passwd | less
该命令将
/etc/passwd
文件中每行第一个冒号及其后直到下一个冒号之间的内容替换为
:---:
。
在
/etc/passwd
文件中,每行包含用户账户信息,各字段以冒号分隔。
此命令可用于隐藏或模糊部分敏感信息,例如用户密码字段,同时保留文件结构,方便查看其他信息。
使用
less
可分页查看替换后的内容。
41、执行命令:$ cd /sbin ; ls -li e2fsck fsck.ext2 。a. 输出的第一个字段有什么意义?b. 为什么两个条目的该字段相同?c. 为什么文件大小相同?
a. 输出的第一个字段是文件的inode号,它是文件系统中每个文件的唯一标识符。
b. 两个条目的inode号相同,说明这两个文件名指向的是同一个文件,可能是硬链接。
c. 文件大小相同是因为它们指向同一个物理文件,所以文件内容和大小必然一致。
42、执行以下命令序列,并解释每一步的结果(此示例假设cp未被别名化为cp – i,这是常见的默认别名): $ cd $ cp /etc/skel . $ cp -r /etc/skel . $ cp -rfv /etc/skel . $ cp -rfvp /etc/skel .
$ cd
:将当前工作目录切换到用户的主目录。
$ cp /etc/skel .
:将
/etc/skel
文件复制到当前目录。若
/etc/skel
是目录,此命令会报错。
$ cp -r /etc/skel .
:递归复制
/etc/skel
目录及其所有内容到当前目录。
$ cp -rfv /etc/skel .
:递归(
-r
)强制(
-f
)复制
/etc/skel
目录到当前目录,并在复制过程中显示详细信息(
-v
)。若目标文件已存在会直接覆盖。
$ cp -rfvp /etc/skel .
:在
-rfv
基础上,保留文件属性(
-p
),即递归强制复制
/etc/skel
目录到当前目录,显示详细信息并保留文件属性。
43、使用rmdir和/或rm删除一个目录。哪个命令可以一步完成此任务?
若目录为空,可用rmdir;若目录非空,可用rm -r或rm -R。
44、解释通配符 {htm,html} 何时可能有用。
当你需要处理一组相关文件,且这些文件的扩展名分别为
.htm
和
.html
时,该通配符就很有用。例如,你可以使用它将所有
.htm
和
.html
文件移动到一个新目录中,命令如下:
$ mv *.{htm,html} new_directory
45、举例说明通配符 *.[Tt][Xx][Tt] 如何用于目录列表。
该通配符可用于查找所有扩展名为
.txt
(大小写不敏感)的文件。例如在目录列表命令中使用
ls *.[Tt][Xx][Tt]
,就能列出当前目录下所有扩展名为
.txt
的文件,无论扩展名中的字母是大写还是小写。
46、关于由 *.? 通配符匹配的文件名,可以得出什么结论?
匹配零个或多个字符,? 匹配恰好一个字符,所以
*.?
匹配文件名中除扩展名部分可以是任意字符,且扩展名只有一个字符的文件。
47、按如下方式对
ls
的输出进行重定向实验:
$ cp /etc/skel . 2> info.txt
a. 与未进行错误输出重定向时的终端输出有何不同?b. 什么内容会被写入
info.txt
文件?
ls
$ cp /etc/skel . 2> info.txt
info.txt
a. 未进行错误输出重定向时,终端会显示错误信息;此命令将标准错误输出重定向到
info.txt
文件,终端不再显示错误信息。
b.
info.txt
会写入
cp /etc/skel .
命令执行过程中产生的标准错误信息。
48、在系统上试验使用ps、pstree和top命令来监控活跃进程,包括top的交互式命令,说明具体操作步骤。
可以按以下步骤操作:
使用
ps
命令:在终端输入
ps
,该命令会在标准输出上生成当前进程的一次性快照。
使用
pstree
命令:在终端输入
pstree
,它会以树形格式显示进程的层次列表。
使用
top
命令:
简单使用
:在终端输入
top
,可获得每五秒更新一次的完整状态显示,使用
q
命令退出。
调整刷新速率
:若要更快的刷新速率,可使用
-d
选项,如
top -d 1
表示每秒刷新一次。
持续更新
:可以指定
-d 0
或使用
-q
选项,如
top -qi
可用于只查看非空闲进程。
输出到文件
:使用
-b
(批处理)选项将输出记录到文件,如
top -b -n 5 -d 1 > file1
,此命令会执行五次更新,每次间隔一秒,并将结果重定向到
file1
。
使用
top
的交互式命令:当
top
以交互模式运行时,可通过键盘输入以下单键命令改变其行为。
Ctrl + L
:刷新屏幕。
h
:显示帮助屏幕。
k
:杀死一个进程,会提示输入进程的 PID 和要发送的信号(默认信号是 15,SIGTERM)。
n
:更改要显示的进程数量,会提示输入一个整数。
q
:退出程序。
r
:更改进程的优先级(
renice
),会提示输入进程的 PID 和要调整的优先级值。
s
:更改更新之间的延迟时间,会提示输入延迟值,可包含小数。