十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux基本命令入门到实战:文件操作、权限管理与系统运维全攻略

Linux基本命令入门到实战:文件操作、权限管理与系统运维全攻略 1. 写在前面为什么每个用电脑的人都该碰碰Linux先说我自己的经历。刚工作那会儿我对着黑乎乎的终端窗口完全懵连怎么从一个目录切到另一个目录都要查半天。后来被逼着在服务器上部署项目、排查日志、处理数据才硬着头皮把Linux基本命令啃下来。现在回头看这个决定太值了——不管是搞开发、做运维、跑数据分析还是单纯想把手头那台老电脑救活Linux都是绕不开的一环。这篇文章不搞什么高深理论就是把我这些年最常用的Linux基本命令、踩过的坑、总结出来的小技巧全部梳理出来。核心关键词就一个linux基本命令。但我会尽量讲清楚每条命令背后的逻辑而不只是列一个命令清单。你不需要记住所有参数关键是要理解“Linux下做一件事大概是什么思路”剩下的用到时查就好。适合谁看呢刚接触Linux的初学者、准备运维或开发面试的同学、想系统过一遍常用操作的老手都能从中找到有价值的信息。我把高频命令按场景拆开讲每一步都有实际例子哪怕你手头没有Linux机器也能在虚拟机里跟着操作。2. 整体学习路径先建立三个底层认知2.1 Shell、终端和命令的关系很多新手分不清“终端”“Shell”“命令”这三者的区别。打个比方终端是个窗口就像银行柜台Shell是柜员负责接收你的指令并分配给银行内部系统执行命令就是你在柜台填的单子。所以当你打开终端其实是在和Shell交互最常见的Shell就是Bash。echo $SHELL这条命令会输出当前Shell的路径通常是/bin/bash。理解这一点很重要因为后续所有命令都是“交给Shell去解析执行的”如果你写了错误的语法Shell会直接报错。另外Shell本身也是一门编程语言支持变量、循环、条件判断这也为后面写自动化脚本打下基础。第一个要学的命令其实是man它是manual手册的缩写。比如输入man ls就能看到ls命令的完整说明、参数选项、退出状态等。很多新人遇到没见过的命令就慌其实man在手天下我有。提示按q退出man页面按/进入搜索模式输入关键词可快速查找章节。2.2 Linux目录结构的直觉化理解Windows习惯用C盘、D盘分区Linux则是一棵从根/延伸出来的大树。你不需要死记硬背每个目录但有几个核心位置用多了自然就懂/home普通用户的家目录类似Windows的“用户”文件夹。比如用户zhangsan的家目录是/home/zhangsan。/etc系统配置文件集中地比如/etc/passwd存放用户信息/etc/nginx/nginx.conf是Nginx的配置。/var动态数据比如日志文件在/var/log。/tmp临时文件目录大家都能写但重启后可能被清理。/usr安装的软件、库、源代码等类似Windows的“Program Files”。我在实操中建议初学者多敲cd /切换到根目录再用ls -la一个目录一个目录地看把“这棵树”的骨架印在脑子里。后面你自己动手部署项目时才能知道文件该放哪里、日志去哪找、配置在哪改。2.3 再小的命令也自带帮助Linux世界里几乎所有命令都支持--help参数或者man 命令名。这看起来简单但很多老手也会忽略。比如你忘了find的-exec怎么写直接输入find --help | head -20就能快速看到前20行帮助信息。结合管道符|和head只显示最需要的内容省时省力。把“|管道”这个概念单独提出来说它就像一个传送带把前一个命令的输出传递给后一个命令作为输入这是Linux高效操作的核心思路。3. 文件与目录操作高频命令的细节和坑3.1 切换、查看、创建pwd、ls、cd、mkdir你在Linux里做的最多的事大概率是在文件系统里“游走”。我见过的初学者经常输入一堆绝对路径把自己绕晕其实掌握相对路径和绝对路径的区别就够了。pwdprint working directory打印当前所在目录cd切换目录ls列出目录内容。几点经验ls -l可以看到权限、属主、大小、时间ls -a显示隐藏文件以.开头的文件ls -lh人性化显示文件大小单位是K、M、G。cd -是返回上一次所在目录这个在A、B两个目录间来回切换时非常香。mkdir -p a/b/c会一次性创建多级目录省得一级一级创建。记得加-p不加的话目录不存在会报错。mkdir -p /tmp/test/project/logs touch /tmp/test/project/README.mdtouch这个命令也很常用文件不存在时创建空文件文件已存在时更新时间戳。在日志切割、批量生成占位文件时都用得上。3.2 复制、移动、删除cp、mv、rm的注意事项这三个命令是Linux入门必会但坑也非常集中。cp复制文件或目录。复制目录时必须加-rrecursive否则会提示omitting directory。如果你希望保留权限、时间戳等属性用cp -a。我在拷贝网站目录时经常用cp -a保证整个目录结构和属性一致。mv移动或重命名。跨文件系统时会先复制再删除所以超大文件在跨磁盘移动时可能比较慢要提前评估。另外mv不加参数就是“直接挪”如果目标文件已存在默认直接覆盖。日常操作中覆盖后才发现旧内容没了的大有人在所以重要文件操作前先备份或者设置别名alias mvmv -i每次覆盖前询问。rm删除文件或目录这是最容易出事故的命令没有之一。rm -rf几乎成了“删库跑路”的代名词。我的建议是时刻记得rm是永久删除不会进回收站。用rm -i让系统删除前确认尤其是刚入门阶段。重要目录删除前先ls -l看清楚内容再动手。注意写脚本时尽量避免rm -rf推荐用mv把不要的内容移动到/tmp或者专门的备份目录确认无误后再删除。这个习惯能救你很多次。3.3 查找文件find和locate的使用区别面试和实际工作中find和locate被问得很多。find是真正的“地毯式搜索”它直接在你要查找的目录中遍历所有文件能按文件名、类型、大小、时间、权限等条件过滤。缺点是速度慢因为实时遍历。find /var/log -name *.log -mtime -3这条命令的意思是在/var/log目录下查找文件名以.log结尾并且最近3天内修改过的文件。-mtime -3代表修改时间在3天以内-mtime 3代表3天以前。再配合-exec可以批量处理找到的文件比如把这批文件打包find /var/log -name *.log -mtime 7 -exec gzip {} \;注意{}代表find找到的每个文件\;表示-exec结束这里的转义分号不能丢。而locate速度飞快是因为它基于一个预建的数据库但数据库不是实时更新的刚创建的文件可能查不到。所以我的习惯是临时快速查找用locate需要精准条件或实时结果用find。如果你安装的Linux发行版没有locate可以先用sudo apt install locate或sudo yum install mlocate安装然后跑一次sudo updatedb更新数据库。3.4 查看文件内容cat、less、tail、head不同场景看文件用不同命令很多人只知道cat但这远远不够。cat适合查看小文件能把全部内容一次性输出。less适合查看大文件支持上下翻页、搜索、定位按/搜索关键词按q退出。tail -f是日志排查神器可以实时追踪文件新增内容比如tail -f /var/log/nginx/access.log。head -n查看文件前N行比如head -20 文件名。tail -n查看文件末尾N行。我调试程序时最常用的组合是tail -f加grep过滤tail -f /var/log/app.log | grep ERROR这样终端只显示新增的包含“ERROR”的行其他无关日志不过度淹没视线。另外grep -r可以在目录下递归搜索文本内容比如全站搜索某个关键词grep -r keyword /var/www/html。4. 文本处理三剑客grep、sed、awk的实战用法4.1 grep按行精确搜索grep是Linux里最常用的文本搜索工具加上引号更安全grep error /var/log/messages常用参数-i忽略大小写-n显示行号-v反向匹配即显示不包含关键词的行-c统计匹配行数-E启用扩展正则表达式比如统计当前目录下有多少个文件包含“root”这个单词不区分大小写grep -ric root /etc | grep -v :0 | wc -l不过对初学者来说我建议先掌握基本搜索、-i、-n、-v这四个就够覆盖大部分日常场景了正则表达式后面慢慢加深理解。4.2 sed流编辑器自动化增删改sed按行处理文本不会直接在原文件上修改除非你用-i参数。举几个高频例子sed -n 2,5p /etc/passwd # 只打印第2到第5行 sed s/old/new/g file.txt # 把每行所有old替换为new并输出 sed -i s/127.0.0.1/0.0.0.0/g config.txt # 直接修改文件最初我学sed只为了替换配置文件中的IP和端口。这个命令在批量修改多台服务器配置时好用到爆比如你有一百台机器需要把Nginx配置里的8080改成9090一条find加sed组合全部搞定find /etc/nginx -name *.conf -exec sed -i s/8080/9090/g {} \;4.3 awk按列提取和处理awk更高级它能把文本按分隔符拆分成“列”来操作。最经典的是查看系统用户列表/etc/passwd里的每一行按冒号:分隔第一列是用户名第三列是用户ID。awk -F: {print $1, $3} /etc/passwd-F:指定冒号为分隔符$1表示第一列$3表示第三列。实际工作中我常用来提取进程占用内存、日志里的状态码、CSV文件里某几列数据等。再配合排序sort和去重uniq能做不少数据分析的事cat access.log | awk {print $9} | sort | uniq -c | sort -rn这条命令将Nginx访问日志按状态码第9列分类统计再按数量倒序排列几秒钟就能定位到大量5xx错误的时间段。排序用sort -rn-r是倒序-n是按数值排序uniq -c是统计重复次数。5. 用户、权限与进程管理从入门到运维必备5.1 新建用户与用户切换在Linux里日常操作不建议永远用root权限过大容易误操作。正确姿势是普通用户日常使用需要管理员权限时再用sudo前缀执行。如果服务器上没有你的专属账号可以用useradd新建sudo useradd -m -s /bin/bash zhangsan sudo passwd zhangsan-m表示同时创建家目录/home/zhangsan-s /bin/bash指定默认Shell为Bash。忘了加-m的话用户家目录不会自动创建后面很多操作会遇到麻烦。创建完用户后需要给用户分配sudo权限编辑/etc/sudoers最稳妥的方式是用visudo命令打开找到类似root ALL(ALL) ALL的一行在下面添加zhangsan ALL(ALL) ALL这一行的含义是用户zhangsan可以在任何主机上以任何身份执行任何命令这是管理员级权限。如果只允许执行某几条命令可以精确限定但初学者用完整权限即可。切换用户用su - zhangsan或sudo -i进入root Shell退出交互用exit。5.2 权限位与chmod、chown每个文件和目录都有权限属性终端里执行ls -l就能看到类似drwxr-xr-x的字符串。第一位是文件类型d表示目录-表示普通文件后面9位每3位一组分别代表属主、属组、其他人的权限r4、w2、x1。所以chmod 755 file表示属主有读、写、执行4217属组和其他人有读和执行415。chmod 644 file表示属主可读写属组和其他人只能读。chown user:group file修改属主和属组比如网站目录一般要保证nginx用户可读。我记得自己早期部署网站时就遇到过“403 Forbidden”或“权限不够”其实就是用户或权限没配对。解决套路很简单先ls -l看文件属主再用chown把目录授权给运行进程的用户比如chown -R www-data:www-data /var/www/html。很多框架的上传目录、缓存目录写完代码后还要确保web服务进程有写权限不然报错报得你想哭。5.3 查看进程、杀死进程ps、top、kill排查机器卡顿、确认服务状态绕不开这几个命令。ps是静态视图配合参数可以列出所有进程ps -ef或ps aux。我习惯用ps -ef | grep nginx来确认Nginx是否在运行。top是动态视图实时显示CPU、内存占用排行按q退出。如果你想找某个进程的PIDpgrep -f nginx找到PID后用kill -9 PID强制结束进程。不过kill -9很暴力它不给进程“善后”的机会可能留下临时文件、未清理的锁等。温和的方式是先kill PID默认发SIGTERM信号让进程自己处理收尾过几秒看进程还在的话再kill -9。这个习惯在运维场景中很重要尤其是数据库、配置中心这类有状态服务。systemctl是管理服务的新一代工具systemctl start|stop|restart|status 服务名。要让服务开机自启systemctl enable 服务名。很多初学Linux的经常把“启动服务”和“设置开机自启”混为一谈记住前者是即刻生效后者是重启后生效两者要配合使用。6. 网络操作与远程传输scp、curl、wget的高频场景6.1 scp跨机器传文件服务器之间互传文件最常用的就是scp。基本用法scp /home/zhangsan/app.tar.gz root192.168.1.100:/opt/backup/这条命令把本机app.tar.gz传到远端机器的/opt/backup/目录。反过来从远端拉文件scp root192.168.1.100:/var/log/nginx/access.log ./access.log常用参数-P指定端口大写注意不是小写p小写-p在scp里是用来保留时间戳的-r递归拷贝目录-C启用压缩传输大文件时能明显提速因为scp走的是SSH协议所以需要目标机器的账号密码或SSH密钥。如果文件特别大也可以用rsync它支持断点续传、增量同步。安全要求高的场景建议配置SSH密钥登录既免密又安全。6.2 curl和wget请求测试和下载文件在服务器上测试接口curl是首选。我最常用的几条curl -I http://example.com # 只查看响应头 curl -X POST -d namezhangsan http://example.com/api curl -o output.html http://example.com # 下载并保存文件-I发的是HEAD请求适合快速判断服务是否正常、状态码是什么、响应时长如何。-X POST指定请求方法-d指定请求体调试接口时非常实用。wget则更偏向下载支持递归抓取、断点续传适合批量下载文件wget -c http://example.com/bigfile.iso-c就是断点续传continue下载到一半断了重新执行会接着上次进度继续而不是从头再来。系统没有装wget时用curl -O也能达到下载效果。6.3 端口与网络排查netstat、ss、ping排查“服务明明启动了但外部访问不了”的问题时先确认端口监听状态ss -tlnp | grep 8080-t显示TCP端口-l仅显示监听的端口-n以数字形式显示端口号-p显示进程信息。如果你机器上ss不可用老命令netstat -tlnp效果一样。如果没监听说明服务可能没起来或配置的端口不对如果监听地址是127.0.0.1说明只对本机开放外网自然访问不了要改成0.0.0.0。网络连通性用ping判断域名解析和网络是否通。不过很多云服务器禁pingping不通不代表服务有问题此时可以用curl或nc测试端口是否可连接。nc -zv IP 端口也是一种快速的端口连通性测试方式。7. 软件安装与环境配置从包管理器到Docker7.1 apt、yum、dnf三大包管理器速览不同发行版对应的包管理器不同Debian/Ubuntu用aptCentOS/RHEL用yum新版用dnf。安装软件前先更新索引sudo apt update # 更新软件包索引 sudo apt install nginx # 安装NginxCentOS上对应的就是sudo yum install nginx或sudo dnf install nginx。包管理器最大的好处是自动处理依赖关系不用自己手动去官网下载安装包、解决依赖。但也有很多场景需要手动安装比如装Python、Docker、Nginx的特定版本所以下面集合Shell脚本的方式也值得掌握。7.2 安装Python环境安装Python是很多项目部署的第一步。Ubuntu上可以直接用apt安装较老版本sudo apt install python3 python3-pip python3-venv但如果你需要指定版本更推荐用源码编译。下面是一个常见的Python 3.10安装流程wget https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz tar xzf Python-3.10.11.tgz cd Python-3.10.11 ./configure --enable-optimizations make -j$(nproc) sudo make altinstall重点解释一下--enable-optimizations会开启PGO等优化编译出的Python运行效率更高代价是编译时间明显变长make -j$(nproc)表示用所有CPU核心并行编译nproc返回CPU核心数。用altinstall而不是install是为了避免覆盖系统自带的python3。安装完成后用python3.10命令启动配合python3 -m venv venv创建虚拟环境保持项目依赖隔离。7.3 Docker的安装与基本命令现在部署服务Docker几乎是标配。Ubuntu下安装Docker官方推荐是用官方脚本但为了安全也可以按官方文档手动配置仓库。这里给出一种可靠方式sudo apt update sudo apt install ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io装完后启动服务并设置开机自启sudo systemctl enable --now dockerDocker基本命令就几个但每个都有讲究docker ps查看运行中的容器docker ps -a查看所有容器。docker images查看本地镜像。docker pull 镜像名拉取镜像。docker run -d -p 8080:80 --name myapp 镜像名后台运行容器并做端口映射。docker exec -it 容器名 bash进入容器内部。有个小坑是很多国内服务器拉官方镜像速度很慢实际部署时可以考虑配置镜像加速器但具体地址会随外部环境变化。更稳妥的思路是从自建镜像仓库或内网私有仓库拉取。7.4 下载后的压缩与解压日常部署里源码包或备份文件多以tar.gz格式打包tar命令几乎是必会的tar -czvf myapp.tar.gz /opt/myapp # 压缩ccreate zgzip vverbose f指定文件 tar -xzvf myapp.tar.gz # 解压 tar -xzvf myapp.tar.gz -C /opt/ # 解压到指定目录-C指定解压目标目录使用频率极高。如果是.zip文件用unzip解压没有安装的话先apt install unzip。解压前养成先tar -tzf 包名查看一下内容的习惯避免解压出一堆文件散落在当前目录里。8. 面试、日常问答与实战场景速查8.1 高频面试题背诵要点Linux基本命令是运维、开发岗位面试的基础题我梳理了几个经常被问到的高频点你可以对着自查如何查看Linux系统版本用cat /etc/os-release或uname -a。如何查看端口被哪个进程占用lsof -i:8080或ss -tlnp | grep 8080。如何查看磁盘和内存使用情况df -h查看磁盘free -h查看内存。如何查找大文件find / -type f -size 500M。如何查看Linux发行版的内核版本uname -r。如何给文件追加一行内容echo text file.txt注意是覆盖是追加这两个符号用错了会清空文件。8.2 误删文件与日志排查的一天举个例子某天你发现线上接口突然大面积5xx第一反应该怎么做tail -n 200 /var/log/nginx/error.log df -h free -h先看应用错误日志再看磁盘是否被写满、内存是否不足。磁盘满了会导致很多服务异常但报错信息五花八门极易掩盖真实原因。这个问题我遇到太多次了所以建议每次排查问题时第一件事习惯性检查磁盘和内存。操作系统层面没问题再去深挖应用日志。再比如误删了/etc/nginx/nginx.conf如果删之前做过备份直接解压恢复如果没备份那只能用nginx -t测试配置文件语法时会报错。所以强烈建议重要配置文件先cp一份带/root/backup/后缀的副本或者做定时备份脚本。人教人教不会事教人一次就会但这种“会”的代价太大了。8.3 命令组合思维用管道和重定向提升效率Linux的高效之处在于“小命令大道具”通过管道|和重定向、、把简单命令组合起来能完成很复杂的操作。举几个我常用的组合统计日志文件中每种状态码的数量awk {print $9} access.log | sort | uniq -c | sort -rn。查找系统中占用内存最多的前10个进程ps aux --sort-%mem | head -10。把命令输出同时存到文件和屏幕ls -l | tee output.txt。查找文件并复制到指定目录find /var/log -name *.log -mtime 30 -exec cp {} /backup/ \;。掌握组合思维的关键是“每个命令只做一件事然后把它们串起来”。这也是Linux哲学的一部分——单一职责、相互配合。当你会了这种思路面对复杂需求时就不会想着一个命令解决所有问题而是拆成几个小步骤每个步骤用熟悉的命令完成。8.4 国产系统与通用性考虑现在国产操作系统基于Linux内核的桌面或服务器系统使用越来越普遍好消息是Linux基本命令在这些系统上几乎完全通用。你在Ubuntu上练熟的一套命令换到国产系统上照样适用。包管理器可能会从apt换成yum或dnf目录结构基本一致systemctl、journalctl、grep、awk这些核心工具完全一样。所以我一直建议想学Linux的人不要拘泥于“某个发行版”先掌握通用命令再了解各发行版的差异。以后无论到哪台服务器上都能快速上手。9. 常见问题排查与避坑指南9.1 权限类错误Permission denied是新手最常碰到的错误。出现这个提示时先看当前用户和文件属主whoami ls -l 文件名如果是文件属主确实不是当前用户且你不是root就需要让管理员处理或者用sudo执行命令。如果你确实需要长期访问该目录可以让管理员把你的账号加入对应用户组比如usermod -aG www-data zhangsan然后重新登录生效。9.2 命令不存在与环境变量输入命令提示command not found分两种情况。一种是软件确实没安装比如curl不存在需要apt install curl。另一种是软件安装了但不在PATH中比如源码编译安装的Python可能在/usr/local/bin/python3.10而python3指向系统自带的另一个版本。此时可以手动指定绝对路径或者把路径写入/etc/environment。这类问题排查起来不难但思路要清晰先which 命令看当前命令所在路径再echo $PATH看环境变量是否包含该路径。9.3 误用覆盖符号清空文件和的区别其实不难但我见过不止一次事故。执行echo x config.txt直接覆盖原文件时Shell会先清空文件再写入。如果你本意是追加但手误用了文件内容就丢了。所以涉及配置文件的修改我强烈建议先备份再操作cp config.txt config.txt.bak sed -i s/old/new/g config.txt9.4 服务起停和端口冲突部署多个服务时经常遇到端口被占用。如果启动Nginx时报bind() to 0.0.0.0:80 failed先查端口占用ss -tlnp | grep :80找到对应的PID后用ps -p PID -o comm确认是什么进程再决定是否释放端口。有些服务意外退出后旧进程还残留着导致重启失败。这种情况先看进程列表再结束残留进程再启动服务比直接重启整个机器要高效得多。9.5 中英文文件名与特殊字符Linux文件名允许很多特殊字符比如空格、*、?、等。处理这些文件时最好用引号把文件名包起来rm my file name.txt或者使用转义符\rm my\ file\ name.txt。如果不加处理Shell会把空格当成多个参数轻则误删文件重则出事故。批量处理文件名时配合find -print0和xargs -0最稳不展开说了但用到时记得有这回事。10. 最后再分享一点我的实操体会Linux命令的学习本质上不是背参数而是建立“命令行解决问题的直觉”。我刚入门时靠的是多敲多试但更关键的是在真实场景里反复用部署一次网站你就把文件权限、服务管理、网络排查练了一遍处理一次日志你就自然记住了grep、awk、sort、uniq多装几次软件包管理器的逻辑也就通了。我也建议你准备一台虚拟机或者用云服务器来练手别怕弄坏——我在虚拟机上“练废”的系统数都数不过来但每次都从踩坑里学到新东西。真到了生产服务器上反而会谨慎很多。遇到不会的命令man和--help永远是最快的老师其次是搜索、看官方文档最后一个办法才是到处问人。如果你正在准备面试把这篇文章里提到的命令挨个敲一遍每个命令至少知道它的常用参数、使用场景、容易踩的坑基本就能应对大多数Linux基础问题了。Linux这条路上没有“毕业”这回事但每掌握一个命令你就多一分解决问题的底气。
返回列表