Linux 教程
本教程由沈阳农业大学大学生网络信息中心运行部提供,适用于校园网站开发
第一章 CentOS 7 简介
1.1 CentOS 概述
CentOS(Community ENTerprise Operating System)是一个基于 Red Hat Enterprise Linux(RHEL)源代码构建的免费、开源的企业级 Linux 发行版。CentOS 7 是目前广泛使用的稳定版本,特别适合服务器环境。
1.2 为什么选择 CentOS 7
- 稳定性:长期支持(LTS)版本,生命周期至2024年6月
- 安全性:企业级安全更新和维护
- 兼容性:与 RHEL 完全兼容
- 社区支持:强大的社区和技术文档
- 广泛应用:常用于 Web 服务器、数据库服务器等
第二章 CentOS 7 常用命令
2.1 文件系统基础
在开始学习具体命令之前,先了解 Linux 文件系统的基本结构:
/
├── bin # 基本命令二进制文件
├── etc # 系统配置文件
├── home # 用户主目录
├── root # root用户主目录
├── tmp # 临时文件
├── usr # 用户程序和数据
└── var # 可变数据(日志、数据库等)
2.2 目录操作命令
cd - 切换目录
cd [目录路径]
功能:更改当前工作目录到指定的目录路径。
常用参数:
~或 无参数:切换到当前用户的主目录..:切换到上一级目录/:切换到根目录-:切换到上一个工作目录
示例:
# 切换到用户主目录
cd ~
# 或
cd
# 切换到根目录
cd /
# 切换到上级目录
cd ..
# 切换到 /etc 目录
cd /etc
# 切换到上次所在的目录
cd -
pwd - 显示当前目录
pwd
功能:显示当前工作目录的完整路径。
示例:
$ pwd
/home/student
2.3 文件列表命令
ls - 列出目录内容
ls [选项] [目录名]
功能:列出目录中的文件和子目录。如果没有指定目录,则显示当前目录的内容。
常用选项:
-l:使用长格式显示详细信息(权限、所有者、大小、时间等)-a:显示所有文件,包括隐藏文件(以.开头的文件)-h:以人类可读的格式显示文件大小(KB、MB、GB)-t:按修改时间排序,最新的在前-r:反向排序-R:递归显示子目录内容
示例:
# 列出当前目录内容(简单列表)
ls
# 列出详细信息(等价于 ll)
ls -l
# 列出所有文件(包括隐藏文件)
ls -a
# 组合使用多个选项
ls -lah
# 列出指定目录内容
ls /etc
# 递归列出所有子目录内容
ls -R /home
权限字段解释(ls -l 输出):
-rwxr-xr-x 1 user group 4096 Jan 15 10:30 filename
- 第1位:文件类型(
-普通文件,d目录,l链接) - 2-4位:所有者权限
- 5-7位:所属组权限
- 8-10位:其他用户权限
2.4 文件查看命令
cat - 查看文件内容
cat [选项] 文件...
功能:连接文件并打印到标准输出设备,常用于查看文件内容。
常用选项:
-n:显示行号-b:显示行号(空行不编号)
示例:
# 查看文件内容
cat file.txt
# 查看文件内容并显示行号
cat -n file.txt
# 查看多个文件
cat file1.txt file2.txt
# 将内容重定向到新文件
cat file1.txt file2.txt > combined.txt
vi/vim - 文件编辑
vim 文件名
功能:Linux 中最强大的文本编辑器之一,可用于编辑各种文件。
三种工作模式:
一般模式(命令模式)
- 进入方式:启动 vim 后默认模式,或按
Esc键 - 可执行复制、粘贴、删除、保存等操作
- 进入方式:启动 vim 后默认模式,或按
编辑模式(插入模式)
- 进入方式:按
i、a、o等键 - 可编辑文本内容
- 进入方式:按
底行模式(命令模式)
- 进入方式:在一般模式下按
:(Shift+;) - 可执行保存、退出、搜索等操作
- 进入方式:在一般模式下按
常用操作:
# 打开文件
vim file.txt
# 进入编辑模式(按i键)
i
# 退出编辑模式(按Esc键)
Esc
# 进入底行模式(按:键)
:
# 底行模式常用命令
:w # 保存
:q # 退出
:wq # 保存并退出
:q! # 不保存强制退出
:w 新文件名 # 另存为新文件
# 一般模式常用命令
dd # 删除当前行
yy # 复制当前行
p # 粘贴
u # 撤销
/搜索词 # 搜索(按n查找下一个,N查找上一个)
完整示例:
# 1. 打开文件
vim /etc/hosts
# 2. 按 i 进入编辑模式,修改内容
# 3. 按 Esc 退出编辑模式
# 4. 按 : 进入底行模式
# 5. 输入 wq 保存并退出
:wq
more/less - 分页查看文件
more 文件名
less 文件名
功能:分页显示文件内容,适合查看大文件。
more 常用操作:
空格:向下翻一页Enter:向下翻一行q:退出/字符串:搜索字符串
less 常用操作(功能更强大):
空格:向下翻一页b:向上翻一页/字符串:向下搜索?字符串:向上搜索q:退出
示例:
# 分页查看系统日志
less /var/log/messages
# 分页查看文件
more large_file.txt
2.5 权限管理命令
chmod - 修改文件权限
chmod [选项] 模式 文件
功能:更改文件或目录的访问权限。
权限表示方法:
1. 符号表示法:
u - 用户(所有者)
g - 用户组
o - 其他用户
a - 所有用户(u+g+o)
r - 读权限(值:4)
w - 写权限(值:2)
x - 执行权限(值:1)
2. 数字表示法:
- 读(r)= 4
- 写(w)= 2
- 执行(x)= 1
- 无权限 = 0
权限组合:rwx = 4+2+1 = 7
常用模式:
755:rwxr-xr-x(所有者:读+写+执行,组:读+执行,其他:读+执行)644:rw-r--r--(所有者:读+写,组:读,其他:读)777:rwxrwxrwx(所有用户都有读+写+执行权限)
示例:
# 数字模式设置权限
chmod 755 script.sh # 所有者可读写执行,组和其他可读执行
chmod 644 file.txt # 所有者可读写,组和其他只读
chmod 600 secret.txt # 仅所有者可读写
# 符号模式添加/移除权限
chmod u+x file.sh # 给所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod a+r public.txt # 给所有用户添加读权限
chmod o-rx script.sh # 移除其他用户的读和执行权限
# 递归修改目录权限
chmod -R 755 /path/to/dir # 修改目录及其所有子目录和文件
# 组合权限
chmod u=rwx,g=rx,o= file.sh # 所有者rwx,组rx,其他无权限
chown - 修改文件所有者
chown [选项] 用户[:组] 文件
功能:更改文件的所有者和所属组。
示例:
# 修改文件所有者
chown user1 file.txt
# 修改文件所有者和组
chown user1:group1 file.txt
# 递归修改目录所有者
chown -R user1:group1 /path/to/dir
# 只修改组
chown :group1 file.txt
2.6 文件操作命令
cp - 复制文件/目录
cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录
常用选项:
-r或-R:递归复制目录-i:交互模式,覆盖前提示-f:强制复制,不提示-p:保留文件属性(权限、时间等)-v:显示详细信息
示例:
# 复制文件
cp file1.txt file2.txt
cp file.txt /tmp/
# 复制目录(需要-r选项)
cp -r dir1 dir2
cp -r /home/user/data /backup/
# 交互式复制(覆盖前询问)
cp -i file.txt /tmp/
# 保留文件属性复制
cp -p file.txt backup.txt
mv - 移动/重命名文件
mv [选项] 源文件 目标文件
mv [选项] 源文件... 目标目录
常用选项:
-i:交互模式,覆盖前提示-f:强制移动,不提示-v:显示详细信息
示例:
# 重命名文件
mv oldname.txt newname.txt
# 移动文件到目录
mv file.txt /tmp/
# 移动多个文件
mv file1.txt file2.txt /tmp/
# 交互式移动
mv -i file.txt /tmp/
rm - 删除文件/目录
rm [选项] 文件...
常用选项:
-r或-R:递归删除目录-f:强制删除,不提示-i:交互模式,删除前提示
⚠️ 警告:rm -rf 命令非常危险,删除后无法恢复!
示例:
# 删除文件
rm file.txt
# 交互式删除
rm -i file.txt
# 删除目录(需要-r选项)
rm -r directory/
# 强制删除目录(危险!)
rm -rf directory/
# 删除所有.txt文件
rm *.txt
mkdir - 创建目录
mkdir [选项] 目录名...
常用选项:
-p:递归创建父目录-v:显示详细信息
示例:
# 创建单个目录
mkdir newdir
# 创建多个目录
mkdir dir1 dir2 dir3
# 递归创建目录(创建多级目录)
mkdir -p /path/to/new/dir
# 创建目录并设置权限
mkdir -m 755 project
2.7 系统信息命令
uname - 显示系统信息
uname [选项]
常用选项:
-a:显示所有信息-s:内核名称-r:内核版本-m:机器硬件名称
示例:
# 显示所有系统信息
uname -a
# 显示内核版本
uname -r
# 显示内核名称
uname -s
df - 显示磁盘空间
df [选项] [文件或目录]
常用选项:
-h:人类可读格式(KB、MB、GB)-T:显示文件系统类型
示例:
# 显示磁盘使用情况
df
# 人类可读格式
df -h
# 显示特定目录的磁盘使用情况
df -h /home
# 显示文件系统类型
df -T
free - 显示内存使用情况
free [选项]
常用选项:
-h:人类可读格式-m:以MB为单位-g:以GB为单位
示例:
# 显示内存使用情况
free
# 人类可读格式
free -h
2.8 进程管理命令
ps - 显示进程状态
ps [选项]
常用选项:
aux:显示所有用户的进程-ef:显示完整格式的所有进程-u 用户名:显示指定用户的进程
示例:
# 显示当前用户的所有进程
ps aux
# 显示完整格式的所有进程
ps -ef
# 查找特定进程
ps aux | grep nginx
# 显示特定用户的进程
ps -u root
kill - 终止进程
kill [选项] 进程ID
常用选项:
-9:强制终止-15:正常终止(默认)
信号列表:
1(SIGHUP):重新加载配置9(SIGKILL):强制终止15(SIGTERM):正常终止
示例:
# 正常终止进程
kill 1234
# 强制终止进程
kill -9 1234
# 终止多个进程
kill 1234 5678 9012
2.9 网络命令
ping - 测试网络连接
ping [选项] 主机名或IP地址
常用选项:
-c 次数:发送指定次数的包-i 秒数:发送间隔时间-W 秒数:超时时间
示例:
# 测试网络连接
ping google.com
# 发送指定数量的包
ping -c 4 192.168.1.1
# 设置发送间隔
ping -i 0.5 192.168.1.1
netstat - 显示网络状态
netstat [选项]
常用选项:
-t:TCP连接-u:UDP连接-l:监听状态的连接-p:显示进程信息-n:显示数字地址
示例:
# 显示所有连接
netstat -a
# 显示TCP连接
netstat -t
# 显示监听端口
netstat -l
# 显示进程信息
netstat -tlnp
curl/wget - 下载文件
curl [选项] URL
wget [选项] URL
curl 示例:
# 下载文件
curl -O http://example.com/file.zip
# 保存为指定文件名
curl -o newfile.zip http://example.com/file.zip
# 显示HTTP头信息
curl -I http://example.com
wget 示例:
# 下载文件
wget http://example.com/file.zip
# 断点续传
wget -c http://example.com/largefile.zip
# 递归下载
wget -r http://example.com/
第三章 实用技巧
3.1 管道(|)和重定向
管道:将一个命令的输出作为另一个命令的输入
# 查找包含"error"的日志行
cat /var/log/messages | grep error
# 统计文件行数
cat file.txt | wc -l
# 排序并去重
cat file.txt | sort | uniq
重定向:
# 输出重定向(覆盖)
ls > filelist.txt
# 输出重定向(追加)
ls >> filelist.txt
# 错误输出重定向
command 2> error.log
# 输入重定向
sort < input.txt
3.2 通配符
*:匹配任意字符(0个或多个)?:匹配单个字符[abc]:匹配a、b、c中任意一个字符[0-9]:匹配0-9的数字[!abc]:匹配除a、b、c外的任意字符
示例:
# 列出所有.txt文件
ls *.txt
# 列出以a开头的文件
ls a*
# 列出以数字开头的文件
ls [0-9]*
# 列出三个字符的文件
ls ???.txt
3.3 命令历史
# 查看命令历史
history
# 执行历史命令
!! # 执行上一条命令
!n # 执行第n条历史命令
!string # 执行最近以string开头的命令
# 搜索历史命令
Ctrl + R # 反向搜索历史命令
3.4 快捷键
Ctrl + C:终止当前命令Ctrl + Z:暂停当前命令(可用fg恢复)Ctrl + D:退出当前shell(EOF)Ctrl + L:清屏Ctrl + A:移动到行首Ctrl + E:移动到行尾Ctrl + U:删除到行首Ctrl + K:删除到行尾Tab:命令/文件名补全
第四章 CentOS 7 系统管理
4.1 用户和组管理
useradd - 添加用户
# 添加用户
useradd username
# 添加用户并指定主目录
useradd -m username
# 添加用户并指定UID
useradd -u 1001 username
# 添加用户并指定登录shell
useradd -s /bin/bash username
passwd - 修改密码
# 修改当前用户密码
passwd
# 修改指定用户密码(需要root权限)
passwd username
groupadd - 添加组
# 添加组
groupadd groupname
# 添加组并指定GID
groupadd -g 1001 groupname
4.2 服务管理(systemctl)
CentOS 7 使用 systemd 管理系统服务:
# 启动服务
systemctl start service_name
# 停止服务
systemctl stop service_name
# 重启服务
systemctl restart service_name
# 重新加载配置
systemctl reload service_name
# 查看服务状态
systemctl status service_name
# 启用开机自启
systemctl enable service_name
# 禁用开机自启
systemctl disable service_name
# 查看所有服务
systemctl list-units --type=service
# 查看失败的服务
systemctl --failed
常用服务:
firewalld:防火墙sshd:SSH服务nginx:Web服务器httpd:Apache服务器mysqld:MySQL数据库postgresql:PostgreSQL数据库
4.3 软件包管理(yum)
# 安装软件包
yum install package_name
# 搜索软件包
yum search keyword
# 查看软件包信息
yum info package_name
# 更新软件包
yum update package_name
# 更新所有软件包
yum update
# 卸载软件包
yum remove package_name
# 列出已安装软件包
yum list installed
# 清除缓存
yum clean all
# 查看可用更新
yum check-update
4.4 防火墙管理(firewalld)
# 查看防火墙状态
firewall-cmd --state
# 查看所有规则
firewall-cmd --list-all
# 开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
# 移除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 重新加载防火墙规则
firewall-cmd --reload
# 添加服务(如http、https、ssh)
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-service=ssh --permanent
# 查看开放的服务
firewall-cmd --zone=public --list-services