Linux 鸟叔的私房菜 基础学习篇(第四版) 课后习题答案

答案仅供参考,来源于本人和网上,并非绝对正确,请酌情参考


第零章 计算机概论
1.根据本章中的说明,请找出目前全世界跑得最快的超级电脑的:(1)系统名称;(2)所在位置;(3)使用的CPU型号与规格;(4)总共使用的CPU数量;(5)全功率运行1天时,可能使用的电费。
解:(1)Summit;(2)美国;(3)IBM Power9,22核心,主频为3.07GHZ,总计使用了103752颗,核心数量达到2282544个;(4)2CPU + 6GPU;(5)Summit的功耗为8805.5kw,按照0.5/度的电价,每日需要花费105666元。

2.利用软件:假设你不想拆开主机机箱,但想了解你的主机内部各组件的信息时,该如何是好呢?如果使用的是Windows操作系统,可使用CPU-Z这个软件,如果是Linux环境下,可以使用cat /proc/cpuinfo及使用lspci等命令来查看各项组件的型号。
解:硬件信息如下。
CPU:Inter Core i7 5500U;2.4GHZ
内存:8GBytes;DDR3
显卡:PCI Express 3.0;2GBytes
主板:ASUSTEK COMPUTER INC;Intel Broadwell-u(北桥),Intel Broadwell-u PCH L-P(南桥);American Megatrends Inc;集成了网卡和声卡。
硬盘:SATA3;128GB;读483MB/S,写136MB/S;6GBPS

3.找出第四代Intel i7 4790 CPU的:(1)与南桥沟通的DMI带宽有多大?(2)二级缓存的容量有多大?(3)最大PCIe通道数量有多少?并据以说明主板上面PCIe插槽的数量限制。
解:(1)DMI2 56T/S;(2)三级缓存 8MB;(3)16条PCIe 通道。

4.找出Intel SSD 520固态硬盘相关的功能列表,了解:(1)连接接口;(2)最大读写速度,以及(3)最大随机读写数据(IOPS)等信息。
解:(1)SATA3(6Gbps);(2)读:280MB/S(SATA2),550MB/S(SATA3);写:260MB/S(SATA2),520MB/S(SATA3);(3)IOPS的值为:6187(读),17740(写)。


第一章 Linux是什么与如何学习
实践题部分
1.请上网找出目前Linux内核的最新稳定版与开发中版本的版本号码,请注明查询的日期与对应的版本。
解:(1)最新稳定版:5.0.2,2019-3-13(2)开发中版本:5.0,2019-3-3。

2.请上网找出Linux吉祥物企鹅的名字,以及最原始的图形文件。
解:企鹅的名字为TUX(tuxedo)

3.请上网找出Andriod与Linux内核版本间的关系。
解:关系如下
Android Version | API Level |Linux Kernel in AOSP

1.5 Cupcake |3 |2.6.27
1.6 Donut |4 |2.6.29
2.0/1 Eclair |5-7 |2.6.29
2.2.x Froyo |8 |2.6.32
2.3.x Gingerbread |9, 10 |2.6.35
3.x.x Honeycomb |11-13 |2.6.36
4.0.x Ice Cream San|14, 15 |3.0.1
4.1.x Jelly Bean |16 |3.0.31
4.2.x Jelly Bean |17 |3.4.0
4.3 Jelly Bean |18 |3.4.39
4.4 Kit Kat |19, 20 |3.10
5.x Lollipop |21, 22 |3.16.1
6.0 Marshmallow |23 |3.18.10
7.0 Nougat |24 |4.4.1
7.1 Nougat |25 |4.4.1 (To be updated)

简答题部分
1.你在你的主机上面安装了一块网卡,但是开机之后,系统却无法使用,你确定网卡是好的,那么可能出现的问题出在哪里?该如何解决?
解:硬件问题——网卡的PCI插槽没有插好,重新插好即可。软件问题——①没有禁用主板自带网卡,导致新装网卡无法识别,禁用即可;②网卡过新,原有网卡驱动程序版本老旧导致系统无法识别,更新驱动程序即可;③网卡驱动未安装,安装驱动即可。

2.一个操作系统至少要能够完整控制整个硬件,请问操作系统应该要控制硬件的哪些单元?
解:运算单元、控制单元、寄存器组、总线接口单元、输入/输出单元。操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出设备及文件系统,因此操作系统要控制的就是这些硬件的内部单元。

3.我在Windows上面玩的游戏可不可以拿到Linux去玩?
解:不能。游戏软件也是个应用程序,应用程序是参考操作系统提供的开发接口所开发出来的软件,与操作系统的关系相当密切。

4.Linux本身仅是一个内核与相关的内核工具而已,不过,它已经可以驱动所有的硬件,所以,可以算是一个很阳春的操作系统了。经过其他应用程序的开发之后,被整合成为Linux distributions。请问众多的distributions之间有何异同?
解:各大Linux Distributions的主要异同在于支持标准。“Linux kernel + Software + Tools + Documentation”组成的可完整安装的程序被称为Linux distributions。每一个Linux distributions使用的kernel都是http://www.kernel.org所发布的,而他们所选择的软件几乎都是目前很知名的软件,重复性相当高。此外,为了让所有的Linux distributions开发不至于差异太大,且让这些开发商在开发的时候有所依据,还有Linux Standard Base(LSB)等标准来规范开发者,以及目录架构的File system Hierarchy Standard(FHS)标准规范,它们的唯一差别可能就是该开发者自家所开发出来的管理工具以及套件管理的模式。所以说,基本上,每个Linux distributions除了架构的严谨度与选择的套件内容外,其实差异并不太大。

5.UNIX是谁写出来的?GUN项目是谁发起的?
解:UNIX是Thompson与Ritchie写出,与1973年正式发布;GUN项目由Richard Mathew Stallman在1984年发起。

6.GUN的全名为何?它主要由哪个基金会支持?
解:GUN全名为GUN’s not UNIX。主要由FSF基金会支持。

7.何谓多用户(Multi-user)多任务(Multi-task)?
解:多用户是可以在系统上创建多个用户,且多个用户可以同时使用系统资源;对于多任务,理论上一个CPU在一个时间内仅能进行一个程序,多任务,即计算机对于多个任务,会在不同的程序间切换,让用户感觉多个任务是在同步进行(现在的多核心计算机可以实现真正的多任务同时处理)。Linux是一个真实的、完整的多用户多任务操作系统,可以在Linux上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行不同的任务而互不影响。

8.简单说明GUN General Public License(GPL)与Open Source的精神。
解:1. GPL的授权之软件,乃为自由软件(Free software),任何人皆可拥有他; 2.开发 GPL 的团体(或商业企业)可以经由该软件的服务来取得服务的费用; 3.经过 GPL授权的软件,其属于 Open source的情况,所以应该公布其原始码; 4.任何人皆可修改经由 GPL授权过的软件,使符合自己的需求; 5.经过修改过后 Open source应该回馈给 Linux社群。

9.什么是POSIX?为何说Linux使用POSIX时对于开发有很好的影响?
解:POSIX是一种标准规范,主要针对在 Unix操作系统上面跑的程序来进行规范。若你的操作系统符合 POSIX,则符合 POSIX的程序就可以在你的操作系统上面运作。 Linux由于支持 POSIX,因此很多 Unix上的程序可以直接在 Linux上运作,因此程序的移植相当简易!也让大家容易转换平台,提升 Linux的使用率。

10.简单说明Linux成功的因素
解:①稳定的系统②免费或少许费用③安全性、漏洞的快速修补④多任务、多用户⑤用户与用户组的规划⑥相对比较不耗资源的系统⑦适合需要小内核程序的嵌入式系统⑧整合度佳且多样的图形用户界面。简单来说,完全免费,开放源码遵循统一的开发标准,庞大的开发团队,继承与UNIX的优秀基础等原因造就了Linux的成功。


第二章 主机划分与磁盘分区
实践题部分
1.请分析你的家用计算机,以你的硬件设备来计算可能产生的耗电量,最终再以计算出来的总瓦数乘上你可能运行的时间,以推估出一年你可能会在你的这台主机上面花费的时间。
解:(1)总瓦数:300w(2)运行的时间:3h/day(3)电费:0.6/度(4)一年大约要花365度电,大约花费为219元。

简答题部分
1.一台计算机主机是否只要CPU够快,整体速度就会提高?
解:不是。在性能方面并非只考虑CPU的能力而已,速度的快慢与整体系统的最慢的那个设备有关。CPU再快,其他硬件无法配合CPU的高速处理能力,也无法发挥CPU的最佳性能,计算机整体性能就会卡在最慢的硬件的瓶颈上。

2.Linux对于硬件的要求需要考虑的是什么?是否一定要很高的配置才能安装Linux?
解:Linux对于硬件的要求因计算机的用途而定,且Linux对于硬件的最低要求较其它系统都低。所以配置不一定要高,因地制宜即可。

3.一台好的主机在安装之前,最好先进行规划,哪些是必定需要注意的Linux主机规划事项?
解:规划主机的定位与角色。主机是否开放网络服务,是否需要大量运算,是否需要很大的硬盘容量来服务客户端的使用,套间选择安装等都是要考虑的内容。

4.请写下下列配置在Linux中的设备文件名:IDE硬盘、CDROM、打印机、软驱、网卡。
解:IDE硬盘:/dev/hd[a-d];
CDROM:/dev/cdrom;
打印机:25针为/dev/lp[0-2],USB为/dev/usb/lp[0-15];
软驱:/dev/fd[0-1];
网卡:/dev/eth[0-n]。

5.目前在个人计算机上面常见的硬盘与主板的连接接口有哪两个?
解:IDE和SATA。IDE为老式接口,目前市面上的计算机基本都采用了SATA接口。


第三章 安装CentOs 7.x
1.Linux的目录配置以“树状目录”来配置,至于磁盘分区(partition)则需要与树状目录相配合!请问,在默认的情况下,在安装的时候系统会要求你一定要分出来的两个分区是什么?
解:/和swap两个分区。

2.默认使用MBR分区方式的情况下,在第二块SATA磁盘中,划分六个有用的分区(具有文件系统),此外,已知有两个主分区,请问六个分区的文件名?。
解:(1)P+P+E
(2)/dev/sdb1 /dev/sdb2 /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8

3.什么是GMT时间?它与北京时间差几个小时?。
解:GMT为格林尼治时间,与北京时间差8小时。

4.软件磁盘阵列的设备文件名是什么?
解:/dev/md[0-15]

5.如果我的磁盘分区是使用MBR分区方式,且设置了4个主分区,但是磁盘还有空间,请问我还能不能使用这些空间?
解:不能。由于主分区与扩展分区最多只能有四个,其中扩展分区最多只能有一个,如果想要划分出四个分区且还要有预留剩余空间,四个主分区是不适合的,因为,即使硬盘还有剩余容量,无法再继续划分。


第四章 首次登陆与在线求助
情景仿真题
1.我们在命令行界面,例如tty2里面看到的欢迎界面,就是在那个login:之前的页面(CentOS Linux 7 … )是怎么来的?
目标:了解到终端的欢迎信息是怎么来的?
前提:欢迎信息的内容,记录在/etc/issue当中的。
需求:利用man找到该文件当中的变量内容。
情景仿真题的解决步骤:
欢迎界面是在/etc/issue文件中,你可以使用【nano /etc/issue】看看该文件的内容(注意,不要修改这个文件内容,看完就离开),这个文件的内容有点像下面这样:
\S
Kernel \r on an \m

2.与tty3比较之下,发现到内核版本使用的是\r而硬件等级则是\m来取代,这两者代表的意义是什么?由于这个文件的文件名是issue,所以我们使用【man issue】来查看这个文件的格式;
通过上一步的查询我们会知道反斜杠(\)后面接的字符是与agetty(8)及mingetty(8)有关,故进行【man agetty】这个命令的查询。
由于反斜杠(\)的英文为escape,因此在上个步骤的man环境中,你可以使用【/escape】来查找各反斜杠后面所接字符所代表的意义是什么。
请自行找出:如果我想要在/etc/issue文件内表示【时间(localtime)】与【tty号码(如tty1,tty2的号码)】的话,应该要找到哪个字符来表示(通过反斜杠的功能)?
解:\t与\l。

简答题部分
1.简单查询一下,Physical console、Virtual console、Terminal的说明是什么?
解:(1)基于物理设备的连接,称为物理终端(Pysical Terminal),也可以称为物理控制台(Pyhsical console)。
(2)一个物理终端(物理控制台),可以支持多个虚拟终端(或虚拟控制台 virtual console)。
(3)随着X视窗系统的广泛使用,虚拟控制台的使用需求也越来越少,控制台程序可以在终端模拟器(terminal emulator)中运行,这些被称为伪终端(Pseudo Terminal)。

2.请问如果我以命令行模式登录Linux主机时,我有几个终端接口可以使用?如何切换各个不同的终端接口?
解:有6个终端接口可以使用切换方式为[Ctrl]+[Alt]+[F1F6]。Linux默认情况下会提供6个terminal,分别命名为tty1tty6。

3.在Linux系统中,/VBird与/vbird是否为相同的文件?
解:不同。Linux系统区分大小写。

4.我想要知道date如何使用,应该如何查询?
解:两种方式:man date(UNIX like通用),info date(Linux)。

5.我想要在今天的1:30让系统自己关机,要怎么做?
解:shutdown -h 1:30

6.如果Linux的X Window突然发生问题而挂掉,但Linux本身还是好好的,那么我可以按下哪三个按键来让X Window重启?
解:[Ctrl]+[Alt]+[Backspace]

7.我想要知道2010年5月2日是星期几?该怎么做?
解:cal 5 2010;调出2010年5月日历查看。

8.使用man date找出显示目前的日期与时间的参数,显示方式类似:2015/10/16-20:03。
解:date +%Y/%m/%d-%H:%M

9.若以X Window为默认的登录方式,那请问如何进入Virtual console呢?
解:[Ctrl]+[Alt]+[F1~F6]。

10.简单说明在bash shell的环境下,[Tab]按键的用途?
解:在命令行模式下[Tab]按键具有“命令补全”与“文件补齐”的功能。[Tab]接在一串命令的第一个命令的后面为“命令补全”,接在一串命令的第二个命令以后时则为“文件补齐”。

11.如何强制终端一个程序的进行?(利用按键,非利用kill命令)
解:[Ctrl]+[C]

12.Linux提供相当多的在线查询,称为man page,请问,我如何知道系统上有多少关于passwd的说明?可以使用其他的程序来替代man的这个功能吗?
解:利用man -f passwd来查询。在Linux上可以用info passwd命令来替代man的在线查询passwd的功能。

13.在man page显示的内容中,命令(或文件)后面会接一组数字,这个数字若为1,5,8,表示该查询的命令(或文件)意义是什么?
解:代表意义为:1)用户在shell环境中可以操作的命令或可执行文件;5)配置文件或者是某些文件的格式8);系统管理员能够使用的管理命令。

14.man page显示的内容的文件是放置在哪些目录中?
解:不同的Linux distributions可能会有所不同,通常是放在/usr/share/man这个目录里。

15.请问【foo 1 -foo2 foo3 foo4】这一串命令中各代表什么意义?
解:foo1一定是指令, -foo2则是foo1这个指令的选择项目参数, foo3与foo4则不一定,可能是foo1的参数设定值,也可能是额外加入的parameters。

16.当我输入man date时,在我的终端却出现一些乱码,请问可能的原因是什么?如何修正?
解:乱码是由语系导致。可以在终端输入echo &LANG命令查看当前使用的语言,再输入LANG=en_CN.UTF-8修改语言(临时修改)即可。

17.我输入这个命令“ls -al /vbird”,系统回复我这个结果:“ls /vbird: No such file or directory”,请问发生了什么事?
解:没有/vbird这个文件或目录。

18.我想知道目前系统有多少命令是以bz为开头的,可以怎么做?
解:输入 bz[Tab][Tab]查看。

19.承上题,在出现的许多命令中,请问bzip2是干嘛用的?
解:使用man bzip2命令查看可以知道是用来压缩与解压缩文件用的。

20.在终端里面登录后,看到的提示符KaTeX parse error: Expected 'EOF', got '#' at position 2: 与#̲有何不同?平时操作应该使用哪一…则代表一般身份使用者。依据提示字符的不同,我们可以约略判断登入者身份。一般来说,建议日常操作使用一般身份使用者登入,即是$。

21.我使用dmtsai这个账号登录系统了,请问我能不能使用reboot来重启?若不能,请说明原因,若可以,请说明命令如何执行?
解:理论上reboot仅能让root运行。不过,如果dmtsai是在主机前面以图形接口登陆时,则dmtsai还是可以透过图形接口功能来关机。


第五章 Linux的文件权限与目录配置
1.早期的UNIX系统文件名最多允许14个字符,而新的UNIX与Linux系统中,文件名最多可以容许几个字符?
解:由于使用Ext2/Ext3文件系统,单一档名可达 255字符,完整文件名 (包含路径)可达 4096 个字符。

2.当一个一般文件权限为 -rwxrwxrwx则表示这个文件的意义是什么?
解:任何人皆可读取、修改或编辑、可以执行,但不一定能删除。

3.我需要将一个文件的权限改为-rwxr-xr—,请问该如何执行命令?
解:chmod 754 filename或 chmod u=rwx,g=rx,o=r filename

4.若我需要更改一个文件的所有者与用户组,该用什么命令?
解:chown, chgrp

5.请问下面的目录主要放置什么数据?
/etc/, /etc/init.d, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev, /var/log
解:/etc/:系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的起始文件等;/etc/init.d:所有服务的默认启动脚本都是放在这个目录中;/boot:主要放置在开机会使用到的文件,包括Linux内核文件以及开机菜单与开机所需配置文件等;/usr/bin:绝大部分的用户可使用命令都在这里,与/bin不同的是这些命令与开机过程无关;/bin:主要放置在开机时,以及进入单用户维护模式后还能够被操作的命令;/usr/sbin:非系统正常运行所需要的系统命令,最常见的就是某些网络服务器软件的服务命令;/sbin:主要放置开机过程中所需要的命令,里面包括了开机、修复、还原系统所需要的命令,只有系统管理员能使用;/dev:在Linux系统上,任何设备与接口设备都是以文件的形式存在与这个目录当中;/var/log:主要放置登录文件,记录登录信息。

6.若一个文件的文件名开头为“.”,例如.bashrc这个文件,代表什么?另外,如何显示出这个文件名与它的相关属性?
解:有“.”为开头的为隐藏文件,需要使用 ls -a这个 -a的选项才能显示出隐藏文件的内容,而使用 ls -al才能显示出属性。


第六章 Linux文件与目录管理
1.什么是绝对路径与相对路径?
解:对于Linux,绝对路径的写法为由 /开始写,相对路径则不由 /开始写。此外,相对路径为相对于目前工作目录的路径。

2.如何更改一个目录的名称?例如由/home/test变为/home/test2?
解:mv /home/test /home/test2 。

3.PATH这个环境变量的意义是什么?
解:这个是用来指定运行档运行的时候,命令搜寻的目录路径。

4.umask有什么用处与优点?
解:umask用来指定目前用户在新建文件或目录时候的权限默认值,因此它可以增减一些权限,因此,适当的定义 umask有助於系统的安全,因为他可以用来创建默认的目录或文件的权限。

5.当一个用户的umask分别为033与044,它所建立的文件与目录的权限是什么?
解:在 umask为 033时,则默认是拿掉 group与 other的 w(2)x(1)权限,因此权限就成为“文件 -rw-r–r--;目录 drwxr–r-- ”而当 umask 044时,则拿掉 r的属性,因此就成为“文件 -rw–w--w-,目录 drwx-wx-wx”。

6.什么是SUID?
解:SUID是一种文件特殊权限,SUID有这样的限制于功能:SUID权限仅对二进制程序有效;执行者对于该程序需要具有x的可执行权限;本权限仅在执行改程序的过程中有效;执行者将具有该程序所有者的权限。

7.当我要查询/usr/bin/passwd这个文件的(1)传统权限、(2)文件类型与(3)文件的隐藏属性,可以使用什么命令来查询?
解:(1)(2)ll -d /usr/bin/passwd
(3)chattr /usr/bin/passwd

8.尝试用find找出目前Linux系统中所有具有SUID的文件有哪些?
解:find / -perm /4000 -print。

9.找出/etc下面,文件大小介于50KB到60KB之间的文件,并且将权限完整地列出(ls-l)
解:find /etc -size +50k -a -size -60k -exec ls -l {} ;

10.找出/etc下面,文件容量大于50KB且文件所有者不是root的文件名,且将权限完整地列出(ls-l)
解:find /etc -size +50k -a ! -user root -exec ls -ld {} ;

11.找出/etc下面,容量大于1500KB以及容量等于0的文件
解:find /etc -size +1500k -o -size 0


第七章 Linux磁盘与文件系统管理
1.我们常常说,启动的时候,【发现硬盘有问题】,请问,这个问题的产生是【文件系统的损坏】,还是【硬盘的损坏】?
解:如果某个 filesystem里面,由于操作不当,可能会造成 Superblock数据的损毁,或者是 inode的架构损毁,或者是 block area的记录遗失等等,这些问题当中,其实硬盘还是好好的,不过,在硬盘上面的文件系统则已经无法再使用。一般来说,我们的 Linux很少会造成 filesystem的损毁,所以,发生问题时,很可能整个硬盘都损毁了。但是,如果您的主机常常不正常断电,那么,很可能硬盘是没问题的,但是,文件系统则有可能损毁。此时,重建文件系统 (reinstall)即可,不需要换掉硬盘。

2.当我有两个文件,分别是file1与file 2,这两个文件互为硬链接的文件,请问,若我将file1删除,然后再以类似vi的方式重新新建一个名为file1的文件,则file2的内容是否会被修改?
解:当我删除 file1之后, file2 则为一个正规文件,并不会与他人共同分享同一个 inode与 block ,因此,当我重新创建一个档名为 file1时,他所利用的 inode 与 block都是由我们的 filesystem 主动去搜寻 meta data,找到空的 inode 与 block来创建的, 与原本的 file1并没有任何关联性。所以,新建的 file1 并不会影响 file2。


第八章 文件与文件系统的压缩
答案暂缺(以后若找到会补上)


第九章 vim程序编辑器
1.我用vi打开某个文件后,要在第34行向右移动15个字符,应该在一般模式中执行什么命令?
解:先按下34G移动光标到第34行,再执行15[→]或15j。

2.在vi打开的文件中,如何去到该文件的页首或页尾?
解:执行1G或gg去往页首,执行G去往页尾。

3.在vi打开的文件中,如何在光标所在行中,移动到行头及行尾?
解:0或功能键[home]移动到行头,$或[end]移动到行尾。

4.vi的一般模式情况下,按下“r”有什么功能?
解:进入替换模式(Replace mode),且只会替换光标所在的那一个字符一次。

5.在vi的环境中,如何将目前正在编辑的文件另存新文件名为newfilename?
解:w newfilename

6.在Linux下面最常使用的文本编辑器为vi,请问如何进入编辑模式?
解:在一般模式下按下i,I,a,A,o,O,r,R任意一个都可以进入编辑模式。

7.在vi软件中,如何由编辑模式跳回一般模式?
解:按下[ESC]键。

8.在vi的环境中,若上下左右键无法使用时,请问如何在一般模式移动光标?
解:[k][j][h][l]分别代表上下左右。

9.在vi的一般模式中,如何删除一行、n行;如何删除一个字符?
解:dd删除光标所在的那一整行,ndd删除光标所在的向下n行;x或X删除一个字符。

10.在vi的一般模式中,如何复制一行、n行并加以粘贴?
解:yy复制光标所在的那一行,nyy复制光标所在的向下n行,然后p或P粘贴。

11.在vi的一般模式中如何查找string这个字符串?
解:/string向后查找,?string向前查找。

12.在vi的一般模式中,如何替换word1成为word2,而若需要使用确认机制,又该如何?
解:1, s / w o r d 1 / w o r d 2 / g 使 : 1 , s/word1/word2/g替换,若需要使用确认机制,则为:1, s/word1/word2/gc

13.在vi目前的编辑文件中,在一般模式下,如何读取一个文件filename进入当前的文件?
解::r filename

14.在vi目前的编辑文件中,如何存盘、离开、存盘后离开、强制存盘后离开?
解:分别为:w,:q,:wq,:wq!

15.在vi下面做了很多的编辑操作之后,却想还原成原来的文件内容,应该怎么进行?
解:c!

16.我在vi这个程序当中,不想离开vi,但是想执行ls/home这个命令,vi有什么额外的功能可以达到这个目的?
解:[Ctrl]+Z或:! ls /home


第十章 认识与学习BASH
1.在Linux上可以找到哪些shell(举出三个)?哪个文件记录可用的shell是什么?而Linux默认的shell是什么?
解:/bin/bash、/bin/ksh、/bin/csh;/etc/shells;/bin/bash。

2.你输入一串命令之后,发现前面写的一长串数据是错的,你想要删除光标所在处到最前面的命令串内容,应该如何处理?
解:按下[ctrl]+u,即可从光标处向前删除命令串。

3.在shell环境下,有个提示符(prompt),它可以修改吗?要改什么?默认的提示符内容是什么?
解:命令提示符可以通过环境变量PS1来修改,改环境变量的内容即可,默认的提示符内容是[\u@\h\W]$。

4.如何显示HOME这个环境变量?
解:echo $HOME。

5.如何得知目前的所有变量与环境变量的设置值?
解:set显示目前所有的变量(包括环境变量),env显示目前所有环境变量的值。

6.我是否可以设置一个变量名称为3myhome?
解:不可以,变量名称的开头不能为数字。

7.在这样的练习中:【A=B】且【B=C】,若我执行“unset$A”,则取消的变量是A还是B?

解:取消的变量是B。因为$A的指向为B,若想取消变量A,命令应为unset A。

8.如何取消变量与命令别名的内容?
解:unset取消变量,unalias取消命令别名。

9.如何设置一个变量名称为name内容为It’s my name?
解:name=“It’s\ my\ name”

10.bash环境配置文件主要分为哪两种类型的读取?分别读取哪些重要文件?
解:login:主要读取/etc/profile及/bash_profile;non-login:主要读取/bashrc

11.CentOS 7.x的man page的路径配置文件是什么?
解:/etc/main.config

12.试说明【’】、【"】、与【’】这些符号在变量定义中的用途。
解:变量定义用["]或[’]括起来,但["]仍然可以保有变量的内容,而[’]内仅能是一般字符,而不会有特殊符号;至于[‘],在一串命令中,在`之内的命令将会被先执行,而其执行出来的结果将作为外部的输入信息。

13.转符号\有什么用途?
解:转义特殊字符(如空格、换行、$等)。

14.连续命令中,【;】、【&&】、【||】有何不同?
解:;为不考虑命令相关性的连续命令执行,&&为前一个命令正确执行才会执行下一个命令,||为前一个命令正确执行则不执行下一个命令,否则执行

15.如何将last的结果中,独立出账号,并且打印出曾经登录过的账号?
解:last | cut -d -f1 | sort | uniq

16.请问foo1 && foo2 | foo3 > foo4,这个命令串当中,foo1、foo2、foo3、foo4是命令还是文件?整串命令的意义是什么?
解:foo1、foo2、foo3都是命令,foo4是文件。整串命令的意义是当foo1正确执行时则执行foo2,否则不执行,然后foo2若没有正确执行则执行foo3,并将结果作为stdin输出到foo4中。

17.如何列出在/bin下面任何以a为开头的文件文件名的详细数据?
解:ls -l /bin/a*

18.如何显示/bin下面文件名为四个字符的文件?
解:ls -l /bin/???

19.如何显示/bin下面文件名开头不是a-d的文件?
解:ls -l /bin/[^a-d]*

20.我想要让终端的登录提示字符修改成我自己喜好的模样,应该要改哪里?
解:/etc/issue

21.承上题,如果我是想要让用户登录后,才显示欢迎信息,又应该要改哪里?
解:/etc/motd


第十一章 正则表达式与文件格式化处理
1.我想要知道,在/etc下面,只要含有XYZ三个字符的任何一个字符的那一行就列出来,要怎样进行?
解:grep [XYZ] /etc/*

2.将/etc/termcap内容取出后,去除开头为#的行、去除空白行、取出开头为英文字母的那几行以及最终统计总行数该如何进行?
解:grep -v ‘^#’ /etc/termcap | grep -v ‘^$’ | grep ‘^]]’ | wc -l


第十二章 学习shell脚本
1.请新建一个脚本,当你执行该脚本的时候,该脚本可以显示:(1)你目前的身份(用whoami);(2)你目前所在的目录(用pwd)。
解:

#!/bin/bash
echo -e "Your name is ==> $(whoami)"
echo -e "The current directory is ==> $(pwd)"

2.请自行编写一个程序,该程序可以用来计算【你还有几天可以过生日】?
解:

#!/bin/bash
read -p "Pleas input your birthday (MMDD, ex> 0709): " bir
now=`date +%m%d`
if [ "$bir" == "$now" ]; then
echo "Happy Birthday to you!!!"
elif [ "$bir" -gt "$now" ]; then
year=`date +%Y`
total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
echo "Your birthday will be $total_d later"
else
year=$((`date +%Y`+1))
total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
echo "Your birthday will be $total_d later"
fi

3.让用户输入一个数字,程序可以由1+2+3…一直累加到用户输入的数字为止
解:

#!/bin/bash
read -p "Please input an integer number: " number
i=0
s=0
while [ "$i" != "$number" ]
do
i=$(($i+1))
s=$(($s+$i))
done
echo "the result of '1+2+3+...$number' is ==> $s"

4.编写一个程序,它的作用是:(1)先查看一下/root/test/logical这个名称是否存在;(2)若不存在,则创建一个文件,使用touch来创建,创建完成后退出;(3)如果存在的话,判断该名称是否为文件,若为文件则将之删除后新建一个目录,目录名为logical,之后离开;(4)如果存在的话,而且该名称为目录,则删除此目录。
解:

#!/bin/bash
if [ ! -e logical ]; then
touch logical
echo "Just make a file logical"
exit 1
elif [ -e logical ] && [ -f logical ]; then
rm logical
mkdir logical
echo "remove file ==> logical"
echo "and make directory logical"
exit 1
elif [ -e logical ] && [ -d logical ]; then
rm -rf logical
echo "remove directory ==> logical"
exit 1
else
echo "Does here have anything?"
fi

5.我们知道/etc/passwd里面以:来分隔,第一栏为账号名称。请写一个程序,可以将/etc/passwd的第一列取出,而且每一列都以一行字符串【The 1 account is “root】来显示,那个1表示行数。
解:

#!/bin/bash
accounts=`cat /etc/passwd | cut -d':' -f1`
for account in $accounts
do
declare -i i=$i+1
echo "The $i account is \"$account\" "
done

第十三章 Linux账号管理与ACL权限设置
1.root的UID与GID是多少?而基于这个理由,我要让test这个账号具有root的权限,应该怎么做?
答:root的UID与GID都是0,UID只有0和非0两种,0代表系统管理员。所以要让test这个账号具有root的权限,只要把test的UID和GID都改为0即可

2.假设我是一个系统管理员,有一个用户最近不乖,所以我想暂时将他的账号停掉,让他近期无法进行任何操作,等到将来他乖顺一点之后,我再将他的账号启用,请问:我可以怎么做比较好?
答:有几种办法。一是将/etc/passwd的shell字段写成/sbin/nologin,即可以让该账号暂时无法登录主机;二是将/etc/shadow内的口令字段添加一个*号在最前面;三是将/etc/shadow的第八个字段关于账号取消日期的改成小于当前日期的数字

3.我在使用useradd的时候,新增的账号里面的UID与GID还有其他相关的密码管理,都是在哪几个文件里面设置的?
答:在/etc/login.defs还有/etc/default/useradd里面

4.我希望我在设置每个账号的时候(使用useradd),默认情况中,他们的家目录就含有一个名称为www的子目录,我应该怎么做比较好?
答:使用useradd的时候系统会自动以/etc/skel为默认home目录,所以在这个目录里新建一个名称为www的子目录即可

5.简单说明系统账号与一般用户账号的区别?
答:从UID来说,UID为1~499的就是系统账号,往后为一般用户账号。系统账号拥有的权限一般比一般用户账号大,系统账号可以调用某些系统资源

6.简单说明,为何CentOS新建用户时,它会主动帮用户新建一个用户组,而不是使用/etc/default/useradd的设置?
答:不同的Linux distributions对于user的group创建机制不同,主要有两种。一种是Public group schemes:用户将会直接得到一个系统指定的群组,一般来说是users;另一种是Private group schemes:系统会创建一个与账号相同的群组。CentOS就属于后者。

7.如何新建一个用户,名称alex,他所属用户组为alexgroup,预计使用csh,他的全名为“Alex Tsai”,且还得要加入users用户组当中?
答:groupadd alexgroup
useradd -c “Alex Tsai” -g alexgroup -G users -m alex
先创建群组再创建使用者

8.由于种种因素,导致你的用户家目录以后都需要被放置到/account这个目录下。请问,我该如何做,才可以在使用useradd时,默认的主文件夹就指向/account?
答:修改变量。编辑/etc/default/useradd,将HOME=/home改成HOME=/account即可。

9.我想要让dmtsai这个用户,加入vbird1,vbird2,vbird3这三个用户组,且不影响dmtsai原本已经支持的次要用户组,该如何操作?
答:usermod -a -G vbird1,vbird2,vbird3 dmtsai


第十四章 磁盘配额(Quota)与高级文件系统管理
1.在前一章的第一个大量新增账号范例中,如果我想要让每个用户均具有soft/hard各为40MB/50MB的容量时,应该如何修改这个shell脚本?
答:先将/home制作好quota的环境然后再do…done内的最后一行,新增一行内容为setquota -u $username 40000 50000 0 0 /home

2.如果我想要让RAID具有保护数据的功能,防止因为硬件损毁而导致数据的丢失,那我应该要选择的RAID等级可能有哪些(请以本章谈到的等级来思考即可)?
答:RAID-1,RAID-5,RAID-6

3.在默认的LVM设置中,请问LVM能否具有【备份】的功能?
答:snopshot快照功能可以进行数据备份

4.如果你的计算机主机有提供RAID 0的功能,你将你的三块硬盘全部在BIOS阶段使用RAID芯片整合成一块大硬盘,则此硬盘在Linux系统当中的文件名是什么?
答:/dev/sda


第十五章 计划任务(crontab)
1.今天假设我有一个命令程序,名称为ping.sh。我想要让系统每三分钟执行这个文件一次,但是偏偏这个文件会有很多的信息显示出来,所以我的root账号每天都会收到差不多四百多封的信件,光是收信就差不多快要疯掉了。那么请问应该怎么设置比较好呢?
答:按信件重要与否选择导入文件或丢弃。这样写:/3*** root /usr/local/ping.sh > /dev/null 2>&1

2.您预计要在2016年的2月14日寄出一封Email给kiki,只有该年才寄出,该如何执行命令?
答:at 1am 2016-02-14

3.执行crontab -e之后,如果输入这一行,代表什么意思?
** 15 ** 1-5 /usr/local/bin/tea_time.sh
答:在每星期的 1~5 ,下午 3 点的每分钟,共进行 60 次 /usr/local/bin/tea_time.sh 这个文件。 要特别注意的是,每个星期 1~5 的 3 点都会进行 60 次!很麻烦,是错误的写法,应该是要写成:
25 00 * * 0 root /usr/local/bin/backup.sh

4.请问,你的系统每天、每周、每个月各有进行什么工作?
答:以CentOS系统为例,默认的例行性命令都放置在 /etc/cron.* 里面,所以,你可以自行去: /etc/cron.daily/, /etc/cron.week/, /etc/cron.monthly/

5.每个星期六凌晨三点去系统查找一下含有SUID/SGID的任何文件,并将结果输出到/rmp/uidgid.files中。
答:vi /etc/crontab


第十六章 进程管理与SELinux初探
1.简单说明什么是程序(program)而什么是进程(process)?
答:程序 (program) 是系统上面可以被运行的文件,由于Linux的完整文件路径 (由 / 写起) 仅能有一个, 所以 program 的档名具有单一性。当程序被运行后,就会启动成程序 (process), 一个 program 可以被不同的使用者或者相同的使用者重复的运行成为多个程序, 且该程序所造成的程序还因为不同的使用者,而有不同的权限,且每个 process 几乎都是独立的

2.我今天想要查询/etc/crontab与crontab这个进程的用法与写法,请问我该如何在线查询?
答:查询/etc/crontab可以用man 5 crontab,查询crontab可以用man crontab或info crontab

3.我要如何查询crond这个daemon的PID与它的PRI值?
答:ps aux | grep crond

4.我要如何修改crond这个PID的优先执行顺序?
答:先以 ps aux 找到 crond 的 PID 后,再以renice -n number PID来调整

5.我是一般身份用户,我是否可以调整不属于我的程序的nice值?此外,如果我调整了我自己的进程的nice值到10,是否可以将它调回5呢?
答:不可以。因为一般身份使用者仅能调整属于自己的 PID 程序,并且,只能将 nice 值调高,不能调低,所以调整为10之后,就不能降回5

6.我要怎么知道我的网卡在启动的过程中有没有被识别?
答:用dmesg来观察


第十七章 认识系统服务(daemon)
1.使用netstat -ful与netstat -tunl有什么差异?为何会这样?
答:使用 n 时, netstat 就不会使用主机名与服务名称 (hostname & service_name) 来显示, 取而代之的则是以 IP 及 port number 来显示的。IP 的分析与 /etc/hosts 及 /etc/resolv.conf 有关, 这个在未来服务器篇才会提到。至于 port number 则与 /etc/services 有关

2.你能否找出来,启动3306这个端口的服务是什么?
答:透过搜寻 /etc/services 内容,得到 port 3306 为 mysql 所启动的端口。利用搜索引擎搜索, 可得到 mysql 为一种网络数据库系统软件。

3.你可以通过哪些命令查询到目前系统默认开机会启动的服务?
答:用chkconfig或ntsysv都可以

4.承上,那么哪些服务【目前】是在启动的状态?
答:可以透过 service --status-all,或者是透过 netstat -anl 等方式。也可以透过 pstree 去查询。 只是相关对应的服务daemon就得要个别查询了


第十八章 认识与分析日志文件
1.如果你想要将auth这个服务的日志中,只要信息等级高于warn就发送邮件l到root的信箱,该如何完成?
答:利用 vim 去编辑 /etc/syslog.conf 文件,内容为auth.warn root

2.启动系统日志信息时,需要启动哪两个daemon?
答:syslogd 记录系统软件, klogd 记录核心资讯

3.rsyslogd以及logrotate通过什么机制来执行?
答:syslogd 为 stand alone daemon 的机制; logrotate 则是透过 crontab 来运行的,只是个命令而已


第十九章 启动流程、模块管理与Loader
1.万一不幸,我的一些模块没有办法让Linux的内核识别,但是偏偏这个内核明明就有支持该模块,我要让该模块在启动的时候就被加载,那么应该写入哪个文件?
答:应该写入 /etc/modprobe.conf (kernel 2.6.x)或者是/etc/modules.conf (kernel 2.4.x)这个文件,他是模块加载相关的地方。也可以写入/etc/sysconfig/modules/*里面。

2.如果你不小心先安装Linux再安装Windows导致boot loader无法找到Linux的启动菜单,该如何挽救?
答:1.借助第三方软件安装类似于spfdisk的软件到MBR里面。
2.使用类似 KNOPPIX 的Live CD以光盘启动进入Linux之后,再以chroot软件切换根目录 (/),然后重新安装grub等boot loader


第二十章 基础系统设置与备份策略
1.如果你想要知道整个系统的周边硬件设备,可以使用哪个命令查询?
答:lspci

2.承上题,那么如果单纯只想要知道USB设备呢?又该如何查询?
答:lsusb

3.如果你的网络设置妥当了,但是却老是发现网络不通,你觉得应该如何进行测试?
答:(1)先检查硬件,每个环节 (网卡、hub/switch、路由器等) 的灯号是否有亮?有亮再进行下个动作;
(2)使用 ifconfig 检查 IP 与 netmask 的数据是否正确,若正确才可进行下一步;
(3)使用 route 看看 default gateway 是否正确,若正确再进行下一步;
(4)使用 ping -c 3 [gateway IP] ,若有回应才进行下一步;
(5)使用 ping -c 3 [外部IP,例如 168.95.1.1] ,若有回应则 IP 正常,若无回应,请检查 gateway 的配置
(6)使用 dig www.google.com 看看能否找到 IP ,找不到则请检查 /etc/resolv.conf 的配置


第二十一章 基础系统设置与备份策略
答案暂缺(以后若找到会补上)


第二十二章 软件安装PRM、SPRM与YUM
1.如果你曾经修改过yum设置文件内的容器设置(/etc/yum.repos.d/*.repo),导致下次使用yum进行安装时老是发现错误,此时你该如何是好?
答:先确认你的配置文件确实是正确的,如果没问题,可以将 yum 的缓存清除,使用『yum clean all』即可。 事实上, yum 的所有缓存、下载软件、下载软件的表头数据,都放置于/var/cache/yum/ 目录下

2.简单说明RPM与SRPM的异同
答:RPM 文件是由程序打包者 (通常是由 distribution 的开发商) 藉由程序的原始码,在特定的平台上面所编译成功的 binary program 的数据,并将该数据制作成为 RPM 的格式,以方便相同软、硬件平台的使用者之安装使用。 在安装时显的很简单,因为程序打包者的平台与使用者所使用的平台默认为相同。至於SRPM则是借由与 RPM 相同的配置档数据,不过将原始码直接包在 SRPM 文件当中,而不经过编译。 因为 SRPM 所内含的数据为原始码,所以安装时必须要再经过编译的行为才能成为RPM并提供使用者安装

3.假设我想要安装一个软件,例如pkgname.i386.rpm,但却总是发生无法安装的问题,请问我可以加入哪些参数来强制安装它?
答:可以加入 --nodeps 等参数。例如 rpm -ivh --nodeps pkgname.i386.rpm

4.承上题,你认为强制安装之后该软件是否可以正常执行?为什么?
答:一般来说,应该是不能运行的,因为该软件具有相依属性的问题,某些时刻该软件的程序可能需要呼叫外部的函数库,但函数库可能未安装,因此当然无法运行成功

5.请问我使用 rpm -Fvh *.rpm 及 rpm -Uvh *.rpm 来升级时,两者有何不同?
答:-Uvh 后面接的软件,如果原本未安装,则直接安装,原本已安装时,则直接升级;
-Fvh 后面接的软件,如果原本未安装,则不安装,原本已安装时,则直接升级;

6.假设有一个厂商推出软件时,自行处理了数码签章,你想要安装他们的软件所以需要使用数码签章,假设数码签章的档名为 signe, 那你该如何安装?
答:rpm --import signe

7.承上,假设该软件厂商提供了 yum 的安装网址为: http://their.server.name/path/ ,那你该如何处理 yum 的配置档?
答:自己取个文件名扩展名为.repo,然后修改配置文件即可


第二十三章 软件安装PRM、SPRM与YUM
1.在X设置没问题的情况下,你在Linux主机如何获取X窗口接口?
答:如果是在 run level 3 ,可以使用 startx 进入,如果是 run level 5 ,则直接进入 tty7 即可使用 display manager 登陆 X Window 系统。

2.利用startx可以在multi-user.target的环境下进入X Window系统。请问startx的主要功能是什么?
答:整个 X 窗口系统的重点在启动 X server 并加载 X client ,而运行 X server/X client 呼叫的任务为 xinit ,startx 只是一个较为亲和的脚本程序,可以搜寻系统上面的 X server / X client 配置值, 以提供 xinit 来运行而已

3.如何知道你系统当中X系统的版本等信息?
答:以root身份执行X -version命令

4.要了解为何X系统可以允许不同硬件、主机、操作系统之间的通信,需要知道X Server与X Client的相关知识。请问X Server、X client、窗口管理器的主要用途功能是什么?
答:X Server 主要负责荧幕的绘制,以及周边输入装置如鼠标、键盘等数据的收集,并反馈给 X Client ; X Client 主要负责数据的运算,收到来自 X Server 的数据后,加以运算得到图形的数据,并回传给 X Server, 让 X server 自行绘制图形。Window manager 是一个比较特殊的 X Client ,他可以管理更多控制元素, 最重要的地方还是在于窗口的大小、重叠、移动等等的功能

5.如何重新启动X?
答:在X Window下按下组合键[Alt]+[Ctrl]+[Backspace]

6.试说明 ~/.xinitrc 这个文件的用途?
答:当我们要启动 X 时,必须要启动 X Client 软件端。这个 ~/.xinitrc 即是在可视化自己的 X Client , 你可以在这个文件内输入你自己的 X Client 。若无此文件,则默认以 /etc/X11/xinit/xinitrc 替代

7.我在 CentOS 的系统中,默认使用 GNOME 登陆 X 。但我想要改以 KDE 登陆,该怎么办?
答:修改/etc/sysconfig/desktopn内的配置值

8.X Server的默认端口是什么?
答:port 6000

9.Linux主机是否可以有两个以上的X?
答:可以,从tty7开始每个终端可以放一个

10.X Server的设置文件是xorg.conf,在该文件中,Section Files干嘛用的?
答:配置显示字型用的

11.我发现我的X系统键盘总是打不出我所需要的字母,可能原因是什么?该如何修改?
答:键盘符号对应表问题,修改xorg.conf文件内关于Keyboard的Option XkbLayout项目,修改为us即可

12.当我的系统内有安装了GNOME及KDE两个X的窗口管理器,我原本是以KDE为默认的WM,若想改为GNOME时,应该如何修改?
答:修改 /etc/sysconfig/desktop


第二十四章 Linux内核编译与管理
1.简单说明内核编译的步骤
答:先下载内核源码,再用Tarball解码到/usr/src/kernels目录下;执行make mrproper命令删除旧数据;配置内核,可以根据需要选择“make config”、“make menuconfig”、“make xconfig”、“make oldconfig”等;清除过去的缓存文件make clean;开始核心问价与核心模块的编译make bzImage或make modules;安装核心模块make modules_install;安装核心文件make install;创建initrd文件;修改 /boot/grub/menu.lst 文件

2.如果你利用新编译的内核来运行系统,发现系统并不稳定,你想要删除这个自行编译的内核,该如何处理?
答:首先,将源码删除:rm -rf /usr/src/kernels/linux-2.6.30
再者,删除掉核心模块的目录: rm -rf /lib/modules/2.6.30
最后删除掉 /boot/ 内的核心文件与 initrd 文件,以及 /boot/grub/menu.lst 内的 title 配置即可

猜你喜欢

转载自blog.csdn.net/qq_41151659/article/details/94491657