
很多新手学 Linux第一反应是去背命令。背了三天 ls、cd、mkdir打开终端还是一脸懵。这篇文章不按“命令字典”的方式教你而是从“为什么要用命令行”讲起把 Linux 命令行的学习路径拆成一条可执行的路线。在开始之前先给出判断Linux 命令行不是背诵的是用熟的。你不需要记住几百条命令你只需要掌握一套核心命令体系然后在一个真实环境里反复操作。这篇文章覆盖环境搭建、文件操作、文本处理、用户权限、网络管理和系统监控附带中英双语对照和大量可直接复制的示例目标是让你看完就能上手而不是看完就收藏。1. 这篇文章真正要解决的问题先聊一个现象很多刚接触 Linux 的人会被两个问题卡住。第一个问题是“不知道从哪里开始”。网上搜 Linux 教程出来的要么是几百条命令的清单要么是厚重的系统管理手册看完更焦虑了。第二个问题是“装了 Linux 虚拟机却不知道怎么用”。系统装好了桌面环境也正常但是一查资料、一搜教程发现真正有用的操作全在终端里桌面对你几乎没有任何帮助。这篇文章要解决的就是这两个问题。它会告诉你命令行不是 Linux 的附属功能而是 Linux 的核心操作方式。你不需要把整个 Linux 系统管理知识全部学完才能上手你只需要先跑通一套最小循环打开终端、执行命令、查看结果、理解输出。当这个循环能转起来后面所有的高级主题——Shell 脚本、网络配置、服务部署、容器运维——都是在这个循环上叠加。根据我的经验以下读者最应该在今天就开始学 Linux 命令行准备进入运维岗位的新人面试和日常工作都会直接操作服务器做后端开发、云计算、大数据相关工作的程序员本地开发和线上部署都需要 Linux 环境还在学校、想往技术方向走的在校生早一点建立命令行思维后面学 Docker、K8s、数据库会轻松很多工作中偶尔要碰 Linux 服务器的测试、前端、产品同学掌握基础命令能减少很多依赖别人的时刻。2. Linux 命令行与 Shell 的概念先理解再操作2.1 什么是 ShellShell 是一个命令行解释器。它的作用是接收你输入的命令翻译给操作系统内核然后把执行结果返回给你。可以把它理解成一个“翻译官”——你用人话命令告诉它想做什么它把任务转成机器能理解的操作。Linux 里常见的 Shell 有 bash、zsh、sh、fish 等。绝大多数 Linux 发行版默认的 Shell 是 bashBourne Again Shell。如果你只是入门不用纠结选哪个 Shell先把 bash 用熟就够了。中英对照概念中文英文说明终端Terminal你输入命令的窗口程序ShellShell解释命令的程序运行在终端里命令行Command Line以文本方式向系统发出指令命令Command你输入的指令本身参数Argument命令后面跟着的附加信息选项Option改变命令行为方式的开关通常以 - 开头2.2 一条命令是怎么被执行的当你输入ls -l /home然后按下回车系统做的事大致是终端把你输入的字符串交给 ShellShell 按空格把内容拆成命令、选项、参数Shell 在系统的 PATH 环境变量里查找名为 ls 的可执行文件找到后启动这个程序把-l和/home传给它ls 程序执行完把输出返回给终端显示。理解这个流程很重要。你以后遇到“command not found”第一反应就应该是这个命令对应的程序没有安装或者不在 PATH 路径里。这就有了排查方向。2.3 为什么非要学命令行有人问现在的 Linux 发行版都有很漂亮的桌面为什么还要学命令行答案很简单你在生产环境中几乎碰不到桌面。真实服务器为了稳定和节省资源通常只安装最小化系统没有图形界面。你要操作它就必须通过 SSH 远程连进去然后面对的只有一个黑底白字的 Shell。即使你自己开发用的电脑有桌面部署到服务器上仍然要面对命令行。所以这不是一个可选项而是绕不开的路。3. 环境准备选哪种方式开始学习工欲善其事必先利其器。学习 Linux 命令行你需要一个 Linux 环境。下面是几种常见方案按推荐程度排序。3.1 方案一虚拟机推荐纯新手用 VirtualBox 或 VMware 安装一个 Ubuntu Desktop 或 CentOS Stream。这样你有一个完整的 Linux 系统和真实服务器几乎一致而且随便折腾不会影响宿主机。适合人群完全零基础、想要一个真实 Linux 环境的初学者。3.2 方案二云服务器推荐有基础的人买一台便宜的云服务器通过 SSH 登录操作。这样你直接面对的是“没有桌面”的服务器环境最接近真实工作场景。适合人群已经会本地操作、想练远程管理和部署的人。3.3 方案三WSL推荐 Windows 用户快速上手Windows 10/11 自带 WSLWindows Subsystem for Linux可以原生运行 Linux 发行版。安装命令很简单wsl --install装完以后在开始菜单里打开 Ubuntu 终端就能用。适合人群不想装虚拟机、想快速在 Windows 上体验 Linux 命令行的用户。3.4 方案四在线练习环境如果以上都不想装也可以在浏览器里搜“Linux online terminal”找在线终端练习。适合只为了快速体验、临时验证一条命令的场景。我的建议是作为入门直接用虚拟机或 WSL 都行别在“选哪个发行版”上浪费太多时间。Ubuntu 是教程最多、社区最活跃的选择就从它开始。4. 核心概念文件系统与路径4.1 Linux 文件系统是树状结构Windows 用盘符区分存储位置C盘、D盘互不相干。Linux 不一样整个系统是一个树状结构根目录是/所有文件和目录都是从根目录长出来的。/ ├── bin ├── etc ├── home │ ├── user1 │ └── user2 ├── var ├── tmp ├── usr └── opt几个关键目录目录作用/bin系统基础命令如 ls、cp/etc系统配置文件/home普通用户的家目录/rootroot 用户的家目录/var日志、缓存等动态数据/tmp临时文件4.2 绝对路径与相对路径绝对路径从根目录开始写比如/home/user1/test.txt相对路径从当前位置开始写比如./test.txt表示当前目录下的 test.txt../test.txt表示上一级目录下的 test.txt入门阶段有个常见误解以为./是“当前目录”的固定前缀。其实只有当你明确要表达“当前目录下的文件”时才需要写./。平时直接写文件名系统默认也在当前目录找。4.3 文件类型一切皆文件Linux 有个经典设计哲学叫“一切皆文件”。普通文件是文件目录是文件硬盘分区是文件网络接口也是文件。这个理念你暂时不需要完全理解但要在接下来的操作中体会ls -l 输出第一列的字符就标明这个文件的类型。-表示普通文件d表示目录l表示软链接5. 常用命令分类详解文件与目录操作从这一节开始进入实操。建议你打开终端跟着敲一遍。5.1 查看当前目录pwdpwd 是 Print Working Directory 的缩写作用是在终端里打印出当前所在目录的完整路径。pwd输出示例/home/myuser刚进终端不知道自己身在何处时这是第一个要敲的命令。5.2 列出目录内容lsls 是最常用的命令之一作用是列出目录和文件信息。# 列出当前目录内容 ls # 列出详细信息 ls -l # 显示隐藏文件 ls -a # 常用组合 ls -lah-l显示详细信息-a显示隐藏文件以.开头的文件-h让文件大小以人类可读的方式显示比如 1.2K、3.5M。英文对照list列出、all全部、human readable人类可读、long format长格式。5.3 切换目录cdcd 是 Change Directory 的缩写用于切换当前工作目录。# 进入 /etc 目录 cd /etc # 回到当前用户的家目录 cd ~ # 回到上一次所在的目录 cd - # 进入上一级目录 cd ..这里的~符号表示当前用户的家目录比如 root 用户的家目录是 /root普通用户 myuser 的家目录是 /home/myuser。5.4 创建目录mkdirmkdir 是 Make Directory 的缩写。# 创建一个目录 mkdir project # 创建多级目录父目录不存在时自动创建 mkdir -p project/src/main/java-p是很多新手不知道的参数。如果没有它创建多级目录会出现 No such file or directory 的报错。5.5 创建空文件touchtouch 的本来作用是修改文件时间戳但最常用的方式是创建空文件。# 创建空文件 touch readme.md # 批量创建 touch a.txt b.txt c.txt5.6 复制文件与目录cpcp 是 Copy 的缩写。# 复制文件 cp readme.md readme_backup.md # 复制目录-r 表示递归复制 cp -r project project_backup # 保留文件属性复制 cp -p readme.md readme_backup.md复制目录时不加-r会报错这也是新手最容易踩的坑。5.7 移动或重命名mvmv 是 Move 的缩写既可以移动文件也可以重命名文件。# 重命名 mv readme.md readme_new.md # 移动文件到指定目录 mv readme.md /home/myuser/docs/ # 移动并重命名 mv readme.md /home/myuser/docs/readme_final.md5.8 删除文件与目录rmrm 是 Remove 的缩写。这条命令要特别谨慎因为 Linux 没有“回收站”的概念删除后很难恢复。# 删除文件 rm readme.md # 递归删除目录 rm -r project # 强制删除不提示确认 rm -rf project这是全篇最重要的安全提醒千万不要在生产环境随便执行rm -rf /或rm -rf /*。尤其是带-rf的命令先确认目录名再回车。很多服务器事故都是这一条命令引起的。5.9 查看文件内容catcat 是 Concatenate 的缩写作用是连接文件并输出到屏幕。看小文件非常方便。# 查看文件全部内容 cat readme.md # 查看多个文件并拼接输出 cat a.txt b.txt5.10 分页查看文件lesscat 查看大文件时会刷屏less 可以分页查看按空格翻页、按 q 退出。less /var/log/syslog5.11 查看文件开头和结尾head、tail# 查看文件前 10 行 head /var/log/syslog # 查看文件最后 10 行 tail /var/log/syslog # 实时跟踪文件新增内容常用于查看日志 tail -f /var/log/syslogtail -f是排查线上问题时最常用的命令。你可以在一个终端里运行它然后做别的事日志新写入的内容会不断滚动出来。按 Ctrl C 退出。5.12 查找文件位置findfind 是用来在文件系统里搜索文件的命令。# 在当前目录下查找名为 readme.md 的文件 find . -name readme.md # 查找 /etc 目录下所有 .conf 后缀的配置文件 find /etc -name *.conf # 按类型查找f 表示文件d 表示目录 find /home -type d -name project6. Linux 权限管理用户、组与文件权限任何一台 Linux 服务器都不止你一个人用权限系统决定了谁能看、谁能改、谁能执行。6.1 用户与用户组在 Linux 里每个文件都有所有者和所属组。你通过ls -l看到的内容中第三、四列分别是文件所有者和用户组。ls -l readme.md输出示例-rw-r--r-- 1 myuser mygroup 1234 Feb 20 10:30 readme.md第一个-rw-r--r--是权限位拆开来理解第 1 位文件类型第 2~4 位文件所有者owner的权限第 5~7 位用户组group成员的权限第 8~10 位其他用户others的权限r是读readw是写writex是执行execute-是没有对应权限。6.2 修改文件权限chmodchmod 是 Change Mode 的缩写。修改权限有两种写法。符号方式# 给所有者增加执行权限 chmod ux script.sh # 给用户组和其他用户去掉写权限 chmod go-w readme.md # 给所有用户添加读权限 chmod ar readme.md这里 u 表示 user所有者g 表示 group用户组o 表示 others其他用户a 表示 all所有用户。数字方式r4w2x1把三个数字相加分别设置 owner、group、others。# 所有者拥有读写执行权限组内成员读执行其他人读执行 chmod 755 script.sh # 所有者拥有读写权限其他人都无权限 chmod 600 secret.txt755 是执行文件最常用的权限600 常用于密钥等敏感文件。6.3 创建用户与切换用户在 Linux 中管理用户常见命令如下# 创建新用户需要 root 权限 sudo useradd -m -s /bin/bash zhangsan # 为用户设置密码 sudo passwd zhangsan # 切换到指定用户 su - zhangsan # 以 root 权限执行单条命令 sudo ls /rootsudo是很多刚接触 Linux 的人容易忽略的命令。它允许普通用户以 root 身份执行指定命令避免直接使用 root 账户带来的风险。6.4 修改文件所有者chownchown 是 Change Owner 的缩写。# 修改文件所有者 sudo chown zhangsan readme.md # 同时修改所有者和所属组 sudo chown zhangsan:developers readme.md7. 文本处理三剑客grep、sed、awk服务器上大量操作是处理日志和配置文件而日志本质上就是文本。掌握这三个命令能让你在排查问题时效率翻倍。7.1 grep按行匹配内容grep 的作用是在文件里搜索包含指定关键词的行。# 在文件中查找包含 error 的行 grep error /var/log/syslog # 忽略大小写 grep -i error /var/log/syslog # 显示匹配行所在的行号 grep -n error /var/log/syslog # 递归搜索目录下所有文件 grep -r error /var/log/ # 取反显示不包含 error 的行 grep -v error /var/log/syslog7.2 sed流式文本编辑器sed 可以对文本做替换、删除、插入操作。最常用的场景是批量替换。# 把文件中的 oldtext 替换成 newtext不修改原文件只输出结果 sed s/oldtext/newtext/g config.conf # 把文件中的 oldtext 替换成 newtext直接修改原文件 sed -i s/oldtext/newtext/g config.conf # 删除匹配特定模式的行 sed -i /debug/d config.conf-i参数表示直接修改原文件。没有备份就执行-i改错了会很麻烦建议先备份cp config.conf config.conf.bak sed -i s/oldtext/newtext/g config.conf7.3 awk按列处理文本awk 的强项是处理结构化文本按列拆分数据。# 打印每一行的第一列 awk {print $1} access.log # 按冒号分隔打印第一列 awk -F: {print $1} /etc/passwd # 条件过滤打印长度大于 100 的行的第二列 awk $5 100 {print $2} file.txtawk 本身是一门小语言入门阶段不需要掌握全部语法先学会按列取数据熟练后再扩展。8. 网络操作与远程连接SSH、ping、curl8.1 远程连接SSHSSH 是运维场景里使用频率最高的协议没有之一。你本地电脑和服务器之间的一切命令行交互基本都是通过 SSH 完成的。# 使用默认端口连接远程服务器 ssh root192.168.1.100 # 指定端口连接 ssh -p 2222 root192.168.1.100 # 使用密钥文件登录 ssh -i ~/.ssh/id_rsa root192.168.1.100第一次连接时会出现确认提示输入 yes 即可。如果提示密码不对、权限不足首先检查是不是用了正确的用户和端口。8.2 远程复制文件scpscp 可以理解为“基于 SSH 的 cp”。# 把本地文件复制到远程服务器 scp ./app.jar root192.168.1.100:/opt/ # 把远程服务器文件下载到本地 scp root192.168.1.100:/opt/app.jar ./ # 复制整个目录加 -r scp -r ./logs root192.168.1.100:/opt/8.3 网络连通性测试ping# 测试能否连通目标地址 ping baidu.com # 只发送 4 个包 ping -c 4 baidu.com英文对照packet数据包、count数量。8.4 接口调试curlcurl 是 Command Line URL 的缩写用来发送 HTTP 请求是排查接口问题最方便的工具。# 发送 GET 请求 curl http://example.com/api/users # 显示响应头和响应体 curl -i http://example.com/api/users # 发送 POST 请求 curl -X POST -H Content-Type: application/json \ -d {name:zhangsan} \ http://example.com/api/users8.5 查看网络端口netstat 或 ss# 查看正在监听的端口 ss -tlnp # 查看某个端口被哪个进程占用 lsof -i:8080在排查端口冲突、服务无法访问的问题时这两条命令是首选。9. 系统信息与进程管理查看系统状态掌握基本的系统查看命令才能判断服务器“是死是活”、资源是否足够。9.1 查看系统信息# 查看内核版本 uname -a # 查看系统发行版信息 cat /etc/os-release # 查看 CPU 信息 lscpu # 查看内存信息 free -h # 查看磁盘使用情况 df -hfree -h和df -h是日常运维最常用的两条前者看内存后者看磁盘。9.2 查看进程ps# 查看当前用户的所有进程 ps -ef # 按关键字过滤进程 ps -ef | grep java # 查看某个进程的详细信息 ps -ef | grep 123459.3 动态监控进程toptop 相当于 Windows 的任务管理器实时展示 CPU、内存、进程等资源占用情况按 q 退出。top # 更直观的版本 htophtop 需要单独安装但展示效果更友好。9.4 后台运行命令nohup当你通过 SSH 启动一个服务直接关闭终端会导致进程被杀掉。nohup 可以让你启动的进程在后台运行不随终端关闭而退出。nohup java -jar app.jar app.log 21 这条命令常见于部署 Java 应用。它的意思是以后台方式启动 Java 应用把标准输出和错误输出都写入 app.log表示放入后台执行。10. 实用技巧让命令行效率翻倍10.1 Tab 自动补全不需要完整输入命令或文件名输入前几个字符按 Tab 会自动补全。如果按 Tab 没反应说明有多个匹配项再按一次 Tab 会列出候选列表。10.2 历史命令# 查看历史命令 history # 执行上一条命令 !! # 执行历史中第 N 条命令 !123输入命令时按 Ctrl R 可以搜索历史命令输入关键字会自动匹配多按几次可以向前翻找。10.3 管道符 |管道符是 Linux 命令组合的核心。它的作用是把前一个命令的输出作为后一个命令的输入。# 查看 java 进程 ps -ef | grep java # 查看当前目录下所有文件的行数统计 ls -l | wc -l # 查看日志中 error 出现的次数 grep error /var/log/syslog | wc -l # 查看磁盘最占用空间的目录 du -sh * | sort -hr | head -10理解管道是入门阶段最重要的思维升级。单个命令能做的事有限但用管道把命令串起来就能完成很复杂的任务。10.4 输出重定向# 把输出写入文件覆盖 echo hello hello.txt # 把输出追加到文件 echo world hello.txt # 错误输出也重定向到文件 java -jar app.jar app.log 21覆盖写入追加写入21把标准错误也并入标准输出。11. 常见问题与排查思路问题现象可能原因排查方式解决方案提示 command not found命令未安装或命令不在 PATH 中先检查命令是不是拼错了再确认软件是否已安装用系统包管理器安装如 apt install 或 yum install提示 Permission denied当前用户对文件没有相应权限用 ls -l 查看文件所有者和权限位切换到有权限的用户或使用 sudo 执行删除了文件但磁盘空间没释放有进程仍在占用被删除的文件用 lsofgrep deleted 查看占用进程SSH 连接超时网络不通、端口未开放或防火墙拦截本地 ping 目标 IP再检查端口是否监听确认安全组/防火墙规则确认 sshd 服务已启动端口被占用有其他进程占用了同一端口用 ss -tlnp 或 lsof -i:端口 查看进程停掉旧进程或换端口cat 查看大文件直接卡住文件太大终端输出刷屏先用 wc -l 查看文件行数确认大小改用 less 分页查看或 tail -n 看最后几百行rm 误删文件没有回收站机制立即停止所有写操作尝试恢复用 extundelete 等工具尝试恢复前提是文件系统没有被覆盖写入12. 最佳实践与工程建议12.1 安全第一权限最小化不要用 root 账户处理日常操作能用普通用户就用普通用户。必须使用管理员权限时用 sudo 执行单条命令而不是直接切换到 root。这能最大程度避免误操作带来的毁灭性影响。12.2 删除操作前先备份涉及修改配置文件、批量替换、删除文件时先执行备份。最简单的备份就是复制一份加 .bak 后缀cp nginx.conf nginx.conf.bak等确认操作没问题后再决定是否删除备份。12.3 用别名减轻记忆负担把常用长命令配置成短别名放在~/.bashrc里。alias llls -lah alias ggrep --colorauto alias pleasesudo $(history -p !!)编辑完成后执行source ~/.bashrc让配置生效。12.4 多敲少看以练代学命令行是“肌肉记忆”型技能。看十遍教程不如亲手敲一遍。建议给自己一个小目标每天在终端里完成一次完整任务比如查找一个日志、创建一组目录、写一个 5 行的 Shell 脚本。坚持两周基础命令基本就内化了。12.5 学会看文档man遇到不认识的命令先别急着搜索试试man ls man grepman 是 Linux 自带的手册页包含命令的全部参数和用法说明。按 q 退出。英文不好的可以装中文 man 包但更推荐直接读英文原文技术文档的英文表达相对固定读多了自然就熟了。13. 总结与后续学习方向这篇文章把 Linux 入门最核心的模块都过了一遍文件系统与路径、目录与文件操作、权限管理、文本处理、网络命令、系统监控以及查错思路。你现在需要做的是打开终端把里面的命令一条一条敲一遍遇到不理解的输出就查文档。入门之后再往下走方向大概有这么几条第一Shell 脚本编程。当你发现自己在重复敲同样的命令序列就应该把它们写成一个脚本。学变量、条件判断、循环这是从“会敲命令”到“会写工具”的转折点。第二文本处理进阶。grep、sed、awk 这三样值得深入学它们可以帮你完成 80% 的日志分析工作。第三服务管理。学习 systemd 的基本概念掌握 service、systemctl 的用法然后试着在 Linux 上部署 Nginx、MySQL这个过程会把文件权限、网络配置、系统服务串起来。第四容器化。Docker 是现代运维绕不开的工具而 Docker 的操作方式就是通过命令行。等命令行基础扎实后学 Docker 会非常顺畅。如果你看这篇文章前面部分还有点懵不用害怕这是正常的。命令行最初确实反直觉但它是这个行业最值得投入的技术基础之一。给自己两周时间每天用一个小时把命令真正用起来。等你能不看教程完成一次“从零部署一个 Nginx 服务”的任务你就已经真正迈进了 Linux 的大门。