Linux 系统管理实战指南

· 阅读约需24分钟

一、引言

Linux作为开源操作系统的代表,已经成为服务器领域的主流选择。无论是Web服务器、数据库服务器还是应用服务器,Linux都占据着绝对的市场份额。掌握Linux系统管理技能,已经成为运维工程师、开发工程师和系统管理员的必备能力。

本文将从基础命令出发,逐步深入到用户权限管理、进程管理、磁盘管理,最后介绍Shell脚本入门,帮助你建立完整的Linux系统管理知识体系。无论你是Linux初学者还是有一定经验的用户,都能从本文中获得有价值的内容。

二、Linux基础命令

2.1 文件与目录操作

文件和目录操作是Linux最基础也是最常用的命令。熟练掌握这些命令能大大提高你的工作效率。

常用文件操作命令:

# 查看当前目录
pwd

# 列出目录内容
ls -la

# 切换目录
cd /path/to/directory
cd ~  # 切换到用户主目录
cd -  # 切换到上一次所在目录

# 创建目录
mkdir directory_name
mkdir -p parent/child/grandchild  # 递归创建多级目录

# 创建文件
touch filename.txt

# 复制文件或目录
cp source.txt destination.txt
cp -r source_dir destination_dir  # 递归复制目录

# 移动或重命名
mv old_name.txt new_name.txt
mv file.txt /path/to/destination/

# 删除文件或目录
rm filename.txt
rm -r directory_name  # 递归删除目录
rm -rf directory_name  # 强制递归删除(慎用)

查看文件内容的命令:

# 查看文件全部内容
cat filename.txt

# 分页查看文件内容
more filename.txt
less filename.txt  # 更强大的分页查看

# 查看文件前几行
head -n 20 filename.txt  # 查看前20行

# 查看文件后几行
tail -n 20 filename.txt  # 查看后20行
tail -f filename.txt  # 实时跟踪文件末尾(常用于查看日志)

2.2 文本处理命令

Linux提供了丰富的文本处理工具,能够高效地处理各种文本数据。

# 在文件中搜索字符串
grep "pattern" filename.txt
grep -i "pattern" filename.txt  # 忽略大小写
grep -r "pattern" /path/to/dir  # 递归搜索目录
grep -n "pattern" filename.txt  # 显示行号

# 文本排序
sort filename.txt
sort -r filename.txt  # 逆序排序
sort -n filename.txt  # 按数字排序

# 去除重复行
uniq filename.txt
sort filename.txt | uniq  # 先排序再去重

# 统计文件信息
wc filename.txt  # 统计行数、单词数、字节数
wc -l filename.txt  # 只统计行数
wc -w filename.txt  # 只统计单词数

# 截取文件字段
cut -d: -f1 /etc/passwd  # 以冒号分隔,取第1个字段

# 文本替换
sed 's/old/new/g' filename.txt  # 全局替换
sed -i 's/old/new/g' filename.txt  # 直接修改文件

# 强大的文本处理工具awk
awk '{print $1}' filename.txt  # 打印第一列
awk -F: '{print $1, $3}' /etc/passwd  # 以冒号分隔,打印第1和第3列

三、用户权限管理

3.1 用户与用户组管理

Linux是多用户操作系统,用户和用户组管理是系统安全的基础。

用户管理命令:

# 创建新用户
useradd username
useradd -m username  # 同时创建用户主目录
useradd -s /bin/bash username  # 指定默认shell

# 设置用户密码
passwd username

# 修改用户信息
usermod -l newname oldname  # 修改用户名
usermod -d /new/home/dir username  # 修改用户主目录
usermod -s /bin/zsh username  # 修改用户默认shell

# 删除用户
userdel username
userdel -r username  # 同时删除用户主目录和邮件

# 查看用户信息
id username
whoami  # 查看当前用户名

用户组管理命令:

# 创建用户组
groupadd groupname

# 修改用户组
groupmod -n newname oldname  # 修改组名

# 删除用户组
groupdel groupname

# 将用户添加到用户组
usermod -aG groupname username

# 查看用户所属组
groups username

3.2 文件权限管理

Linux的文件权限系统是其安全性的核心体现。每个文件都有三组权限:所有者、所属组、其他用户。

权限表示方法:

# 查看文件权限
ls -l filename.txt

# 输出示例:
# -rw-r--r-- 1 user group 1024 Jun 20 10:00 filename.txt
# 说明:
# 第一个字符:文件类型(-普通文件,d目录,l链接)
# 接下来9个字符:三组权限(所有者、所属组、其他用户)
# 每组3个字符:r(读)、w(写)、x(执行)

修改文件权限:

# 使用符号模式修改权限
chmod u+x filename.txt  # 所有者添加执行权限
chmod g-w filename.txt  # 所属组移除写权限
chmod o+r filename.txt  # 其他用户添加读权限
chmod a+r filename.txt  # 所有人添加读权限

# 使用数字模式修改权限(推荐)
# r=4, w=2, x=1
chmod 755 filename.txt  # rwxr-xr-x
chmod 644 filename.txt  # rw-r--r--
chmod 700 filename.txt  # rwx------

# 递归修改目录权限
chmod -R 755 /path/to/directory

修改文件所有者和所属组:

# 修改文件所有者
chown username filename.txt

# 修改文件所属组
chgrp groupname filename.txt

# 同时修改所有者和所属组
chown username:groupname filename.txt

# 递归修改
chown -R username:groupname /path/to/directory

四、进程管理

4.1 查看进程

了解系统中运行的进程状态是系统管理的重要内容。

# 查看当前终端的进程
ps

# 查看所有进程
ps aux
ps -ef

# 常用ps组合
ps aux | grep process_name  # 查找特定进程

# 实时查看进程状态(类似Windows任务管理器)
top
htop  # 更友好的top替代品(需要安装)

# 查看进程树
pstree
pstree -p  # 显示进程ID

top命令常用快捷键:

  • P:按CPU使用率排序
  • M:按内存使用率排序
  • T:按运行时间排序
  • k:杀死进程
  • q:退出

4.2 进程控制

掌握进程的启动、停止和优先级调整是必备技能。

前台与后台进程:

# 后台运行程序
command &

# 将前台进程挂起到后台
# 按 Ctrl+Z 挂起当前进程

# 查看后台作业
jobs

# 将后台作业转到前台运行
fg %job_number

# 将挂起的作业在后台继续运行
bg %job_number

终止进程:

# 终止进程(优雅终止)
kill process_id
kill -15 process_id  # SIGTERM信号

# 强制杀死进程
kill -9 process_id  # SIGKILL信号

# 按名称杀死进程
killall process_name
pkill process_name

# 示例
killall nginx  # 杀死所有nginx进程
pkill -u username  # 杀死指定用户的所有进程

进程优先级:

# 以指定优先级启动进程
# nice值范围:-20(最高优先级)到 19(最低优先级)
nice -n 10 command

# 修改已运行进程的优先级
renice 10 -p process_id
renice -5 -u username  # 修改用户所有进程优先级

五、磁盘管理

5.1 磁盘信息查看

了解磁盘使用情况是系统管理的日常工作。

# 查看磁盘使用情况
df -h  # 以人类可读的格式显示
df -T  # 显示文件系统类型
df -i  # 显示inode使用情况

# 查看目录大小
du -sh /path/to/directory  # 显示目录总大小
du -h --max-depth=1 /path  # 显示一级子目录大小
du -ah /path/to/directory  # 显示所有文件和目录大小

# 查看磁盘分区信息
fdisk -l
lsblk  # 以树状结构显示块设备
blkid  # 查看块设备的UUID和文件系统类型

5.2 磁盘分区与挂载

磁盘分区和挂载是Linux系统管理的重要操作。

分区操作:

# 使用fdisk分区(MBR分区表)
fdisk /dev/sdb
# 常用命令:n(新建分区)、d(删除分区)、p(查看分区表)、w(保存退出)

# 使用parted分区(支持GPT分区表)
parted /dev/sdb
# 常用命令:mklabel gpt(创建GPT分区表)、mkpart(创建分区)、print(查看分区)、quit(退出)

文件系统创建:

# 创建ext4文件系统
mkfs.ext4 /dev/sdb1
mkfs.ext4 -L label_name /dev/sdb1  # 指定卷标

# 创建xfs文件系统
mkfs.xfs /dev/sdb1

# 创建swap分区
mkswap /dev/sdb2
swapon /dev/sdb2  # 启用swap分区

挂载操作:

# 手动挂载
mount /dev/sdb1 /mnt/data
mount -o remount,rw /  # 重新挂载为读写模式

# 查看已挂载的文件系统
mount
df -h

# 卸载
umount /mnt/data
umount /dev/sdb1

# 强制卸载(设备忙时)
umount -f /mnt/data

开机自动挂载(/etc/fstab):

# 编辑fstab文件
vim /etc/fstab

# fstab格式:
# <设备>  <挂载点>  <文件系统类型>  <挂载选项>  <dump>  <pass>
# 示例:
/dev/sdb1   /mnt/data   ext4   defaults   0   2
UUID=xxx    /mnt/data   ext4   defaults   0   2  # 使用UUID更可靠

# 测试fstab配置
mount -a

六、Shell脚本入门

6.1 脚本基础

Shell脚本是自动化运维的基础,掌握脚本编写能大幅提高工作效率。

第一个Shell脚本:

#!/bin/bash
# 这是注释
echo "Hello, World!"

脚本执行方法:

# 方法1:添加执行权限后直接运行
chmod +x script.sh
./script.sh

# 方法2:使用bash解释器运行
bash script.sh

# 方法3:使用source运行(在当前shell中执行)
source script.sh
. script.sh  # 点命令,与source等效

6.2 变量与参数

Shell脚本中的变量使用非常灵活。

变量定义与使用:

#!/bin/bash

# 定义变量
name="Linux"
version="20.04"

# 使用变量
echo "操作系统:$name"
echo "版本:${version}"  # 推荐使用花括号明确变量边界

# 只读变量
readonly PI=3.14159

# 删除变量
unset variable_name

特殊变量:

#!/bin/bash

# 命令行参数
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "所有参数:$@"
echo "参数个数:$#"

# 进程相关
echo "当前进程ID:$$"
echo "上一个后台进程ID:$!"

# 退出状态
echo "上一个命令的退出状态:$?"

6.3 条件判断

条件判断是脚本逻辑的基础。

if语句:

#!/bin/bash

# 基本if语句
if [ condition ]; then
    # 条件成立时执行
    echo "条件成立"
fi

# if-else语句
if [ condition ]; then
    echo "条件成立"
else
    echo "条件不成立"
fi

# if-elif-else语句
if [ condition1 ]; then
    echo "条件1成立"
elif [ condition2 ]; then
    echo "条件2成立"
else
    echo "都不成立"
fi

常用条件判断:

# 文件判断
if [ -f filename ]; then echo "文件存在"; fi
if [ -d dirname ]; then echo "目录存在"; fi
if [ -r filename ]; then echo "文件可读"; fi
if [ -w filename ]; then echo "文件可写"; fi
if [ -x filename ]; then echo "文件可执行"; fi

# 字符串比较
if [ "$str1" = "$str2" ]; then echo "字符串相等"; fi
if [ "$str1" != "$str2" ]; then echo "字符串不等"; fi
if [ -z "$str" ]; then echo "字符串为空"; fi
if [ -n "$str" ]; then echo "字符串非空"; fi

# 数字比较
if [ $num1 -eq $num2 ]; then echo "相等"; fi  # equal
if [ $num1 -ne $num2 ]; then echo "不等"; fi  # not equal
if [ $num1 -gt $num2 ]; then echo "大于"; fi  # greater than
if [ $num1 -lt $num2 ]; then echo "小于"; fi  # less than
if [ $num1 -ge $num2 ]; then echo "大于等于"; fi  # greater or equal
if [ $num1 -le $num2 ]; then echo "小于等于"; fi  # less or equal

6.4 循环结构

循环可以让我们重复执行某些操作。

for循环:

#!/bin/bash

# 遍历列表
for fruit in apple banana orange; do
    echo "水果:$fruit"
done

# 遍历数字范围
for i in {1..5}; do
    echo "数字:$i"
done

# C语言风格for循环
for ((i=1; i<=5; i++)); do
    echo "数字:$i"
done

# 遍历文件
for file in *.txt; do
    echo "处理文件:$file"
done

while循环:

#!/bin/bash

# 基本while循环
count=1
while [ $count -le 5 ]; do
    echo "计数:$count"
    count=$((count + 1))
done

# 读取文件内容
while read line; do
    echo "行内容:$line"
done < filename.txt

6.5 函数

函数可以让代码更模块化、更易维护。

#!/bin/bash

# 定义函数
greet() {
    echo "Hello, $1!"
}

# 调用函数
greet "World"
greet "Linux"

# 带返回值的函数
add() {
    local sum=$(($1 + $2))
    echo $sum
}

# 调用函数并获取返回值
result=$(add 3 5)
echo "3 + 5 = $result"

# 函数中的变量作用域
# local关键字定义局部变量,默认是全局变量

七、总结

Linux系统管理是一个广阔的领域,本文介绍了基础命令、用户权限管理、进程管理、磁盘管理和Shell脚本入门等核心内容。掌握这些知识,你就能应对大部分日常的Linux系统管理工作。

学习建议:

  1. 多动手实践:Linux是实践性很强的技能,光看不练很难真正掌握
  2. 善用man手册:遇到不熟悉的命令,先查man手册,这是最权威的文档
  3. 积累脚本库:把常用的操作写成脚本,不断积累和完善
  4. 关注系统安全:权限管理、用户管理都与安全息息相关,要时刻保持安全意识
  5. 持续学习:Linux生态在不断发展,新的工具和技术层出不穷

希望本文能帮助你建立Linux系统管理的知识框架。随着实践的深入,你会发现Linux的魅力所在,它会成为你工作中最得力的助手。