一、Linux 操作系统概述
1.1 操作系统的核心价值
操作系统的本质是 "使计算机更好用"。它作为用户与硬件之间的中间层,负责内存管理、进程调度、文件系统管理和设备驱动管理等核心功能,让用户无需直接操作硬件即可完成复杂任务。在服务器领域,Linux 凭借其稳定性、安全性和开源特性,已成为全球最主流的操作系统之一。
1.2 Linux 的发展历程
1.2.1 UNIX 的起源
Linux 的故事始于 UNIX。1968 年,通用电器、贝尔实验室和麻省理工学院合作开发了 Multics 系统,为后续操作系统奠定了多任务、多用户的设计基础。1969-1970 年,贝尔实验室的 Ken Thompson 和 Dennis Ritchie 在 Multics 基础上开发了 UNIX 系统,其高效性和可移植性使其迅速在学术界传播。
1972 年,UNIX 开始商业发行,加州大学伯克利分校在此基础上开发了 BSD 版本,与 AT&T 的 System V 形成两大分支。1991 年,UNIX 系统实验室推出 System V Release 4,整合了多个版本的特性,成为重要的商业标准。
1.2.2 Linux 的诞生
1991 年 10 月 5 日,赫尔辛基大学研究生 Linus Torvalds 在 Usenet 新闻组宣布了 Linux 操作系统的诞生。这款受 Minix 启发的系统最初仅作为个人项目,却意外引发全球开发者协作热潮。1994 年,Linux 1.0 版本正式发布,标志着其进入实用阶段。
与 UNIX 不同,Linux 采用 GNU GPL 开源协议,允许用户自由使用、修改和分发源代码,这种开源模式极大加速了其发展。如今,Linux 已从最初的个人项目成长为支撑全球互联网基础设施的核心系统。
1.3 Linux 的应用现状
- 服务器领域:占据全球 75% 的服务器市场份额,在政府、金融、电信等关键领域广泛应用
- 桌面领域:国内有中标麒麟、深度 Linux 等发行版,国际上 Ubuntu 凭借易用性积累了大量用户,但在软硬件兼容性上仍与 Windows 存在差距
- 移动嵌入式领域:Android 系统基于 Linux 内核开发,占据全球 84.6% 的智能手机市场;路由器、智能电视等设备也大量采用定制化 Linux
- 云计算 / 大数据领域:86% 的企业使用 Linux 构建云计算和大数据平台,逐步取代 UNIX 成为主流
1.4 主流发行版本
- Debian:以稳定性著称,适合服务器场景,适合高级用户和系统管理员
- Ubuntu:Debian 的衍生版,易用性强,广泛应用于桌面、服务器和云计算领域
- 红帽企业级 Linux(RHEL):首个商业 Linux 发行版,通过 RHCSA/RHCE 认证体系培养了大量系统管理员
- CentOS:基于 RHEL 源代码重构的免费版本,与 RHEL 兼容性极高,适合预算有限的企业
- Fedora:红帽的测试平台,包含最新技术,适合开发者尝鲜
- Kali Linux:专注于渗透测试的发行版,预装大量安全工具,是网络安全从业者的首选
二、Linux 基础操作指令
2.1 远程登录工具 XShell
在服务器管理中,图形界面因资源消耗大、效率低而极少使用,远程终端成为主要操作方式。XShell 是常用的远程终端工具,其免费版本(home/school)可满足个人学习需求(也可以使用虚拟机,但是不推荐新手使用虚拟机)。
登录步骤:
- 查看 Linux 主机 IP:
ifconfig(可在各大平台购买云服务器)
- 建立连接:
ssh [IP地址]
- 输入用户名和密码完成登录
2.2 文件与目录操作
2.2.1 目录查看(ls)
ls
命令用于列出目录内容,选项:
-a
:显示所有文件(包括以.
开头的隐藏文件)-l
:显示详细信息(权限、所有者、大小、修改时间等)-d
:将目录本身作为文件显示-i
:显示 inode 编号-t
:按修改时间排序-r
:反向排序-R
:递归显示子目录内容
示例:
# 显示当前目录所有文件的详细信息
ls -al
# 显示/var目录的inode信息
ls -id /var
# 按大小排序显示/tmp目录内容
ls -lS /tmp
这里常用选项有 -l -a记住这两个就行
2.2.2 路径查看(pwd)
在这里介绍几个标识符 '.' 代表当前工作路径 '..'代表上一级工作路径'/'代表根目录
pwd
命令用于显示当前工作目录的绝对路径:
2.2.3 目录切换(cd)
cd
命令用于切换工作目录,Linux 的路径分为:
- 绝对路径:从根目录
/
开始的完整路径(如/home/whb/test
) - 相对路径:相对于当前目录的路径(如
../temp
表示上级目录的 temp 文件夹)
常用操作:
# 切换到/tmp目录
cd /tmp
# 返回上级目录
cd ..
# 切换到用户家目录
cd ~
# 切换到上一次所在目录
cd -
2.2.4 文件创建(touch)
touch
命令用于创建空文件或修改文件时间戳:
-a
:仅修改访问时间-m
:仅修改修改时间
示例:
# 创建新文件
touch newfile.txt
# 修改文件访问时间
touch -a oldfile.txt
# 查看文件时间信息
stat newfile.txt
文件的时间戳包含三种:
- Access:最后访问时间
- Modify:内容最后修改时间
- Change:元数据(权限、所有者等)最后修改时间
2.2.5 目录创建(mkdir)
mkdir
命令用于创建目录,关键选项-p
可递归创建多级目录:
# 创建单级目录
mkdir docs
# 创建多级目录
mkdir -p project/src/main/java
# 查看创建结果 tree命令可能会没有安装 安装指令为:(sudo) yum/apt install -y tree (root账户不需要sudo)
tree project
2.2.6 目录删除(rmdir)
rmdir
用于删除空目录,-p
选项可删除空的父目录(指令不常用,推荐使用rm):
# 删除空目录
rmdir empty_dir
# 递归删除空目录链
rmdir -p a/b/c
注意:若目录非空,rmdir 会提示错误,需使用
rm -r
命令
2.2.7 文件 / 目录删除(rm)
rm
是删除文件和目录的核心命令,常用选项:
-f
:强制删除,不提示-i
:删除前询问确认-r
:递归删除目录及内容
示例:
# 删除文件(会提示)
rm file.txt
# 强制删除目录及所有内容
rm -rf old_project
# 删除前询问的递归删除
rm -ri data/
警告:
rm -rf /
是极其危险的命令,会删除系统所有文件,绝对禁止使用
2.2.8 文件复制(cp)
cp
用于复制文件或目录,核心选项:
-i
:覆盖前询问-r
:递归复制目录-f
:强制覆盖
示例:
# 复制文件
cp document.txt backup/
# 递归复制目录
cp -r src/ dest/
# 覆盖前询问
cp -i new.txt old.txt
# 复制所有txt文件到archive目录
cp *.txt archive/
2.2.9 文件移动 / 重命名(mv)
mv
可实现文件移动或重命名,常用选项:
-i
:覆盖前询问-f
:强制覆盖
示例:
# 重命名文件
mv oldname.txt newname.txt
# 移动文件到目录
mv report.pdf docs/
# 移动多个文件到归档目录
mv *.log logs/
# 覆盖前询问
mv -i temp.txt data/
2.3 文件内容查看
2.3.1 文本查看(cat)
cat
用于查看文件内容,适合小文件:
-n
:显示所有行号-b
:仅显示非空行号-s
:压缩连续空行为一行
示例:
# 查看文件内容
cat README.md
# 显示行号
cat -n script.sh
# 压缩空行
cat -s notes.txt
2.3.2 分页查看(more/less)
more
:基本分页工具,仅支持向前滚动-n
:指定每页显示行数q
:退出查看
less
:增强版分页工具,支持前后滚动和搜索-N
:显示行号/关键词
:向下搜索?关键词
:向上搜索n
:重复上一次搜索q
:退出
示例:
# 分页查看长文件
more -20 large_file.log
# 带行号查看并允许搜索
less -N access.log
2.3.3 头尾查看(head/tail)
head
:显示文件开头内容(默认 10 行)tail
:显示文件结尾内容(默认 10 行),-f
选项可实时监控文件更新
示例:
# 显示前5行
head -5 config.ini
# 显示最后3行
tail -3 results.txt
# 实时监控日志文件
tail -f /var/log/syslog
高级用法:显示文件的 180-200 行
head -200 file.txt | tail -20
2.4 系统信息查询
2.4.1 帮助手册(man)
man
命令用于查看命令手册,手册分为 9 个章节:
- 普通命令
- 系统调用(如 open、write)
- 库函数(如 printf)
- 特殊文件(/dev 下的设备文件)
- 文件格式(如 passwd 文件结构)
- 游戏程序
- 系统变量和附件
- 系统管理命令
- 内核相关
示例:
# 查看ls命令手册
man ls
# 查看printf库函数(第三章)
man 3 printf
# 查看系统调用fork(第二章)
man 2 fork
2.4.2 命令定位(which/whereis)
which
:查找命令的可执行文件路径whereis
:查找命令的二进制文件、源代码和手册页
示例:
# 查找ls命令位置
which ls
# 查找gcc的相关文件
whereis gcc
2.4.3 时间管理(date/cal)
date
命令用于显示和设置系统时间:
# 显示当前时间
date
# 按指定格式显示(年/月/日-时:分:秒)
date +%Y/%m/%d-%H:%M:%S
# 显示时间戳(从1970-01-01开始的秒数)
date +%s
# 时间戳转换为可读时间
date -d @1673432636
cal(calendar)
命令用于查看日历:
# 显示当前月日历
cal
# 显示2024年全年日历
cal 2024
# 显示包含上月、本月、下月的日历
cal -3
# 显示当天是当年的第几天
cal -j
2.4.4 系统信息(uname)
uname
用于查看系统内核信息:
# 显示内核版本
uname -r
# 显示所有系统信息
uname -a
# 查看操作系统版本(部分发行版支持)
lsb_release -a
2.5 搜索与文本处理
2.5.1 文件搜索(find)
find
在目录树中搜索文件,常用选项:
-name
:按文件名搜索-type
:按文件类型搜索(f:普通文件,d:目录,l:链接)-size
:按文件大小搜索-mtime
:按修改时间搜索
示例:
# 在当前目录搜索test.c文件
find . -name "test.c"
# 在/home下搜索所有目录
find /home -type d
# 搜索大于100MB的文件
find / -size +100M
# 搜索近7天修改过的文件
find /var/log -mtime -7
2.5.2 文本搜索(grep)
grep
用于在文件中搜索字符串,支持正则表达式:
-i
:忽略大小写-n
:显示行号-v
:反向匹配(显示不包含关键词的行)-r
:递归搜索目录
示例:
# 在文件中搜索关键词
grep "error" app.log
# 忽略大小写搜索
grep -i "warning" system.log
# 显示行号并反向匹配
grep -vn "debug" debug.log
# 递归搜索目录中的关键词
grep -r "config" /etc/
2.6 压缩与打包
2.6.1 zip/unzip(知道)
zip
和unzip
用于处理 ZIP 格式压缩文件:
# 压缩目录
zip -r docs.zip documents/
# 解压到指定目录
unzip docs.zip -d /tmp/
2.6.2 tar(重要)
tar
是 Linux 最常用的打包工具,支持多种压缩算法:
-c
:创建打包文件-x
:解包-t
:查看包内文件-z
:使用 gzip 压缩 / 解压-j
:使用 bzip2 压缩 / 解压-v
:显示过程-f
:指定文件名-C
:指定解压目录
示例:
# 打包目录(不压缩)
tar -cvf data.tar data/
# 用gzip压缩
tar -zcvf logs.tar.gz /var/log/
# 用bzip2压缩
tar -jcvf docs.tar.bz2 documents/
# 查看压缩包内容
tar -ztvf logs.tar.gz
# 解压到指定目录
tar -zxvf logs.tar.gz -C /tmp/
# 仅解压包中的特定文件
tar -zxvf docs.tar.bz2 README.md
三、Linux 权限管理系统
3.1 权限的核心概念
Linux 是多用户操作系统,权限系统确保不同用户对资源的访问受到合理控制。权限管理基于三个维度:
访问者分类
- u(User):文件所有者
- g(Group):所有者所在组的用户
- o(Others):其他用户
- a(All):所有用户
文件类型
- d:目录
- -:普通文件
- l:软链接(快捷方式)
- b:块设备文件(如硬盘)
- c:字符设备文件(如终端)
- p:管道文件
- s:套接口文件
3.2 基本权限表示
Linux 为每种访问者分配三种基本权限:
权限 | 字符表示 | 数字表示 | 文件含义 | 目录含义 |
---|---|---|---|---|
读 | r | 4 | 可读取文件内容 | 可列出目录内容 |
写 | w | 2 | 可修改文件内容 | 可创建 / 删除目录内文件 |
执行 | x | 1 | 可执行文件 | 可进入目录 |
无权限 | - | 0 | 无对应权限 | 无对应权限 |
权限组合采用三位数表示(类似八进制如755
),第一位表示所有者权限,第二位表示组权限,第三位表示其他用户权限。例如:
rwxr-xr-x
(755):所有者拥有全部权限,组和其他用户有读和执行权限rw-r--r--
(644):所有者有读写权限,组和其他用户仅有读权限
3.3 权限修改命令
3.3.1 chmod:修改文件权限
chmod
用于修改文件或目录的权限,支持两种修改方式:
符号法:chmod [u/g/o/a][+/-/=][r/w/x] 文件名
# 给所有者增加执行权限
chmod u+x script.sh
# 移除其他用户的写权限
chmod o-w data.txt
# 给所有用户设置读写权限
chmod a=rw config.ini
# 递归修改目录权限
chmod -R g+rx docs/
数字法:chmod 三位数字 文件名
# 设置权限为rw-r--r--
chmod 644 article.txt
# 设置目录权限为rwxr-x---
chmod 750 project/
# 递归设置目录及内容权限
chmod -R 775 shared/
3.3.2 chown:修改所有者
chown
用于修改文件的所有者(仅 root 或文件所有者可执行):
# 改变文件所有者
chown alice report.txt
# 同时改变所有者和所属组
chown bob:devs data.csv
# 递归修改目录所有者
chown -R www:www /var/www/
3.3.3 chgrp:修改所属组
chgrp
用于修改文件的所属组:
# 改变文件所属组
chgrp devs code.c
# 递归修改目录所属组
chgrp -R admins docs/
3.4 权限掩码(umask)
umask 用于设置新建文件和目录的默认权限,其值为 "要去掉的权限"。计算方式为:
- 新建文件默认权限:
0666 & ~umask
(文件默认无执行权限) - 新建目录默认权限:
0777 & ~umask
示例:
# 查看当前umask
umask
# 设置umask(root默认0022,普通用户默认0002)
umask 002
# 验证:新建文件权限为664(666-002)
touch test.txt
ls -l test.txt # -rw-rw-r--
3.5 特殊权限:粘滞位
在默认权限下,只要用户对目录有写权限,就可以删除目录中的任何文件,无论该文件的所有者是谁。为解决此问题,Linux 引入粘滞位(Sticky Bit):
- 目录设置粘滞位后(权限末尾显示
t
),仅以下用户可删除文件:- 超级管理员(root)
- 目录所有者
- 文件所有者
操作示例:
# 给目录添加粘滞位
chmod +t /tmp
# 查看权限(显示drwxrwxrwt)
ls -ld /tmp
# 移除粘滞位
chmod -t /tmp
系统临时目录/tmp
默认设置粘滞位,确保普通用户不能删除他人文件。
3.6 sudo 权限管理(需要学习vim工具,后续会讲)
sudo 允许普通用户临时执行 root 权限命令,配置步骤:
- 修改 sudo 配置文件(需 root 权限):
chmod 740 /etc/sudoers
vi /etc/sudoers
- 添加权限配置(格式:
用户名 主机=(执行用户) 命令
):
# 允许alice执行所有命令
alice ALL=(ALL) ALL
# 允许bob仅执行useradd和userdel命令
bob ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel
- 普通用户使用 sudo 执行命令:
# 以root权限创建用户
sudo -u root useradd newuser
四、Linux 常用进阶操作
4.1 管道与重定向
重定向:改变命令输出方向
>
:覆盖写入文件>>
:追加写入文件<
:从文件读取输入
管道:将一个命令的输出作为另一个命令的输入(
|
)
示例:
# 将命令输出写入文件
ls -l > filelist.txt
# 追加输出到文件
echo "new line" >> notes.txt
# 统计文件行数
cat large_file.txt | wc -l
# 搜索进程并显示详细信息
ps aux | grep "nginx"
4.2 系统进程管理(top)
top
用于实时监控系统进程和资源占用:
-d
:设置刷新间隔(秒)-n
:设置刷新次数
操作快捷键:
q
:退出P
:按 CPU 使用率排序M
:按内存使用率排序k
:终止指定进程h
:显示帮助
示例:
# 每2秒刷新一次,共刷新5次
top -d 2 -n 5
4.3 别名设置(alias)
alias
用于创建命令别名,简化复杂操作:
# 设置别名
alias ll='ls -alF'
alias rm='rm -i' # 删除前自动询问
# 查看别名
alias
# 取消别名
unalias ll
永久生效需将别名添加到~/.bashrc
或~/.bash_profile
文件。
4.4 文件传输(rz/sz)
通过 XShell 在 Windows 和 Linux 间传输文件:
# 安装工具
sudo yum install -y lrzsz
# 上传文件(从Windows到Linux)
rz # 执行后选择本地文件
# 下载文件(从Linux到Windows)
sz filename.txt
五、权限管理实践案例
5.1 网站目录权限配置
为确保 Web 服务器安全,合理配置目录权限:
# 创建网站根目录
mkdir -p /var/www/example.com
# 设置所有者为www-data(Web服务用户)
chown -R www-data:www-data /var/www/example.com
# 目录权限:所有者读写执行,组读执行,其他无权限
find /var/www/example.com -type d -exec chmod 750 {} \;
# 文件权限:所有者读写,组读,其他无权限
find /var/www/example.com -type f -exec chmod 640 {} \;
5.2 多用户协作目录
创建团队共享目录,确保成员可读写但不能删除他人文件:
# 创建共享目录
mkdir /team/share
# 设置所属组为dev
chgrp -R dev /team/share
# 允许组内用户读写,添加粘滞位
chmod -R 775 /team/share
chmod +t /team/share
5.3 日志文件权限控制
确保日志文件可被服务写入,同时仅管理员可查看:
# 创建日志目录
mkdir /var/log/app
# 设置所有者为应用用户,所属组为adm
chown -R appuser:adm /var/log/app
# 目录权限:所有者全权限,组读执行,其他无
chmod 750 /var/log/app
# 日志文件权限:所有者读写,组读,其他无
chmod 640 /var/log/app/*.log
六、总结与扩展学习
Linux 指令和权限管理是系统运维的基础,掌握这些知识不仅能提高工作效率,更能构建安全可靠的系统环境。学习建议:
- 刻意练习:通过实际操作记忆指令,避免死记硬背
- 查看手册:善用
man
命令查询参数细节 - 理解原理:不仅要知道 "怎么做",更要理解 "为什么"
- 安全意识:操作权限和删除命令时务必谨慎,养成备份习惯
进阶学习方向:Shell 脚本编程、Linux 内核原理、容器化技术(Docker)等,这些都需要扎实的 Linux 基础作为支撑。
Linux 的开源生态和丰富工具链为技术人员提供了无限可能,持续探索和实践,才能真正发挥其强大能力。