写在前面
很多人第一次听说 Linux,是因为想搭建网站、学习编程,或者工作上要用到服务器。但打开终端看到黑底白字的界面,就开始发懵:这玩意儿和 Windows 完全不一样啊。
其实 Linux 不难理解。它就是个操作系统,和 Windows、macOS 一样,只是设计理念不同。这篇文章把 Linux 的基础知识一次性讲清楚:什么是 Linux、为什么用它、文件系统怎么组织、权限怎么管理、软件怎么安装……看完这篇,你对 Linux 就有个整体认知了。
建议先收藏,以后遇到问题可以对照查阅。
一、什么是 Linux?

1.1 Linux 的本质
Linux 是一个操作系统内核,加上各种软件工具,构成了完整的操作系统。
打个比方:
- 内核:相当于汽车的发动机,负责驱动硬件、管理资源
- 外壳(Shell):相当于方向盘和操控面板,让用户能操作系统
- 应用程序:相当于车上的导航、音响,提供各种功能
Linux 内核最早由 Linus Torvalds 在 1991 年开发,后来开源,全世界开发者都能贡献代码。现在 Linux 内核已经非常成熟,驱动了从手机到服务器到超级计算机的各种设备。
1.2 Linux 和 Windows 的区别
| 对比项 | Windows | Linux |
|---|---|---|
| 设计理念 | 商业产品,用户友好 | 开源免费,技术导向 |
| 操作方式 | 图形界面为主 | 命令行为主(也有图形界面) |
| 权限管理 | 管理员账户 | root 和普通用户分离 |
| 软件安装 | 下载安装包或商店 | 包管理器(yum/apt等) |
| 文件系统 | C盘D盘分区 | 单一树状结构 |
| 配置方式 | 控制面板 | 配置文件 |
| 适用场景 | 个人电脑、办公 | 服务器、开发、嵌入式 |
最大的区别:Windows 鼠标点几下就行,Linux 很多操作要敲命令。但命令的优势是效率高、可自动化、能远程操作。
1.3 Linux 的应用场景
服务器领域:
- 网站服务器:全球 90% 以上的网站服务器运行 Linux
- 云计算:阿里云、腾讯云、AWS 的服务器都是 Linux
- 数据库服务器:MySQL、Redis 通常部署在 Linux
开发领域:
- 编程环境:Python、Go、Java 开发者偏好 Linux
- 容器技术:Docker、Kubernetes 基于 Linux
- DevOps:自动化部署、持续集成
嵌入式设备:
- 手机:Android 基于 Linux 内核
- 路由器:家用路由器的系统
- 智能设备:智能家居、车载系统
个人使用:
- 开发者日常开发
- 系统运维工作
- 学习计算机原理
简单说:服务器上 Linux 是主流,个人电脑上 Windows 是主流。
二、Linux 发行版:选择适合自己的版本
2.1 什么是发行版?
Linux 内核只是核心部分,要变成能用的操作系统,需要加上:
- 图形界面(可选)
- 常用软件(文本编辑器、浏览器等)
- 包管理器(安装软件的工具)
- 系统配置工具
不同的组织把这些组合起来,打包成不同的”发行版”。
打个比方:内核是面粉,发行版是面条、面包、馒头——原料相同,形态不同。
2.2 主要发行版介绍
(1)Ubuntu
最适合新手入门的发行版。
特点:
- 安装简单,图形界面友好
- 软件丰富,社区活跃
- 定期发布新版本(每6个月)
- 有 LTS 版本(长期支持,5年更新)
适用人群:新手、个人用户、开发者
下载:ubuntu.com
(2)CentOS / Rocky Linux
服务器最常用的发行版。
特点:
- 稳定可靠,适合生产环境
- 软件版本保守(追求稳定,不求最新)
- 免费(CentOS 7 及之前)
- CentOS 8 停止维护后,推荐用 Rocky Linux 或 AlmaLinux
适用人群:运维工程师、服务器部署
注意:CentOS 7 在 2024 年 6 月停止维护,新项目建议用 Rocky Linux。
(3)Debian
老牌发行版,Ubuntu 的上游。
特点:
- 极其稳定,软件测试严格
- 完全社区驱动,非商业
- 更新周期较长
适用人群:追求稳定的服务器用户、技术人员
(4)Fedora
Red Hat 的社区版,新技术试验场。
特点:
- 软件版本较新
- 半年发布一个版本
- Red Hat Enterprise Linux(RHEL)的上游
适用人群:想体验新技术的开发者
(5)Arch Linux
极简主义发行版,高度自定义。
特点:
- 滚动更新(没有版本概念,始终最新)
- 安装复杂(从零构建)
- 文档完善(Arch Wiki)
适用人群:Linux 高手、追求极致自定义
(6)其他常见发行版
| 发行版 | 特点 | 适用人群 |
|---|---|---|
| Mint | 基于 Ubuntu,界面类似 Windows | 从 Windows 转过来的用户 |
| openSUSE | 德国发行版,企业级稳定 | 企业用户 |
| Kali | 安全工具预装 | 安全测试、渗透测试 |
| Gentoo | 从源码编译安装 | 高级玩家 |
| Alpine | 极小体积(5MB) | 容器、嵌入式 |
2.3 发行版选择建议
新手入门: Ubuntu 或 Mint
服务器部署: Rocky Linux / AlmaLinux(替代 CentOS)
开发环境: Ubuntu 或 Fedora
运维学习: Rocky Linux(和 CentOS 7 用法一样)
三、Linux 文件系统:目录结构详解
3.1 单一树状结构
Linux 没有 Windows 的 C盘D盘概念,所有文件都在一个树状结构里,根目录是 /。
/ 根目录
├── bin 可执行命令(所有用户都能用)
├── boot 启动相关文件
├── dev 设备文件(硬件设备在这里)
├── etc 系统配置文件
├── home 用户主目录
│ ├── user1 用户 user1 的主目录
│ └── user2 用户 user2 的主目录
├── lib 库文件
├── media 可移动设备挂载点(U盘等)
├── mnt 临时挂载点
├── opt 可选软件包安装位置
├── proc 进程信息(虚拟文件系统)
├── root root 用户的主目录
├── run 运行时数据
├── sbin 系统管理命令(只有 root 能用)
├── srv 服务数据
├── sys 系统信息(虚拟文件系统)
├── tmp 临时文件
├── usr 用户程序和数据
│ ├── bin 用户安装的命令
│ ├── lib 用户安装的库
│ ├── local 本地安装的软件
│ └── share 共享数据
└── var 可变数据(日志、缓存等)
├── log 系统日志
├── cache 缓存数据
└── lib 应用程序数据
3.2 重要目录详解
/ 根目录
所有文件和目录的起点。不要在根目录放文件,这是系统区域。
/bin 和 /sbin
存放系统命令:
/bin:所有用户都能执行的命令(ls、cp、cat 等)/sbin:只有 root 能执行的管理命令(reboot、fdisk 等)
在 CentOS 7+ 中,这些目录是 /usr/bin 和 /usr/sbin 的软链接。
/etc 配置文件
系统大部分配置文件都在这里。
重要文件:
/etc/passwd:用户信息/etc/shadow:用户密码(加密存储)/etc/group:组信息/etc/fstab:磁盘挂载配置/etc/hosts:本地域名解析/etc/resolv.conf:DNS 配置/etc/sysconfig/network-scripts/:网络配置(CentOS)/etc/ssh/sshd_config:SSH 服务配置/etc/nginx/nginx.conf:Nginx 配置(如果安装了)/etc/apt/sources.list:软件源配置(Ubuntu)/etc/yum.repos.d/:软件源配置(CentOS)
修改配置文件通常需要 root 权限。
/home 用户主目录
每个用户有一个专属目录,存放个人文件。
路径格式:/home/用户名
比如用户 tom 的主目录是 /home/tom。
用户主目录可以简写为 ~,比如:
cd ~ # 进入主目录
ls ~/Documents # 查看主目录下的 Documents
/root root 用户主目录
root 用户的主目录不在 /home,而是独立的 /root。
/var 可变数据
存放会经常变化的数据。
重要子目录:
/var/log:日志文件(查看系统运行情况)/var/cache:缓存数据/var/lib:应用程序数据(数据库文件等)/var/spool:队列数据(邮件队列等)/var/tmp:临时文件(比/tmp保留时间更长)
/usr 用户程序
存放用户安装的软件和文档。
/usr/bin:用户安装的命令/usr/lib:库文件/usr/local:手动安装的软件(非包管理器安装)/usr/share:共享数据(文档、图标等)
/tmp 临时文件
存放临时文件,重启后通常会清空。所有用户都能读写。
/proc 进程信息
这是一个虚拟文件系统,存放内核和进程信息。文件不是真实存在,而是内存数据的映射。
查看内存信息:
cat /proc/meminfo
查看 CPU 信息:
cat /proc/cpuinfo
查看某个进程的信息:
ls /proc/1234/ # 1234 是进程 PID
/dev 设备文件
Linux 把硬件设备当作文件来管理,设备文件都在 /dev。
常见设备文件:
/dev/sda:第一块硬盘/dev/sda1:第一块硬盘的第一个分区/dev/null:黑洞,写入的东西都消失/dev/zero:无限输出 0/dev/tty:终端设备/dev/urandom:随机数生成器
/boot 启动文件
存放系统启动需要的文件:
- 内核文件(vmlinuz)
- 启动配置(grub)
不要随意修改这个目录,否则可能导致系统无法启动。
/opt 可选软件
一些第三方软件安装在这里,比如 Oracle 数据库。
/mnt 和 /media 挂载点
挂载外部设备的目录:
/mnt:手动挂载的设备/media:自动挂载的设备(U盘、光盘)
3.3 文件路径概念
绝对路径
从根目录 / 开始的完整路径。
例子:
/etc/passwd
/home/user/Documents/file.txt
/var/log/nginx/error.log
相对路径
从当前目录开始的路径。
例子:
Documents/file.txt # 当前目录下的 Documents
../etc/passwd # 上级目录下的 etc
./script.sh # 当前目录下的 script.sh
./ 表示当前目录,../ 表示上级目录。
四、Linux 用户和权限管理
4.1 用户概念
Linux 是多用户系统,可以同时有多个用户登录使用。
用户类型:
- root 用户
- 超级管理员,拥有最高权限
- 能做任何操作(包括删系统)
- UID 为 0
- 普通用户
- 权限受限,只能操作自己的文件
- UID 从 1000 开始(CentOS 7+)
- 需要用 sudo 执行需要 root 权限的操作
- 系统用户
- 运行服务的用户(比如 nginx、mysql)
- 不能登录系统
- UID 通常在 1-999
用户信息文件:
/etc/passwd 存放用户基本信息:
root:x:0:0:root:/root:/bin/bash
user:x:1000:1000::/home/user:/bin/bash
格式:用户名:密码占位:UID:GID:描述:主目录:Shell
密码实际存放在 /etc/shadow,加密存储。
4.2 用户组概念
用户组是一组用户的集合,方便批量管理权限。
每个用户至少属于一个组(主组),还可以加入多个附加组。
组信息文件:
/etc/group 存放组信息:
root:x:0:
wheel:x:10:user
user:x:1000:
格式:组名:密码占位:GID:组成员列表
4.3 文件权限详解
Linux 文件权限分三部分:用户、组、其他人。
每部分有三种权限:
- r(读):值 4,可以查看内容
- w(写):值 2,可以修改内容
- x(执行):值 1,可以执行(脚本、程序)
权限用数字或字母表示:
| 权限组合 | 数字 | 含义 |
|---|---|---|
| rwx | 7 | 读、写、执行 |
| rw- | 6 | 读、写 |
| r-x | 5 | 读、执行 |
| r– | 4 | 只读 |
| -wx | 3 | 写、执行 |
| -w- | 2 | 只写 |
| –x | 1 | 只执行 |
| — | 0 | 无权限 |
权限显示格式:
ls -l file.txt
# 输出:-rw-r--r-- 1 user group 1024 Jan 10 file.txt
解析:
- 第1位:文件类型(
-文件,d目录,l链接) - 第2-4位:用户权限(rw- = 6)
- 第5-7位:组权限(r– = 4)
- 第8-10位:其他人权限(r– = 4)
所以这个文件的权限是 644。
4.4 目录权限
目录的权限含义和文件不同:
- r(读):可以查看目录内容(ls)
- w(写):可以在目录里创建、删除文件
- x(执行):可以进入目录(cd)
要进入目录并查看内容,需要 rx 权限;要修改目录内容,需要 wx 权限。
4.5 特殊权限
除了普通权限,Linux 还有三种特殊权限:
SUID(4)
设置在可执行文件上,执行时获得文件所有者的权限。
例子:/usr/bin/passwd 有 SUID,普通用户执行时暂时获得 root 权限修改密码。
显示:权限位变成 rws
SGID(2)
设置在目录上,目录里创建的文件自动继承目录的所属组。
显示:权限位变成 rws
Sticky Bit(1)
设置在目录上,只有文件所有者才能删除自己的文件。
例子:/tmp 有 Sticky Bit,用户不能删除别人的临时文件。
显示:权限位变成 rwt
4.6 修改权限和所有权
chmod 修改权限:
chmod 755 file.sh # 用户全权限,其他人 rx
chmod 644 file.txt # 用户 rw,其他人 r
chmod +x script.sh # 给所有人加执行权限
chmod -R 755 folder # 递归修改目录
chown 修改所有者:
chown user file.txt # 改用户
chown user:group file.txt # 改用户和组
chown -R user:group folder # 递归修改目录
chgrp 修改所属组:
chgrp group file.txt # 改组
4.7 sudo 权限管理
普通用户需要执行 root 权限命令时,用 sudo。
配置 sudo 权限:
编辑 /etc/sudoers(用 visudo 命令,会检查语法):
# 允许 user 执行所有命令
user ALL=(ALL) ALL
# 允许 wheel 组成员执行所有命令(CentOS 默认)
%wheel ALL=(ALL) ALL
# 只允许 user 执行特定命令
user ALL=(ALL) /usr/bin/reboot, /usr/bin/systemctl
使用 sudo:
sudo command # 以 root 执行命令
sudo -u user command # 以指定用户执行
sudo -l # 查看可用 sudo 执行哪些命令
五、Shell 和终端基础
5.1 什么是 Shell?
Shell 是用户和内核之间的桥梁,负责解释用户输入的命令,传给内核执行。
常见 Shell:
- bash:最常用的 Shell,几乎所有 Linux 默认使用
- zsh:功能更强,插件丰富(Oh My Zsh)
- sh:最基础的 Shell
- dash:轻量级 Shell,Ubuntu 用它作为 /bin/sh
- fish:友好的交互式 Shell
查看当前 Shell:
echo $SHELL
# 输出:/bin/bash
查看可用 Shell:
cat /etc/shells
切换 Shell:
chsh -s /bin/zsh # 切换到 zsh
5.2 终端和虚拟控制台
终端(Terminal)
输入命令的界面,可以是:
- 物理终端:以前的字符终端设备
- 软件终端:终端模拟软件(如 GNOME Terminal、iTerm2)
- SSH 远程终端:通过 SSH 连接的终端
虚拟控制台
Linux 有多个虚拟控制台(类似多个终端窗口),可以切换:
- 按 Ctrl+Alt+F1~F6:切换到不同控制台
- F1 通常是图形界面
- F2~F6 是字符界面
服务器没有图形界面时,用虚拟控制台登录。
5.3 Shell 基础操作
命令基本格式:
命令 [选项] [参数]
例子:
ls -l /home # 命令 ls,选项 -l,参数 /home
cp -r folder1 folder2 # 命令 cp,选项 -r,参数 folder1 和 folder2
选项格式:
- 短选项:
-l、-a、-h(单个字母) - 长选项:
--help、--version(完整单词) - 组合短选项:
-lah等于-l -a -h
常用快捷键:
| 快捷键 | 功能 |
|---|---|
| Ctrl+C | 终止当前命令 |
| Ctrl+D | 退出当前 Shell(等于 exit) |
| Ctrl+L | 清屏(等于 clear) |
| Ctrl+A | 光标移到行首 |
| Ctrl+E | 光标移到行尾 |
| Ctrl+U | 删除光标前所有内容 |
| Ctrl+K | 删除光标后所有内容 |
| Ctrl+R | 搜索历史命令 |
| Tab | 自动补全 |
| Tab Tab | 显示所有匹配项 |
命令历史:
history # 显示历史命令
history 20 # 显示最近 20 条
!10 # 执行第 10 条历史命令
!ls # 执行最近的 ls 命令
!! # 执行上一条命令
Ctrl+R # 搜索历史命令
历史命令保存在 ~/.bash_history。
命令别名:
alias # 显示所有别名
alias ll='ls -lah' # 设置别名
unalias ll # 删除别名
永久生效:写入 ~/.bashrc。
管道和重定向:
管道 |:把前一个命令的输出传给后一个命令:
ls | grep txt # ls 结果传给 grep 搜索
ps aux | grep nginx # 进程列表传给 grep
cat file.txt | sort | uniq # 文件内容排序去重
重定向:把输出写入文件:
command > file.txt # 输出到文件(覆盖)
command >> file.txt # 输出到文件(追加)
command 2> error.txt # 错误输出到文件
command > file.txt 2>&1 # 标准输出和错误输出都写入文件
command < input.txt # 从文件读取输入
5.4 通配符
匹配文件名:
| 通配符 | 含义 | 例子 |
|---|---|---|
| * | 匹配任意字符 | *.txt 匹配所有 txt 文件 |
| ? | 匹配单个字符 | file?.txt 匹配 file1.txt、fileA.txt |
| [] | 匹配指定字符 | file[1-3].txt 匹配 file1.txt、file2.txt、file3.txt |
| {} | 匹配多个选项 | file{1,2,3}.txt 匹配三个文件 |
例子:
ls *.txt # 查看所有 txt 文件
rm file[1-5].txt # 删除 file1 到 file5
cp *.jpg /home/backup/ # 复制所有 jpg 文件
5.5 环境变量
环境变量是 Shell 运行时的参数,影响程序行为。
常用环境变量:
| 变量 | 含义 |
|---|---|
| PATH | 命令搜索路径 |
| HOME | 用户主目录 |
| USER | 当前用户名 |
| SHELL | 当前 Shell |
| PWD | 当前目录 |
| LANG | 语言设置 |
| PS1 | 命令提示符格式 |
查看环境变量:
echo $PATH # 显示 PATH
env # 显示所有环境变量
printenv PATH # 显示指定变量
设置环境变量:
export VAR=value # 设置临时环境变量
VAR=value # 设置 Shell 变量(不导出)
export PATH=$PATH:/new/path # 添加路径到 PATH
永久设置:
写入配置文件:
~/.bashrc:用户级别,登录时加载~/.bash_profile:用户级别,登录时加载(优先)/etc/profile:系统级别,所有用户/etc/environment:系统环境变量
例子(写入 ~/.bashrc):
export JAVA_HOME=/usr/lib/jvm/java-11
export PATH=$PATH:$JAVA_HOME/bin
加载配置:
source ~/.bashrc # 立即生效
六、软件安装和管理
6.1 Linux 软件安装方式
Linux 安装软件主要有三种方式:
(1)包管理器安装
最推荐的方式,自动处理依赖关系。
- CentOS/RHEL:yum、dnf
- Ubuntu/Debian:apt
- Arch:pacman
(2)源码编译安装
下载源码,自己编译。
流程:
tar -xzvf source.tar.gz # 解压
cd source # 进入目录
./configure # 配置(检查依赖)
make # 编译
make install # 安装
优点:可以自定义编译选项。
缺点:麻烦,依赖要自己解决。
(3)二进制文件安装
下载编译好的可执行文件,直接运行。
例子:下载 Go 语言官方二进制包,解压后就能用。
(4)容器化部署
用 Docker 等容器技术,不直接安装软件,而是运行容器。
6.2 包管理器详解
yum(CentOS 7)
yum install package # 安装
yum remove package # 删除
yum update # 更新所有
yum update package # 更新指定包
yum search keyword # 搜索
yum list installed # 已安装列表
yum info package # 包信息
yum clean all # 清理缓存
软件源配置:/etc/yum.repos.d/*.repo
dnf(CentOS 8+/Fedora)
dnf 是 yum 的升级版,命令基本一样:
dnf install package
dnf remove package
dnf update
dnf search keyword
apt(Ubuntu/Debian)
apt update # 更新软件源索引
apt install package # 安装
apt remove package # 删除(保留配置)
apt purge package # 删除(包括配置)
apt upgrade # 升级所有包
apt search keyword # 搜索
apt show package # 包信息
apt list --installed # 已安装列表
apt autoremove # 清理无用依赖
apt clean # 清理缓存
软件源配置:/etc/apt/sources.list
6.3 rpm 和 dpkg(底层包工具)
直接安装 rpm/deb 文件,不自动解决依赖。
rpm:
rpm -ivh package.rpm # 安装
rpm -e package # 删除
rpm -qa # 所有已安装包
rpm -qi package # 包信息
rpm -ql package # 包安装的文件列表
dpkg:
dpkg -i package.deb # 安装
dpkg -r package # 删除(保留配置)
dpkg -P package # 删除(包括配置)
dpkg -l # 已安装列表
dpkg -L package # 包安装的文件列表
6.4 源码安装详解
下载源码:
通常从官网或 GitHub 下载 .tar.gz 或 .tar.bz2 文件。
解压:
tar -xzvf package-1.0.tar.gz # gzip 格式
tar -xjvf package-1.0.tar.bz2 # bzip2 格式
进入目录:
cd package-1.0
配置:
./configure
configure 脚本检查系统环境、依赖库,生成 Makefile。
常用选项:
./configure --prefix=/usr/local/package # 指定安装路径
./configure --help # 查看可用选项
如果 configure 报错缺少依赖,先安装依赖再重来。
编译:
make
make 根据 Makefile 编译源码。这一步可能比较慢。
安装:
make install
把编译好的文件复制到系统目录(需要 root 权限)。
清理:
make clean # 清理编译文件
make distclean # 清理所有生成的文件
6.5 软件安装位置
不同安装方式,软件位置不同:
| 安装方式 | 通常位置 |
|---|---|
| 包管理器 | /usr/bin、/usr/lib、/usr/share |
| 源码安装 | /usr/local/bin、/usr/local/lib |
| 用户安装 | ~/bin、~/.local/bin |
七、进程和服务管理
7.1 进程概念
进程是程序的运行实例。一个程序可以有多个进程(比如多个 nginx worker 进程)。
进程属性:
- PID:进程 ID,唯一标识
- PPID:父进程 ID
- User:运行进程的用户
- State:进程状态(运行、睡眠、停止等)
- CPU:CPU 使用率
- Memory:内存使用量
进程状态:
| 状态 | 含义 |
|---|---|
| R | 运行或就绪 |
| S | 睡眠(等待事件) |
| D | 不可中断睡眠(等待 IO) |
| Z | 僵尸进程(已结束但未被回收) |
| T | 停止(被暂停) |
7.2 查看进程
ps 命令:
ps # 当前用户进程
ps aux # 所有进程详细信息
ps -ef # 另一种格式
ps aux | grep nginx # 搜索进程
输出解释:
- USER:用户
- PID:进程 ID
- %CPU:CPU 使用率
- %MEM:内存使用率
- STAT:进程状态
- COMMAND:命令
top 命令:
实时监控进程:
top
进入 top 后:
- 按 P:按 CPU 排序
- 按 M:按内存排序
- 按 k:杀进程
- 按 q:退出
htop 命令:
更友好的进程监控:
htop
能鼠标操作,支持横向滚动,比 top 好用。
pgrep 命令:
查找进程 PID:
pgrep nginx # 查找 nginx 进程
pgrep -u root nginx # root 用户运行的 nginx
7.3 进程管理
启动进程:
./program # 前台运行
./program & # 后台运行
nohup ./program & # 后台运行,不因终端关闭而终止
终止进程:
kill PID # 正常终止
kill -9 PID # 强制终止
killall name # 按名字杀死
pkill name # 按名字杀死
进程前后台切换:
Ctrl+Z # 暂停前台进程(放入后台)
jobs # 查看后台作业
bg %1 # 让作业 1 在后台继续
fg %1 # 把作业 1 调到前台
7.4 服务概念
服务是长期运行的进程,通常在后台,响应请求。
比如:
- nginx:Web 服务
- mysql:数据库服务
- sshd:SSH 服务
7.5 服务管理(systemd)
现代 Linux 用 systemd 管理服务。
常用命令:
systemctl start service # 启动服务
systemctl stop service # 停止服务
systemctl restart service # 重启服务
systemctl status service # 查看状态
systemctl enable service # 设置开机自启
systemctl disable service # 关闭开机自启
systemctl is-enabled service # 查看是否开机自启
systemctl list-units --type=service # 所有服务列表
systemctl daemon-reload # 重载配置(修改配置后)
服务配置文件:
服务配置文件在 /etc/systemd/system/ 或 /usr/lib/systemd/system/。
格式示例(nginx.service):
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
7.6 传统服务管理(CentOS 6)
老版本用 service 和 chkconfig:
service nginx start # 启动
service nginx stop # 停止
service nginx restart # 重启
service nginx status # 状态
chkconfig nginx on # 开机自启
chkconfig nginx off # 关闭自启
chkconfig --list # 查看所有服务状态
7.7 日志查看
journalctl(systemd 日志):
journalctl # 所有日志
journalctl -u nginx # nginx 服务日志
journalctl -f # 实时查看
journalctl --since today # 今天日志
journalctl -p err # 只看错误级别
传统日志文件:
日志在 /var/log/:
/var/log/messages:系统主日志(CentOS)/var/log/syslog:系统主日志(Ubuntu)/var/log/auth.log:认证日志(登录记录)/var/log/nginx/error.log:Nginx 错误日志/var/log/mysql/error.log:MySQL 错误日志
八、网络基础知识
8.1 网络接口
Linux 网络接口命名:
- eth0、eth1:以太网卡(传统命名)
- ens33、ens192:新命名规则
- lo:本地回环(127.0.0.1)
- wlan0:无线网卡
8.2 IP 地址配置
查看 IP:
ip addr # 显示所有 IP
ip addr show eth0 # 显示指定接口
ifconfig # 传统命令
配置 IP:
临时配置:
ip addr add 192.168.1.100/24 dev eth0 # 添加 IP
ip link set eth0 up # 启用网卡
永久配置:
CentOS:编辑 /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes
Ubuntu:编辑 /etc/netplan/*.yaml(Ubuntu 18+)
network:
ethernets:
eth0:
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8]
version: 2
8.3 DNS 配置
DNS 配置文件:/etc/resolv.conf
nameserver 8.8.8.8
nameserver 114.114.114.114
8.4 网络测试
ping 测试连通性:
ping 192.168.1.1 # ping IP
ping www.baidu.com # ping 域名
ping -c 5 192.168.1.1 # ping 5 次
traceroute 查看路径:
traceroute www.baidu.com # 查看路由路径
netstat/ss 查看端口:
netstat -tunlp # 查看 TCP/UDP 端口
ss -tunlp # 新命令
curl 测试 HTTP:
curl http://www.baidu.com # 请求网页
curl -I http://www.baidu.com # 只看响应头
8.5 端口概念
端口是网络通信的逻辑端点。常用端口:
| 端口 | 服务 |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
| 21 | FTP |
| 3306 | MySQL |
| 6379 | Redis |
| 8080 | Tomcat/备用HTTP |
九、系统启动和关机
9.1 启动过程
Linux 启动流程:
- BIOS/UEFI:硬件自检,选择启动设备
- MBR/GPT:读取启动分区
- GRUB:引导加载器,选择启动内核
- 内核:加载内核,初始化硬件
- systemd:启动第一个进程(PID 1),管理服务
- 用户登录:进入登录界面
9.2 运行级别
运行级别定义系统运行模式:
| 级别 | 含义 |
|---|---|
| 0 | 关机 |
| 1 | 单用户模式(维护) |
| 2 | 多用户(无网络) |
| 3 | 多用户(有网络,无图形) |
| 4 | 未定义 |
| 5 | 多用户(有图形) |
| 6 | 重启 |
systemd 用 target 替代:
multi-user.target:等于级别 3graphical.target:等于级别 5
查看:
systemctl get-default # 查看默认 target
systemctl set-default multi-user.target # 设置默认
9.3 关机和重启
关机:
shutdown -h now # 立即关机
shutdown -h +10 # 10分钟后关机
shutdown -c # 取消关机
poweroff # 立即关机
重启:
reboot # 重启
shutdown -r now # 立即重启
十、常用配置文件详解
10.1 用户相关
/etc/passwd:用户信息
root:x:0:0:root:/root:/bin/bash
格式:用户名:密码占位:UID:GID:描述:主目录:Shell
/etc/shadow:密码信息
root:$6$xxx:18000:0:99999:7:::
格式:用户名:加密密码:上次修改天数:最小天数:最大天数:警告天数: inactive天数:过期天数:保留
/etc/group:组信息
root:x:0:user1,user2
格式:组名:密码占位:GID:成员列表
10.2 网络相关
/etc/hosts:本地域名解析
127.0.0.1 localhost
192.168.1.100 myserver
/etc/resolv.conf:DNS 配置
nameserver 8.8.8.8
nameserver 114.114.114.114
/etc/sysconfig/network-scripts/ifcfg-eth0:网络接口配置(CentOS)
10.3 系统相关
/etc/fstab:磁盘挂载配置
/dev/sda1 / ext4 defaults 0 1
/dev/sda2 /home ext4 defaults 0 2
格式:设备 挂载点 类型 选项 dump pass
/etc/crontab:系统定时任务配置
/etc/profile:系统环境变量
10.4 服务相关
/etc/ssh/sshd_config:SSH 服务配置
重要配置:
- Port 22:SSH 端口
- PermitRootLogin yes/no:是否允许 root 登录
- PasswordAuthentication yes/no:是否允许密码登录
/etc/sudoers:sudo 权限配置
十一、常见问题和解决思路
11.1 权限问题
症状: 操作提示 Permission denied
原因: 当前用户没有权限
解决:
- 检查文件权限:
ls -l file - 用 sudo 执行:
sudo command - 修改权限:
chmod - 修改所有者:
chown
11.2 命令找不到
症状: Command not found
原因: 命令未安装或不在 PATH
解决:
- 检查命令是否存在:
which command - 安装命令:
yum install package或apt install package - 检查 PATH:
echo $PATH - 添加路径到 PATH:
export PATH=$PATH:/new/path
11.3 端口被占用
症状: 服务启动失败,提示端口被占用
解决:
- 查看端口占用:
netstat -tunlp | grep 端口 - 杀掉占用进程:
kill PID - 更换服务端口
11.4 磁盘空间不足
症状: 无法创建文件,提示 No space left
解决:
- 查看磁盘使用:
df -h - 查找大文件:
du -sh * | sort -rh | head -10 - 清理日志:
rm /var/log/*.log(谨慎) - 清理缓存:
yum clean all或apt clean - 检查 inode:
df -i
11.5 服务无法启动
解决:
- 查看状态:
systemctl status service - 查看日志:
journalctl -u service - 检查配置文件语法
- 检查依赖服务是否启动
11.6 SSH 无法登录
解决:
- 检查 SSH 服务:
systemctl status sshd - 检查端口:
netstat -tunlp | grep 22 - 检查防火墙:
firewall-cmd --list-all - 检查配置:
/etc/ssh/sshd_config - 查看日志:
journalctl -u sshd或/var/log/auth.log
十二、学习建议
12.1 入门路径
建议学习顺序:
- 安装一个 Linux 系统:Ubuntu 或 Rocky Linux
- 熟悉终端操作:cd、ls、mkdir、rm、cp、mv
- 理解文件系统:目录结构和文件路径
- 学习权限管理:chmod、chown、sudo
- 掌握常用命令:grep、find、tar、vim
- 了解服务管理:systemctl
- 学习 Shell 脚本:编写自动化脚本
12.2 实践建议
- 不要怕出错:Linux 错误提示很明确,看错误信息就能知道问题
- 多用命令手册:
man command查看详细说明 - 记录常用命令:建立自己的命令速查表
- 搭建实验环境:用虚拟机或云服务器练习
- 遇到问题先查日志:日志能告诉你发生了什么
12.3 进阶方向
掌握基础后,可以学习:
- Shell 脚本编程
- 系统运维(监控、备份、安全)
- 服务部署(Web、数据库、容器)
- 自动化工具(Ansible、Docker)
结语
这篇把 Linux 的基础知识梳理了一遍:什么是 Linux、发行版怎么选、文件系统结构、用户权限管理、Shell 操作、软件安装、进程服务、网络配置……理解了这些,对 Linux 就有了整体认知。
Linux 不难,难的是一开始的不习惯。多练多用,很快就能上手。遇到问题先看错误信息,再查手册或搜索,大部分问题都能解决。
建议先收藏这篇,以后遇到问题可以对照查阅。
