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、为什么Linux很受欢迎?为什么它在学术界很受欢迎?
Linux受欢迎的原因
近年来成为强大且创新的类UNIX系统,受欢迎程度超越UNIX前辈
内核独立于BSD和System V
由世界各地众多有能力的个人共同开发
让商业和个人电脑用户轻松使用UNIX的强大功能
有丰富的免费和商业应用程序及各种工具
越来越符合POSIX标准,成为主流并受认可
支持大量外围设备,对新外围设备支持出现速度快
有大量易安装和运行的软件
在学术界受欢迎的原因
可能是因为其源于UNIX传统,UNIX用户能找到熟悉环境
包含全球程序员贡献的UNIX实用工具
社区致力于系统持续发展
对新微机设备和功能支持添加及时
有许多商业软件包可运行
有很多硬件制造商在其系统中提供Linux,已从本科项目发展成为适用于学术等多领域的操作系统
2、什么是多用户系统?为什么它们会成功?
多用户系统
多用户系统是指可以同时供多人使用的计算机系统,Linux 就是一个多用户操作系统。
多用户系统成功的原因在于,多人同时使用计算机时,每个用户的成本低于单人使用的计算机。因为一个人通常无法充分利用计算机提供的所有资源,而多用户操作系统允许许多人几乎同时使用这些系统资源,能最大化利用昂贵资源,最小化每个用户的成本。
3、Linux 是用什么语言编写的?这种语言与 Linux 的成功有什么关系?
Linux 超过 95% 是用 C 语言编写的。C 语言是一种高级的、与机器无关的语言,具有可移植性,使得 Linux 能适配不同的机器,满足特殊需求,可运行在不同类型的硬件上,包括嵌入式计算机、基于微处理器的系统和大型机等。这既方便了用户,也有利于系统管理员,还推动了软件行业的发展,软件制造商只需制作一个版本的产品就能在不同制造商的机器上使用,这些都与 Linux 的成功密切相关。
4、什么是shell?它如何与内核和用户协同工作?
shell是Linux命令解释器,在文本环境中,它作为用户与操作系统之间的接口。当用户在屏幕上输入命令时,shell会解释该命令并调用所需的程序。shell扫描命令行以检查语法,挑出命令名和参数,尝试找到与命令同名的可执行程序并执行它。若命令是简单文件名,shell会在变量PATH指定的目录中搜索该命令。shell为命令分配标准输入和输出文件,默认情况下,标准输入来自键盘,标准输出到屏幕,用户也可指示shell重定向输入输出或使用管道连接不同命令。此外,shell还是一种高级编程语言,用户可将shell命令组织在文件中供后续执行。
5、为什么Linux文件系统被称为分层的?
Linux文件系统类似家谱,是一种分层结构,形似金字塔。
它由一组相互连接的文件组成,用户可从一个目录开始添加任意层级的子目录,
这种结构能让用户轻松组织和查找文件,所以被称为
分层的
。
6、请举例说明何时需要使用多处理系统。
在处理大型项目的构建任务时,使用多处理系统可以显著减少构建时间。可以使用
make -j n
命令并行执行任务,其中
n
是 CPU 数量加 1。
7、当你尝试使用错误的用户名或错误的密码登录时,会显示以下消息:登录错误。此消息未表明是你的用户名、密码还是两者都无效。为什么它不提供这些信息?
这是为了防止未经授权的人通过猜测用户名和密码来访问系统。
8、给出三个糟糕的密码选择示例。每个示例有什么问题?其中一个要太短。给出系统显示的错误信息。
示例1:密码为单个字符,如“a”,问题是太短,系统显示的错误信息为“BAD PASSWORD: it is too short”;
示例2:密码为“123456”,问题是太简单,系统显示的错误信息为“BAD PASSWORD: it is too simplistic/systematic”;
示例3:密码为“dog”,问题是基于字典单词,系统显示的错误信息为“BAD PASSWORD: it is based on a dictionary word”。
9、“fido”是一个可接受的密码吗?给出几个支持或反对的理由。
“fido”不是一个可接受的密码。理由如下:
它是一个单词,在字典中可以找到;
它可能是宠物的名字,容易被发现;
它长度可能小于系统要求的至少六个字符;
它只包含字母,未满足至少包含两个字母和一个数字的条件。
10、如果你无法登录,你会怎么做?
确认在正确的机器上登录,在大型网络系统中,登录前可能需指定要连接的机器;
确保大写锁定键(CAPS LOCK)关闭,按指定或设置的方式准确输入用户名和密码,因为用户名和密码区分大小写;
确认自己已被设置为系统用户;
若使用终端(905),检查终端是否插好并开启,多次按回车键,若‘login:’仍未出现,尝试按 CONTROL – Q;
若使用工作站(910),确保其正在运行,运行 ssh、telnet 或相关通信/仿真软件进行登录;
确保 TERM 变量设置正确,若屏幕显示异常,可按相关正确方法处理。
11、尝试将你的密码更改为“dog”,会发生什么?将其更改为一个更安全的密码,是什么使这个密码相对安全?
尝试将密码更改为“dog”时,系统会显示:
“BAD PASSWORD: it is too short”
“BAD PASSWORD: it is too simplistic/systematic”
“BAD PASSWORD: it is based on a dictionary word”
因为“dog”:
太短
过于简单
是字典中的单词
一个相对安全的密码应满足以下标准:
至少六个字符长
不是任何语言字典中的单词
不是容易被发现的人名、地名、宠物名或其他事物
至少包含两个字母和一个数字
不是登录名、登录名的反转或登录名偏移一个或多个字符
若更改密码,新密码与旧密码至少有三个字符不同
12、在不成为根用户(超级用户)的情况下将你的登录 shell 更改为 tcsh。
可以使用
chsh
(更改 shell)实用程序来更改登录 shell。在命令行输入
chsh
,然后根据提示输入你的密码和要使用的 shell 的绝对路径名(
/bin/tcsh
)。
例如:
$ chsh
Changing shell for sam.
Password:
New shell [/bin/bash]: /bin/tcsh
Shell changed.
更改后的 shell 将在你下次登录及之后的所有登录中生效。若在 GUI 下使用终端模拟器以这种方式更改登录 shell,后续的终端模拟器窗口在你注销系统并重新登录之前不会反映出更改。
13、请解释如何使用man命令来确定系统手册的哪些部分包含给定名称的手册页。
可以使用
man -a
选项来查看给定主题的所有手册页,按
q
可移动到下一部分。例如,使用
man -a write
可查看
write
的所有手册页,从而确定其所在的手册部分。
此外,使用
man -k
选项可列出与给定主题相关的手册页,从中可得知相关手册页所在部分。例如,
man -k postscript
可列出与 PostScript 相关的手册页。
14、可以使用哪些命令来确定谁登录到了特定的终端?
可以使用 who、w 或 finger 命令来显示系统中登录用户的登录名和终端名。
15、如何阻止其他用户使用write与你通信?为什么要这样做?
若不想接收其他用户的消息,可执行命令:
mesg n
阻止其他用户使用
write
与你通信,可能是因为你正在专注于某项工作,不想被消息打扰,消息横幅可能会遮挡你正在处理的内容。
16、如果名为 done 的文件已经存在,执行以下命令会发生什么?$ cp to_do done $ mv to_do done
对于
cp to_do done
命令,若
done
文件已存在,会将
to_do
文件的内容复制到
done
文件中,覆盖原
done
文件内容;
对于
mv to_do done
命令,
mv
会先比较源文件
to_do
和目标文件
done
的修改时间,若目标文件
done
修改时间更新,
mv
不会替换它;若目标文件
done
没有更新,
mv
会将
to_do
文件移动到
done
文件,即重命名
to_do
文件为
done
并覆盖原
done
文件。
若移动会覆盖一个没有写权限的文件,
mv
会显示文件的访问权限并等待响应,输入
y
或
Y
会覆盖文件,否则不移动文件;
若使用
-f
选项,
mv
会直接覆盖文件。
17、在你的主目录中创建一个.plan文件。你的系统上的finger命令会显示.plan文件的内容吗?
会。通常情况下,当指定用户列表时,
finger
实用程序的长列表会显示用户主目录中存在的
.plan
、
.project
和
.pgpkey
文件的内容。如果不想显示这些文件内容,可使用
-p
选项。
18、可以使用哪个命令查看名为status.report的文件的前几行?可以使用哪个命令查看文件的末尾?
可以使用
head
命令查看文件的前几行,例如查看前几行(默认是前10行),可使用命令:
head status.report
若要指定行数,如查看前5行,可使用命令:
head -5 status.report
可以使用
tail
命令查看文件的末尾(默认是后10行),可使用命令:
tail status.report
若要指定行数,如查看后5行,可使用命令:
tail -5 status.report
19、一些邮件客户端,尤其是较旧的版本,无法处理二进制文件。假设你要发送一个用gzip压缩过的文件(gzip压缩后的文件是二进制文件),并且你不知道收件人使用的是哪种邮件客户端。uuencode可以将二进制文件转换为ASCII文件。a. 使用uuencode将压缩文件转换为ASCII文件。编码后的文件比压缩文件大还是小?请解释。(如果你的系统上没有uuencode,可以从rpmfind.net下载;它是GNU sharutils软件包的一部分。)b. 在压缩文件之前使用uuencode有意义吗?请解释。
使用
uuencode
将二进制文件转换为 ASCII 文件时,编码后的文件通常会比原始的压缩文件大。这是因为
uuencode
将二进制数据转换为可打印的 ASCII 字符,每个 3 字节的二进制数据会被编码为 4 字节的 ASCII 字符,从而增加了文件的大小。
在压缩文件之前使用
uuencode
通常没有意义。因为压缩工具(如
gzip
、
bzip2
等)是针对二进制数据进行优化的,它们可以利用数据中的重复模式和冗余信息来减小文件大小。而在压缩之前使用
uuencode
会破坏这些重复模式和冗余信息,使得压缩工具无法有效地工作,最终导致压缩效果变差,文件可能会更大。
20、以下各项分别是绝对路径名、相对路径名还是简单文件名?a. correspond/business/milk_co b. /home/alex c. /home/alex/literature/promo d. .. e. letter.0610
a. 相对路径名;b. 绝对路径名;c. 绝对路径名;d. 相对路径名;e. 简单文件名
21、列出你可以用来执行以下操作的命令:a. 将你的主目录设为工作目录;b. 确定工作目录
a. 使用不带参数的
cd
命令可将主目录设为工作目录;
b. 使用
pwd
命令可确定工作目录。
22、如果你的工作目录是 /home/alex,且有一个名为 literature 的子目录,请给出三组命令,用于在 literature 下创建一个名为 classics 的子目录。同时给出几组命令,用于删除 classics 目录及其内容。
创建子目录的三组命令示例:
cd /home/alex/literature; mkdir classics
mkdir /home/alex/literature/classics
cd /home/alex; mkdir literature/classics
删除目录及其内容的命令示例:
cd /home/alex/literature; rm -r classics
rm -r /home/alex/literature/classics
23、你应该对 /etc/passwd 文件有读取权限。为回答以下问题,使用 cat 或 less 命令显示 /etc/passwd 文件。查看系统中用户在 /etc/passwd 文件里的信息字段。a. /etc/passwd 文件中使用哪个字符分隔字段?b. 描述每个用户使用了多少个字段?c. 你的系统上有多少个用户?d. 你的系统上正在使用多少种不同的登录 shell?(提示:查看最后一个字段。)e. /etc/passwd 文件的第二个字段以编码形式存储用户密码。如果密码字段包含 x,则你的系统使用影子密码,并将编码后的密码存储在其他地方。你的系统是否使用影子密码?
a. 分隔字段的字符是冒号(
:
);
b. 每个用户使用 7 个字段;
c. 需查看
/etc/passwd
文件确定用户数量;
d. 需查看
/etc/passwd
文件最后一个字段确定登录 shell 种类;
e. 需查看
/etc/passwd
文件第二个字段是否有
x
来确定是否使用影子密码。
24、如果 /home/jenny/draft 和 /home/alex/letter 是同一个文件的链接,并且发生了以下一系列事件,信件开头的日期会是什么?a. 亚历克斯执行命令 vim letter。b. 珍妮执行命令 vim draft。c. 珍妮将信件开头的日期改为 2006 年 1 月 31 日,写入文件并退出 vim。d. 亚历克斯将日期改为 2006 年 2 月 1 日,写入文件并退出 vim。
2006 年 2 月 1 日
25、假设一个用户属于一个对名为jobs_list的文件具有所有权限的组,但该用户作为文件的所有者却没有任何权限。描述该用户/所有者可以对jobs_list执行哪些操作(如果有的话)。该用户/所有者可以使用哪个命令来授予自己对该文件的所有权限?
虽然用户作为所有者无权限,但因其所属组有全部权限,所以用户可执行组允许的操作。用户可使用命令
chmod u+rwx jobs_list
来授予自己对该文件的所有权限。
26、假设存在如下目录结构和目录权限:有一个目录business,权限为d–x–x—,所有者是jenny,所属组是pubs;business目录下有子目录milk_co,权限为drwxr – xr – x,所有者是jenny,所属组是pubs。对于每一类权限(所有者、组和其他用户),当你运行以下每个命令时会发生什么?假设当前工作目录是包含business的上级目录,并且文件cheese_co对所有用户可读。a. cd business/milk_co b. ls –l business c. cat business/cheese_co
a.
所有者和组用户
:若上级目录权限允许访问,可成功进入
business/milk_co
目录;
其他用户
:由于
business
目录对其他用户无读权限,可能无法进入该目录。
b.
所有者和组用户
:可以列出
business
目录下的详细信息;
其他用户
:由于
business
目录对其他用户无读权限,无法列出该目录下的详细信息。
c.
所有者、组用户和其他用户
:因文件
cheese_co
对所有用户可读,若能访问到该文件所在目录,都可以查看文件内容。
27、
ls -i
命令会在文件名前显示文件的索引节点号。编写一个命令,输出当前工作目录中按索引节点号排序的索引节点号/文件名对。(提示:使用管道。)
ls -i
可以使用
ls -i | sort -n
命令,
ls -i
用于显示文件的索引节点号和文件名,
sort -n
用于按数字顺序对输出进行排序。
28、解释以下命令序列中可能存在的错误信息:$ ls -l total 1 drwxrwxr – x 2 alex pubs 1024 Mar 2 17:57 dirtmp
给定内容中未显示错误信息,
ls -l
命令用于以长格式显示文件和目录信息,输出展示了
dirtmp
目录的详细信息,包括权限、硬链接数、所有者、所属组、大小、修改时间等。
若有错误信息,需结合具体报错内容判断,可能原因有:
命令拼写错误
文件或目录不存在
权限不足等
29、
ls -i
命令会在文件名前显示文件的索引节点号。编写一个命令,输出当前工作目录中文件的索引节点号/文件名对,并按索引节点号排序。(提示:使用管道。)
ls -i
可以使用
ls -i | sort -n
命令来实现。
ls -i
用于显示文件的索引节点号和文件名,
sort -n
用于按数字顺序对
ls -i
的输出进行排序。
30、解释以下命令序列中显示的错误信息:$ ls -l total 1 drwxrwxr-x 2 alex pubs 1024 Mar 2 17:57 dirtmp $ ls dirtmp $ rmdir dirtmp rmdir: dirtmp: Directory not empty $ rm dirtmp/* rm: No match.
执行
rmdir dirtmp
时出现错误:
rmdir: dirtmp: Directory not empty
表示
dirtmp
目录非空,不能直接用
rmdir
删除。
执行
rm dirtmp/*
时出现错误:
rm: No match.
表示
dirtmp
目录下没有匹配的文件,即该目录为空或没有符合通配符匹配的文件。
31、当命令执行时,shell通常会做什么?如果你不想在一个命令完成后再运行另一个命令,你应该怎么做?
当命令执行时,shell会等待该进程完成,此时shell处于名为“sleep”的非活动状态。若不想等待命令完成就运行另一个命令,可将命令置于后台运行,启动后台作业时shell会显示作业编号和PID编号,之后用户可继续输入其他命令。
32、使用 sort 作为过滤器,重写以下命令序列:$ sort list > temp $ lpr temp $ rm temp
$ sort list | lpr
33、假设以下文件位于当前工作目录中:intro notesb ref2 section1 section3 section4b notesa ref1 ref3 section2 section4a sentrev 。使用通配符以尽可能少的字符表示文件名,列出所有以section开头的文件。
ls section*
34、仅输出工作目录中包含模式 $(. 的文件的名称。
可使用命令
grep -l '$(.' *
来实现,其中
-l
选项用于只输出包含匹配模式的文件名,
*
代表工作目录下的所有文件。
35、将工作目录中的文件列表按大小排序后发送到打印机。
可使用命令
ls -S | lpr
,其中:
ls -S
用于按文件大小对工作目录中的文件进行排序;
lpr
用于将结果发送到打印机。
36、给出一个命令,将sort命令的标准输出重定向到一个名为phone_list的文件中。假设输入文件名为numbers。
sort numbers > phone_list
37、将文件 permdemos.c 中所有的 [ 和 { 字符转换为 ( 字符,所有的 ] 和 } 字符转换为 ) 字符。
可以使用以下命令:tr ‘[{]’ ‘()’ < permdemos.c
38、创建一个名为 book 的文件,该文件包含另外两个文件 part1 和 part2 的内容。
可以使用以下命令来实现:$ cat part1 part2 > book
39、说出一个只从标准输入接受输入的实用工具。
tr(translate)实用工具
40、请解释仅重定向输出的含义,并说明其命令行格式以及可能存在的问题,同时给出合并文件时的处理建议。
重定向输出符号(
>
)指示 shell 将命令的输出重定向到指定文件而非屏幕。命令行格式为:
command [arguments] > filename
但重定向输出可能会破坏文件,例如:
cat orange pear > orange
会先清空
orange
文件内容;
grep apple a b c > a output
会清空
a
文件内容。
若要合并两个文件,可先将内容存入临时文件,再重命名该临时文件。
41、请简述在管道内命令之间的数据传递方式、管道的作用、管道符号及使用管道的命令行语法。
在一个管道内,一个命令的标准输出会直接作为另一个命令的标准输入。管道(有时称为流水线)的作用等同于将一个命令的标准输出重定向到一个文件,然后将该文件作为另一个命令的标准输入,但管道无需单独的命令和中间文件。
管道符号为竖线(
|
),使用管道的命令行语法为:
command_a [arguments] | command_b [arguments]
42、解释以下错误信息:执行命令序列 $ ls abc abd abe abf abg abh 后,接着执行 $ rm abc ab* ,出现错误信息 rm: cannot remove ‘abc’: No such file or directory 。后续执行 ls 命令会显示哪些文件名?
错误信息表明在执行
rm
命令时,尝试删除文件
abc
,但系统找不到该文件或目录。这可能是因为在执行
rm
命令前,
abc
文件已被删除或重命名。
后续执行
ls
命令会显示
abc
,因为
rm
命令中
ab*
会匹配以
ab
开头且不同于
abc
的文件,这些文件将被删除,而
abc
因之前尝试删除时提示不存在所以未被操作。
43、解释为什么你可能有修改文件的权限,但没有删除文件的权限。
要删除文件,必须对文件的父目录具有执行和写入访问权限,但不需要对文件本身具有读写权限。若对文件父目录无执行和写入权限,即便对文件有修改权限,也无法删除该文件。
44、为什么命令名和文件名通常不包含空格?如何创建一个包含空格的文件名?如何删除它?
文件名中包含空格的处理方法
命令名和文件名通常不包含空格,是因为空格是特殊字符,在命令行中必须对其进行引用。这对新手用户来说可能有难度,对有经验的用户来说也很麻烦。
创建包含空格的文件名
在创建文件时,可以用引号将包含空格的文件名引起来,例如:
touch "file name with spaces.txt"
删除包含空格的文件名
删除包含空格的文件时,同样需要用引号将文件名引起来再执行删除命令,例如:
rm "file name with spaces.txt"
45、创建一个名为 answer 的文件,并执行命令:$ > answers.0102 < answers cat。解释该命令的作用和原因,以及更传统的表达方式是什么。
该命令尝试将
answers
文件的内容重定向到
answers.0102
文件中,然后执行
cat
命令。但此命令语法有误,正确的重定向顺序应该是:
cat < answers > answers.0102
更传统的表达方式就是:
cat answers > answers.0102
它将
answers
文件的内容复制到
answers.0102
文件中。