从零开始学 Linux:从环境搭建到核心命令全攻略
摘要:本文是一份从零开始的 Linux 学习全攻略,涵盖环境搭建(VMware + CentOS 7)、核心命令(文件操作、查找过滤、权限管理)、vi/vim 编辑器、Shell 脚本入门及常见问题排查。全文以实战为导向,每个命令都配有详细示例,适合后端开发、运维、数据分析等方向的初学者快速上手。
前言:为什么 Linux 是 IT 人的必修课?
在数字化时代,Linux 早已不是小众的操作系统。作为开源软件的典范,它支撑着全球互联网的基础设施 —— 从你刷的短视频、网购的订单,到云计算、大数据、人工智能的后台,97% 以上的服务器都运行在 Linux 之上。
对于 IT 从业者而言,Linux 是绕不开的核心技能:
- 后端开发: 部署服务、调试环境、排查线上问题,离不开 Linux;
- 运维工程师: 服务器管理、集群维护、自动化运维,Linux 是基本功;
- 数据分析 / AI: 训练模型、处理海量数据,Linux 的高性能和稳定性无可替代;
- 网络安全: 渗透测试、漏洞挖掘、应急响应,Linux 是主要战场。
很多初学者对 Linux 的 “纯命令行” 望而生畏,但其实它并不难学。这篇文章将从 Linux 系统简介 开始,带你一步步完成环境搭建、核心命令学习、权限管理、脚本编写,跟着做就能学会!

文章目录
- 从零开始学 Linux:从环境搭建到核心命令全攻略
内容大纲

Linux的背景:
- Linux的诞生
Linux由林纳斯 托瓦兹在1991年创立并发展至今成为服务器操作系统领域的核心系统。 - 什么是Linux系统的内核
内核提供了Linux系统的主要功能,如硬件调度管理的能力。
Linux内核是免费开源的,任何人都可以查看内核的源代码,甚至是贡献源代码。 - 什么是Linux系统发行版
内核无法被用户直接使用,需要配合应用程序才能被用户使用。
在内核之上,封装系统级应用程序,组合在一起就称之为Linux发行版。
一、Linux 环境搭建(超详细步骤)
1.1 虚拟机软件安装(VMware Workstation Pro 17)
虚拟机软件可以让你在不影响主操作系统的情况下,在电脑上运行多个独立的操作系统。
具体的可以参考我之前专栏博客的文章:https://blog.csdn.net/yxn4065/category_12126308.html
Windows 系统安装步骤:
- 下载 VMware Workstation Pro 17 安装包(官网下载或国内镜像站)
- 双击运行安装程序,点击"下一步"
- 接受许可协议,点击"下一步"
- 选择安装位置(建议安装在非系统盘,如 D:\Program Files\VMware\VMware Workstation\)
- 取消勾选"启动时检查产品更新"和"加入 VMware 客户体验提升计划"
- 点击"下一步",然后点击"安装"
- 等待安装完成,点击"完成"
- 输入许可证密钥激活软件(可试用30天)
Mac 系统安装步骤:
- 下载 VMware Fusion Pro 13 安装包
- 双击打开 DMG 文件,将 VMware Fusion 拖入 Applications 文件夹
- 打开 VMware Fusion,按照提示完成安装
- 输入许可证密钥激活软件
1.2 CentOS 7 系统完整安装流程
CentOS 7 是目前企业中使用最广泛的 Linux 发行版之一,稳定性极高,非常适合学习和生产环境使用。
准备工作:
- 下载 CentOS 7 镜像文件(推荐下载 Minimal 最小化安装版,约1GB)
- 确保电脑有至少 20GB 空闲磁盘空间
- 确保电脑内存至少 4GB(建议 8GB 以上)
详细安装步骤:
-
创建新虚拟机
- 打开 VMware Workstation,点击"创建新的虚拟机"
- 选择"典型(推荐)“,点击"下一步”
- 选择"安装程序光盘镜像文件(ISO)",浏览并选择下载的 CentOS 7 ISO 文件
- 点击"下一步",输入虚拟机名称(如 CentOS7-Learn),选择虚拟机存储位置
- 设置磁盘大小为 20GB,选择"将虚拟磁盘存储为单个文件"
- 点击"下一步",然后点击"完成"
-
调整虚拟机硬件配置
- 点击"编辑虚拟机设置"
- 内存:设置为 2GB(如果电脑内存充足,可设置为 4GB)
- 处理器:设置为 2 核
- 网络适配器:确保选择"NAT 模式"
- 点击"确定"保存设置
-
启动虚拟机并安装系统
- 点击"开启此虚拟机"
- 选择 “Install CentOS 7”(按回车键)
- 等待系统加载完成,进入安装界面
- 语言选择:中文(简体),点击"继续"
- 安装信息摘要界面:
- 日期和时间:选择亚洲/上海时区
- 键盘:默认中文(中国)
- 语言支持:默认中文(中国)
- 安装源:默认本地介质
- 软件选择:
- 新手推荐:GNOME 桌面(包含图形界面,方便操作)
- 进阶推荐:最小安装(纯命令行,占用资源少)
- 安装位置:
- 点击进入,选择"自动配置分区"
- 点击"完成",系统会自动创建分区
- 网络和主机名:
- 打开以太网开关
- 设置主机名(如 centos7-learn)
- 点击"应用"
- 点击"开始安装"
- 设置 root 密码(务必记住! 建议设置为简单易记的,如 123456)
- 创建普通用户(如 itheima,密码也设置为 123456)
- 等待安装完成(约10-15分钟)
- 点击"重启"
-
首次启动系统
- 接受许可证协议
- 完成初始设置,进入系统
1.3 FinalShell 远程连接工具详细配置
在虚拟机中直接操作 Linux 命令行不太方便,我们使用 FinalShell 这款优秀的远程连接工具,它支持 SSH、SFTP 等多种协议,界面友好,功能强大。
下载安装:
- Windows 版本:https://dl.hostbuf.com/finalshell3/finalshell_windows_x64.exe
- Mac 版本:http://www.hostbuf.com/downloads/finalshell_install.pkg
注意:如果上述链接无法访问,可以在百度搜索"FinalShell 官网"下载最新版本。
详细连接步骤:
-
获取 Linux 系统 IP 地址
- 在 Linux 系统中打开终端(图形界面右键点击桌面,选择"打开终端")
- 输入命令:
ip addr(CentOS 7 推荐使用,ifconfig可能需要额外安装) - 找到以
ens33开头的网卡信息,记录inet后面的 IP 地址(如 192.168.88.130)
-
在 FinalShell 中新建 SSH 连接
- 打开 FinalShell,点击左上角的"文件夹"图标
- 点击"新建" -> “SSH连接(Linux)”
- 填写连接信息:
- 名称:CentOS7-Learn(自定义)
- 主机:刚才记录的 IP 地址(如 192.168.88.130)
- 端口:22(默认)
- 用户名:imy(刚才创建的普通用户)
- 密码:123456(刚才设置的密码)
- 点击"确定"保存
-
连接 Linux 系统
- 双击刚才创建的连接
- 第一次连接会弹出"主机密钥确认"窗口,点击"接受并保存"
- 连接成功后,你就可以在 FinalShell 中操作 Linux 系统了!

FinalShell 实用技巧:
- 文件传输:直接将 Windows 上的文件拖到 FinalShell 窗口即可上传到 Linux
- 多标签页:可以同时打开多个 SSH 连接
- 命令历史:按上下箭头可以快速调用之前执行过的命令
- 快捷键:Ctrl+C 复制,Ctrl+V 粘贴(FinalShell 已自动适配)
1.4 虚拟机快照与克隆
为了防止系统损坏后需要重新安装,我们可以使用虚拟机的快照和克隆功能。
拍摄快照:
- 关闭虚拟机(点击"虚拟机" -> “电源” -> “关闭客户机”)
- 右键点击虚拟机 -> “快照” -> “拍摄快照”
- 输入快照名称(如 “初始安装完成”)和描述
- 点击"拍摄快照"
恢复快照:
- 关闭虚拟机
- 右键点击虚拟机 -> “快照” -> 选择要恢复的快照
- 点击"转到",确认恢复
克隆虚拟机:
- 关闭虚拟机
- 右键点击虚拟机 -> “管理” -> “克隆”
- 点击"下一步",选择"现有快照"
- 选择"创建完整克隆"
- 输入克隆虚拟机的名称和存储位置
- 点击"完成"
二、Linux 基础入门(核心概念详解)
2.1 Linux 目录结构(树形结构详解)
Linux 的目录结构是一个树形结构,与 Windows 的多盘符不同,Linux 只有一个根目录 /,所有文件都在它下面。
/
├── bin # 二进制可执行文件(所有用户都可以使用的基本命令)
├── boot # 系统启动相关文件(内核、引导程序等)
├── dev # 设备文件(硬盘、键盘、鼠标等)
├── etc # 系统配置文件(非常重要!)
├── home # 普通用户家目录(每个用户都有一个以自己名字命名的文件夹)
├── lib # 系统库文件(32位)
├── lib64 # 系统库文件(64位)
├── media # 媒体挂载点(U盘、光盘等)
├── mnt # 临时挂载点(手动挂载其他文件系统)
├── opt # 第三方软件安装目录
├── proc # 虚拟文件系统(存储系统和进程信息)
├── root # root用户家目录(超级管理员)
├── run # 运行时数据(系统启动后产生的临时文件)
├── sbin # 超级用户二进制可执行文件(只有root可以使用的系统管理命令)
├── srv # 服务数据(系统服务相关的数据)
├── sys # 虚拟文件系统(存储硬件信息)
├── tmp # 临时文件(系统会定期清理)
├── usr # 用户程序和数据(非常重要!)
│ ├── bin # 用户命令
│ ├── sbin # 系统管理命令
│ ├── lib # 库文件
│ ├── lib64 # 64位库文件
│ ├── local # 本地安装的软件
│ └── share # 共享数据(文档、图标等)
└── var # 可变数据(日志、数据库、邮件等)
├── log # 系统日志文件(非常重要!)
├── lib # 可变状态数据
└── tmp # 临时文件

重要目录说明:
/etc:系统配置文件目录,几乎所有的系统和服务配置都在这里/var/log:系统日志目录,排查问题时必须查看/home:普通用户的家目录,用户的个人文件都在这里/root:超级管理员 root 的家目录/usr/local:手动安装软件的默认目录
2.2 Linux 命令基础格式与原理
Linux 命令的通用格式为:
command [-options] [parameter]
- command:命令本身(如 ls、cd、pwd 等)
- -options:可选选项,控制命令的行为细节(通常以
-开头) - parameter:可选参数,命令的指向目标(文件、目录等)
示例:
ls -l /home/imy
ls:命令本身,列出目录内容-l:选项,以列表形式显示详细信息/home/imy:参数,指定要列出的目录
命令执行原理:
当你在终端输入一个命令并按下回车键时,系统会在 PATH 环境变量指定的目录中查找对应的可执行文件,找到后执行它。
你可以使用 echo $PATH 命令查看系统的 PATH 环境变量:
echo $PATH
# 输出示例:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
三、文件和目录操作命令(每个命令都有详细示例)
3.1 目录查看命令 ls
ls 命令用于列出目录下的内容,是最常用的 Linux 命令之一。
基本用法:
ls # 列出当前目录内容
ls -a # 列出所有内容(包括隐藏文件,以.开头的文件)
ls -l # 以列表形式显示详细信息
ls -h # 以人性化方式显示文件大小(需配合-l使用)
ls -lah / # 以列表形式显示根目录所有内容,包含隐藏文件
ls -t # 按修改时间排序(最新的在最前面)
ls -r # 反向排序
ls -S # 按文件大小排序(最大的在最前面)
ls -R # 递归列出子目录内容
详细输出解析:
ls -l
# 输出示例:
drwxr-xr-x. 2 itheima itheima 4096 5月 17 10:30 Desktop
-rw-r--r--. 1 itheima itheima 123 5月 17 10:30 test.txt
输出信息从左到右依次为:
- 文件类型和权限
- 硬链接数
- 文件所有者
- 文件所属组
- 文件大小(字节)
- 最后修改时间
- 文件名
3.2 目录切换命令 cd
cd 命令用于切换当前工作目录。
基本用法:
cd / # 切换到根目录
cd ~ # 切换到当前用户家目录(等同于cd)
cd .. # 切换到上一级目录
cd ../.. # 切换到上两级目录
cd /home/itheima # 切换到指定绝对路径
cd Desktop # 切换到当前目录下的Desktop文件夹(相对路径)
cd - # 切换到上一次所在的目录
cd ~itheima # 切换到itheima用户的家目录
绝对路径与相对路径:
- 绝对路径:从根目录
/开始的路径(如/home/itheima/Desktop) - 相对路径:从当前目录开始的路径(如
Desktop、../test)
3.3 查看当前目录 pwd
pwd 命令用于显示当前所在的工作目录。
pwd
# 输出示例:/home/itheima
3.4 创建目录 mkdir
mkdir 命令用于创建新的目录。
基本用法:
mkdir itheima # 创建单个目录
mkdir -p itcast/good/666 # 递归创建多级目录(如果父目录不存在,会自动创建)
mkdir ~/test # 在用户家目录创建test目录
mkdir dir1 dir2 dir3 # 同时创建多个目录
mkdir -m 755 public_dir # 创建目录并设置权限
3.5 创建文件 touch
touch 命令用于创建新的空文件,也可以更新文件的时间戳。
基本用法:
touch test.txt # 在当前目录创建test.txt
touch /home/itheima/test.txt # 在指定路径创建文件
touch file1.txt file2.txt file3.txt # 同时创建多个文件
touch -d "2023-01-01 10:00:00" test.txt # 修改文件的修改时间
3.6 查看文件内容
cat 命令
cat 命令用于查看文件全部内容,适合查看小文件。
cat test.txt # 查看test.txt内容
cat -n test.txt # 查看内容并显示行号
cat -A test.txt # 显示所有字符(包括不可见字符)
cat file1.txt file2.txt > combined.txt # 合并多个文件
more 命令
more 命令用于分页查看文件内容,适合查看大文件。
more /etc/services # 分页查看系统服务文件
操作说明:
- 空格键:向下翻一页
- Enter 键:向下翻一行
- q:退出
- /关键字:搜索指定内容
less 命令
less 命令是 more 命令的增强版,功能更强大。
less /etc/services # 分页查看系统服务文件
操作说明:
- 空格键:向下翻一页
- b:向上翻一页
- 上下箭头:向上/向下翻一行
- q:退出
- /关键字:向下搜索
- ?关键字:向上搜索
- n:下一个匹配项
- N:上一个匹配项
head 命令
head 命令用于查看文件的头部内容。
head test.txt # 查看文件前10行
head -5 test.txt # 查看文件前5行
tail 命令
tail 命令用于查看文件的尾部内容,特别适合查看日志文件。
tail test.txt # 查看文件最后10行
tail -3 test.txt # 查看文件最后3行
tail -f test.txt # 实时跟踪文件变化(按Ctrl+C退出)
tail -F test.txt # 实时跟踪文件变化,即使文件被删除重建也能继续跟踪
3.7 复制命令 cp
cp 命令用于复制文件或目录。
基本用法:
cp test.txt test2.txt # 复制文件
cp -r Desktop Desktop2 # 递归复制目录(必须加-r选项)
cp test.txt /tmp/ # 复制文件到指定目录
cp -i test.txt /tmp/ # 复制前提示是否覆盖
cp -p test.txt /tmp/ # 复制文件并保留原文件的属性(权限、时间等)
cp -a test.txt /tmp/ # 等同于-dpR,完整复制文件属性和目录结构
cp file1.txt file2.txt file3.txt /tmp/ # 复制多个文件到指定目录
3.8 移动 / 重命名命令 mv
mv 命令用于移动文件或目录,也可以用于重命名。
基本用法:
mv test.txt Desktop/ # 移动文件到Desktop目录
mv test2.txt test3.txt # 重命名文件
mv itheima/ Desktop/ # 移动目录
mv -i test.txt /tmp/ # 移动前提示是否覆盖
mv file1.txt file2.txt /tmp/ # 移动多个文件到指定目录
3.9 删除命令 rm
rm 命令用于删除文件或目录,使用时需格外小心!
基本用法:
rm test.txt # 删除文件
rm -r test/ # 递归删除目录(必须加-r选项)
rm -rf test/ # 强制递归删除目录(无提示,非常危险!)
rm -i test.txt # 删除前提示确认
rm test1.txt test2.txt # 删除多个文件
rm test* # 删除所有以test开头的文件
rm *.txt # 删除所有.txt文件
⚠️ 超级警告:千万不要在 root 用户下执行 rm -rf / 或 rm -rf /*,这会格式化整个系统,导致所有数据丢失!
四、查找和过滤命令(高效工作必备)
4.1 查找命令位置 which
which 命令用于查找命令的可执行文件位置。
which ls # 查找ls命令位置
which pwd # 查找pwd命令位置
which java # 查找java命令位置
4.2 查找文件 find
find 命令用于在系统中查找文件,功能非常强大,是 Linux 中最重要的命令之一。
基本用法:
# 按文件名查找
find / -name "test.txt" # 在根目录查找test.txt(精确匹配)
find / -name "test*" # 查找所有以test开头的文件(通配符)
find / -name "*test" # 查找所有以test结尾的文件
find / -name "*test*" # 查找所有包含test的文件
find / -iname "test.txt" # 忽略大小写查找
# 按文件类型查找
find / -type f # 查找所有普通文件
find / -type d # 查找所有目录
find / -type l # 查找所有软链接
# 按文件大小查找
find /usr -size +100M # 查找/usr目录下大于100MB的文件
find / -size -10k # 查找系统中小于10KB的文件
find / -size 100M # 查找系统中等于100MB的文件
# 按修改时间查找
find / -mtime -7 # 查找7天内修改过的文件
find / -mtime +30 # 查找30天前修改过的文件
find / -mmin -60 # 查找60分钟内修改过的文件
# 按权限查找
find / -perm 755 # 查找权限为755的文件
find / -perm -4000 # 查找设置了SUID位的文件
# 对查找结果执行操作
find /tmp -name "*.log" -delete # 删除/tmp目录下所有.log文件
find / -name "test.txt" -exec ls -l {} \; # 对找到的文件执行ls -l命令
4.3 过滤内容 grep
grep 命令用于从文件中过滤包含指定关键字的行,是 Linux 中最常用的文本处理命令之一。
基本用法:
grep "itheima" test.txt # 过滤包含"itheima"的行
grep -n "code" test.txt # 过滤并显示行号
grep -i "itheima" test.txt # 忽略大小写
grep -v "itheima" test.txt # 显示不包含"itheima"的行
grep -c "itheima" test.txt # 统计包含"itheima"的行数
grep -o "itheima" test.txt # 只显示匹配的部分
grep -A 3 "itheima" test.txt # 显示匹配行及后面3行
grep -B 3 "itheima" test.txt # 显示匹配行及前面3行
grep -C 3 "itheima" test.txt # 显示匹配行及前后3行
grep -r "itheima" /etc/ # 递归查找/etc目录下所有包含"itheima"的文件
grep -E "it|heima" test.txt # 使用正则表达式,匹配it或heima
4.4 统计命令 wc
wc 命令用于统计文件的行数、单词数和字节数。
wc test.txt # 统计行数、单词数、字节数
wc -l test.txt # 只统计行数
wc -w test.txt # 只统计单词数
wc -c test.txt # 只统计字节数
wc -L test.txt # 显示最长行的长度
4.5 管道符 |
管道符 | 用于将左边命令的输出作为右边命令的输入,是 Linux 中非常重要的特性,可以组合多个命令完成复杂的操作。
常用组合:
ps -ef | grep sshd # 查找sshd进程
ls /etc | grep "net" # 查找/etc目录下包含"net"的文件
cat test.txt | grep itheima | wc -l # 统计包含itheima的行数
find / -name "*.log" | xargs grep "error" # 查找所有.log文件中包含error的行
netstat -anp | grep 80 # 查看80端口占用情况
五、输出和重定向
5.1 输出命令 echo
echo 命令用于在终端输出指定内容。
基本用法:
echo "Hello Linux" # 输出字符串
echo `pwd` # 输出命令执行结果(反引号)
echo $(pwd) # 输出命令执行结果($()方式,推荐)
echo "当前目录是:`pwd`" # 组合输出
echo -e "Hello\nLinux" # 输出转义字符(\n表示换行)
echo -e "\033[31m红色文字\033[0m" # 输出彩色文字
5.2 重定向符
重定向符用于将命令的输出写入到文件中,而不是显示在终端上。
基本用法:
echo "Hello Linux" > test.txt # 覆盖写入(如果文件不存在则创建,存在则覆盖)
echo "Hello itheima" >> test.txt # 追加写入(如果文件不存在则创建,存在则追加到末尾)
ls -l / > dir.txt # 将根目录列表写入文件
ls -l /home >> dir.txt # 将/home目录列表追加到文件末尾
cat < test.txt # 从文件读取输入
cat << EOF > test.txt # 多行输入
Hello Linux
Hello itheima
EOF
5.3 标准错误重定向
Linux 中有三种标准输入输出:
- 标准输入(stdin):文件描述符 0
- 标准输出(stdout):文件描述符 1
- 标准错误(stderr):文件描述符 2
标准错误重定向:
ls /nonexistent 2> error.txt # 将错误信息写入error.txt
ls /nonexistent > output.txt 2>&1 # 将标准输出和标准错误都写入output.txt
ls /nonexistent &> output.txt # 同上,简写形式
ls /nonexistent 2> /dev/null # 丢弃错误信息
六、vi/vim 编辑器(Linux 必备技能)
vi/vim 是 Linux 系统中最经典的文本编辑器,是每个 Linux 使用者必须掌握的工具。虽然学习曲线较陡,但一旦掌握,效率会非常高。
6.1 三种工作模式详解
vim 有三种工作模式,它们之间可以相互切换:
- 命令模式:默认模式,用于执行各种编辑命令(移动光标、删除、复制、粘贴等)
- 输入模式:用于输入文本内容
- 底线命令模式:用于保存、退出、搜索、替换等操作
模式切换:
- 命令模式 → 输入模式:按
i、a、o等键 - 输入模式 → 命令模式:按
ESC键 - 命令模式 → 底线命令模式:按
:键
6.2 基本操作
vim test.txt # 打开或创建test.txt
命令模式常用快捷键:
光标移动:
h:向左移动j:向下移动k:向上移动l:向右移动gg:跳到文件开头G:跳到文件结尾nG:跳到第n行0:跳到行首$:跳到行尾w:跳到下一个单词开头b:跳到上一个单词开头
编辑操作:
i:在当前光标位置插入a:在当前光标位置后插入o:在当前行下一行插入O:在当前行上一行插入dd:删除当前行ndd:删除从当前行开始的 n 行yy:复制当前行nyy:复制从当前行开始的 n 行p:粘贴到当前行下P:粘贴到当前行上u:撤销Ctrl+r:重做x:删除当前字符dw:删除当前单词cw:修改当前单词
底线命令模式常用命令:
:w:保存文件:q:退出:wq:保存并退出:q!:强制退出不保存:wq!:强制保存并退出:set nu:显示行号:set nonu:取消显示行号:set hlsearch:高亮显示搜索结果:set nohlsearch:取消高亮显示:/keyword:向下搜索关键字:?keyword:向上搜索关键字:n:跳转到第n行:%s/old/new/g:全局替换old为new:%s/old/new/gc:全局替换old为new,每次替换前确认:!command:执行外部命令
6.3 实用技巧
- 快速保存退出:在命令模式下按
ZZ(大写),等同于:wq - 快速退出不保存:在命令模式下按
ZQ(大写),等同于:q! - 复制粘贴系统剪贴板内容:需要安装 vim-gnome 或 vim-gtk 包,然后使用
"+y复制,"+p粘贴 - 多文件编辑:
vim file1.txt file2.txt,使用:n切换到下一个文件,:N切换到上一个文件 - 分屏编辑:
:sp水平分屏,:vsp垂直分屏,Ctrl+w+w在分屏间切换
七、用户和权限管理(系统安全核心)
7.1 root 用户与普通用户
Linux 系统中有两种用户:
- root 用户:超级管理员,拥有系统的最高权限,可以执行任何操作
- 普通用户:权限有限,只能操作自己家目录下的文件和一些系统命令
用户切换:
su - root # 切换到root用户(需要输入root密码)
exit # 退出root用户,回到普通用户
su - itheima # 切换到itheima用户
7.2 sudo 命令
sudo 命令可以让普通用户临时以 root 身份执行命令,这样可以避免直接使用 root 用户,提高系统安全性。
配置 sudo 权限:
- 切换到 root 用户
- 执行
visudo命令打开 sudo 配置文件 - 在文件最后添加以下内容:
itheima ALL=(ALL) NOPASSWD:ALLitheima:用户名ALL=(ALL):允许在任何主机上以任何用户身份执行命令NOPASSWD:ALL:执行任何命令都不需要输入密码
- 保存退出(按
ESC,输入:wq)
使用 sudo:
sudo mkdir /test # 普通用户创建根目录下的test文件夹
sudo ls /root # 查看root用户家目录
sudo yum install -y wget # 安装软件
7.3 用户和用户组管理
用户组管理:
groupadd itcast # 创建用户组
groupdel itcast # 删除用户组
groupmod -n newname oldname # 修改用户组名称
cat /etc/group # 查看所有用户组
用户管理:
useradd zhangsan # 创建用户
useradd -g itcast lisi # 创建用户并指定主用户组
useradd -G itcast,wheel wangwu # 创建用户并指定附加用户组
useradd -d /home/zhangsan zhangsan # 指定用户家目录
useradd -s /bin/bash zhangsan # 指定用户登录shell
userdel zhangsan # 删除用户(保留家目录)
userdel -r zhangsan # 删除用户及其家目录
id lisi # 查看用户信息
usermod -aG itcast lisi # 将用户添加到用户组(-a表示追加)
usermod -l newname oldname # 修改用户名
usermod -L zhangsan # 锁定用户
usermod -U zhangsan # 解锁用户
passwd zhangsan # 修改用户密码
cat /etc/passwd # 查看所有用户
7.4 权限管理详解
Linux 系统中每个文件和目录都有对应的权限,分为用户权限、用户组权限和其他用户权限。
查看权限:
ls -l
# 输出示例:
drwxr-xr-x. 2 itheima itheima 4096 5月 17 10:30 Desktop
-rw-r--r--. 1 itheima itheima 123 5月 17 10:30 test.txt
权限解析:
- 第 1 位:文件类型
d:目录-:普通文件l:软链接c:字符设备b:块设备
- 第 2-4 位:用户权限(文件所有者的权限)
- 第 5-7 位:用户组权限(文件所属组的权限)
- 第 8-10 位:其他用户权限(其他所有用户的权限)
权限含义:
r(read):读权限- 文件:可以查看文件内容
- 目录:可以列出目录内容
w(write):写权限- 文件:可以修改文件内容
- 目录:可以在目录中创建、删除、重命名文件
x(execute):执行权限- 文件:可以执行文件(脚本、程序)
- 目录:可以进入目录(cd)
数字表示权限:
r= 4w= 2x= 1
权限组合:
rwx= 4+2+1 = 7rw-= 4+2+0 = 6r-x= 4+0+1 = 5r--= 4+0+0 = 4---= 0+0+0 = 0
修改权限 chmod:
chmod 755 test.txt # 设置权限为rwxr-xr-x
chmod u=rwx,g=rx,o=x test.txt # 同上,符号方式
chmod u+x test.txt # 给用户添加执行权限
chmod g-w test.txt # 给用户组去掉写权限
chmod o+r test.txt # 给其他用户添加读权限
chmod -R 755 test/ # 递归修改目录及其下所有文件的权限
修改所有者 chown:
chown root test.txt # 修改文件所有者为root
chown :root test.txt # 修改文件所属组为root
chown root:root test.txt # 同时修改所有者和所属组
chown -R root:root test/ # 递归修改目录及其下所有文件的所有者和所属组
八、Linux 实用操作(日常工作必备)
8.1 常用快捷键
Ctrl + C:强制停止当前程序Ctrl + D:退出当前用户或程序Ctrl + L:清屏(等同于clear命令)Ctrl + R:搜索历史命令Ctrl + A:跳到命令开头Ctrl + E:跳到命令结尾Ctrl + U:删除光标到行首的内容Ctrl + K:删除光标到行尾的内容Ctrl + W:删除光标前的一个单词Ctrl + Y:粘贴刚才删除的内容Tab:自动补全命令和文件名(按两次显示所有可能的选项)history:查看历史命令!ls:执行上一次以ls开头的命令!!:执行上一条命令!n:执行第n条历史命令
8.2 软件安装 yum
CentOS 系统使用 yum 命令进行软件安装,它可以自动解决软件依赖问题。
基本用法:
yum install -y wget # 安装wget(-y表示自动确认)
yum remove -y wget # 卸载wget
yum search wget # 搜索wget软件包
yum list installed # 列出所有已安装的软件包
yum update # 更新所有软件包
yum update wget # 更新wget软件包
yum info wget # 查看软件包信息
yum clean all # 清理yum缓存
yum makecache # 生成yum缓存
配置国内yum源:
默认的 yum 源在国外,速度较慢,建议配置国内 yum 源(如阿里云、清华大学)。
# 备份原yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下载阿里云yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理缓存并生成新缓存
yum clean all
yum makecache
8.3 服务管理 systemctl
CentOS 7 使用 systemctl 命令管理系统服务,替代了之前的 service 和 chkconfig 命令。
基本用法:
systemctl start sshd # 启动sshd服务
systemctl stop sshd # 停止sshd服务
systemctl restart sshd # 重启sshd服务
systemctl status sshd # 查看sshd服务状态
systemctl enable sshd # 设置sshd开机自启
systemctl disable sshd # 取消sshd开机自启
systemctl is-enabled sshd # 查看sshd是否开机自启
systemctl list-units --type=service # 列出所有正在运行的服务
systemctl list-unit-files --type=service # 列出所有服务及其开机自启状态
8.4 软连接 ln
软连接类似于 Windows 系统中的快捷方式,它指向另一个文件或目录。
基本用法:
ln -s /etc/yum.conf ~/yum.conf # 创建软连接
ls -l ~/yum.conf # 查看软连接
rm ~/yum.conf # 删除软连接(不会删除原文件)
硬链接与软连接的区别:
- 硬链接:指向文件的物理地址,删除原文件后硬链接仍然有效
- 软连接:指向文件的路径,删除原文件后软连接失效
8.5 网络相关命令
ip addr # 查看网络配置(推荐)
ifconfig # 查看网络配置(需要安装net-tools)
ping baidu.com # 测试网络连通性
ping -c 3 baidu.com # 测试3次
ping -i 0.5 baidu.com # 每隔0.5秒测试一次
traceroute baidu.com # 跟踪路由
nslookup baidu.com # 域名解析
dig baidu.com # 域名解析(更详细)
wget http://example.com/file.tar.gz # 下载文件
wget -c http://example.com/file.tar.gz # 断点续传下载
curl http://example.com # 获取网页内容
curl cip.cc # 查看本机公网IP
hostname # 查看主机名
hostnamectl set-hostname newname # 修改主机名
8.6 端口和进程管理
进程管理:
ps -ef # 查看所有进程
ps aux # 查看所有进程(BSD风格)
ps -ef | grep sshd # 查找sshd进程
top # 实时查看进程状态
htop # 增强版top(需要安装)
kill 1234 # 结束进程号为1234的进程
kill -9 1234 # 强制结束进程
killall sshd # 结束所有sshd进程
pkill sshd # 结束所有sshd进程
端口管理:
# 安装工具
yum install -y nmap net-tools lsof
nmap 127.0.0.1 # 查看本机开放端口
netstat -anp | grep 22 # 查看22端口占用情况
netstat -tulnp # 查看所有监听的TCP和UDP端口
lsof -i :22 # 查看22端口被哪个进程占用
ss -tulnp # 查看所有监听的TCP和UDP端口(推荐,比netstat快)
8.7 文件上传下载
使用 lrzsz 工具:
# 安装lrzsz
yum install -y lrzsz
rz # 上传文件(会弹出文件选择窗口)
sz test.txt # 下载test.txt文件
使用 scp 命令:
scp 命令用于在不同主机之间传输文件。
# 从本地复制文件到远程主机
scp test.txt itheima@192.168.88.130:/home/itheima/
# 从远程主机复制文件到本地
scp itheima@192.168.88.130:/home/itheima/test.txt ./
# 复制目录
scp -r testdir itheima@192.168.88.130:/home/itheima/
8.8 压缩和解压
Linux 中最常用的压缩格式是 .tar.gz 和 .zip。
tar 命令:
tar 命令用于打包和压缩文件。
# 打包文件(不压缩)
tar -cvf test.tar 1.txt 2.txt
# 解压tar包
tar -xvf test.tar
# 打包并gzip压缩
tar -zcvf test.tar.gz 1.txt 2.txt
# 解压tar.gz包
tar -zxvf test.tar.gz
# 解压到指定目录
tar -zxvf test.tar.gz -C /tmp
# 打包并bzip2压缩
tar -jcvf test.tar.bz2 1.txt 2.txt
# 解压tar.bz2包
tar -jxvf test.tar.bz2
# 查看压缩包内容
tar -ztv
# 查看压缩包内容(不解压)
tar -ztv -f test.tar.gz # 查看tar.gz包内容
tar -jtv -f test.tar.bz2 # 查看tar.bz2包内容
tar -tv -f test.tar # 查看tar包内容
# 只解压压缩包中的特定文件
tar -zxvf test.tar.gz 1.txt # 只解压1.txt文件
# 排除特定文件进行打包
tar -zcvf test.tar.gz --exclude="*.log" ./ # 排除所有.log文件
tar 命令选项详解:
-c:创建新的压缩包-x:解压压缩包-v:显示详细过程-f:指定压缩包文件名(必须放在最后)-z:使用 gzip 压缩/解压-j:使用 bzip2 压缩/解压-C:指定解压到的目录-t:查看压缩包内容--exclude:排除指定文件
zip 和 unzip 命令
zip 和 unzip 用于处理 .zip 格式的压缩文件,与 Windows 系统兼容。
# 安装zip和unzip
yum install -y zip unzip
# 压缩文件
zip test.zip 1.txt 2.txt # 压缩多个文件
zip -r test.zip testdir/ # 递归压缩目录
zip -r test.zip . -x "*.log" # 压缩当前目录,排除.log文件
zip -P password test.zip 1.txt # 加密压缩(密码为password)
# 解压文件
unzip test.zip # 解压到当前目录
unzip test.zip -d /tmp/ # 解压到指定目录
unzip -l test.zip # 查看压缩包内容
unzip -P password test.zip # 解压加密压缩包
unzip -o test.zip # 覆盖已存在的文件
8.9 系统信息查看
# 查看系统信息
uname -a # 查看内核版本和系统架构
cat /etc/redhat-release # 查看CentOS版本
hostname # 查看主机名
hostnamectl # 查看详细主机信息
uptime # 查看系统运行时间和负载
who # 查看当前登录用户
w # 查看当前登录用户及其正在执行的命令
last # 查看最近登录记录
lastlog # 查看所有用户最后一次登录时间
# 查看硬件信息
lscpu # 查看CPU信息
free -h # 查看内存使用情况(人性化显示)
cat /proc/meminfo # 查看详细内存信息
df -h # 查看磁盘使用情况(人性化显示)
du -sh /var/log/ # 查看指定目录大小
lsblk # 查看磁盘分区信息
fdisk -l # 查看所有磁盘分区信息
lspci # 查看PCI设备信息
lsusb # 查看USB设备信息
dmidecode # 查看硬件详细信息(需要root权限)
8.10 系统关机和重启
# 关机
shutdown -h now # 立即关机
shutdown -h 20:00 # 晚上8点关机
shutdown -h +30 # 30分钟后关机
halt # 立即关机
poweroff # 立即关机
# 重启
shutdown -r now # 立即重启
shutdown -r +10 "系统将在10分钟后重启,请保存好数据" # 10分钟后重启并发送通知
reboot # 立即重启
# 取消关机/重启计划
shutdown -c # 取消已安排的关机或重启
九、系统监控与性能调优(运维必备)
9.1 实时系统监控
top 命令详解
top 是 Linux 中最常用的实时系统监控工具,可以动态查看系统进程和资源使用情况。
top # 启动top
top 界面详解:
- 第一行:系统时间、运行时间、登录用户数、系统平均负载(1分钟、5分钟、15分钟)
- 第二行:总进程数、运行中进程数、睡眠进程数、停止进程数、僵尸进程数
- 第三行:CPU使用率(us用户态、sy内核态、ni优先级、id空闲、wa等待IO、hi硬中断、si软中断、st虚拟机占用)
- 第四行:内存使用情况(总内存、已用内存、空闲内存、缓存)
- 第五行:交换分区使用情况
- 下面的列表:进程详细信息(PID、用户、CPU使用率、内存使用率、命令等)
top 常用快捷键:
P:按CPU使用率排序M:按内存使用率排序T:按运行时间排序1:显示所有CPU核心的使用情况k:杀死指定进程(输入PID)r:修改进程优先级q:退出toph:显示帮助信息
htop 命令
htop 是 top 命令的增强版,界面更友好,功能更强大。
# 安装htop
yum install -y epel-release
yum install -y htop
htop # 启动htop
htop 优势:
- 彩色界面,更易读
- 支持鼠标操作
- 可以垂直和水平滚动查看所有进程和完整命令
- 支持进程树视图
- 可以直接杀死进程,不需要输入PID
9.2 磁盘IO监控
iostat 命令
iostat 用于监控系统磁盘IO性能。
# 安装sysstat包
yum install -y sysstat
iostat # 查看系统启动以来的平均IO统计
iostat -d -x 1 10 # 每1秒显示一次详细磁盘IO信息,共显示10次
iostat -d sda 1 # 只监控sda磁盘
输出字段说明:
rMB/s:每秒读取的MB数wMB/s:每秒写入的MB数r/s:每秒读操作次数w/s:每秒写操作次数await:平均IO等待时间(毫秒)svctm:平均IO服务时间(毫秒)%util:磁盘使用率
iotop 命令
iotop 用于实时监控进程的磁盘IO使用情况。
# 安装iotop
yum install -y iotop
iotop # 启动iotop
iotop -o # 只显示有IO活动的进程
9.3 网络监控
iftop 命令
iftop 用于实时监控网络流量。
# 安装iftop
yum install -y epel-release
yum install -y iftop
iftop # 监控默认网卡
iftop -i eth0 # 监控eth0网卡
iftop -n # 不解析主机名,只显示IP地址
nload 命令
nload 用于实时监控网络带宽使用情况。
# 安装nload
yum install -y epel-release
yum install -y nload
nload # 监控默认网卡
nload eth0 # 监控eth0网卡
9.4 系统性能调优基础
关闭不必要的服务
# 查看所有开机自启的服务
systemctl list-unit-files --type=service | grep enabled
# 关闭不必要的服务
systemctl disable postfix # 关闭邮件服务
systemctl disable firewalld # 关闭防火墙(生产环境谨慎操作)
systemctl disable NetworkManager # 关闭网络管理服务(服务器通常使用静态IP)
调整文件描述符限制
Linux 默认限制每个进程最多打开 1024 个文件,对于高并发服务器来说这个值太小了。
# 查看当前限制
ulimit -n
# 临时修改(重启后失效)
ulimit -n 65535
# 永久修改
vim /etc/security/limits.conf
# 添加以下内容
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
调整内核参数
vim /etc/sysctl.conf
# 添加以下内容
# 优化网络参数
net.core.somaxconn = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
# 优化内存参数
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
# 使配置生效
sysctl -p
十、磁盘管理(深入理解)
10.1 磁盘分区基础
Linux 系统中磁盘设备命名规则:
- IDE 硬盘:
/dev/hda、/dev/hdb等 - SATA/SAS/SSD 硬盘:
/dev/sda、/dev/sdb等 - 虚拟磁盘:
/dev/vda、/dev/vdb等
分区命名规则:
- 主分区:
/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4(最多4个主分区) - 扩展分区:其中一个主分区可以作为扩展分区
- 逻辑分区:在扩展分区中创建,从
/dev/sda5开始
10.2 磁盘分区操作
使用 fdisk 进行分区
fdisk 是传统的磁盘分区工具,支持 MBR 分区表。
# 对/dev/sdb磁盘进行分区
fdisk /dev/sdb
fdisk 常用命令:
n:创建新分区p:创建主分区e:创建扩展分区d:删除分区p:显示分区表w:保存分区表并退出q:不保存退出
分区示例:
# 1. 输入n创建新分区
Command (m for help): n
# 2. 选择主分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
# 3. 选择分区号(默认1)
Partition number (1-4, default 1): 1
# 4. 选择起始扇区(默认即可)
First sector (2048-41943039, default 2048):
# 5. 选择结束扇区(+10G表示10GB大小)
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
# 6. 保存分区表
Command (m for help): w
使用 parted 进行分区
parted 是更现代的磁盘分区工具,支持 GPT 分区表(支持大于2TB的磁盘)。
# 对/dev/sdb磁盘进行分区
parted /dev/sdb
# 创建GPT分区表
(parted) mklabel gpt
# 创建分区
(parted) mkpart primary 0% 50% # 创建第一个分区,使用前50%空间
(parted) mkpart primary 50% 100% # 创建第二个分区,使用后50%空间
# 查看分区表
(parted) print
# 退出
(parted) quit
10.3 文件系统格式化
分区创建完成后,需要格式化文件系统才能使用。Linux 中常用的文件系统有 ext4、xfs 等。
# 格式化为ext4文件系统
mkfs.ext4 /dev/sdb1
# 格式化为xfs文件系统(CentOS 7默认)
mkfs.xfs /dev/sdb2
# 强制格式化(如果分区已有文件系统)
mkfs.ext4 -f /dev/sdb1
10.4 挂载和卸载磁盘
临时挂载
# 创建挂载点
mkdir /data
# 挂载磁盘
mount /dev/sdb1 /data
# 查看挂载情况
df -h
mount
永久挂载
临时挂载在系统重启后会失效,需要修改 /etc/fstab 文件实现永久挂载。
# 查看磁盘UUID(推荐使用UUID挂载,比设备名更稳定)
blkid /dev/sdb1
# 输出示例:/dev/sdb1: UUID="12345678-1234-1234-1234-1234567890ab" TYPE="ext4"
# 编辑/etc/fstab文件
vim /etc/fstab
# 添加以下内容
UUID=12345678-1234-1234-1234-1234567890ab /data ext4 defaults 0 0
# 使配置生效
mount -a
/etc/fstab 字段说明:
- 设备名或UUID
- 挂载点
- 文件系统类型
- 挂载选项(defaults表示默认选项:rw, suid, dev, exec, auto, nouser, async)
- 转储选项(0表示不备份)
- 自检选项(0表示不自检,1表示优先自检,2表示次要自检)
卸载磁盘
umount /data # 通过挂载点卸载
umount /dev/sdb1 # 通过设备名卸载
# 强制卸载(当磁盘被占用时)
umount -l /data
10.5 交换分区(swap)管理
交换分区是当物理内存不足时,系统会将一部分硬盘空间虚拟成内存使用。
创建交换分区
# 1. 创建一个2GB的交换文件
dd if=/dev/zero of=/swapfile bs=1M count=2048
# 2. 设置文件权限
chmod 600 /swapfile
# 3. 格式化为交换文件
mkswap /swapfile
# 4. 启用交换文件
swapon /swapfile
# 5. 永久生效
vim /etc/fstab
# 添加以下内容
/swapfile swap swap defaults 0 0
查看和关闭交换分区
# 查看交换分区使用情况
free -h
swapon -s
# 关闭交换分区
swapoff /swapfile
十一、定时任务(自动化运维基础)
Linux 中使用 cron 服务来执行定时任务,它可以让系统在指定的时间自动执行指定的命令或脚本。
11.1 crontab 基本语法
# 编辑当前用户的定时任务
crontab -e
# 查看当前用户的定时任务
crontab -l
# 删除当前用户的所有定时任务
crontab -r
# 编辑指定用户的定时任务(需要root权限)
crontab -u username -e
crontab 时间格式:
* * * * * command
分 时 日 月 周 要执行的命令
- 第1位:分钟(0-59)
- 第2位:小时(0-23)
- 第3位:日期(1-31)
- 第4位:月份(1-12)
- 第5位:星期(0-7,0和7都表示星期日)
特殊符号:
*:表示任意时间,:表示多个时间点,如1,3,5表示1、3、5-:表示时间范围,如1-5表示1到5/:表示每隔多久,如*/5表示每隔5分钟
11.2 常用定时任务示例
# 每分钟执行一次
* * * * * /root/script.sh
# 每5分钟执行一次
*/5 * * * * /root/script.sh
# 每天凌晨2点执行
0 2 * * * /root/backup.sh
# 每周一凌晨3点执行
0 3 * * 1 /root/clean_log.sh
# 每月1号凌晨4点执行
0 4 1 * * /root/monthly_report.sh
# 每天的8点到18点每小时执行一次
0 8-18 * * * /root/check_service.sh
# 每天的8点和18点各执行一次
0 8,18 * * * /root/send_email.sh
# 每隔10天凌晨5点执行一次
0 5 */10 * * /root/update.sh
11.3 定时任务注意事项
- 环境变量问题:cron 执行时的环境变量与用户登录时的环境变量不同,建议在脚本中使用绝对路径
- 输出重定向:如果脚本有输出,建议重定向到文件,否则系统会发送邮件给用户
0 2 * * * /root/backup.sh >> /var/log/backup.log 2>&1 - 权限问题:确保执行脚本的用户有足够的权限
- 时间同步:确保系统时间准确,否则定时任务会在错误的时间执行
- 避免同时运行多个相同任务:可以使用
flock命令防止脚本重复执行* * * * * /usr/bin/flock -n /tmp/script.lock /root/script.sh
11.4 系统级定时任务
除了用户级的 crontab,系统还有全局的定时任务配置文件:
/etc/crontab:系统全局定时任务配置文件/etc/cron.d/:存放系统定时任务的目录/etc/cron.hourly/:每小时执行的脚本/etc/cron.daily/:每天执行的脚本/etc/cron.weekly/:每周执行的脚本/etc/cron.monthly/:每月执行的脚本
十二、Shell 脚本入门(自动化运维核心)
Shell 脚本是将一系列 Linux 命令组合在一起,形成一个可执行的文件,用于自动化完成各种任务。
12.1 第一个 Shell 脚本
# 创建脚本文件
vim hello.sh
# 写入以下内容
#!/bin/bash
# 这是我的第一个Shell脚本
echo "Hello World!"
echo "当前时间是:$(date)"
# 赋予执行权限
chmod +x hello.sh
# 执行脚本
./hello.sh
脚本说明:
#!/bin/bash:指定脚本使用的解释器#:注释,不会被执行echo:输出内容$(date):执行 date 命令并获取输出
12.2 Shell 变量
定义和使用变量
#!/bin/bash
# 定义变量
name="张三"
age=20
# 使用变量
echo "姓名:$name"
echo "年龄:$age"
echo "姓名:${name}" # 推荐使用大括号包裹变量名,避免歧义
特殊变量
#!/bin/bash
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "所有参数:$*"
echo "所有参数:$@"
echo "参数个数:$#"
echo "上一个命令的退出状态:$?"
echo "当前进程ID:$$"
echo "后台运行的最后一个进程ID:$!"
12.3 条件判断
if 语句
#!/bin/bash
# 基本if语句
if [ $age -gt 18 ]; then
echo "成年人"
fi
# if-else语句
if [ $age -gt 18 ]; then
echo "成年人"
else
echo "未成年人"
fi
# if-elif-else语句
if [ $score -ge 90 ]; then
echo "优秀"
elif [ $score -ge 80 ]; then
echo "良好"
elif [ $score -ge 60 ]; then
echo "及格"
else
echo "不及格"
fi
条件判断运算符
数值比较:
-eq:等于-ne:不等于-gt:大于-lt:小于-ge:大于等于-le:小于等于
字符串比较:
=:等于!=:不等于-z:字符串长度为0-n:字符串长度不为0
文件判断:
-f:是普通文件-d:是目录-e:文件存在-r:文件可读-w:文件可写-x:文件可执行
12.4 循环
for 循环
#!/bin/bash
# 遍历数字
for i in {1..5}; do
echo "数字:$i"
done
# 遍历文件
for file in *.txt; do
echo "文件:$file"
done
# C语言风格for循环
for ((i=1; i<=5; i++)); do
echo "数字:$i"
done
while 循环
#!/bin/bash
# 基本while循环
i=1
while [ $i -le 5 ]; do
echo "数字:$i"
i=$((i+1))
done
# 无限循环
while true; do
echo "正在运行..."
sleep 1
done
12.5 函数
#!/bin/bash
# 定义函数
say_hello() {
echo "Hello, $1!"
}
# 调用函数
say_hello "张三"
say_hello "李四"
# 带返回值的函数
add() {
return $(( $1 + $2 ))
}
add 3 5
echo "3+5=$?"
12.6 实用 Shell 脚本示例
备份脚本
#!/bin/bash
# 数据库备份脚本
# 定义变量
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
DB_NAME="his_db"
DB_USER="root"
DB_PASS="123456"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DB_NAME-$DATE.sql
# 压缩备份文件
tar -zcvf $BACKUP_DIR/$DB_NAME-$DATE.tar.gz $BACKUP_DIR/$DB_NAME-$DATE.sql
# 删除原始备份文件
rm -f $BACKUP_DIR/$DB_NAME-$DATE.sql
# 删除7天前的备份文件
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
echo "数据库备份完成:$BACKUP_DIR/$DB_NAME-$DATE.tar.gz"
服务监控脚本
#!/bin/bash
# 服务监控脚本
# 定义要监控的服务
SERVICES=("sshd" "nginx" "mysql")
for service in "${SERVICES[@]}"; do
# 检查服务状态
if systemctl is-active --quiet $service; then
echo "$service 服务正在运行"
else
echo "$service 服务已停止,正在重启..."
systemctl start $service
# 检查重启是否成功
if systemctl is-active --quiet $service; then
echo "$service 服务重启成功"
else
echo "$service 服务重启失败,请检查!"
fi
fi
done
十三、常见问题排查(运维实战)
13.1 系统无法启动
- 检查硬件:电源、硬盘、内存是否正常
- 进入单用户模式:
- 重启系统,在 GRUB 菜单按
e进入编辑模式 - 在
linux16行末尾添加init=/bin/bash - 按
Ctrl+x启动系统 - 执行
mount -o remount,rw /重新挂载根目录为可写 - 修复问题(如修改错误的配置文件)
- 执行
exec /sbin/init正常启动系统
- 重启系统,在 GRUB 菜单按
- 使用救援模式:如果单用户模式无法进入,可以使用系统安装盘进入救援模式
13.2 系统运行缓慢
- 检查系统负载:使用
top、uptime命令查看系统负载 - 检查CPU使用率:使用
top命令按P排序,找出CPU使用率高的进程 - 检查内存使用情况:使用
free -h、top命令按M排序 - 检查磁盘IO:使用
iostat、iotop命令 - 检查网络:使用
iftop、nload命令 - 检查日志:查看
/var/log/messages、/var/log/secure等日志文件
13.3 磁盘空间不足
- 查看磁盘使用情况:
df -h - 查找大文件:
find / -type f -size +100M -exec ls -lh {} \; | sort -k 5 -r - 清理临时文件:
rm -rf /tmp/* yum clean all - 清理日志文件:
echo > /var/log/messages echo > /var/log/secure - 查找大目录:
du -sh /* | sort -hr
13.4 网络连接问题
- 检查网络接口:
ip addr - 检查网关:
ip route - 测试连通性:
ping 网关IP、ping 8.8.8.8 - 测试域名解析:
nslookup baidu.com - 检查防火墙:
systemctl status firewalld - 检查端口:
ss -tulnp、lsof -i :端口号
十四、学习资源与进阶方向
14.1 推荐学习资源
- 书籍:《鸟哥的Linux私房菜》(基础篇+服务器篇)、《Linux命令行与Shell脚本编程大全》
- 网站:Linux中国、菜鸟教程、Linux公社
- 视频:黑马程序员Linux教程、尚硅谷Linux教程
- 社区:Stack Overflow、CSDN、掘金
14.2 进阶学习方向
- Linux 系统管理:深入学习系统调优、安全加固、集群管理
- Shell 脚本编程:掌握高级Shell脚本编写技巧
- Python 运维开发:使用Python编写自动化运维工具
- 云计算:学习OpenStack、Docker、Kubernetes
- 网络安全:学习Linux系统安全、渗透测试
- 数据库:学习MySQL、Oracle、MongoDB等数据库管理
结语
Linux 的学习核心是 “实践”—— 别怕输错命令,多敲多练,遇到错误就去搜(百度 / Google 是最好的老师)。这篇教程覆盖了从入门到进阶的核心内容,跟着步骤操作一遍,你就能胜任 80% 的日常 Linux 工作了。
当然,Linux 是一个博大精深的操作系统,这篇教程只是一个开始。要真正精通 Linux,还需要在实际工作中不断练习和积累经验。记住,实践是最好的老师,多动手操作,多解决实际问题,你会发现 Linux 其实并没有那么难。
希望这篇教程能够帮助你顺利进入 Linux 的世界,成为一名优秀的 IT 从业者!如果在学习中遇到问题,欢迎在评论区留言,我会尽力解答!祝你早日成为 Linux 高手! 🐧


被折叠的 条评论
为什么被折叠?



