Linux基本操作指令详解:从命令行入门到系统排查

发布时间:2026/10/2 14:55:06
Linux基本操作指令详解:从命令行入门到系统排查 作为一个用过十多年Linux、踩过无数坑的老用户每次看到有人问“Linux怎么学”我给出的第一个建议永远是别急着装系统、配桌面、搞美化先老老实实把Linux基本操作指令练熟。这不是枯燥而是后续所有折腾的地基。命令行这东西初看像天书一旦摸清规律你会发现它比任何图形界面都顺手——批量操作、远程管理、脚本自动化全都靠它。这篇东西不是为了凑一篇命令列表而是想把这些年在终端里“混”出来的经验拆开讲。从目录跳转、文件操作到权限管理和系统排查每个命令适用什么场景、容易踩什么坑、哪个参数最常用尽量说得明白。无论你是准备面试、刚装好虚拟机还是工作中偶尔要登录服务器看一眼照着这篇文章练一遍基本够用了。1. 打开终端只是第一步人机对话的基本规则图形界面点多了人容易变懒。Linux服务器通常不带桌面你面对的就是一个黑底白字的窗口外加一个闪烁的光标。想和系统对话就得遵守它的语法规则。1.1 命令的基本组成结构一条完整的Linux命令通常长这样命令名 [选项] [参数]举个例子ls -lh /home/user其中ls是命令名告诉系统“我要列目录”-l和-h是选项分别表示“以详细格式显示”和“以人类可读的方式显示文件大小”/home/user是参数告诉系统“我要看这个路径下的内容”。初学时不必死记。命令确实多但高频核心命令也就二十来个。用多了一个自然就记住了跟开车一样档位用熟了根本不用低头看。1.2 终端里最实用的快捷键很多新手觉得敲命令慢其实是没学会快捷键。Tab键自动补全命令或路径。这个务必养成习惯不仅提高效率还能减少拼写错误。比如输入cd /ho然后按Tab系统会自动补成cd /home如果有多个匹配项连按两下Tab会列出所有可能的补全。Ctrl C终止当前正在运行的前台命令。Ctrl L清屏相当于输入clear不会中断当前进程。↑/↓快速调出历史命令同一命令反复执行时特别好用。Ctrl A/Ctrl E光标跳到行首 / 行尾改一条长命令时刷效率神器。提示Ctrl C和Ctrl Z不一样。Ctrl C是杀掉进程Ctrl Z是把进程挂起暂停你可以用fg把它带回前台继续跑。挂起的进程如果不处理会在后台堆积这个后面讲任务管理时再说。2. 目录与文件Linux系统的全部根基Linux里那句经典的话得反复念叨一切皆文件。目录是文件设备是文件甚至进程信息也在文件里。所以文件操作指令就是Linux操作的半壁江山。2.1 定位自己的位置pwd、cdpwdprint working directory显示当前所在目录。刚上手的人最常犯的迷糊就是不知道自己在哪敲pwd一下就能确认位置。cdchange directory用于切换目录。常见的几种用法cd # 回到当前用户的家目录 cd /var/log # 切换到绝对路径目录从根/开始的路径叫绝对路径 cd ../ # 返回上一级目录 cd ~ # 回到用户家目录等价于不带参数的cd cd - # 返回上一次所在的目录在两个目录间反复横跳时极好用2.2 列出目录内容的门道lsls是使用频率最高的命令但很多新手只会用裸ls。强烈建议从一开始就养成带参数的习惯ls -l # 长格式显示包含权限、属主、大小、修改时间 ls -a # 显示所有文件包括以.开头的隐藏文件 ls -lh # -h常和-l联合使用文件大小会以K、M、G为单位显示 ls -lt # 按修改时间倒序找最近改过的文件超方便还有一个组合技巧ls -lah这是我用的最多的一条。查看任意目录先来这么一下权限、大小、隐藏文件一次看清楚。2.3 创建与删除的冷静与克制mkdir、touch、rm创建目录用mkdir支持递归创建mkdir test # 创建test目录 mkdir -p /tmp/a/b/c # 自动创建父目录不存在就一并创建创建空文件用touch它的本义是更新时间戳但空文件也就顺手建了touch a.txt touch -t 202401011200 a.txt # 指定时间戳清理老化文件前常用删除是Linux里最需要谨慎的操作。rm没有回收站的概念删了就是真没了。rm -i file.txt # 删除前询问新手务必加-i rm -r dir/ # 递归删除目录 rm -rf dir/ # 递归强制删除慎用rm -rf是出了名的“删库跑路”命令执行之前深呼吸三秒确认路径没写错。我曾经就在服务器上多敲了一个空格差点把整个/usr目录送走。命令这种东西熟能生巧但怕的就是熟到麻木。2.4 复制和移动cp与mv的边界cp file.txt /tmp/ # 复制到指定目录 cp -r dir1 dir2 # 递归复制整个目录 cp -a dir1 dir2 # 归档模式复制时保留权限和链接属性备份目录时用这个mv既做移动也做重命名mv a.txt b.txt # 重命名 mv file.txt /tmp/file # 移动并顺便改名重命名到已存在的文件时mv会默默覆盖不加提示。预防方法就是mv -i安全第一。2.5 查找文件locate、find、whichlocate查数据库快但不实时新文件可能查不到需要先执行updatedb更新索引。find实时遍历目录慢一点但准确而且支持按时间、大小、权限过滤find /var -name *.log # 按名字找后缀是.log的文件 find /home -type d -name bak # 找目录 find /etc -mtime -3 # 找最近3天内修改过的文件which用于定位命令的可执行文件位置which python3 # 输出 /usr/bin/python33. 看文件内容是运维的基本功cat、less、tail、head日志排查、配置检查、脚本调试全都离不开看文件。不同场景有不同工具。3.1 短文件用cat长文件用lesscat会把整个文件一次性输出到屏幕上适合查看比较短的文件。如果文件几十MB直接用cat整个屏幕跟抽风一样滚完什么也看不到。看大文件要用lessless /var/log/syslog进入less界面后是上下翻页浏览支持空格向下翻页b向上翻页/关键词向下搜索?关键词向上搜索g跳转到文件开头G跳转到文件末尾q退出。less的关键优势是不会把整个文件读入内存大日志文件也能流畅翻看。长时间排查日志时我基本离不开它。3.2 滚动的日志要靠tail追踪服务器日志它是不断增长的我们需要的是“看新增的部分”这时用tailtail -n 50 app.log # 显示最后50行 tail -f app.log # 实时跟踪追加的内容CtrlC退出 tail -F app.log # 比-f更稳文件被轮转重建后仍能接着跟踪部署完服务看启动日志、调试接口看实时报错基本就是tail -F跟到底。head正好相反只显示开头部分基本和head -n 20这种用法绑定目的是“快速瞄一眼文件长什么样”。3.3 文本过滤grepgrep是从文件内容里搜索关键词的工具个人认为它是Linux里最值得投入时间熟练度的命令。常用几种方式grep error app.log # 在文件里搜包含error的行 grep -i error app.log # 忽略大小写 grep -r listen /etc/nginx/ # 递归搜索目录下所有文件 grep -n timeout config.ini # 显示行号改配置时方便定位 grep -v ^# nginx.conf # 反向匹配过滤掉注释行 grep -E error|warn app.log # 扩展正则匹配error或warn配合管道符|grep的威力会放大好几倍。比如查看某个进程有没有在跑ps aux | grep nginx或者查看端口监听状态ss -tlnp | grep 8080还有更进阶的grep -A 3 -B 3 exception app.log把匹配行前后各3行一起输出排查异常堆栈时非常实用。3.4 统计、排序、去重三件套日志分析三件套wc、sort、uniq配合grep和管道很多临时统计需求瞬间搞定。wc -l access.log # 统计行数 grep 500 access.log | wc -l # 统计500错误次数 sort file.txt | uniq -c # 统计重复行及出现次数 sort -rn -k 2 data.txt # 按第二列数值倒序排序比如想统计access.log里访问量最高的10个IPawk {print $1} access.log | sort | uniq -c | sort -rn | head -n 10这条命令本身就是一段非常典型的管道协作——awk取IPsort排序uniq去重并计数再sort -rn按次数倒序最后head取前10。初看可能有点晕但拆开来每一步就是一个独立的小命令。先用awk {print $1} access.log看第一列提取结果再sort看排序效果一步步替换着试很快就通透了。4. 文件权限看懂drwxr-xr-x从根源减少报错Linux多用户多任务权限系统是它的安全基石。新手最常遇到的报错就是Permission denied根源基本都在权限理解不到位。4.1 权限位逐段拆解执行ls -l第一列输出形如drwxr-xr-x共10个字符第1个字符表示类型。d是目录-是普通文件l是软链接c是字符设备b是块设备。第2到第4位是属主权限useru第5到第7位是属组权限groupg第8到第10位是其他用户权限othero。每三位里r代表读4、w代表写2、x代表执行1位置顺序固定-表示没有对应权限。拿rwxr-xr-x举例它等于位置权限字符含义数字表示属主rwx可读可写可执行7属组r-x可读可执行不可写5其他r-x可读可执行不可写5所以rwxr-xr-x写成数字就是755。4.2 chmod修改权限的实用姿势最常用的就这几个chmod x script.sh # 给脚本增加执行权限最常用 chmod -R 755 /data/ # 递归设置目录权限-R递归 chmod ux file # 仅给属主加执行权限 chmod 644 file.txt # 属主读写属组和其他用户只读在用chmod时数字法直观且一次到位符号法u/g/o /-/ rwx则更灵活。比如只想给当前用户增加写权限chmod uw file比算数字更快。4.3 chown修改属主和属组文件给错了人权限再大也没用。chown就是用来纠正归属的chown user:group file.txt # 把属主改为user属组改为group chown -R www:www /var/www/ # 整个网站目录都交给www用户 chown user file.txt # 只改属主部署Web服务遇到502或者403经常就是目录属组不对应用进程读不了文件。跑一条chown -R大多能解决。4.4 权限设计的一点实际经验生产服务器上最重要的原则是最小权限普通用户的umask默认是022新建文件默认644rw-r--r--新建目录默认755rwxr-xr-x这就够了。需要给Web服务如nginx、php-fpm读的目录属主设为该服务的运行用户其他用户能读即可不需要777。777是万恶之源意味着所有用户都能改这个文件一旦服务器被入侵后门随便写。有一次我在生产环境排查一个“诡异”的乱码问题最后发现是某目录配了777别的运维同事不小心把临时文件写进去了。这种情况虽然不常见但一旦发生就足以让人头皮发麻。5. 进程与系统状态服务器“体检”的基本手段光会操作文件只能算入门。Linux系统管理员的日常更多是确认“服务有没有活着、系统资源够不够、谁在占CPU”。5.1 查看进程大头兵psps aux # 显示所有进程的完整信息 ps -ef # 另一种格式同样是查所有进程 ps aux | grep nginx # 配合grep精准过滤ps aux里每一列的含义务必搞清楚USER进程属主、PID进程号、%CPUCPU占用率、%MEM内存占用率、VSZ虚拟内存大小、RSS常驻物理内存大小、TTY关联终端、STAT状态、START启动时间、TIME累计CPU时间、COMMAND命令行。重点看STAT列S表示睡眠R表示运行Z表示僵尸进程。如果僵尸进程数量多一般说明父进程没有正确回收子进程需要关注。5.2 动态监控要用top和htopps只拍快照实时监控要用toptoptop打开的界面里按P按CPU排序按M按内存排序按q退出。能看到系统负载load average、几个非常关键的统计行、以及每个进程的资源占用。当入口性能出问题时我第一反应就是跑top看是哪个进程在吃资源。更漂亮的替代品是htop如果系统没装apt install htop或yum install htop装上即可彩色界面“砍进程”的操作直观很多。不过在只有最小化环境的服务器上top一定是那个保底的工具。5.3 终止进程kill的精细操作kill PID # 默认发送TERM信号让进程自己收拾完再退出 kill -9 PID # 强制杀死内核直接清理不给善后机会 pkill -f python server.py # 按进程名匹配杀顺序上先kill15等几秒看看进程退没退再决定要不要用kill -9强杀。一上来就-9数据没来得及落盘配置没来得及保存容易把进程搞坏。这个道理类似人下班先好好交接完再关灯实在赖着不走才让保安请出去。5.4 磁盘和内存的体检命令df -h # 查看分区使用情况-h人类可读 du -sh /var/log/ # 统计目录总大小 du -sh * | sort -rh | head # 找当前目录下最占空间的东西 free -h # 查看内存与交换分区使用情况这三套可以说是我排查服务器“卡了”的固定起手式磁盘满了服务写不了日志表现就是卡内存爆了OOM Killer开始乱杀进程表现就是进程莫名其妙失踪。发现问题源头之后再决定是清日志、扩空间还是调整内存配置。df -h看到磁盘使用率变成100%的时候先别急着删用lsof L1查一下有没有已删除但还被进程占用的文件。这种情况通常是最隐蔽的文件删了但进程还握着句柄空间就是不释放。lsof L1能直接揪出这类进程然后重启对应服务即可。踩过一次坑后我再也不慌了。6. 压缩与解压打包和传输的基础工具日常传文件、拷贝备份、分发部署包绕不开压缩。Linux下的压缩格式多命令也各不相同但常用的就三种tar、zip、以及偶尔遇到的.7z。6.1 tarLinux下最核心的打包工具严格说tar先打包、再压缩。常见参数一套就能记住z代表gzip压缩c代表创建x代表解包v代表显示过程f指定文件名。tar -czvf backup.tar.gz /data/ # 打包并用gzip压缩 tar -xzvf backup.tar.gz # 解压到当前目录 tar -tzf backup.tar.gz # 不解压只查看内容 tar -xjvf backup.tar.bz2 # 处理bzip2压缩格式-czvf和-xzvf是一对前者创建、后者解压其余参数一模一样。看到tar.gz结尾的文件这套组合拳准没错。6.2 zip跨平台的高频格式Windows上双压缩的zip文件传到Linux上经常遇到中文乱码或者解压后目录结构不对。这时候用unzip配合参数解决unzip file.zip # 常规解压 unzip -O GBK file.zip # 指定编码为GBK解决中文文件名乱码 zip -r archive.zip /path/to/dir # 压缩目录别忘了-r遇到中文乱码时unzip -O GBK是我实测下来最有效的方案。如果你的发行版里unzip版本较老可能不支持-O参数那就需要装p7zip或者用unar来处理后者的自动编码识别能力更强。6.3 遇到.7z或者更多格式怎么办安装p7zip-full后可以统一处理7z、zip、tar等常见格式7z x file.7z # 解压7z 7z a archive.7z dir/ # 压缩为7z我还遇到过.rar格式的老文件装unrar即可。总之遇到不认识的压缩格式先file 文件名看它真实的格式类型再决定用什么工具别靠后缀猜。靠猜大约有20%的概率会翻车。7. 用户与组管理多人多角色环境的必需品前面提到过Linux是多人多任务系统。哪怕只有你自己用一台服务器也强烈建议建一个普通用户不要长期用root。7.1 用户的增删改查useradd -m -s /bin/bash alice # 创建用户alice-m建家目录-s指定shell passwd alice # 设置或修改密码 usermod -aG docker alice # 把alice加入docker组-aG追加 userdel -r alice # 删除用户并删除家目录注意useradd和adduser的区别Debian系里的adduser是交互式脚本会一步步问你密码和全名useradd是底层命令不会自动建家目录有的发行版还得加-m。我最早被这个坑过一次用useradd建完用户之后登录发现没有家目录整个会话乱糟糟的。7.2 组的管理groupadd devs # 新建组 usermod -aG devs alice # 把用户加入组 gpasswd -d alice devs # 把用户从组移除共享目录时组的概念特别有用。比如/data/project目录属组设为devs组权限设为rwx所有加进devs组的同事就都能访问了不用随便发777。7.3 为什么不建议长期用root用root一时爽出问题火葬场。root权限可以覆盖一切限制一个手滑执行rm -rf /或者改错系统配置文件恢复的成本往往难以估量。普通用户配sudo日常操作走普通权限需要特权时再临时提权这是所有生产环境的共识。visudo # 编辑sudoers文件把用户加进去推荐用这个命令用visudo编辑是因为它会在退出前做语法检查语法错误时不会让你直接保存避免了改崩/etc/sudoers导致所有用户都失去提权能力的情况。这个坑我在早期踩过改错一行sudo直接罢工只能进单用户模式去救。8. 网络排查基础从连不上网到服务不通部署一台Linux后网络配置和排查是绕不开的事。不用背太多命令先把这几条玩熟。8.1 查看IP地址和网络接口ip addr # 查看所有网卡IP老命令ifconfig已被取代 ip link show # 查看网卡状态重点看UP和DOWN状态网卡如果显示DOWN多半是没启用ip link set eth0 up可以手动拉起。8.2 测试连通性和DNSping -c 4 baidu.com # 测外部网络连通性-c指定包数量 ping -c 4 192.168.1.1 # 测网关 nslookup example.com # 测DNS解析 dig example.com # 更详细地测DNS如果ping外网IP能通但ping域名不通基本就是DNS配置问题检查/etc/resolv.conf里nameserver有没有写对。这里再分享一个比较隐蔽的坑某些云服务器或虚机环境里/etc/resolv.conf会被DHCP或NetworkManager覆盖。改完过一会儿又变回去看起来“明明配了却总不生效”。遇到这种情况要么在网卡配置文件里改DNS要么配好NetworkManager的连接设置光改resolv.conf治标不治本。8.3 查看端口监听和连接ss -tlnp # 显示所有监听中的TCP端口和对应进程 ss -tunap # 显示所有TCP/UDP连接包含源IP、目的IP、进程 netstat -tlnp # 老命令部分旧系统还有ss -tlnp是我在排查“端口被占用”时的第一选择。启动服务报Address already in use时找到占用进程的PID再决定是kill还是换端口。-t是TCP-u是UDP-l是监听状态-n不解析域名直接显示IP-p显示对应进程。初学者觉得ss参数难记其实和netstat几乎一致把常用的这个组合当成肌肉记忆就好。8.4 下载和传输文件wget https://example.com/file.tar.gz # 下载文件 curl -I https://example.com # 查看HTTP响应头 curl -X POST -d keyval http://api.test # 发送POST请求 scp file.txt userhost:/tmp/ # 基于SSH的远程拷贝 rsync -av /src/ userhost:/dst/ # 增量同步目录服务器上排查接口问题curl比浏览器好使一万倍。能看到状态码、响应头、请求耗时还能带-v看详细握手过程。比如接口偶发超时直接curl -w %{time_total}看总耗时或者用curl -w %{time_connect}、-w %{time_starttransfer}分阶段定位瓶颈在连接还是传输。9. 软件包管理装软件也要讲基本法不同的Linux发行版包管理器不一样这是很多新手换发行版后一脸懵的原因。9.1 Debian系Debian/Ubuntuapt update # 更新软件源索引 apt install -y nginx # 安装软件 apt remove nginx # 卸载软件 apt search nginx # 搜索软件 dpkg -l | grep nginx # 查看已装包日常运维中apt update和apt upgrade要勤跑但生产环境升级内核或大版本应用前一定要先在测试环境验证。早年间我在生产环境执行了apt upgradeOpenSSH被顺带升级配置格式有了变化结果远程登录直接断连要不是有带外管理口差点被关机房门外。从那以后生产机上对upgrade分别对待安全补丁要打大版本升级必须走变更流程。另外系统里自带Python版本可能偏老或路径不对热词里也有“linux系统安装python”。比较少动手的朋友可以记住一个干净的做法apt install -y python3 python3-pip不少发行版里python命令默认指向Python 2或者根本不存在直接用python3更稳。装Python包时能用apt的用apt补丁跟着系统走装不到了再用pip install --user避免污染系统级目录。9.2 RedHat系CentOS/RHEL/Fedorayum install -y nginx # CentOS 7及以前 dnf install -y nginx # CentOS 8及以后 systemctl enable --now nginx # 设置开机自启并立即启动RedHat系的包管理器在向dnf过渡但命令习惯和yum基本一致。装完软件后用systemctl管理服务是现代Linux的主流systemctl start nginx启动、systemctl enable nginx开机自启、systemctl status nginx看状态。查服务状态时也常用systemctl status加上journalctl -u nginx看日志后者能看到服务从启动到报错的完整输出。9.3 源码安装的通用三部曲如果包管理器找不到软件或者需要自定义编译参数就需要源码安装。经典的三步走是./configure --prefix/usr/local/app make make installconfigure脚本会检测系统依赖make编译make install安装。编译报错时绝大多数情况是缺了某个-dev或-devel包根据提示补装即可。不过这个流程渐渐少了“能装包就用包、能用容器就用容器”已经是共识源码编译通常只用于需要定制参数或上游尚未出包的情况。10. 必备武林秘籍man、--help、history最后这部分聊聊怎么“自己救自己”。Linux命令太多任何人都不可能全记住关键是掌握自助查文档的能力。10.1 万能手册manman ls # 查看ls的完整手册 man -k key # 按关键词搜索手册页man打开后按/搜索内容按q退出。手册页通常很长别硬读先看SYNOPSIS语法和EXAMPLES示例两部分就行。查某个参数的具体含义时在man里直接/参数名定位最高效。10.2 快速提示--help--help是各大命令的通用“快捷键”想快速了解一个命令支持哪些参数先敲一遍ls --help tar --help mv --help--help输出的信息虽然短但足够在绝大多数场景下给出答案。它和man搭配使用的节奏是先--help快速过一遍再对不清楚的参数查man。10.3 历史命令historyhistory # 列出当前shell的历史命令 history | grep nginx # 检索历史中的nginx相关操作 !! # 快速重复执行上一条命令 !history里的编号 # 重新执行历史中某一条history还有一个大用途出问题时回放自己到底执行过什么。曾经有次线上配置被意外改动我靠history | grep 找到了那条误重定向的命令还原了现场。给新手的建议是把man和--help当成“字典”遇到陌生命令先自己查一遍不要一上来就全网搜索。自己动手查出来的答案远比快餐式的搜索结果记得牢。我认识的很多老运维查命令的手速比搜索引擎还快。11. 从会用到熟练学习路径的一点建议光看命令列表看十遍也记不住。我自己带过的人总结下来最容易见效的学习路径是这三步。第一步装个虚拟机把基本指令当“日常语言”用。热词里多次出现“虚拟机安装linux”和“虚拟机安装linux系统”这就是最快上手的路径。VMware或者VirtualBox装一个Ubuntu Server不需要图形桌面就当成一台远程服务器用。每天强制自己在终端里完成“创建目录、移动文件、查日志、看进程”这些动作一周后基本操作就不会卡壳了。第二步从“用命令”过渡到“写脚本”。当你发现重复输入同样几条命令时就该学Shell脚本了。写一个简单的备份脚本、写一个自动部署脚本这才能真正体会命令行的威力。命令记了多少不重要能把命令串起来解决问题才算进阶。第三步用问题驱动学。比如面试题里常见的问题“Linux中如何查看端口占用如何查找大文件如何批量重命名文件”每一个问题背后都对应一组命令。面试和实操不一样但解决问题的思路是相通的知道有什么工具知道去哪里查文档遇到问题能自己定位。这套能力才是Linux真正的核心。命令行这东西初看满屏黑白、语法冷硬但用久了你会发觉它有种踏实的掌控感——每一个操作都清晰可控每一次自动化都能省下一大截时间。希望这篇内容能帮你少走一些弯路。