Linux核心命令实战教程:从零到精通的开发运维必备指南

Linux核心命令实战教程:从零到精通的开发运维必备指南 最近在带新人熟悉 Linux 环境时发现很多朋友面对黑乎乎的终端窗口会感到无从下手网上资料虽然多但往往零散不成体系命令参数记不住遇到问题也不知道如何排查。本文旨在整合一套从零开始的 Linux 核心命令实战教程不仅讲解每个命令的用法更会结合日常开发、运维中的高频场景让你理解命令背后的逻辑。无论你是刚接触 Linux 的学生还是需要在服务器上进行操作的后端开发者都能通过本文快速上手建立清晰的命令使用脉络。1. Linux 命令行基础与环境认知在深入学习具体命令之前我们需要对 Linux 命令行环境有一个基本的认识。这有助于理解后续命令的执行上下文和结果。1.1 终端、Shell 与命令提示符当我们打开一个命令行窗口如 GNOME Terminal、Konsole或通过 SSH 连接的终端我们面对的是一个Shell。Shell 是一个命令解释器它负责接收我们输入的命令调用系统内核来执行并将结果返回给我们。常见的 Shell 有 BashBourne-Again SHell最常用、Zsh、Fish 等。命令提示符通常长这样[userhostname current_directory]$或roothostname:~#。user当前登录的用户名。hostname主机名。current_directory当前所在的工作目录。$普通用户提示符。#超级管理员root用户提示符。在#下操作需格外小心。1.2 命令的基本格式与获取帮助一条 Linux 命令通常遵循以下格式command [options] [arguments]command命令本身告诉系统你要做什么。options选项用于修改命令的行为。通常以-短选项或--长选项开头例如-l,--all。arguments参数命令操作的对象如文件名、目录名等。最重要的命令之一学会寻求帮助。man command查看命令的完整手册manual是最权威的帮助文档。按q退出。command --help或command -h查看命令的快速帮助通常列出常用选项。info command查看另一种格式的详细信息文档不如man常用。whatis command用一句话简述命令的功能。which command显示命令的完整路径。1.3 文件系统层次结构标准FHS理解 Linux 的目录结构是高效使用命令的基础。其核心设计遵循 FHS几个关键目录必须牢记/根目录所有目录的起点。/home普通用户的家目录所在地。用户alice的家目录通常是/home/alice。/root系统管理员 root 的家目录。/etc存放系统全局配置文件。/var存放经常变化的文件如日志 (/var/log)、缓存、数据库文件。/tmp临时文件目录所有用户都可读写系统重启可能会清空。/usr用户程序和数据目录包含大量应用程序和只读数据。/bin,/sbin存放系统启动和修复所需的基本命令。/sbin下的命令通常需要 root 权限。/opt用于安装第三方大型软件。/boot存放系统启动所需的文件如内核、引导程序。/dev设备文件目录代表系统中的硬件设备。2. 环境准备与实验设置为了安全且高效地学习强烈建议在非生产环境中进行实践。2.1 实验环境选择虚拟机在 Windows 或 macOS 上使用 VirtualBox 或 VMware 安装 CentOS、Ubuntu 等发行版。这是最接近生产环境的练习方式。WSL (Windows Subsystem for Linux)适用于 Windows 10/11 用户可以在 Windows 内获得一个完整的 Linux 子系统体验很好。云服务器购买一台最低配置的云服务器如腾讯云、阿里云的轻量应用服务器进行远程操作能同时学习 Linux 和网络知识。在线模拟器一些网站提供在线的 Linux 终端模拟适合快速体验但功能有限。本文示例基于Ubuntu 22.04 LTS和Bash Shell但绝大多数命令在所有主流 Linux 发行版如 CentOS, Rocky Linux, Debian中都是通用的。2.2 创建一个安全的练习环境在开始前我们创建一个专用的练习目录避免误操作影响系统文件。# 在家目录下创建一个名为 linux_practice 的目录 mkdir ~/linux_practice # 进入该目录 cd ~/linux_practice # 验证当前路径 pwd预期输出类似/home/your_username/linux_practice。后续的很多操作都可以在这个目录下进行。3. 文件与目录操作核心命令这是日常使用频率最高的一组命令。3.1 浏览与导航pwd,ls,cdpwd(Print Working Directory)打印当前所在目录的绝对路径。pwdls(List)列出目录内容。ls # 列出当前目录下的非隐藏文件和目录 ls -l # 以长格式列出显示权限、所有者、大小、修改时间等详细信息 ls -a # 列出所有文件包括以 . 开头的隐藏文件 ls -la # -l 和 -a 的组合最常用 ls -lh # -l 的基础上以人类可读的格式K, M, G显示文件大小 ls /etc # 列出指定目录如 /etc下的内容ls -l输出的第一列如-rw-r--r--表示文件类型和权限需要重点理解。cd(Change Directory)切换当前工作目录。cd ~/linux_practice # 切换到绝对路径 cd .. # 切换到上级目录 cd ../.. # 切换到上两级目录 cd - # 切换回上一个所在的目录 cd ~ 或 cd # 切换回当前用户的家目录 cd /etc # 切换到根目录下的 etc 目录3.2 创建与删除mkdir,touch,rm,rmdirmkdir(Make Directory)创建新目录。mkdir new_folder # 创建单个目录 mkdir -p parent/child # 创建嵌套目录-p 确保父目录不存在时一并创建 mkdir dir1 dir2 dir3 # 一次性创建多个目录touch主要作用是更新文件的时间戳。如果文件不存在则会创建一个新的空文件。touch file.txt # 创建名为 file.txt 的空文件或更新其时间戳 touch file1.txt file2.c # 创建多个空文件rm(Remove)删除文件或目录。此命令需谨慎使用删除后不易恢复。rm file.txt # 删除文件系统会询问确认如果未设置别名 rm -f file.txt # 强制删除不询问 rm -r directory_name # 递归删除目录及其内部所有内容系统会询问 rm -rf directory_name # **危险** 强制递归删除目录无任何确认提示。重要警告rm -rf /或rm -rf /*会删除根目录下所有文件导致系统崩溃。绝对不要尝试rmdir删除空目录。如果目录非空会报错。rmdir empty_dir3.3 复制、移动与重命名cp,mvcp(Copy)复制文件或目录。cp source.txt dest.txt # 复制文件并重命名 cp source.txt ~/backup/ # 复制文件到指定目录保持原名 cp -r source_dir/ dest_dir/ # 递归复制整个目录 cp -i source.txt dest.txt # 交互模式覆盖前询问 cp -v source.txt dest.txt # 显示详细过程mv(Move)移动文件或目录也可用于重命名。mv old_name.txt new_name.txt # 重命名文件 mv file.txt /tmp/ # 移动文件到 /tmp 目录 mv dir1/ dir2/ # 如果 dir2 存在则将 dir1 移动到 dir2 内如果 dir2 不存在则将 dir1 重命名为 dir2 mv -i file.txt dest/ # 覆盖前询问3.4 查看文件内容cat,less,head,tailcat(Concatenate)连接文件并打印到标准输出。适合查看小文件。cat file.txt # 查看文件全部内容 cat -n file.txt # 显示行号 cat file1.txt file2.txt # 依次显示多个文件内容less分页查看文件内容适合查看大文件。功能强大支持搜索、翻页。less large_log_file.log进入less后空格键/Page Down向下翻一页。b/Page Up向上翻一页。/keyword向下搜索keyword。?keyword向上搜索keyword。n跳转到下一个匹配项。N跳转到上一个匹配项。q退出less。head显示文件开头部分默认10行。head file.txt # 显示前10行 head -n 20 file.txt # 显示前20行tail显示文件末尾部分默认10行。监控日志时极其有用。tail file.log # 显示末尾10行 tail -n 50 file.log # 显示末尾50行 tail -f file.log # **实时追踪**文件新增内容Follow mode用于监控日志按 CtrlC 退出。4. 文件查找、权限与文本处理命令4.1 查找文件find,locate,whichfind在目录树中递归查找文件功能最强大。find . -name *.txt # 在当前目录及子目录中查找所有 .txt 文件 find /home -type f -name *.conf # 在 /home 下查找类型为文件(f)的 .conf 文件 find . -type d -name “dir*” # 查找目录(d) find . -size 10M # 查找大于10MB的文件 find . -mtime -7 # 查找7天内修改过的文件 find . -name *.log -exec rm {} \; # 找到 .log 文件并删除危险先测试locate基于数据库快速查找文件速度远快于find但数据库需要定期更新 (sudo updatedb)。locate nginx.confwhich在$PATH环境变量指定的目录中查找可执行文件的位置。which python3 which ls4.2 文件权限管理chmod,chown,chgrpLinux 中每个文件都有所属用户owner、所属组group和其他用户others的读(r)、写(w)、执行(x)权限。chmod(Change Mode)修改文件权限。数字模式常用r4,w2,x1。chmod 755 script.sh # owner: rwx(7), group: r-x(5), others: r-x(5) chmod 644 file.txt # owner: rw-(6), group: r--(4), others: r--(4)符号模式u(user),g(group),o(others),a(all),(加),-(减),(设)。chmod ux script.sh # 给 owner 添加执行权限 chmod go-w file.txt # 移除 group 和 others 的写权限 chmod ar file.txt # 给所有人设置为只读chown(Change Owner)改变文件所有者和所属组。sudo chown alice file.txt # 将文件所有者改为 alice sudo chown alice:developers file.txt # 将所有者改为 alice所属组改为 developers sudo chown -R alice:developers directory/ # 递归修改目录下所有文件通常需要sudo权限chgrp(Change Group)单独改变文件所属组。sudo chgrp developers file.txt4.3 文本处理三剑客grep,sed,awkgrep(Global Regular Expression Print)在文件中搜索匹配模式的行。grep “error” app.log # 在 app.log 中查找包含 “error” 的行区分大小写 grep -i “error” app.log # -i 忽略大小写 grep -r “TODO” ~/project/ # -r 递归搜索目录 grep -n “function” script.py # -n 显示行号 grep -v “debug” app.log # -v 反向选择显示不包含 “debug” 的行 grep -E “error|warning” app.log # -E 使用扩展正则表达式匹配 error 或 warningsed(Stream Editor)流编辑器用于对文本进行过滤和转换。sed ‘s/foo/bar/g’ file.txt # 将文件中所有的 foo 替换为 bar sed -i ‘s/foo/bar/g’ file.txt # -i 直接修改原文件务必先备份 sed ‘/^#/d’ config.conf # 删除所有以 # 开头的行注释 sed -n ‘5,10p’ file.txt # 打印第5到第10行awk强大的文本分析工具擅长处理列数据。awk ‘{print $1}’ data.txt # 打印文件每一行的第一列默认以空格/tab分隔 awk -F‘,’ ‘{print $2}’ data.csv # -F 指定分隔符为逗号打印第二列 awk ‘$3 100 {print $0}’ data.txt # 如果第三列值大于100打印整行 awk ‘BEGIN{sum0} {sum$1} END{print sum}’ numbers.txt # 计算第一列的总和5. 系统管理与进程操作命令5.1 系统状态查看ps,top,htop,df,du,freeps(Process Status)查看当前进程快照。ps aux # 查看系统所有进程的详细信息常用 ps -ef | grep nginx # 结合管道查找 nginx 相关进程 ps -u username # 查看指定用户的进程top/htop动态、交互式地查看系统进程和资源占用情况。htop是top的增强版界面更友好。top htop # 如果未安装可通过 sudo apt install htop 或 sudo yum install htop 安装在top界面中按q退出按M按内存排序按P按 CPU 排序。df(Disk Free)报告文件系统磁盘空间使用情况。df -h # -h 以人类可读格式G, M显示du(Disk Usage)估算文件和目录的磁盘使用空间。du -sh ~/linux_practice # -s 总计-h 人类可读查看目录总大小 du -h --max-depth1 /var/log # 查看 /var/log 下一级子目录的大小free显示内存使用情况。free -h # -h 人类可读格式5.2 进程管理kill,pkill,killall,jobs,bg,fgkill向进程发送信号。默认发送TERM(15) 信号请求进程终止。kill 1234 # 请求 PID 为 1234 的进程终止 kill -9 1234 # 发送 SIGKILL (9) 信号强制杀死进程无法被捕获或忽略 kill -TERM 1234 # 等同于 kill 1234pkill通过进程名杀死进程。pkill firefox # 杀死所有名为 firefox 的进程 pkill -u username # 杀死属于某用户的所有进程killall类似pkill通过进程名杀死进程。killall nginxjobs,bg,fg管理后台作业。sleep 100 # 在后台运行 sleep 命令 jobs # 查看当前 shell 的后台作业列表 fg %1 # 将 1 号作业切换到前台运行 # 按 CtrlZ 可以挂起当前前台作业 bg %1 # 将挂起的 1 号作业放到后台继续运行5.3 网络相关命令ping,curl,wget,netstat,ssping测试与目标主机的网络连通性。ping -c 4 google.com # 发送4个ICMP包后停止curl强大的命令行工具用于传输数据支持 HTTP, HTTPS, FTP 等。curl https://example.com # 获取网页内容并输出到终端 curl -o page.html https://example.com # -o 将内容保存到文件 curl -I https://example.com # -I 只显示 HTTP 响应头 curl -X POST -d ‘datatest’ http://api.example.com # 发送 POST 请求wget另一个常用的网络下载工具支持递归下载。wget https://example.com/file.tar.gz # 下载文件 wget -c https://example.com/bigfile.iso # -c 断点续传 wget -r -l1 https://example.com/ # -r 递归-l1 深度为1netstat/ss查看网络连接、路由表、接口统计等信息。ss是更现代、更快的替代品。netstat -tulpn # 查看所有监听端口及相关进程需要 sudo ss -tulpn # 同上使用 ss 命令 netstat -rn 或 route -n # 查看路由表6. 压缩打包与软件管理6.1 压缩与解压tar,gzip,ziptar打包/解包工具常与压缩工具联用。# 打包并压缩创建归档 tar -czvf archive.tar.gz directory/ # -c 创建-z 用gzip压缩-v 显示过程-f 指定文件名 tar -cjvf archive.tar.bz2 directory/ # 用bzip2压缩 # 解压 tar -xzvf archive.tar.gz # -x 解压-z 解gzip tar -xjvf archive.tar.bz2 # 解bzip2 tar -xvf archive.tar # 解压未压缩的 tar 包 # 仅查看包内内容不解压 tar -tzvf archive.tar.gzgzip/gunzip压缩/解压.gz文件。gzip file.txt # 压缩为 file.txt.gz会删除原文件 gunzip file.txt.gz # 解压会删除 .gz 文件 gzip -c file.txt file.txt.gz # 压缩但保留原文件zip/unzip处理.zip格式压缩包。zip -r archive.zip directory/ # -r 递归压缩目录 unzip archive.zip # 解压到当前目录 unzip -l archive.zip # 列出包内文件列表6.2 软件包管理以 Ubuntu/Debian 和 CentOS/RHEL 为例APT (Ubuntu/Debian)sudo apt update # 更新软件包索引必须首先运行 sudo apt upgrade # 升级所有已安装的软件包 sudo apt install package_name # 安装软件包 sudo apt remove package_name # 卸载软件包保留配置文件 sudo apt purge package_name # 彻底卸载软件包删除配置文件 sudo apt search keyword # 搜索软件包 sudo apt show package_name # 显示软件包详细信息YUM/DNF (CentOS/RHEL 8)sudo yum check-update # 检查可更新的包yum sudo dnf check-update # dnf sudo yum update # 更新所有包 sudo yum install package_name # 安装 sudo yum remove package_name # 卸载 sudo yum search keyword # 搜索 sudo yum info package_name # 显示信息7. 综合实战案例日志分析与备份脚本假设我们有一个应用日志/var/log/myapp/app.log我们需要查找过去一小时内产生的、包含 “ERROR” 的日志行。将这些错误日志提取出来保存到以当前日期命名的文件中。将错误日志文件打包压缩并移动到备份目录。清理超过7天的旧备份。我们可以编写一个 Shell 脚本来完成这个任务。#!/bin/bash # 文件名log_error_backup.sh # 描述每日错误日志提取与备份脚本 # 1. 定义变量 LOG_FILE“/var/log/myapp/app.log” BACKUP_DIR“/backup/app_logs” ERROR_PATTERN“ERROR” RETENTION_DAYS7 # 2. 创建备份目录如果不存在 mkdir -p “$BACKUP_DIR” # 3. 生成带日期的文件名 CURRENT_DATE$(date “%Y%m%d”) ERROR_LOG“$BACKUP_DIR/errors_$CURRENT_DATE.log” BACKUP_FILE“$BACKUP_DIR/app_errors_$CURRENT_DATE.tar.gz” # 4. 从主日志中提取过去一小时内的 ERROR 日志 # 使用 awk 结合时间过滤假设日志时间格式为 ‘2023-10-27 14:30:00’ ONE_HOUR_AGO$(date -d ‘1 hour ago’ “%Y-%m-%d %H:%M:%S”) awk -v threshold“$ONE_HOUR_AGO” ‘$1“ ”$2 threshold /ERROR/’ “$LOG_FILE” “$ERROR_LOG” # 5. 检查是否提取到错误日志 if [[ -s “$ERROR_LOG” ]]; then echo “发现错误日志开始打包…” # 6. 打包压缩错误日志文件 tar -czf “$BACKUP_FILE” -C “$BACKUP_DIR” “errors_$CURRENT_DATE.log” # 7. 删除原始的临时错误日志文件 rm “$ERROR_LOG” echo “备份完成$BACKUP_FILE” else echo “过去一小时内未发现 ERROR 日志。” # 删除空的错误日志文件 rm -f “$ERROR_LOG” fi # 8. 清理超过保留天数的旧备份 find “$BACKUP_DIR” -name “app_errors_*.tar.gz” -mtime $RETENTION_DAYS -delete echo “已清理 $RETENTION_DAYS 天前的旧备份。” # 给脚本添加执行权限chmod x log_error_backup.sh # 可以添加到 crontab 中每日自动执行这个脚本综合运用了变量、条件判断、文件操作、文本处理 (awk)、打包 (tar)、查找删除 (find) 等多个核心命令是一个典型的运维小脚本。8. 常见问题与排查思路问题现象可能原因排查命令与解决思路Command not found1. 命令拼写错误。2. 软件包未安装。3. 命令所在目录不在$PATH中。1.which command_name检查命令是否存在及路径。2. 使用apt search或yum search查找并安装对应包。3.echo $PATH查看路径或使用完整路径执行/usr/sbin/command。Permission denied当前用户对文件或目录没有足够的权限。1.ls -l查看文件权限和所有者。2. 如果是执行脚本用chmod x script.sh添加执行权限。3. 如果是访问文件可能需要用sudo或以正确用户身份运行。No such file or directory1. 路径或文件名错误。2. 文件确实不存在。1. 仔细检查路径拼写注意大小写。2. 使用ls查看当前目录内容或find / -name filename 2/dev/null全局查找。磁盘空间不足 (No space left on device)磁盘使用率 100%。1.df -h查看各分区使用情况。2.du -sh /* | sort -rh | head -10查找根目录下占用最大的前10个目录。3. 清理日志 (/var/log)、缓存或无用的大文件。进程占用 CPU/内存 过高某个进程异常或存在资源泄漏。1.top或htop查看资源占用排序找出问题进程 PID。2.ps aux | grep PID查看进程详情。3. 分析该进程的日志或使用strace/perf进一步诊断。无法连接到远程服务器网络问题、防火墙、服务未启动。1.ping server_ip检查网络连通性。2.telnet server_ip port或nc -zv server_ip port检查端口是否开放。3. 在服务器上检查服务状态systemctl status service_name以及防火墙规则sudo ufw status或sudo firewall-cmd --list-all。脚本执行错误Syntax error脚本中存在语法错误。1. 使用bash -n script.sh检查语法。2. 仔细检查括号、引号、空格如[ ]两边需有空格。3. 确保脚本开头有正确的 shebang如#!/bin/bash。9. 最佳实践与工程建议谨慎使用 root 权限日常操作尽量使用普通用户。使用sudo执行需要特权的命令并仔细检查命令后再回车。避免长时间在 root 会话下工作。命令组合与管道善用管道|将多个命令组合是 Linux 强大之处。例如ps aux \| grep nginx \| grep -v grep。使用 Tab 键补全在输入命令、路径、文件名时多按Tab键可以自动补全或列出选项提高效率并减少拼写错误。命令历史与复用使用history查看命令历史用!编号或CtrlR反向搜索来快速执行历史命令。输出重定向command file将标准输出重定向到文件覆盖。command file追加到文件。command 2 error.log将标准错误重定向到文件。command all_output.log将标准输出和标准错误都重定向到文件。编写可读的脚本脚本开头使用#!/bin/bash指定解释器。添加注释说明脚本用途、作者、参数。使用有意义的变量名。对重要的删除、修改操作先使用echo打印将要执行的动作确认无误后再实际执行。使用set -e让脚本在发生错误时立即退出避免错误累积。善用别名 (alias)将常用的长命令设为别名放入~/.bashrc中。例如alias ll‘ls -alF’。理解命令原理不要死记硬背。遇到新命令多用man和--help查看其选项和原理。理解它在系统层面做了什么。生产环境操作守则先备份后操作修改重要配置文件前先cp config.conf config.conf.bak。在测试环境验证任何脚本或复杂命令先在测试环境充分验证。使用版本控制对于配置文件、脚本使用 Git 等工具进行版本管理。记录操作日志重要的运维操作记录下时间、命令、目的和结果。掌握 Linux 命令行是一个从生疏到熟练再到形成肌肉记忆的过程。最好的学习方法就是“在战争中学习战争”为自己设定一些小任务如搭建一个博客、部署一个服务、分析一次日志在实践中反复运用这些命令。建议将本文作为手边速查手册遇到忘记的参数随时回来翻阅。当你能够流畅地组合使用find、grep、awk、xargs等命令解决实际问题时你就已经从一个命令使用者成长为一名高效的 Linux 操作者了。