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