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采用分层架构设计,主要包括以下几个层次:

  1. 硬件层:物理硬件设备,如CPU、内存、硬盘等
  2. 内核层:Linux内核,负责管理硬件资源和提供系统调用接口
  3. Shell层:命令解释器,用于接收用户命令并执行
  4. 应用层:各种应用程序和工具

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中有几种基本的文件类型:

  1. 普通文件(-):包含文本、数据或程序代码的文件
  2. 目录(d):包含其他文件和目录的特殊文件
  3. 符号链接(l):指向另一个文件或目录的快捷方式
  4. 块设备(b):以块为单位进行数据传输的设备,如硬盘
  5. 字符设备(c):以字符为单位进行数据传输的设备,如键盘、鼠标
  6. 管道(p):用于进程间通信的特殊文件
  7. 套接字(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显示所有进程(等价于 -eps -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=servicelist-units只显示 .service 类型的单元(默认显示所有类型)systemctl list-units --type=service
--state=list-units按状态过滤:active / inactive / failed / enabled / disabledsystemctl list-units --state=failed
-lstatus不截断输出长的行(默认输出会被截断)systemctl status -l nginx
--failedlist-units只列出启动失败的单元systemctl --failed
is-active检查服务是否正在运行,返回 active/inactive,适合脚本判断systemctl is-active nginx

使用场景对比:

  • 重启服务后配置生效 → restart(中断连接)
  • 在线重载配置不中断连接 → reload(仅限支持 SIGHUP 的服务如 nginx)
  • 开机自启 → enable 不会立即启动,需再执行 start
  • 临时禁用(不重启)→ stop;永久禁用 → disable && stop

常见服务示例:

  • sshd:SSH服务,用于远程登录
  • nginx:Web服务器
  • mysqlmariadb:数据库服务
  • docker:容器服务