🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度
很多刚接触 Linux 的同学,面对黑乎乎的命令行窗口,常常感到无从下手。无论是想部署一个网站、管理服务器,还是进行软件开发,命令行都是绕不开的核心技能。网上的资料虽然多,但要么过于零散,要么直接甩出一张“命令大全”图,新手看了更懵。
本文旨在解决这个痛点,为你梳理出一条清晰的 Linux 命令学习路径。我们不追求面面俱到地罗列所有命令,而是聚焦于那些最核心、最高频、能让你快速上手并解决实际问题的命令。从文件操作、文本处理到系统管理和网络工具,每个命令都会配以清晰的场景示例和解释,确保你不仅能“照着敲”,更能理解“为什么这么敲”。无论你是零基础的初学者,还是想系统梳理命令的开发者,这篇文章都能帮你构建起坚实的 Linux 命令行操作基础。
1. 为什么必须学习 Linux 命令行?
在图形化界面(GUI)如此发达的今天,为什么我们还要学习看似“古老”的命令行界面(CLI)?这是很多初学者的第一个疑问。理解这一点,是学好命令行的第一步。
效率与自动化:命令行是效率的代名词。一个熟练的运维工程师或开发者,通过组合几个简单的命令,就能完成在图形界面下需要大量点击和等待的操作。例如,批量重命名上百个文件、快速过滤日志中的错误信息、一键部署应用等,在命令行下往往只需一行命令。更重要的是,这些命令可以写成脚本(Shell Script),实现复杂工作的完全自动化,这是 GUI 难以比拟的。
远程与服务器管理:几乎所有的服务器,尤其是云服务器,在初始状态下都没有图形界面。管理它们唯一高效、稳定的方式就是通过 SSH 远程登录后使用命令行。无论是配置网络、安装软件、监控性能还是排查故障,命令行都是你与服务器对话的“母语”。
深入理解系统:图形界面隐藏了系统的许多细节,而命令行则向你敞开了操作系统的大门。通过命令,你可以更直观地理解 Linux 的文件系统结构、进程管理、权限体系等核心概念。这种理解对于进行系统调优、深度排错和高级开发至关重要。
通用性与一致性:Linux 发行版众多(如 Ubuntu, CentOS, Debian 等),它们的图形界面可能差异很大,但核心的命令行工具和操作逻辑是高度一致的。掌握了命令行,你就具备了在不同 Linux 环境间无缝切换的能力。
因此,学习 Linux 命令行不是一种选择,而是进入后端开发、运维、云计算等领域的一项必备技能。它可能开始有些陡峭,但一旦掌握,你将获得前所未有的控制力和效率。
2. 学习环境准备:零成本上手实践
理论再多,不如动手一试。对于初学者,最友好的方式是在自己的电脑上搭建一个 Linux 实践环境,完全不用担心搞坏系统。这里推荐两种主流方案:
2.1 方案一:使用 Windows Subsystem for Linux (WSL2)
如果你的电脑是 Windows 10(版本 2004 及以上)或 Windows 11,WSL2 是目前最推荐的方式。它让你能在 Windows 内原生运行 Linux,性能接近虚拟机,且资源占用小,与 Windows 文件系统互通方便。
安装步骤简述:
启用 WSL 功能:以管理员身份打开 PowerShell 或命令提示符,运行:
wsl --install这个命令会默认安装 Ubuntu 发行版。如果需要其他版本,可以先运行
wsl --install -d <发行版名称>,例如wsl --install -d Debian。重启电脑:安装完成后,根据提示重启计算机。
初始化 Ubuntu:重启后,在开始菜单找到新安装的 Ubuntu 应用并启动。首次运行需要等待安装完成,并设置你的 Linux 用户名和密码(这个密码用于
sudo命令,请牢记)。
安装完成后,你就拥有了一个完整的 Linux 终端,可以开始所有命令练习。
2.2 方案二:使用虚拟机软件
如果你使用的是 macOS、旧版本 Windows 或不习惯 WSL,虚拟机是经典且功能全面的选择。
- 安装虚拟机软件:下载并安装 VirtualBox (免费)或 VMware Workstation Player (个人使用免费)。
- 获取 Linux 镜像:前往 Ubuntu 官网 下载最新的 LTS(长期支持)版本桌面版 ISO 文件。LTS 版本更稳定,适合学习。
- 创建并安装虚拟机:在虚拟机软件中新建一台虚拟机,分配适当的内存(建议至少 2GB)和硬盘空间(建议 20GB 以上),并选择刚才下载的 ISO 文件作为启动盘,按照图形化向导完成 Ubuntu 系统的安装。
2.3 环境验证
无论采用哪种方式,安装完成后,打开终端(Terminal),尝试输入你的第一个命令:
whoami这个命令会打印出当前登录的用户名。再输入:
pwd这个命令会显示你当前所在的目录路径。如果这两个命令都能正确执行并返回结果,恭喜你,你的 Linux 学习环境已经就绪!
3. 文件与目录操作核心命令
这是 Linux 命令行的基石,就像在 Windows 中你首先得学会打开“我的电脑”和创建文件夹一样。
3.1 导航与查看:pwd,ls,cd
pwd(Print Working Directory):显示当前所在的绝对路径。当你不知道自己“身在何处”时,就用它。pwd # 输出示例:/home/yourusernamels(List):列出当前目录下的文件和子目录。这是你使用频率最高的命令之一。ls # 简单列出 ls -l # 以长格式列出,显示详细信息(权限、所有者、大小、修改时间) ls -a # 列出所有文件,包括隐藏文件(以 . 开头的文件) ls -lh # -h 参数使文件大小以人类可读的方式显示(K, M, G),常与 -l 合用 ls /etc # 列出指定目录(如 /etc)下的内容cd(Change Directory):切换当前工作目录。cd /home # 切换到绝对路径 /home cd Documents # 切换到当前目录下的 Documents 子目录(相对路径) cd .. # 切换到上级目录 cd ~ # 切换到当前用户的家目录(/home/yourusername) cd - # 切换到上一个所在的目录
3.2 创建与删除:mkdir,touch,rm,rmdir
mkdir(Make Directory):创建新目录。mkdir my_project # 创建名为 my_project 的目录 mkdir -p parent/child # -p 参数可以递归创建多级目录,如果 parent 不存在也会一并创建touch:主要作用是创建一个新的空文件,或者更新一个已存在文件的时间戳。touch readme.txt # 创建一个名为 readme.txt 的空文件 touch file1 file2 file3 # 一次性创建多个文件rm(Remove):删除文件或目录。使用需谨慎!rm old_file.txt # 删除文件,系统会询问确认(如果设置了别名) rm -f old_file.txt # -f (force) 强制删除,不询问 rm -r my_directory # -r (recursive) 递归删除目录及其内部所有内容 rm -rf my_directory # 强制递归删除目录(非常危险!)警告:
rm -rf /或rm -rf /*会尝试删除根目录下的所有文件,可能导致系统崩溃。永远不要在生产环境或没有备份的情况下尝试!rmdir(Remove Directory):删除空目录。如果目录非空,此命令会失败。rmdir empty_dir
3.3 复制、移动与重命名:cp,mv
cp(Copy):复制文件或目录。cp source.txt dest.txt # 复制文件并重命名 cp source.txt /path/to/dest/ # 复制文件到指定目录,保持原名 cp -r source_dir/ dest_dir/ # -r 递归复制整个目录 cp -i source.txt dest.txt # -i 在覆盖前询问确认mv(Move):移动文件或目录,也可用于重命名。mv old_name.txt new_name.txt # 重命名文件 mv file.txt /target/directory/ # 移动文件到目标目录 mv dir1/ /target/path/ # 移动整个目录
3.4 查看文件内容:cat,less,head,tail
cat(Concatenate):连接并显示文件内容。适合查看小文件。cat config.yml cat file1.txt file2.txt # 依次显示多个文件的内容less:分页查看文件内容,适合查看大文件。可以上下翻页、搜索。less large_log_file.log进入
less后,常用操作键:空格键(向下翻页),b(向上翻页),/keyword(搜索关键词),q(退出)。head/tail:查看文件的开头或结尾部分。head -n 20 log.txt # 查看 log.txt 的前 20 行 tail -n 50 log.txt # 查看 log.txt 的最后 50 行 tail -f log.txt # -f (follow) 实时追踪文件新增内容,常用于监控日志
4. 文本处理与搜索命令
在 Linux 中,一切皆文件,而配置文件、日志、代码大多是文本文件。因此,处理文本的能力至关重要。
4.1 文本搜索:grep
grep是文本搜索的瑞士军刀,用于在文件或输入流中查找匹配特定模式(正则表达式)的行。
grep "error" app.log # 在 app.log 中查找包含 “error” 的行(区分大小写) grep -i "error" app.log # -i 忽略大小写 grep -r "TODO" ./src/ # -r 递归地在 ./src/ 目录下所有文件中搜索 “TODO” grep -n "panic" app.log # -n 显示匹配行所在的行号 grep -v "success" app.log # -v 反向选择,显示不包含 “success” 的行 grep -E "^[0-9]+" data.txt # -E 使用扩展正则表达式,匹配以数字开头的行4.2 流编辑器:sed
sed是一个强大的流编辑器,用于对文本进行过滤和转换。它特别擅长执行批量替换、删除、插入等操作。
# 将文件中的 “foo” 全部替换为 “bar”,并输出到屏幕 sed 's/foo/bar/g' input.txt # 直接修改原文件(-i 参数),将 “old” 替换为 “new” sed -i 's/old/new/g' file.txt # 删除文件中所有包含 “debug” 的行 sed '/debug/d' input.txt # 打印文件的第 10 到第 20 行 sed -n '10,20p' input.txt4.3 文本分析:awk
awk不仅仅是一个命令,它是一门功能强大的文本处理编程语言。它擅长处理结构化文本(如 CSV、日志),按列进行操作。
# 假设 data.txt 内容为(以空格或制表符分隔): # Alice 25 Engineer # Bob 30 Designer # 打印第一列(姓名) awk '{print $1}' data.txt # 输出: # Alice # Bob # 打印第二列和第三列 awk '{print $2, $3}' data.txt # 打印第二列大于 28 的行的全部内容 awk '$2 > 28 {print $0}' data.txt # 输出: # Bob 30 Designer # 使用特定分隔符(如逗号) awk -F',' '{print $1}' data.csv4.4 排序与去重:sort,uniq
sort:对文本行进行排序。sort names.txt # 默认按字母顺序升序排序 sort -n numbers.txt # -n 按数值大小排序 sort -r names.txt # -r 降序排序 sort -u names.txt # -u 排序并去重uniq:报告或忽略重复的行。注意:uniq通常需要与sort结合使用,因为它只检查相邻的重复行。sort names.txt | uniq # 先排序,再去重,得到唯一的列表 sort names.txt | uniq -c # -c 计数,显示每行重复的次数
5. 系统管理与进程命令
了解如何查看系统状态和管理运行中的程序,是运维和调试的基础。
5.1 进程管理:ps,top,kill
ps(Process Status):显示当前进程的快照。ps aux # 查看系统所有进程的详细信息(最常用) ps -ef # 另一种格式查看所有进程 ps aux | grep nginx # 结合 grep 查找特定进程(如 nginx)ps aux输出列解读:USER(用户), PID(进程ID), %CPU(CPU占用), %MEM(内存占用), COMMAND(命令)。top/htop:动态、实时地显示系统进程信息和资源占用情况。htop是top的增强版,界面更友好,支持鼠标操作(可能需要安装:sudo apt install htop)。top htop在
top界面中,按q退出,按k可以终止指定 PID 的进程。kill:向进程发送信号,用于终止或控制进程。kill 1234 # 向 PID 为 1234 的进程发送默认的 TERM (15) 信号,请求其终止 kill -9 1234 # -9 发送 KILL 信号,强制立即终止进程(万不得已时使用) kill -l # 列出所有可发送的信号
5.2 系统监控:df,du,free
df(Disk Free):报告文件系统的磁盘空间使用情况。df -h # -h 以人类可读的格式(G, M)显示关注
Use%列,避免磁盘被写满。du(Disk Usage):估算文件或目录的磁盘使用空间。du -sh /home/yourusername # -s 总计,-h 人类可读,查看家目录总大小 du -h --max-depth=1 . # 查看当前目录下一级子目录的大小free:显示内存使用情况。free -h # -h 人类可读格式关注
available列,它表示应用程序可用的内存。
5.3 系统信息:uname,who,uptime
uname -a # 打印所有系统信息(内核名称、版本、机器硬件等) who # 显示当前登录系统的用户 uptime # 显示系统运行时间、当前用户数、平均负载6. 权限与用户管理命令
Linux 是一个多用户系统,严格的权限管理是其安全性的基石。
6.1 理解文件权限
使用ls -l查看文件详细信息时,第一列就是权限信息,如-rwxr-xr--。
- 第一个字符:
-表示普通文件,d表示目录。 - 后面9个字符,每3个一组,分别代表所有者(u)、所属组(g)、其他用户(o)的权限。
- 每组中的
r(read/4)、w(write/2)、x(execute/1) 分别代表读、写、执行权限。
6.2 修改权限:chmod
chmod用于改变文件或目录的权限。
数字模式(最精确):
chmod 755 script.sh # 7(4+2+1)=rwx 所有者 # 5(4+0+1)=r-x 所属组 # 5(4+0+1)=r-x 其他用户 # 结果:-rwxr-xr-x chmod 644 config.txt # 6(4+2+0)=rw- 所有者 # 4(4+0+0)=r-- 所属组 # 4(4+0+0)=r-- 其他用户 # 结果:-rw-r--r--符号模式(更直观):
chmod u+x script.sh # 给所有者增加执行权限 chmod g-w file.txt # 从所属组移除写权限 chmod o=r file.txt # 设置其他用户权限仅为读 chmod a+x script.sh # a (all) 给所有用户增加执行权限6.3 修改所有者和所属组:chown,chgrp
chown(Change Owner):sudo chown newuser file.txt # 将文件所有者改为 newuser sudo chown newuser:newgroup file.txt # 同时改变所有者和所属组 sudo chown -R user:group directory/ # -R 递归修改目录下所有文件注意:通常需要
sudo权限才能执行。chgrp(Change Group):sudo chgrp developers project/ # 将 project 目录的所属组改为 developers
6.4 用户与组管理(需sudo)
useradd/adduser:创建新用户。adduser是交互式命令,更友好。sudo adduser alicepasswd:修改用户密码。passwd # 修改当前用户自己的密码 sudo passwd alice # root 用户修改 alice 的密码usermod:修改用户属性,如将其加入某个组。sudo usermod -aG sudo alice # -aG 将 alice 追加到 sudo 组(赋予管理员权限)groupadd:创建新用户组。sudo groupadd developers
7. 网络与包管理命令
7.1 网络诊断:ping,curl,wget,netstat,ss
ping:测试与目标主机的网络连通性。ping -c 4 google.com # -c 指定发送数据包的次数curl:一个强大的命令行工具,用于传输数据(支持 HTTP, HTTPS, FTP 等)。常用于测试 API、下载文件。curl https://api.example.com/data # 获取 API 数据 curl -O https://example.com/file.zip # -O 下载文件并以远程文件名保存 curl -I https://example.com # -I 仅获取 HTTP 头部信息wget:另一个常用的非交互式网络下载器。wget https://example.com/largefile.iso wget -c https://example.com/bigfile.zip # -c 支持断点续传netstat/ss:查看网络连接、路由表、接口统计等信息。ss是更现代、更快的替代品。netstat -tulpn # 查看所有监听端口及相关进程(旧系统) ss -tulpn # 功能同上,但更快(推荐) # -t TCP, -u UDP, -l 监听状态, -p 显示进程, -n 以数字形式显示
7.2 包管理命令
不同的 Linux 发行版使用不同的包管理工具。这里以最流行的Debian/Ubuntu (APT)和CentOS/RHEL/Fedora (YUM/DNF)为例。
APT (Ubuntu/Debian):
sudo apt update # 更新软件包源列表(必须首先执行) sudo apt upgrade # 升级所有已安装的软件包 sudo apt install nginx # 安装软件包(如 nginx) sudo apt remove nginx # 移除软件包(保留配置文件) sudo apt purge nginx # 彻底移除软件包(包括配置文件) sudo apt search keyword # 搜索软件包 apt list --installed # 列出所有已安装的包YUM/DNF (CentOS/RHEL/Fedora):
sudo yum check-update # 检查可更新的包(YUM) sudo dnf check-update # DNF 同上 sudo yum install nginx # 安装 sudo dnf install nginx sudo yum remove nginx # 移除 sudo yum search keyword # 搜索 sudo yum list installed # 列出已安装 # DNF 命令与 YUM 基本一致,将 yum 替换为 dnf 即可。DNF 是 YUM 的下一代版本。8. 综合实战:一个完整的场景演练
让我们通过一个模拟的运维/开发场景,将多个命令串联起来使用。
场景:你收到告警,服务器/var分区磁盘使用率超过 90%。你需要登录服务器,找到占用空间最大的文件或目录,并清理不必要的日志文件。
操作步骤:
登录并检查磁盘状态:
ssh youruser@yourserver.com # 远程登录服务器 df -h # 确认磁盘使用情况,找到使用率高的分区(如 /var)定位大文件/目录:
cd /var # 切换到问题分区 sudo du -sh * | sort -rh | head -10 # 找出 /var 下最大的10个目录/文件 # 命令分解: # du -sh * : 计算 /var 下每个条目的大小 # sort -rh : -r 反向排序(从大到小),-h 识别人类可读的大小 # head -10 : 取前10行假设发现
/var/log目录异常巨大。深入分析日志目录:
cd /var/log sudo ls -lhS | head -20 # -S 按文件大小排序,查看最大的文件清理旧日志(以 journal 日志为例):
# 查看 systemd 日志占用的空间 sudo journalctl --disk-usage # 清理早于3天的日志 sudo journalctl --vacuum-time=3d # 或者限制日志总大小不超过 500M # sudo journalctl --vacuum-size=500M清理其他应用日志(谨慎操作!):
# 假设发现一个巨大的 nginx 访问日志 access.log # 方案A:清空文件(如果日志文件已滚动或不需要历史内容) sudo truncate -s 0 /var/log/nginx/access.log # 方案B:删除7天前的日志文件(更安全,结合 find 命令) sudo find /var/log/nginx -name "*.log" -type f -mtime +7 -delete # 解释:在 /var/log/nginx 下,查找所有 .log 结尾的普通文件,修改时间在7天前的,删除。再次确认磁盘空间:
df -h /var观察
Use%是否下降。(可选)设置日志轮转:为了防止问题复发,应该配置日志轮转工具
logrotate。编辑配置文件:sudo vim /etc/logrotate.d/nginx-custom添加类似内容:
/var/log/nginx/*.log { daily # 每天轮转 missingok # 如果日志文件丢失,不报错 rotate 30 # 保留30个归档日志 compress # 压缩旧日志 delaycompress # 延迟一天压缩 notifempty # 如果日志为空,不轮转 create 0640 www-data adm # 创建新日志文件的权限和所有者 sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript }
通过这个完整的场景,你不仅复习了df,du,sort,find,ls等命令,还学习了journalctl和logrotate等实用的系统管理工具,并理解了命令组合 (|管道符) 的强大威力。
9. 命令组合与管道:发挥 Shell 的真正威力
Linux 命令的强大之处在于它们可以通过管道符|和重定向符>,>>,<组合在一起,完成复杂任务。
管道
|:将一个命令的输出作为另一个命令的输入。# 查找当前目录下所有 .txt 文件,并统计行数 find . -name "*.txt" | xargs wc -l # 查看占用 8080 端口的进程 sudo lsof -i :8080 | grep LISTEN输出重定向
>和>>:>将输出重定向到文件(覆盖),>>是追加。ls -la > filelist.txt # 将 ls 结果保存到文件,覆盖原内容 echo "new line" >> log.txt # 向文件末尾追加一行文本输入重定向
<:将文件内容作为命令的输入。sort < unsorted_list.txt > sorted_list.txt # 从文件读取,排序后输出到另一文件组合示例:一个经典的组合是
grep,sort,uniq,head。# 分析日志,找出访问量最高的前5个IP地址 cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -5 # 分解: # 1. cat 读取日志 # 2. awk 提取第一列(IP地址) # 3. sort 排序,为 uniq 做准备 # 4. uniq -c 统计每个IP出现的次数 # 5. sort -nr 按次数倒序排序 # 6. head -5 取前5行
10. 学习建议与资源推荐
- 动手,动手,再动手:不要只看,一定要在终端里敲下每一个命令,观察输出,尝试修改参数。
- 善用
--help和man:遇到不熟悉的命令,第一时间command --help查看简要帮助,或man command查看详细手册。man手册是终极权威。 - 理解错误信息:命令出错时,仔细阅读终端给出的错误信息,它通常指明了问题所在。
- 循序渐进:先从最基础的
ls,cd,pwd,cat开始,熟练后再学习文本处理和系统管理命令。 - 编写 Shell 脚本:当你需要重复执行一系列命令时,就是学习 Shell 脚本 (
bash scripting) 的好时机。从一个简单的备份脚本开始。
常用资源:
- 本地手册:
man command,tldr command(tldr是一个更简洁的命令示例工具,需要安装)。 - 在线查询:像“菜鸟教程”这样的网站提供了很好的命令速查和示例。
- 社区:遇到具体问题,可以在 Stack Overflow、相关技术论坛或社区搜索,通常都能找到答案。
Linux 命令行的学习是一个持续的过程,每天解决一个实际问题,你就能快速积累经验。记住,强大的能力来自于对基础工具的熟练组合与运用。
🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度