Linux系统管理初学者指南——基于CentOS 7.6 思考与练习题
第一章
1.上网在询以了解BSD、GPL和Apache术语分别是指什么。
- BSD(Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统,在1977至1995年间由加州大学伯克利分校开发和发布的。历史上, BSD曾经被认为是UNIX的一支——“BSD UNIX”, 因为它和AT&T UNIX操作系统共享基础代码和设计。在20世纪80年代,衍生出了许多变形的UNIX授权软件。比较著名的如DEC的Ultrix及Sun公司的SunOS。1990年代,BSD很大程度上被System V4.x版以及OSF/1系统所取代,晚期BSD版本为几个开源软件开发提供了平台并且一直沿用。“BSD”并不特指任何一个BSD衍生版本,而是类UNIX操作系统中的一个分支的总称。
- GNU通用公共许可证(简称GPL),是由自由软件基金会发行的用于计算机软件的协议证书,使用该证书的软件被称为自由软件。大多数的GNU程序和超过半数的自由软件使用它。 下面的正文是自由软件基金会GNU通用公共许可证原始文档的副本。Linux操作系统以及与它有关的大量软件是在GPL的推动下开发和发布的。你将看到:如果你打算为了发布的目的修改,更新或改进任何受通用公共许可证约束的软件,你所修改的软件同样必须受到GNU通用许可证条款的约束。
- Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
2.Linux发行版目前主要分为哪几个阵营?简述它们各自的主要特点。
- Redhat Linux(RHEL):具有跨平台的兼容性;支撑10年以上升级和技术支持的生命周期;拥有强大的资源管理系统,稳定的应用开发,集成的虚拟化操作(KVM),企业级的管理性能;是一个商业的操作系统。
- CentOS:一个社区企业级操作系统,也一个免费且开源的发行版,无技术支持;CentOS具有非常好的社区支持,并有大量丰富的文档;当RedHat发布任何更新时,CentOS也会同步更新,一般更新能够在72小时内提供。
- Debian:Debian 是迄今为止,最遵循GNU规范的Linux系统。dpkg是Debian系列特有的软件包管理工具,它被誉为所有Linux软件包管理工具(比如RPM) 最强大的;配合apt-get,在Debian上安装、升级、删除和管理软件变得异常容易;Debian具有优秀的网络和社区资源,强大的apt- get,许多发行版都是基于Debian的,最有影响力的发行版之一;不过Debian安装相对不易,stable分支的软件极度过时,不适于新手使用。
- SUSE:一个非常好的桌面操作系统,它拥有其它付费操作系统的所有功能;它基于开源平台,安全、稳定,并且由Novel提供企业级的系统支持;是目前最流行的可交互操作系统,它是为与Windows,UNIX,MAC和其它操作系统交互共存而设计;它支持各类文件格式,如MS Office格式,音频/视频格式等。
3.安装VMware Wrkstation,新建台虚拟机, 并安装一款Linux操作系统。
4.熟悉进人Linux字符界面的不同方式,并练习关机和重启命令的使用。
- 进入Linux字符界面的不同方式
一、系统不在虚拟机中的情况
使用Ctrl+Alt+F1~6
切换到命令行界面;Ctrl+Alt+F7
切换到图形界面。
二、系统在虚拟机中的情况
Ctrl+Alt+Shift+F1~6
切换到命令行界面;使用Alt+F7
返回到图形界面。
(以上方法切换后,图形界面并没有关闭)
三、命令模式修改
打开终端:
输入:init 3
进入命令行界面
输入:init 5
进入图形界面
init 0~6 数字的含义:
0 - halt (Do NOT set initdefault to this) // 停机(千万不要把initdefault设置为零为0,因为这样会使Linux无法启动)
1 - Single user mode // 单用户模式,像WinXP下的安全模式,只能root用户进行维护。
2 - Multiuser, without NFS (The same as 3, if you do not have networking) // 多用户,但没有NFS。
3 - Full multiuser mode // 完全多用户模式,标准的运行极,即命令行界面。
4 - unused // 一般不用,但在一些特殊情况下可以用他来做一些事情。
5 - X11 // 选择此项,系统在登录时将进入图形化登录界面。
6 - reboot // 重新启动(不要把initdefault设置为6,因为这样会使Linux不断重新启动)
- 关机、重启
关机:
halt/fasthalt
poweroff
shutdown -h now
shutdown -h +15 :15min后关机
重启:
reboot
shutdown -r now
shutdown -r +10 'The system will be rebooted!' :10min后重启并提示
取消延时关机、重启操作:
shutdown -c
Ctrl+C
5.以root用户身份登录Linux系统字符界面,指出CentOS 7中默认使用的是什么Shell?
默认的Shell命令提示符为“[root@localhost ~]#”,指出命令提示符中各部分的具体含义。
Bash
(GNU Bourne-Again Shell)是许多Linux发行版的默认Shell。
“[root@localhost ~]#
”中root
指当前登录的用户账户名;localhost
指本机的主机名;~
指用户当前所在位置,泛指用户的家目录;#
指当前登录的是管理员用户,$
指当前登录的是普通用户。
第二章
1.分别说明根目录下常见的子目录/root、/etc、/dev、/var、/home、/bin和/sbin的作用。
- /boot:存放Linux系统启动所必需的文件,Kernel 被存放在这个目录中。
- /etc:存放Linux系统和各种程序的配置文件,Linux 中的很多操作和配置都是通过修改配置文件实现的。/etc 目录的作用类似于Windows系统中的注册表。
- /dev:存放Linux系统中的硬盘、光驱和鼠标等硬件设备文件。
- /bin:存放Linux系统中常用的基本命令,任何用户都有权限执行。
- /sbin:存放Linux系统基本的管理命令,只有管理员权限才可以执行。
- /usr:软件的默认安装位置,类似于Windows中的Progrm Files目录。
- /home:普通用户家目录(也称为主目录)。例如,用户账号sudeor 对应的家目录位于“home/student”。
- /root:超级用户roo的家目录。
- /mnt:一般是空的,用来临时挂载存储设备。
- /medi:用于系统自动挂载可移动存储设备。
- /mp:临时目录,用于存放系统或程序运行时产生的一些临时文件,可供所有用户执行写人操作。
- /var:存放系统运行过程中经常变化的文件,如/var/log用于存放日志文件、/var/spool/mail用于存放邮件等。
- /lib、/lib64:存放各种链接库文件。链接库也是一种进制文件, 只不过没有独立的执行入口,而只能被其他程序所调用。
- /proc:基于内存的虚拟文件系统,用于存储系统内核和进程的相关信息。
- /run:用于存放进程产生的临时文件,系统重启后会消失。
- /lost+found:存放系统意外崩溃或关机时产生的文件碎片。
2.切换工作目录到 /usr/src,并执行命令查看当前所在的目录。
cd
:切换工作目录
pwd
:查看当前所处位置
3.当前所在的工作目录是 /usr/src,切换工作目录到当前目录的上一级目录。
用于表示路径的特殊符号:
.
:当前目录
..
:当前目录的上一级目录(父目录)
4.将工作目录切换到当前用户的家目录。
5.查看 /dev 目录中所有文件的详细信息(包含隐藏文件),在Linux系统中,隐藏文件的标识是什么?在显示的文件详细信息中,第一组数的第1个字符代表文件类别,“-”、“d”、“l”、“c”、“b”分别代表的是哪种类别的文件?
-a
:显示所有文件,包括隐藏文件
-l
:以长格式(内容更详细)显示文件或目录的详细信息
以“.
”开头的是隐藏文件或隐藏目录。
第1组,“-
” 代表普通文件;“d
” 代表目录;“l
” 代表符号链接;“c
” 代表字符设备;“b
” 代表块设备。
第2组,被硬链接的次数,文件默认为1,目录默认为2。
第3组,文件所有者。
第4组,文件所属组。
第5组,文件大小(单位为字节)。需要注意的是,对于目录,这里只显示目录本身的大小,而不包括目录中的文件以及下级子目录的大小。
第6组,文件被创建或最近一次被修改的时间。
第7组,文件名。
6.以长格式显示 /ect/inittab 文件的详细信息。
7.在 root 用户的家目录中创建一 个名为 test1 的目录。
8.在 /root/test1 目录中创建一个名为 temp1 的空文件。
9.复制文件 /root/test1/temp1 进行备份,仍然保存在 /root/test1/ 目录下,备份的文件名为 temp1.bak。
10.将文件 /root/test1/temp1.bak 移动到 /tmp/ 目录下,并改名为 temp.bak。
11.将 /root/test1/ 目录强制删除。
12.以长格式显示 /etc 目录本身的详细信息。
13.查看操作系统的版本信息。
14.将/ etc 目录中所有以 “.d” 结尾的文件或目录复制到 /tmp 目录。
15.将 /etc 目录中所有以 .conf 结尾并且以 m、n、r 或 p 开头的文件或目录复制到 /tmp 目录。
16.显示 /etc 目录中所有以 “pa” 开头的文件,如果它是目录,则只显示目录本身。
17.显示 /dev 目录中所有以 “d” “f” 开头并且文件名为3个字符的文件。
18.查看文件 /etc/passwd 的内容,并显示行号。
19.分别用 more、less 命令分屏查看 /etc/passwd 文件的内容。
less
命令使用:q
退出阅读。
20.查 /etc/passwd 文件的前10行内容,并将结果保存到 /tmp/1.txt 文件中。
21.查看 /etc/passwd 文件的后5行内容,并将结果保存到 /tmp/2.txt 文件中。
22.统计 /etc 目录中扩展名是 “*.conf” 的文件的个数。
find
从起始目录递归的查找目录下的所有子目录
ls
查看当前目录下的文件
23.查找 /etc 目录下以 net 开头的文件,将结果保存到 /tmp/net.file 文件中。
24.在 /boot 目录中查找大小超过1024KB且文件名以 “init" 开头的文件。
25.在 /etc/passwd 文件中查找包含 “root” 字符串的行。
26.查找 /ect/profile 文件中所有不以 “#” 开头并且不是空白的行。
单双引号都可以:grep -v "^#\|^$" /etc/profile
27.查看系统中已经设置的别名命令。
28.创建名为 wcl 的命令别名,统记 /etc/profile 文件中不以 # 开头且不是空白行的行数。
理解一:
alias wcl='grep -v "^#\|^$" /etc/profile | wc -l'
wcl
理解二:
29.找到find命令的命令文件路径。
which find
30.查看 find 命令的简要帮助信息。
31.查看grep命令的帮助手册。
men grep
32.查看历史命令。
33.查找 /etc/passwd 文件中所有以 “nologin" 结尾的行。
34.假设存在3个目录: /tmp/a 、 /tmp/b 和 /tmp/c ,要求用一条命令强制删除这3个目录。
方法一:
方法二:
35.查找/etc 目录下大于 1MB 且类型为普通文件的所有文件。
36.在 /tmp 目录中创建一个名 为 hi.txt 的文件,文件内容为 “Hello World” 。
方法一:
方法二:
37.将执行 “ find / -user student" 命令时产生的错误信息重定向到 /dev/null 文件中。
38.如何查看系统时钟与硬件时钟?
39.以 “年/月/日 时:分:秒” 的形式显示当前日期和时间,如 “2018/05/26 15:02:48” 。
Y年 y年 m月 d日 H时 M分 S秒
40.某台Linux服务器疑似正在遭受黑客攻击,作为管理员的你需要实时观察系统日志文件 /var/log/messages中的最新内容,该如何用命令实现?
Ctrl+C终止
41.在 /etc 目录中查找最近1天之内被改动过的文件。
42.从 /tmp 目录及其子目录中找出扩展名为 .txt 的文件,并将之删除。
方法一:find /tmp -name "*.txt" -type f | xargs rm -rf
# 利用管道作为参数删除
方法二:find /tmp -name "*.txt" -type f -exec rm -rf {} ;
# ; 不能少, 前面空格不能少
方法三:rm -rf $(find /tmp -name "*.txt" -type f)
# 查找结果直接以变量 删除
方法四:rm -rf 'find /tmp -name "*.txt" -type f'
# 同上做变量 删除
第三章
1.Linux 中的用户管理主要涉及用户账号文件/ect/passwd、用户密码文件/ect/shadow、用户组文件/ect/group 和/ect/gshadow。
2.通过id命令查看 student 用户的身份信息,并将命令执行后的信息全部重定向到黑洞文件中。
如果没有student
用户,需要先添加:useradd student
3.显示系统中用户账号的个数。
4.将 student 用户的家目录复制到 /tmp 目录中,并保持源文件的属性不变。
tail命令可查看student用户的家目录位置
cp命令中复制目录为r,保持源文件属性不变为p
ls命令查看是否复制目录成功
5.创建一个名为 financial 的组。
6.创建一个名为 test1 的用户,指定其 UID 为 1600, 将 financial 组设置为 test1 用户的基本组。
7.通过非交互方式为用户test1 设置密码 123。
8.另外打开一个终端,以 test1 用户的身份登录系统。在 test1 的家目录中创建一个名为 test1.txt 的文件,并查看 test1.txt 文件的权限设置。
9.首先对文件 test1.txt 进行权限设置,要求文件所有者具有读写权限,所属组和其他用户具有只读权限。然后,使 test1用户退出登录。
方法一:
方法二:
读4
写2
执行1
文件所有者4+2=6
、文件所属组4
、其他用户4
===> 644
10.将 test1 用户锁定,禁止其登录。再次打开一个终端,尝试能否以 test1 用户的身份登录。
此处test2
应改为test1
11.将 test1 用户解锁,在终端中尝试能否以 test1 用户的身份登录。
12.将用户 test1 家目录中的 test1.txt 文件的所有者改为 root,所属组改为 users。
13.将 test1 用户连同家目录一并删除。
14.创建用户 test2,要求没有家目录,并且禁止其登录。
15.创建用户test3,并指定其家目录为 /test3。
16.将 test3 用户加入 root 组,使 root 组成为其附加组。
17.将用户 test3 的基本组修改为 users 。
18.将用户 test3 的家目录 /test3 移动到 /home 目录中,然后将其家目录改为 /home/test3 。
19.当用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容? 能否删除此文件?
答:没有写权限时,不可以修改文件内容,但可以删除文件。
20.Linux文件的权限位 x 对目录和文件有何不同?
答:
- 拥有目录的x权限表示用户可以进入该目录成为工作目录,能不能进入一个目录,只与该目录的x权限有关,如果用户对于某个目录不具有x权限,则无法切换到该目录下,也就无法执行该目录下的任何命令,即使具有该目录的r权限。且如果用户对于某目录不具有x权限,则该用户不能查询该目录下的文件的内容,如果有r 权限是可以查看该目录下的文件名列表或子目录列表的。所以要开放目录给任何人浏览时,应该至少要给与r及x权限。
- x权限表示该文件具有可以被系统执行的权限。文件是否能被执行就是由该权限来决定的,跟文件名没有绝对的关系。
- 对文件来说,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。
21.新建目录 /tmp/mike,并设置如下权限。
● 将此目录的所有者设置为 mike,并设置读、写和执行权限。
● 将此目录的所属组设置为 sales,并设置读和执行权限。
● 其他用户没有任何权限。
22.创建 /var/test 目录,要求在此目录中任何用户都可以创建文件或目录,但只有用户自身和 root 用户可以删除用户所创建的文件或目录。
方法一:
23.新建一个名为 manager 的用户组,创建两个用户账号: natasha 和 harry,并将 manager 组设为这两个用户的附加组。复制文件 /etc/fstab 到 /var/tmp 目录中,对文件 /var/tmp/fstab 进行权限设置。
● 添加 ACL 条目,使 manager 组具有读取权限。
● 添加 ACL 条目,使用户 harry 具有读写权限。
● 添加 ACL 条目,使用户 natasha 没有任何权限。
● 删除 manager 组的 ACL 条目。
● 删除所有附加的 ACL 条目。
24.假设 /var/test 目录的所属组是 users,要求对 /var/test 目录进行权限设置,使得任何用户在该目录中所创建的文件或子目录的所属组都自动使用 users 组。
chown -R :users /var/test
:修改目前该目录下的文件,随后添加的文件不做递归修改。
chmod g+s /var/test
:不修改已有的文件,随后添加的文件被指定所属组。
25.假设普通用户 student 已经被授权,要求以该用户身份将系统的IP地址修改为 192.168.80.10/24。
授权普通用户student
用户可以通过sudo
命令方式执行所有命令:
切换至已被授权的student
用户后
有则修改,无则添加:
26.为 /etc/passwd 文件添加只读属性。
lsattr
:用于显示文件的属性
27.将/var/log/messages 文件设置为只能向其中追加写入数据,但不能删除原有数据。
28.在系统中查找所有人都有写权限的目录。
第四章
新复制一台虚拟机,并为虚拟机添加 4 块容量为 20GB 的 SCSI 硬盘。
1.将系统中的第二块硬盘分成 3 个分区: 1 个主分区、两个逻辑分区。主分区的大小为 10GB,第一个逻辑分区的大小为 2GB,剩余空间全部分配给第二个逻辑分区。
无可用分区,则使用d
删除,随后进行主分区,分区结束后p
命令查看创建好的分区/dev/sdb1
:
内核未识别出新分区,使用partprobe
指令强制系统加载:
出现sdb1``sdb4``sdb5``sdb6
则为分区成功
2.依次对第二块硬盘的 3 个分区进行格式化,文件系统类型采用 XFS。
3.将第二块硬盘的 3 个分区分别挂载到 /mnt/data、/mnt/music、 /mnt/movie 目录。
4.将挂载在 /mnt/data 目录上的硬盘分区设置为永久挂载。
5.在挂载点 /mnt/data 上启用磁盘配额管理功能。
6.限制用户 zhangsan 只能上传 100MB 数据和 20 个文件。
7.将第三块和第四块硬盘转换为物理卷。
8.利用这两个物理卷创建名为 web 的卷组。
9.在 web 卷组中创建一 个大小为 30GB、 名为 pic 的逻辑卷。
10.将逻辑卷 pic 格式化为 EXT4 文件系统。
11.新建目录 “/var/web/pic",并将逻辑卷 pic 挂载到该目录中。
12.将第五块硬盘转换为物理卷,并将其加入 web 卷组中。
13.将逻辑卷 pic 的容量扩展到 40GB。
第五章
1.用 gzip 方式将 /var 目录打包并压缩成文件 var.tar.gz,保存在 /root/test 目录下。
2.用 bzip2 方式将 /var 目录打包并压缩成文件 var.tar.bz2,保存在 /root/test 目录下。
3.查看 /var 目录所占用的磁盘空间大小。
4.查看文件 var.tar.gz 和 var.tar.bz2 的大小。
5.在 /root/test 目录中创建一个名为 var1 的目录。
6.将文件 var.tar.gz 解压到 /root/test/var1 目录中。
7.在 /root/test 目录中创建个名为 var2 的目录。
8.将文件 var.tar.bz2 解压到 /root/test/var2 目录中。
9.检查系统中是否已经安装了 DHCP 服务。
10.依次写出源码安装所需要的 3 个命令。
./configure
make
make install
11.统计系统中已经安装的 RPM 软件包的个数。
12.配置一个名为 dvd.repo 的YUM源文件,将光盘定义为 YUM 源。
13.清除YUM缓存。
第六章
选择题
A:就绪态、运行态、阻塞态
操作题
1.分屏查看当前系统中所有进程的详细信息。
2.查看静态的所有进程统计信息,过滤包含bash的进程信息。
3.查看进程的动态信息,了解前3个进程的PID、CPU及内存等系统资源占用情况。
按q
退出
4.将/var目录复制到/tmp目录,要求在后台执行该命令。
5.利用Vi编辑器编辑/etc/inittab文件,程序运行之后,将其转入后台执行。
Ctrl+Z
将进程转入后台
6.查看当前终端中在后台运行的进程,并显示其PID。
7.强制终止Vi编辑器进程。
8.设置Linux 系统每次开机后自动进入字符模式界面。
9.对比图形模式与字符模式对内存的占用情况。
init 5
命令切换至图形模式:
init 3
切换至字符模式:
对比情况:字符模式的内存占比明显比图形模式低。
10.编辑计划任务,每天22:30查看内存使用情况,并将结果追加保存到/var/log/mem.log文件中。
11.编辑计划任务,每周二、周四和周日备份/var/log/messages文件至/tmp目录中,文件名称格式为“messages-yyyymmdd”。
12.编辑计划任务,在11月份的每天6:00~ 12:00,每隔2h执行一次/usr/bin/httpd.sh脚本文件。
crontab -e
第七章
1.在Shell中如何检测上一 条命令是否成功执行?
$?
:用于检查上一条命令的执行状态,$?
的值为0
时上一条命令正确执行;值为1
时未能正确执行。
2.在/tmp目录中为/etc/passwd文件创建一个备份, 备份文件名格式为“/etc/passwd.bak.系统当前日期”,要求自动将系统当前日期替换到文件名的指定位置。
3.查找系统中UID值最大的用户的以下信息:用户名、UID、Shel类型。
cat
查看文件内容
cut
按列截取文件内容
sort
对文本信息进行排序
4.删除/etc/passwd文件的第15行。
5.将/etc/passwd文件中的root替换为admin。
6.删除/etc/passwd文件中第5-10行中所有的数字。
sed '5,10$s/[0-9]\+\\gp' /etc/passwd
不删除源文件,只影响输出。
7.在/etc/passwd文件的第1行之前插人新行"I love Linux"。
8.思考如何在不使用cat、more、less、head和tail等命令的前提下,输出/etc/passwd文件的内容。要求至少写出两种方法。
方法一:
方法二:
方法三:
方法四:
方法五:
9.编写脚本程序用于监测系统服务httpd的运行状态,要求如下。
●当服务状态失常时,在“/var/log/htmon.log”文件中记入日志信息。
●自动将状态失常的httpd服务重新启动。
●结合crond计划任务服务, 每周一~周五每隔15min执行一次监测任务。
编写脚本文件:
执行脚本文件:
计划任务服务添加:
10.用while循环实现以下目标。
●创建10个用户,用户名格式为user_[0-9]。
●密码与用户名相同。
●所有用户都属于users组。
11.编写一个Shell 脚本,判断用户输入的IP地址是否正确。IP地址的规则是n1.n2.n3.n4,其中n1的取值区间为[1,255],n2和n3的取值区间为[0,255],n4的取值区向为[1, 254]。
12.编写一个脚本,在一个目录下的所有文件(不含目录)的文件名后面加上".bak"。
13.编写一个脚本,判断192.168.1.0/24网络中当前在线的主机有哪些(能ping通就认为在线)。
方法一:(速度慢)
方法二:(改进后)
14.假设在文件/root/ip.txt 里已经存放了大量不连续的IP地址,要求编写脚本对这此IP地址依次通过ping命令进行探测,并输出在线主机的IP地址。
ex.sh
/root/ip.txt