Linux基础
学习 linux基础 相关知识
Linux基础
学习目标
- 理解linux基础的概念和特点
- 掌握Linux的基本命令和操作方法
- 熟悉Linux文件系统结构和权限管理
- 了解Linux的服务管理和系统配置
- 能够执行基本的Linux系统管理任务
前置知识
- 基本的计算机操作知识
- 对操作系统概念的初步了解
预计学习时间
4小时
核心概念
什么是Linux?
Linux是一种自由和开源的类Unix操作系统内核,由Linus Torvalds于1991年创建。linux基础通常指基于Linux内核的完整操作系统,包括各种应用程序和工具。Linux以其稳定性、安全性、灵活性和开源特性而闻名,被广泛应用于服务器、嵌入式系统和个人计算机等领域。
关键特点:
- 开源性:源代码开放,任何人都可以查看、修改和分发
- 稳定性:长期运行稳定,适合作为服务器操作系统
- 安全性:内置多种安全机制,安全性较高
- 灵活性:高度可定制,可以根据需求裁剪系统组件
- 强大的命令行:提供丰富的命令行工具和脚本能力
- 多用户多任务:支持多个用户同时使用系统,能同时执行多个任务
Linux的历史和发展
Linux的发展始于1991年,当时芬兰大学生Linus Torvalds创建了一个简单的操作系统内核。此后,Linux在全球开发者的共同努力下快速发展:
- 1991年:Linus Torvalds发布Linux 0.01版本
- 1994年:Linux 1.0版本正式发布
- 1997年:Linux开始在服务器市场崭露头角
- 2000年以后:Linux在服务器、嵌入式设备和桌面领域得到广泛应用
- 2010年以后:Linux成为云计算和容器技术的基础
Linux架构
Linux系统架构
Linux采用分层架构设计,主要包括以下几个层次:
- 硬件层:物理硬件设备,如CPU、内存、硬盘等
- 内核层:Linux内核,负责管理硬件资源和提供系统调用接口
- Shell层:命令解释器,用于接收用户命令并执行
- 应用层:各种应用程序和工具
Linux内核
Linux内核是操作系统的核心部分,主要功能包括:
- 进程管理:创建、调度和终止进程
- 内存管理:分配和回收内存资源
- 文件系统管理:提供文件存储和访问机制
- 设备驱动:管理和控制硬件设备
- 网络管理:实现网络协议和通信功能
- 系统调用接口:为应用程序提供内核服务
Shell
Shell是用户与Linux内核之间的接口,负责解释用户输入的命令并执行相应的程序。常见的Shell包括:
- Bash(Bourne Again Shell):最常用的默认Shell
- Sh(Bourne Shell):早期的标准Shell
- Csh(C Shell):语法类似C语言的Shell
- Zsh:功能强大的增强型Shell
Linux文件系统
文件系统结构
Linux采用树形目录结构组织文件,所有文件和目录都从根目录(/)开始。主要目录及其用途如下:
/ # 根目录,所有文件和目录的起点
├── bin/ # 基本的可执行命令
├── boot/ # 引导加载程序和内核文件
├── dev/ # 设备文件
├── etc/ # 系统配置文件
├── home/ # 用户主目录
├── lib/ # 共享库文件
├── media/ # 可移动媒体挂载点
├── mnt/ # 临时文件系统挂载点
├── opt/ # 可选应用程序安装目录
├── proc/ # 虚拟文件系统,包含进程和系统信息
├── root/ # 超级用户(root)的主目录
├── run/ # 运行时数据
├── sbin/ # 系统管理命令
├── srv/ # 服务数据
├── sys/ # 系统设备和总线信息
├── tmp/ # 临时文件
├── usr/ # 用户程序和文件
│ ├── bin/ # 用户可执行命令
│ ├── include/ # C/C++头文件
│ ├── lib/ # 用户库文件
│ └── share/ # 共享数据
└── var/ # 可变数据文件
├── log/ # 日志文件
├── spool/ # 打印队列和邮件等
└── www/ # Web服务器数据
文件类型
Linux中有几种基本的文件类型:
- 普通文件(-):包含文本、数据或程序代码的文件
- 目录(d):包含其他文件和目录的特殊文件
- 符号链接(l):指向另一个文件或目录的快捷方式
- 块设备(b):以块为单位进行数据传输的设备,如硬盘
- 字符设备(c):以字符为单位进行数据传输的设备,如键盘、鼠标
- 管道(p):用于进程间通信的特殊文件
- 套接字(s):用于网络通信的特殊文件
文件权限
Linux使用权限系统来控制对文件和目录的访问,权限分为读取(r)、写入(w)和执行(x)三种:
- 读取权限(r):允许查看文件内容或列出目录内容
- 写入权限(w):允许修改文件内容或在目录中创建、删除文件
- 执行权限(x):允许执行文件或进入目录
权限应用于三类用户:
- 所有者(u):文件或目录的创建者
- 所属组(g):文件或目录所属的用户组
- 其他用户(o):既不是所有者也不是所属组成员的用户
权限可以用数字表示:
- r = 4, w = 2, x = 1
- 例如,权限rwxr-xr—用数字表示为754
linux基础行基础
基础命令
文件和目录操作命令
# 查看当前目录
pwd
# 列出目录内容
ls
ls -la # 显示所有文件(包括隐藏文件)的详细信息
# 切换目录
cd /path/to/directory
cd ~ # 切换到用户主目录
cd - # 切换到上一个工作目录
# 创建目录
mkdir directory_name
mkdir -p dir1/dir2 # 创建多级目录
# 创建空文件
touch file_name
# 复制文件或目录
cp source destination
cp -r source_dir destination_dir # 递归复制目录
# 移动或重命名文件或目录
mv source destination
# 删除文件
rm file_name
rm -f file_name # 强制删除
# 删除目录
rmdir empty_dir # 只能删除空目录
rm -rf dir_name # 递归强制删除目录及其内容
# 查看文件内容
cat file_name # 显示整个文件内容
less file_name # 分页显示文件内容
head -n 10 file_name # 显示文件前10行
tail -n 10 file_name # 显示文件后10行
tail -f file_name # 实时查看文件更新
文本处理命令
# 在文件中查找文本
grep pattern file_name
grep -r pattern directory_name # 递归搜索目录
# 排序文本
sort file_name
# 去除重复行
uniq file_name
# 文本替换
sed 's/pattern/replacement/g' file_name > new_file
# 文本分析
wc -l file_name # 统计行数
wc -w file_name # 统计单词数
wc -c file_name # 统计字符数
系统信息命令
# 显示系统信息
uname -a
# 显示CPU信息
cat /proc/cpuinfo
# 显示内存使用情况
free -h
# 显示磁盘使用情况
df -h
# 显示磁盘分区
fdisk -l
# 查看当前登录用户
who
# 查看系统负载
uptime
# 查看进程信息
ps aux
top
常用参数详解:
ps — 进程快照:
| 参数 | 含义 | 示例 |
|---|---|---|
a | 显示所有终端下的进程(含其他用户) | ps a |
u | 以用户友好格式输出(USER/PID/%CPU/%MEM/VSZ/RSS/STAT/START/TIME/COMMAND) | ps aux |
x | 显示无控制终端的进程(如后台守护进程) | ps aux |
e | 显示所有进程(等价于 -e) | ps -ef |
f | 显示进程树(父子关系) | ps -ef --forest |
-o | 自定义输出列 | ps -eo pid,ppid,cmd,%mem --sort=-%mem |
--sort | 按指定列排序(+ 升序/- 降序) | ps aux --sort=-%cpu |
-L | 显示进程中的线程 | ps -L -p <PID> |
常见组合:
ps aux— 最常用,查看所有进程及资源占用ps -ef— 查看所有进程的 PID/PPID 关系ps aux --sort=-%mem— 按内存占用排列,快速定位内存大户ps aux \| grep nginx— 配合 grep 查找特定进程
top — 实时进程监控(交互式):
启动后是交互界面,常用快捷键:
| 按键 | 含义 |
|---|---|
q | 退出 top |
h | 显示帮助菜单 |
k | 终止进程(会提示输入 PID 和信号) |
r | 修改进程优先级(renice) |
M | 按内存占用排序(%MEM 降序) |
P | 按 CPU 占用排序(%CPU 降序,默认) |
T | 按运行时间排序 |
1 | 展开/收起每个 CPU 核心的负载 |
c | 切换显示完整命令行 vs 仅进程名 |
u | 只显示指定用户的进程(输入用户名) |
W | 将当前设置写入 ~/.toprc 作为默认 |
输出字段含义:
%CPU— CPU 使用率(多核可达 100% × 核数)%MEM— 物理内存使用率VSZ— 虚拟内存大小(KB)RSS— 常驻物理内存大小(KB)STAT— 进程状态(R=运行,S=睡眠,D=不可中断,Z=僵尸,T=停止,<=高优先级,N=低优先级)
free — 内存使用情况:
| 参数 | 含义 | 示例 |
|---|---|---|
-h | 以人类可读格式输出(K/G 单位) | free -h |
-m | 以 MB 为单位显示 | free -m |
-g | 以 GB 为单位显示 | free -g |
-s N | 每隔 N 秒刷新输出 | free -h -s 5 |
-t | 显示总计行 | free -h -t |
df — 磁盘使用情况:
| 参数 | 含义 | 示例 |
|---|---|---|
-h | 以人类可读格式输出 | df -h |
-T | 显示文件系统类型 | df -hT |
-i | 显示 inode 使用情况而非容量 | df -i |
--type= | 只显示指定类型的文件系统 | df -h --type=ext4 |
-x | 排除指定类型的文件系统 | df -h -x tmpfs |
grep — 文本搜索:
| 参数 | 含义 | 示例 |
|---|---|---|
-i | 忽略大小写 | grep -i error /var/log/syslog |
-r | 递归搜索目录 | grep -r \"listen\" /etc/nginx/ |
-n | 显示匹配行号 | grep -rn \"error\" /var/log/ |
-v | 反向匹配(显示不包含模式的行) | grep -v \"^#\" /etc/nginx/nginx.conf(去掉注释行) |
-l | 只显示包含匹配的文件名 | grep -rl \"listen 80\" /etc/ |
-c | 只计数匹配行数 | grep -c error /var/log/syslog |
-E | 扩展正则表达式(等价于 egrep) | `grep -E “error |
-w | 匹配整个单词 | grep -w \"error\" /var/log/syslog(不匹配 error404) |
-A N | 显示匹配行后 N 行 | grep -A 5 \"panic\" /var/log/kern.log |
-B N | 显示匹配行前 N 行 | grep -B 3 \"OOM\" /var/log/syslog |
-C N | 显示匹配行前后各 N 行 | grep -C 10 \"mysql.*down\" /var/log/syslog |
--color=auto | 高亮匹配文本 | grep --color=auto \"error\" file |
权限管理命令
# 更改文件所有者
chown user:group file_name
# 更改文件权限
chmod 755 file_name
chmod u+x file_name # 给所有者添加执行权限
chmod go-rw file_name # 移除所属组和其他用户的读写权限
环境变量
环境变量是系统用来存储配置信息的变量,常见的环境变量包括:
- PATH:命令搜索路径
- HOME:用户主目录
- USER:当前用户名
- SHELL:当前使用的Shell
- LANG:系统语言设置
# 查看环境变量
echo $PATH
env # 显示所有环境变量
# 设置环境变量
export VAR_NAME=value # 临时设置
echo "export VAR_NAME=value" >> ~/.bashrc # 永久设置(对当前用户)
echo "export VAR_NAME=value" >> /etc/profile # 永久设置(对所有用户)
Linux用户和权限管理
用户账户管理
Linux使用用户账户来区分不同的使用者,每个用户有唯一的用户ID(UID):
- 普通用户:UID通常大于等于1000
- 系统用户:UID通常小于1000
- root用户:UID为0,具有系统最高权限
# 添加用户
useradd username
useradd -m username # 创建用户的同时创建主目录
useradd -s /bin/bash username # 指定用户的Shell
# 设置用户密码
passwd username
# 修改用户信息
usermod -l new_username old_username # 修改用户名
usermod -d /new/home username # 修改主目录
usermod -G group1,group2 username # 添加用户到多个组
# 删除用户
userdel username
userdel -r username # 删除用户的同时删除主目录
# 查看当前用户
whoami
# 切换用户
su - username # 切换用户并加载其环境变量
sudo command # 以root权限执行命令
用户组管理
用户组用于对用户进行分组管理,每个用户组有唯一的组ID(GID):
# 创建用户组
groupadd groupname
# 修改用户组
usermod -g groupname username # 修改用户的主组
groupmod -n new_name old_name # 修改用户组名称
# 删除用户组
groupdel groupname
# 查看用户所属的组
groups username
id username
Sudo权限管理
Sudo(superuser do)允许普通用户以其他用户(通常是root)的身份执行命令:
# 编辑sudoers文件
visudo # 推荐的方式编辑sudoers文件
# 常见的sudoers配置
username ALL=(ALL:ALL) ALL # 允许用户使用所有sudo权限
username ALL=(ALL:ALL) NOPASSWD:ALL # 允许用户无密码使用sudo
username ALL=(ALL:ALL) /usr/bin/apt # 只允许用户以sudo权限执行apt命令
Linux服务管理
服务概述
Linux系统中有许多服务程序,它们在后台运行,提供各种功能:
- 系统服务:如日志服务、时间同步服务
- 网络服务:如SSH服务、Web服务、邮件服务
- 应用服务:如数据库服务、缓存服务
服务管理命令
Systemd服务管理
Systemd是现代Linux系统中最常用的初始化系统,用于管理服务:
# 查看服务状态
systemctl status service_name
# 启动服务
systemctl start service_name
# 停止服务
systemctl stop service_name
# 重启服务
systemctl restart service_name
# 重新加载服务配置
systemctl reload service_name
# 设置服务开机自启
systemctl enable service_name
# 禁止服务开机自启
systemctl disable service_name
# 列出所有服务状态
systemctl list-units --type=service
# 列出所有已启用的服务
systemctl list-unit-files --type=service --state=enabled
常用参数详解:
| 参数 | 适用子命令 | 含义 | 示例 |
|---|---|---|---|
status | — | 查看单元状态:是否运行、PID、最近日志 | systemctl status nginx |
start | — | 立即启动,非持久化(重启后失效) | systemctl start nginx |
stop | — | 立即停止 | systemctl stop nginx |
restart | — | 先 stop 再 start,适用于配置或版本变更 | systemctl restart nginx |
reload | — | 发送 SIGHUP 让服务重读配置,不中断现有连接 | systemctl reload nginx |
enable | — | 创建符号链接,让服务在开机时自动启动 | systemctl enable nginx |
disable | — | 移除开机自启符号链接 | systemctl disable nginx |
--type=service | list-units | 只显示 .service 类型的单元(默认显示所有类型) | systemctl list-units --type=service |
--state= | list-units | 按状态过滤:active / inactive / failed / enabled / disabled | systemctl list-units --state=failed |
-l | status | 不截断输出长的行(默认输出会被截断) | systemctl status -l nginx |
--failed | list-units | 只列出启动失败的单元 | systemctl --failed |
is-active | — | 检查服务是否正在运行,返回 active/inactive,适合脚本判断 | systemctl is-active nginx |
使用场景对比:
- 重启服务后配置生效 →
restart(中断连接) - 在线重载配置不中断连接 →
reload(仅限支持 SIGHUP 的服务如 nginx) - 开机自启 →
enable不会立即启动,需再执行start - 临时禁用(不重启)→
stop;永久禁用 →disable && stop
常见服务示例:
- sshd:SSH服务,用于远程登录
- nginx:Web服务器
- mysql或mariadb:数据库服务
- docker:容器服务