Linux系统管理命令与配置详解

内容分享3小时前发布
0 0 0

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;
}

51、如果你在之前的练习中创建了一个新分区,使用fsck命令检查它并观察输出。请说明对应的命令及该命令的作用。

命令为:

$ fsck -f /dev/partition

。该命令用于强制检查指定分区(

/dev/partition

需替换为实际分区名称)。


示例中强制检查

/dev/sda1

时,会依次进行以下操作:

检查 inode、块和大小

检查目录结构

检查目录连接性

检查引用计数

检查组摘要信息


并输出检查结果,如:

文件数量

块数量

非连续文件比例等信息

52、使用df命令检查文件系统状态:$ df -h 。a. -h标志如何帮助你解读结果?b. 如何判断文件系统是否接近满容量?c. 如何找出利用率较低的文件系统?

a.

-h

标志以人类可读的格式显示结果,包含如 M(兆字节)和 G(吉字节)这样的后缀,便于解读。

b. 查看文件系统的使用百分比,若接近 100% 则可认为接近满容量,示例中默认挂载的七个文件系统中,没有超过 55% 容量的,没有接近满容量的。

c. 查看文件系统的使用百分比,百分比数值较低的文件系统即为利用率较低的,示例中:

/dev/sda5

(2%)

/dev/sda9

(22%)

/dev/sda6

(23%)

/dev/sda10

(0%)

/dev/sda7

(3%)

这些文件系统利用率较低。

53、如何使用sort命令让命令输出更有用?

可以使用

sort

命令对输出进行排序,如使用

sort -nu

进行不区分大小写的数值排序。

例如,若要查看当前目录下文件的 inode 编号排序列表,可使用:


ls -i * | awk '{print $1}' | sort -nu | less

若要将结果保存到文件,可使用:


ls -i * | awk '{print $1}' | sort -nu > in.txt

54、复习 /etc/fstab 文件。确保你能说出所有六个字段及其顺序,并描述它们的功能。

以下是调整为 Markdown 格式的内容:

六个字段及其顺序和功能如下:


设备名(Device)

:指定要挂载的设备或远程文件系统,如磁盘分区、网络共享等。


挂载点(Mount point)

:指定设备挂载到文件系统的位置。


文件系统类型(Filesystem type)

:指定设备使用的文件系统类型,如 ext2、ext3、ext4、swap、iso9660、vfat、nfs 等。


挂载选项(Mount options)

:包含以逗号分隔的选项列表,部分选项特定于特定文件系统类型。


转储频率(Dump frequency)

:dump 程序(标准 Unix 备份实用程序)会参考此信息确定备份文件系统的频率,该字段为整数,本地 Linux 文件系统(如 ext2)通常设为 1,其他设为 0。


fsck 检查顺序(Pass number for fsck)

:fsck 实用程序在指定 -A 选项(通常在启动时)使用该字段,其值只能为 0、1 或 2。值为 1 表示根文件系统,fsck 会首先检查;值为 2 表示在值为 1 的文件系统检查后检查;值为 0 表示不检查该文件系统。

55、如果你在之前的练习中创建了一个新分区,先执行以下操作:创建挂载点并挂载该分区,然后查看挂载情况。操作命令如下:$ mkdir /mnt/new $ mount /dev/partition /mnt/new $ df /mnt/new 问题 a:文件系统是否正确挂载?你能在上面存储文件吗?接着,卸载该分区,执行命令:$ umount /dev/partition /mnt/new 最后,为新分区在 /etc/fstab 中添加一行:/dev/partition /mnt/new ext3 defaults 1 2 。

首先,执行创建挂载点、挂载分区和查看挂载情况的操作。要判断文件系统是否正确挂载,可依据

df /mnt/new

命令的输出:


若输出有关于 `/mnt/new` 的分区信息,则表明挂载成功。

若挂载成功,通常可以在该分区存储文件。

卸载分区时,

umount

命令使用有误,正确的用法是:


umount /dev/partition

或者


umount /mnt/new

最后,在

/etc/fstab

中添加指定的行后,下次系统启动时会自动挂载该分区。

56、通过为特定用户设置较低的配额来测试配额,然后以该用户身份开始添加文件,直到超出配额。超出配额的可观察到的后果是什么?

当磁盘写入超过硬限制或过期的软限制时,写入操作只有部分会完成,会留下一个被截断且可能无用的文件。如果用户使用的 shell 是隐藏的(例如,用户通过 Windows 系统的 SMB 共享写入磁盘),超出配额时报告给用户的消息可能会丢失,这会让用户感到困惑,因为应用程序生成的错误消息会表明磁盘已满或被写保护。

57、练习将以下文件模式从八进制转换为符号形式:a. 0777 b. 0754 c. 0666 d. 1700 e. 7777

a.

rwxrwxrwx


b.

rwxr-xr--


c.

rw-rw-rw-


d.

rwx------T


e. 由于7777中第一个7代表特殊权限组合无对应常规情况,超出常见范围,无法准确转换为标准符号形式。

58、以root身份创建临时文件,并使用chown修改用户所有权和组所有权。

可以按以下步骤操作:

创建临时文件,例如使用

touch

命令:

touch tempfile

修改用户所有权,使用

chown

第一个语法形式:

chown -v jdoe tempfile

修改用户和组所有权,使用

chown

第三个语法形式:

chown -v jdoe.sales tempfile

其中,

jdoe

是用户所有者,

sales

是组所有者,

tempfile

是临时文件。

59、使用chgrp命令修改临时文件的组所有权。

可以使用以下命令来实现:


chgrp [选项] 组所有者 临时文件列表

如果要递归修改目录下所有文件的组所有权,可使用

-R

选项;若要查看详细操作信息,可使用

-v

选项。

例如,递归且详细地将所有临时文件的组所有者修改为

sales


chgrp -Rv sales 临时文件目录

60、按如下方式创建一个临时文件和链接:$ touch a_file $ ln -s a_file an_slink $ ln a_file an_hlink 现在验证该文件和硬链接确实共享一个索引节点,并且符号链接指向原始文件,应该使用什么命令?

首先执行命令创建临时文件和链接:

创建一个名为

a_file

的文件。

使用

ln -s

命令创建指向

a_file

的符号链接

an_slink

使用

ln

命令创建指向

a_file

的硬链接

an_hlink

然后使用

ls -li

命令查看文件和链接的详细信息:


a_file


an_hlink

的索引节点编号(inode)相同,则说明它们共享一个索引节点;


an_slink

显示指向

a_file

,则说明符号链接指向原始文件。

61、访问 http://www.pathname.com/fhs/ 查看 FHS 的最新版本。

需访问指定网址查看 FHS 最新版本。

62、使用 which 命令检查可执行文件的位置。

使用

which

命令的语法为:


which command

它会确定命令的位置并显示 shell 为执行该命令而启动的可执行程序的完整路径名。

例如,要确定输入

tcsh

命令时会启动的 shell 的位置,可使用:


# which tcsh

其输出结果可能是:


/bin/tcsh

63、使用命令“$ find / -name bash”搜索“bash”文件,再用“$ locate bash”搜索同一文件。结果有何不同?描述每个命令在何种场景下有用。

结果差异


find

命令


会从根目录

/

开始递归搜索整个文件系统,查找名为

bash

的文件。

搜索时间长

能找到最新创建或重命名的文件


locate

命令


通过搜索预建数据库来查找文件。

速度快

如果数据库未及时更新,可能找不到最近创建或重命名的文件

使用场景


find



适用于以下场景:

需要精确查找最新文件

按文件属性(如日期、权限、文件类型等)查找文件

文件经常移动


locate



适用于以下场景:

快速查找文件名已知的文件

文件不常移动

64、设备名 /dev/hda 代表哪种硬件?A. 声卡 B. 调制解调器 C. IDE 硬盘 D. SCSI 硬盘 E. SATA 硬盘

C

65、要确定系统上是否存在IRQ冲突,应该查询哪个文件?a. /proc/ioports b. /proc/interrupts c. /proc/cpuinfo d. /proc/meminfo e. /proc/irqstatus

b

66、使用 #!/bin/bash 语法创建一个简单的 bash 脚本,设置可执行权限位并执行该脚本。如果运行正常,添加错误以查看诊断信息。让脚本报告已导出和未导出的变量。验证未导出的变量在新 shell 启动后不会保留。

以下是完成该任务的详细步骤:


创建简单的 bash 脚本



使用文本编辑器(如 vim 或 nano)创建一个新的脚本文件,例如

test_script.sh

,并在其中添加以下内容:

“`bash

#!/bin/bash

# 定义未导出的变量

non_exported_var=”This is a non-exported variable”

# 导出变量

export exported_var=”This is an exported variable”

# 打印已导出和未导出的变量

echo “Non-exported variable: $non_exported_var”

echo “Exported variable: $exported_var”

# 模拟一个错误,尝试访问不存在的文件

cat non_existent_file

“`


设置可执行权限位



在终端中,使用

chmod

命令为脚本添加可执行权限:

bash
chmod +x test_script.sh


执行脚本



运行脚本并观察输出:

bash
./test_script.sh

运行后,会看到输出已导出和未导出的变量值,以及由于尝试访问不存在的文件而产生的错误消息。


验证未导出的变量在新 shell 中不保留



在脚本中执行新的 bash shell,并检查变量:

“`bash

#!/bin/bash

# 定义未导出的变量

non_exported_var=”This is a non-exported variable”

# 导出变量

export exported_var=”This is an exported variable”

# 打印已导出和未导出的变量

echo “Non-exported variable: $non_exported_var”

echo “Exported variable: $exported_var”

# 启动新的 bash shell

bash <<EOF

echo “Inside new shell – Non-exported variable: $non_exported_var”

echo “Inside new shell – Exported variable: $exported_var”

EOF

“`

再次运行脚本,会发现新 shell 中未导出的变量没有值,而已导出的变量保留了其值。

67、在当前 shell 中创建一些 bash 别名。通过在当前 shell 中运行 bash 命令启动一个新的 shell。这些别名在子 shell 中是否有效?为什么?

别名在子 shell 中无效。因为别名是当前 shell 本地的,不会传递给程序或其他 shell。

68、使用 useradd 命令添加一个用户,同时使用 /etc/skel 目录下的文件填充新的主目录。

可以使用命令

useradd -m

来添加用户并使用

/etc/skel

目录下的文件填充新的主目录,例如添加用户名为 newuser 的用户:


useradd -m newuser

69、使用 groupadd 命令添加一个组。

使用以下语法添加组:


groupadd <组名>

例如,要添加名为

sales

的组,可执行:


groupadd sales

70、使用

passwd

命令为新用户设置密码。

使用

passwd [options] username

命令可以交互式地为指定用户名设置密码,密码不能在命令行输入。例如,若要为用户

bsmith

设置密码,可执行

passwd bsmith

,然后按提示操作。

71、登录新账户,并使用 newgrp 命令切换到新组。

该步骤是一个操作任务,具体操作如下:

首先使用新用户账户登录系统。

然后在命令行输入以下命令:

newgrp 新组名


(将“新组名”替换为实际要切换到的组名)

即可完成切换到新组的操作。

72、使用groupdel和userdel删除新的组和用户(包括主目录)。

使用

groupdel

删除组的命令格式为:


groupdel group

使用

userdel

删除用户并包含主目录的命令格式为:


userdel -r user

例如,要删除组

testgroup

和用户

jdoe

(包含其主目录),命令分别为:


groupdel testgroup


userdel -r jdoe

73、在你个人的crontab文件中添加一个条目来执行一项任务,比如给你发送一封电子邮件。确认该操作按预期发生。尝试使用五个时间指定符。

首先,使用

crontab -e

命令交互式编辑个人 crontab 文件。

假设要每天早上 9 点发送一封电子邮件,可使用以下格式添加条目:


0 9 * * * echo '这是一封测试邮件' | mail -s '测试' your_email@example.com

其中

your_email@example.com

需替换为你的真实邮箱地址。

添加完成后保存并退出编辑器。之后等待到指定时间,检查邮箱是否收到邮件以确认操作按预期发生。

可以通过修改时间指定符(分钟、小时、日、月、周)来进行不同时间的任务调度实验,例如:


15 18 1,15 * *

表示每月 1 号和 15 号的 18:15 执行任务。

74、使用 at 命令在未来安排一个命令。at 与 cron 有何不同?

cron

系统用于定期、周期性地执行命令;

at

用于将一个命令或一组命令的执行延迟到未来的某个时间,是一次性的命令执行安排;

使用

at

来安排延迟执行的任务很简单,且无需创建重复的

cron

条目。

75、在你的配置中添加 local5 设施。使用 logger 写入新的日志文件,并验证其内容。将你的日志条目与 /var/log/messages 中的条目进行比较。


/etc/syslog.conf

中添加如下行来定义

local5

设施的新日志文件:


# Define a new log file for the local5 facility
local5.*    /var/log/local5

然后使用如下命令从 shell 脚本向该设施写入消息(在创建新日志文件前,必须重启或发信号让

syslogd

重新初始化):


$ logger -p local5.info "Script terminated normally"

消息

"Script terminated normally"

会连同时间戳和发送消息的主机名一起被放入

/var/log/local5

可查看

/var/log/local5


/var/log/messages

的内容进行比较,

/var/log/messages

依据

*.info;mail.none;authpriv.none /var/log/messages

配置接收除邮件和认证私有信息(info 级别及以上)外的所有系统消息,而

/var/log/local5

只接收

local5

设施的消息。

76、检查 /etc/logrotate.conf 文件。/var/log/messages 日志文件轮转后会发生什么?


`/var/log/messages` 轮转后,会执行 postrotate 脚本中的命令,即 `/usr/bin/killall -HUP syslogd`。

77、如何检查打印机状态以及向打印机队列发送打印任务?

可通过

lpq -P printer


lpc status

命令检查打印机状态;使用

lpr -P printer file

命令将文件发送到指定打印机队列进行打印。

78、使用dig命令从DNS服务器定位有关域名的信息,请举例说明具体的使用方式。

可以使用以下方式:

使用默认DNS服务器查询:

bash
dig www.oreilly.com

查询非默认DNS服务器:

bash
dig @10.20.10.10 www.oreilly.com

验证PTR记录:

bash
dig -x 208.201.239.100

搜索MX记录:

bash
dig mx www.oreilly.com

79、使用traceroute命令检查到一个指定网站的路由,如何操作,并举例说明如何设置初始探针的生存时间值。

在命令行中使用如下命令格式:


traceroute [options] 网站域名

例如要检查到 oreilly.com 的路由,可使用命令:


traceroute oreilly.com

若要设置初始探针的生存时间值为 5,可使用命令:


traceroute -f 5 oreilly.com

80、与控制文件 /etc/hosts.allow 和 /etc/hosts.deny 关联的守护进程是什么?

与这两个文件关联的守护进程是

tcpd

,它用于配置 TCP 包装器,可增强由

inetd


xinetd

控制的守护进程的安全性。

81、概括地描述一种在本地文件系统中定位SUID程序的方法。为什么管理员可能会定期进行此操作?

可以使用

find

命令定位 SUID 程序,示例命令为:


# find /bin -perm -4000 -type f

其中

-perm -4000

选项表示只显示设置了 SUID 位的文件。管理员定期执行此操作是因为 SUID 可能带来安全风险,如果不合理地授予访问权限,会破坏系统的其他安全协议。管理员需要了解系统上哪些程序设置了 SUID 位,对于不需要 SUID 位的程序,将其移除,以增强系统安全性。

82、为什么用户应该使用 ssh 而不是 telnet?

SSH 简介

SSH(Secure Shell)是过时的

telnet

命令的替代方案,

telnet

已被淘汰。

主要用途

SSH 的主要用途是对到远程主机的 shell 会话进行加密。

安全性对比


telnet

:不具备加密功能,使用

telnet

传输的数据可能会被窃取或篡改。


SSH

:能提供更安全的远程连接。

83、描述影子密码及其存储密码的文件。为什么我们不再在 /etc/passwd 中存储加密的密码字符串了?


影子密码系统将用户密码存储在 `/etc/shadow` 文件中,该文件有严格的权限限制。最初,Unix 系统将用户加密后的密码字符串存储在 `/etc/passwd` 文件的第二个字段中,虽然通过单向哈希算法加密的密码很难逆向推导,但 `/etc/passwd` 是全局可读的,任何用户都能访问其他用户的加密密码。攻击者可以使用相同的加密算法对随机字符串进行加密,并与存储的加密字符串进行比较,通过暴力破解攻击尝试找到正确的密码。为了提高安全性,现在大多数系统将用户密码存储在 `/etc/shadow` 文件中。

84、就

ulimit

命令而言,硬限制和软限制的区别是什么?

以下是调整为 Markdown 格式的文本内容:


硬限制由超级用户为用户或用户组设置,不能被超越;软限制也由超级用户设置,但用户在需要时可以临时超越(通过调用

ulimit

命令),该临时提升仅在用户的 shell 会话期间有效。硬限制和软限制由超级用户在

/etc/security/limits.conf

文件中为所有用户设置。

85、在有多个管理员的环境中,为什么建议使用sudo而不是su?

使用

sudo

无需分发 root 密码

它会记录每个命令(包括完成和尝试的)

能明确是哪个用户在何时以 root 身份运行了什么命令

而若多人以 root 身份登录进行维护

无法确切知道是哪个用户在特定时间登录为 root 并运行了什么命令

86、使用nmap命令可以确定远程系统的哪些信息?

可以确定远程系统开放的端口

运行的服务或软件版本

操作系统

还能发现子网中哪些主机处于“活动”状态

87、描述使用 SSH 在系统之间进行基于密钥的身份验证的过程。


生成公钥

:通过

ssh-keygen

生成公钥,公钥位于

~/.ssh/id_dsa.pub


传输公钥

:将公钥传输到远程机器,由于是公钥,无需保密。


放置公钥

:在远程机器上,将公钥放在

~/.ssh/authorized_keys2

文件末尾。


实现免密登录

:一旦公钥在该文件中,所有拥有对应私钥的用户都可以无需密码登录到该远程账户。

88、描述如何使用gpg加密文件。

若要加密一个名为

chapter24.odt

的文件,使只有名为Andy Oram的用户可以使用它,可执行命令:


$ gpg -e -u "James Stanger" -r "Andy Oram" chapter24.odt

生成的加密文件名为

chapter24.odt.gpg

89、在 /etc/sudoers 文件中创建一个条目,允许你的用户账户以 root 身份运行任何命令。通过 sudo 运行一些命令并查看 /var/log/messages 文件。你会看到哪些条目?在多管理员环境中这有什么用处?


/etc/sudoers

中添加条目,例如:


your_username ALL=(ALL) ALL

可让指定用户以 root 身份运行任何命令。

运行命令后,

/var/log/messages

文件中会记录用户使用 sudo 执行命令的详细信息,如:

执行时间

用户

命令

在多管理员环境中,

sudo

会详细记录每个管理员执行的命令,这样可以明确是哪个管理员在何时执行了什么命令,便于追踪和审计操作,提高系统安全性和管理效率。

90、查看 /etc/shadow 文件。哪些用户账户没有密码?为什么没有?

以下是以 Markdown 格式呈现的内容,未对原始内容进行任何改动:


`bin`、`daemon`、`adm` 和 `lp` 这些系统账户没有密码(加密密码字段为 `*`)。这些账户用于运行系统进程和维护文件所有权,不允许交互式登录,所以被禁用了交互式登录密码。

91、使用chage命令为你的账户设置密码有效期。

可以使用

chage

命令的不同选项设置密码有效期,例如:

-d LASTDAY

:设置上次密码更改的天数

-E EXPIREDATE

:设置用户账户在特定日期过期

-m MINDAYS

:设置密码更改的最小间隔天数

-M MAXDAYS

:设置密码的最大有效天数

-W WARNDAYS

:设置密码过期前系统开始警告用户的天数


示例

:若要强制用户在下次登录时更改密码,可使用命令:


# chage -d 0 [用户名]

92、运行 ulimit –a 命令。设置了哪些默认限制?对用户设置哪些限制会比较有用?

运行

ulimit -a

命令显示的默认限制如下:


核心文件大小(块,-c)

:0


数据段大小(千字节,-d)

:无限制


调度优先级(-e)

:0


文件大小(块,-f)

:无限制


待处理信号(-i)

:8192


最大锁定内存(千字节,-l)

:32


最大内存大小(千字节,-m)

:无限制


打开文件数(-n)

:1024


管道大小(512 字节,-p)

:8


POSIX 消息队列(字节,-q)

:819200


实时优先级(-r)

:0


堆栈大小(千字节,-s)

:10240


CPU 时间(秒,-t)

:无限制


最大用户进程数(-u)

:8192


虚拟内存(千字节,-v)

:无限制


文件锁(-x)

:无限制

对用户设置的有用限制包括:

限制用户可创建的最大文件大小,避免磁盘空间被过度占用;

限制用户可运行的最大进程数,防止服务器因用户进程过多而停止响应;

限制用户可打开的最大文件数,避免内存耗尽;

限制用户可持有的最大文件锁数量,防止资源过度占用。

93、当你输入命令名时,哪个环境变量保存了 shell 搜索的所有目录列表?a. $LIST b. $VIEW c. $PATH d. $ENV e. 以上都不是

C

© 版权声明

相关文章

暂无评论

none
暂无评论...