从零开始学 Linux:从环境搭建到核心命令全攻略

从零开始学 Linux:从环境搭建到核心命令全攻略

摘要:本文是一份从零开始的 Linux 学习全攻略,涵盖环境搭建(VMware + CentOS 7)、核心命令(文件操作、查找过滤、权限管理)、vi/vim 编辑器、Shell 脚本入门及常见问题排查。全文以实战为导向,每个命令都配有详细示例,适合后端开发、运维、数据分析等方向的初学者快速上手。

前言:为什么 Linux 是 IT 人的必修课?

在数字化时代,Linux 早已不是小众的操作系统。作为开源软件的典范,它支撑着全球互联网的基础设施 —— 从你刷的短视频、网购的订单,到云计算、大数据、人工智能的后台,97% 以上的服务器都运行在 Linux 之上。
对于 IT 从业者而言,Linux 是绕不开的核心技能:

  • 后端开发: 部署服务、调试环境、排查线上问题,离不开 Linux;
  • 运维工程师: 服务器管理、集群维护、自动化运维,Linux 是基本功;
  • 数据分析 / AI: 训练模型、处理海量数据,Linux 的高性能和稳定性无可替代;
  • 网络安全: 渗透测试、漏洞挖掘、应急响应,Linux 是主要战场。

很多初学者对 Linux 的 “纯命令行” 望而生畏,但其实它并不难学。这篇文章将从 Linux 系统简介​ 开始,带你一步步完成环境搭建、核心命令学习、权限管理、脚本编写,跟着做就能学会!
在这里插入图片描述

文章目录

内容大纲

在这里插入图片描述
Linux的背景:

  1. Linux的诞生
    Linux由林纳斯 托瓦兹在1991年创立并发展至今成为服务器操作系统领域的核心系统。
  2. 什么是Linux系统的内核
    内核提供了Linux系统的主要功能,如硬件调度管理的能力。
    Linux内核是免费开源的,任何人都可以查看内核的源代码,甚至是贡献源代码。
  3. 什么是Linux系统发行版
    内核无法被用户直接使用,需要配合应用程序才能被用户使用。
    在内核之上,封装系统级应用程序,组合在一起就称之为Linux发行版。

一、Linux 环境搭建(超详细步骤)

1.1 虚拟机软件安装(VMware Workstation Pro 17)

虚拟机软件可以让你在不影响主操作系统的情况下,在电脑上运行多个独立的操作系统。

具体的可以参考我之前专栏博客的文章:https://blog.csdn.net/yxn4065/category_12126308.html

Windows 系统安装步骤:
  1. 下载 VMware Workstation Pro 17 安装包(官网下载或国内镜像站)
  2. 双击运行安装程序,点击"下一步"
  3. 接受许可协议,点击"下一步"
  4. 选择安装位置(建议安装在非系统盘,如 D:\Program Files\VMware\VMware Workstation\)
  5. 取消勾选"启动时检查产品更新"和"加入 VMware 客户体验提升计划"
  6. 点击"下一步",然后点击"安装"
  7. 等待安装完成,点击"完成"
  8. 输入许可证密钥激活软件(可试用30天)
Mac 系统安装步骤:
  1. 下载 VMware Fusion Pro 13 安装包
  2. 双击打开 DMG 文件,将 VMware Fusion 拖入 Applications 文件夹
  3. 打开 VMware Fusion,按照提示完成安装
  4. 输入许可证密钥激活软件

1.2 CentOS 7 系统完整安装流程

CentOS 7 是目前企业中使用最广泛的 Linux 发行版之一,稳定性极高,非常适合学习和生产环境使用。

准备工作:
  • 下载 CentOS 7 镜像文件(推荐下载 Minimal 最小化安装版,约1GB)
  • 确保电脑有至少 20GB 空闲磁盘空间
  • 确保电脑内存至少 4GB(建议 8GB 以上)
详细安装步骤:
  1. 创建新虚拟机

    • 打开 VMware Workstation,点击"创建新的虚拟机"
    • 选择"典型(推荐)“,点击"下一步”
    • 选择"安装程序光盘镜像文件(ISO)",浏览并选择下载的 CentOS 7 ISO 文件
    • 点击"下一步",输入虚拟机名称(如 CentOS7-Learn),选择虚拟机存储位置
    • 设置磁盘大小为 20GB,选择"将虚拟磁盘存储为单个文件"
    • 点击"下一步",然后点击"完成"
  2. 调整虚拟机硬件配置

    • 点击"编辑虚拟机设置"
    • 内存:设置为 2GB(如果电脑内存充足,可设置为 4GB)
    • 处理器:设置为 2 核
    • 网络适配器:确保选择"NAT 模式"
    • 点击"确定"保存设置
  3. 启动虚拟机并安装系统

    • 点击"开启此虚拟机"
    • 选择 “Install CentOS 7”(按回车键)
    • 等待系统加载完成,进入安装界面
    • 语言选择:中文(简体),点击"继续"
    • 安装信息摘要界面:
      • 日期和时间:选择亚洲/上海时区
      • 键盘:默认中文(中国)
      • 语言支持:默认中文(中国)
      • 安装源:默认本地介质
      • 软件选择
        • 新手推荐:GNOME 桌面(包含图形界面,方便操作)
        • 进阶推荐:最小安装(纯命令行,占用资源少)
      • 安装位置
        • 点击进入,选择"自动配置分区"
        • 点击"完成",系统会自动创建分区
      • 网络和主机名
        • 打开以太网开关
        • 设置主机名(如 centos7-learn)
        • 点击"应用"
    • 点击"开始安装"
    • 设置 root 密码(务必记住! 建议设置为简单易记的,如 123456)
    • 创建普通用户(如 itheima,密码也设置为 123456)
    • 等待安装完成(约10-15分钟)
    • 点击"重启"
  4. 首次启动系统

    • 接受许可证协议
    • 完成初始设置,进入系统

1.3 FinalShell 远程连接工具详细配置

在虚拟机中直接操作 Linux 命令行不太方便,我们使用 FinalShell 这款优秀的远程连接工具,它支持 SSH、SFTP 等多种协议,界面友好,功能强大。

下载安装:

注意:如果上述链接无法访问,可以在百度搜索"FinalShell 官网"下载最新版本。

详细连接步骤:
  1. 获取 Linux 系统 IP 地址

    • 在 Linux 系统中打开终端(图形界面右键点击桌面,选择"打开终端")
    • 输入命令:ip addr(CentOS 7 推荐使用,ifconfig 可能需要额外安装)
    • 找到以 ens33 开头的网卡信息,记录 inet 后面的 IP 地址(如 192.168.88.130)
  2. 在 FinalShell 中新建 SSH 连接

    • 打开 FinalShell,点击左上角的"文件夹"图标
    • 点击"新建" -> “SSH连接(Linux)”
    • 填写连接信息:
      • 名称:CentOS7-Learn(自定义)
      • 主机:刚才记录的 IP 地址(如 192.168.88.130)
      • 端口:22(默认)
      • 用户名:imy(刚才创建的普通用户)
      • 密码:123456(刚才设置的密码)
    • 点击"确定"保存
  3. 连接 Linux 系统

    • 双击刚才创建的连接
    • 第一次连接会弹出"主机密钥确认"窗口,点击"接受并保存"
    • 连接成功后,你就可以在 FinalShell 中操作 Linux 系统了!

在这里插入图片描述

FinalShell 实用技巧:
  • 文件传输:直接将 Windows 上的文件拖到 FinalShell 窗口即可上传到 Linux
  • 多标签页:可以同时打开多个 SSH 连接
  • 命令历史:按上下箭头可以快速调用之前执行过的命令
  • 快捷键:Ctrl+C 复制,Ctrl+V 粘贴(FinalShell 已自动适配)

1.4 虚拟机快照与克隆

为了防止系统损坏后需要重新安装,我们可以使用虚拟机的快照和克隆功能。

拍摄快照:
  1. 关闭虚拟机(点击"虚拟机" -> “电源” -> “关闭客户机”)
  2. 右键点击虚拟机 -> “快照” -> “拍摄快照”
  3. 输入快照名称(如 “初始安装完成”)和描述
  4. 点击"拍摄快照"
恢复快照:
  1. 关闭虚拟机
  2. 右键点击虚拟机 -> “快照” -> 选择要恢复的快照
  3. 点击"转到",确认恢复
克隆虚拟机:
  1. 关闭虚拟机
  2. 右键点击虚拟机 -> “管理” -> “克隆”
  3. 点击"下一步",选择"现有快照"
  4. 选择"创建完整克隆"
  5. 输入克隆虚拟机的名称和存储位置
  6. 点击"完成"

二、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 517 10:30 Desktop
-rw-r--r--. 1 itheima itheima  123 517 10:30 test.txt

输出信息从左到右依次为:

  1. 文件类型和权限
  2. 硬链接数
  3. 文件所有者
  4. 文件所属组
  5. 文件大小(字节)
  6. 最后修改时间
  7. 文件名

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 有三种工作模式,它们之间可以相互切换:

  1. 命令模式:默认模式,用于执行各种编辑命令(移动光标、删除、复制、粘贴等)
  2. 输入模式:用于输入文本内容
  3. 底线命令模式:用于保存、退出、搜索、替换等操作

模式切换

  • 命令模式 → 输入模式:按 iao 等键
  • 输入模式 → 命令模式:按 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 权限:
  1. 切换到 root 用户
  2. 执行 visudo 命令打开 sudo 配置文件
  3. 在文件最后添加以下内容:
    itheima ALL=(ALL) NOPASSWD:ALL
    
    • itheima:用户名
    • ALL=(ALL):允许在任何主机上以任何用户身份执行命令
    • NOPASSWD:ALL:执行任何命令都不需要输入密码
  4. 保存退出(按 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 517 10:30 Desktop
-rw-r--r--. 1 itheima itheima  123 517 10:30 test.txt
权限解析:
  • 第 1 位:文件类型
    • d:目录
    • -:普通文件
    • l:软链接
    • c:字符设备
    • b:块设备
  • 第 2-4 位:用户权限(文件所有者的权限)
  • 第 5-7 位:用户组权限(文件所属组的权限)
  • 第 8-10 位:其他用户权限(其他所有用户的权限)
权限含义:
  • r(read):读权限
    • 文件:可以查看文件内容
    • 目录:可以列出目录内容
  • w(write):写权限
    • 文件:可以修改文件内容
    • 目录:可以在目录中创建、删除、重命名文件
  • x(execute):执行权限
    • 文件:可以执行文件(脚本、程序)
    • 目录:可以进入目录(cd)
数字表示权限:
  • r = 4
  • w = 2
  • x = 1

权限组合:

  • rwx = 4+2+1 = 7
  • rw- = 4+2+0 = 6
  • r-x = 4+0+1 = 5
  • r-- = 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 命令管理系统服务,替代了之前的 servicechkconfig 命令。

基本用法

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:排除指定文件
zipunzip 命令

zipunzip 用于处理 .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:退出top
  • h:显示帮助信息
htop 命令

htoptop 命令的增强版,界面更友好,功能更强大。

# 安装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 字段说明

  1. 设备名或UUID
  2. 挂载点
  3. 文件系统类型
  4. 挂载选项(defaults表示默认选项:rw, suid, dev, exec, auto, nouser, async)
  5. 转储选项(0表示不备份)
  6. 自检选项(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 定时任务注意事项

  1. 环境变量问题:cron 执行时的环境变量与用户登录时的环境变量不同,建议在脚本中使用绝对路径
  2. 输出重定向:如果脚本有输出,建议重定向到文件,否则系统会发送邮件给用户
    0 2 * * * /root/backup.sh >> /var/log/backup.log 2>&1
    
  3. 权限问题:确保执行脚本的用户有足够的权限
  4. 时间同步:确保系统时间准确,否则定时任务会在错误的时间执行
  5. 避免同时运行多个相同任务:可以使用 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 系统无法启动

  1. 检查硬件:电源、硬盘、内存是否正常
  2. 进入单用户模式
    • 重启系统,在 GRUB 菜单按 e 进入编辑模式
    • linux16 行末尾添加 init=/bin/bash
    • Ctrl+x 启动系统
    • 执行 mount -o remount,rw / 重新挂载根目录为可写
    • 修复问题(如修改错误的配置文件)
    • 执行 exec /sbin/init 正常启动系统
  3. 使用救援模式:如果单用户模式无法进入,可以使用系统安装盘进入救援模式

13.2 系统运行缓慢

  1. 检查系统负载:使用 topuptime 命令查看系统负载
  2. 检查CPU使用率:使用 top 命令按 P 排序,找出CPU使用率高的进程
  3. 检查内存使用情况:使用 free -htop 命令按 M 排序
  4. 检查磁盘IO:使用 iostatiotop 命令
  5. 检查网络:使用 iftopnload 命令
  6. 检查日志:查看 /var/log/messages/var/log/secure 等日志文件

13.3 磁盘空间不足

  1. 查看磁盘使用情况df -h
  2. 查找大文件
    find / -type f -size +100M -exec ls -lh {} \; | sort -k 5 -r
    
  3. 清理临时文件
    rm -rf /tmp/*
    yum clean all
    
  4. 清理日志文件
    echo > /var/log/messages
    echo > /var/log/secure
    
  5. 查找大目录
    du -sh /* | sort -hr
    

13.4 网络连接问题

  1. 检查网络接口ip addr
  2. 检查网关ip route
  3. 测试连通性ping 网关IPping 8.8.8.8
  4. 测试域名解析nslookup baidu.com
  5. 检查防火墙systemctl status firewalld
  6. 检查端口ss -tulnplsof -i :端口号

十四、学习资源与进阶方向

14.1 推荐学习资源

  • 书籍:《鸟哥的Linux私房菜》(基础篇+服务器篇)、《Linux命令行与Shell脚本编程大全》
  • 网站:Linux中国、菜鸟教程、Linux公社
  • 视频:黑马程序员Linux教程、尚硅谷Linux教程
  • 社区:Stack Overflow、CSDN、掘金

14.2 进阶学习方向

  1. Linux 系统管理:深入学习系统调优、安全加固、集群管理
  2. Shell 脚本编程:掌握高级Shell脚本编写技巧
  3. Python 运维开发:使用Python编写自动化运维工具
  4. 云计算:学习OpenStack、Docker、Kubernetes
  5. 网络安全:学习Linux系统安全、渗透测试
  6. 数据库:学习MySQL、Oracle、MongoDB等数据库管理

结语

Linux 的学习核心是 “实践”—— 别怕输错命令,多敲多练,遇到错误就去搜(百度 / Google 是最好的老师)。这篇教程覆盖了从入门到进阶的核心内容,跟着步骤操作一遍,你就能胜任 80% 的日常 Linux 工作了。

当然,Linux 是一个博大精深的操作系统,这篇教程只是一个开始。要真正精通 Linux,还需要在实际工作中不断练习和积累经验。记住,实践是最好的老师,多动手操作,多解决实际问题,你会发现 Linux 其实并没有那么难。

希望这篇教程能够帮助你顺利进入 Linux 的世界,成为一名优秀的 IT 从业者!如果在学习中遇到问题,欢迎在评论区留言,我会尽力解答!祝你早日成为 Linux 高手! 🐧

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python-AI Xenon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值