Linux教程 / 第 10 节

第1章:Linux系统基础认知

了解Linux系统,开启命令行之旅

本章目标

  • 了解Linux系统的历史和特点
  • 认识常见的Linux发行版
  • 理解终端和Shell的概念
  • 掌握命令行基本语法
  • 学会使用帮助系统

1.1 Linux系统简介

1.1.1 什么是Linux?

Linux是一个免费开源的类Unix操作系统,由芬兰学生Linus Torvalds于1991年创建。

Linux的特点:

  • 🆓 开源免费: 源代码完全开放
  • 🔒 安全稳定: 权限管理严格,系统稳定
  • 🚀 高性能: 资源占用少,运行高效
  • 🌍 广泛应用: 服务器、嵌入式、超级计算机
  • 👥 社区支持: 庞大的开发者社区

Linux vs Windows vs macOS

特性LinuxWindowsmacOS
开源✅ 是❌ 否❌ 否
免费✅ 是❌ 否❌ 否
命令行✅ 强大⚠️ 一般✅ 强大
服务器占有率✅ 90%+⚠️ <10%❌ 很少
桌面易用性⚠️ 一般✅ 好✅ 好

1.1.2 为什么开发者要学Linux?

1. 服务器环境

  • 90%以上的服务器运行Linux
  • 云服务器(阿里云、AWS、腾讯云)默认使用Linux
  • 部署应用必须掌握Linux命令

2. 开发工具

  • Docker、Kubernetes等容器技术基于Linux
  • 大数据、AI框架主要运行在Linux上
  • 开源项目大多在Linux环境开发

3. 职业发展

  • 运维工程师必备技能
  • 后端开发者核心能力
  • DevOps工程师基础要求

4. 效率提升

  • 命令行操作比图形界面更高效
  • 自动化脚本节省大量时间
  • 远程管理服务器更便捷

1.1.3 常见Linux发行版

Linux有很多发行版(Distribution),每个都有自己的特点:

🔵 Debian系

Debian (最稳定)
  ↓
Ubuntu (最流行,新手友好)
  ↓
Linux Mint (桌面体验好)

🔴 Red Hat系

Red Hat Enterprise Linux (企业级)
  ↓
CentOS (免费的企业级,已停止维护)
  ↓
Rocky Linux / AlmaLinux (CentOS替代品)
  ↓
Fedora (最新技术)

🟢 其他流行发行版

  • Arch Linux: 极简主义,滚动更新
  • openSUSE: 企业级,YaST配置工具
  • Kali Linux: 安全测试专用

发行版选择建议

用途推荐发行版理由
新手学习Ubuntu文档丰富,社区活跃
服务器Ubuntu Server / Rocky Linux稳定可靠
云服务器Ubuntu / CentOS云厂商默认支持
桌面使用Ubuntu / Linux Mint界面友好
开发环境Ubuntu / Fedora软件包丰富

1.2 终端与Shell基础

1.2.1 什么是终端(Terminal)?

终端是与Linux系统交互的文本界面,也叫命令行界面(CLI)。

图形界面 vs 命令行

图形界面(GUI):  [图标] [菜单] [按钮]  ← 鼠标点击
命令行(CLI):    $ command [options] [arguments]  ← 键盘输入

为什么使用命令行?

  • 效率高: 一条命令完成复杂操作
  • 🔄 可重复: 命令可以保存和重复执行
  • 🤖 可自动化: 编写脚本批量处理
  • 🌐 远程管理: SSH连接远程服务器
  • 💪 功能强大: 很多功能只有命令行才有

打开终端的方法

Ubuntu/Debian:

  • 快捷键: Ctrl + Alt + T
  • 或搜索: “Terminal”

macOS:

  • 快捷键: Cmd + Space 搜索 “Terminal”
  • 或: 应用程序 → 实用工具 → 终端

Windows (WSL):

  • 开始菜单搜索: “Ubuntu” 或 “WSL”

1.2.2 什么是Shell?

Shell是命令解释器,负责接收用户输入的命令并执行。

常见的Shell

Shell全称特点使用率
bashBourne Again Shell最常用,功能强大⭐⭐⭐⭐⭐
zshZ Shell功能更强,可定制性高⭐⭐⭐⭐
fishFriendly Interactive Shell用户友好,智能提示⭐⭐⭐
shBourne Shell最原始,兼容性好⭐⭐

查看当前使用的Shell

# 查看当前Shell
echo $SHELL
# 输出: /bin/bash

# 查看系统可用的Shell
cat /etc/shells
# 输出:
# /bin/sh
# /bin/bash
# /bin/zsh
# /usr/bin/fish

切换Shell

# 临时切换到zsh
zsh

# 永久切换默认Shell
chsh -s /bin/zsh

# 退出当前Shell
exit

1.2.3 认识命令提示符

当你打开终端时,会看到类似这样的提示符:

username@hostname:~$

提示符解析

username  @  hostname  :  ~  $
   ↓         ↓           ↓   ↓
用户名    分隔符      主机名  当前目录  权限标识

$ = 普通用户
# = root用户(超级管理员)

示例

jack@ubuntu:~$              # 普通用户jack,在家目录
jack@ubuntu:/var/log$       # 普通用户jack,在/var/log目录
root@ubuntu:/home/jack#     # root用户,在/home/jack目录

提示符中的特殊符号

  • ~ : 用户家目录 (等同于 /home/username)
  • / : 根目录
  • $ : 普通用户
  • # : root用户

1.3 命令行基本语法

1.3.1 命令的基本结构

command [options] [arguments]
  ↓        ↓          ↓
命令名    选项      参数

示例解析

ls -l /home
↓  ↓   ↓
命令 选项 参数

ls        # 列出文件
-l        # 选项: 详细列表格式
/home     # 参数: 要列出的目录

1.3.2 命令选项

短选项 (单个字符)

ls -l        # 单个选项
ls -a        # 另一个选项
ls -la       # 组合多个选项
ls -l -a     # 等同于上面

长选项 (完整单词)

ls --all              # 长选项
ls --human-readable   # 长选项
ls -l --all           # 混合使用

带参数的选项

grep -n "hello" file.txt     # -n 不需要参数
head -n 10 file.txt          # -n 需要参数 10
tar -czf archive.tar.gz dir/ # -f 需要参数 archive.tar.gz

1.3.3 特殊字符

通配符

*        # 匹配任意字符
?        # 匹配单个字符
[abc]    # 匹配a、b或c
[a-z]    # 匹配a到z的任意字符

# 示例
ls *.txt           # 列出所有.txt文件
ls file?.txt       # 匹配file1.txt, fileA.txt等
ls [abc]*.txt      # 匹配以a、b或c开头的.txt文件

重定向

>        # 输出重定向 (覆盖)
>>       # 输出重定向 (追加)
<        # 输入重定向
2>       # 错误输出重定向

# 示例
ls > files.txt           # 将输出保存到文件
echo "hello" >> log.txt  # 追加到文件
cat < input.txt          # 从文件读取输入

管道

|        # 将前一个命令的输出作为后一个命令的输入

# 示例
ls -l | grep ".txt"      # 列出文件并筛选.txt
cat file.txt | wc -l     # 统计文件行数
ps aux | grep nginx      # 查找nginx进程

命令连接

;        # 顺序执行
&&       # 前一个成功才执行后一个
||       # 前一个失败才执行后一个
&        # 后台执行

# 示例
cd /tmp; ls              # 先切换目录,再列出文件
mkdir test && cd test    # 创建成功才进入
cd /tmp || echo "失败"   # 失败才输出
sleep 100 &              # 后台运行

引号

'单引号'   # 所有字符都是普通字符
"双引号"   # 可以使用变量和转义字符
`反引号`   # 命令替换 (已过时,推荐使用$())

# 示例
echo 'Hello $USER'       # 输出: Hello $USER
echo "Hello $USER"       # 输出: Hello jack
echo "Today is $(date)"  # 输出: Today is Mon Jan 13 23:00:00 CST 2026

1.4 帮助系统

1.4.1 获取命令帮助的方法

方法1: –help 选项 (最快速)

ls --help
git --help
grep --help

# 输出简洁的帮助信息

方法2: man 手册 (最详细)

man ls
man grep
man bash

# 打开详细的手册页面
# 按q退出

man手册的章节

man 1 printf    # 第1章: 用户命令
man 3 printf    # 第3章: C库函数
man 5 passwd    # 第5章: 文件格式

# 章节说明:
# 1 - 用户命令
# 2 - 系统调用
# 3 - C库函数
# 4 - 设备文件
# 5 - 文件格式
# 6 - 游戏
# 7 - 杂项
# 8 - 系统管理命令

man手册导航

空格键      # 下一页
b          # 上一页
/keyword   # 搜索关键字
n          # 下一个搜索结果
N          # 上一个搜索结果
q          # 退出
h          # 帮助

方法3: info 命令 (更详细)

info ls
info coreutils

# 比man更详细,有超链接

方法4: type 和 which (查找命令位置)

# 查看命令类型
type ls
# 输出: ls is aliased to `ls --color=auto'

type cd
# 输出: cd is a shell builtin

# 查看命令路径
which ls
# 输出: /usr/bin/ls

which python3
# 输出: /usr/bin/python3

方法5: apropos (搜索命令)

# 搜索与关键字相关的命令
apropos copy
# 输出:
# cp (1) - copy files and directories
# rsync (1) - a fast, versatile, remote file-copying tool

apropos "list directory"
# 输出:
# ls (1) - list directory contents

1.4.2 在线文档和资源

官方文档

中文资源

在线工具


1.5 实战场景:首次登录服务器

场景描述

你购买了一台云服务器,第一次通过SSH登录,需要熟悉环境。

实战步骤

1. 连接服务器

# 使用SSH连接 (假设服务器IP是 192.168.1.100)
ssh username@192.168.1.100

# 输入密码后登录成功
# 看到提示符:
username@server:~$

2. 查看系统信息

# 查看系统版本
cat /etc/os-release
# 输出:
# NAME="Ubuntu"
# VERSION="22.04.1 LTS (Jammy Jellyfish)"

# 或使用
lsb_release -a

# 查看内核版本
uname -r
# 输出: 5.15.0-56-generic

# 查看系统架构
uname -m
# 输出: x86_64

# 查看主机名
hostname
# 输出: server

3. 查看当前用户和目录

# 查看当前用户
whoami
# 输出: username

# 查看当前目录
pwd
# 输出: /home/username

# 查看用户ID
id
# 输出: uid=1000(username) gid=1000(username) groups=1000(username),27(sudo)

4. 查看系统资源

# 查看内存使用
free -h
# 输出:
#               total        used        free      shared  buff/cache   available
# Mem:           7.7Gi       1.2Gi       5.1Gi        10Mi       1.4Gi       6.2Gi

# 查看磁盘使用
df -h
# 输出:
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1        50G  8.5G   39G  18% /

# 查看CPU信息
lscpu | grep "Model name"
# 输出: Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz

5. 测试网络连接

# 测试网络连通性
ping -c 3 baidu.com
# 输出:
# PING baidu.com (220.181.38.148) 56(84) bytes of data.
# 64 bytes from 220.181.38.148: icmp_seq=1 ttl=52 time=5.23 ms

# 查看网络接口
ip addr show
# 或
ifconfig

6. 查看帮助

# 如果不知道某个命令怎么用
ls --help
man ls

# 搜索相关命令
apropos file

7. 退出服务器

# 退出SSH连接
exit
# 或按 Ctrl+D

1.6 常用快捷键

1.6.1 命令行编辑

Ctrl + A    # 移动到行首
Ctrl + E    # 移动到行尾
Ctrl + U    # 删除光标前的内容
Ctrl + K    # 删除光标后的内容
Ctrl + W    # 删除光标前的单词
Ctrl + L    # 清屏 (等同于clear命令)
Ctrl + C    # 终止当前命令
Ctrl + D    # 退出当前Shell (等同于exit)
Ctrl + Z    # 暂停当前命令

1.6.2 历史命令

↑ / ↓       # 浏览历史命令
Ctrl + R    # 搜索历史命令 (反向搜索)
Ctrl + P    # 上一条命令 (等同于↑)
Ctrl + N    # 下一条命令 (等同于↓)
!!          # 执行上一条命令
!n          # 执行历史中第n条命令
!string     # 执行最近以string开头的命令

# 查看历史命令
history

# 清空历史
history -c

1.6.3 Tab补全

Tab         # 自动补全命令或文件名
Tab Tab     # 显示所有可能的补全选项

# 示例
cd /ho[Tab]        # 自动补全为 cd /home/
ls Doc[Tab]        # 自动补全为 ls Documents/
git che[Tab]       # 自动补全为 git checkout

1.7 常用命令速查

命令说明示例
whoami显示当前用户whoami
hostname显示主机名hostname
pwd显示当前目录pwd
uname显示系统信息uname -a
date显示日期时间date
cal显示日历cal
clear清屏clear
history显示历史命令history
man查看帮助手册man ls
exit退出Shellexit

1.8 常见问题与解决

Q1: 如何知道我用的是什么Linux发行版?

# 方法1
cat /etc/os-release

# 方法2
lsb_release -a

# 方法3
uname -a

Q2: 命令输入错误怎么办?

# 使用Ctrl+C终止
# 或使用Ctrl+U删除整行
# 或按ESC键取消

Q3: 如何查看命令的完整路径?

which ls
# 输出: /usr/bin/ls

type -a python3
# 输出: python3 is /usr/bin/python3

Q4: 忘记命令怎么办?

# 搜索历史命令
Ctrl + R

# 搜索相关命令
apropos keyword

# 查看帮助
man command
command --help

Q5: 如何复制粘贴?

# 在终端中:
Ctrl + Shift + C    # 复制
Ctrl + Shift + V    # 粘贴

# 或使用鼠标:
# 选中即复制
# 中键粘贴 (或右键→粘贴)

1.9 本章小结

本章学习了Linux系统基础:

Linux简介: 了解Linux的特点和应用场景
发行版: 认识常见的Linux发行版
终端与Shell: 理解终端和Shell的概念
命令语法: 掌握命令行基本语法和特殊字符
帮助系统: 学会使用man、–help等获取帮助
实战练习: 首次登录服务器的完整流程

关键要点

  • Linux是开源免费的操作系统,广泛应用于服务器
  • 终端是文本界面,Shell是命令解释器
  • 命令格式: command [options] [arguments]
  • 使用man、–help获取命令帮助
  • 善用Tab补全和历史命令提高效率

下一步学习

  • 第2章: 文件系统导航 - 学习在Linux中导航和定位文件

1.10 练习题

  1. 基础练习: 查看你的系统版本、当前用户、当前目录
  2. 进阶练习: 使用man查看ls命令的帮助,了解-l、-a选项的作用
  3. 实战练习: 使用apropos搜索与"copy"相关的命令
  4. 挑战练习: 自定义你的命令提示符 (提示: 修改PS1变量)

🎉 恭喜!你已经了解了Linux系统基础!

继续学习 → 第2章:文件系统导航