Linux命令行入门:从0到1玩转Linux
这次我们来看一个非常基础但绕不开的话题——Linux命令行。不管你是刚转行做运维、刚开始系统学习编程,还是日常需要维护服务器,Linux命令行都是必须跨过的一道门槛。很多初学者卡在第一关,不是命令记不住,而是不知道每个命令在实际工作中怎么用、什么时候用。这篇文章直接用“场景 → 命令 → 实际输出 → 排查思路”的方式,把最常用的 Linux 命令完整串一遍。
文章会覆盖四个重点:环境准备、文件与目录操作、权限与进程管理、Shell 脚本基础。每一条命令都按“中英文命令对照 + 实际用途 + 示例 + 结果验证”的顺序展开。读者跟着操作一遍,基本就能独立完成最常见的 Linux 运维任务。如果你之后要学 Docker、Nginx、Kubernetes、CI/CD,这套命令行基础也是前提。
适合读者:刚接触 Linux 的运维新人、准备 Linux 面试题的技术人员、工作中需要操作服务器的开发工程师。不建议完全没有接触过终端操作的纯业务用户继续往下读,更推荐先在 Windows/Mac 上装一台虚拟机或直接使用云服务器实践。
1. 核心能力速览
| 项目 | 说明 |
|---|---|
| 主题方向 | Linux 命令行基础入门,覆盖运维与编程场景 |
| 涉及命令范围 | 文件操作、目录导航、文本处理、权限管理、进程监控、网络调试、SSH 远程连接 |
| 适合人群 | 运维新手、编程初学者、面试备考者、桌面用户转服务器管理 |
| 学习前提 | 有一台 Linux 主机、虚拟机或云服务器即可,无需高配硬件 |
| 启动方式 | 终端 / Shell,无需图形界面 |
| 是否需要 API | 本教程不涉及接口服务,但会演示命令的脚本化、批量任务处理 |
| 中英双语特点 | 所有核心命令保留英文原名,注释与场景说明用中文,便于对照记忆和查询英文文档 |
| 推荐实践频率 | 每天 30 分钟,建议连续练习 7 天 |
| 适合场景 | 日常服务器维护、日志排查、Shell 脚本编写、Linux 面试准备 |
这个表先给你一个整体判断:学习 Linux 命令行不挑硬件,不挑显卡,不挑内存大小,一台最普通的电脑装个虚拟机都能跑。真正的门槛是你能不能坚持把命令敲熟,以及遇到问题后知道去哪里查。
2. 适用场景与使用边界
2.1 适合什么场景
Linux 命令行在运维工作中的价值,主要体现在三个场景,第一个是远程服务器管理。生产服务器绝大多数没有图形界面,你只能用 SSH 连上去做操作,这时候命令行就是唯一入口。第二个是日志排查和问题定位。服务崩溃、接口超时、磁盘写满,都需要用命令快速查看,定位问题比看日志文件本身更重要。第三个是自动化脚本。重复的备份、日志清理、批量改名、定时检测,都可以交给 Shell 脚本处理。
2.2 这个阶段不适合做什么
如果你刚接触 Linux,不建议直接在生产环境上练习命令,尤其是rm -rf、mv、chown这类具有破坏性的操作。本地虚拟机或一次性云主机是最安全的练手环境。也不建议一上来就折腾复杂的防火墙规则、SELinux 策略、内核参数调优,这些需要先理解系统机制,否则出了问题很难定位。
2.3 安全与合规边界
生产环境中的服务器通常承载业务数据,操作前必须检查是否拥有相应授权。查看日志时候注意敏感信息,比如用户密码、Token、密钥;涉及批量处理文件或数据时,先在小范围目录内验证再全量执行;不要在没有备份的情况下执行删除、移动、覆盖操作。
3. 环境准备与前置条件
3.1 你需要准备什么
实践 Linux 命令行最常见的三种方式,按推荐程度排列:
| 方式 | 适合场景 | 注意点 |
|---|---|---|
| 云服务器(阿里云/腾讯云/UCloud 等,或其他可用云平台) | 最接近生产环境,可以练习远程连接 | 计费,注意实例规格选择;建议按量付费新用户时练习,别浪费 |
| 本地虚拟机(VirtualBox / VMware / UTM) | 完全免费,安全隔离 | 建议安装 Ubuntu Server 或 Debian,不要装带桌面版 |
| WSL(Windows Subsystem for Linux) | Windows 用户最方便 | 注意 WSL1 和 WSL2 的文件系统差异,推荐 WSL2 |
如果只是为了学习,不用装图形界面。命令行的学习目标就是用终端操作,桌面版反而容易分散注意力。
3.2 操作系统版本选择
学习命令行不挑发行版,但建议选择文档成熟、社区活跃的发行版,例如 Ubuntu LTS 版本或 Debian stable 版本。REHL 系的 CentOS Stream、Rocky Linux、AlmaLinux 也可以,只是包管理命令不同:Debian 系用apt,RHEL 系用dnf或yum。建议初学者先认准一个发行版学到底,命令逻辑通了,换发行版的成本很低。
安装系统时,语言环境不需要刻意改。虽然本文标题强调中英双语,但建议终端环境保留英文输出,原因很简单:生产服务器基本是英文环境,报错信息、官方文档也以英文为主,尽早习惯英文报错能少走弯路。
3.3 连接工具
如果是云服务器,使用 SSH 客户端连接。Windows 自带 OpenSSH,可以在 PowerShell 里输入ssh 用户名@IP地址连接;macOS/Linux 直接在终端执行同样命令即可。也可以使用 Windows Terminal、MobaXterm、Tabby 等工具,这类软件支持多标签、保存连接信息,体验更顺手。避免下载来路不明的汉化版终端工具,注意软件来源安全。
4. 基础命令与图形界面区别
4.1 图形界面和命令行的差别
图形界面点击一个按钮,背后往往是一次命令执行。命令行做的事情更底层、更直接,但需要你明确告诉系统“做什么、对谁做、怎么做”。这也是很多初学者觉得命令行难的原因:没有按钮提示,也没有可视化反馈。
但命令行有一个图形界面比不了的优势——可批量、可重复、可自动化。你手动点击 100 次按钮和写一个for循环执行 100 次命令,后者的效率和稳定性完全不在一个量级。运维工作中的批量任务,本质就是批量执行命令,这也是我们要学命令行的根本原因。
4.2 第一个命令:pwd 与 echo
进入终端后,先确认自己当前在哪个目录。
# 查看当前工作目录 pwd # 输出一行文字,通常用于脚本调试 echo "Hello Linux" # 查看当前用户 whoami这三个命令是入门的第一组,也是脚本里最常用的调试手段。pwd是 print working directory 的缩写,echo用于向终端输出内容或写入变量,whoami用于确认当前操作身份。先记住这三个,后面每一项操作都会用到它们。
4.3 中英双语记忆方法
学习命令时,不要死记中文翻译,而是记英文全称的含义,例如pwd→ print working directory,ls→ list,cd→ change directory。因为命令本身的英文含义直接描述了它做什么,理解了全称之后,遇到陌生的命令也能猜个大概。
5. 文件与目录操作命令
5.1 查看目录内容:ls
ls是最常用的命令,没有之一。
# 查看当前目录内容 ls # 查看详细属性(权限、大小、修改时间) ls -l # 查看隐藏文件 ls -a # 组合使用 ls -lahls -lah的组合在生产环境特别常用,l表示长格式,a表示显示隐藏文件,h表示以人类可读方式显示文件大小。当服务日志查不到、配置目录没头绪时,第一件事就是ls -lah看目录里到底有什么。
预期输出示例:
total 36K drwxr-xr-x 2 root root 4.0K Jan 6 10:20 . drwxr-xr-x 3 root root 4.0K Jan 6 10:15 .. -rw-r--r-- 1 root root 220 Jan 6 10:15 .bash_logout -rw-r--r-- 1 root root 3.7K Jan 6 10:15 .bashrc -rw-r--r-- 1 root root 807 Jan 6 10:15 .profile判断标准:能看到文件列表以及权限、属主、大小、时间信息,命令就执行成功。如果提示No such file or directory,说明当前目录路径不对,先执行pwd确认位置。
5.2 切换目录:cd
# 进入指定目录 cd /etc # 返回上一级目录 cd .. # 返回当前用户的家目录 cd ~ # 回到上一次所在目录 cd -实际工程中,cd -非常实用。你从/etc/nginx切到/var/log/nginx查看完日志,一条cd -就能回到刚才的位置,省去一长串路径输入。
5.3 创建目录:mkdir
# 创建单层目录 mkdir test # 创建多级目录 mkdir -p /data/logs/nginx # 批量创建有序目录(比如按日期归档) mkdir -p /data/backup/$(date +%Y%m%d)-p参数是很实用的技能,它允许一次性创建多级目录,并且目录已存在时不会报错。最后一条命令用$(date +%Y%m%d)动态生成日期目录名,是日志归档的常见写法。
5.4 创建文件:touch
# 创建空文件 touch test.txt # 同时创建多个文件 touch a.log b.log c.log # 批量创建 1 到 10 的日志文件 touch log{1..10}.log后面的花括号展开语法log{1..10}.log是 bash 内建功能,能快速生成类似log1.log、log2.log一直到log10.log的文件,为批量任务做素材时很有用。
5.5 复制、移动与删除
# 复制文件 cp test.txt /data/backup/ # 复制目录(递归) cp -r /data/backup /data/backup_2024 # 移动或重命名 mv oldname.txt newname.txt # 删除文件 rm test.txt # 删除目录及内容(谨慎使用) rm -rf /tmp/testdir删除命令必须强调:执行rm -rf之前,一定先用ls或pwd确认当前目录和删除路径,防止误删。生产环境建议先mv到一个临时回收目录,确认没问题后再最终删除。
6. 文件内容查看与文本处理
6.1 查看文件内容:cat、less、tail
# 查看整个文件 cat /etc/hostname # 分页查看大文件(适合日志) less /var/log/syslog # 查看文件最后 10 行(跟踪实时日志) tail -n 20 /var/log/nginx/access.log # 实时滚动输出最新日志 tail -f /var/log/nginx/error.logtail -f是排查线上问题时最常用的命令,没有之一。程序运行没有预期输出、接口请求 502、日志增长异常,直接tail -f挂在那里观察。
less支持方向键上下翻页、按/搜索关键字、按q退出。看大文件时比cat更高效。
6.2 文本搜索:grep
# 在文件中查找关键字 grep "ERROR" /var/log/app.log # 忽略大小写 grep -i "error" /var/log/app.log # 显示匹配行及前后各 5 行 grep -C 5 "ERROR" /var/log/app.log # 统计匹配行数 grep -c "timeout" /var/log/app.log # 递归搜索目录下的所有文件 grep -r "database_host" /etc/myapp/grep是日志排查、配置检查、代码检索的核心武器。运维场景中,定位错误往往不是去看整个日志,而是grep找出所有相关行,再结合时间上下文判断。比如出现接口超时,直接对日志执行grep "timeout" | tail -n 50,先看最近 50 条超时记录,再定位对应的请求 ID。
6.3 文本处理三兄弟:awk、sed、sort
# 用 awk 按空格分隔,打印第一列 awk '{print $1}' /var/log/nginx/access.log # 用 awk 按逗号分隔,打印第三列 awk -F',' '{print $3}' data.csv # 用 sed 做文本替换(只输出不修改文件) sed 's/old/new/g' file.txt # 用 sed 原地修改文件 sed -i 's/192.168.1.1/192.168.1.2/g' /etc/app/config.ini # 对结果去重统计 sort access.log | uniq -c | sort -rn这组命令的实际价值是日志分析。比如从 Nginx 访问日志中统计访问量最高的 IP,一行命令就能出结果:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20执行逻辑:提取第一列 IP,排序,统计每个 IP 出现次数,按次数倒序排列,取前 20 行。这样一条命令能快速找到异常流量来源或高频访问 IP,相比把几万行日志拖进 Excel 处理要高效得多。
6.4 重定向与管道
# 把命令输出写入文件(覆盖) echo "hello" > /tmp/test.txt # 把命令输出追加到文件 echo "world" >> /tmp/test.txt # 管道:把前一个命令的输出传给后一个命令 cat /etc/passwd | grep "root"管道符|是命令行组合逻辑的核心。每一个命令只做好一件事,然后用管道串起来,形成一条完整的处理链路。比如查看当前系统内存占用最高的 10 个进程,用ps aux配合sort和head就能完成。
7. 权限管理与用户操作
7.1 文件权限基础
Linux 文件权限用 9 个字符表示,分为三组:所有者权限、所属组权限、其他用户权限。每组都是rwx的组合,r读,w写,x执行。
# 查看文件详细权限 ls -l /etc/passwd # 修改文件权限:所有者读写执行,组内用户读写,其他用户只读 chmod 764 file.txt # 使用字母方式添加执行权限 chmod +x script.sh # 修改文件所有者 chown root:root /data/file.txt读取文件名的权限位时,与前面的drwxr-xr-x示例对照能看到第一位的d表示目录,后面三组字符分别对应不同身份用户。理解权限模型,是后续用普通用户运行服务、排查Permission denied报错的基础。
7.2 用户管理
# 创建用户 useradd -m -s /bin/bash zhangsan # 创建用户并设置密码 passwd zhangsan # 切换到其他用户 su - zhangsan # 以 root 权限执行单条命令 sudo apt update # 查看当前登录用户 who生产服务器通常会禁用 root 直接登录,改用普通用户加sudo提权,这样既能审计操作记录,也能减少误操作风险。建议学习阶段就养成“普通用户操作,管理命令用 sudo”的习惯。
7.3 权限排查方法
遇到Permission denied时,按下面的步骤排查:
# 1. 确认当前身份 whoami # 2. 确认文件和目录权限 ls -ld /data /data/logs # 3. 尝试用所有者身份执行 sudo -u appuser cat /data/logs/app.log # 4. 查看目录所有者和所属组 stat /data/logs从材料看,实践中最容易踩的坑,不是文件权限本身,而是目录没有执行权限。Linux 对目录的x权限决定了是否允许进入目录,即使你对文件有读权限,但父目录没有x权限,依然无法访问。
8. 网络命令与远程连接
8.1 网络排查命令
# 测试目标主机连通性 ping -c 4 baidu.com # 查看本机 IP 地址 ip addr show # 查看端口监听状态 ss -tlnp # 查询域名对应的 IP nslookup example.comss -tlnp在排查“服务起来了但访问不了”这种问题时非常关键,它显示当前系统监听的所有 TCP 端口和你对应的进程。比如 Nginx 配置了 8080 端口,但ss中没有输出,说明 Nginx 可能没有监听成功或配置端口不对。
8.2 SSH 远程连接
# 标准连接方式 ssh root@192.168.1.100 # 指定端口连接 ssh -p 2222 root@192.168.1.100 # 使用密钥登录 ssh -i ~/.ssh/id_rsa root@192.168.1.100 # 本地端口转发(用于访问内网服务) ssh -L 8080:localhost:80 root@192.168.1.100密钥登录是生产环境服务器最常见的做法,因为它比密码登录更安全。生成密钥:
ssh-keygen -t ed25519 -C "your_email@example.com" # 查看公钥 cat ~/.ssh/id_ed25519.pub生成后将公钥内容添加到服务器的~/.ssh/authorized_keys文件中,之后连接时就不需要输入密码了。如果服务器提示Permissions too open,需要执行chmod 600 ~/.ssh/authorized_keys和chmod 700 ~/.ssh修正权限。
8.3 下载文件与传输
# 用 wget 下载文件 wget https://example.com/file.tar.gz # 用 curl 测试接口 curl -I https://example.com # 用 scp 复制文件到远程服务器 scp local.txt root@192.168.1.100:/data/ # 用 rsync 同步目录 rsync -avz ./data/ root@192.168.1.100:/data/curl -I发的是 HEAD 请求,只返回响应头,是快速判断接口是否存活的手段。rsync是同步文件和目录的利器,支持增量传输、断点续传,大文件备份用它比scp更合适。
9. 进程管理与系统监控
9.1 查看和控制进程
# 查看所有进程 ps aux # 按关键词过滤进程 ps aux | grep nginx # 动态监控系统资源 top # 按内存占用排序 top -o %MEM # 结束指定进程 kill 12345 # 强制结束进程 kill -9 12345 # 通过进程名结束 pkill nginxps aux的输出列很多,刚学的时候重点关注这几个字段:USER进程使用者,PID进程 ID,%MEM内存占用百分比,COMMAND对应的执行命令。当服务吞内存、CPU 飙升时,先用top -o %CPU找到问题进程,再决定是重启还是查日志。
9.2 查看磁盘和内存
# 查看磁盘空间 df -h # 查看当前目录大小 du -sh /var/log/ # 查看系统内存情况 free -h # 查看目录下各子目录大小 du -sh /var/log/* | sort -rh | head日志文件写满磁盘是运维中的高频事故。df -h能快速发现磁盘使用率告警,du -sh /var/log/* | sort -rh一行命令能定位大目录,配合tail、grep排查具体文件,是标准排查链路。
9.3 systemctl 服务管理
# 启动服务 systemctl start nginx # 停止服务 systemctl stop nginx # 重启服务 systemctl restart nginx # 查看服务状态 systemctl status nginx # 设置开机自启动 systemctl enable nginx学会了 systemctl 基础用法,就具备了管理绝大多数 Linux 服务的实际能力。服务异常时,优先systemctl status看错误信息,再结合journalctl -u 服务名查看详细日志,比盲目重启更有效。
10. Shell 脚本入门与批量任务
10.1 第一个脚本
创建一个脚本文件,实现基本的服务器信息输出。
#!/bin/bash # 功能:输出当前系统的基本信息 echo "当前时间:$(date)" echo "当前用户:$(whoami)" echo "当前目录:$(pwd)" echo "系统负载:$(uptime)"保存为server_info.sh,然后添加执行权限并运行:
chmod +x server_info.sh ./server_info.sh10.2 循环批量处理文件
#!/bin/bash # 批量将 /data/input 目录下的 .log 文件重命名为 .bak for file in /data/input/*.log; do mv "$file" "${file%.log}.bak" echo "已处理: $file" done判断标准:执行后/data/input目录下所有.log后缀文件变成.bak,且每处理一个文件都有输出。如果部分文件没有处理,先检查目录路径是否正确,以及是否对文件有读写权限。
10.3 日志清理脚本
#!/bin/bash # 清理超过 7 天的日志文件,保留最近 7 天 LOG_DIR="/var/log/myapp" find "$LOG_DIR" -type f -name "*.log" -mtime +7 -delete这个脚本用find查找指定目录下 7 天前修改过的日志文件并删除,可配合 crontab 做定期清理。
10.4 定时任务
# 编辑当前用户的 crontab crontab -e # 每天凌晨 2 点执行清理脚本 0 2 * * * /opt/scripts/clean_logs.sh # 每分钟执行一次测试脚本 * * * * * /opt/scripts/test.sh # 查看已配置的定时任务 crontab -l定时任务是批量任务的运行基础。日志切割、数据备份、临时文件清理,都可以用 crontab 自动化执行,前提是脚本先手动跑通,再进入定时调度。
10.5 脚本调试思路
第一次写脚本出错很正常,建议执行以下步骤调试:
# 1. 用 bash -x 跟踪每一条命令的执行过程 bash -x ./server_info.sh # 2. 检查脚本是否有语法错误 bash -n ./server_info.sh # 3. 加临时输出确认变量值 echo "当前变量: $file"bash -x会把每一步执行的命令和展开的变量打印到终端,定位脚本问题时比逐行读代码高效得多。
11. 资源占用与性能观察方法
在这个阶段,不需要过度关注性能调优,但需要知道如何观察系统资源情况。
11.1 查看 CPU 和内存占用
top是观察 CPU 和内存的入门命令,按q退出。重点关注%CPU、%MEM两列,如果某个进程持续占用过高,结合ps aux | grep 进程名做进一步确认。free -h查看内存总量、已用量和缓存。
11.2 查看磁盘占用
df -hdf -h是排查磁盘满的第一命令,关注Use%列。如果使用率超过 80%,建议检查日志目录、临时目录、用户家目录是否有大文件。
重复文件扫描在生产环境要非常谨慎,建议先du -sh定位目录,小范围测试,不要直接执行全盘扫描。大型文件扫描用:
find / -xdev -type f -size +1G 2>/dev/null这条命令查找根文件系统下超过 1G 的文件,-xdev限制不跨越文件系统,避免扫描到挂载的存储盘。
12. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
命令提示command not found | 软件未安装或 PATH 未包含 | which 命令名确认路径 | 安装对应软件包或使用完整路径 |
Permission denied | 文件权限或目录权限不足 | ls -l查看权限,whoami确认身份 | 按需chmod、chown,或使用 sudo |
| 端口被占用 | 其他进程占用端口 | ss -tlnp | grep 端口号 | 杀掉占用进程或更换端口 |
| 磁盘空间已满 | 日志、临时文件过多 | df -h、du -sh /var/log | 清理日志和临时目录 |
| SSH 连接被拒绝 | SSH 服务未启动、防火墙拦截、密钥权限错误 | systemctl status sshd、ss -tlnp | grep 22 | 启动 SSH 服务,检查防火墙规则 |
脚本执行报bad interpreter | 脚本头格式错误或编码问题 | head -1 脚本检查首行 | 确保第一行为#!/bin/bash,用dos2unix转换换行符 |
| 批量任务中断 | 脚本中遇到错误未退出 | 增加set -x和错误处理逻辑 | 脚本中加入set -e遇错即停 |
排查问题的核心思路是“由近到远”:先确认自己当前目录和身份,再确认文件和目录权限,最后看服务状态和系统资源。80% 的问题都出在这三个环节。
13. 最佳实践与使用建议
13.1 安全操作习惯
每条可能导致数据丢失的命令,都要先确认两件事:当前目录是哪、目标文件是否是预期对象。建议把rm -rf从“可用”降级为“最后手段”,能用mv解决的问题不用rm。配置一台专门的测试虚拟机,所有危险命令先在测试机上验证,再到生产环境执行。
13.2 学习路径建议
不要试图一天记完所有命令。更有效的方式是带着场景学,比如想实现日志排查,今天专门练习grep、awk、tail;想解决服务启动问题,今天专门练习systemctl、journalctl。一个场景一个场景积累,比照着命令大全背效率高得多。中英双语表达的另一个实战价值就在这里:命令学的是英文原词,搜资料、看报错、查官方文档都能直接对应,不需要在中文博客和英文文档之间反复转换。
13.3 日常管理习惯
项目文件按用途分目录存放,脚本统一放进/opt/scripts,日志统一放进/var/log/myapp,备份按日期建立子目录。Shell 脚本开头必须加#!/bin/bash和功能注释,涉及删除操作时,先输出将要处理的文件列表,人工确认后再真正执行。
13.4 排查问题方法论
服务出现异常,第一件事不是马上重启,而是收集信息。按这个顺序执行:systemctl status 服务名看状态、journalctl -u 服务名 -n 50看最近日志、df -h看磁盘、free -h看内存、ss -tlnp看端口。五条命令执行完,大部分问题原因已经能定位了。
14. 总结与下一步
Linux 命令行的价值不在于把命令背熟,而在于你面对一台没有图形界面的服务器时,依然能靠终端完成所有运维操作。核心路径是先掌握文件和目录操作,再学文本处理和权限管理,然后用进程监控和网络命令排查实际问题,最后用 Shell 脚本把重复工作自动化。
最先要验证的就是文件的增删改查和查看日志能力,这是所有后续操作的基础。最容易踩的坑是权限问题和误删操作,前者靠ls -l和whoami排查,后者靠事前确认和备份避免。学完这套基础命令,下一步建议继续学习三项内容:一是 Nginx 配置与反向代理,二是 Docker 基础操作,三是编写更完整的自动化部署脚本。这三项的底子,都是你已经在本文里练过的 Linux 命令行。