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