终端快捷键
-
ctrl + c 强制停止
-
ctrl + d 退出登出
-
history 查看历史命令
-
!命令前缀,自动匹配上一个命令
-
ctrl + r,搜索历史命令
-
ctrl + a | e,光标移动到命令开始或结束
-
ctrl + ← | →,左右跳单词
-
ctrl + l 或 clear命令 清屏
apt
在 Linux 系统中,apt(全称 Advanced Package Tool)是一套用于包管理的命令行工具,主要用于基于 Debian 的 Linux 发行版(如 Ubuntu、Debian、Linux Mint 等),用于便捷地安装、卸载、更新软件包,并自动处理软件包之间的依赖关系。
apt是在底层工具dpkg(Debian Package)之上的 "高层工具",它简化了软件包的管理流程:
dpkg负责实际安装 / 卸载.deb格式的软件包,但无法自动处理依赖关系;apt则整合了依赖分析、远程仓库同步、包缓存管理等功能,让用户无需手动处理复杂的依赖问题。
常用apt命令
以下是最常用的apt命令(大部分需要root权限,需前缀sudo):
1. 更新软件包列表(必做)
从配置的软件源(仓库)中获取最新的软件包信息(版本、依赖等),不实际更新软件:
sudo apt update
2. 升级已安装的软件
-
普通升级:升级所有可更新的软件包,不删除已有包,不处理 "需要移除旧包才能升级" 的情况:
sudo apt upgrade -
全面升级:会智能处理依赖关系,可能移除旧包以完成升级(适合系统大版本更新):
sudo apt full-upgrade
3. 安装软件包
安装指定的软件包(可同时安装多个,用空格分隔):
sudo apt install <软件包名1> <软件包名2> ...
如果需要安装特定版本的软件包,可指定版本号:
sudo apt install <软件包名>=<版本号>
4. 卸载软件包
-
保留配置文件:仅卸载软件,保留其配置文件(方便后续重新安装时复用配置):
sudo apt remove <软件包名> -
彻底删除:卸载软件并删除所有配置文件:
sudo apt purge <软件包名>
5. 清理无用依赖和缓存
-
删除无用依赖:自动移除 "已卸载软件的残留依赖"(这些依赖已无实际作用):
sudo apt autoremove -
清理缓存 :
apt会缓存下载的.deb包,清理可释放磁盘空间:sudo apt clean:删除所有缓存的.deb包;sudo apt autoclean:仅删除 "过时的缓存包"(保留最新版本的缓存)。
6. 搜索软件包
根据关键词搜索可用的软件包(包括名称和描述):
apt search <关键词>
例如,搜索与 "文本编辑器" 相关的包:
apt search text editor
7. 查看软件包信息
显示指定软件包的详细信息(版本、依赖、描述、安装大小等):
apt show <软件包名>
8. 列出已安装 / 可升级的包
-
列出所有已安装的软件包:
apt list --installed -
列出所有可升级的软件包:
apt list --upgradeable
systemctl
systemctl 是 systemd 系统和服务管理器的核心命令行工具,用于管理 Linux 系统中的服务(后台进程)、系统状态(如开机、关机、重启)、运行级别(target)等。
核心作用
systemd 是 Linux 系统的初始化系统(init),负责启动系统进程、管理服务生命周期、处理系统事件(如开机、关机)等;而 systemctl 是操作 systemd 的命令行接口,通过它可以:
- 启动、停止、重启、重载系统服务(如
nginx、ssh、mysql等); - 设置服务是否开机自启;
- 查看服务运行状态、日志;
- 控制系统状态(关机、重启、休眠等);
- 管理系统运行级别(通过
target机制)。
一、管理服务状态
服务(service)是系统中运行的后台进程(如 sshd、nginx),通过 systemctl 可直接控制其生命周期。
| 命令 | 作用 | 示例(以 nginx 服务为例) |
|---|---|---|
sudo systemctl start <服务名> |
启动指定服务 | sudo systemctl start nginx |
sudo systemctl stop <服务名> |
停止指定服务 | sudo systemctl stop nginx |
sudo systemctl restart <服务名> |
重启指定服务(先停止再启动) | sudo systemctl restart nginx |
sudo systemctl reload <服务名> |
重载服务配置(不中断服务,推荐) | sudo systemctl reload nginx |
sudo systemctl status <服务名> |
查看服务详细状态(运行 / 停止、日志等) | sudo systemctl status nginx |
二、设置服务开机自启
控制服务是否在系统开机时自动启动。
| 命令 | 作用 | 示例 |
|---|---|---|
sudo systemctl enable <服务名> |
启用服务开机自启 | sudo systemctl enable nginx |
sudo systemctl disable <服务名> |
禁用服务开机自启(开机不启动) | sudo systemctl disable nginx |
sudo systemctl is-enabled <服务名> |
查看服务是否已设置开机自启 | sudo systemctl is-enabled nginx |
三、查看服务列表
查看系统中所有服务的状态或安装情况。
| 命令 | 作用 |
|---|---|
systemctl list-units --type=service |
列出当前已加载的所有服务(含状态) |
systemctl list-unit-files --type=service |
列出系统中所有已安装的服务(含开机自启状态) |
systemctl list-units --type=service --state=running |
只列出正在运行的服务 |
四、管理系统状态
| 命令 | 作用 |
|---|---|
sudo systemctl reboot |
重启系统 |
sudo systemctl poweroff |
关闭系统 |
sudo systemctl halt |
停止系统(类似关机,但不切断电源) |
sudo systemctl suspend |
挂起系统(休眠到内存,快速恢复) |
sudo systemctl hibernate |
休眠系统(数据写入硬盘,省电) |
sudo systemctl rescue |
进入救援模式(修复系统时用) |
sudo systemctl emergency |
进入紧急模式(最小化系统,仅基础功能) |
五、管理运行级别
systemd 用 target 替代了传统的运行级别,每个 target 是一组服务的集合。
| 命令 | 作用 |
|---|---|
systemctl get-default |
查看当前默认的 target(启动级别) |
sudo systemctl set-default <target名> |
设置默认 target(如设置开机进入命令行) |
sudo systemctl isolate <target名> |
立即切换到指定 target(临时生效) |
常见 target:
multi-user.target:多用户命令行模式;graphical.target:图形界面模式;poweroff.target:关机状态;reboot.target:重启状态。
六、其他实用命令
- 查看服务的依赖关系:
systemctl list-dependencies <服务名> - 屏蔽服务(禁止手动 / 自动启动,比
disable更严格):sudo systemctl mask <服务名> - 取消屏蔽服务:
sudo systemctl unmask <服务名>
软连接
在 Linux 系统中,软连接(Soft Link,也叫符号链接,Symbolic Link)是一种特殊的文件,类似于 Windows 中的 "快捷方式",用于指向另一个文件或目录。它本身不存储实际数据,只记录目标文件 / 目录的路径,通过它可以间接访问目标资源。
软连接的特点
- 依赖路径:软连接本质是 "路径指针",它存储的是目标文件 / 目录的路径(绝对路径或相对路径),访问软连接时会自动跳转到该路径。
- 独立文件 :软连接是一个独立的文件,有自己的 inode(文件系统中的唯一标识)和权限(通常默认是
lrwxrwxrwx,权限对访问目标文件无影响,目标文件的权限才起作用)。 - 可跨文件系统:可以指向不同分区、不同磁盘的文件 / 目录(硬链接不行)。
- 目标删除后失效 :如果原目标文件 / 目录被删除,软连接会变成 "无效链接"(用
ls -l查看时会显示红色或闪烁),访问时会提示 "No such file or directory"。 - 可指向目录:软连接可以指向文件,也可以指向目录(硬链接在多数 Linux 系统中不支持指向目录)。
如何创建软连接?
使用 ln 命令(link 的缩写),加上 -s 选项(s 即 symbolic),语法:
ln -s <源文件/目录的路径> <软连接的路径>
示例 1:给文件创建软连接
假设当前目录有一个文件 document.txt,想在桌面创建一个软连接快速访问它:
# 源文件路径:/home/user/docs/document.txt
# 软连接路径:/home/user/Desktop/doc_link
ln -s /home/user/docs/document.txt /home/user/Desktop/doc_link
此时,访问 ~/Desktop/doc_link 就等同于访问 ~/docs/document.txt。
示例 2:给目录创建软连接
假设系统中有一个很深的目录 /var/www/html/project,想在当前目录创建一个软连接 myproject 指向它:
ln -s /var/www/html/project myproject
之后,cd myproject 就会进入 /var/www/html/project 目录。
如何查看软连接?
用 ls -l 命令可以查看文件 / 目录的详细信息,软连接会显示为:
lrwxrwxrwx 1 user user 24 11月 6 10:00 doc_link -> /home/user/docs/document.txt
- 开头的
l表示这是一个软连接(link); - 末尾的
->后面是它指向的目标路径。
如何删除软连接?
直接用 rm 命令删除软连接文件即可,注意不要加 /(否则可能误删目标目录下的内容):
# 删除文件软连接
rm doc_link
# 删除目录软连接(同样不加/)
rm myproject
网络传输
ping:测试网络连通性
作用:通过向目标主机发送 ICMP 数据包并接收响应,判断目标主机是否可达、网络延迟等。
语法:
ping [选项] 目标主机(IP地址或域名)
常用选项:
-c <次数>:指定发送测试包的次数(默认会持续发送,直到按Ctrl+C终止)。-s <字节数>:指定发送的数据包大小(默认 56 字节,加上头部共 64 字节)。-i <间隔秒数>:指定发送数据包的间隔时间(默认 1 秒,root 用户可设小于 1 秒的值)。-W <超时秒数>:指定等待响应的超时时间(默认 2 秒)。
示例:
# 测试与百度的连通性,发送 4 个数据包
ping -c 4 www.baidu.com
# 向 192.168.1.1 发送 3 个数据包,每个包大小 100 字节,间隔 2 秒
ping -c 3 -s 100 -i 2 192.168.1.1
wget:网络文件下载工具
作用:非交互式地从网络(支持 HTTP、HTTPS、FTP 等协议)下载文件,适合在命令行或脚本中使用。
语法:
wget [选项] 下载链接(URL)
常用选项:
-b:后台下载(程序转入后台运行,输出日志到当前目录的wget-log文件)。-O <文件名>:指定下载文件的本地保存名称(默认使用远程文件原名)。-P <目录>:指定文件保存的目录(默认保存到当前目录)。-c:断点续传(如果下载中断,再次运行可从断点继续,避免重复下载)。-r:递归下载(用于下载整个网站目录,慎用,可能导致大量文件)。
示例:
# 后台下载一个安装包,日志保存到 wget-log
wget -b https://example.com/software.tar.gz
# 下载文件并指定保存到 /tmp 目录,命名为 app.tar.gz
wget -P /tmp -O app.tar.gz https://example.com/software.tar.gz
# 断点续传之前未下载完的文件
wget -c https://example.com/large_file.iso
curl:多功能网络请求工具
作用 :发起 HTTP/HTTPS/FTP 等网络请求,可用于下载文件、提交表单、测试 API 等(功能比 wget 更灵活)。
语法:
curl [选项] URL
常用选项:
-O:下载文件,保存为远程服务器上的文件名(与远程文件名一致)。-o <文件名>:下载文件,并指定本地保存的文件名(自定义名称)。-X <方法>:指定 HTTP 请求方法(如 GET、POST、PUT、DELETE 等,默认 GET)。-d <数据>:发送 POST 数据(如表单提交,curl -X POST -d "name=test" http://example.com)。-H <头部>:添加 HTTP 请求头(如curl -H "Content-Type: application/json" http://example.com)。-L:跟随 HTTP 重定向(如果目标 URL 跳转,自动跟随新地址)。-I:只获取目标 URL 的响应头(不下载内容,用于查看状态码、服务器信息等)。
示例:
# 用 -O 下载文件,保存为远程文件名(如 remote_file.zip)
curl -O https://example.com/remote_file.zip
# 用 -o 下载文件并命名为 local_file.zip
curl -o local_file.zip https://example.com/remote_file.zip
# 发送 POST 请求,提交表单数据
curl -X POST -d "username=admin&password=123" https://example.com/login
# 查看目标 URL 的响应头(如状态码、服务器类型)
curl -I https://www.baidu.com
ping:专注于网络连通性测试,核心是判断目标是否可达。wget:专注于文件下载,支持后台、断点续传,适合批量或后台下载场景。curl:功能更全面的网络请求工具,不仅能下载,还能模拟各种 HTTP 请求(适合 API 测试、数据提交等)。
端口
在计算机网络中,端口(Port) 是用于区分同一台设备上不同网络服务的 "逻辑通道"。它本质上是一个 16 位的数字(范围 0-65535),用于标识网络通信中发送方或接收方的具体服务 / 进程。
为什么需要端口?
一台服务器(或电脑)可能同时运行多个网络服务(比如 Web 服务、SSH 远程服务、邮件服务等)。当外部设备(如客户端)向这台服务器发送数据时,仅通过 IP 地址只能定位到服务器本身,而端口则用于指定数据应该交给服务器上的哪个服务处理。
例如:
- 你用浏览器访问
www.baidu.com时,数据会发送到百度服务器的80 端口(HTTP 服务默认端口); - 用
ssh远程登录服务器时,数据会发送到服务器的22 端口(SSH 服务默认端口)。
端口的分类(按编号范围)
端口编号范围是 0-65535(共 2¹⁶=65536 个),按用途分为三类:
-
**知名端口(Well-Known Ports)**编号:0-1023用途:预留给系统级或常用服务,由 IANA(互联网号码分配机构)统一分配,一般固定对应特定服务。常见例子:
- 20/21:FTP(文件传输协议,20 数据端口,21 控制端口)
- 22:SSH(远程登录)
- 80:HTTP(超文本传输协议,网页服务)
- 443:HTTPS(加密的 HTTP,安全网页服务)
- 53:DNS(域名解析服务)
- 3306:MySQL 数据库服务
- 6379:Redis 缓存服务
-
**注册端口(Registered Ports)**编号:1024-49151用途:由 IANA 注册给特定的应用程序或服务,用于非系统级的服务,避免端口冲突。常见例子:
- 8080:常用的 HTTP 替代端口(如开发环境的 Web 服务)
- 3389:Windows 远程桌面服务(RDP)
-
动态 / 私有端口(Dynamic/Private Ports) 编号:49152-65535用途:不固定分配给任何服务,主要用于客户端临时发起连接时随机使用 (客户端端口)。例如:你的电脑浏览器访问
www.baidu.com:80时,浏览器会随机从这个范围选一个端口作为 "源端口",与百度服务器的 80 端口(目标端口)建立连接。
端口的状态
在服务器中,端口的状态反映了它的通信状态,常用工具(如ss、netstat)查看时会显示:
- LISTEN :端口处于 "监听" 状态,服务已启动并等待客户端连接(如
nginx启动后,80 端口会显示 LISTEN)。 - ESTABLISHED:已与客户端建立连接(如浏览器成功访问网页后,服务器端对应端口会显示此状态)。
- TIME_WAIT:连接已关闭,处于等待状态(确保数据传输完成)。
- CLOSED:端口未被任何服务占用,处于关闭状态。
查看端口的常用命令(Linux)
ss
-
查看所有监听的 TCP/UDP 端口:
ss -tuln # -t: TCP, -u: UDP, -l: 监听状态, -n: 显示端口号(不解析服务名) -
查看指定端口(如 80)的占用情况:
ss -tuln | grep 80
端口与防火墙
服务器的端口是否能被外部访问,还受防火墙控制。即使服务监听了某个端口,若防火墙未开放该端口,外部也无法连接。
例如,在 Linux 中开放 80 端口(允许外部访问 HTTP 服务):
-
用
firewalld:sudo firewall-cmd --add-port=80/tcp --permanent # 永久开放80端口(TCP) sudo firewall-cmd --reload # 重载配置 -
用
iptables:sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许外部访问80端口(TCP)
环境变量
环境变量(Environment Variable) 是一种存储系统或应用程序配置信息的 "键值对" 变量,用于在不同程序之间传递共享信息。它相当于系统的 "全局参数",程序启动时会自动读取这些变量,从而获取运行所需的配置(如路径、语言、临时目录等)。
环境变量的核心特点
- 键值对形式 :每个环境变量由 "变量名 = 值" 组成(例如
PATH=/usr/bin)。 - 全局可见性:在当前会话或系统中,所有运行的程序都能访问环境变量(除非被限制)。
- 动态性:可以随时修改,修改后新启动的程序会使用新值(已有程序可能需要重启才生效)。
- 大小写敏感 :在 Linux/macOS 中区分大小写(如
PATH和path是两个不同变量),Windows 中不敏感。
Linux 中常见的环境变量
系统预设了许多环境变量,用于控制基础功能,以下是最常用的几个:
| 环境变量 | 作用 |
|---|---|
PATH |
程序搜索路径:系统执行命令时(如 ls、python),会从 PATH 包含的目录中查找可执行文件。 |
HOME |
当前用户的主目录路径(如 /home/ubuntu 或 ~)。 |
USER |
当前登录的用户名(如 root、user1)。 |
PWD |
当前工作目录的绝对路径(等同于 pwd 命令的输出)。 |
LANG |
系统默认语言和编码(如 zh_CN.UTF-8 表示中文 UTF-8 编码)。 |
TEMP/TMP |
临时文件存储目录(通常是 /tmp)。 |
SHELL |
当前使用的 shell 程序路径(如 /bin/bash、/bin/zsh)。 |
如何操作环境变量(Linux 命令行)
- 查看环境变量
-
查看单个变量 :用
echo $变量名($是变量引用符号):echo $PATH # 查看程序搜索路径 echo $HOME # 查看当前用户主目录 -
查看所有环境变量:
env:列出所有环境变量(简洁输出)。printenv:功能同env,支持指定单个变量(如printenv PATH)。set:除环境变量外,还会列出当前 shell 的本地变量(更详细)。
- 设置 / 修改环境变量
环境变量的生效范围分为 "临时生效" 和 "永久生效":
(1)临时生效(仅当前 shell 会话有效)
用 export 命令定义或修改,关闭终端后失效:
# 定义一个新的环境变量(例如 MY_APP_PATH)
export MY_APP_PATH="/opt/myapp"
# 修改已有变量(例如在 PATH 中添加新目录)
export PATH="$PATH:/opt/newbin" # 保留原有 PATH 内容,追加新目录
(2)永久生效(重启后仍有效)
需将变量定义写入 shell 的配置文件,根据适用范围分为 "用户级" 和 "系统级":
-
用户级 :仅对当前用户生效,配置文件在用户主目录(
~):- bash shell:
~/.bashrc或~/.bash_profile(推荐~/.bashrc)。 - zsh shell:
~/.zshrc。
示例:在
~/.bashrc中添加变量# 编辑配置文件 vim ~/.bashrc # 在文件末尾添加(例如设置自定义路径) export MY_VAR="hello" export PATH="$PATH:/home/user/bin" # 保存后,让配置立即生效(无需重启) source ~/.bashrc # 或 . ~/.bashrc - bash shell:
-
系统级 :对所有用户生效,配置文件为系统级路径(需
root权限):/etc/profile:所有 shell 的全局配置(登录时加载)。/etc/environment:纯环境变量配置(不执行命令,仅定义KEY=VALUE)。
示例:修改
/etc/profile(谨慎操作,影响所有用户)sudo vim /etc/profile # 添加变量(例如系统级路径) export SYSTEM_PATH="/usr/local/common" # 生效 source /etc/profile
- 删除环境变量
用 unset 命令删除已定义的环境变量(临时删除,重启或重新加载配置后可能恢复):
unset MY_VAR # 删除 MY_VAR 变量
环境变量的典型用途
- 控制程序路径 :
PATH变量让系统无需输入完整路径即可执行命令(例如直接输入python而非/usr/bin/python)。 - 配置应用参数 :许多程序通过环境变量读取配置(如
JAVA_HOME指定 Java 安装目录,NODE_ENV控制 Node.js 运行环境)。 - 临时切换设置 :例如临时修改
LANG=en_US.UTF-8切换系统语言,无需修改永久配置。 - 脚本传参:在 shell 脚本中,环境变量可作为全局参数传递给多个命令或子脚本。
压缩格式及特点
| 格式 | 特点 | 典型文件后缀 |
|---|---|---|
tar |
仅归档(将多个文件 / 目录打包成一个文件,不压缩体积),速度快。 | .tar |
tar+gzip |
tar归档后用gzip压缩(兼具归档和压缩功能,压缩率较高),Linux 最常用。 |
.tar.gz 或 .tgz |
zip |
同时支持归档和压缩,跨平台(Windows/Linux/macOS 通用),压缩率中等。 | .zip |
tar 命令(处理 .tar 和 .tar.gz 格式)
tar 是 Linux 中最常用的归档工具,本身仅打包不压缩,结合 -z 选项可调用 gzip 进行压缩,生成 .tar.gz 格式(压缩后的归档文件)。
核心选项(你提到的关键参数):
-c:创建归档 / 压缩文件(打包模式)。-x:解压归档 / 压缩文件(解压模式)。-v:显示过程(verbose,显示打包 / 解压的文件列表,方便查看进度)。-f:指定文件 (后跟文件名,必须放在选项组的最后,否则会报错)。-z:启用 gzip 压缩 (处理.tar.gz格式,需放在选项组开头)。-C:指定解压路径(单独使用,解压时将文件放到指定目录,不指定则解压到当前目录)。
常用场景示例:
- 创建归档 / 压缩文件(
-c模式)
-
仅归档(不压缩) :将文件 / 目录打包成
.tar# 将 file1.txt、dir1 打包成 archive.tar(不压缩) tar -cvf archive.tar file1.txt dir1 # 说明:-c(创建)、-v(显示过程)、-f(指定文件 archive.tar) -
归档并压缩(gzip) :生成
.tar.gz(最常用)# 将 file2.txt、dir2 打包并压缩成 archive.tar.gz tar -zcvf archive.tar.gz file2.txt dir2 # 说明:-z(gzip压缩)、-c(创建)、-v(显示过程)、-f(指定文件,必须在最后)
- 解压文件(
-x模式)
-
解压到当前目录:
# 解压 .tar 文件 tar -xvf archive.tar # 解压 .tar.gz 文件(需加 -z) tar -zxvf archive.tar.gz -
解压到指定目录(
-C):# 将 archive.tar.gz 解压到 /tmp 目录 tar -zxvf archive.tar.gz -C /tmp # 说明:-C 后跟目标路径,必须在文件名之后单独使用
zip 命令(处理 .zip 格式)
zip 是跨平台的压缩工具,可同时打包和压缩文件 / 目录,生成的 .zip 文件在 Windows 中也能直接解压。
核心选项(你提到的 -r):
-r:递归压缩目录(压缩文件夹时必须加,否则只会压缩目录本身,不包含子文件 / 子目录)。
常用场景示例:
-
压缩单个文件:
# 将 file.txt 压缩成 file.zip zip file.zip file.txt -
压缩目录(必须加
-r):# 将 dir3 及其子内容压缩成 dir3.zip zip -r dir3.zip dir3 -
压缩多个文件 / 目录:
# 同时压缩 file.txt 和 dir3 到 all.zip zip -r all.zip file.txt dir3
unzip 命令(解压 .zip 格式)
unzip 用于解压 .zip 文件,配合 -d 选项可指定解压路径。
核心选项(你提到的 -d):
-d:指定解压目录(不指定则解压到当前目录)。
常用场景示例:
-
解压到当前目录:
# 解压 dir3.zip 到当前目录 unzip dir3.zip -
解压到指定目录(
-d):# 将 all.zip 解压到 /home/user/docs 目录 unzip all.zip -d /home/user/docs -
查看压缩包内容(不解压):
# 查看 all.zip 里的文件列表 unzip -l all.zip
总结
| 需求场景 | 推荐命令 | 示例 |
|---|---|---|
| Linux 内归档 + 压缩(常用) | tar -zcvf 压缩包名.tar.gz 源文件/目录 |
tar -zcvf data.tar.gz data/ |
解压 .tar.gz 到指定目录 |
tar -zxvf 压缩包名.tar.gz -C 目标路径 |
tar -zxvf data.tar.gz -C /tmp |
| 跨平台压缩(含 Windows) | zip -r 压缩包名.zip 源文件/目录 |
zip -r docs.zip documents/ |
解压 .zip 到指定目录 |
unzip 压缩包名.zip -d 目标路径 |
unzip docs.zip -d /home/user |