尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Linux常用命令全解析:从基础操作到高效运维实战指南

Linux常用命令全解析:从基础操作到高效运维实战指南 1. 项目概述为什么我们需要系统性地掌握Linux命令如果你刚接触Linux面对黑漆漆的终端窗口敲入一个ls后可能会觉得它和Windows的资源管理器比起来简直是上个世纪的产物。但当你真正深入服务器运维、软件开发或者网络安全领域你会发现这个看似简陋的命令行界面才是掌控整个系统的“神之右手”。无论是部署一个网站、分析系统日志、批量处理文件还是进行性能调优几乎所有高效、自动化的操作都离不开这些看似简单的命令组合。“基础篇Linux 常用命令总结”这个标题听起来像是一份枯燥的备忘录。但我的理解是它应该是一张“地图”和一套“工具使用说明书”的结合体。新手拿着它能快速找到路知道用什么工具命令去完成什么任务需求而有经验的老手则能从中梳理自己的知识体系查漏补缺甚至发现一些被忽略的高效用法。Linux命令的学习从来不是死记硬背而是理解其设计哲学一个命令只做好一件事通过管道|和重定向、将它们组合起来就能完成无比复杂的任务。这篇文章我就从一个过来人的角度带你系统性地过一遍那些真正高频、核心的命令并分享一些只有踩过坑才知道的实用技巧。2. 核心思路构建你的命令知识框架学习Linux命令最忌讳的就是按照字母顺序去背man手册。那样效率极低且容易遗忘。正确的方法是按场景和功能模块来归类学习。我们可以把常用的Linux命令分为几个核心的“工具箱”2.1 文件与目录操作工具箱这是最基础也是使用频率最高的部分。包括查看ls、切换cd、创建mkdir,touch、复制cp、移动/重命名mv、删除rm、查找find,locate等。这个工具箱的核心是让你能在文件系统中自由“行走”和“搬运”。2.2 文本内容处理工具箱Linux系统配置、程序日志、数据文件大多是文本格式。处理它们离不开查看cat,less,more,head,tail、编辑vim,nano、过滤grep、转换sed、分析awk、排序sort、去重uniq等。这个工具箱是你分析问题和配置系统的“手术刀”。2.3 系统状态与进程管理工具箱你需要知道系统在干什么查看进程ps,top,htop、监控资源free,df,du,iostat,vmstat、管理服务systemctl、结束进程kill,pkill。这是你作为系统“医生”进行诊断和治疗的依据。2.4 网络工具与权限管理工具箱与外界通信和保障安全的基础网络检查ping,curl,wget,netstat/ss,ifconfig/ip、权限设置chmod,chown,chgrp、用户管理useradd,passwd。这个工具箱确保你的系统既能联通世界又能守好家门。2.5 组合与自动化工具箱这是体现Linux哲学精髓的地方管道|、重定向2、命令替换$()、以及编写Shell脚本。掌握了它们你就能让多个简单命令协同工作完成复杂的自动化任务。基于这个框架我们再来逐一深入每个命令不仅知道怎么用更要明白为什么这么用以及如何用得更好。3. 文件与目录操作从“认识环境”到“精准操控”当你登录Linux系统第一件事就是弄清楚“我在哪”和“这里有什么”。pwdPrint Working Directory命令会告诉你当前所在的绝对路径这是所有操作的起点。3.1 查看目录内容ls的学问ls可能是你输入的第一个命令但它的选项远不止列出文件名那么简单。ls -l # 长格式显示包含权限、所有者、大小、修改时间 ls -a # 显示所有文件包括以.开头的隐藏文件 ls -lh # -h与-l结合以人类可读的格式K, M, G显示文件大小 ls -t # 按修改时间排序最新的在前 ls -r # 反向排序 ls -S # 按文件大小排序一个常用的组合是ls -lath它能以长格式、人类可读大小、按时间倒序列出所有文件含隐藏文件让你对目录状态一目了然。注意ls的颜色输出其实是由--colorauto选项控制的通常已设为别名。如果你的终端没有颜色可以尝试ls --coloralways。颜色能快速区分文件类型蓝色目录、绿色可执行文件等。3.2 目录导航与创建cd和mkdircdChange Directory用于切换目录。几个快捷用法cd ~或cd回到当前用户的家目录。cd -回到上一个所在的目录在两个目录间快速切换非常方便。cd ..进入上级目录。mkdirMake Directory创建目录。-p选项至关重要它能自动创建路径中不存在的父目录。mkdir -p project/{src,doc,test}/2024 # 一次性创建嵌套的目录结构上面这个命令利用了大括号扩展一次性创建了project/src/2024,project/doc/2024,project/test/2024这一系列目录效率极高。3.3 文件操作三剑客cp,mv,rmcp(Copy)复制文件或目录。cp source.txt dest.txt # 复制文件 cp -r dir1/ dir2/ # 递归复制目录-r 选项必不可少 cp -i source.txt dest/ # -i 交互模式覆盖前询问 cp -u source.txt dest/ # -u 更新仅当源文件比目标文件新时才复制实操心得在脚本中执行复制时为了避免意外覆盖可以结合set -o noclobber或在关键操作前先检查目标是否存在。对于大量文件复制rsync命令在效率和断点续传方面更胜一筹。mv(Move)移动或重命名文件/目录。它本质上是同一操作。mv oldname.txt newname.txt # 重命名 mv file.txt /tmp/ # 移动文件 mv -i file.txt /tmp/ # 同样建议使用 -i 防止覆盖注意mv跨文件系统移动大文件时实际上是“复制删除”耗时较长。而同文件系统内移动只是修改元数据瞬间完成。rm(Remove)删除。这是最需要谨慎的命令。rm file.txt # 删除文件 rm -r directory/ # 递归删除目录及其内容 rm -f file.txt # 强制删除不提示强烈警告rm -rf /或rm -rf /*是毁灭性的会递归强制删除根目录下的所有文件。永远不要在生产环境尝试。一个常见的悲剧是rm -rf /tmp/ */tmp/后面多了一个空格这会导致删除/tmp/目录后继续删除当前目录所有文件。建议为rm设置别名alias rmrm -i以增加一道安全锁。3.4 文件查找利器findfind是功能最强大的文件查找工具语法也相对复杂。find /path -name *.log # 按文件名查找 find . -type f -mtime -7 # 查找当前目录下7天内修改过的普通文件 find /var/log -size 10M # 查找大于10MB的文件 find . -name *.tmp -delete # 找到并直接删除危险先不加-delete确认 find . -type f -exec chmod 644 {} \; # 对找到的每个文件执行chmod命令-exec参数非常强大但效率对于大量文件可能较低。替代方案是使用xargsfind . -name *.log | xargs ls -lh # 将找到的文件传递给ls -lh显示详情排查技巧如果find命令什么也没找到首先检查路径是否正确其次确认你对目标路径有读取权限。使用-name时模式匹配是大小写敏感的如果想忽略大小写可以用-iname。4. 文本处理窥探与塑造系统信息Linux中一切皆文件而很多文件是文本。处理文本的能力直接决定了你的工作效率。4.1 查看文件内容cat连接并打印文件内容。适合查看小文件。cat file.txt # 查看内容 cat file1.txt file2.txt # 合并显示多个文件 cat newfile.txt # 从标准输入创建新文件CtrlD结束less/more分页查看大文件。less比more功能更多支持上下翻页、搜索等是更佳选择。less large_log.log在less视图中可以用/键搜索文本n跳转到下一个匹配项N上一个q退出。head/tail查看文件开头或结尾部分。head -n 20 file.log # 查看前20行 tail -n 50 file.log # 查看最后50行 tail -f /var/log/syslog # -f 实时追踪文件末尾新增内容监控日志神器4.2 文本过滤与搜索grepgrepGlobal Regular Expression Print是使用最频繁的命令之一用于在文本中搜索匹配模式的行。grep error app.log # 在app.log中搜索包含“error”的行 grep -i warning app.log # -i 忽略大小写 grep -r function_name src/ # -r 递归搜索目录 grep -v ^# /etc/config.conf # -v 反向选择显示所有不以#开头的行过滤注释 grep -E error|warning|fatal log # -E 使用扩展正则表达式匹配多个模式 grep -c pattern file # -c 只统计匹配的行数 grep -n pattern file # -n 显示匹配行及其行号实操心得grep默认使用基础正则表达式BRE一些元字符如,?,|,()需要转义。使用-E或直接调用egrep启用扩展正则表达式ERE语法更直观。对于更复杂的模式匹配-P选项支持Perl兼容正则表达式PCRE功能最强但并非所有系统默认支持。4.3 流编辑器sedsedStream Editor用于对文本流进行非交互式编辑。它按行处理不会修改原文件除非使用-i选项。sed s/old/new/g file.txt # 将文件中所有old替换为new输出到屏幕 sed -i.bak s/old/new/g file.txt # 直接修改原文件并创建备份file.txt.bak sed -n 10,20p file.txt # -n抑制默认输出10,20p打印第10到20行 sed /^#/d config.conf # 删除所有以#开头的行删除注释 sed -i /^$/d file.txt # 删除所有空行-i选项是“原地编辑”非常方便但也非常危险因为会直接覆盖原文件。务必先不加-i运行命令确认输出无误后再使用-i或者像上面例子一样使用-i.bak生成备份。4.4 文本分析报告生成器awkawk不仅仅是一个命令它是一门强大的文本处理编程语言。其基本模式是awk pattern {action} file。awk {print $1} data.txt # 打印每行的第一列默认以空格/tab分隔 awk -F, {print $2} data.csv # -F指定分隔符为逗号打印第二列 awk $3 100 {print $1, $3} data.txt # 如果第三列值大于100打印第一和第三列 awk {sum $1} END {print sum} nums.txt # 计算第一列的总和 awk !seen[$0] file.txt # 一个经典的awk单行命令用于去重保留顺序awk内建变量非常有用NR当前行号、NF当前行的字段数、$0整行内容、$1...$n第n个字段。经验之谈对于简单的列提取和计算awk比cut和bc的组合更灵活。当处理格式规整的日志或数据文件时花点时间学习awk的基础语法回报率极高。例如分析Nginx访问日志统计每个IP的访问次数awk {print $1} access.log | sort | uniq -c | sort -nr。5. 系统监控与进程管理洞察系统运行状态一个稳定的系统需要持续的观察。你需要知道什么程序在运行消耗了多少资源。5.1 进程查看ps与toppsProcess Status查看当前进程快照。ps aux # 最常用的组合查看系统所有进程的详细信息 ps -ef # 另一种常用格式显示完整格式的进程列表 ps -u username # 查看指定用户的进程 ps --forest # 以树状结构显示进程父子关系ps aux输出中各列含义USER用户、PID进程ID、%CPUCPU占用、%MEM内存占用、VSZ虚拟内存大小、RSS常驻内存集、TTY终端、STAT状态如S睡眠、R运行、Z僵尸、START启动时间、TIME累计CPU时间、COMMAND命令。top/htop动态实时查看进程和系统资源占用。top是交互式命令进入后可以按P按CPU排序、M按内存排序、1显示所有CPU核心详情、q退出。htop是top的增强版界面更友好支持鼠标操作和颜色高亮如果系统没有通常可以通过包管理器安装如yum install htop或apt install htop。5.2 系统资源监控free查看内存使用情况。free -h # 以人类可读格式显示推荐重点关注available列它表示系统可用给新应用程序的内存不含缓存和缓冲区。Linux会利用空闲内存做磁盘缓存cached/buffers所以used看起来高不一定代表内存紧张。df查看磁盘空间使用情况。df -h # 以人类可读格式显示各文件系统磁盘空间 df -i # 查看inode使用情况当磁盘空间充足但无法创建文件时可能是inode耗尽du查看目录或文件的磁盘使用量。du -sh /var/log/ # -s总计-h人类可读查看/var/log/总大小 du -h --max-depth1 /home # 查看/home下第一级子目录的大小5.3 进程控制killkill命令用于向进程发送信号默认信号是SIGTERM15即优雅终止。kill 1234 # 终止PID为1234的进程发送SIGTERM kill -9 1234 # 强制终止发送SIGKILL信号9。进程无法捕获此信号可能造成资源未释放应作为最后手段。 kill -l # 列出所有信号名称 pkill process_name # 根据进程名终止进程 killall process_name # 终止所有同名进程注意事项kill -9是“必杀技”但也是“脏”操作。它直接由内核终止进程不给进程任何清理现场的机会如关闭文件描述符、释放锁、保存状态等。正确的流程是先kill PID或kill -15 PID等待几秒如果进程还在再kill -9 PID。6. 网络与权限连通与安全的基石6.1 网络诊断工具ping测试网络连通性。ping -c 4 baidu.com # 发送4个ICMP包后停止curl/wget网络数据传输。curl -O http://example.com/file.zip # 下载文件-O保留远程文件名 curl -I http://example.com # 仅获取HTTP头部信息 wget -c http://example.com/bigfile.iso # -c支持断点续传curl功能更强大常用于测试API-X POST -H Content-Type: application/json -d {key:value}而wget更适合递归下载整个网站。netstat/ss查看网络连接、路由表、接口统计等。netstat是老牌命令在新版Linux中逐渐被更快的ssSocket Statistics取代。ss -tlnp # 查看所有TCP监听端口及对应进程-tTCP-l监听-n数字格式-p进程信息 netstat -tunlp # 等效命令 ss -s # 显示socket统计摘要ifconfig/ip配置网络接口。ifconfig属于net-tools套件已过时。ip命令来自iproute2套件是新的标准。ip addr show # 显示所有网络接口信息替代ifconfig ip route show # 显示路由表 ip link set eth0 up # 启用eth0接口6.2 权限管理Linux权限系统是安全的核心基于用户User、组Group、其他人Other和读r/4、写w/2、执行x/1权限位。chmod修改文件权限。chmod 755 script.sh # 数字模式所有者rwx组和其他人rx chmod ux script.sh # 符号模式给所有者增加执行权限 chmod a-w file.txt # 符号模式去掉所有人的写权限chown修改文件所有者和所属组。chown user:group file.txt # 将文件所有者和组改为user和group chown -R user:group dir/ # -R递归修改目录下所有文件chgrp修改文件所属组功能已被chown涵盖较少单独使用。核心原理执行一个文件需要该文件的执行权限。读取一个目录如ls需要该目录的读权限。进入一个目录cd或访问目录内的文件需要该目录的执行权限。这是很多权限问题的根源你可能对文件有rw权限但因为对上层目录没有x权限导致无法访问该文件。7. 组合与自动化让命令为你打工单个命令是工具组合起来就是自动化流水线。7.1 管道|管道将一个命令的标准输出stdout作为下一个命令的标准输入stdin。ps aux | grep nginx # 查找nginx相关进程 cat log.txt | grep ERROR | wc -l # 统计log.txt中ERROR出现的行数 history | grep docker # 在历史命令中搜索包含“docker”的命令管道是Linux命令行强大生产力的源泉。7.2 重定向,,2,将标准输出重定向到文件覆盖。将标准输出重定向到文件追加。2将标准错误重定向到文件。或21将标准输出和标准错误都重定向到同一位置。ls filelist.txt # 将ls结果输出到filelist.txt覆盖 ls filelist.txt # 追加到filelist.txt ./script.sh output.log 21 # 将脚本的标准输出和错误都重定向到output.log ./script.sh output.log # 同上更简洁的写法 find / -name *.conf 2/dev/null # 将错误信息如权限拒绝丢弃到“黑洞”/dev/null7.3 命令替换$()与反引号将一个命令的输出作为另一个命令的参数。echo Today is $(date) # 将date命令的输出嵌入到echo字符串中 tar -czf backup-$(date %Y%m%d).tar.gz /data # 创建带日期的备份包$()是推荐的方式因为它更清晰且支持嵌套。7.4 Shell脚本入门将一系列命令写入一个文件并赋予执行权限就形成了一个最简单的脚本。#!/bin/bash # 这是一个简单的备份脚本 BACKUP_DIR/backup SOURCE_DIR/data DATE$(date %Y%m%d_%H%M%S) tar -czf $BACKUP_DIR/backup_$DATE.tar.gz $SOURCE_DIR echo Backup completed on $(date) /var/log/backup.log保存为backup.sh然后chmod x backup.sh即可通过./backup.sh运行。8. 常见问题与排查技巧实录在实际操作中你一定会遇到各种奇怪的问题。这里记录一些高频问题的排查思路。8.1 命令找不到command not found原因1命令确实未安装。使用包管理器安装yum install、apt install、dnf install。原因2命令已安装但不在当前用户的PATH环境变量中。echo $PATH # 查看PATH变量 which command_name # 查找命令的完整路径 /usr/local/bin/command_name # 使用完整路径执行可以将命令所在目录添加到PATH或为常用命令创建别名alias。8.2 权限不足Permission denied对文件使用ls -l检查文件权限确认当前用户是否有相应权限。可能需要使用sudo或以正确用户身份运行。对目录记住对目录需要有x执行权限才能cd进去或访问其内文件。使用chmod或chown修正。8.3 磁盘空间不足但df -h显示还有空间可能原因1inode耗尽。使用df -i检查。小文件过多会导致inode先于磁盘空间耗尽。清理大量小文件或调整文件系统创建时的inode数量。可能原因2文件已被删除但仍有进程打开该文件空间未释放。使用lsof | grep deleted查找此类文件并重启或通知相关进程关闭文件句柄。8.4 如何知道一个命令有哪些选项--help大多数命令都支持提供简要帮助。man命令查看命令的完整手册页是最权威的文档。按/可以搜索q退出。info命令某些GNU工具如tar,grep有更详细的info文档。在线资源对于复杂命令如awk,sed网络上有大量优秀的教程和速查表。8.5 历史命令的妙用history查看命令历史。!!执行上一条命令。!$代表上一条命令的最后一个参数。!string执行历史中最近一条以string开头的命令。CtrlR反向搜索历史命令输入关键词即可动态查找。掌握这些基础命令就像学会了木工的基本工具——锯、刨、凿、锤。单独看每个工具都很简单但组合起来就能打造出任何你想要的“家具”。Linux命令行的学习是一个持续的过程最好的方法就是在实践中遇到问题然后带着问题去查阅、学习和实践。当你能够熟练地用一两条管道命令完成别人在图形界面里需要点击半天的操作时那种效率提升带来的成就感就是最好的回报。
返回列表