Linux 系统管理实战指南
一、引言
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 username3.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 # 显示进程IDtop命令常用快捷键:
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 equal6.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"
donewhile循环:
#!/bin/bash
# 基本while循环
count=1
while [ $count -le 5 ]; do
echo "计数:$count"
count=$((count + 1))
done
# 读取文件内容
while read line; do
echo "行内容:$line"
done < filename.txt6.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系统管理工作。
学习建议:
- 多动手实践:Linux是实践性很强的技能,光看不练很难真正掌握
- 善用man手册:遇到不熟悉的命令,先查man手册,这是最权威的文档
- 积累脚本库:把常用的操作写成脚本,不断积累和完善
- 关注系统安全:权限管理、用户管理都与安全息息相关,要时刻保持安全意识
- 持续学习:Linux生态在不断发展,新的工具和技术层出不穷
希望本文能帮助你建立Linux系统管理的知识框架。随着实践的深入,你会发现Linux的魅力所在,它会成为你工作中最得力的助手。