虚拟主机域名注册-常见问题其他问题 → 其他问题

Linux从入门到精通详细教程

1. 引言

Linux作为现代互联网基础设施的支柱,掌握它就像拥有了一把"万能钥匙"。无论你是要管理服务器、搭建开发环境,还是进行数据分析,Linux都是不可或缺的技能。

想象Linux系统就像一座城市,而命令行就是这座城市的"万能工具箱"。通过学习Linux命令,你可以像城市管理员一样,高效地管理文件、控制进程、监控系统状态,甚至自动化日常工作。这不仅能让你在工作中事半功倍,还能为你打开通往系统架构师、运维工程师、DevOps工程师等高薪职位的大门。

2. 基础概念和命令语法

2.1 什么是Linux命令行?

Linux命令行(Terminal) 是与操作系统交流的文本接口,就像和电脑"对话"的特殊语言。如果把图形界面比作"指手画脚",那么命令行就是"直接下命令"——更精确、更高效、更强大。

在Linux系统中,命令行是核心控制中心,几乎所有系统功能都可以通过命令来实现,包括文件管理、程序控制、网络配置、系统监控等。

2.2 基本命令语法

Linux命令遵循统一的语法结构:

  1. 命令 [选项] [参数] [目标]


各部分说明:

  • 命令:要执行的操作(如ls、cd、mkdir)

  • 选项:修改命令行为的开关(如-l、-a、--help)

  • 参数:命令要处理的对象(如文件名、目录名)

  • 目标:操作的目标位置(可选)

查看命令帮助的方法:

  1. # 查看命令的简短帮助

  2. ls --help


  3. # 查看命令的详细手册

  4. man ls


  5. # 查看命令的简要信息

  6. whatis ls


2.3 常用选项和参数说明

选项/参数作用说明详细解释使用场景
-h 或 --help显示帮助信息获取命令的使用方法和参数说明忘记命令用法时
-v 或 --version显示版本信息查看软件版本号确认软件版本兼容性
-r 或 -R递归操作对目录及其子目录递归执行操作处理目录树结构
-f强制执行不询问确认,强制执行操作批量操作或脚本中
-i交互模式执行前询问用户确认安全地删除或覆盖文件
-l长格式显示显示详细信息查看文件权限、大小、时间
-a显示所有包括隐藏文件和目录查看完整的文件列表

2.4 第一个最简单示例

让我们从最基础的命令开始:

  1. # 显示当前所在目录

  2. pwd

  3. # 输出示例:/home/username


  4. # 列出当前目录的文件

  5. ls

  6. # 输出示例:Documents Downloads Pictures Videos


  7. # 查看当前时间和日期

  8. date

  9. # 输出示例:Mon Jun 9 14:30:25 CST 2025


  10. # 显示当前登录用户

  11. whoami

  12. # 输出示例:username


环境准备步骤:

  1. 打开终端(Terminal)

  2. 确保你有普通用户权限

  3. 在家目录下练习(通常是/home/你的用户名)

3. 核心特性详解

3.1 特性一:文件系统导航

  • 是什么:Linux使用树状目录结构,就像倒置的树,根目录(/)是树根,所有目录都是分支

  • 为什么重要:掌握导航是使用Linux的基础,就像在城市中学会看路标

  • 怎么用:使用cd、pwd、ls等命令在目录间移动

  1. # 切换到根目录

  2. cd /


  3. # 切换到家目录

  4. cd ~

  5. # 或者

  6. cd


  7. # 切换到上级目录

  8. cd ..


  9. # 切换到上上级目录

  10. cd ../..


3.2 特性二:文件操作管理

  • 是什么:创建、复制、移动、删除文件和目录的能力

  • 为什么重要:文件管理是日常工作的核心,比图形界面更精确高效

  • 怎么用:使用mkdir、cp、mv、rm等命令进行文件操作

  1. # 创建目录

  2. mkdir my_project


  3. # 创建文件

  4. touch readme.txt


  5. # 复制文件

  6. cp readme.txt readme_backup.txt


  7. # 移动/重命名文件

  8. mv readme.txt project_readme.txt


3.3 特性三:权限控制

  • 是什么:Linux的多用户权限系统,控制谁可以访问什么文件

  • 为什么重要:保护系统安全,防止误操作和恶意访问

  • 怎么用:使用chmod、chown等命令管理权限

  1. # 查看文件权限

  2. ls -l filename.txt


  3. # 给文件添加执行权限

  4. chmod +x script.sh


  5. # 递归修改目录权限

  6. chmod -R 755 /path/to/directory


3.4 特性选择指南

应用场景推荐特性选择原因命令示例
日常文件管理文件系统导航基础必需,使用频率最高cd, ls, pwd
项目开发文件操作管理需要频繁创建、修改文件mkdir, cp, mv
服务器管理权限控制安全考虑,多用户环境chmod, chown
系统监控进程管理需要监控和控制程序运行ps, top, kill

4. Linux系统基础知识

4.1 Linux目录结构详解

Linux目录结构就像一棵倒立的树,根目录/是整个系统的起点,所有其他目录都从这里开始分支。

重要目录说明:

目录作用说明详细解释使用场景
/根目录整个Linux系统的起点所有路径的开始
/home用户家目录存放普通用户的个人文件个人文档、配置文件
/rootroot用户家目录超级管理员的个人目录管理员文件存放
/etc配置文件目录系统和应用程序配置文件修改系统设置
/var可变数据目录日志文件、临时文件等查看系统日志
/usr用户程序目录安装的应用程序和文件软件安装位置
/bin基本命令目录基础系统命令ls、cp等基本命令
/sbin管理员命令目录系统管理员专用命令系统管理命令
/tmp临时文件目录临时文件存放临时数据处理

实践操作

  1. # 查看根目录结构

  2. ls -la /


  3. # 查看家目录

  4. ls -la ~


  5. # 查看当前用户家目录位置

  6. echo $HOME


  7. # 绝对路径示例

  8. ls /home/username/Documents


  9. # 相对路径示例

  10. cd Documents # 从当前目录进入Documents

  11. cd ~/Documents # 从任何位置进入用户家目录下的Documents


4.2 关机和重启命令详解

基本介绍: Linux提供了多种关机和重启的命令,每种都有其特定的用途和安全考虑。

常用关机重启命令表:

命令作用说明详细用法使用场景
shutdown -h now立即关机最安全的关机方式正常关机时
shutdown -h 11分钟后关机给用户预警时间服务器维护时
shutdown -r now立即重启安全重启系统配置修改后重启
halt关机作用和shutdown -h相同快速关机
reboot重启立即重启计算机快速重启
sync同步数据将内存数据写入磁盘关机前执行

详细使用示例

  1. # 立即关机(需要root权限)

  2. sudo shutdown -h now


  3. # 1分钟后关机,并发送消息给所有用户

  4. sudo shutdown -h 1 "系统将在1分钟后关机进行维护"


  5. # 定时关机(晚上10点关机)

  6. sudo shutdown -h 22:00


  7. # 取消已计划的关机

  8. sudo shutdown -c


  9. # 立即重启

  10. sudo reboot


  11. # 同步内存数据到磁盘(重要!)

  12. sync


重要安全提醒

  1. 总是先执行sync命令:确保内存中的数据写入磁盘

  2. 避免强制断电:使用正确的关机命令,保护数据安全

  3. 服务器关机前通知:给其他用户预警时间

  4. 检查运行中的任务:确保没有重要任务在运行

  1. # 安全关机的完整流程

  2. sync # 同步数据

  3. ps aux | grep -v grep # 检查运行的进程

  4. sudo shutdown -h 1 "系统即将关机维护" # 预警关机


4.3 用户登录和注销

基本概念: Linux是多用户系统,支持多个用户同时使用。理解用户管理是使用Linux的基础。

用户类型说明

用户类型说明权限范围使用建议
root超级管理员所有权限,可以做任何操作只在必要时使用,风险大
普通用户一般用户有限权限,主要在自己家目录日常使用,安全性高
系统用户服务用户运行特定服务系统内部使用,不需关心

登录和注销操作

  1. # 查看当前登录用户

  2. whoami


  3. # 查看所有登录用户

  4. who


  5. # 查看详细登录信息

  6. w


  7. # 切换到其他用户(需要密码)

  8. su username


  9. # 切换到root用户

  10. su -


  11. # 以其他用户身份执行命令

  12. sudo command


  13. # 注销当前用户(命令行界面)

  14. logout

  15. # 或者使用快捷键 Ctrl + D


安全使用建议

  1. 避免直接使用root登录:使用普通用户+sudo更安全

  2. 定期更换密码:保持账户安全

  3. 及时注销:离开时要注销避免他人操作

4.4 用户管理基础命令

适用场景:系统管理员需要创建、删除、修改用户账户

基础用户管理命令

  1. # 添加新用户(需要root权限)

  2. sudo useradd username


  3. # 为新用户设置密码

  4. sudo passwd username


  5. # 添加用户并创建家目录

  6. sudo useradd -m username


  7. # 添加用户并指定家目录

  8. sudo useradd -m -d /home/custompath username


  9. # 删除用户(保留家目录)

  10. sudo userdel username


  11. # 删除用户及其家目录

  12. sudo userdel -r username


  13. # 修改用户信息

  14. sudo usermod -c "用户全名" username


  15. # 查看用户信息

  16. id username


  17. # 查看所有用户

  18. cat /etc/passwd | grep -v nologin


用户组管理

  1. # 创建用户组

  2. sudo groupadd groupname


  3. # 将用户添加到组

  4. sudo usermod -aG groupname username


  5. # 查看用户所属组

  6. groups username


  7. # 查看所有组

  8. cat /etc/group


实际操作示例

  1. # 创建一个开发人员用户

  2. sudo useradd -m -s /bin/bash developer

  3. sudo passwd developer


  4. # 将用户添加到sudo组(获得管理员权限)

  5. sudo usermod -aG sudo developer


  6. # 验证用户创建成功

  7. id developer

  8. ls -la /home/developer


4.5 vi/vim编辑器完全入门

为什么要学vi/vim

  • Linux服务器上最常见的文本编辑器

  • 几乎所有Linux系统都预装

  • 远程服务器上经常只能使用命令行编辑器

  • 功能强大,熟练后编辑效率极高

vi/vim的三种模式

模式说明如何进入主要功能
命令模式默认模式打开vim时的默认状态移动光标、删除、复制、搜索
插入模式编辑模式按i、a、o等键输入和编辑文本
底线命令模式命令行模式在命令模式下按:保存、退出、查找替换

基础操作流程

  1. # 1. 打开文件进行编辑

  2. vim filename.txt


  3. # 2. 在命令模式下,按i进入插入模式

  4. # 3. 输入或编辑文本内容

  5. # 4. 按Esc键返回命令模式

  6. # 5. 输入:wq保存并退出


复制代码

常用命令详解

进入插入模式的不同方式

  1. i # 在光标前插入

  2. a # 在光标后插入

  3. o # 在下一行插入新行

  4. O # 在上一行插入新行

  5. A # 在行末插入

  6. I # 在行首插入


复制代码

移动光标(命令模式下)

  1. # 基本方向移动

  2. h # 左移一个字符

  3. j # 下移一行

  4. k # 上移一行

  5. l # 右移一个字符


  6. # 单词级移动

  7. w # 移到下一个单词开头

  8. b # 移到上一个单词开头

  9. e # 移到当前单词末尾


  10. # 行内移动

  11. 0 # 移到行首

  12. $ # 移到行末

  13. ^ # 移到行首第一个非空字符


  14. # 文档级移动

  15. gg # 移到文件开头

  16. G # 移到文件末尾

  17. 5G # 移到第5行


复制代码

删除操作(命令模式下)

  1. x # 删除当前字符

  2. dd # 删除当前行

  3. 5dd # 删除从当前行开始的5行

  4. dw # 删除当前单词

  5. d$ # 删除从光标到行末

  6. d0 # 删除从光标到行首


复制代码

搜索和查找

  1. /keyword # 向下搜索keyword

  2. ?keyword # 向上搜索keyword

  3. n # 跳到下一个匹配项

  4. N # 跳到上一个匹配项


  5. # 实用搜索技巧

  6. /^start # 搜索以start开头的行

  7. /end$ # 搜索以end结尾的行


复制代码

复制和粘贴

  1. yy # 复制当前行

  2. 5yy # 复制5行

  3. yw # 复制当前单词

  4. p # 在光标后粘贴

  5. P # 在光标前粘贴


复制代码

撤销和重做

  1. u # 撤销上一个操作

  2. Ctrl+r # 重做被撤销的操作


复制代码

保存和退出(底线命令模式)

  1. :w # 保存

  2. :q # 退出

  3. :wq # 保存并退出

  4. :q! # 强制退出不保存

  5. :w! # 强制保存

  6. :x # 保存并退出(等同于:wq)


  7. # 指定文件名保存

  8. :w newfile.txt # 另存为新文件


复制代码

查找和替换

  1. :s/old/new # 替换当前行第一个old为new

  2. :s/old/new/g # 替换当前行所有old为new

  3. :%s/old/new/g # 替换全文所有old为new

  4. :%s/old/new/gc # 替换全文所有old为new,每次替换前确认


复制代码

实践练习

  1. # 创建一个练习文件

  2. vim practice.txt


  3. # 练习流程:

  4. # 1. 按i进入插入模式

  5. # 2. 输入几行文本:

  6. # Line 1: Hello Linux

  7. # Line 2: Learning vim

  8. # Line 3: This is practice

  9. # 3. 按Esc返回命令模式

  10. # 4. 尝试以下操作:

  11. # - 按gg移到文件开头

  12. # - 按/vim搜索vim

  13. # - 按dd删除当前行

  14. # - 按u撤销删除

  15. # - 按:wq保存退出


复制代码

Windows用户的vim对应操作

Windows操作vim对应操作说明
Ctrl+C 复制yy复制当前行
Ctrl+V 粘贴p粘贴
Ctrl+Z 撤销u撤销
Ctrl+F 查找/keyword查找
Ctrl+H 替换:%s/old/new/g全文替换
Ctrl+S 保存:w保存
Home键0移到行首
End键$移到行末

常见新手错误和解决方案

  1. # 错误1:在插入模式下使用方向键导致乱码

  2. # 解决:按Esc回到命令模式,再使用hjkl移动


  3. # 错误2:忘记当前在哪个模式

  4. # 解决:按Esc确保回到命令模式


  5. # 错误3:使用Ctrl+C强制退出可能丢失数据

  6. # 解决:使用:q!强制退出或:wq保存退出


  7. # 错误4:不小心进入了vim不知道怎么退出

  8. # 解决:按Esc,然后输入:q!强制退出


复制代码

4.6 Windows用户转Linux指南

从Windows到Linux的常用操作对照

Windows操作Windows快捷键Linux终端操作说明
复制文件Ctrl+Ccp source dest复制文件
剪切文件Ctrl+Xmv source dest移动文件
删除文件Deleterm filename删除文件
全选文本Ctrl+A终端中Ctrl+A光标移到行首
复制文本Ctrl+C鼠标选中+Ctrl+Shift+C复制终端文本
粘贴文本Ctrl+VCtrl+Shift+V粘贴到终端
查找文件Windows搜索find / -name "filename"查找文件
查看文件夹大小右键属性du -sh directory查看目录大小
任务管理器Ctrl+Shift+Esctop 或 htop查看进程
结束进程任务管理器结束kill PID终止进程
清空回收站右键清空rm -rf ~/.local/share/Trash/*清空垃圾箱

终端中的常用快捷键

  1. # 文本编辑快捷键

  2. Ctrl+A # 光标移到行首(不是全选!)

  3. Ctrl+E # 光标移到行末

  4. Ctrl+U # 删除光标前的所有内容

  5. Ctrl+K # 删除光标后的所有内容

  6. Ctrl+W # 删除光标前的一个单词

  7. Ctrl+L # 清屏(等同于clear命令)


  8. # 历史命令快捷键

  9. Ctrl+R # 搜索历史命令

  10. Ctrl+P # 上一个命令(等同于↑)

  11. Ctrl+N # 下一个命令(等同于↓)


  12. # 进程控制快捷键

  13. Ctrl+C # 终止当前命令

  14. Ctrl+Z # 暂停当前命令

  15. Ctrl+D # 退出当前shell(等同于exit)


  16. # 终端文本操作

  17. Ctrl+Shift+C # 复制选中文本

  18. Ctrl+Shift+V # 粘贴文本

  19. 鼠标中键 # 粘贴(Linux特有)


复制代码

Windows概念在Linux中的对应

Windows概念Linux对应说明
C:\、D:\/、/home、/usr等没有盘符概念,统一目录树
.exe文件可执行权限文件通过权限而非扩展名确定
注册表/etc目录下配置文件配置信息存在文本文件中
控制面板各种配置命令通过命令行或配置文件
资源管理器ls、find等命令命令行浏览文件系统
记事本vim、nano等命令行文本编辑器

4.7 文件压缩和解压详解

为什么需要压缩

  • 节省存储空间

  • 加快文件传输速度

  • 方便文件打包和管理

  • 备份和归档的标准操作

Linux常用压缩格式对比

格式扩展名压缩命令解压命令特点
tar.tartar -cftar -xf打包但不压缩
gzip.gzgzipgunzip压缩单个文件
tar+gzip.tar.gz/.tgztar -czftar -xzf最常用,打包+压缩
zip.zipzipunzipWindows兼容
bzip2.bz2bzip2bunzip2压缩率高但慢

tar命令详解(最重要)

  1. # tar命令基本语法:tar [选项] 文件名 [要处理的文件/目录]


  2. # 创建tar包(打包但不压缩)

  3. tar -cf archive.tar file1 file2 directory/


  4. # 创建压缩包(推荐使用)

  5. tar -czf archive.tar.gz file1 file2 directory/

  6. tar -cjf archive.tar.bz2 file1 file2 directory/


  7. # 查看压缩包内容

  8. tar -tf archive.tar.gz


  9. # 解压到当前目录

  10. tar -xzf archive.tar.gz


  11. # 解压到指定目录

  12. tar -xzf archive.tar.gz -C /path/to/extract/


  13. # 显示详细过程

  14. tar -czvf archive.tar.gz directory/ # 压缩时显示

  15. tar -xzvf archive.tar.gz # 解压时显示


复制代码

tar选项详解

  1. # 基础选项

  2. -c # create,创建压缩包

  3. -x # extract,解压

  4. -t # list,列出内容

  5. -f # file,指定文件名(必须)


  6. # 压缩选项

  7. -z # 使用gzip压缩(.gz)

  8. -j # 使用bzip2压缩(.bz2)

  9. -J # 使用xz压缩(.xz)


  10. # 显示选项

  11. -v # verbose,显示详细过程

  12. -C # 指定解压目录


复制代码

实用压缩示例

  1. # 场景1:备份整个项目目录

  2. tar -czf project_backup_$(date +%Y%m%d).tar.gz ~/myproject/


  3. # 场景2:压缩日志文件

  4. tar -czf logs_backup.tar.gz /var/log/*.log


  5. # 场景3:分别压缩多个目录

  6. tar -czf backup.tar.gz ~/Documents ~/Pictures ~/Downloads


  7. # 场景4:排除某些文件

  8. tar -czf backup.tar.gz --exclude="*.tmp" --exclude="node_modules" ~/project/


  9. # 场景5:查看压缩包大小

  10. ls -lh *.tar.gz


复制代码

zip命令使用(Windows兼容)

  1. # 创建zip压缩包

  2. zip -r archive.zip directory/

  3. zip archive.zip file1 file2


  4. # 解压zip文件

  5. unzip archive.zip


  6. # 解压到指定目录

  7. unzip archive.zip -d /path/to/extract/


  8. # 查看zip内容

  9. unzip -l archive.zip


  10. # 测试zip文件完整性

  11. unzip -t archive.zip


复制代码

压缩率对比和选择建议

  1. # 创建测试文件比较压缩效果

  2. echo "大量重复文本大量重复文本大量重复文本" > test.txt


  3. # 不同压缩方式对比

  4. tar -cf test.tar test.txt # 只打包

  5. tar -czf test.tar.gz test.txt # gzip压缩(快)

  6. tar -cjf test.tar.bz2 test.txt # bzip2压缩(慢但压缩率高)

  7. zip test.zip test.txt # zip压缩


  8. # 查看压缩效果

  9. ls -lh test.*


复制代码

选择建议

  • 日常使用:tar.gz格式,平衡压缩率和速度

  • 与Windows交换:使用zip格式

  • 追求最高压缩率:使用tar.bz2或tar.xz

  • 快速打包:使用tar(不压缩)

4.8 权限管理详细扩展

Linux权限系统的完整理解

权限的数字表示法

  1. # 权限位的数值

  2. 读权限 r = 4

  3. 写权限 w = 2

  4. 执行权限 x = 1


  5. # 常用权限组合

  6. 7 = 4+2+1 = rwx (读写执行)

  7. 6 = 4+2 = rw- (读写)

  8. 5 = 4+1 = r-x (读执行)

  9. 4 = 4 = r-- (只读)

  10. 0 = 0 = --- (无权限)


复制代码

常用权限设置

  1. # 文件权限(不需要执行权限)

  2. chmod 644 file.txt # rw-r--r-- 用户读写,组和其他只读

  3. chmod 600 file.txt # rw------- 只有用户可读写


  4. # 目录权限(需要执行权限才能进入)

  5. chmod 755 directory/ # rwxr-xr-x 用户全权限,组和其他可读执行

  6. chmod 750 directory/ # rwxr-x--- 用户全权限,组可读执行,其他无权限


  7. # 可执行文件权限

  8. chmod 755 script.sh # rwxr-xr-x 所有人可执行

  9. chmod 700 script.sh # rwx------ 只有用户可执行


复制代码

chmod命令的不同使用方法

  1. # 数字方法(推荐)

  2. chmod 755 file


  3. # 符号方法

  4. chmod u+rwx file # 给用户增加读写执行权限

  5. chmod g+rx file # 给组增加读执行权限

  6. chmod o-w file # 移除其他用户的写权限

  7. chmod a+r file # 给所有人增加读权限


  8. # 递归修改目录权限

  9. chmod -R 755 directory/


  10. # 只修改目录权限,不影响文件

  11. find directory/ -type d -exec chmod 755 {} \;


  12. # 只修改文件权限,不影响目录

  13. find directory/ -type f -exec chmod 644 {} \;


复制代码

文件所有者和组管理

  1. # 查看文件所有者和权限

  2. ls -l filename


  3. # 修改文件所有者

  4. sudo chown username filename

  5. sudo chown username:groupname filename


  6. # 只修改组

  7. sudo chgrp groupname filename


  8. # 递归修改目录所有者

  9. sudo chown -R username:groupname directory/


  10. # 修改为当前用户

  11. sudo chown $USER filename


复制代码

特殊权限位

  1. # Set UID(SUID)- 4000

  2. chmod 4755 file # 执行时以文件所有者身份运行


  3. # Set GID(SGID)- 2000

  4. chmod 2755 directory # 在此目录创建的文件继承目录的组


  5. # Sticky bit - 1000

  6. chmod 1755 directory # 只有文件所有者可以删除自己的文件(如/tmp)


  7. # 查看特殊权限

  8. ls -l file

  9. # -rwsr-xr-x (s表示SUID)

  10. # drwxrwsrwx (s表示SGID)

  11. # drwxrwxrwt (t表示sticky bit)


复制代码

权限故障排查

  1. # 检查当前用户权限

  2. id


  3. # 检查文件权限

  4. ls -la filename


  5. # 检查目录权限(需要x权限才能进入目录)

  6. ls -ld directory/


  7. # 测试权限

  8. test -r filename && echo "可读" || echo "不可读"

  9. test -w filename && echo "可写" || echo "不可写"

  10. test -x filename && echo "可执行" || echo "不可执行"


复制代码

实际权限应用场景

  1. # Web服务器文件权限

  2. sudo chown -R www-data:www-data /var/www/html/

  3. chmod -R 755 /var/www/html/

  4. chmod -R 644 /var/www/html/*.html


  5. # SSH密钥权限(必须严格设置)

  6. chmod 700 ~/.ssh/

  7. chmod 600 ~/.ssh/id_rsa

  8. chmod 644 ~/.ssh/id_rsa.pub


  9. # 脚本文件权限

  10. chmod +x script.sh # 添加执行权限

  11. chmod 755 script.sh # 标准脚本权限


  12. # 配置文件权限

  13. chmod 600 config.conf # 敏感配置文件,只有用户可访问


复制代码

适用场景:刚接触Linux,掌握了目录结构和基本概念后,开始学习文件操作

环境准备

  1. # 确保在自己的家目录

  2. cd ~

  3. pwd


  4. # 创建练习目录

  5. mkdir linux_practice

  6. cd linux_practice


复制代码

基础文件操作命令

  1. # 显示当前目录位置

  2. pwd


  3. # 列出文件和目录(基本格式)

  4. ls


  5. # 列出详细信息

  6. ls -l


  7. # 列出所有文件(包括隐藏文件)

  8. ls -a


  9. # 进入目录

  10. cd Documents


  11. # 返回上级目录

  12. cd ..


  13. # 返回家目录

  14. cd ~


  15. # 查看文件内容(适合小文件)

  16. cat filename.txt


  17. # 分页查看文件内容(适合大文件)

  18. less filename.txt

  19. # 按q退出less


  20. # 查看文件前几行

  21. head filename.txt


  22. # 查看文件后几行

  23. tail filename.txt


  24. # 创建空文件

  25. touch newfile.txt


  26. # 创建目录

  27. mkdir newfolder


  28. # 复制文件

  29. cp source.txt destination.txt


  30. # 移动/重命名文件

  31. mv oldname.txt newname.txt


复制代码

练习示例

  1. # 完整的练习流程

  2. cd ~/linux_practice


  3. # 创建几个练习文件

  4. touch file1.txt file2.txt

  5. mkdir folder1 folder2


  6. # 查看创建结果

  7. ls -la


  8. # 向文件中写入内容

  9. echo "Hello Linux" > file1.txt

  10. echo "Learning Linux is fun" > file2.txt


  11. # 查看文件内容

  12. cat file1.txt

  13. cat file2.txt


  14. # 复制文件

  15. cp file1.txt file1_backup.txt


  16. # 移动文件到文件夹

  17. mv file2.txt folder1/


  18. # 验证操作结果

  19. ls -la

  20. ls -la folder1/


复制代码

常见错误和解决方案

  1. # 错误:文件名大小写敏感

  2. ls File.txt # 如果实际文件是file.txt,会提示找不到


  3. # 正确:检查实际文件名

  4. ls -la | grep -i file


  5. # 错误:路径分隔符

  6. cd folder1\subfolder # Windows风格,Linux中无效


  7. # 正确:使用正斜杠

  8. cd folder1/subfolder


  9. # 错误:权限不足

  10. mkdir /etc/myconfig # 普通用户无权在/etc创建目录


  11. # 正确:在有权限的目录操作

  12. mkdir ~/myconfig


复制代码

环境要求:普通用户权限即可,建议在家目录下练习

5. 循序渐进的命令学习

5.1 入门级:基础文件操作

适用场景:掌握了Linux基础概念、目录结构、vim编辑器后,开始系统学习文件操作

前置知识检查

  • 知道什么是家目录(~)和根目录(/)

  • 会使用基本的cd、ls、pwd命令

  • 了解Linux区分大小写

  • 掌握了基本的vim操作

环境准备

  1. # 确保在自己的家目录

  2. cd ~

  3. pwd


  4. # 创建练习目录

  5. mkdir linux_practice

  6. cd linux_practice

  7. echo "当前在练习目录:$(pwd)"


复制代码

文件操作基础命令详解

  1. # 创建文件的多种方法

  2. touch newfile.txt # 创建空文件

  3. echo "content" > file.txt # 创建并写入内容

  4. cat > input.txt # 手动输入内容(Ctrl+D结束)


  5. # 查看文件内容的多种方法

  6. cat small_file.txt # 适合小文件

  7. less large_file.txt # 适合大文件(q退出)

  8. head file.txt # 查看开头10行

  9. tail file.txt # 查看末尾10行

  10. head -5 file.txt # 查看开头5行


  11. # 文件复制的不同场景

  12. cp file.txt backup.txt # 基本复制

  13. cp file.txt /tmp/ # 复制到指定目录

  14. cp *.txt backup/ # 复制所有txt文件

  15. cp -r folder1/ folder2/ # 递归复制目录


  16. # 文件移动和重命名

  17. mv old_name.txt new_name.txt # 重命名文件

  18. mv file.txt ~/Documents/ # 移动文件到其他目录

  19. mv folder1/ ~/Desktop/ # 移动目录


复制代码

通配符的使用(重要)

  1. # * 匹配任意字符

  2. ls *.txt # 列出所有txt文件

  3. cp *.log backup/ # 复制所有log文件

  4. rm temp*.txt # 删除以temp开头的txt文件


  5. # ? 匹配单个字符

  6. ls file?.txt # 匹配file1.txt, fileA.txt等

  7. cp data?.csv backup/ # 复制data1.csv, data2.csv等


  8. # [] 匹配括号内的任意字符

  9. ls file[123].txt # 匹配file1.txt, file2.txt, file3.txt

  10. ls [abc]*.txt # 匹配以a、b、c开头的txt文件


  11. # {} 匹配大括号内的任意选项

  12. cp file.{txt,doc,pdf} backup/ # 同时复制三种格式的file文件


复制代码

安全删除文件

  1. # 交互式删除(推荐新手使用)

  2. rm -i unwanted.txt # 删除前会询问确认


  3. # 查看要删除的内容

  4. ls -la temp* # 先查看匹配的文件

  5. rm temp* # 确认后再删除


  6. # 删除目录

  7. rmdir empty_directory/ # 删除空目录

  8. rm -r directory/ # 删除目录及其内容(危险!)

  9. rm -rf directory/ # 强制删除(非常危险!)


  10. # 安全删除的最佳实践

  11. ls -la what_to_delete* # 1. 先看看要删除什么

  12. mv what_to_delete* /tmp/ # 2. 先移动到临时目录

  13. # 确认没问题后再从/tmp删除


复制代码

实践练习项目

  1. # 练习项目:创建一个个人文档管理系统

  2. cd ~/linux_practice


  3. # 1. 创建目录结构

  4. mkdir -p documents/{work,personal,backup}

  5. mkdir -p documents/work/{projects,reports}

  6. mkdir -p documents/personal/{photos,notes}


  7. # 2. 创建一些示例文件

  8. echo "工作项目1的说明" > documents/work/projects/project1.txt

  9. echo "月度报告" > documents/work/reports/monthly_report.txt

  10. echo "个人笔记" > documents/personal/notes/my_notes.txt

  11. echo "待办事项" > documents/personal/todo.txt


  12. # 3. 查看创建的结构

  13. tree documents/ # 如果没有tree命令,用ls -R

  14. ls -R documents/


  15. # 4. 练习复制和移动

  16. cp documents/personal/todo.txt documents/backup/

  17. mv documents/personal/notes/my_notes.txt documents/backup/


  18. # 5. 使用通配符操作

  19. ls documents/*/*.txt # 查找所有txt文件

  20. cp documents/work/*.txt documents/backup/


  21. # 6. 验证结果

  22. echo "备份目录内容:"

  23. ls -la documents/backup/


复制代码

Windows用户常犯的错误

  1. # 错误1:使用反斜杠

  2. cd documents\work # Windows风格,错误!

  3. cd documents/work # Linux正确方式


  4. # 错误2:忽略大小写

  5. ls Documents # 如果目录名是documents,会找不到

  6. ls documents # 正确


  7. # 错误3:文件名包含空格的处理

  8. touch my file.txt # 错误,会创建两个文件

  9. touch "my file.txt" # 正确方式1

  10. touch my\ file.txt # 正确方式2


  11. # 错误4:路径概念混淆

  12. cd C:\Users\username # Windows路径概念

  13. cd /home/username # Linux正确路径


复制代码

命令执行结果验证

  1. # 每次操作后都要验证结果

  2. echo "创建文件后检查:"

  3. ls -la

  4. echo "复制文件后检查:"

  5. ls -la backup/

  6. echo "删除文件后检查:"

  7. ls -la | grep -v "deleted_file"


复制代码

环境要求

  • 普通用户权限即可

  • 在家目录(~)下练习

  • 建议先创建专门的练习目录

  • 重要:删除操作要格外小心

5.2 初级:文件操作进阶

新增内容:在基础文件操作的基础上,学会使用命令选项来获得更多信息和控制

在前面基础上增加的功能

  • 使用选项参数获取更详细信息

  • 学会安全删除文件

  • 掌握批量操作技巧

  • 理解文件权限显示

ls命令的详细选项

  1. # 显示详细文件信息(权限、大小、时间)

  2. ls -l


  3. # 显示所有文件(包括隐藏文件,以.开头)

  4. ls -a


  5. # 组合选项使用

  6. ls -la # 详细信息+隐藏文件


  7. # 以人类可读格式显示文件大小(KB、MB、GB)

  8. ls -lh


  9. # 按修改时间排序显示文件(最新的在前)

  10. ls -lt


  11. # 按文件大小排序

  12. ls -lS


  13. # 反向排序

  14. ls -lr # 最旧的在前


  15. # 递归显示目录内容(显示子目录内容)

  16. ls -R


  17. # 只显示目录

  18. ls -d */ # 显示当前目录下的所有目录


  19. # 按扩展名分类显示

  20. ls -X


复制代码

文件权限解读详解

  1. # 执行 ls -l 后看到的权限信息解释

  2. # -rw-r--r-- 1 user group 1024 Jun 9 10:30 filename.txt

  3. # ↑ 文件类型(-文件 d目录 l链接)

  4. # ↑↑↑ 用户权限(rw-=读写不可执行)

  5. # ↑↑↑ 组权限(r--=只读)

  6. # ↑↑↑ 其他权限(r--=只读)


  7. # 文件类型识别

  8. ls -la | head -10

  9. # d开头:目录

  10. # -开头:普通文件

  11. # l开头:软链接

  12. # b开头:块设备文件

  13. # c开头:字符设备文件


复制代码

文件复制的高级选项

  1. # 保持原文件属性复制(权限、时间戳等)

  2. cp -p source.txt backup.txt


  3. # 递归复制整个目录

  4. cp -r source_dir destination_dir


  5. # 只在源文件较新时才复制

  6. cp -u source.txt backup.txt


  7. # 复制前备份已存在的目标文件

  8. cp -b source.txt existing_file.txt # 会创建existing_file.txt~备份


  9. # 交互式复制(覆盖前询问)

  10. cp -i source.txt existing_file.txt


  11. # 详细显示复制过程

  12. cp -v source.txt backup.txt


  13. # 组合选项:递归、保持属性、详细输出

  14. cp -rpv source_directory/ backup_directory/


复制代码

文件移动和重命名进阶

  1. # 交互式移动(覆盖前询问)

  2. mv -i old_file.txt new_location/


  3. # 创建备份后移动

  4. mv -b source.txt destination.txt


  5. # 详细显示移动过程

  6. mv -v old_name.txt new_name.txt


  7. # 批量重命名技巧

  8. for file in *.txt; do

  9. mv "$file" "${file%.txt}.backup"

  10. done

  11. # 将所有.txt文件重命名为.backup


  12. # 使用rename命令(如果可用)

  13. rename 's/\.txt$/.backup/' *.txt


复制代码

删除操作的安全级别

  1. # 安全级别1:交互式删除(最安全)

  2. rm -i unwanted_file.txt


  3. # 安全级别2:先查看再删除

  4. ls -la temp* # 先看看要删除什么

  5. rm temp* # 确认后删除


  6. # 安全级别3:移动到临时目录

  7. mkdir ~/.trash 2>/dev/null # 创建回收站目录

  8. mv unwanted_files ~/.trash/ # 移动而不是删除


  9. # 危险操作警告

  10. rm -f file.txt # 强制删除,不询问

  11. rm -rf directory/ # 递归强制删除目录(危险!)


  12. # 安全删除目录的步骤

  13. ls -la directory_to_delete/ # 1. 查看目录内容

  14. mv directory_to_delete /tmp/ # 2. 先移动到临时目录

  15. # 3. 确认无误后再从/tmp删除


复制代码

通配符和正则表达式进阶

  1. # 复杂通配符模式

  2. ls file[0-9].txt # 匹配file0.txt到file9.txt

  3. ls file[a-z].txt # 匹配filea.txt到filez.txt

  4. ls file[!0-9].txt # 匹配非数字的文件


  5. # 大括号扩展

  6. cp file.{txt,doc,pdf} backup/ # 同时复制多种格式

  7. mkdir {2023,2024,2025} # 创建多个年份目录

  8. touch file{1..10}.txt # 创建file1.txt到file10.txt


  9. # 实用的批量操作

  10. cp *.{jpg,png,gif} ~/Pictures/ # 复制所有图片文件

  11. rm temp{1..5}.log # 删除temp1.log到temp5.log


复制代码

文件查找初步

  1. # 在当前目录查找文件

  2. find . -name "*.txt" # 查找所有txt文件

  3. find . -name "file*" # 查找以file开头的文件


  4. # 按文件大小查找

  5. find . -size +1M # 查找大于1MB的文件

  6. find . -size -100k # 查找小于100KB的文件


  7. # 按修改时间查找

  8. find . -mtime -7 # 查找7天内修改的文件

  9. find . -mtime +30 # 查找30天前修改的文件


  10. # 按文件类型查找

  11. find . -type f # 只查找文件

  12. find . -type d # 只查找目录


复制代码

实践练习:文档整理项目

  1. # 创建一个更复杂的文件管理练习

  2. cd ~/linux_practice


  3. # 1. 创建混乱的文件环境

  4. touch {report,data,backup}{1..5}.{txt,doc,pdf}

  5. touch temp{a..e}.log

  6. mkdir {old,new,archive} 2>/dev/null


  7. # 2. 查看创建的文件

  8. ls -la


  9. # 3. 按类型整理文件

  10. ls -1 *.txt | head -5 # 查看前5个txt文件

  11. cp *.txt old/ # 复制所有txt文件到old目录

  12. mv *.pdf archive/ # 移动所有pdf文件到archive目录


  13. # 4. 清理临时文件

  14. ls -la temp*.log # 先查看临时文件

  15. mv temp*.log /tmp/ # 移动到系统临时目录


  16. # 5. 验证整理结果

  17. echo "=== 当前目录 ==="

  18. ls -la

  19. echo "=== old目录 ==="

  20. ls -la old/

  21. echo "=== archive目录 ==="

  22. ls -la archive/


复制代码

Tab键自动补全技巧

  1. # 自动补全文件名

  2. ls doc[Tab] # 自动补全为documents(如果唯一)

  3. cd /u[Tab]/l[Tab]/b[Tab] # 自动补全为/usr/local/bin


  4. # 双击Tab显示所有可能的匹配

  5. ls fi[Tab][Tab] # 显示所有以fi开头的文件


  6. # 自动补全命令选项

  7. ls --[Tab][Tab] # 显示ls的所有长选项


复制代码

注意事项和最佳实践

  • 使用rm -rf命令极其危险,删除的文件无法恢复

  • 重要文件操作前先备份:cp important.txt important.txt.backup

  • 养成使用-i选项的习惯,删除前确认

  • 大量文件操作时使用-v选项查看过程

  • 学会使用通配符,但要先用ls测试匹配结果

5.3 中级:文本处理和查找

复杂度说明:开始学习文本内容的查看、搜索和简单处理,这是Linux的强项

新增技能

  • 文本内容查找和过滤

  • 文件内容搜索

  • 基本的文本统计和处理

  • 了解正则表达式基础

文本查看命令进阶

  1. # head和tail的详细用法

  2. head filename.txt # 查看前10行(默认)

  3. head -5 filename.txt # 查看前5行

  4. head -c 100 filename.txt # 查看前100个字符


  5. tail filename.txt # 查看后10行(默认)

  6. tail -5 filename.txt # 查看后5行

  7. tail -n +10 filename.txt # 从第10行开始显示到文件末尾


  8. # 实时监控文件变化(重要!)

  9. tail -f /var/log/syslog # 实时查看系统日志

  10. tail -f access.log # 实时监控访问日志


  11. # more和less的区别

  12. more filename.txt # 分页查看(只能向前)

  13. less filename.txt # 分页查看(可前后翻页)

  14. # less中的操作:

  15. # 空格键:下一页

  16. # b:上一页

  17. # /:搜索

  18. # q:退出


  19. # 查看文件的特定行数范围

  20. sed -n '10,20p' filename.txt # 查看第10到20行

  21. sed -n '10p' filename.txt # 只查看第10行


复制代码

grep命令详解(重要)

  1. # 基本搜索

  2. grep "search_text" filename.txt


  3. # 常用选项

  4. grep -i "hello" filename.txt # 忽略大小写

  5. grep -n "error" logfile.txt # 显示行号

  6. grep -v "debug" logfile.txt # 显示不包含debug的行(反向匹配)

  7. grep -c "warning" logfile.txt # 只显示匹配行数

  8. grep -l "pattern" *.txt # 只显示包含模式的文件名


  9. # 搜索多个文件

  10. grep "pattern" *.txt # 在所有txt文件中搜索

  11. grep "pattern" file1.txt file2.txt # 在指定文件中搜索


  12. # 递归搜索目录

  13. grep -r "search_text" /path/to/directory

  14. grep -r "config" /etc/ # 在/etc目录递归搜索config


  15. # 使用正则表达式(基础)

  16. grep "^start" filename.txt # 搜索以start开头的行

  17. grep "end$" filename.txt # 搜索以end结尾的行

  18. grep "[0-9]" filename.txt # 搜索包含数字的行

  19. grep "Error\|Warning" logfile.txt # 搜索包含Error或Warning的行


复制代码

文件统计命令wc

  1. # wc命令统计文件信息

  2. wc filename.txt # 显示行数、单词数、字符数


  3. # 分别统计

  4. wc -l filename.txt # 只统计行数

  5. wc -w filename.txt # 只统计单词数

  6. wc -c filename.txt # 只统计字符数

  7. wc -m filename.txt # 统计字符数(支持多字节字符)


  8. # 实用例子

  9. wc -l /etc/passwd # 统计系统用户数量

  10. ls | wc -l # 统计当前目录文件数量

  11. ps aux | wc -l # 统计当前进程数量


复制代码

sort和uniq命令

  1. # sort排序

  2. sort filename.txt # 按字母顺序排序

  3. sort -n numbers.txt # 按数字大小排序

  4. sort -r filename.txt # 反向排序

  5. sort -k2 data.txt # 按第2列排序


  6. # uniq去重(注意:需要先排序)

  7. sort filename.txt | uniq # 去除重复行

  8. sort filename.txt | uniq -c # 统计每行出现次数

  9. sort filename.txt | uniq -d # 只显示重复的行

  10. sort filename.txt | uniq -u # 只显示不重复的行


  11. # 实用组合

  12. sort /etc/passwd | uniq # 查看系统用户(去重)

  13. history | awk '{print $2}' | sort | uniq -c | sort -nr | head -10

  14. # 统计最常用的命令


复制代码

find命令进阶

  1. # 按名称查找

  2. find /home -name "*.txt" # 查找所有txt文件

  3. find . -name "file*" # 查找以file开头的文件

  4. find . -iname "*.PDF" # 忽略大小写查找PDF文件


  5. # 按大小查找

  6. find /home -size +10M # 查找大于10MB的文件

  7. find . -size -100k # 查找小于100KB的文件

  8. find . -size 1M # 查找恰好1MB的文件


  9. # 按时间查找

  10. find . -mtime -7 # 查找7天内修改的文件

  11. find . -mtime +30 # 查找30天前修改的文件

  12. find . -atime -1 # 查找1天内访问的文件


  13. # 按文件类型查找

  14. find . -type f # 只查找普通文件

  15. find . -type d # 只查找目录

  16. find . -type l # 只查找符号链接


  17. # 按权限查找

  18. find . -perm 755 # 查找权限为755的文件

  19. find . -perm -644 # 查找至少有644权限的文件


  20. # 组合条件

  21. find . -name "*.log" -size +1M # 查找大于1MB的log文件

  22. find . -name "*.tmp" -mtime +7 -delete # 查找并删除7天前的临时文件


复制代码

实际应用场景

  1. # 场景1:分析日志文件

  2. grep -i error /var/log/syslog # 查找错误信息

  3. grep "404" /var/log/nginx/access.log | wc -l # 统计404错误数量

  4. tail -f /var/log/mysql/error.log | grep -i warning # 实时监控MySQL警告


  5. # 场景2:代码文件分析

  6. find . -name "*.py" | wc -l # 统计Python文件数量

  7. grep -r "TODO" --include="*.py" . # 查找代码中的TODO注释

  8. find . -name "*.py" -exec wc -l {} + | tail -1 # 统计Python代码总行数


  9. # 场景3:系统文件管理

  10. find /tmp -type f -mtime +7 -size +100M # 查找临时目录中的大文件

  11. grep -r "192.168" /etc/ # 查找配置文件中的IP地址

  12. find /home -name "*.bak" -size +10M # 查找大型备份文件


  13. # 场景4:文本数据处理

  14. cut -d':' -f1 /etc/passwd | sort # 提取并排序用户名

  15. awk -F':' '{print $1, $3}' /etc/passwd # 提取用户名和UID

  16. grep "^#" config.file | wc -l # 统计配置文件中的注释行数


  17. # 场景5:清理和维护

  18. find . -name "*~" -delete # 删除备份文件

  19. find . -name "*.tmp" -mtime +1 -exec rm {} \; # 删除1天前的临时文件


复制代码

cut命令详解

  1. # 按分隔符分割

  2. cut -d':' -f1 /etc/passwd # 提取第1个字段(用户名)

  3. cut -d':' -f1,3 /etc/passwd # 提取第1和第3个字段

  4. cut -d',' -f2-4 data.csv # 提取CSV文件的第2到4列


  5. # 按字符位置分割

  6. cut -c1-10 filename.txt # 提取每行的前10个字符

  7. cut -c5- filename.txt # 从第5个字符开始到行末

  8. ps aux | cut -c1-20 # 提取进程信息的前20个字符


复制代码

实践练习:文本分析项目

  1. # 创建练习数据

  2. cd ~/linux_practice

  3. cat > sample_log.txt << 'EOF'

  4. 2024-06-09 10:30:15 INFO User login successful: admin

  5. 2024-06-09 10:31:22 ERROR Database connection failed

  6. 2024-06-09 10:32:05 WARNING Memory usage high: 85%

  7. 2024-06-09 10:33:18 INFO User logout: admin

  8. 2024-06-09 10:34:25 ERROR File not found: config.xml

  9. 2024-06-09 10:35:30 INFO System backup completed

  10. 2024-06-09 10:36:45 WARNING Disk space low: 90%

  11. 2024-06-09 10:37:52 ERROR Authentication failed: user123

  12. EOF


  13. # 练习各种文本处理操作

  14. echo "=== 日志文件分析练习 ==="


  15. # 1. 查看文件基本信息

  16. echo "文件行数:$(wc -l < sample_log.txt)"

  17. echo "单词数:$(wc -w < sample_log.txt)"


  18. # 2. 查找特定类型的日志

  19. echo "错误日志:"

  20. grep "ERROR" sample_log.txt


  21. # 3. 统计各类型日志数量

  22. echo "日志类型统计:"

  23. cut -d' ' -f3 sample_log.txt | sort | uniq -c


  24. # 4. 提取时间信息

  25. echo "所有记录的时间:"

  26. cut -d' ' -f1-2 sample_log.txt


  27. # 5. 查找特定用户的活动

  28. echo "admin用户的活动:"

  29. grep "admin" sample_log.txt


复制代码

性能注意事项

  • grep在大文件上比较快,优先使用

  • find命令在大目录树上可能较慢,可以限制搜索深度

  • 使用head和tail处理大文件避免内存占用

  • 复杂的文本处理可以考虑使用awk或sed

5.4 中级:命令组合和管道

复杂度说明:开始学习命令间的协作,一个命令的输出作为另一个命令的输入

核心概念

  • 管道(|):将一个命令的输出传递给另一个命令作为输入

  • 重定向(>、>>):将命令输出保存到文件中

  • 命令组合:多个简单命令组合解决复杂问题

基础管道操作

  1. # 管道的基本语法:命令1 | 命令2

  2. # 将ls的输出传递给grep进行过滤

  3. ls -la | grep "\.txt$"


  4. # 查看文件内容并计算行数

  5. cat filename.txt | wc -l


  6. # 查看进程并过滤特定服务

  7. ps aux | grep nginx


  8. # 排序后去重

  9. cat names.txt | sort | uniq


  10. # 统计重复项数量

  11. cat access.log | cut -d' ' -f1 | sort | uniq -c


复制代码

重定向操作

  1. # 输出重定向:覆盖文件内容

  2. echo "Hello Linux" > greeting.txt


  3. # 追加重定向:在文件末尾添加内容

  4. echo "Learning is fun" >> greeting.txt


  5. # 错误重定向:将错误信息保存到文件

  6. find / -name "*.log" 2> error.log


  7. # 同时重定向输出和错误

  8. find / -name "*.log" > results.txt 2> error.log


  9. # 将输出和错误都重定向到同一文件

  10. find / -name "*.log" &> all_output.log


  11. # 丢弃输出(发送到黑洞)

  12. some_noisy_command > /dev/null 2>&1


复制代码

实用组合示例

  1. # 查找最大的几个文件

  2. ls -la | sort -k5 -nr | head -10


  3. # 统计目录中文件类型

  4. ls -la | grep "^-" | wc -l # 统计普通文件数量

  5. ls -la | grep "^d" | wc -l # 统计目录数量


  6. # 查看系统负载

  7. uptime | awk '{print $10 $11 $12}'


  8. # 实时监控网络连接数

  9. watch "netstat -an | grep ESTABLISHED | wc -l"


  10. # 查找并统计特定内容

  11. grep -r "ERROR" /var/log/ | wc -l


  12. # 处理CSV文件(假设有一个简单的CSV)

  13. cut -d',' -f2 data.csv | sort | uniq -c


复制代码

tee命令的使用

  1. # tee可以同时输出到文件和屏幕

  2. echo "重要信息" | tee important.log

  3. # 这会既显示在屏幕上,又保存到文件中


  4. # 追加模式的tee

  5. echo "更多信息" | tee -a important.log


  6. # 在管道中使用tee保存中间结果

  7. ps aux | tee process_list.txt | grep nginx


复制代码

实际应用场景

  1. # 场景1:分析Web服务器日志

  2. tail -1000 /var/log/nginx/access.log | \

  3. awk '{print $1}' | sort | uniq -c | sort -nr | head -10

  4. # 分析最近1000条访问记录中访问最多的IP


  5. # 场景2:系统监控脚本

  6. ps aux | awk '{sum+=$3} END {print "总CPU使用率:", sum"%"}'


  7. # 场景3:文件整理

  8. find ~/Downloads -name "*.pdf" | \

  9. xargs -I {} mv {} ~/Documents/PDFs/


  10. # 场景4:快速备份配置文件

  11. tar -czf config_backup_$(date +%Y%m%d).tar.gz /etc/nginx /etc/mysql | \

  12. tee backup.log


复制代码

性能考虑

  • 管道会创建子进程,大量管道可能影响性能

  • 对于大文件,考虑使用更高效的工具

  • 避免不必要的中间步骤

最佳实践

  • 先测试单个命令,再组合使用

  • 复杂的管道可以分步骤调试

  • 重要数据处理前要备份

  • 学会使用tee保存中间结果用于调试

5.5 高级:复杂应用和脚本化

高级特性:编写脚本自动化任务,使用高级命令选项

性能优化:学会使用更高效的命令和选项

复杂示例

  1. #!/bin/bash

  2. # 系统监控脚本示例


  3. # 检查磁盘使用率

  4. check_disk_usage() {

  5. usage=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')

  6. if [ $usage -gt 80 ]; then

  7. echo "警告:磁盘使用率超过80%"

  8. fi

  9. }


  10. # 检查内存使用

  11. check_memory() {

  12. free_mem=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')

  13. echo "内存使用率:${free_mem}%"

  14. }


  15. # 清理日志文件

  16. cleanup_logs() {

  17. find /var/log -name "*.log" -mtime +7 -exec rm {} \;

  18. echo "已清理7天前的日志文件"

  19. }


  20. # 备份重要配置

  21. backup_configs() {

  22. tar -czf "/backup/config_$(date +%Y%m%d).tar.gz" /etc/nginx /etc/mysql

  23. echo "配置文件已备份"

  24. }


复制代码

错误处理

  1. # 检查命令是否执行成功

  2. if ! command -v nginx > /dev/null; then

  3. echo "错误:nginx未安装"

  4. exit 1

  5. fi


  6. # 检查文件是否存在

  7. if [ ! -f "/path/to/file" ]; then

  8. echo "错误:文件不存在"

  9. exit 1

  10. fi


  11. # 使用trap处理中断信号

  12. trap 'echo "脚本被中断"; exit 1' INT TERM


复制代码

5.6 专家级:生产环境应用

企业级场景:大规模系统管理和自动化运维

系统集成:与监控系统、CI/CD流水线等工具整合

生产环境示例

  1. # 零停机服务更新脚本

  2. rolling_update() {

  3. servers=("server1" "server2" "server3")


  4. for server in "${servers[@]}"; do

  5. echo "更新服务器:$server"


  6. # 从负载均衡器移除

  7. curl -X POST "http://lb/remove/$server"


  8. # 等待连接耗尽

  9. sleep 30


  10. # 更新应用

  11. ssh $server "systemctl stop myapp && \

  12. cp /tmp/new_version/* /opt/myapp/ && \

  13. systemctl start myapp"


  14. # 健康检查

  15. if curl -f "http://$server:8080/health"; then

  16. # 重新加入负载均衡器

  17. curl -X POST "http://lb/add/$server"

  18. echo "$server 更新成功"

  19. else

  20. echo "$server 更新失败,回滚"

  21. # 回滚逻辑

  22. fi

  23. done

  24. }


  25. # 系统性能监控

  26. monitor_system() {

  27. # CPU使用率

  28. cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | sed 's/%us,//')


  29. # 内存使用率

  30. mem_usage=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100.0}')


  31. # 磁盘I/O

  32. io_wait=$(iostat 1 2 | tail -1 | awk '{print $4}')


  33. # 发送到监控系统

  34. curl -X POST "http://monitoring/metrics" \

  35. -d "cpu=$cpu_usage&memory=$mem_usage&iowait=$io_wait"

  36. }


复制代码

监控和日志

  1. # 实时日志分析

  2. tail -f /var/log/nginx/access.log | \

  3. awk '{print $1}' | sort | uniq -c | sort -nr | head -10


  4. # 错误日志监控

  5. journalctl -u myservice -f | \

  6. grep -i error | \

  7. while read line; do

  8. echo "$line" | mail -s "服务错误" admin@company.com

  9. done


  10. # 系统资源监控

  11. while true; do

  12. echo "$(date): $(uptime)" >> /var/log/system_load.log

  13. sleep 60

  14. done


复制代码

6. 实际应用场景

6.1 简单系统场景:开发环境搭建

业务需求:为新项目搭建开发环境,包括创建项目目录结构、配置权限、初始化Git仓库

技术选择:使用基础的文件操作命令,因为操作简单、风险低、适合新手

完整实现

  1. # 1. 环境准备

  2. cd ~ # 切换到家目录


  3. # 2. 创建项目根目录

  4. mkdir -p ~/projects/my_web_app

  5. cd ~/projects/my_web_app


  6. # 3. 创建标准项目结构

  7. mkdir -p {src,tests,docs,config,logs}

  8. mkdir -p src/{js,css,images}


  9. # 4. 创建基础文件

  10. touch README.md

  11. touch src/index.html

  12. touch src/css/style.css

  13. touch src/js/main.js

  14. touch .gitignore


  15. # 5. 设置合适的权限

  16. chmod 755 ~/projects/my_web_app

  17. chmod 644 src/*


  18. # 6. 初始化Git仓库

  19. git init

  20. echo "node_modules/" >> .gitignore

  21. echo "*.log" >> .gitignore


  22. # 7. 创建初始提交

  23. git add .

  24. git commit -m "Initial project setup"


复制代码

关键解释

  • mkdir -p:创建多级目录,如果父目录不存在会自动创建

  • {src,tests,docs}:大括号展开,一次创建多个目录

  • chmod 755:给目录设置读、写、执行权限

  • chmod 644:给文件设置读、写权限(不可执行)

验证方法

  1. # 检查目录结构

  2. tree ~/projects/my_web_app


  3. # 检查权限设置

  4. ls -la ~/projects/my_web_app


  5. # 检查Git状态

  6. git status


复制代码

6.2 中等复杂场景:日志分析和清理

业务需求:分析Web服务器访问日志,找出访问量最大的IP和页面,并清理旧日志释放空间

技术选择:结合多个命令和管道操作,展示Linux强大的文本处理能力

完整实现

  1. #!/bin/bash

  2. # 日志分析脚本


  3. LOG_DIR="/var/log/nginx"

  4. ACCESS_LOG="$LOG_DIR/access.log"

  5. REPORT_FILE="/tmp/log_analysis_$(date +%Y%m%d).txt"


  6. # 1. 检查日志文件是否存在

  7. if [ ! -f "$ACCESS_LOG" ]; then

  8. echo "错误:日志文件不存在 $ACCESS_LOG"

  9. exit 1

  10. fi


  11. echo "开始分析日志文件:$ACCESS_LOG" > $REPORT_FILE

  12. echo "分析时间:$(date)" >> $REPORT_FILE

  13. echo "========================================" >> $REPORT_FILE


  14. # 2. 分析访问量最大的IP地址(前10个)

  15. echo "Top 10 访问IP地址:" >> $REPORT_FILE

  16. awk '{print $1}' $ACCESS_LOG | \

  17. sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE


  18. echo "" >> $REPORT_FILE


  19. # 3. 分析最受欢迎的页面(前10个)

  20. echo "Top 10 访问页面:" >> $REPORT_FILE

  21. awk '{print $7}' $ACCESS_LOG | \

  22. sort | uniq -c | sort -nr | head -10 >> $REPORT_FILE


  23. echo "" >> $REPORT_FILE


  24. # 4. 分析HTTP状态码分布

  25. echo "HTTP状态码分布:" >> $REPORT_FILE

  26. awk '{print $9}' $ACCESS_LOG | \

  27. sort | uniq -c | sort -nr >> $REPORT_FILE


  28. echo "" >> $REPORT_FILE


  29. # 5. 查找异常访问(404错误)

  30. echo "404错误页面:" >> $REPORT_FILE

  31. awk '$9==404 {print $7}' $ACCESS_LOG | \

  32. sort | uniq -c | sort -nr | head -20 >> $REPORT_FILE


  33. # 6. 清理30天前的日志文件

  34. echo "清理旧日志文件..." >> $REPORT_FILE

  35. find $LOG_DIR -name "*.log.*" -mtime +30 -print >> $REPORT_FILE

  36. find $LOG_DIR -name "*.log.*" -mtime +30 -delete


  37. echo "日志分析完成,报告保存在:$REPORT_FILE"


  38. # 7. 如果是root用户,压缩当前日志

  39. if [ "$EUID" -eq 0 ]; then

  40. gzip $LOG_DIR/access.log.1 2>/dev/null

  41. gzip $LOG_DIR/error.log.1 2>/dev/null

  42. fi


复制代码

性能优化技巧

  • 使用awk而不是多个grep和cut命令

  • 大文件处理时使用head限制输出

  • 后台运行大型分析任务

6.3 复杂生产场景:自动化部署系统

业务需求:实现Web应用的自动化部署,包括代码拉取、构建、健康检查、回滚机制

技术选择:综合使用进程管理、网络检查、文件操作、错误处理等高级特性

完整实现

  1. #!/bin/bash

  2. # 生产环境自动化部署脚本


  3. set -e # 遇到错误立即退出


  4. # 配置变量

  5. APP_NAME="my_web_app"

  6. APP_DIR="/opt/$APP_NAME"

  7. BACKUP_DIR="/backup/$APP_NAME"

  8. GIT_REPO="https://github.com/company/my_web_app.git"

  9. BRANCH="main"

  10. HEALTH_URL="http://localhost:8080/health"

  11. LOG_FILE="/var/log/deploy.log"


  12. # 日志函数

  13. log() {

  14. echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE

  15. }


  16. # 错误处理函数

  17. error_exit() {

  18. log "错误:$1"

  19. exit 1

  20. }


  21. # 健康检查函数

  22. health_check() {

  23. local max_attempts=30

  24. local attempt=1


  25. while [ $attempt -le $max_attempts ]; do

  26. if curl -f -s "$HEALTH_URL" > /dev/null; then

  27. log "健康检查通过"

  28. return 0

  29. fi

  30. log "健康检查失败,重试 $attempt/$max_attempts"

  31. sleep 10

  32. ((attempt++))

  33. done


  34. return 1

  35. }


  36. # 备份当前版本

  37. backup_current() {

  38. log "备份当前版本..."


  39. if [ -d "$APP_DIR" ]; then

  40. backup_name="backup_$(date +%Y%m%d_%H%M%S)"

  41. cp -r "$APP_DIR" "$BACKUP_DIR/$backup_name"

  42. log "备份完成:$BACKUP_DIR/$backup_name"

  43. fi

  44. }


  45. # 拉取最新代码

  46. pull_code() {

  47. log "拉取最新代码..."


  48. if [ -d "$APP_DIR/.git" ]; then

  49. cd "$APP_DIR"

  50. git fetch origin

  51. git reset --hard "origin/$BRANCH"

  52. else

  53. rm -rf "$APP_DIR"

  54. git clone -b "$BRANCH" "$GIT_REPO" "$APP_DIR"

  55. fi


  56. cd "$APP_DIR"

  57. local commit_hash=$(git rev-parse HEAD)

  58. log "代码更新到版本:$commit_hash"

  59. }


  60. # 构建应用

  61. build_app() {

  62. log "构建应用..."


  63. cd "$APP_DIR"


  64. # 安装依赖

  65. if [ -f "package.json" ]; then

  66. npm ci --production

  67. fi


  68. # 构建前端资源

  69. if [ -f "webpack.config.js" ]; then

  70. npm run build

  71. fi


  72. # 设置权限

  73. chown -R www-data:www-data "$APP_DIR"

  74. chmod -R 755 "$APP_DIR"

  75. }


  76. # 重启服务

  77. restart_service() {

  78. log "重启服务..."


  79. systemctl stop "$APP_NAME" || true

  80. sleep 5

  81. systemctl start "$APP_NAME"


  82. # 等待服务启动

  83. sleep 10

  84. }


  85. # 回滚函数

  86. rollback() {

  87. log "开始回滚..."


  88. # 找到最新的备份

  89. latest_backup=$(ls -t "$BACKUP_DIR" | head -1)


  90. if [ -n "$latest_backup" ]; then

  91. rm -rf "$APP_DIR"

  92. cp -r "$BACKUP_DIR/$latest_backup" "$APP_DIR"

  93. restart_service


  94. if health_check; then

  95. log "回滚成功"

  96. else

  97. error_exit "回滚失败"

  98. fi

  99. else

  100. error_exit "没有找到备份文件"

  101. fi

  102. }


  103. # 主部署流程

  104. main() {

  105. log "开始部署 $APP_NAME"


  106. # 检查权限

  107. if [ "$EUID" -ne 0 ]; then

  108. error_exit "需要root权限"

  109. fi


  110. # 备份当前版本

  111. backup_current


  112. # 拉取代码

  113. pull_code


  114. # 构建应用

  115. build_app


  116. # 重启服务

  117. restart_service


  118. # 健康检查

  119. if health_check; then

  120. log "部署成功完成"


  121. # 清理旧备份(保留最近5个)

  122. cd "$BACKUP_DIR"

  123. ls -t | tail -n +6 | xargs rm -rf

  124. else

  125. log "健康检查失败,开始回滚"

  126. rollback

  127. fi

  128. }


  129. # 执行部署

  130. main "$@"


复制代码

监控和故障恢复

  1. # 监控脚本运行状态

  2. tail -f /var/log/deploy.log


  3. # 查看服务状态

  4. systemctl status my_web_app


  5. # 手动健康检查

  6. curl -v http://localhost:8080/health


  7. # 查看应用日志

  8. journalctl -u my_web_app -f


复制代码

7. 性能优化和最佳实践

7.1 常见错误和解决方案

错误类型分类

语法错误:

  1. # 错误:路径分隔符

  2. cd C:\Users\name # Windows风格,Linux中无效


  3. # 正确:使用正斜杠

  4. cd /home/name


  5. # 错误:大小写敏感

  6. ls Desktop # 如果实际目录是desktop会失败


  7. # 正确:注意大小写

  8. ls desktop


复制代码

权限错误:

  1. # 错误:权限不足

  2. rm /etc/important_file


  3. # 正确:使用sudo

  4. sudo rm /etc/important_file


  5. # 错误:直接修改系统文件

  6. echo "new content" > /etc/hosts


  7. # 正确:使用sudo重定向

  8. echo "new content" | sudo tee /etc/hosts


复制代码

逻辑错误:

  1. # 错误:递归删除没有确认

  2. rm -rf * # 非常危险!


  3. # 正确:先列出要删除的内容

  4. ls -la

  5. rm -rf specific_directory


  6. # 错误:没有检查命令是否成功

  7. backup_database

  8. restart_service


  9. # 正确:检查返回值

  10. if backup_database; then

  11. restart_service

  12. else

  13. echo "备份失败,取消重启"

  14. fi


复制代码

7.2 性能优化原则

优化原则说明命令示例适用场景
使用合适的工具选择最高效的命令完成任务grep vs awk vs sed文本处理时
避免不必要的管道减少进程间通信开销awk '{print $1}' file vs cat file | cut -d' ' -f1处理大文件时
利用内置命令内置命令比外部程序快[[ ]] vs test脚本条件判断
合理使用缓存避免重复计算变量存储计算结果循环或频繁调用
批量操作减少系统调用次数find with -exec vs 循环大量文件操作

7.3 最佳实践总结

命令规范:

  1. # 使用长选项增加可读性

  2. tar --create --verbose --file=backup.tar /home/user


  3. # 在脚本中使用错误处理

  4. command || { echo "命令失败"; exit 1; }


  5. # 使用变量避免硬编码

  6. LOG_DIR="/var/log/myapp"

  7. LOG_FILE="$LOG_DIR/application.log"


  8. # 输出重定向最佳实践

  9. command > output.log 2>&1 # 同时重定向标准输出和错误


复制代码

安全考虑:

  1. # 检查文件是否存在再操作

  2. [ -f "$file" ] && rm "$file"


  3. # 使用绝对路径避免PATH问题

  4. /usr/bin/mysql -u root -p


  5. # 敏感信息不要出现在命令行

  6. mysql -u root -p < script.sql # 而不是 mysql -u root -ppassword


  7. # 使用临时目录

  8. temp_dir=$(mktemp -d)

  9. trap "rm -rf $temp_dir" EXIT


复制代码

运维经验:

  • 总是做备份再进行危险操作

  • 在测试环境验证脚本后再用于生产

  • 使用版本控制管理脚本和配置文件

  • 建立监控和告警机制

  • 定期检查和清理日志文件

8. 技术对比分析

对比维度Linux命令行图形界面管理配置管理工具
适用场景日常运维、自动化脚本桌面用户、简单操作大规模部署、配置管理
学习难度中等,需要记忆命令简单,直观易懂复杂,需要学习特定语法
性能表现高,资源消耗小中等,需要图形资源高,但初始化开销大
系统资源占用低,只使用必要资源高,需要图形界面中等,代理程序消耗
自动化能力强,易于脚本化弱,难以自动化强,专为自动化设计
远程管理优秀,SSH即可需要VNC等工具优秀,网络原生支持
精确控制极强,细粒度控制有限,受界面限制强,声明式配置

8.1 选择指南

什么场景用什么方案:

使用Linux命令行当:

  • 管理远程服务器

  • 编写自动化脚本

  • 处理大量文件

  • 需要精确控制

  • 系统资源有限

使用图形界面当:

  • 桌面日常使用

  • 新手学习阶段

  • 简单文件管理

  • 多媒体处理

使用配置管理工具当:

  • 管理大量服务器

  • 需要统一配置

  • 复杂的部署流程

  • 合规性要求

判断标准:

  1. 规模:单机用命令行,多机用配置管理工具

  2. 频率:偶尔操作用图形界面,频繁操作用命令行

  3. 复杂度:简单任务用命令行,复杂编排用配置管理

  4. 技能水平:根据团队技能选择合适工具

9. 面试常见问题

9.1 基础概念类

Q: 什么是Linux命令行?它在系统管理中有什么优势?

A: Linux命令行是通过文本命令与操作系统交互的界面,也称为终端或Shell。它的主要优势包括:

  • 效率高:直接输入命令比点击菜单快得多

  • 精确控制:可以指定详细参数,实现精确操作

  • 可自动化:命令可以写成脚本,实现自动化执行

  • 资源消耗少:不需要图形界面,占用系统资源少

  • 远程管理友好:通过SSH可以轻松管理远程服务器

  • 功能强大:几乎所有系统功能都可以通过命令行实现

Q: 请解释Linux目录结构,主要目录的作用是什么?

A: Linux采用树状目录结构,从根目录(/)开始:

  • /:根目录,整个文件系统的起点

  • /home:普通用户的家目录,存放个人文件

  • /root:超级管理员root的家目录

  • /etc:系统配置文件目录,如网络配置、服务配置

  • /var:可变数据目录,包含日志文件、临时文件等

  • /usr:用户程序目录,安装的应用程序和库文件

  • /bin:基本命令目录,如ls、cp等基础命令

  • /sbin:系统管理命令目录,如mount、umount等

Q: Linux文件权限系统是如何工作的?

A: Linux使用三组权限来控制文件访问:用户(owner)、组(group)、其他(others)。每组都有读(r)、写(w)、执行(x)三种权限。

  1. # 权限示例:-rwxr--r--

  2. # - : 文件类型(-文件,d目录)

  3. # rwx : 用户权限(读写执行)

  4. # r-- : 组权限(只读)

  5. # r-- : 其他权限(只读)


  6. # 数字表示:755 = rwxr-xr-x

  7. # 7(4+2+1) = rwx, 5(4+1) = r-x, 5(4+1) = r-x


复制代码

Q: 在Linux中为什么要避免直接使用root账户?

A: 避免直接使用root账户的原因:

  • 安全风险:root拥有所有权限,误操作可能损坏整个系统

  • 责任追踪:使用普通用户+sudo可以记录谁执行了什么操作

  • 最小权限原则:只在需要时获得管理员权限,降低安全风险

  • 防止恶意软件:限制恶意程序获得系统完全控制权

  • 团队协作:多人环境中便于权限管理和审计

推荐做法:使用普通用户登录,需要管理员权限时使用sudo命令。

9.2 命令应用类

Q: 请解释find命令的基本语法,并给出实用示例

A:

  1. # 基本语法:find [路径] [条件] [动作]


  2. # 按名称查找

  3. find /home -name "*.log"


  4. # 按大小查找大于100M的文件

  5. find /var -size +100M


  6. # 按时间查找7天前修改的文件

  7. find /tmp -mtime +7


  8. # 组合条件:查找大于10M的log文件并删除

  9. find /var/log -name "*.log" -size +10M -delete


  10. # 查找并执行命令

  11. find /home -name "*.tmp" -exec rm {} \;


复制代码

Q: 如何在Linux中管理用户账户?请给出常用的用户管理命令

A:

  1. # 创建用户

  2. sudo useradd -m username # 创建用户并创建家目录

  3. sudo passwd username # 设置用户密码


  4. # 删除用户

  5. sudo userdel username # 删除用户(保留家目录)

  6. sudo userdel -r username # 删除用户及家目录


  7. # 修改用户

  8. sudo usermod -aG sudo username # 将用户添加到sudo组

  9. sudo usermod -s /bin/bash user # 修改用户shell


  10. # 查看用户信息

  11. id username # 查看用户ID和组信息

  12. groups username # 查看用户所属组

  13. cat /etc/passwd | grep username # 查看用户详细信息


复制代码

Q: vim编辑器的基本操作流程是什么?如何进行搜索和替换?

A: vim有三种模式,基本操作流程:

  1. # 1. 打开文件

  2. vim filename.txt


  3. # 2. 模式切换

  4. # 命令模式 → 插入模式:按i、a、o

  5. # 插入模式 → 命令模式:按Esc

  6. # 命令模式 → 底线命令模式:按:


  7. # 3. 基本编辑

  8. i # 在光标前插入

  9. a # 在光标后插入

  10. o # 在下一行插入

  11. dd # 删除当前行

  12. 5dd # 删除5行

  13. x # 删除当前字符


  14. # 4. 搜索和替换

  15. /keyword # 向下搜索keyword

  16. ?keyword # 向上搜索keyword

  17. n # 跳到下一个匹配项

  18. :s/old/new # 替换当前行第一个old为new

  19. :%s/old/new/g # 替换全文所有old为new


  20. # 5. 保存退出

  21. :w # 保存

  22. :q # 退出

  23. :wq # 保存并退出

  24. :q! # 强制退出不保存


复制代码

Q: Linux中如何进行文件压缩和解压?常用的压缩格式有哪些?

A: Linux常用压缩格式和操作:

  1. # tar.gz格式(最常用)

  2. tar -czf archive.tar.gz directory/ # 压缩

  3. tar -xzf archive.tar.gz # 解压


  4. # tar.bz2格式(压缩率高)

  5. tar -cjf archive.tar.bz2 directory/ # 压缩

  6. tar -xjf archive.tar.bz2 # 解压


  7. # zip格式(Windows兼容)

  8. zip -r archive.zip directory/ # 压缩

  9. unzip archive.zip # 解压


  10. # 查看压缩包内容

  11. tar -tf archive.tar.gz # 查看tar.gz内容

  12. unzip -l archive.zip # 查看zip内容


  13. # 解压到指定目录

  14. tar -xzf archive.tar.gz -C /path/to/extract/

  15. unzip archive.zip -d /path/to/extract/


复制代码

Q: 如何设置和管理Linux文件权限?数字权限代表什么?

A: Linux权限管理详解:

  1. # 权限的数字表示

  2. # 读(r)=4, 写(w)=2, 执行(x)=1

  3. # 755 = rwxr-xr-x (用户:读写执行,组:读执行,其他:读执行)

  4. # 644 = rw-r--r-- (用户:读写,组:只读,其他:只读)


  5. # 修改权限

  6. chmod 755 file.txt # 数字方式

  7. chmod u+rwx,g+rx,o+rx file.txt # 符号方式

  8. chmod +x script.sh # 添加执行权限


  9. # 递归修改权限

  10. chmod -R 755 directory/


  11. # 修改所有者

  12. sudo chown user:group file.txt

  13. sudo chown -R user:group directory/


  14. # 查看权限

  15. ls -l file.txt

  16. ls -ld directory/


复制代码

Q: Linux中如何管理进程?如何查看和终止进程?

A: 进程管理基本操作:

  1. # 查看进程

  2. ps aux # 查看所有进程

  3. ps aux | grep nginx # 查找特定进程

  4. top # 实时查看进程

  5. htop # 更友好的进程查看器


  6. # 查找进程PID

  7. pgrep nginx # 按名称查找进程ID

  8. pidof nginx # 查找进程ID


  9. # 终止进程

  10. kill PID # 温和终止进程

  11. kill -9 PID # 强制终止进程

  12. killall process_name # 按名称终止进程

  13. pkill process_name # 按名称终止进程


  14. # 后台进程管理

  15. command & # 后台运行

  16. jobs # 查看后台任务

  17. fg %1 # 将后台任务调到前台

  18. Ctrl+Z; bg %1 # 暂停任务并后台运行

  19. nohup command & # 进程不受终端关闭影响


复制代码

Q: 如何使用管道和重定向来组合命令?

A:

  1. # 管道(|):将前一个命令的输出作为后一个命令的输入

  2. ps aux | grep nginx | wc -l # 统计nginx进程数


  3. # 重定向输出(>):覆盖文件

  4. echo "hello" > file.txt


  5. # 重定向追加(>>):追加到文件末尾

  6. echo "world" >> file.txt


  7. # 重定向错误(2>):重定向错误信息

  8. find /etc -name "*.conf" 2>/dev/null


  9. # 同时重定向输出和错误(&>)

  10. command &> output.log


  11. # tee命令:同时输出到文件和屏幕

  12. echo "重要信息" | tee important.log


  13. # 复杂管道组合

  14. cat access.log | grep "404" | awk '{print $1}' | sort | uniq -c | sort -nr

  15. # 分析访问日志中404错误的IP统计


复制代码

9.3 实际应用类

Q: 在生产环境中,如何安全地删除大量文件?

A:

  1. # 1. 先预览要删除的文件

  2. find /path/to/files -name "*.tmp" -type f


  3. # 2. 统计数量确认

  4. find /path/to/files -name "*.tmp" -type f | wc -l


  5. # 3. 分批删除避免系统负载过高

  6. find /path/to/files -name "*.tmp" -type f | head -1000 | xargs rm


  7. # 4. 使用交互模式再次确认

  8. find /path/to/files -name "*.tmp" -type f -ok rm {} \;


  9. # 5. 安全的脚本化删除

  10. #!/bin/bash

  11. files_to_delete=$(find /path -name "*.tmp" -type f)

  12. echo "将要删除 $(echo "$files_to_delete" | wc -l) 个文件"

  13. echo "$files_to_delete" | head -10

  14. read -p "确认删除吗?(y/N): " confirm

  15. if [[ $confirm == [yY] ]]; then

  16. echo "$files_to_delete" | xargs rm

  17. fi


复制代码

9.4 性能优化类

Q: 如何优化Linux命令的性能和监控系统资源?

A:

  1. # 1. 使用更高效的命令

  2. # 慢:cat file | grep pattern

  3. # 快:grep pattern file


  4. # 2. 避免不必要的管道

  5. # 慢:ps aux | grep nginx | awk '{print $2}'

  6. # 快:pgrep nginx


  7. # 3. 监控命令执行时间

  8. time find /large/directory -name "*.log"


  9. # 4. 监控系统资源

  10. # CPU和内存使用

  11. top -p $(pgrep my_process)


  12. # I/O监控

  13. iostat -x 1


  14. # 磁盘使用监控

  15. df -h && du -sh /var/log/*


  16. # 5. 大文件处理优化

  17. # 使用head/tail限制输出

  18. head -1000 large_file.log | grep error


  19. # 使用并行处理

  20. find /path -name "*.log" | xargs -P 4 -I {} grep "error" {}


复制代码

9.5 故障排查类

Q: 如何排查Linux系统中的常见问题?

A:

  1. # 1. 系统负载过高

  2. # 查看负载

  3. uptime

  4. top -c


  5. # 查看进程

  6. ps aux --sort=-%cpu | head -10

  7. ps aux --sort=-%mem | head -10


  8. # 2. 磁盘空间不足

  9. # 查看磁盘使用

  10. df -h


  11. # 查找大文件

  12. find / -size +100M -type f 2>/dev/null | head -20


  13. # 查看目录大小

  14. du -sh /var/log /tmp /home


  15. # 3. 网络连接问题

  16. # 查看网络连接

  17. netstat -tulpn | grep :80

  18. ss -tulpn | grep :80


  19. # 测试连接

  20. ping -c 4 google.com

  21. telnet hostname 80


  22. # 4. 服务启动失败

  23. # 查看服务状态

  24. systemctl status service_name


  25. # 查看日志

  26. journalctl -u service_name -f

  27. tail -f /var/log/service.log


  28. # 5. 权限问题

  29. # 检查文件权限

  30. ls -la /path/to/file


  31. # 检查进程权限

  32. ps aux | grep process_name


  33. # 修复权限

  34. sudo chown -R user:group /path

  35. sudo chmod -R 755 /path


复制代码


免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:bkook@qq.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
上一篇:什么是内网IP?内网IP的特点及作用
下一篇:Ubuntu系统入门指南:架构特点和使用详解
0

在线
客服

在线客服服务时间:9:00-18:00

客服
热线

19899115815
7*24小时客服服务热线

关注
微信

关注官方微信
顶部