恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Linux基础操作指令实战:打通文件、进程与权限,掌握服务器运维核心
首页
资讯中心
/
Linux基础操作指令实战:打通文件、进程与权限,掌握服务器运维核心
Linux基础操作指令实战:打通文件、进程与权限,掌握服务器运维核心
发布时间:2026/10/11 11:32:42
说实话每次看到有人一上来就找“Linux命令大全”“某某命令速查手册”我都觉得挺可惜的。Linux基础操作指令这件事真正的价值不在于你背了多少条命令而在于你理解了这些指令背后文件、进程、权限这三个核心概念是怎么组织在一起的。把这三个东西打通了你敲进去的每一条命令都是活的不是死记硬背的字符串。这篇文章不打算做成那种“从A到Z列一堆命令”的百科全书而是会围绕真实使用场景把最常用、最容易被搞混、运维面试又最喜欢问的基础操作指令拆开揉碎讲清楚。看完这篇文章你能做到拿到一台全新的Linux服务器或者装了Linux的虚拟机敢上手操作知道去哪里看系统状态知道怎么装软件、怎么管文件、怎么处理权限问题。不管是学生、转行运维的新人还是写代码时被Linux环境折磨的开发者这篇文章都适合你。1. 先搞清楚你手里是什么终端、Shell与命令的本质1.1 终端不是命令Shell才是真正干活的很多新手第一个混淆点就是终端和Shell的关系。你打开的那个黑乎乎的窗口叫终端模拟器Terminal它本身什么都不会做只是把键盘输入传给Shell再把Shell的输出显示出来。真正解析命令、调用程序、管理输入输出的是登录Shell最常见的就是Bash。可以用个生活化的类比终端是前台接待Shell是后厨大师傅。你跟前台说你饿了前台把菜单递给后厨后厨真正给你做出菜来。Linux里你敲的命令99%的情况都是Shell在执行而Shell本身也是个普通的程序甚至可以换成zsh、fish这些别的Shell。1.2 命令怎么被找到的PATH变量的作用你敲lsShell怎么知道要去哪里找这个程序答案就是PATH环境变量。你可以自己在终端里执行下面的命令看看效果echo $PATH输出会是一堆用冒号隔开的路径比如/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。Shell会按顺序在这些目录里找你要执行的命令找到了就执行。这里有个经典的坑我见过不止一次有人编译安装了某个软件然后执行命令时报“command not found”但明明能确认软件装上了。原因就是安装目录没有加入PATH。解决办法是把这个软件的bin目录追加到PATH里export PATH$PATH:/opt/your-software/bin注意这里用的是$PATH意思是在原有PATH基础上追加不是覆盖。如果误写成export PATH/opt/your-software/bin那么除了这个目录其他所有系统命令都找不到了连ls都会报错。真遇到这个情况不用慌用绝对路径执行命令就能临时顶一下比如/bin/ls。1.3 绝对路径与相对路径的取舍Linux的路径系统是整个文件操作的地基。绝对路径是从根目录/开始的完整路径比如/home/user/test.txt。相对路径是相对于你当前所在目录的路径比如你在/home/user里要去/home/user/docs直接cd docs就行。实际写脚本或者做自动化配置的时候我的建议是能用绝对路径就用绝对路径因为脚本的执行环境不可控当前目录一变相对路径就全废了。但日常手敲命令相对路径效率更高。还有几个很关键的缩写得记住.代表当前目录..代表上一级目录~代表当前用户的家目录~user代表指定用户user的家目录-单独用代表上一次所在目录cd -可以在两个目录之间快速来回切换这个在反复看配置文件和日志的时候非常好用2. 文件与目录操作每天都在用的那十条命令2.1 看、进、建、改、删的完整闭环文件操作是Linux使用频率最高的部分我把它们串成一个完整场景来演示比单独背命令更好记。假设你要在一台新服务器上建一个项目目录并且想在两个地方来回切换着看文件pwd # 先看看自己现在在哪 ls -l # 看当前目录下有哪些文件带详细信息 cd /var/log # 切换到日志目录 cd - # 再切回刚才的目录 mkdir -p /data/services/webapp # 创建多层目录-p自动补全父子目录这里面有个细节值得展开。ls -l输出的第一列是文件类型和权限比如drwxr-xr-x这样一串。第一个字符如果是d说明是目录-说明是普通文件其余九个字符分成三组分别是属主、属组、其他用户各自的读(r)、写(w)、执行(x)权限。这个不展开细讲后面专门有一节说权限。mkdir -p这个参数我建议养成习惯它能递归创建所有不存在的父目录。比如上面的/data/services/webapp如果/data/services不存在不带-p直接报错带上-p一条命令全搞定。2.2 复制、移动与删除小心那几条“没有后悔药”的命令复制用cp移动或重命名用mv删除用rm。这三条命令本身不难难在每个都有需要格外留神的参数。cp -r /data/backup /data/backup_2025 # 复制目录必须加-r递归 cp -a /data/webapp /data/webapp_bak # -a参数保留权限、时间戳等属性 mv /data/old.txt /data/new.txt # 移动并重命名 rm -rf /tmp/temp_project # 强制递归删除慎用重点讲讲rm -rf。-r是递归删除目录下所有内容-f是强制删除不提示。这两个参数组合在一起的力量很大但危险程度也很高。生产环境里流传着各种因为rm -rf而误删数据的“事故传说”大多数都是因为路径变量写错导致的。我个人的习惯是能不用rm就不用优先操作到回收站式目录比如把文件移到/tmp下观察一段时间再删确实要删除重要数据先ls确认路径再删除绝对不打“盲删”删除前做一次目录备份比如cp -a哪怕多占点空间也比数据丢了强严禁在变量为空时执行rm -rf $VAR/这种写法因为如果$VAR没赋值命令就变成了rm -rf /整个系统都没了2.3 文本内容快速查看cat、head、tail、grep的组合拳服务器上的配置文件、日志文件全是文本查看内容的命令必须熟练。简单文件可以直接cat /etc/hostname # 看全部内容 head -n 20 /var/log/messages # 看前20行 tail -f /var/log/syslog # 实时跟踪日志文件的输出按CtrlC退出tail -f我不知道帮多少人省过时间线上排障看日志的时候基本离不了它。它会把文件新追加的内容持续打印在终端上程序运行时的报错、请求日志都能实时看到。要在大文件里找特定内容就得grep出场了grep -i error /var/log/app.log # 忽略大小写搜索error grep -rn 配置项名称 /etc/nginx/ # 递归搜索目录下所有文件-r递归-n显示行号 grep -v ^# /etc/ssh/sshd_config # 过滤掉以#号开头的注释行看有效配置grep -v这个反向过滤在日常操作里很实用比如你要看nginx的有效配置配置里全是注释你可以把所有注释行去掉再看配置文件结构就清爽多了。3. 用户与权限Linux安全模型的底线3.1 看懂权限位rwx到底是怎么算的很多新手照着教程执行chmod 755 file能成功但不知道755是怎么来的。实际上每个权限位都可以用一个数字表示读(r)4写(w)2执行(x)1。然后把三组权限各自相加就得到三个数字。比如755的含义是属主拥有读写执行权限4217属组拥有读执行权限415其他用户拥有读执行权限415所以chmod 755 script.sh就是把脚本设置为属主可以读、写、执行组内和其他人只能读和执行。这个权限模型在很多场景下都够用。还有一种更直观的写法是用字母形式chmod ux script.sh # 给属主(u)加上()执行(x)权限 chmod g-w,o-rwx report.txt # 去掉属组(g)的写权限去掉其他人(o)的所有权限 chmod -R 750 /data/app # 递归修改目录下所有文件的权限为7503.2 用户和用户组的增删改查用户管理也是一项基础高频操作。创建用户时我会强制加上指定家目录和Shell避免出现用户没有家目录、报错找不到主目录的情况useradd -m -s /bin/bash zhangsan # 创建用户并创建家目录、指定Shell passwd zhangsan # 设置或修改密码 usermod -aG docker zhangsan # 把用户追加到docker组-aG是追加不是替换属组 userdel -r zhangsan # 删除用户同时删除家目录和邮件目录重点注意-aG的用法。如果你写usermod -G docker zhangsan而用户之前已经属于多个其他组那么他会从原有组里被剔除只剩docker组。-a这个参数就是“追加”的意思防止误伤原有所属组。这个坑在给用户加sudo权限、加docker用户组的时候特别容易踩。顺便说一下查看用户的命令id zhangsan # 查看用户UID、GID以及所属组信息 groups zhangsan # 查看用户加入的所有组3.3 sudo到底是怎么回事很多人对sudo的理解就是“提权用的”但这个理解太笼统了。sudo的作用是允许授权用户以其他身份默认是root执行命令注意是“执行命令的瞬间身份切换”不是“登录到root”。我在线上环境排查问题的时候习惯凡是涉及状态查看的操作尽量用普通用户身份做只有确需改动系统配置、装软件、改权限时才用sudo。这样可以降低误操作的风险。有些操作必须用sudo比如编辑/etc/目录下的系统配置文件管理系统服务sudo systemctl restart nginx查看只有root才有权限看的日志sudo tail -f /var/log/secure安装或卸载系统级软件包查看用户是否有sudo权限只需要sudo -l这行命令会列出当前用户被允许以root身份执行的所有命令。如果输出的不是空白说明有这个权限。4. 进程与服务系统运行状态怎么掌握4.1 用ps查看进程用kill来结束进程很多时候你觉得“系统卡了”“程序不响应了”首先得搞明白是哪个进程在占资源。查看进程最常用的命令就是ps和top。ps -ef # 查看系统所有进程完整信息 ps -ef | grep java # 配合grep精确查找java进程 ps aux --sort-%cpu | head # 按CPU占用排序看谁最吃资源ps -ef输出的每一列信息包括UID哪个用户起的进程、PID进程号找它就靠这个数字、PPID父进程号、CPU占用、启动时间、实际的命令。排查问题时我一般先按CPU排序看看有没有异常进程再按内存排序看看谁占内存高。结束进程的命令是killkill 22345 # 先发TERM信号请求进程正常退出 kill -9 22345 # 强制杀死进程慎用 pkill -f 进程名关键字 # 按名字模糊匹配杀掉所有相关进程这里又有个关键知识点kill默认发送的是TERM信号这是给进程一个“自己退出”的机会让它有机会清理临时文件、关闭连接最后优雅退出。而kill -9发送的是SIGKILL强制信号直接把进程从内核层面杀掉进程没有机会做任何清理。所以杀进程的正确顺序是先用默认的kill PID等几秒看进程是否还在实在不行再用-9。还有个运维场景很常见Java程序或者Python服务怎么杀都不退出。这种情况通常是有子进程没有退出排查时用pstree -p PID看看进程树把子进程先解决掉父进程自然就退出了。4.2 systemctl现代Linux服务的启停管现在主流的Linux发行版Ubuntu 16.04之后、CentOS 7之后、Debian 8之后都使用systemd作为系统初始化程序管理服务就得用systemctl命令systemctl status nginx # 查看服务运行状态 systemctl start nginx # 启动服务 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务 systemctl enable nginx # 设置开机自启 systemctl disable nginx # 取消开机自启 systemctl daemon-reload # 重新加载服务配置文件改完单位文件后必须执行注意区分两件事systemctl stop是把运行中的服务停掉systemctl disable是禁止开机自动启动。这两条命令功能不同也不是联动关系。如果要彻底停用某个服务需要两条都执行。我之前被人问过一个问题为什么用systemctl查看服务状态时明明配置文件改过了重启也不生效答案很可能是daemon-reload没有执行。编辑了/etc/systemd/system/目录下任何.service文件都必须先执行systemctl daemon-reload让systemd重新读取配置然后再restart服务。4.3 查看系统整体状态top、free、df系统性能类似身体的健康指标不需要总看但出了问题就得知道怎么体检。三条命令就够了top动态显示进程列表按P按CPU排序按M按内存排序按q退出free -h查看内存占用情况-h让单位自动变成G或者Mdf -h查看磁盘分区使用情况-h同样是为了友好显示我把它们串成一个检查套路每次觉得系统不对劲就这么依次来一遍top # 看有没有进程占满CPU free -h # 看内存还剩多少swap有没有被大量占用 df -h # 看哪个分区满了日志是不是把磁盘撑爆了这个顺序很合理CPU占用高说明有异常进程在跑内存不足可能引发OOM重启进程磁盘满则可能导致服务写入失败甚至写不进去任何数据。排查任何服务异常先做这三步体检能过滤掉至少一半的常见问题。再看磁盘时注意一个细节df -h看的是文件系统空间但有时候明明删了文件空间却不释放。这是因为有进程仍然在占用被删除文件的句柄。排查方法lsof | grep deleted找出来的进程要么重启要么主动释放磁盘空间才会真正回来。这个问题在清理日志文件时特别常见属于运维必踩的坑。5. 软件包管理与网络排查装得上、连得上才算完5.1 apt与yum的差异与常用操作Linux系统装软件的方式因发行版不同而不同。Debian/Ubuntu系列用aptRedHat/CentOS/Rocky系列用yum或者dnf。命令结构高度类似我只以apt为例sudo apt update # 更新软件源索引装东西前先执行 sudo apt install -y nginx # 安装nginx-y自动确认 sudo apt remove nginx # 卸载软件但保留配置文件 sudo apt purge nginx # 卸载软件并清除配置文件 sudo apt autoremove # 自动清理不再需要的依赖包apt update经常被忽略但这一步非常关键。它会重新读取软件源的包索引只有索引刷新到最新版本之后apt install才能装到最新版软件。新服务器到手第一步就是执行apt update然后再用apt upgrade把所有已有包升级到源里的新版本。5.2 修改进程名称一个比较冷的技巧很多运维面试题会问到“如何修改进程名称”这东西听着偏门但确实能解决一些实际问题。主要有几种做法脚本语言如Python里用setproctitle库直接修改显示在ps里的进程名C/C程序里调用prctl系统调用启动进程时用exec -a custom_name命令Bash的exec -a参数比如我想让一个脚本在进程列表里显示成“web-server-main”而不是默认的python3 main.pyexec -a web-server-main python3 /opt/app/main.py跑起来之后用ps -ef看进程名那块会变成web-server-main。这招在有些服务需要多实例部署且需要快速区分不同实例场景下很有用。如果能看懂进程名的含义排查问题时压力会小很多。5.3 网络连通性排查ping、ip、ss最后说一说网络排查的四个基本动作。我判断网络问题遵循从本地到远端、逐层排查的思路ip addr # 查看本机IP地址与网卡状态相当于Windows的ipconfig ping -c 4 8.8.8.8 # 测试与目标主机的连通性-c限定次数为4不会无限ping下去 ip route # 查看路由表和默认网关 ss -tlnp # 查看本机监听的TCP端口-t TCP-l监听-n不解析域名-p显示进程ss是新一代的socket查看命令逐步替代老旧的netstat。如果程序连不上服务端先在本机用ss -tlnp确认服务端口到底有没有在听再用ping确认网络通不通最后用curl或者telnet做端口级别的连通测试。排查路径清晰了很多网络问题其实并不复杂。比如测试某台服务器能不能访问另一台的8080端口curl -v http://192.168.1.100:8080/health如果通了会有响应头输出如果不通则会有连接超时或者拒绝连接的错误提示根据提示再往上排查。6. 实战场景串讲从零到一操作一台服务器6.1 新服务器初始检查清单把前面的零散命令串起来模拟一下你刚拿到一台Linux云服务器或者刚装好一台虚拟机该怎么一步步完成初始检查和配置。我自己每次拿到新机器都是这个流程顺序很重要因为每一步都是下一步的基础# 1. 确认系统版本和架构 cat /etc/os-release # 2. 查看CPU和内存 nproc free -h # 3. 确认磁盘空间和分区 df -h # 4. 查看当前登录用户和IP whoami ip addr # 5. 更新软件源 sudo apt update sudo apt upgrade -y # 6. 创建自己的日常用户并加入sudo组 sudo useradd -m -s /bin/bash devops sudo passwd devops sudo usermod -aG sudo devops第6步特别值得一提。很多新手拿到服务器就直接root操作这对云服务器来说是一个安全隐患一个是误操作风险一个是如果root账号被暴力破解尝试登录被攻破后整台机器沦陷。正规做法是创建一个日常使用的普通用户用这个用户登录需要root权限时再sudo提权。6.2 从解压安装包到运行服务的完整链路再串一个“从拿到安装包到服务启动”的完整场景。假设你已经下载了一个软件压缩包app.tar.gz# 1. 查看压缩包内容但不急着解压 tar -tzf app.tar.gz # 2. 解压到指定目录 tar -xzf app.tar.gz -C /data/ # 3. 进入解压后的目录查看结构 cd /data/app ls -l # 4. 如果里面有可执行文件先赋执行权限再运行 chmod x bin/start.sh ./bin/start.sh # 5. 检查进程是否正常启动 ps -ef | grep app这里tar的参数要记牢-x是提取解压-z是处理gzip压缩格式-f后面跟文件名-t是列表查看-C指定解压目标目录。压缩用的参数则是-czf其中-c是创建压缩包。-v可以加显示详细过程但很多场景下不加更干净。后端服务起来之后有些还需要注册成系统服务让它开机自启。在/etc/systemd/system/下新建一个myapp.service文件内容大概是[Unit] DescriptionMy Custom App Afternetwork.target [Service] ExecStart/data/app/bin/start.sh Restartalways Userdevops [Install] WantedBymulti-user.target写完之后执行sudo systemctl daemon-reload sudo systemctl enable myapp sudo systemctl start myapp用systemd管理的服务有几个好处进程崩溃能自动重启Restartalways、开机自动启动、日志纳入systemd统一管理可以用journalctl -u myapp查看日志。比你直接后台运行一个脚本丢在那里强得多。6.3 日志查看套路从启动失败到定位原因服务没起来第一反应不是去网上搜“为什么启动失败”而是先看日志。定位问题的基本思路就是这么几步我理一下顺序# 1. 确认服务状态和错误信息 sudo systemctl status myapp # 2. 查看服务的日志输出 sudo journalctl -u myapp -n 50 --no-pager # 3. 如果应用有独立日志文件直接tail跟踪 sudo tail -f /data/app/logs/error.log很多启动失败的原因都是能在这个阶段被发现的常见的有配置文件格式错误程序启动时解析失败端口被占用报错Address already in use依赖的后端服务尚未就绪权限不足没有读配置或者写日志的权限看到了具体报错解决方向就明确了。日志是Linux问题排查最好的老师学会从日志里提取信息比死记硬背一百个命令都管用。7. 常用命令速查表与新手避坑指南7.1 高频命令一页纸把正文里提到的高频命令整理成一个速查表方便日常对照使用。没必要背多敲自然就记住了实在忘了就回来查一下操作场景命令作用说明查看当前位置pwd输出当前工作目录的绝对路径查看文件列表ls -l显示文件详细信息含权限、属主、大小切换目录cd /path切换工作目录cd -回到上一次目录创建目录mkdir -p a/b/c递归创建多层目录复制文件或目录cp -r src dst复制目录需加-r移动或重命名mv old new文件在同一个分区内操作很快删除并备份习惯rm -rf /path慎用删除前先确认路径查看文件内容cat、head、tail -f分别对应全文、前N行、实时跟踪文本搜索grep -rn 关键词 路径递归搜索目录内文本内容查看进程ps -ef | grep 关键词查看进程及PID结束进程kill PID或kill -9 PID先用默认信号无效再强制系统资源查看top、free -h、df -hCPU、内存、磁盘三板斧查看端口ss -tlnp查看监听端口及对应进程创建用户useradd -m -s /bin/bash 用户名创建用户并指定家目录和Shell修改权限chmod 755 文件把权限改为属主全权限、组和其他人读执行安装软件sudo apt install -y 软件名Debian系安装软件并自动确认服务管理systemctl start/stop/restart/status 服务名services的日常维护7.2 新手最常见的五个坑1. 盲目用root操作一切Linux的权限模型再复杂也是有道理的。日常操作尽量用普通用户身份登录需要权限时再临时sudo误操作的概率会低很多。root身份一旦操作失误比如删错了系统目录后果是不可逆的。2. 路径写错导致命令作用到了错误的文件上相对路径在脚本里是最大隐患。刚入门时写脚本尽量全部用绝对路径目录变量最好在脚本开头统一声明路径拼接用/明确连接。涉及删除操作时先使用echo把最终路径打印出来验证一下再执行。3. 忘了chmod x直接运行脚本报Permission denied写好的脚本先执行chmod x script.sh再运行./script.sh否则会报Permission denied。不要和“没有执行权限”搞混这不是系统拒绝只是权限位不够。4. 配置文件改了但服务没有重新加载改完系统服务的配置文件必须执行systemctl daemon-reload再重启服务改完应用程序自己的配置文件必须重启对应服务或应用否则配置不会热加载。这两个操作经常有人漏排查时优先检查。5. 磁盘满了但df显示还有空间其实是inode耗尽面试偶尔会问这个问题。文件系统除了磁盘空间还有一个叫inode的概念每个文件或目录都要消耗一个inode。当inode耗尽了即使磁盘还有空间也没办法创建新文件。排查用df -i如果显示的IUsed%接近100%说明inode满了解决办法通常是清理小文件数量太多的目录比如日志目录、邮件队列目录。7.3 学习路径建议不是背命令而是练场景最后分享一点个人体会。我学Linux的过程一开始也是到处找命令大全来背背了忘忘了再背效果很差。直到后来开始做真实练习装虚拟机、搭服务、写自动化脚本才发现真正的学习方式是“问题驱动”。当你遇到一个具体的需求然后为了满足这个需求去找命令、理解命令那个印象会深得多。建议你给自己设计几个“练手项目”在一台虚拟机里部署Nginx并能通过浏览器访问一个HTML页面把某个应用每天输出的日志定时打包压缩并清理7天前的文件写一个一键巡检脚本依次输出CPU、内存、磁盘、服务状态创建一个用户让它只能通过公钥登录并具备sudo权限每一项都不难但做一遍下来你基本就能把这些基础操作指令真正融会贯通了。遇到不会的命令用man 命令名查官方手册或者用命令名 --help看简要帮助初期慢一点没关系熟悉了以后自然就快了。