系统管理
# 1. 修改服务器IP
修改服务器的IP地址是一个常见的任务,尤其是当你需要将服务器配置为使用静态IP地址而不是通过DHCP自动获取IP地址时。这通常通过编辑网络配置文件实现。
网络配置文件的位置
网络接口的配置文件位于/etc/sysconfig/network-scripts/
目录下。对于第一个以太网接口,这个文件通常被命名为ifcfg-eth0
或基于新的命名约定,可能是类似ifcfg-ens33
的名称。
修改网络配置文件
要修改网络配置,你需要编辑对应的网络接口配置文件。下面是一个配置示例,包含了如何设置静态IP地址以及其他网络参数:
# 打开网络配置文件进行编辑,这里以ifcfg-eth0为例
# 你可能需要根据你的网络接口设备名称调整文件名,比如ifcfg-eth0
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 网络配置文件内容示例
TYPE=Ethernet # 定义网络接口为以太网类型
BOOTPROTO=static # 指定使用静态IP地址
DEVICE=ens33 # 指定网络接口设备的名称,需要与文件名对应
IPADDR=192.168.1.100 # 设置服务器的静态IP地址
NETMASK=255.255.255.0 # 定义网络的子网掩码
GATEWAY=192.168.1.1 # 指定网络的默认网关,用于服务器访问外部网络
DNS1=192.168.1.1 # DNS,用于互联网域名的解析
DNS2=8.8.8.8 # 备用DNS
ONBOOT=yes # 确保在服务器启动时自动激活该网络配置
2
3
4
5
6
7
8
9
10
11
12
13
14
修改保存文件后,需要重启网络服务来应用更改。
# 重启网络服务,使配置生效
sudo systemctl restart network
2
修改并重启网络服务后,你应该验证新的网络配置是否生效。可以使用ip addr
或ifconfig
命令查看网络接口的当前配置:
# 查看所有网络接口的当前IP配置
ip addr
# 或者使用ifconfig(如果已安装)
ifconfig
2
3
4
# 2. 配置IP映射
在Linux系统中,/etc/hosts
文件用于将主机名映射到IP地址。当你在网络中访问特定的主机名时,系统会首先检查这个文件,以解析主机名对应的IP地址。这个功能特别有用,比如在没有DNS服务器或者需要覆盖DNS解析结果的情况下。修改/etc/hosts
文件来配置IP映射是一个简单直接的过程,下面是详细的操作步骤:
1. 打开/etc/hosts
文件进行编辑:
使用文本编辑器打开/etc/hosts
文件进行编辑。这里使用vi
编辑器作为示例,但你也可以使用任何其他文本编辑器,如nano
。
sudo vi /etc/hosts
2. 添加IP映射:
在文件的末尾添加您需要映射的IP地址和主机名。每个映射一行,格式为IP地址 主机名
。
# /etc/hosts文件内容示例
...
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
2
3
4
5
在上述示例中,IP地址192.168.1.101
被映射到主机名node1
,以此类推。这意味着当您尝试访问node1
时,系统会将其解析为192.168.1.101
。
3. 保存并退出编辑器:
在vi
编辑器中,您可以通过输入:wq
来保存更改并退出编辑器。如果你使用的是其他编辑器,请按照相应的方法保存并关闭文件。
4. 测试配置
配置好以后,你可以通过ping
命令测试主机名到IP地址的映射是否成功。
ping node1
如果配置正确,你应该能看到ping
命令实际上是向192.168.1.101
这个IP地址发送数据包。
重要说明
- 修改
/etc/hosts
文件时,需要具有root权限,因此在命令前添加sudo
。 - 这种方法仅在本地机器上有效,不会影响网络中的其他设备。
- 如果网络环境中存在DNS服务,确保了解
/etc/hosts
文件与DNS服务之间的解析优先级。一般情况下,系统会先查询/etc/hosts
文件,然后才是DNS服务器。 - 如果您在访问某些服务时遇到问题,记得检查
/etc/hosts
文件,看看是否有相应的映射配置,这有时候会覆盖您期望的DNS解析结果。
# 3. 配置环境变量
环境变量是操作系统用来记录一些关键信息的一组键值对(KeyValue),这些信息对系统和运行在系统上的程序来说都是很重要的。它们可以是系统级别的,也可以是用户级别的,对于不同的用途和需求,环境变量提供了一种灵活的配置方式。
# 3.1 查看环境变量
在Linux系统中,你可以使用env
命令来查看当前会话的所有环境变量:
env
此命令会列出所有的环境变量和它们的值。
# 3.2 PATH环境变量
PATH
是最常见的环境变量之一,它定义了一组目录,这些目录用冒号(:)分隔。当你在命令行中输入一个命令时,系统会按照PATH
变量中定义的顺序,在这些目录中搜索可执行文件。
如果你想添加一个新的目录到PATH
中,可以使用如下命令:
export PATH=$PATH:/your/custom/path
这个命令会把你的自定义路径添加到现有的PATH
变量中,$PATH
用于获取当前的PATH
值。
要查看PATH
的当前值,可以使用:
echo $PATH
或者通过管道符与grep
命令结合使用,来过滤显示PATH
环境变量:
env | grep PATH
# 3.3 使用$符号取环境变量的值
在Linux中,使用$
符号后跟环境变量名可以取得该环境变量的值。如果需要将环境变量的值与其他字符串混合,而又不希望造成混淆,可以使用大括号{}
来明确指示环境变量的边界。
例如:
echo $PATH # 显示PATH环境变量的值
echo ${PATH}ABC # 显示PATH的值后紧接着添加字符串"ABC"
2
# 3.4 自定义环境变量
你可以通过在命令行中使用export
命令来定义或修改环境变量。这些自定义的环境变量仅在当前会话中有效。如果你想让它们在新的会话中也生效,应该把相应的export
命令添加到你的~/.bashrc
、~/.bash_profile
、~/.profile
或其他相应的shell配置文件中。
例如,定义一个新的环境变量MY_VAR
:
export MY_VAR="some value"
然后你可以使用echo $MY_VAR
来检查其值。
# 3.5 持久化环境变量
要使环境变量持久化(即在所有会话中都可用),你可以将export
语句添加到你的个人shell启动脚本中,如~/.bashrc
(对于Bash用户):
echo 'export MY_VAR="some value"' >> ~/.bashrc
然后,重新加载~/.bashrc
:
source ~/.bashrc
或者,对于全局环境变量,需要有管理员权限将变量添加到/etc/environment
或/etc/profile
等文件中。
环境变量的作用
- 配置系统行为:环境变量能够影响操作系统的运行方式和程序的行为。例如,
PATH
环境变量定义了系统在查找可执行文件时要搜索的目录。通过修改PATH
,用户可以控制哪些命令和程序可以被系统识别和执行。 - 简化命令:环境变量允许对经常使用的值进行简化引用,如用户的家目录(通过
HOME
环境变量引用),这使得在编写脚本或执行命令时更加方便快捷。
# 4. 查看进程信息(ps)
ps
命令是Linux系统中用于查看当前运行进程信息的强大工具,它能帮助用户和系统管理员监控和管理系统进程。通过搭配不同的选项,ps
可以展示详细的进程信息,使得对进程进行监控和管理变得更加高效。
ps -ef # 查看所有正在运行的进程,并以全格式化形式展示信息
-e
选项:显示所有进程的信息。这是最广泛的进程选择选项,确保没有任何进程会被遗漏。-f
选项:全格式输出。这个选项会展示更为详尽的进程信息,如UID(用户ID)、PID(进程ID)、PPID(父进程ID)、C(CPU利用率)、STIME(启动时间)、TTY(终端类型)、TIME(CPU时间)以及CMD(命令行/命令)。
# 4.1 结合grep进行进程过滤
由于ps -ef
命令输出的信息可能非常多,我们通常会使用grep
命令来帮助过滤出我们感兴趣的进程信息。
ps -ef | grep 关键字 # 查找包含"关键字"的进程信息
ps -ef | grep tail # 查找所有使用tail命令的进程
ps -ef | grep 3001 # 查找所有命令行中包含"3001"的进程
2
3
- 使用
|
(管道符)将ps
命令的输出传递给grep
命令进行过滤。 grep
命令可以根据提供的模式匹配文本,从而过滤出包含指定关键字的行。
# 4.2 工作中的高级用法
监控特定用户的进程:如果你只对特定用户运行的进程感兴趣,可以结合使用
ps
命令的-u
选项。ps -ef | grep "^用户名" # 查找特定用户的所有进程
1查找特定服务的进程:
当需要快速定位某个服务(例如nginx或mysql)是否在运行时,可以直接通过服务名进行过滤。
ps -ef | grep nginx # 快速检查nginx服务是否在运行
1组合使用
awk
进行进程管理:在一些高级用法中,可能需要根据进程信息执行进一步的操作,如杀死某些进程。这时可以使用
awk
来提取PID,并传递给kill
命令。ps -ef | grep '关键字' | awk '{print $2}' | xargs kill # 杀死包含"关键字"的所有进程
1
# 5. 结束指定进程(kill)
当确定某个进程不再需要运行,或者该进程占用过多资源需要被终止时,可以使用kill
命令来结束指定的进程。
1. 使用kill
结束进程
kill pid
:通过指定进程的PID(进程ID)来结束进程。如果进程无法结束,可能需要使用更强制的方式。
kill 12345 # 假设12345是进程ID
kill -9 pid
:使用-9
选项可以强制杀死指定的进程。这个选项应谨慎使用,因为它不会给进程清理自己的机会,可能会导致数据丢失或其他问题。
kill -9 12345 # 强制杀死进程ID为12345的进程
2. 使用killall
结束进程
killall 进程名称
:通过进程名称来结束所有匹配该名称的进程。这个命令在需要结束多个相同进程的情况下非常有用。
killall nginx # 结束所有名为nginx的进程
# 6. 查看系统内存(free)
free
命令是Linux系统中用于查看当前内存使用情况的重要工具。它可以提供关于物理内存、交换空间以及内核缓冲区的详细信息。这些数据对于理解系统的内存使用情况和进行性能调优非常有用。
# 6.1 free命令基础用法
- 无选项的基础命令:
free # 显示系统内存的使用情况
这个命令将以默认单位(通常为KB)显示物理内存和交换空间的总量、已使用量、空闲量以及缓存和缓冲区占用的量。
# 6.2 free命令选项
-h
(人类可读格式):
free -h # 以人类可读的方式(如M、G)显示内存大小
这个选项会将内存大小转换成更易读的格式,例如MB(兆字节)、GB(吉字节),这样做使得数据更容易被理解。
执行free -h
命令后,你可能会看到类似于以下的输出:
total used free shared buff/cache available
Mem: 15Gi 5.5Gi 4.2Gi 123Mi 5.3Gi 9Gi
Swap: 2.0Gi 0.5Gi 1.5Gi
2
3
这个命令的输出提供了关于系统内存和交换空间(swap)使用情况的详细信息,具体含义如下:
- total:表示内存的总量。在这个例子中,物理内存总量为15GiB。
- used:表示已经被使用的内存量。这里已使用的内存量为5.5GiB。
- free:表示未被使用的内存量。示例中未使用的内存量为4.2GiB。
- shared:表示多个进程共享的内存总量。示例中共享内存为123MiB。
- buff/cache:被缓冲(buffer)或缓存(cache)的内存量。这部分内存用于缓存文件和数据,以加速程序访问,示例中为5.3GiB。
- available:估计可供启动新应用程序使用的内存量,不会造成交换空间(swap)的使用。示例中可用内存量为9GiB,这是一个估计值,考虑了缓存和缓冲区的内存可以被重新分配给应用程序而不需要使用交换空间。
-s <间隔>
(连续显示模式):
free -s 5 # 每5秒刷新并显示一次内存使用情况
这个选项使free
命令以指定的时间间隔连续运行,不断更新显示内存使用情况。这对于监控内存使用的变化非常有帮助。
-t
(显示总计):
free -t # 在输出的最后一行显示所有内存(包括交换空间)的总和
这个选项会在输出的最后添加一行,显示物理内存和交换空间的总使用量。
-g
、-m
、-k
、-b
(单位指定):
free -m # 以MB为单位输出内存使用量
free -g # 以GB为单位输出内存使用量
free -k # 以KB为单位输出内存使用量
free -b # 以字节为单位输出内存使用量
2
3
4
这些选项允许用户根据需要选择显示单位。例如,-m
选项是在处理大量内存时的一个常见选择。
实际工作中的高级用法
在日常管理和监控Linux系统的过程中,合理利用free
命令的不同选项可以有效地帮助理解系统的内存使用状况,从而做出相应的优化决策。例如,定时运行free -h
并记录输出可以帮助追踪内存使用趋势,free -s 1
则可以实时监控内存使用情况的变化,对于诊断内存泄露或是其他内存相关的问题非常有帮助。
# 7. 实时监控系统进程(top)
top
命令是Linux系统中用于实时监控系统进程及资源使用情况的强大工具。它提供了一个动态更新的视图,展示了系统中最占资源的进程,以及关于CPU、内存、交换空间等系统资源的实时使用情况。top
命令对于系统管理员和希望了解系统性能的用户来说是不可或缺的。
# 7.1 top命令选项
无选项:
top # 显示实时的系统资源使用情况
1默认情况下,
top
会每隔5秒自动刷新显示系统的资源使用情况。-d <秒数>
:设置刷新时间间隔。top -d 1 # 每秒刷新显示系统资源使用情况
1这个选项允许用户自定义数据刷新的频率。
-n <次数>
:指定top
命令自动刷新的次数后退出。top -n 10 # 自动刷新10次后退出
1这在脚本中自动监控系统资源并退出
top
很有用。-c
:显示完整的进程命令。top -c # 显示产生进程的完整命令
1默认情况下,
top
只显示进程名称,使用此选项可以看到完整的命令行。-p <PID>
:仅显示指定PID的进程信息。top -p 1234 # 只显示PID为1234的进程信息
1这对于监控特定进程非常有用。
-u <用户名>
:只显示指定用户启动的进程。top -u root # 只显示root用户启动的进程
1-b
:批处理模式,用于将top
的输出重定向到文件中。top -b > top_output.txt # 将输出重定向到文件
1-i
:不显示任何闲置(idle)或无用(zombie)的进程。top -i # 隐藏闲置和僵尸进程
1
# 7.2 top交互命令
在top
命令的交互模式下,用户可以通过按键来实时调整top
的显示和行为:
h
键:显示帮助画面。c
键:切换显示完整的进程命令和进程名称。f
键:选择显示的项目,自定义top
界面。M
键:按内存使用量排序。P
键:按CPU使用百分比排序。T
键:按时间/累计时间排序。E
/e
键:切换内存显示单位(顶部和进程级别)。l
键:切换显示平均负载和启动时间信息。i
键:切换是否显示闲置或无用的进程。t
键:切换显示CPU状态信息。m
键:切换显示内存信息。
# 7.3 top命令输出解释
- PID:进程ID(12345)。是进程的唯一标识符。
- USER:运行进程的用户(user1)。表示该进程是由哪个用户启动的。
- PR:优先级。决定了进程的调度优先级,数值越小,优先级越高。
- NI:nice值。一个影响进程调度优先级的值,nice值高的进程优先级低。
- VIRT:虚拟内存使用量(457892KiB)。包括进程使用的所有内存,如代码、数据和堆栈以及页面映射文件和共享库的大小。
- RES:常驻内存大小(35948KiB)。进程当前占用的物理内存大小,不包括交换出的部分。
- SHR:共享内存大小(15736KiB)。多个进程共享的内存总量。
- S:进程状态(S表示睡眠)。其他状态包括运行(R)、停止(T)、僵尸(Z)等。
- %CPU:进程占用的CPU百分比(0.3%)。表示该进程占用的CPU资源比例。
- %MEM:进程占用的内存百分比。展示了该进程占用系统总内存的百分比。
top - 18:25:38 up 2:22, 2 users, load average: 0.01, 0.04, 0.05
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.6 us, 0.7 sy, 0.0 ni, 95.5 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 8167800 total, 1445200 free, 5096000 used, 1626600 buff/cache
KiB Swap: 4095996 total, 4095996 free, 0 used. 2610288 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12345 user1 20 0 457892 35948 15736 S 0.3 0.4 0:00.89 myapp
2
3
4
5
6
7
8
第一行信息:
- 时间:当前时间(18:25:38)。
- 运行时间:系统已运行时间(2小时22分钟)。
- 用户数:当前登录用户数(2)。
- 负载平均:最近1分钟、5分钟和15分钟的平均负载(0.01、0.04、0.05)。
任务(Tasks):
- 总计:系统中的任务总数(162)。
- 运行中:正在运行的任务数(1)。
- 睡眠中:处于睡眠状态的任务数(161)。
- 停止:被停止的任务数(0)。
- 僵尸:僵尸进程数(0)。
CPU使用情况(%Cpu(s)):
- us(用户空间):用户空间占用的CPU百分比(3.6%)。
- sy(系统空间):内核空间占用的CPU百分比(0.7%)。
- id(空闲):CPU空闲时间百分比(95.5%)。
- wa(等待I/O):等待I/O的CPU时间百分比(0.1%)。
内存使用情况:
- 总计:系统总内存(8167800KiB)。
- 使用:已使用的内存量(5096000KiB)。
- 空闲:空闲的内存量(1445200KiB)。
- 缓存:用作缓存的内存量(1626600KiB)。
交换空间使用情况(KiB Swap):
- 总计:总交换空间(4095996KiB)。
- 空闲:空闲交换空间(4095996KiB)。
- 使用:已使用的交换空间(0KiB)。
# 8. 查看系统磁盘空间(df)
df
命令是Linux系统中用于查看文件系统磁盘空间使用情况的基本工具。它提供了有关挂载的文件系统及其磁盘使用情况的详细信息,这对于系统管理和维护非常有用。
- 查看所有文件系统的磁盘空间使用情况:
df # 默认情况下,df显示所有挂载文件系统的磁盘空间使用情况
# 8.1 常用选项
-h
(人类可读格式):df -h # 以更易读的方式(如GB、MB)显示磁盘大小
1这个选项将大小单位转换为人们更熟悉的格式,如GB、MB,而不是默认的字节数。
-T
(显示文件系统类型):df -T # 显示每个文件系统的类型
1这对于区分不同类型的文件系统(如ext4、xfs等)很有帮助。
-i
(显示inode信息):df -i # 显示inode使用情况
1inode是Unix和类Unix系统中用于存储文件元数据的数据结构。查看inode的使用情况对于诊断文件系统问题很重要,尤其是当系统报告“没有剩余空间”而实际磁盘空间还有很多时。
# 8.2 df命令输出解释
执行df -h
命令后的输出如下:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 30G 18G 60% /
tmpfs 2.0G 104K 2.0G 1% /dev/shm
/dev/sdb1 100G 60G 40G 60% /data
2
3
4
- 文件系统(Filesystem):显示文件系统的设备名或标识。
- 1K-块(1K-blocks)或大小(Size):文件系统的总大小。
- 已用(Used):文件系统上已使用的空间大小。
- 可用(Avail):文件系统上还可用的空间大小。
- 已用%(Use%):已使用空间的百分比。
- 挂载点(Mounted on):文件系统挂载的目录位置。
# 8.3 工作中的高级用法
- 查看指定目录的磁盘空间使用情况:
df
命令可以与具体的文件或目录一起使用,来查看包含该文件或目录的文件系统的磁盘空间使用情况。
df /home # 查看/home目录所在文件系统的磁盘空间使用情况
- 排除特定类型的文件系统:
在一些情况下,你可能不希望df
命令显示特定类型的文件系统(如tmpfs、devtmpfs)。可以使用-x
选项排除它们:
df -h -x tmpfs -x devtmpfs # 显示磁盘空间使用情况,但排除tmpfs和devtmpfs类型的文件系统
# 9. 显示系统信息(uname)
语法:uname [选项]
uname # 显示内核名称。
uname -a # 显示所有可用的系统信息。
2
3
-a
:显示所有可用的系统信息。-s
:显示内核名称。-r
:显示内核版本。
# 10. 查看磁盘速率等(iostat)
iostat
命令是Linux中用于监控系统磁盘I/O(输入/输出)和CPU使用情况的重要工具。它能够帮助系统管理员诊断磁盘I/O瓶颈和CPU性能问题。
# 查看磁盘速率等信息
iostat [-x][num1][num2]
2
-x
,显示更多信息;num1
:数字,刷新间隔;num2
:数字,刷新几次
下面是iostat -x
的命令输出示例,并对输出的各项进行了详细的说明。
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm %util
sda 3.00 0.50 48.00 4.00 0.00 0.20 0.0 28.6 0.85
2
Device:显示磁盘设备的名称。在此示例中,
sda
代表系统的第一个SCSI磁盘。r/s:每秒完成的读取操作数。示例中,
sda
的值为3.00,意味着每秒完成3次读取操作。w/s:每秒完成的写入操作数。示例中,
sda
的值为0.50,表示每秒完成0.5次写入操作。rkB/s:每秒从设备读取的数据量(以KB为单位)。示例中,
sda
的值为48.00,表示每秒读取48KB数据。wkB/s:每秒向设备写入的数据量(以KB为单位)。示例中,
sda
的值为4.00,意味着每秒写入4KB数据。rrqm/s:每秒合并的读取请求数。示例中,
sda
的值为0.00,表示没有读取请求被合并。wrqm/s:每秒合并的写入请求数。示例中,
sda
的值为0.20,意味着每秒有0.2次写入请求被合并。%rrqm:合并读取请求占总读取请求的百分比。示例中,
sda
的值为0.0%,表示没有读取请求被合并。%wrqm:合并写入请求占总写入请求的百分比。示例中,
sda
的值为28.6%,表示约29%的写入请求被合并。%util:设备的利用率百分比。示例中,
sda
的值为0.85%,表示磁盘在观察期间有0.85%的时间是活跃的。