Ubuntu 中的终端是与系统进行命令行交互的工具。通过终端,用户可以操作文件、管理目录、查看系统状态、安装软件、运行脚本、管理服务和连接远程计算机,也可以完成许多图形界面中不容易批量处理的任务。
Ubuntu 是 Linux 发行版,常用命令包括 cd、ls、cp、mv、rm、grep、find、chmod 等。同时,Ubuntu 也提供或使用了一些适合系统管理的工具,例如 apt、snap、ip、ss、systemctl、journalctl 等。
本文以常规 Ubuntu 系统和默认的 Bash 环境为主。多数命令同时适用于桌面和服务器;涉及打开图形应用的命令,需要在可用的桌面会话中执行。精简系统可能未安装部分工具,可通过后文介绍的软件包管理命令安装。
一、终端、shell 与命令基本结构
终端(Terminal)提供命令输入和输出的界面,命令解释器(shell)负责解释并执行命令。Ubuntu 的普通用户通常默认使用 Bash。
查看当前用户默认登录 shell 的路径:
echo "$SHELL"常见输出是:
/bin/bash$SHELL 通常记录默认登录 shell 的路径,不一定代表当前正在运行的 shell。
在交互式命令行中,查看当前 shell 的调用名称:
echo "$0"输出可能是 bash 或 -bash。
命令通常由命令名、选项和参数组成:
命令名 [选项] [参数]
例如:
ls -lh /var/log其中 ls 是命令名,-lh 是选项,/var/log 是要查看的目录。语法说明中的方括号表示该部分可选,实际输入时不需要输入方括号。
1、查看命令帮助
查看命令手册:
man ls进入手册后:
• 按空格向下翻页
• 输入 /关键词 并按 Enter 搜索
• 按 q 退出
许多命令也支持:
ls --help查看 Bash 内置命令的帮助:
help cd不同命令的帮助选项可能不同。不能把 -h 一概理解为帮助,例如 ls -h 用于以易读形式显示文件大小。
2、查看历史命令与补全输入
查看历史命令:
history按上方向键可以查找之前输入过的命令;按 Ctrl + R 可以搜索历史命令,确认内容后按 Enter 执行。
输入命令或路径的一部分后,按 Tab 可以尝试自动补全。如果存在多个候选项,可能需要继续输入,或再次按 Tab 查看候选项。
3、查看命令位置与类型
检查命令是否可用,并查看其来源:
command -v python3查看命令类型:
type cd命令可能是外部程序、shell 内置命令、别名或函数。例如,cd 通常是 shell 内置命令。
4、环境变量与 Bash 配置
查看环境变量:
env查看命令搜索路径:
echo "$PATH"临时设置环境变量:
export NODE_ENV=development该设置作用于当前 shell 及其随后启动的子进程,不会自动成为新终端会话的永久设置。
Ubuntu 的交互式 Bash 常用配置文件是:
~/.bashrc用 nano 打开:
nano ~/.bashrc例如,在文件末尾添加别名:
alias ll='ls -alh'保存后,让当前 shell 重新读取配置:
source ~/.bashrc之后可以使用:
ll5、清屏与终止前台命令
清空当前终端显示:
clear在 Bash 中,也可以按 Ctrl + L 清屏。
停止正在前台运行的命令,通常可以按 Ctrl + C。清屏只是整理显示内容,不会停止正在运行的程序。
二、路径、目录与文件管理
文件操作需要先确认当前目录、目标路径和命令作用。Ubuntu 的文件名通常区分大小写,例如 README.md 和 readme.md 可以是两个不同文件。
1、查看当前目录
pwdpwd 是 print working directory 的缩写,用于显示当前工作目录。
例如:
/home/mediatea/project表示当前位于用户主目录中的 project 文件夹。
2、切换目录
基本语法:
cd 路径切换到用户主目录:
cd ~也可以直接使用:
cd进入主目录中的 project 文件夹:
cd ~/project切换到上一级目录:
cd ..返回上一次所在的目录:
cd -常见路径符号:
• . 表示当前目录
• .. 表示上一级目录
• ~ 表示当前用户主目录
• / 表示系统根目录
以 / 开头的是绝对路径,例如 /var/log;不以 / 开头的路径通常相对于当前目录,例如 project/src。
在 Ubuntu 桌面中,桌面、下载等文件夹名称可能随界面语言变化。可以先查询实际路径:
xdg-user-dir DOWNLOAD进入实际下载目录:
cd "$(xdg-user-dir DOWNLOAD)"其中 $() 会执行括号内的命令,并把输出作为路径使用;外面的双引号可以保留路径中的空格。这些目录查询适用于配置了相应用户目录的桌面环境。
3、路径中有空格时的写法
使用引号:
cd "My Folder"或用反斜杠转义空格:
cd My\ Folder主目录下的带空格路径可以写为:
cd "$HOME/My Folder"不要写成 "~/My Folder",因为引号内的 ~ 不会按这里预期的方式展开为主目录。
4、查看目录内容
列出当前目录:
ls显示详细信息:
ls -l显示隐藏项目:
ls -a以点开头的文件或目录通常是隐藏项目,例如 .bashrc、.config、.git。
以易读形式显示大小:
ls -lh组合使用:
ls -alh按修改时间排序,较新的项目排在前面:
ls -lt5、新建文件与文件夹
新建文件夹:
mkdir project递归创建多级文件夹:
mkdir -p project/src/components-p 会按需要创建中间目录;目标目录已经存在时,不会仅因其存在而报错。
创建空文件:
touch README.md文件不存在时,touch 会创建空文件;文件已经存在时,默认更新其访问时间和修改时间,不会清空原内容。
6、复制、移动与重命名
复制文件:
cp a.txt b.txt复制到指定目录:
cp a.txt ~/project/这里假定目标目录已经存在。
递归复制文件夹:
cp -R project project_backup如果 project_backup 不存在,会创建该目录并复制内容;如果它已经是目录,通常会在其中复制出 project 子目录。
覆盖已有目标文件前确认:
cp -i a.txt b.txt-i 只在需要覆盖已有文件时询问;目标不存在时直接复制。
移动文件:
mv a.txt ~/project/重命名文件:
mv old.txt new.txt移动或重命名时,在覆盖已有目标文件前确认:
mv -i old.txt new.txt7、删除文件与文件夹
删除文件:
rm a.txt删除前确认:
rm -i a.txt删除空文件夹:
rmdir empty_folder递归删除文件夹及其内容:
rm -r project_backup强制递归删除:
rm -rf 文件夹名-r 表示递归处理,-f 表示不询问,并忽略不存在的目标等情况。rm 删除的内容通常不会进入桌面回收站。执行前应确认当前目录和目标:
ls三、打开文件、文本查看与文本编辑
Ubuntu 既可以直接在终端查看和编辑文本,也可以在桌面会话中调用图形应用。
1、打开文件、文件夹与网页
使用默认文件管理器打开当前目录:
xdg-open .使用默认应用打开文件:
xdg-open README.md使用默认浏览器打开网页:
xdg-open "https://ubuntu.com"xdg-open 依赖可用的桌面会话和应用关联,不适合作为无图形界面服务器或普通 SSH 会话中的通用打开命令。
2、查看文本文件内容
查看整个文件:
cat README.mdcat 适合较短文件。
分页查看长文件:
less app.log在 less 中:
• 按空格向下翻页
• 按 b 向上翻页
• 输入 /关键词 并按 Enter 搜索
• 按 n 查找下一个匹配项
• 按 q 退出
查看前 10 行:
head README.md查看前 20 行:
head -n 20 README.md查看后 50 行:
tail -n 50 app.log实时查看文件新增内容:
tail -f app.log停止查看时按 Ctrl + C。如果日志会被轮换或重新创建,可以使用 tail -F app.log,让 tail 按文件名跟踪并在文件暂时不可用时继续尝试。
3、编辑文本文件
使用 nano:
nano README.md常用操作:
• Ctrl + O:写入文件
• Enter:确认文件名
• Ctrl + X:退出
使用 Vim:
vim README.md常用操作:
• 按 i 进入插入模式
• 按 Esc 返回普通模式
• 输入 :wq 并按 Enter 保存退出
• 输入 :q! 并按 Enter 放弃修改退出
临时修改文本或配置时,nano 的操作通常更容易掌握;Vim 适合需要更丰富编辑功能的场景。
四、查找、搜索、统计与重定向
通过查找文件、搜索文本和组合命令,可以快速定位项目内容,并把结果保存下来。
1、按文件名查找文件
基本语法:
find 路径 -name "文件名模式"查找当前目录及其子目录中的 .txt 文件:
find . -type f -name "*.txt"查找主目录中的 Markdown 文件:
find ~ -type f -name "*.md"忽略文件名大小写:
find . -type f -iname "*.jpg"只查找目录:
find . -type d这里应给 "*.txt" 等模式加引号,让 find 自己匹配文件名,避免 shell 先展开通配符。
2、搜索文件内容
搜索含有 error 的行:
grep "error" app.log忽略大小写:
grep -i "error" app.log显示匹配行号:
grep -n "error" app.log递归搜索项目目录:
grep -r -n "TODO" .grep 默认把搜索模式作为正则表达式处理。如果想按普通文字搜索,可以使用 -F:
grep -F "a.b" app.log这会匹配字面上的 a.b,其中的点不会作为正则表达式通配符处理。
3、统计行数与组合命令
统计文件中的换行符数量,通常用于统计文本行数:
wc -l README.md统计搜索结果行数:
grep -r "error" . | wc -l这里的管道符 | 把前一个命令的标准输出传给后一个命令。
4、文本输出与重定向
输出文本:
echo "Hello Ubuntu"把输出写入文件:
echo "Hello Ubuntu" > hello.txt> 会创建文件;文件已经存在时,默认覆盖原内容。
追加写入:
echo "New line" >> hello.txt保存命令结果:
ls -alh > files.txt把错误信息单独保存:
find . -name "*.log" 2> errors.txt2> 重定向标准错误。默认情况下,> 和管道符 | 只处理标准输出。
5、同时显示并保存输出
ls -alh | tee files.txttee 会把输入同时显示在终端并写入文件,默认覆盖目标文件。追加写入时使用:
ls -alh | tee -a files.txt五、磁盘空间、权限与压缩归档
这组命令用于查看空间占用、确认文件权限,以及打包和解压文件。
1、查看磁盘空间
查看已挂载文件系统的容量和使用情况:
df -h查看当前目录的磁盘占用总量:
du -sh .查看指定文件夹:
du -sh ~/project分别查看当前目录下的非隐藏项目:
du -sh ./*./* 默认不匹配以点开头的隐藏项目,但这些项目会计入 du -sh . 的总量。默认配置的 Bash 在没有匹配项时会保留原模式,随后 du 可能提示无法访问 './*'。
查看磁盘、分区等块设备:
lsblk同时显示文件系统信息:
lsblk -flsblk 适合查看设备层级、文件系统类型和挂载点,df 更适合查看已挂载文件系统的空间使用情况。
2、查看和修改权限
查看文件权限:
ls -l例如:
-rw-r--r-- 1 mediatea mediatea 1200 Oct 8 10:00 README.md开头的 - 表示普通文件,后面的九个字符分为三组,分别对应所有者、所属组和其他用户。
• r 表示可读
• w 表示可写
• x 表示可执行;对于目录,表示可进入或遍历
给脚本所有者增加执行权限:
chmod u+x script.sh然后运行:
./script.sh脚本还需要有适用的解释器和正确内容,执行权限本身不能保证脚本可以正常运行。
设置普通文件权限:
chmod 644 README.md常见权限:
• 644:所有者可读写,所属组和其他用户只读
• 755:所有者可读写执行,所属组和其他用户可读可执行
修改所有者:
sudo chown 用户名 文件名同时修改所有者和所属组:
sudo chown 用户名:组名 文件名递归修改目录所有者:
sudo chown -R 用户名 文件夹名sudo 用于在授权范围内以其他用户身份执行命令,默认以超级用户 root 的身份执行。需要认证时,通常输入当前用户的密码,终端一般不会显示密码字符或星号。
3、压缩与解压缩
创建 ZIP 压缩包:
zip -r project.zip project解压 ZIP:
unzip archive.zip解压到指定目录:
unzip archive.zip -d output创建 tar.gz 压缩包:
tar -czf archive.tar.gz project先查看归档内容:
tar -tzf archive.tar.gz解压到指定目录:
tar -xzf archive.tar.gz -C outputtar 中的 -c 表示创建归档,-x 表示解包,-t 表示列出内容,-z 表示使用 gzip,-f 指定归档文件,-C 指定操作目录。
六、进程、端口与网络检查
当程序卡住、服务无法启动或网络异常时,可以从进程、监听端口和网络配置三个方面排查。
1、查看和管理进程
查看进程:
ps aux查找指定进程:
ps aux | grep python结果可能包含 grep 命令自身。也可以使用:
pgrep -af python-a 显示完整命令行,-f 按完整命令行匹配。
实时查看进程和资源使用情况:
top按 q 退出。
结束指定进程:
kill 进程ID例如:
kill 12345默认发送 SIGTERM 信号,请求进程终止。程序可以处理该信号,并在退出前清理资源。
强制终止:
kill -9 进程ID-9 发送 SIGKILL,不给程序正常清理资源的机会,应先尝试普通 kill。
2、查看端口占用
查看正在监听的 TCP 端口及相关进程:
sudo ss -ltnp其中:
• -l:只显示监听状态
• -t:显示 TCP
• -n:用数字显示地址和端口
• -p:显示相关进程
查看 TCP 3000 端口的监听进程:
sudo ss -ltnp 'sport = :3000'需要查看 UDP 时,可以使用 sudo ss -lunp。sudo 有助于显示其他用户进程的信息。
也可以查看使用某个网络端口的进程:
sudo lsof -i :3000lsof 的结果还可能包含连接该端口的客户端进程,结束进程前应确认它是否就是目标服务。
3、测试网络连通性
ping ubuntu.com按 Ctrl + C 停止。
只发送四次:
ping -c 4 ubuntu.comping 测试的是 ICMP 连通性。目标或网络可能禁用 ICMP,因此没有响应不一定表示网页无法访问。
查看接口和 IP 地址:
ip addr以简洁形式查看:
ip -br addr查看路由:
ip route接口名可能是 enp3s0、wlp2s0 等,应以实际输出为准。
在使用 NetworkManager 的桌面或其他环境中,查看网络设备状态:
nmcli device status该命令依赖 NetworkManager,不能假定所有 Ubuntu 服务器都使用它。
4、网页请求、下载与 DNS
请求网页:
curl https://ubuntu.com使用 HEAD 请求查看响应头:
curl -I https://ubuntu.com跟随重定向并保存网页:
curl -L -o page.html https://ubuntu.com使用 wget 下载:
wget -O 文件名 "下载地址"使用系统解析服务查询域名:
resolvectl query ubuntu.com查看 DNS 配置与状态:
resolvectl statusresolvectl 依赖 systemd-resolved。也可以使用 dig 或 nslookup 查询 DNS;如果未安装,可以通过 apt 安装 dnsutils。
5、连接远程计算机
使用安全外壳协议(SSH)连接:
ssh 用户名@服务器地址指定端口:
ssh -p 2222 用户名@服务器地址远程计算机需要运行 SSH 服务,并允许相应用户登录。首次连接时,应核对服务器主机密钥指纹后再接受。
退出远程 shell:
exit七、系统信息、服务与日志
Ubuntu 通常使用 systemd 管理系统服务,使用 journalctl 查看相关日志。服务管理既要确认当前运行状态,也要区分是否设置了开机启动。
1、查看系统信息
查看发行版信息:
cat /etc/os-release查看内核版本:
uname -r查看更多内核和系统信息:
uname -aUbuntu 发行版版本与 Linux 内核版本是不同信息,应分别查看。
查看 CPU 信息:
lscpu查看内存和交换空间:
free -h判断是否缺少内存时,可以结合 available 列查看可供新应用使用的内存估计值,不能只看 free 列。
查看主机名、当前用户和运行时间:
uptime2、查看和管理服务
以下以已经安装的 nginx 服务为例。
查看状态:
systemctl status nginx如果进入分页显示,按 q 退出。
启动、停止和重启:
sudo systemctl restart nginx这些命令是不同操作,按实际需要选择一条执行。
设置开机启动:
sudo systemctl enable nginx取消开机启动:
sudo systemctl disable nginxenable 通常不会立即启动服务,disable 也不会立即停止正在运行的服务。设置开机启动并立即启动,可以使用:
sudo systemctl enable --now nginx服务名以实际安装的软件为准。容器或其他未运行 systemd 的环境可能无法使用这些管理命令。
3、查看系统和服务日志
查看当前启动以来的系统日志:
sudo journalctl -b查看指定服务最近 50 条日志:
sudo journalctl -u nginx -n 50 --no-pager持续查看该服务新增日志:
sudo journalctl -u nginx -f按 Ctrl + C 停止。-u 指定服务单元,-n 指定条数,-f 持续跟踪;sudo 用于读取需要权限的日志。
应用也可能把日志写入独立文件,应结合应用配置查找,不能假定所有日志都在系统日志中。
八、软件包管理与开发工具
Ubuntu 常用高级软件包工具(Advanced Package Tool,APT)管理 Debian 格式的软件包,也可以通过 Snap 安装和管理应用。两者管理的软件范围不同,更新时应分别处理。
1、更新软件包索引与安装软件
刷新可用软件包及版本信息:
sudo apt updateupdate 更新索引,不会直接升级已安装的软件。
安装一个软件包:
sudo apt install curl一次安装多个工具:
sudo apt install git wget nanoapt 会根据软件源和依赖关系安装所需软件包。确认提示中应检查将安装、升级或删除的项目。
2、查询、卸载与清理软件包
搜索软件包:
apt search python3查看软件包信息:
apt show curl列出已安装的软件包:
apt list --installed卸载软件包:
sudo apt remove wget卸载并清除软件包管理的配置文件:
sudo apt purge wgetpurge 不等于清除用户主目录中的全部应用数据和配置。
删除不再需要的自动安装依赖:
sudo apt autoremove执行前应检查拟删除的列表。
清理已下载的软件包缓存:
sudo apt cleanclean 清理下载缓存,不会卸载已经安装的软件。
3、安装本地 DEB 软件包
进入软件包所在目录后:
sudo apt install ./软件包文件名.deb./ 明确表示安装当前目录中的本地文件。apt 会尝试从已配置的软件源满足依赖;安装前应确认软件包来源可信,并适用于当前系统和处理器架构。
4、Snap 常用命令
查看已安装的 Snap:
snap list搜索和查看详情:
snap info vlc安装:
sudo snap install vlc手动更新:
sudo snap refresh卸载:
sudo snap remove vlcSnap 默认会自动检查并安装更新;snap refresh 也可用于手动触发更新。apt upgrade 不会升级通过 Snap 安装的应用。
5、安装常用开发工具
安装编译器与常用构建工具:
sudo apt install build-essential安装 Python 和虚拟环境支持:
sudo apt install python3 python3-venv查看版本:
git --version不同 Ubuntu 软件源中的工具版本可能不同。需要特定版本时,应查看该工具的安装说明;Python 项目通常适合在虚拟环境中管理第三方依赖。
九、系统更新与常见任务流程
把单条命令组合成流程时,应确认前一步已经成功,再继续后面的操作。
1、更新当前系统的软件包
sudo apt upgradeupdate 刷新索引,list --upgradable 列出可升级的软件包,upgrade 执行升级。
需要处理更复杂的依赖变化时,可以使用:
sudo apt full-upgradefull-upgrade 可能删除已有软件包以完成升级,应认真检查拟执行的变更。部分更新也可能因分阶段发布而暂时保留,不必仅为追求全部更新而强行改变设置。
这些操作更新当前发行版的软件包,不等于升级到下一个 Ubuntu 发行版。发行版升级需要单独规划和备份。
2、创建项目文件夹并打开
xdg-open .这会在主目录创建 demo-project,进入目录并创建 README.md,最后在桌面会话中用文件管理器打开它。
3、查找并查看日志文件
find . -type f -name "*.log"根据结果选择实际文件,例如当前目录中的 app.log:
tail -f app.log如果文件位于子目录,应把 app.log 替换为对应路径。
4、搜索项目中的关键词
grep -r -n "TODO" .如果只想搜索 Python 文件:
grep -r -n --include="*.py" "TODO" .5、统计目录占用并打包
tar -czf demo-project.tar.gz -C ~ demo-project压缩包会保存在当前目录中,归档中的顶层目录是 demo-project。
6、下载网页并保存
curl -L -o page.html https://ubuntu.com下载文件会保存在当前目录。-o 后也可以使用完整路径,指定保存位置。
7、排查服务无法启动
sudo ss -ltnp先查看服务状态和错误日志,再检查需要使用的端口是否被其他程序占用。如果问题来自配置或依赖,仅结束进程不能解决根本原因。
十、风险、习惯与安全使用原则
终端可以直接操作文件和系统设置。使用时应形成确认路径、理解权限和检查变更的习惯。
1、不要随意执行 rm -rf
rm -rf 会递归删除目标,通常不会放入回收站。执行前先确认:
ls尤其要注意绝对路径和通配符。/ 是整个系统的根目录,不是当前项目目录。
2、不要随意使用 sudo
sudo 默认以 root 身份执行命令,可以修改很多普通用户无权修改的文件和设置。不应为了消除错误提示而盲目加上 sudo。
尤其要谨慎对待递归删除、递归改权限和递归改所有者。chmod 777 也不应作为解决权限问题的通用方法,应先确认所有者、所属组和实际需要的权限。
3、注意大小写、空格与通配符
路径中的大小写应与实际名称一致,空格需要引号或转义。
删除 .tmp 文件前,可以先查找:
find . -type f -name "*.tmp"该命令查找当前目录及其子目录。确认范围后,再选择适当的删除操作,避免把递归查找范围和当前目录匹配范围混为一谈。
4、不要盲目执行网上复制的脚本
例如:
curl ... | sh这类命令会把下载内容直接交给 shell 执行。应确认来源可信,并了解脚本的作用。添加第三方软件源、安装 DEB 包或使用 sudo 运行脚本时,也应核对来源。
5、检查软件管理命令的变更列表
安装、升级、卸载和 autoremove 可能同时影响多个软件包。执行前应阅读提示,确认没有删除仍需要的工具或服务。
日常手动操作时,可以保留确认步骤,不必一律添加 -y 自动接受。
6、远程操作前确认连接对象
通过 SSH 操作时,命令作用于远程计算机。可以先查看:
pwd停止 SSH 服务、修改网络配置或重启远程系统,可能中断当前连接,应先确认操作对象和恢复连接的方法。
小结
Ubuntu 终端的核心,是理解路径、文件、权限、进程和系统工具的关系。掌握文件操作、文本搜索、软件包管理、网络检查及服务日志命令,可以完成日常管理和开发辅助任务。操作前确认目标、权限与变更范围,能让命令使用更准确可靠。
“点赞有美意,赞赏是鼓励”
热门跟贴