引言
Ubuntu凭借其开源特性、稳定性与高度可定制性,成为开发者及技术爱好者广泛使用的Linux发行版。其核心价值不仅在于友好的图形界面,更源于终端Terminal
这一高效系统管理工具——通过命令行直接与内核交互,用户能够突破图形界面的限制,以更精准的方式掌控系统。高频终端命令的熟练运用既是日常操作的基础,也是进阶系统管理的基石:ls
、cd
、cp
等基础命令构建文件操作框架;grep
、find
助力文本与文件检索;chmod
、chown
则为权限管理提供核心支持。网络场景下,ping
、curl
、ssh
等指令简化设备通信,而systemctl
、journalctl
则赋予用户对系统服务的深度管控能力。通过灵活组合命令参数(如-r
递归、-f
强制操作)与管道符|
、重定向符>
等操作符,用户可快速构建自动化脚本,将重复性任务转化为高效指令流。掌握这些高频率命令不仅大幅提升操作效率,更能深入理解Linux"一切皆文件”的设计哲学,解锁从系统维护到云端部署的全栈管理能力,这正是Ubuntu在技术生态中持续焕发活力的核心密码。
下面这段话就算是吐槽吧!不知道有没有观众老爷和我有没有一样的同感!对于各位观众老爷来说,逛CSDN寻找解决方案确实是很有必要的一件事,我也是经常在CSDN看博文。仅针对今天将要分享的内容来说,很多博文完全就是复制粘贴,那些可能一辈子也用不上的指令,大讲特讲,这是毫无意义的,不仅没有帮助,反而成为负担(根本记不住,而且压根不知道怎么用,离实际操作太远)。那些在日常实操中常用指令却是一笔带过,可能还有遗漏。我最开始学指令的时候,压根都不知道这些指令什么意思,完全硬记,效率低下且经常忘(这完全就是没明白指令的含义)。为了避免各位新入门的友友踩同样的坑,我接下来分模块给大家讲一下Ubuntu的终端指令。
!!!最开始,我以为一天就能够完成这篇博文的撰写,当天发布(2025.5.15
),我惊恐的发现,根本写不完!!!我写的真的是太细致了,导致工作量剧增,不得不说我真的用心了。各位观众老爷,看看右侧的进度条可能就明白我写的到底有多细致了,实在是不想糊弄各位观众老爷!(发自肺腑)
!!!花了近三天的时间终于写完了,写的过程中,我也在反思应该如何把知识能够以更生动形象且易懂的方式传递给大家。虽然我列举了很多实际应用中的高频指令,但是我还是觉得要想彻底掌握且熟练就必须在真正的实践中历练。因此,我在后面讲算法内容的时候也会不断给大家复习这一章的内容。
最后,如果大家喜欢我的创作风格,请大家在评论区评论 “666” 或 “催更”,你们的支持就是我创作最大的动力!如果各位观众老爷觉得我哪些地方需要改进,请一定在评论区告诉我,马上改!在此感谢大家了。
各位观众老爷,本文通俗易懂,快速上手Ubuntu系统实操,收藏本文,关注up不迷路,后续将持续分享Ubuntu系统纯干货(请观众老爷放心,绝对又干又通俗易懂)。请多多关注、收藏、评论,评论区等你~~~
文章目录
一、Ubuntu终端基础概述
这部分工作内容将帮助各位观众老爷理解终端
Terminal
的核心作用,掌握其基本使用方法,并为后续章节的高阶操作奠定基础。
1.1 终端的作用与核心价值
Terminal
是用户与Linux内核交互的桥梁,通过输入命令行指令CLI
直接操作系统资源。与图形界面GUI
相比,终端具有以下优势:
优势 | 说明 | |
---|---|---|
(一) | 高效性 | 快速执行复杂操作,如批量文件重命名、日志过滤。 |
(二) | 自动化 | 通过脚本(Shell Script)将重复任务自动化。 |
(三) | 远程管理 | 通过 ssh 远程操控服务器,无需图形界面支持。 |
(四) | 资源占用低 | 在服务器或低配置设备中,终端是唯一可行的操作方式。 |
一开始我是想着用终端命令行指令给观众老爷讲解终端操作的优势,然转念想到,这一章节本来就是给新入门的老爷们入门,上来就一顿操作只会搞得大家心烦气燥(那我不就和我上面说的那些博文一样了嘛),故这部分采用文字叙述同样能够让各位直观理解到终端操作的优势。
1.2 终端的启动与基本配置
在讲下面这部分内容之前,先请各位观众老爷关注up主和收藏本文(防止迷路),然后退出win环境,进入Ubuntu系统(如果已经在Ubuntu系统中,忽略此步骤)。不知道如何安装Ubuntu系统的同学,请看系统装机(一)和系统装机(二)。强烈建议大家一边看一边实际操作,避免出现眼睛🤩会了👋不会的尴尬情况,熟能生巧!
1.2.1 启动终端
快捷键: 按下Ctrl + Alt + T
快速打开终端窗口。
搜索启动: 在Ubuntu应用栏搜索Terminal
并点击图标。
注释: 无论是哪种启动终端的办法,建议将终端固定在快捷栏,关闭终端后,依然会在固定栏中显示,方便使用。(可能我比较懒,我不喜欢记很多快捷键,能用点击完成的事情,绝对不记,可以把精力留给更多值得记忆的地方,后面讲解的风格也如此。当各位观众老爷了解更多东西时,你会发现要记忆的东西太多了,非常容易混乱,给自己尽可能减压!!!)
1.2.2 终端多标签页与多窗口
当一个终端并不能满足需要的时候,打开多个终端,在桌面上会显得很乱,而且很容易搞乱顺序,这个时候,你就需要一个非常好用的工具terminator
—高级终端。
Terminator: 打开终端,输入以下命令行(后面会解释这个命令什么含义,莫慌)
# 安装terminator指令
sudo apt-get install terminator
# 会弹出输入密码的信息,就是输入你Ubuntu系统开机密码,千万别忘,后续会一直使用
如何使用terminator?我给大家剖析一下:
在 1.2.1 中刚教给大家如何打开终端,当再次使用快捷键Ctrl + Alt + T
打开终端时,发现并不是我们刚才所见到的终端了。没错,你现在看到的就是高级终端terminator
!这个时候可能有人就慌了,“你别搞我啊,我不想用这个terminator
,给你三秒钟,赶紧给我搞回去,小心锤爆你狗头”。别急,点击我们刚刚固定好的快捷栏,你会发现弹出的这个终端就是系统自带的终端。再次使用快捷键Ctrl + Alt + T
打开terminator
,快捷栏上同样也会有显示,重复固定自带终端的操作。好啦,这两种终端就都被固定在快捷栏上了,就在也不用担心切换的问题啦!(不需要其他博文那种繁琐的修改指令)
点击terminator
,进行接下来的详细讲解:
当你想要进一步学习如何使用时,铺天盖地的博文都在教你如何使用哪些快捷键进行操作,我个人觉得没必要记,原因无他,真的太多了!(原谅臣妾实在记不住啊,记麻了)
我们主要用的就是这几个功能:分割,分组和广播。完全不需要记快捷键,只需在黑色空白处右击,就可以看到水平分割和垂直分割。接下来,我以水平分割给大家展示一下:
这样上下两个终端就可以同时工作相互不干扰了。其次,我们还可以新建组,点击左上角“小正方形”(每个终端界面都有),选择新建组“group1”(名字随便起),下面的新建为“group2”。
这个时候,我们就可以点击“小方块”,选择组内分割,我选择的是“group2”和垂直分割,如图所是:
最后,我选择的是广播全部,广播结果如图所示。
1.2.3 终端外观操作(没必要,视个人需求吧)
点击系统自带终端 -->点击画红圈按钮,可自行修改所需内容,这里就不再过多赘述了。
1.3 章尾总结
可能大家对于启动终端快捷建的态度有所不同,我这里也给大家检索了一些关于终端快捷键高质量博文,大家也可以进行记忆,各取所需吧。(个人觉得没必要记,看看就好~~~)
关于高级终端指令快捷键的高质量来源
[1] Ubuntu中终端分屏工具terminator的安装和使用 来源:CSDN
[2] 使用 Terminator 同时运行多个 Linux 终端会话 来源:Linux-Console.net
[3] 在Ubuntu中使用超级终端Terminator提高工作效率 来源:CSDN
关键命令总结
操作 | 命令/快捷键 | 作用 |
---|---|---|
打开终端 | Ctrl + Alt + T | 启动新终端窗口 |
新建标签页 | Ctrl + Shift + T | 在统一窗口中添加标签页 |
命令补全 | Tab 键 | 自动补全路径或命令 |
终止当前进程 | Ctrl + C | 强制停止正在运行的任务 |
清空终端屏幕 | Ctrl + L | 快速清理屏幕输出 |
二、文件与目录管理
文件与目录操作是终端使用的基础核心技能。这部分工作内容将详细讲解如何通过命令行高效管理文件系统,涵盖导航、查看、复制、移动、删除等操作,并附实际场景示例。
2.1 导航与查看
2.1.1 pwd
:显示当前路径
pwd
命令的全称为Print Working Directory,其核心功能是显示用户当前所在工作目录的绝对路径。通过绝对路径提供清晰的定位信息,以下是具体解析:
pwd
# 输出示例:/home/ubuntu-user/Documents
2.1.2 ls
:列出目录内容
ls
命令的全称为 List Directory Contents,是Linux/Unix系统中用于列出目录内容的基础命令。其核心功能是显示指定目录下的文件、子目录及其详细信息(如权限、大小、时间等),默认按文件名排序并隐藏以.开头的文件。它是文件管理、系统维护和脚本编写中不可或缺的工具,以下是具体解析:
ls # 列出当前目录内容(隐藏文件不显示)
ls /var/log # 列出指定目录内容
ls
常见组合用法使用表格:
组合选项 | 功能说明 | 示例 |
---|---|---|
ls -a | 显示所有文件(包含隐藏文件,如 .bashrc ) | ls -a ~ 查看主目录(~)所有文件 |
ls -l | 长格式显示详细信息(权限、所有者、大小、修改时间等) | ls -l /var/log 显示 /var/log 的详细信息 |
ls -lh | 结合 -l ,以易读单位(如 KB、MB)显示文件大小 | ls -lh *.iso 查看ISO文件大小 |
ls -lt | 按修改时间排序(最新文件在前) | ls -lt /tmp 查看 /tmp 中最新的文件 |
ls -ltr | 按修改时间反向排序(旧文件在前) | ls -ltr 查看当前目录中最早修改的文件 |
ls -lS | 按文件大小排序(大文件优先) | ls -lS /var 列出 /var 中的大文件 |
ls -lSr | 按文件大小排序(小文件优先) | ls -lSr /var 列出 /var 中的小文件 |
ls -R | 递归列出所有子目录内容 | ls -R /etc |
ls -d */ | 仅显示目录本身(不列出内容),常用于脚本中筛选目录 | ls -d */ 显示当前目录下的所有子目录名称 |
2.1.3 cd
:切换目录
cd
命令的全称为Change Directory,是 Linux/Ubuntu 系统中用于切换当前工作目录的核心命令,用户通过它可以快速导航到文件系统的不同路径。只要讲到计算机,不可避免的一定会提及 “绝对路径” 和 “相对路径” 两个概念。以下是关于这两个概念的详细解析,结合 Linux 系统的实际应用场景:
特性 | 绝对路径 | 相对路径 |
---|---|---|
起点 | 以根目录 / 开头,如 /home/user/file.txt | 以当前工作目录为基准,如 docs/file.txt |
稳定性 | 路径固定,不随当前目录改变 | 路径动态变化,依赖当前目录位置 |
适用场景 | 脚本配置、跨目录操作、需精准定位文件时 | 快速切换邻近目录、简化路径输入时 |
写法示例 | /usr/share/man | ./config 或 ../data |
Ps: 看不懂写法示例没关系,马上给各位观众老爷解释,莫慌 ~~~
打开终端,可以尝试按照指令进入绝对/相对路径,下面代码是示例,各位看官老爷请结合实际目录修改代码:
cd /home/user/file.txt # 切换到绝对路径
cd docs/file.txt # 切换到相对路径
下面是cd
命令常用符号的功能解析与使用方法
符号 | 作用 | 示例 | 备注 |
---|---|---|---|
. | 表示当前目录 | cd . | 常用于脚本明确路径或组合操作 |
.. | 切换到上级目录 | cd .. | 可连续使用(如cd ../../ 退回两级) |
../.. | 直接退回上两级目录 | cd ../.. | 等效分步操作cd .. && cd .. |
- | 返回上一次所在目录 | cd - | 配合OLDPWD 变量记录历史路径 |
cd | 直接切换回用户主目录 | cd | 等同于cd ~ 或cd $HOME |
这是在我自己Ubuntu系统上运行的cd
指令,可参考:
在讲下面的 2.2 文件操作 和 2.3 目录操作 中,有的观众老爷发现无法执行操作,首先查看自己的指令是否输入正确;其次,就是您所操作的文件所处位置需要更大的权限,需要您在指令面前添加
sudo
,我将以 “2.2.1cp
:复制文件/目录” 进行讲解。
2.2 文件操作
2.2.1 cp
:复制文件/目录
cp
命令的全称为Copy File,是 Linux/Ubuntu 系统中用于复制文件或目录的核心命令,支持从单个文件到复杂目录结构的复制操作,具备灵活的选项控制复制行为。
cp
命令的基本语法与参数:
cp [选项] 源文件或目录 目标文件或目录
cp
命令常用选项与参数表
选项 | 作用 | 适用场景 |
---|---|---|
-r /-R | 递归复制目录及其子内容(必需用于目录复制) | 复制文件夹结构 |
-i | 覆盖目标文件前提示确认 | 安全覆盖文件 |
-f | 强制覆盖目标文件,无需确认(与 -i 冲突) | 脚本中强制操作 |
-v | 显示复制过程的详细信息 | 调试或查看进度 |
cp
操作示例
# 复制文件
cp source.txt destination.txt # 复制文件并重命名
cp file.txt /backup/ # 复制到指定目录(保留原名)
cp file.txt /backup/backup_file.txt # 两个指令合二为一
# 复制目录,需要 -r 参数递归
cp -r my_folder/ /backup/ # 复制整个目录到/backup
cp file1.txt file2.txt /backup/ # 将file1.txt、file2.txt复制到/backup目录
cp -r /home/user/docs /backup/ # 复制/home/user/docs目录及其子内容到/backup
# 覆盖提示,若目标文件存在,提示:cp: overwrite 'new.txt'? y确认
cp -i old.txt new.txt
若权限不足则可添加sudo
执行命令,但是一般需要高权限的文件都比较重要,新手尽量不要修改这类文件,避免系统崩溃。
sudo
(Super User Do)是 Linux 系统中用于授予普通用户临时执行特权命令的核心工具。通过权限分离和日志记录,它在提升操作效率的同时保障了系统安全。
# 复制文件
sudo cp file.txt /backup/backup_file.txt
2.2.2 mv
:移动或重命名文件
mv
命令的全称为 Move,是 Linux/Ubuntu 系统中用于移动文件/目录或重命名文件/目录的核心命令,支持跨文件系统操作与灵活选项控制。
mv
命令的基本语法与参数:
mv [选项] 源文件或目录 目标文件或目录
mv [选项] 源文件列表 目标目录
rm
命令常用选项表
选项 | 作用 | 示例与场景 |
---|---|---|
-r /-R | 递归删除目录及其内容 (非空目录必须用此选项) | rm -r project 删除项目目录及子内容 |
-f | 强制删除,无需确认 | rm -rf tmp 强制递归删除无提示 |
-i | 删除前逐一确认,防止误操作 | rm -i *.log 逐个确认删除 .log 文件 |
-d | 删除空目录,类似 rmdir (下面会讲) | rm -d empty_dir 仅删除空目录 |
-v | 显示操作详细信息 | rm -v file.txt 输出:"removed ‘file.txt’ " |
mv
操作示例
# 文件重命名
mv old_file.txt new_file.txt # 将 old_file.txt 重命名为 new_file.txt
# 移动文件到目录
mv file.txt /path/to/dir/ # 将文件移动到指定目录(保留原名)
mv file1.txt file2.txt dir/ # 移动多个文件到目录
# 移动并重命名
mv file.txt backup/file_backup.txt # 移动并重命名
#目录操作
mv old_dir/ new_dir/ # 重命名目录(若 new_dir 不存在)
mv dir1/ dir2/ # 将 dir1 移动到 dir2 目录下
# 交互提示与强制覆盖
mv -i source.txt dest.txt # 覆盖前询问
mv -f source.txt dest.txt # 强制覆盖(慎用!)
2.2.3 rm
:删除文件/目录
rm
命令的全称为Remove,可删除文件或目录,支持强制删除、递归操作等,功能更强大,使用也非常广泛。
rm
命令的基本语法与参数:
rm [选项] 文件名或目录名...
rm
常用选项表
选项 | 作用 |
---|---|
-r / -R | 递归删除目录及其内容(非空目录必须用此选项) |
-f | 强制删除,不提示确认 |
-i | 交互模式,删除前逐一确认 |
-d | 仅删除空目录(类似 rmdir ) |
-v | 显示操作详细信息 |
rm
操作示例
rm file.txt # 删除文件(需确认)
rm -rf project # 强制递归删除非空目录
rm -i *.log # 逐个确认删除所有 `.log` 文件
2.2.4 touch:创建空文件或更新时间戳
touch
是 Linux/Ubuntu 系统中用于创建空文件和修改文件时间戳的核心命令。其功能灵活且应用广泛,适用于文件管理、脚本编写及系统维护场景。
touch
命令的基本语法与参数:
touch [选项] 文件名或目录名...
touch
命令常用选项表
选项 | 作用 | 示例 |
---|---|---|
-a | 仅更新访问时间 | touch -a file.txt |
-m | 仅更新修改时间 | touch -m file.txt |
-c | 若文件不存在,则不创建(避免生成新文件) | touch -c not_exist.txt |
-d | 指定日期时间 | touch -d "2023-10-01" file.txt |
-t | 自定义时间格式([[CC]YY]MMDDhhmm[.ss] ) | touch -t 202310011200.30 file.txt |
-r | 复制其他文件的时间戳 | touch -r source.txt target.txt |
touch
操作示例
# 创建单个空文件
touch example.txt # 当前目录生成example.txt(不存在则创建,存在则更新时间戳)
# 批量创建文件
touch file{1..5}.txt # 生成 file1.txt 至 file5.txt
touch /path/to/dir/newfile # 在指定路径创建文件(目录需存在)
touch file{1..5}.txt /path/to/dir/newfile #合二为一
# 避免创建新文件
touch -c non_exist.txt # 仅检查文件是否存在,不创建
# 更新当前时间
touch file.txt # 同时更新 atime 和 mtime
touch -am file.txt # 同时更新访问时间和修改时间
#自定义时间
touch -d "2 days ago" file.txt # 设置为两天前
touch -t 202310011530.45 file.txt # 格式:年月日时分.秒
2.3 目录操作
在讲目录的创建与删除之前,先给大家介绍一个非常好用的依赖tree
树形结构展示,之前也给大家讲解了如何使用ls
命令列出目录内容,但是并没有直接展示出他们之间的附属关系,而tree
则很好的解决了这个问题。
sudo apt install tree # 若之前没有安装过,请手动安装
# 使用方法
tree # 显示当前目录树形结构
tree -L 2 # 仅显示前两级目录
tree -d # 仅显示目录(过滤文件)
tree /opt # 可视化第三方软件的目录层级
这是我使用terminator
给各位看官老爷展示如何使用tree
,顺带复习treminator
。
2.3.1 mkdir
:创建目录
mkdir
命令的全称为 Make Directory,是 Linux/Ubuntu 系统中用于创建新目录的核心命令。其核心功能是根据指定路径生成目录结构,支持单层或多层嵌套目录的创建,并能设置目录权限。
mkdir
命令的基本语法与参数:
mkdir [选项] 目录名...
mkdir
常用选项表
选项 | 作用 | 示例 |
---|---|---|
-p | 递归创建多级目录(自动补全父目录) | mkdir -p dir1/dir2/dir3 |
-m | 设置目录权限(八进制格式) | mkdir -m 755 secure_dir |
-v | 显示创建过程的详细信息 | mkdir -v dir_name |
无参数 | 创建单个目录(要求父目录必须存在) | mkdir new_folder |
无参数 | 批量目录(要求父目录必须存在) | mkdir dir1 dir2 |
2.3.2 rmdir
:删除空目录
rmdir
命令的全称为Remove Directory,仅用于删除空目录。若目录中包含文件或子目录,操作会失败,确保用户不会误删非空目录。
rmdir
命令的基本语法与参数:
rmdir [选项] 目录名...
rmdir
常见使用示例:
rmdir empty_dir # empty_dir为空目录
rmdir -p dir1/dir2/dir3 # 删除 dir3 → dir2 → dir1(需均为空目录)
2.3.3 rmdir
与 rm
对比总结表
对比维度 | rmdir | rm |
---|---|---|
核心功能 | 仅删除空目录 | 可删除文件、非空目录 |
安全性 | 高(避免误删非空内容) | 低(-rf 可能导致数据丢失) |
适用场景 | 清理空目录链 | 强制删除、批量操作 |
递归支持 | 需 -p 参数逐级删除空父目录 | 支持 -r 递归删除非空目录 |
覆盖行为控制 | 无覆盖机制 | 支持 -i /-f 控制覆盖提示 |
2.4 章尾总结
这一章内容基本上都是我们日常操作中必不可少的指令,需要各位观众老爷多记多练,尤其是极其常用的cd
,mv
,cp
和rm
指令。
关键命令总结
操作 | 命令 |
---|---|
查看当前目录 | pwd |
列出目录内容 | ls |
切换目录 | cd |
复制目录 | cp |
移动或重命名文件 | mv |
删除目录 | rmdir rm |
创建空文件或更新时间戳 | touch |
创建目录 | mkdir |
三、文本处理与搜索
文本操作是Linux系统的核心能力之一,这部分工作内容将深入讲解如何高效查看、编辑、过滤和统计文本内容,并掌握文件搜索技巧,覆盖从基础到进阶的实用工具。
3.1 查看与编辑文本
这一部分我觉得是最简单且容易上手的,而且未来继续学习算法的观众老爷无法离开的工具。如果电脑没有安装,请提前安装cat
,nano
和vim
。
# 检查是否安装cat,nano和vim
XXX --version # XXX对应想要检查工具名
# 安装 cat,nanohe vim
sudo apt-get install nano vim -y
3.1.1 cat
:快速查看文件内容
进入想要查看文档的路径,使用cd
命令,然后输入如下指令:
cat file.txt # 适合小文件,建议大文件直接使用 vscode
3.1.2 nano
:简易文本编辑器
打开/创建文件:
nano notes.txt # 若文件不存在则创建
sudo nano notes.txt # 若提示权限不够,使用sudo提升权限
进入文档后,按照下述指令进行编辑:
操作 | 作用 |
---|---|
Ctrl + O | 写入文件 |
Ctrl + X | 退出编辑器 |
Ctrl + K | 剪切当前行 |
Ctrl + U | 粘贴内容 |
Ctrl + W | 搜索关键词 |
nano
操作示例:
使用 nano notes.txt
进入文档 --> Ctrl + O
写入文档 -->开始你操作!–> Ctrl + X
退出编辑器。
3.1.3 vim
:高效文本编辑器(基础操作,我更喜欢使用nano
)
打开文件:
vim config.yaml
(一)模式切换:
普通模式(默认):按i
进入插入模式(编辑内容)。
命令模式:按 Esc
退出插入模式,输入 :wq
保存并退出。
(二)基本命令:
:q!
:不保存强制退出;
/keyword
:搜索关键词(按 n
跳转到下一个匹配项);
dd
:删除当前行;
yy
:复制当前行 → 按 p
粘贴;
3.2 文本过滤搜索
我个人觉得这部分内容主要还是应用于搜索文件夹以及是否卸载干净某一工具(搜索不到,证明卸载干净)。
3.2.1 grep
:关键词搜索工具
grep
命令的全称为Global Regular Expression Print,是 Linux/Ubuntu 系统中基于模式匹配的文本搜索工具,支持正则表达式和多种过滤逻辑,广泛用于日志分析、代码调试、数据筛选等场景。有编程语言基础能更好理解正则表达式等原理。我们这里只讲解常用操作,不涉及高阶操作(原因是用的概率较低,而且最关键的是讲完也记不住是大概率发生的事,需要的时候直接问问Deepseek即可出答案!)
grep
命令的基本语法与参数:
grep [选项] "模式" 文件或目录...
grep
常用选项表
选项 | 作用 | 示例 |
---|---|---|
-i | 忽略大小写匹配 | grep -i "error" file.log |
-v | 反向匹配(输出不包含模式的行) | grep -v "debug" file.txt |
-n | 显示匹配行的行号 | grep -n "warning" app.log |
-c | 统计匹配行的数量 | grep -c "404" access.log |
-r | 递归搜索目录及其子目录 | grep -r "TODO" ./src |
-E | 启用扩展正则表达式 | grep -E "error|warn" log.txt |
-A N | 显示匹配行及其后 N 行 | grep -A 2 "crash" debug.log |
-B N | 显示匹配行及其前 N 行 | grep -B 3 "exception" trace.log |
-w | 精确匹配单词(避免部分匹配) | grep -w "test" file.txt |
3.2.2 find
:文件搜索与操作
find
是 Linux/Ubuntu 系统中功能最强大的文件搜索工具,在给定路径下递归搜索符合指定条件的文件和目录,支持逻辑运算(与、或、非)及自定义操作(删除、复制等)。
find
命令的基本语法与参数:
find [路径] [表达式] [操作]
find
常用选项表
选项 | 作用 | 示例 |
---|---|---|
-name | 按文件名匹配(支持通配符) | find /var -name "*.log" |
-iname | 按文件名匹配(忽略大小写) | find . -iname "CONFI*" |
-type | 按文件类型过滤(f 文件/d 目录) | find ~ -type f |
-size | 按文件大小过滤(+ 大于/- 小于) | find / -size +100M |
-mtime | 按修改时间过滤(天数) | find . -mtime -7 |
-maxdepth | 限制搜索深度 | find /etc -maxdepth 2 -name "*.conf" |
-exec | 对匹配项执行命令 | find /tmp -name "*.tmp" -exec rm {} \; |
-empty | 查找空文件/目录 | find . -empty |
-perm | 按权限过滤 | find . -perm 644 |
-user | 按所有者过滤 | find /home -user alice |
find
常见使用示例:
# 查找指定文件
find / -name "nginx.conf" # 全盘搜索 nginx 配置文件
find /var/log -iname "*.log" # 忽略大小写查找日志文件
# 通配符与路径匹配
find /etc -path "*nginx/*.conf" # 匹配路径中包含 `nginx` 的配置文件
# 查找空目录和文件
find /tmp -type d -empty # 查找空目录
find . -type f -size 0 # 查找大小为 0 的文件。
# 限制文件大小
find /backup -size +100M # 查找大于 100MB 的文件
find ~ -size -1k # 查找小于 1KB 的文件。
# 最近修改的文件
find /var/www -mtime -3 # 查找 3 天内修改过的文件
find . -mmin +30 # 查找 30 分钟前修改的文件
# 对比参考文件时间
find . -newer reference.txt # 查找比 reference.txt 更新的文件
# 组合条件(与、或、非)
find . $$ -name "*.py" -o -name "*.sh" $$ # 查找`.py`或`.sh`文件
find /var ! -user root # 查找非root用户拥有的文件
# 执行操作(删除、复制等)
find /tmp -name "*.tmp" -delete # 删除所有临时文件
find . -name "*.bak" -exec cp {} /backup \; # 备份文件
# 控制搜索范围
find /etc -maxdepth 2 -name "*.conf" # 仅搜索两级子目录。
# 排除特定目录
find . -path "./cache" -prune -o -name "*.log" # 跳过`cache`目录搜索日志
3.3 章尾总结
这章工作内容的逻辑还是十分清晰的,先了解如何查看和编辑文本,然后如何使用grep
和find
进行通过灵活组合选项,高效解决文件定位与管理需求。
关键命令总结
操作 | 命令 |
---|---|
快速查看文件内容 | cat |
简易文本编辑器 | nano |
高效文本编辑器 | vim |
关键词搜索工具 | grep |
文件搜索与操作 | find |
四、系统管理与权限控制(一定要好好看这章!!!)
这部分工作内容将深入讲解Linux系统的核心管理技能,包括文件权限控制、软件包管理、进程监控和服务管理,帮助你全面掌握Ubuntu系统的控制权。
4.1 权限管理
4.1.1 理解Linux权限模型
权限三元组(以ls -l
输出为例,“是不是忘了ls
!还不快抓紧复习”)
-rwxr-xr-- 1 user group 4096 Jan 10 10:00 script.sh
# 解释
-rwxr-xr-- (文件类型及用户/组/其他用户的权限组合)
1 (指向此文件的硬链接数量,普通文件默认是 1,目录的硬链接数等于子目录数 + 2)
user (文件的所有者/拥有者账户名)
group (文件所属的用户组名)
4096 (文件内容的字节数(若为目录,表示目录元数据占用空间,而非实际内容大小))
Jan 10 10:00 (文件最后一次被修改的日期和时间)
script.sh (文件名称)
字符含义:
字符 | 说明 | 数值表述 |
---|---|---|
- | 普通文件(如脚本、文本、二进制文件等) | |
rwx | 所有者user 的权限(读、写、执行) | 7 (4+2+1) |
r-x | 所属组group 成员的权限(读、执行) | 5 (4+0+1) |
r-- | 非所有者和非组成员的权限(其他人)(读) | 4 (4+0+0) |
权限效果说明:
权限对象 | 允许的操作 |
---|---|
所有者 user | - 读取文件内容- 修改文件内容- 将文件作为程序执行(如运行脚本 ./script.sh) |
组成员 group | - 读取文件内容- 将文件作为程序执行(但无法修改文件内容) |
其他用户 | - 仅可读取文件内容(不可修改或执行) |
注释:r
读取(4) ,w
写入(2) ,x
执行(1)。
4.1.2 chmod
:修改文件权限
chmod
指令是一个用于修改文件或目录权限的核心命令,其全称为Change Mode。它通过调整权限位来控制用户对文件或目录的访问方式(如读、写、执行),从而实现访问权限的精细化管理。
chmod
命令的基本语法与参数:
chmod [数字模式] [对象] # 数字模式
chmod [对象 ± = 修改类型] [对象] # 符号模式
(一)数字模式(推荐新手)
所谓的数字模式就是我们刚在注释所讲的内容,将“读”,“写”,“执行”以数字形式表达,非常方便。
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.txt # rw-r--r--
常见权限组合:
数字模式 | 表达 | 使用场景 |
---|---|---|
755 | user :rwx,group :r-x,其他用户:r-x | 可执行脚本/程序 |
600 | user :rw-,group :—,其他用户:— | 私有配置文件(仅所有者可读写) |
(二)符号模式(精准调整)
符号模式更加注重于对所有者/所属组/其他用户所拥有的权限进行精准调控,有点可视化的感觉,数字无法直观看出所增加/减少的权限类型。
chmod u+x backup.sh # 给所有者添加执行权限
chmod g-w sensitive.txt # 移除所属组的写入权限
chmod o=r-- public.txt # 设置其他用户只读
chmod u+rwx,g=rx,o-r file.txt # 所有者增加读写执行,组设为读执行,其他用户移除读权限
chmod -R u+rwx /var/www # 递归设置目录及内部文件权限
注释: 在Ubuntu系统中,默认不启用root
用户,普通用户需通过sudo
临时提升权限来执行需要管理员操作的chmod
命令。例如:
sudo chmod 644 /etc/nginx/nginx.conf # 需输入当前用户密码验证
但是,这里本人还是推荐数字模式,我的感受是,虽然符号模式更精准,但该文件/目录原来到底有哪些权限我是需要查询的,然后才能修改。而使用数字模式则可以直接赋予我想有给它的权限范围,无需事先查询。
4.1.3 chown
:更改文件所有者
chown
命令全称为 Change Owner,是一个用于修改文件或目录的所有者user
及所属组group
的核心命令。它通过调整文件的属主和属组来控制不同用户或用户组的访问权限,是Linux/Unix系统权限管理的重要工具。只有root
用户或有 sudo
权限的普通用户才能执行此命令。Ubuntu默认禁用root
直接登录,因此普通用户需通过sudo
临时提权操作。
chown
命令的基本语法与参数:
chown [选项] [所有者][:组] 文件/目录
chown
常见使用示例:
# 修改文件所有者
sudo chown new_owner filename # 将文件所有者改为new_owner
sudo chown alice file.txt # 将file.txt的所有者设为alice
# 同时修改所有者和组
sudo chown alice:developers file.txt # 所有者设为alice,组设为developers
# 仅修改所属组
sudo chown :developers file.txt # 仅修改组为developers(所有者不变)
# 递归修改目录及子内容
sudo chown -R alice:developers project/ # 递归修改project目录及所有子文件/目录
# 参考其他文件权限
sudo chown --reference=source.txt target.txt # 将target.txt的属主/组设为与source.txt相同
4.1.4 sudo
与su
:权限提升(慎重使用权限!)
Ubuntu推荐通过
sudo
提权而非切换到root
用户,以增强安全性。
(一)临时获取root
权限
sudo apt update # 单条命令提权
sudo -i # 切换到root shell(需谨慎)
(二)切换用户 ----- “这个功能我没用到过,我只设立了一个用户”
su - username # 完全切换用户环境
exit # 返回原用户
4.2 进程与服务管理
这一小节的工作内容主要体现在查找程序报错方面,尤其是查看工作日志!下面的一些操作,各位老铁千万别随意试着玩,尤其是
kill
进程,可能会导致很麻烦的结果。答应我,别乱搞,除非你清楚你的操作并不影响将来的程序运行!
4.2.1 ps
:查看进程状态
ps
命令全称为Process Status,是一个用于查看当前系统进程状态的核心命令,能够提供进程的详细信息,如PID(进程ID)、资源占用、执行命令等,是系统管理和故障排查的重要工具。
ps
命令的基本语法与参数:
ps [选项]
这个地方指令比较多,也不是很好记,我就给大家举几个经常用得上的ps
指令,如果出现需要其他指令的时候,Deepseek即可,记住基本的操作就够用了。
# 查看所有进程
ps aux # 显示所有进程及资源占用详情
ps -ef # 完整格式显示进程树及父进程信息
# 查找特定进程(这个使用频率非常高)
ps aux | grep nginx # 查找与nginx相关的进程
pgrep -f abc.py # 通过进程名或命令行快速获取PID(与ps互补)
# 分析资源占用
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 10 # 按CPU排序前10进程
4.2.2 kill
:终止进程( 慎重使用!)
kill
是一个用于向进程发送信号的核心命令,通过指定PID或进程名来控制进程的运行状态,从而实现进程的终止、暂停、恢复或重新加载配置等操作。
kill
通过发送信号与进程交互,不同信号对应不同操作。默认情况下,kill
发送 SIGTERM(15) 信号,请求进程正常退出;若进程未响应,则需使用 SIGKILL(9) 强制终止。终止其他用户的进程或系统进程需管理员权限sudo
,普通用户只能操作自己的进程。
kill
命令的基本语法与参数:
kill [选项] <信号或编号> <PID或进程名>
kill
常见信号作用:
信号名称 | 编号 | 含义 |
---|---|---|
SIGTERM | 15 | 请求终止进程(可被捕获或忽略) |
SIGKILL | 9 | 强制终止进程(立即生效,不可被捕获) |
SIGHUP | 1 | 挂起信号,常用于重新加载配置文件 |
SIGSTOP | 19 | 暂停进程(不可被捕获) |
SIGCONT | 18 | 恢复已暂停的进程 |
kill
常见使用示例:
# 终止程序
kill 1234 # 发送SIGTERM(15)信号,要求进程正常退出
kill -9 1234 # 强制杀死PID为1234的进程
# 暂停与恢复进程
kill -SIGSTOP 1234 # 暂停PID为1234的进程
kill -SIGCONT 1234 # 恢复已暂停的进程
# 重新加载配置,适用于守护进程(如Nginx、Apache)的配置热更新
kill -HUP 1234 # 通知进程重新加载配置文件
# 终止多个进程或进程组
kill 1234 5678 # 终止PID为1234和5678的进程
kill -9 -1234 # 杀死PID为1234的进程及其子进程
4.2.3 systemctl
:服务管理
systemctl
是用于管理和控制 systemd 系统及服务管理器的核心命令行工具。作为现代Linux系统的初始化系统,systemd替代了传统的SysV init
和Upstart
,而 systemctl 整合了旧版 service
和 chkconfig
的功能,提供更高效的服务管理方式。(总之一句话,一代更比一代强,前面的都被拍死了,out了!systemctl
才是yyds!)
主要分为以下四大功能:
①服务生命周期管理
负责服务的 启动(start)、停止(stop)、重启(restart)、重载配置(reload) 等操作。
systemctl start nginx.service # 启动Nginx服务
systemctl stop sshd # 停止SSH服务(可省略.service后缀)
②服务自启配置(这个一定要会!超级常用)
设置服务在系统启动时 自动启用(enable) 或 禁用(disable)。
systemctl enable docker # 启用Docker开机自启
systemctl disable apache2 # 禁止Apache开机自启
③状态监控与日志
查看服务的实时状态、依赖关系和日志信息。
systemctl status mysql # 显示MySQL的详细状态(含进程PID、运行时间等)
journalctl -u nginx -f # 实时追踪Nginx日志(需结合journalctl)
④单元文件(Unit)管理
单元文件(Unit File) 是systemd管理资源的基础,包括服务(.service)、挂载点(.mount)、定时器(.timer)等。其支持自定义单元文件。
systemctl edit nginx.service # 扩展或覆盖默认服务配置
systemctl daemon-reload # 重载修改后的单元文件(超级关键的操作)
4.2.4 journalctl
:查看系统日志
journalctl
是用于管理和查询 systemd
日志系统 的核心命令行工具。它是 systemd
生态的一部分,替代了传统分散的日志管理方式,提供统一、结构化的日志查询和分析功能。
journalctl
常见使用示例:
# 服务故障排查
journalctl -u sshd -p err --since "today" # 查看 SSH 服务的错误日志
journalctl -u docker.service -f # 实时追踪 Docker 容器日志
# 系统启动问题分析
journalctl -b # 显示本次启动的日志
journalctl -k # 查看内核启动消息
# 性能监控
journalctl --since "1 hour ago" | grep "high CPU" # 按 CPU 使用率筛选高负载进程日志
journalctl --since "1 hour ago" -p err -o json > error_logs.json # 导出最近 1 小时的错误日志为 JSON
4.3 章尾总结
这部分工作在实际操作中非常重要且使用频率非常高,各位看官老爷可进行深度学习,有些关键操作在不够了解的情况下,千万不要随意尝试,很容易造成崩溃!
关键命令总结
操作 | 命令 |
---|---|
修改文件权限 | chmod |
更改文件所有者 | chown |
权限提升 | sudo 、su |
包管理 | apt |
查看进程状态 | ps |
终止进程 | kill |
服务管理 | systemctl |
查看系统日志 | journalctl |
五、网络与远程控制
本部分工作内容将讲解Ubuntu系统中的网络诊断、远程连接和数据传输技术,主要应用于网络配置和链接Github仓库,读到这里的小伙伴注意了,如果想要访问Github使用国内网络是行不通的(需要克隆依赖和仓库),点到为止。
5.1 网络诊断与配置
5.1.1 ping
:基础连通性测试
ping
是一个用于检测网络连通性的基础命令行工具,通过发送 ICMP(Internet Control Message Protocol)回显请求(Echo Request)数据包,测试本地主机与目标主机之间的连接状态、延迟(Latency)以及丢包率(Packet Loss)。
ping
命令的基本语法与参数:
ping [选项] <目标IP或域名>
ping
常见使用示例:
ping google.com # 持续发送请求直至手动终止(Ctrl+C)
ping -c 3 ubuntu.com # 发送3次请求后自动停止
5.1.2 ip
:现代网络配置工具(替代ifconfig)
ip
是一个功能强大的网络配置工具,用于管理和配置网络接口、路由表、ARP缓存、隧道等网络资源。它替代了传统的 ifconfig
、route
、arp
等命令,提供了更统一、更灵活的语法。
ip
命令的基本语法与参数:
ip [选项] <对象> <命令> [参数]
ip
常见使用示例:
# 查看所有接口
ip link show
# 启用/禁止接口
ip link set eth0 up # 启用eth0
ip link set eth0 down # 禁用eth0
# 查看接口的ip地址
ip address show eth0
# 为接口添加ip地址
ip address add 192.168.1.100/24 dev eth0
# 删除ip地址
ip address del 192.168.1.100/24 dev eth0
5.1.3 curl
:高级网络请求工具(使用频率极高!!!)
curl
命令全称为Client URL,是一个功能强大的命令行工具,用于通过 URL 语法与服务器进行数据传输,支持 HTTP
、HTTPS
等数十种协议,尤其擅长处理网络请求的细节控制和自动化脚本。
curl
命令的基本语法与参数:
curl [选项] <URL>
curl
常见使用示例:
# 快速测试 API 接口
curl https://api.example.com/data # 发送 GET 请求并输出响应
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com/submit # 发送 POST 请求(JSON 数据)
# 下载文件
curl -O https://example.com/images/photo.jpg # 下载文件并保留原始名称
curl -o /tmp/image.jpg https://example.com/photo.jpg # 下载到指定路径并重命名
curl --limit-rate 500K -O https://example.com/large-file.iso # 限速下载(限制为 500KB/s)
# 调试网络问题
curl -v -o /dev/null https://example.com # 显示完整请求/响应头和时间统计
curl -s -o /dev/null -w "%{http_code}\n" https://example.com # 仅显示 HTTP 状态码
5.2 远程连接与传输
5.1.1 ssh
:安全远程登录
ssh
命令全称为Secure Shell,是一个基于加密协议的网络工具,用于安全地远程登录和管理其他计算机,或在不同主机之间 加密传输数据。它替代了传统的明文协议,通过公钥加密和对称加密技术保障通信安全,是服务器管理、文件传输和远程开发的行业标准工具。
ssh
命令的基本语法与参数:
ssh [选项] <用户名@主机名或IP> [远程命令]
ssh
常见信号作用:
参数 | 作用 | 示例 |
---|---|---|
-p <端口> | 指定SSH服务端口(默认22) | ssh -p 2222 user@example.com |
-i <密钥路径> | 使用指定的私钥文件登录 | ssh -i ~/.ssh/id_rsa user@host |
-L <本地:远程> | 创建本地端口转发(隧道) | ssh -L 3306:localhost:3306 user@host |
-R <远程:本地> | 创建远程端口转发 | ssh -R 8080:localhost:80 user@host |
ssh
常见使用示例:
# 基础远程登录
ssh user@192.168.1.100 # 使用密码登录
ssh -i ~/.ssh/server_key user@example.com # 使用密钥登录
# 执行远程命令
# 单次执行命令后退出
ssh user@host "ls -l /var/log"
# 保持会话执行多个命令
ssh user@host <<EOF
sudo apt update
sudo apt upgrade -y
EOF
通过上面关于终端的高频率命令行使用的实操,相信各位看官老爷在使用Ubuntu系统的终端能够更加顺手,建议大家平时多看多用终端命令行,这样才能用起来更熟练。第一次使用终端肯定是不习惯的,这和windows
操作系统有很大的不同,在win环境中使用过conda
可能上手更快(这实际上就是终端命令行,conda
在linux也同样可以运行,尤其是搭建虚拟环境的重要工具之一,未来我也将会和大家一起分享在linux中如何使用conda
)。
关于Ubuntu系统终端基本常识操作分享到这里就结束了,感谢大家的浏览、点赞、关注和评论。和大家说再见真的好难受,再见,各位观众老爷 ~~~
等等等等…先别走,我开玩笑的,我怎么舍得各位观众老爷,知道错了!!!为了表示诚意,下一篇文章将继续分享Ubuntu系统操作,超级干货且详细,绝对把每一步讲清楚,为什么这样做,敬请期待!!!!!
能够看到这里的观众老爷,无疑是对up的最大肯定和支持,在此恳求各位观众老爷能够多多点赞、收藏和关注(强烈推荐大家关注一下up主和新建的这个合集“ubuntu系统装机”)。在这个合集中,未来将持续给大家分享关于Ubuntu系统生态中的多种常见开发工具,Docker、conda、Pandas以及MySQL等等各种实用干货。感谢大家支持!
往期回顾 — 专栏 “Ubuntu系统教学系列”
专栏: Ubuntu系统教学系列