恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Linux基础指令入门:从文件操作到权限与进程管理
首页
资讯中心
/
Linux基础指令入门:从文件操作到权限与进程管理
Linux基础指令入门:从文件操作到权限与进程管理
发布时间:2026/10/13 11:26:26
没接触过Linux的人第一次登录服务器时几乎都会愣一下——没有桌面没有鼠标只有一个命令提示符和一个闪烁的光标。这其实才是Linux的日常也是它能稳定运行多年的原因之一。这篇文章围绕Linux基础指令展开专门讲每个新手入门前必须掌握的那批命令它们能做什么、为什么要这样用、实际操作中容易踩哪些坑。适合刚接触Linux的同学也适合那些参数全靠死记硬背、想弄懂背后规律的开发者。说实话我见过太多人上来就背“常用指令清单”背完第二天就忘。原因很简单不知道每条命令背后的使用场景大脑里没有锚点。所以这篇文章不只列命令我会尽量把“什么时候用、为什么这么用、踩过什么坑”一起讲透。看完之后你不一定能写出多花哨的脚本但至少能在拿到一台陌生服务器时知道自己该干什么、从哪里下手。1. 为什么要专门花时间学这些“老掉牙”的指令1.1 服务器上没有图形界面的现实很多人第一次接触Linux是在自己电脑上装了个带桌面的发行版觉得“这不跟Windows差不多吗”。可一旦买一台云服务器或者进到生产环境就会发现系统默认连桌面都不装更常见的是最小化安装——只有命令行界面。这不是抠门而是刻意为之。图形界面占用大量内存和CPU资源还会引入更多可以被攻击的组件。对服务器来说稳定和高效永远排在第一位。一个裸奔在命令行状态下的Linux512MB内存也能跑得很欢而同样配置塞个桌面环境可能开机就卡。所以命令行不是Linux的“退化模式”而是它的原生形态。所有运维、部署、脚本编排都建立在这一层之上。掌握基础指令实际上是在掌握这个系统真正的操作界面。1.2 一个指令就是一门小语言的底层逻辑很多人觉得指令难记是因为把指令当成“单个单词”来背。其实更准确的认知是每条指令都是一个迷你程序它的参数就是给这个程序下的配置。比如ls是“列出目录内容”这个程序-l让它输出详细信息-a让它连隐藏文件一起显示-h让它以人类可读的格式显示大小。这三者可以自由组合成ls -lah。一旦你用“程序 参数”的视角去看就不再是死记硬背而是在理解每个程序能干什么之后按需组合。这也是Linux设计哲学里很重要的一点做小事的小工具通过组合完成复杂任务。基础指令是独立的零件但组合起来它们就是一套完整的工具箱。1.3 掌握基础指令的回报远超你的想象基础指令能带来的直接好处有三层第一你能独立在服务器上完成部署、日志查看、进程排查这些高频操作第二你能看懂网上各种教程、脚本不再是被动复制粘贴第三这是写Shell脚本、了解容器和自动化运维的底层地基。举一个很现实的例子同样一句“看日志找报错”不懂指令的人只能翻半天文件懂的人一条grep -i error /var/log/xxx.log | tail -50就搞定了。差距不在智商而在有没有花点时间把基础打好。这篇文章接下来的内容值得你边看边在终端里敲一遍。2. 文件和目录操作每天90%时间都在用的指令2.1 先搞清楚“我在哪、有什么”pwd、ls、cd文件操作是Linux使用频率最高的一类指令也是新手最容易搞混路径概念的地方。先记住三个最基础的pwd打印当前所在目录的完整路径。刚登录服务器时用它确认自己的位置在多层目录里穿梭到迷路时用它找回坐标。这不是花架子真的能救命。ls列出当前目录下的文件。我最常用的组合是ls -lh-l显示权限、属主、大小和修改时间-h把字节数换算成K/M/G这种肉眼友好的单位。想连隐藏文件一起看就加-a于是变成ls -lah。还有个小技巧ls -lt按修改时间倒序排列改完配置文件后想确认哪个最新一眼就能看出来。cd切换目录。基础用法很简单cd /home/user去指定目录cd ..回上一层cd ~回当前用户的家目录。比较值得提醒的是相对路径和绝对路径的区别以/开头的是绝对路径任何位置执行效果都一样不带/的按当前目录出发去解析。我见过不少新手在脚本里用相对路径结果换个目录执行就找不到文件这种坑一踩一个准。2.2 创建、删除、复制、移动mkdir、rm、cp、mvmkdir创建目录。单个目录直接mkdir dirA要一次性创建多层结构就加-p比如mkdir -p /tmp/a/b/c父目录不存在也会自动建。日常写脚本时我几乎总是加-p因为目标目录可能已经存在加-p不会报错。touch创建空文件或者把已有文件的时间戳更新为当前时间。临时垫一个占位文件时很好用。cp复制。复制单个文件是cp src dst复制整个目录必须加-r例如cp -r /etc/nginx/ /backup/nginx_bak/。如果不加-r系统会明确拒绝复制目录。mv移动或重命名。mv oldname newname就是重命名mv file /some/path/是移动到新位置。它的特点是“同名就是覆盖”没有额外确认所以移动前最好先ls看一眼目标目录里有没有同名文件。rm删除。删除文件rm file删除非空目录rm -r dir强制不提示rm -f三者经常合写成rm -rf。这里必须多说一句rm -rf非常危险尤其是rm -rf /或rm -rf ~这类组合一旦执行且权限足够后果不堪设想。我自己的习惯是删除前先ls确认路径删除时尽量写绝对路径或完整路径前缀避免手滑落在错误的目录上。文件操作的通配符也值得一说*匹配任意字符串?匹配任意单字符。比如删除当前目录下所有.log文件可以rm *.log。但通配符在文件名包含空格或特殊字符时会出问题这时候更稳妥的做法是给文件名加引号或者用后面会讲到的find配合删除。2.3 定位文件find 和它的几个实用参数文件一多找东西就变成刚需。find是最强大的查找工具语法是find 路径 条件。最常用的是按名字找find /etc -name *.conf找出所有以 .conf 结尾的文件。按类型找用-type比如find /var/log -type f只看文件find /var/log -type d只看目录。按大小找用-sizefind / -size 100M找出所有超过100MB的文件排查大文件占磁盘时特别好用。配合-exec或-delete还能执行后续动作。比如找出昨天修改过的日志并删除find /tmp -name *.tmp -type f -mtime 1 -delete。这条命令里-mtime 1表示修改时间在一天以前-delete直接删除。使用这类组合前建议先不加删除参数跑一遍确认结果无误再动手我会在后面的避坑章节再次强调这个习惯。3. 查看文件内容别再用cat一撸到底了3.1 看小文件用cat看大文件用lesscat是最直观的内容查看指令直接把整个文件内容打到屏幕上。配置文件、脚本源码这类几百行的文件用它没问题但一旦文件上千行甚至几个GBcat会把内容疯狂刷屏既看不清又占资源。这时候应该用less。less是分页查看器进入后可以用上下方向键逐行移动用空格或PgUp/PgDn翻页输入/关键词从上往下搜索输入?关键词从下往上搜索按q退出。它最大的特点是“懒加载”文件多长都只读当前需要显示的部分对大日志、大数据库备份文件非常友好。我的经验是一切文件先用less打开看结构只有确认是短文件、内容本来就没多少时才用cat直接输出。阅读体验和系统负载都能兼顾。3.2 看日志的正确姿势head、tail -f运维场景里日志查看是每天都要做的事。head看文件开头例如head -20 app.log显示前20行。tail看文件结尾tail -50 app.log显示最后50行。tail -f是我最常用的指令之一。它会让终端保持跟踪状态文件有新内容写入时自动显示出来。调试服务时开一个窗口跑tail -f /var/log/app.log另一个窗口重启服务或发请求日志实时滚动问题定位效率极高。退出按CtrlC。值得留意的是很多新手拿cat看正在写入的日志发现文件巨大刷屏刷到怀疑人生。正确做法是先tail -50看最近内容再配合grep过滤关键词实在需要跟踪就用tail -f。还有一个组合技巧tail -f app.log | grep ERROR只看实时日志里的错误行效果立竿见影。3.3 从内容里捞关键信息grep与wcgrep是内容检索的核心指令。grep keyword file在文件里搜关键词grep -i keyword file忽略大小写grep -r keyword /path递归搜索目录下所有文件。排查问题时我从一堆日志里找某一个用户或某一段错误码靠的就是它。grep也可以做反向匹配grep -v # nginx.conf显示不含#注释行的内容清理配置信息时非常有用。-n显示行号-A 5显示匹配行之后5行-B 5显示之前5行这组参数在分析异常上下文时能省大量时间。wc用来计数最常用的是wc -l统计文件行数。比如统计一个项目里有多少行代码find . -name *.py | xargs wc -l。注意这个命令会分别输出每个文件的行数和一个总和是了解代码规模最快捷的手段。如果需要统计某个关键词在日志里出现的次数grep -c timeout app.log比wc更直接。4. 权限系统为什么Linux要搞这么复杂4.1 权限位到底怎么读drwxr-xr-x 拆解用ls -l看到的每个文件第一列比如drwxr-xr-x一共10个字符包含的信息量很大。第一个字符表示类型d是目录-是普通文件l是软链接。后面9个字符分成三组每三个一组分别代表属主u、属组g、**其他人o**的权限。每组里的三个字符依次是r读、w写、x执行。对文件来说x表示可执行对目录来说x表示能否进入该目录只有r没x会连cd都进不去。所以drwxr-xr-x的意思是这是一个目录属主可以读写和执行属组和其他人只能读和执行不能修改。有一个高频错误认知是“目录的r权限等于能看目录内容”其实读取目录内容需要r而进入目录并访问里面的文件需要x。两者都要有才能正常浏览操作目录。4.2 chmod、chown、umask修改权限的三个抓手chmod用于修改文件权限最推荐数字法。规则很简单r4、w2、x1把三组权限分别相加得到三个数字。7表示rwx6表示rw-5表示r-x4表示r--。所以chmod 755 file的意思是属主rwx属组和其他人r-xchmod 644 file是属主rw-其他人只读。记忆上我常用“7/5/4是常态6/4是安全默认”来快速心算。权限的设置至少要和文件用途匹配脚本要可执行就至少给一个x配置文件通常644保证别人能读但不能改密钥类文件则给600属主自己都只读写不执行其他人一律不给权限。chown用于修改属主和属组。chown user:group file同时改两者chown user file只改属主。最经典的场景是用www-data用户运行Web服务时站点目录必须chown -R www-data /var/www/html归属给运行用户否则服务没权限写文件。umask决定新建文件的默认权限。它不是权限本身而是一个“权限掩码”。系统默认值一般是022所以新建文件默认权限是666 - 022 644新建目录默认是777 - 022 755。如果你希望新建的文件所有人都不能读可以把umask调成077这在处理敏感数据时很实用。修改某次会话的掩码直接执行umask 077持久化则要写进用户配置文件。4.3 权限相关的常见事故权限坑几乎每个运维都踩过。最常见的是“Permission denied”后第一反应是chmod 777图省事把全部权限放开了。这样做短期内能跑但等于把所有保护都拆了。任何Web目录里如果塞满了777文件稍有漏洞就可能被写入恶意脚本。我的建议是只给运行用户赋权目录755、文件644特殊需要才放宽到775、664绝不轻易上777。另一个容易忽略的是“改了文件权限但服务还报错”。这时候要看服务到底以哪个用户运行日志目录、临时目录、缓存目录的属主是否匹配。经常是文件权限明明正确但上层目录权限不足导致服务根本进不去路径。排查时一层一层往上检查父目录的权限是解决此类问题的硬功夫。5. 进程与系统状态遇到卡顿该看什么5.1 进程列表与状态解读ps aux服务器卡了、服务起不来了、CPU爆了这类问题的起点基本都是看进程。ps是进程快照指令最常用的是ps aux。输出里每一行是一个进程PID是进程号%CPU、%MEM是资源占用STAT是状态COMMAND是完整命令。STAT里常见的几个字母值得知道S睡眠、R运行、T停止、Z僵尸。Z状态表示进程已退出但没被父进程回收如果僵尸进程多通常说明父进程有bug没处理好需要重点看父进程。只关注某类进程可以配合grepps aux | grep java。但注意grep本身也会出现在结果里想排除它可以用ps aux | grep java | grep -v grep。日常运维时我还会用ps -ef --forest看进程树父子关系一目了然定位“谁拉起了谁”非常方便。5.2 实时监控top与load averageps是快照要看实时状态就得用top。进入top后默认按CPU占用排序按M键按内存排序按P键回到CPU排序按q退出。第一行的load average有三个数字分别表示1分钟、5分钟、15分钟的负载均值。这里很多人误以为负载是CPU使用率。其实负载表示“当前正在运行和等待运行的进程数平均值”。如果机器是4核负载接近4说明CPU刚好被用满超过4则说明有排队等待。1分钟和15分钟的对比也很有价值15分钟很高但1分钟很低说明压力正在缓解反之则是问题正在恶化。搭建环境前知道自己是几核CPU再看负载值就不会误判。top里按ShiftH可以切换到线程视图排查多线程程序里单个线程占满CPU的问题时非常关键。配合top -p PID只看某个进程避免被其他进程干扰。5.3 终止进程与磁盘内存kill、df、du、free进程不对劲时用kill终止。kill PID发送SIGTERM请求正常退出kill -9 PID发送SIGKILL强制结束。很多人一上来就kill -9但这不是好习惯正常服务可能有未落盘的缓存、正在处理的请求SIGTERM能让它来得及收尾。kill -9是最后手段只在进程完全卡死、正常终止无效时才用。df -h查看磁盘分区使用率。-h是人类可读格式。磁盘写满是最隐蔽的服务故障源之一表现为日志突然写不进去、数据库连接异常。所以“服务出问题先看磁盘”应当成为条件反射。du -sh 目录可以统计某个目录总大小du -sh * | sort -rh还能找出当前目录下最大的几个文件或目录。free -h查看内存。注意buff/cache这一列实际上是内核用于文件缓存的系统内存吃紧时可以回收不算真正的已用内存。判断内存是否够用主要看available列而不是死盯used。如果available长期很低、swap使用率持续增长才需要考虑加内存或优化应用。6. 管道、重定向与组合命令让指令真正“串”起来6.1 管道的思维模式管道符|是Linux命令行最精妙的发明之一。它的思路很朴素把前一条命令的输出作为后一条命令的输入。这就像一条流水线第一个工人产出半成品第二个工人继续加工。例如ls -l | grep ^-先列出所有文件详细信息再用grep过滤出以-开头的普通文件行即只显示普通文件不显示目录。ps aux | grep nginx也是如此把进程列表交给grep过滤出和nginx相关的行。理解管道的关键在于前一条命令必须往标准输出里写内容后一条命令必须能读取标准输入。大多数基础指令都满足这个约定所以它们才能自由组合。想调试某段管道可以在中间插入| tee debug.txt既能继续往后传又能把中间结果存到文件里。6.2 重定向与错误输出重定向把输出从屏幕改写到文件。表示覆盖写入表示追加写入。比如echo hello /tmp/msg.txt创建新文件echo world /tmp/msg.txt在结尾追加。值得注意的是标准输出和标准错误是两条不同的通道。正常输出走1号通道报错信息走2号通道。只写时错误信息还是会在屏幕上出现。想让正常的和错误的都进同一个文件写法是command all.log 21含义是“把2号错误输出重定向到和1号输出一样的地方”。这里21的顺序不能乱先重定向1号通道再把2号指向1号。如果你看到有人写command 21 file那是先指向屏幕、再改1号通道到文件错误依然会打在屏幕上属于常见写法错误。不想保留的历史输出可以扔进“黑洞”command /dev/null 21没用且不想看的信息全部丢弃这在定时任务脚本里很常见。6.3 三个可以直接抄的组合案例统计日志里某个错误出现的次数grep -c ORA-600 /var/log/oracle.log这会输出一个数字。找出磁盘里最大的5个文件du -ah /home/user | sort -rh | head -5。du -ah列出所有文件和目录大小sort -rh按人类可读数值逆序排列head -5取前5行。查看实时日志里最近30行的时间段分布tail -100 app.log | awk {print $2} | sort | uniq -c。awk取每行第2个字段uniq -c按相同值计数能直观看出哪个时间段日志量最大。这里简单记住$2表示按空格分割后的第2列即可awk是强大的文本处理工具进阶后再系统学也不迟。这些组合不需要每一条都背下来但管道和重定向的组合逻辑是通用的。遇到问题时先想想“我要不要筛选、要不要排序、要不要取前几条”然后再拼装命令思路会非常清晰。7. 网络与包管理装软件、查网络的基础姿势7.1 包管理器apt/yum 的日常操作软件安装是所有新手必过的关。不同的Linux发行版用不同的包管理器Debian/Ubuntu系列用aptCentOS/RHEL系列用yum或dnf。它们的核心操作高度相似。apt update更新本地软件包索引换新源或装新软件前先跑一遍。apt install 包名安装软件apt remove 包名卸载apt search 关键词搜索包。加上-y可以跳过确认脚本化安装时会用到。yum系的对应命令是yum install、yum remove、yum search操作逻辑基本一致。安装软件遇到缺依赖的时候包管理器会自动下载解析。如果某个包源里没有可以查一下是否启用了正确的软件源。千万不要因为某条命令提示缺少库文件就随手去网上找个.so下载然后自行动手往系统目录里扔这是比权限问题更容易踩的地雷。优先通过包管理器安装对应的开发库例如缺库libssl就找libssl-dev这类包这才是正道。7.2 网络连通性排查ping、curl、ip网络问题是新手最容易懵的领域但实际上基础排查链条很短。ping用来测试目标主机是否可达ping -c 4 目标地址发送4个包并统计响应。注意ping不通不一定是机器宕机也可能是对方禁了ICMP协议。curl是调试HTTP服务的神器。curl -I https://example.com只看响应头能快速判断服务是不是活着、返回什么状态码curl -v https://example.com显示详细交互过程包括DNS解析、TCP连接、TLS握手和请求响应头。后端服务接口返回异常时先用curl直接打一遍能同时排查服务状态、路由、请求参数等很多问题。ip指令用于查看和管理网络接口ip addr查看本机IP和网卡状态ip route看路由表。很多老教程还在用ifconfig但现代发行版默认不再安装用ip系列更通用。新买服务器上不了网第一步ip addr看网卡有没有拿到IP第二步ip route看默认网关对不对第三步ping网关测链路最后再测外网这一套下来基本能定位绝大部分基础网络故障。7.3 快速定位服务端口问题还有一个非常常见的场景服务起来了但外部访问不到。这种问题大半是端口监听有误或防火墙拦截。先用ss或netstat看端口监听状态。ss -lntp中的-l表示监听中的连接-n不回显域名-t只看TCP-p显示进程信息。输出里0.0.0.0:8080表示监听在所有网卡的8080端口127.0.0.1:8080表示只监听本机回环地址。如果服务地址写成了127.0.0.1外部当然访问不到这是部署新人最常犯的配置错误。确认端口在监听后再确认防火墙没有拦截。ufw status看Ubuntu系统的防火墙firewall-cmd --list-all看有firewalld的系统。端口该放行的放行该关闭的关闭。排查外部访问问题时按“服务是否在跑、端口是否监听、防火墙是否放行、云安全组是否放行”这个顺序一路查下去基本能覆盖九成以上的场景。8. 一定要知道的避坑经验与效率技巧8.1 三个“后悔药”Tab补全、history、man先纠正一个误区命令行高手从来不靠背参数而是靠工具支撑。第一个助手是Tab键补全。输入命令、文件名、路径时按一下Tab自动补全按两下会列出所有匹配项。不仅能少打字还能避免路径拼写错误。第二个助手是history。输入history查看之前执行过的命令CtrlR进入反向搜索模式输入关键词就能快速找回历史命令。想重复执行上一条命令直接用!!。这里有个细节包含敏感信息如密码的命令会原样记录在历史里所以高敏感操作不要直接拼在命令行参数里改用交互式输入或配置文件。第三个助手是man。任何指令的参数忘了man 指令名打开权威手册。连man本身怎么用都可以man man查看。手册内容很长但用/搜索关键词很快。我使用新指令前几乎一定会先翻一眼man很多“为什么这样写”的疑问都能在那里找到答案。8.2 我踩过的最典型的坑挑几个真实发生在我身上的例子说。第一个是删错目录。当年我想清理/tmp/build下的临时构建产物结果手滑多打了一个空格写成rm -rf /tmp /build系统开始递归删除/tmp和根目录下的build目录好在执行中我立刻用CtrlC中断了才没造成更严重的后果。从那以后我删除关键路径前一定会先echo打印一遍指令确认无误再执行。比如准备执行rm -rf /tmp/build之前先跑ls -d /tmp/build确认路径存在且正确。第二个是权限锁死。有一次我给某个服务的家目录执行了chown -R但用户写错导致整个目录瞬间全部归属到错误用户服务起不来。恢复起来非常麻烦。教训是涉及批量chown/chmod前先看一下当前归属并用id 用户名确认目标用户的UID和组避免拼写或理解错误。第三个是磁盘写满。曾经有个日志文件不轮转几天时间涨到几十GB最终把根分区占满数据库直接连不上。从那以后我养成了习惯收到告警先df -h再du -sh找大目录处理完尽快上线日志轮转策略。这些经验未必能帮你完全避开所有坑但至少能让你踩坑时的损失小很多。8.3 值得养成的命令行使用习惯最后分享几个让我长期受益的习惯。第一写命令前先想清楚“我要看什么”。在删除、覆盖、批量修改之前先用只读命令确认一下比如ls、find、df、ps。确认没问题再动手养成“先查后动”的肌肉记忆。第二把常用别名写进配置文件。比如在用户配置文件里加上alias llls -lh、alias ..cd ..、alias gpgrep -i能显著提升日常效率。每次改动配置文件后记得source重新加载或者重开终端让配置生效。第三定期复盘自己敲过的命令。偶尔用history | awk {print $2} | sort | uniq -c | sort -rn | head -20统计一下高频命令能直观看到自己的使用模式。这样既能让操作流程更熟练也能发现哪类操作经常出错、哪些脚本可以进一步封装。命令行能力的提升没有捷径但方向对了效率会很快显现出来。