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配置实用程序的方法,通常是在启动期间按下特定按键。
启动该实用程序后,会出现基于菜单的屏幕,可在其中配置系统设置。这些设置可能包括:
磁盘
内存行为
板载端口(如串行和并行端口)
时钟等
要更改启动顺序和启用/禁用主板内置外设,可在BIOS的菜单中查找相关选项进行操作。不同BIOS供应商的菜单布局和选项名称可能有所不同。
2、通过执行 cat /proc/interrupts 命令检查内核的中断分配情况。设备报告是否正确?是否有设备共享中断?
以双 CPU 系统和 Adaptec 双 AIC7895 SCSI 控制器为例,设备报告基本正确。存在设备共享中断的情况,如:
两个 SCSI 控制器分别使用中断 10 和 11
以太网控制器与其中一个 SCSI 控制器共享中断 10
3、使用lspci命令创建所有已安装的PCI设备列表。记录主板内置的设备。
在终端中输入命令
lspci
即可创建所有已安装的PCI设备列表。
要记录主板内置设备,可查看输出结果中与主板集成功能相关的设备,如集成网卡、集成声卡等。通常会在描述中体现相关信息,如:
Ethernet controller
(网卡)
Audio device
(声卡)
将这些设备信息记录下来。
4、运行 lsmod 命令并将系统中已加载的内核模块与硬件进行匹配。
可先运行 `lsmod` 命令显示已加载的内核模块,包括模块名、大小、使用计数和引用模块列表。然后根据模块的名称去推测对应的硬件类型,如 `radeon` 可能对应显卡相关硬件,`3c59x` 对应网络硬件,`soundcore` 等对应声卡硬件等。
还可以结合系统硬件信息,如通过 `lspci` 查看 PCI 设备信息等,来进一步准确匹配内核模块与硬件。对于连接新的 USB 设备等情况,运行 `lsmod` 查看是否加载了相应驱动也有助于匹配。
5、运行 dmesg 命令,查看内核在启动时识别的硬件。
运行
dmesg | less
命令可以查看上次系统启动时记录的消息,通过这些消息可以了解内核在启动时识别的硬件,例如指针设备(鼠标)、串行端口、磁盘等硬件信息。也可以使用
dmesg > bootmsg.txt
将启动消息转存到文件中以便后续查看。
6、/var目录为何通常位于单独的分区中?
`/var` 文件系统包含如打印机假脱机文件和日志文件等随时间变化的数据。由于可变数据总是在不断变化和增长,将 `/var` 放在单独的分区中可防止根分区被填满。
7、作为一个拥有许多工作站和中央NFS文件服务器的网络的系统管理员,如何在安全地与用户共享 /usr 的同时,仍然保持对其内容的控制?
可以将
/usr
分区设置为 4GB,并且通过只读 NFS 将
/usr
中的所有可执行文件共享给工作站,以此在共享
/usr
的同时保持对其内容的控制。
8、作为系统内存补充的交换分区,推荐大小是多少?
交换空间大小的确定
确定所需交换空间大小的常用公式通常是系统内存(RAM)的两倍。不过,虽然 Linux 不强制要求有交换分区,但为了一些假脱机功能,建议至少有 128MB。
而对于内存密集型应用程序,可能会根据以下变量推荐更多的交换空间:
用户数量
数据库表/大小
其他应用程序配置指南
9、什么是共享库?如何确定一个编译后的可执行文件存在哪些库依赖关系?
共享库是动态链接库,多个程序可共享内存中的相同库代码,使可执行文件更小。可使用 `ldd` 工具确定特定可执行文件所需的库,语法为:
ldd programs
它会显示命令行中列出的每个程序所需的共享库及其在文件系统中的预期位置。
10、系统如何知道在哪里查找共享库?
动态链接的可执行文件在运行时由共享对象动态链接器 `ld.so` 检查。让 `ld.so` 查找新库有几种方法:
1. 一是将冒号分隔的目录列表添加到 shell 环境变量 `LD_LIBRARY_PATH`,促使 `ld.so` 在其中查找目录;
2. 二是将新库的目录添加到 `ld.so.conf` 文件,该文件包含由 `ldconfig` 实用程序索引的目录,`ldconfig` 会更新 `ld.so.cache` 文件,该文件是库名称和位置的索引,`ld.so` 可以快速读取它。
11、简要描述rpm的主要功能模式。
rpm的主要功能模式有:
安装模式
(
rpm -i
或
rpm --install
):用于安装新软件包;
升级模式
(
rpm -U
或
rpm --upgrade
):将已安装的软件包升级到较新版本;
卸载模式
(
rpm -e
或
rpm --uninstall
):用于卸载软件包;
查询模式
(
rpm -q
或
rpm --query
);
验证模式
(
rpm -V
或
rpm --verify
);
刷新模式
(
rpm -F
):仅升级系统中已安装的旧版本软件包,但该模式不处理依赖变化。
12、如何向yum添加额外的仓库?
可以通过 /etc/yum.repos.d 目录添加和修改仓库。
13、为什么 Debian Linux 管理员安装软件包时可能使用 dpkg -iG 而非简单的 dpkg -i ?
使用
dpkg -iG
中的
-G
选项,可避免用同一软件包的旧版本覆盖之前已安装的软件包,确保安装的版本不会比现有版本旧。
14、在 shell 中,使用 fdisk 检查磁盘布局,执行 # fdisk /dev/sda 命令(m 获取帮助)后得到如下输出:磁盘 /dev/sda: 200.0 GB, 200049647616 字节 255 磁头, 63 扇区/磁道, 24321 个柱面 单位 = 柱面的 16065 * 512 = 8225280 字节 磁盘标识符: 0x0003bf13 设备 启动 开始 结束 块数 Id 系统 /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 89 514080 82 Linux 交换区 / Solaris /dev/sda3 90 24321 194643540 83 Linux 现有文件系统是否占用了整个磁盘?
是的,从输出可知,磁盘的所有柱面(1 – 24321)都被
/dev/sda1
、
/dev/sda2
和
/dev/sda3
这三个分区使用,所以整个磁盘被现有文件系统占用。
15、如何使用ldd命令检查系统中可执行程序的库依赖关系?请举例说明。
`ldd` 是用于显示每个命令行上列出的程序所需的共享库的工具。其语法为:
ldd programs
运行后结果会显示库的名称以及该库在文件系统中预期所在的位置。
例如,使用以下命令可查看 `bash` shell 所需的共享库:
ldd /bin/bash
该命令会显示出类似三个共享库的信息。
若要检查系统中其他可执行程序的库依赖关系,可将程序路径替换到 `ldd` 命令后,例如:
ldd
which gcc
which gcc
这样就能看到 `gcc` 编译器所需的共享库及其位置信息。
16、在使用RPM的系统中,使用命令
rpm -qa | less
获取由RPM管理的所有已安装软件包的列表。在列表中找到一个看起来不熟悉的软件包,然后使用
rpm -qi pkg_name
查询该软件包的信息。
rpm -qa | less
rpm -qi pkg_name
首先在终端输入
rpm -qa | less
命令,该命令会列出所有由 RPM 管理的已安装软件包,按
q
键可退出
less
查看界面。接着从列出的软件包中选择一个不熟悉的软件包,假设包名为
pkg_name
,在终端输入
rpm -qi pkg_name
命令,即可查询该软件包的信息。
17、在使用RPM的系统中,通过执行“yum list available | less”命令获取当前配置的软件源中所有可供安装的软件包列表。
在使用 RPM 的系统里,可使用
yum list available | less
命令来获取当前配置的软件源中所有可供安装的软件包列表。
yum list available
:会列出所有可用的软件包。
| less
:将输出内容分页显示,方便查看。
18、描述 shell 变量和环境变量的区别。
shell 变量可看作局部变量,仅当前 shell 可用,子进程不会继承,通常用小写命名;环境变量可看作全局变量,会传递给 shell 启动的所有进程(包括其他 shell),子进程会继承环境,通常用大写命名。将 shell 变量导出后可变成环境变量。
19、当你登录时,bash会读取哪些文件?
登录时,bash会读取系统范围的
/etc/profile
配置文件,用户主目录下可能会读取的个人文件有
~/.bash_profile
、
~/.bashrc
。
20、解释在 shell 功能中管道的概念,并使用两个或多个过滤程序的示例进行说明。
在 shell 功能里,管道是指将一个程序的输出连接到另一个程序的输入。可以使用管道符号(
|
)连接命令来创建管道。
例如,使用:
$ cmd1 | cmd2
能把
cmd1
的标准输出作为
cmd2
的标准输入。
像:
$ cmd1 | tee file1 | cmd2
此例中
cmd1
的标准输出一方面通过
tee
命令写入
file1
文件,另一方面作为
cmd2
的输入。
21、请给出两个能被通配符??[!1 – 5]匹配的文件示例。
ab6、cd9
22、说出三个标准 I/O 流及其功能。
三个标准 I/O 流
标准输入(STDIN)
:是文本输入流,默认连接到键盘。
标准输出(STDOUT)
:是正常程序输出的输出流,默认是屏幕。
标准错误(STDERR)
:是用于错误消息的输出流,默认也是屏幕。
23、给出重定向运算符 > 的一个示例,并描述使用 >> 运算符时结果会有何不同。
示例:
$ ls -i * | awk '{print $1}' | sort -nu > in.txt
,使用
>
运算符时,若指定文件(如
in.txt
)已存在会被覆盖;而使用
>>
运算符,如
$ echo "end of list" >> in.txt
,若文件已存在,内容会追加到文件末尾,若文件不存在则创建文件并插入内容。
24、哪个进程是所有系统进程的父进程?请同时给出其PID和程序名。
PID为1,程序名为init
25、请列举三个用于进程监控的常用工具。
ps、pstree、top
26、当一个典型的守护进程收到SIGHUP信号时会发生什么?如果它收到SIGKILL信号,行为会有何不同?
当典型守护进程收到
SIGHUP
信号时,会重新读取其配置文件进行自我重新配置;若收到
SIGKILL
信号,进程无法忽略该信号,会立即终止,且不会关闭文件或执行其他清理操作,可能使程序数据处于不一致状态,该信号应作为最后手段使用。
27、比较并对比后台作业和前台作业,并说明在命令行上将命令置于后台的语法。
后台作业与前台作业的区别
前台作业会附着在终端上运行,用户可以与之交互,而
后台作业
则独立执行,无需用户干预。
将命令置于后台的语法
有两种方式可以将命令置于后台运行:
在命令后直接加
&
示例:
bash
command &
使用
bg [jobspec]
命令
– 若指定了
jobspec
,则将指定作业置于后台;
– 若未指定
jobspec
,则使用 shell 认为的当前作业(即
jobs
命令输出中带有加号
+
的作业)。
28、构成正则表达式的字符分为哪两类?
正则表达式由两种类型的字符组成,即文字字符(普通文本或字面文本)和元字符。
29、在vi编辑器中,执行:q和:q!有什么区别?
以下是调整为 Markdown 格式的文本内容:
:
是在未对文件内容进行修改或已保存修改的情况下正常退出编辑器;
:q!
是强制不保存对文件所做的更改,直接退出编辑器。
30、将vi编辑器置于命令模式意味着什么?
在命令模式下,
vi
允许用户在文件中导航并输入命令,键盘按键被解释为
vi
命令而非文本。例如:
按“
i
”键可从命令模式切换到插入模式
按
Escape
键(
Esc
)可从插入模式回到命令模式
31、在控制台或终端窗口中启动一个bash shell,并输入以下命令:$ MYVAR1=”Happy” $ MYVAR2=”Birthday” $ export MYVAR1 $ bash $ echo $MYVAR1 $MYVAR2,请问输出结果是什么?
在输入这些命令后,由于
MYVAR1
已被导出为环境变量,在新的 bash 子进程中可以访问,而
MYVAR2
未被导出,在子进程中无法访问。所以
echo $MYVAR1 $MYVAR2
的输出为:
Happy
(注意后面有个空格,因为第二个变量无值)
32、在控制台或终端窗口中启动一个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. 因为
MYVAR1
被导出为环境变量,在子shell中可以访问;而
MYVAR2
只是普通的shell变量,在子shell中未定义,所以第一次
echo
只有
MYVAR1
有输出,第二次
echo
两个变量都有输出。
c. 执行
bash
命令后,创建了一个新的子shell,当前环境变为子shell环境。
d.
MYVAR1
是环境变量。
33、file命令用于检查文件内容并显示文件类型。解释以下使用file命令的结果:$ cd / ; file
ls | head -10
ls | head -10
此命令首先将当前工作目录切换到根目录(
cd /
),接着使用
ls
列出根目录下的所有文件和目录,再用
head -10
选取前10个名称,最后用
file
命令判断这前10个文件或目录的类型并输出结果。
34、执行以下 sed 替换命令,并解释为什么该命令可能会用于 /etc/passwd 文件:$ sed ‘s/:[^:]*:/:—:/’ /etc/passwd | less
此命令将
/etc/passwd
文件每行中第一个冒号及其后非冒号字符再加上一个冒号替换为
':---:'
,然后通过
less
分页显示结果。在
/etc/passwd
文件里,每行以冒号分隔字段,此命令可用于隐藏或简化敏感字段,如用户密码字段,增强安全性或简化信息查看。
35、执行以下命令序列并解释每一步的结果(此示例假设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
默认不递归复制目录。
$ cp -r /etc/skel .
:递归复制
/etc/skel
目录及其所有内容到当前目录。若目标目录已存在同名文件或目录,会直接覆盖。
$ cp -rfv /etc/skel .
:递归复制
/etc/skel
目录及其所有内容到当前目录,强制覆盖目标目录中已存在的同名文件或目录,并显示详细的复制过程。
$ cp -rfvp /etc/skel .
:递归复制
/etc/skel
目录及其所有内容到当前目录,强制覆盖目标目录中已存在的同名文件或目录,显示详细的复制过程,并保留文件的权限、所有者、时间戳等属性。
36、使用rmdir和/或rm删除之前创建的目录。哪个命令可以一步完成此任务?
若目录为空,可使用rmdir命令;若目录不为空,可使用rm -r或rm -R命令。
37、解释通配符 {htm,html} 何时可能有用。
当需要处理一组相关文件时,如在一个包含大量文件的目录中,有许多 HTML 文件,文件名后缀既有
.htm
又有
.html
,使用
{htm,html}
可以方便地一起处理这些文件。例如批量移动、复制、删除或显示这些文件,命令可写成
*{htm,html}
。
38、请举例说明通配符 *.[Tt][Xx][Tt] 如何用于目录列表。
可使用命令
ls *.[Tt][Xx][Tt]
列出当前目录中所有扩展名为
.txt
或
.TXT
的文件,因为
–
*
匹配零个或多个字符,
–
[Tt]
匹配
T
或
t
,
–
[Xx]
匹配
X
或
x
,
这样可以忽略文件扩展名的大小写。
39、关于由 *.? 通配符匹配的文件名,可以得出什么结论?
匹配零个或多个字符,? 匹配恰好一个字符,所以
*.?
匹配文件名中最后一个字符前有任意数量字符且文件名包含扩展名(扩展名只有一个字符)的文件。例如,它能匹配
ab.c
、
xyz.d
等文件,但不匹配
ab
、
abcde
等文件。
40、使用ps、pstree和top命令来监控系统上的活动进程,包括top的交互式命令。
可以按以下步骤操作:
使用ps命令:在终端输入
ps
,可生成当前进程的一次性快照并显示在标准输出上。
使用pstree命令:在终端输入
pstree
,会以树形格式显示进程的分层列表。
使用top命令:
– 简单执行top:在终端输入
top
,会得到一个每五秒更新一次的完整状态显示。使用
q
命令可退出。
– 使用top的命令行选项:
例如输入
top -d 1
,可设置每秒刷新一次;
输入
top -bi -n 5 -d 1 > file1
,可将输出记录到文件
file1
中,其中:
-b
为批处理模式,
-i
忽略空闲进程,
-n 5
表示显示5次迭代后退出,
-d 1
表示每秒更新一次。
使用top的交互式命令:当top以交互模式运行时,可使用单键交互式命令。如:
按空格键可刷新屏幕;
按
h
可显示帮助屏幕;
按
k
会提示输入要杀死进程的PID和要发送的信号(默认信号为15,即SIGTERM);
按
n
会提示输入要显示的进程数量;
按
q
可退出程序;
按
r
可更改进程的优先级(renice),会提示输入进程的PID和要设置的优先级值;
按
s
会提示输入更新间隔的秒数。
41、本练习启动一个进程,使用多种方法查看和修改进程执行优先级。步骤如下:1. 使用nice在后台启动一个编辑会话:$ nice vi &;2. 使用ps观察该进程是否被设置了优先级:$ ps -u;3. 使用top再次检查:$ top -i;4. 在top中,使用r命令重新设置vi进程的优先级并观察对优先级的影响;5. 退出top并使用renice将优先级值设置回零。请描述整个操作过程及各步骤的作用。
本题操作过程及各步骤作用如下:
首先使用
nice
命令在后台启动一个编辑会话
该命令可以在启动进程时设置其优先级。
接着分别用
ps
和
top
命令查看进程优先级
–
ps -u
命令可以查看当前用户的进程信息,从中可观察进程是否被设置了优先级。
–
top -i
命令可以动态显示系统中各个进程的资源占用情况,再次检查进程优先级。
在
top
中使用
r
命令重新设置指定进程(这里是
vi
进程)的优先级
能观察到对优先级的影响。
最后退出
top
并用
renice
将优先级设回零
renice
命令用于修改已经运行的进程的优先级。
42、使用简单的正则表达式和grep命令在 /etc/passwd 文件中查找bash用户。
可以使用命令
grep '.+:x:.+:/bin/bash$' /etc/passwd
来查找。
43、确定 /etc/inittab 文件中空白行的数量。
使用命令
$ grep -c '^$' /etc/inittab
来确定
/etc/inittab
文件中空白行的数量。
44、使用vi创建一个文本文件。按i进入插入模式并插入文本。按Esc退出插入模式,使用h、j、k和l移动光标,然后重新进入插入模式并添加更多文本。使用ZZ结束会话。使用cat命令查看文件。文件内容是否符合预期?
按照描述操作,若操作过程无误,文件内容应符合预期。因为通过
i
进入插入模式可输入文本,
Esc
退出插入模式,
h
、
j
、
k
、
l
用于移动光标,重新进入插入模式可继续添加文本,
ZZ
会保存文件内容并退出 vi,最后用
cat
命令查看文件内容,若整个操作过程无失误,内容应与输入一致。
45、比较并对比locate和find命令的区别。
locate
与
find
命令的区别
locate
find
locate
和
find
命令都用于在系统中查找文件,但存在一些区别。
locate
locate
提供了一种快速替代
find
进行文件名搜索的方法。
适合定位在文件系统中不常移动的文件。
如果没有最新的数据库可供搜索,
locate
不适合查找最近创建或重命名的文件。
find
find
从指定路径开始递归查找匹配表达式的文件。
拥有丰富的表达式指令,能根据以下特定属性来定位文件:
日期
权限
文件类型
访问时间
虽然语法可能较复杂,但功能强大。
46、以 root 用户身份,在主硬盘上运行 fdisk 命令,然后输入 p 命令打印分区表。检查系统配置,确保理解看到的所有内容。输入 l 命令,查看 Linux 支持的多种分区类型。输入 q 命令,不保存更改直接退出。请描述完成上述操作的步骤。
需在 Linux 系统中以 root 用户执行以下操作:
运行
fdisk
命令操作主硬盘;
输入
p
命令打印分区表并检查系统配置;
输入
l
命令查看分区类型;
输入
q
命令不保存更改退出。
47、如果你有可用的磁盘空间,使用 fdisk 创建一个新的 ext3 分区,然后使用 mkfs 对其进行格式化。密切关注 mkfs 的输出。
按照题目要求,先使用
fdisk
创建新的 ext3 分区,再用
mkfs
格式化该分区并留意输出。
创建分区示例
:
以 root 用户运行
fdisk
对主硬盘操作,按提示创建分区。
格式化示例
:
bash
mkfs -t ext3 /dev/分区名
48、如果你在之前的操作中创建了一个新分区,使用fsck命令对该分区进行强制检查并观察输出,命令为:$ fsck -f /dev/partition,请描述此操作及可能的输出情况。
按照命令格式,使用
fsck -f /dev/partition
对新分区进行强制检查,然后观察输出信息以了解分区状态。示例输出可能像:
fsck 1.41.4 (27 - Jan - 2009)
e2fsck 1.41.4 (27 - Jan - 2009)
并包含如检查inode、块、目录结构等各阶段信息以及文件和块的使用情况等。
49、使用df命令检查文件系统状态:a. -h标志如何帮助你解读结果?b. 有没有文件系统接近满容量?c. 哪些文件系统利用率较低?
a.
-h
标志以人类可读的格式显示结果,包含如 M(兆字节)和 G(吉字节)等后缀,便于解读。
b. 示例中默认挂载的七个文件系统均未超过 55% 的容量,没有接近满容量的文件系统。
c. 示例中
/dev/sda5
(2%)、
/dev/sda9
(22%)、
/dev/sda6
(23%)、
/dev/sda10
(0%)、
/dev/sda7
(3%)利用率较低。