ARTICLE DETAIL

资讯详情

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

Linux初学必看:掌握目录树、权限与进程模型,搞定第一次作业

Linux初学必看:掌握目录树、权限与进程模型,搞定第一次作业 每年开学季总有一批人被第一次Linux作业劝退。不是作业有多难而是大多数人把顺序搞反了——先急着背命令背完就忘遇到报错更是一头雾水。我带过不少新人和学生也越来越确定一件事Linux第一次作业真正要过关的不是“记住几十条命令”而是趁这次机会把三个底层概念建立起来文件目录树、权限模型、进程模型。无论你拿到的作业是Ubuntu、Debian还是CentOS无论老师要求的是“完成五个命令操作”还是“写一个简单脚本”这篇文章都按第一视角完整走一遍。我会从环境搭建讲起把高频命令背后的原理拆开再把最容易翻车的几个场景按排查链路复盘最后聊聊怎么把作业做成加分项。内容偏基础但每一步都告诉你“为什么这样做”而不是单纯给答案。1. 第一次作业的隐藏考点先搞清楚老师到底在考什么很多第一次作业看起来就是“命令默写”查看当前目录、新建用户、复制文件、查看系统时间。于是大家打开搜索引擎把命令抄一遍交上去结束。但作业批改的真正意图往往不在命令本身而在命令背后那套操作系统组织资源的逻辑。1.1 一份典型作业题背后的能力点拆解我根据常见的Linux第一次作业整理了下面这张对应表。你看完就能明白老师每一道题都对应了一个能力点。作业要求表面动作背后的能力点用pwd、ls、cd查看目录结构记住三个命令理解“一切从根目录/开始”的目录树结构新建用户tom并设置密码useradd、passwd理解用户身份、用户组与家目录概念创建目录和文件再移动位置mkdir、touch、mv理解相对路径、绝对路径与文件操作权限查看系统时间和系统版本date、cat /etc/os-release建立系统状态审查意识为日后排查打下基础用grep和管道统计某个文件的行数grep、wc、管道|理解“命令之间可以协作”的思想写一个能运行的Shell脚本vim、bash script.sh综合运用多个命令并理解执行权限你发现没有这些题目没有一个是在考“打字速度”全部在考“你有没有理解操作系统怎么组织数据、怎么管理用户、怎么派发权限”。所以做作业时每敲一条命令最好停下来问自己一句这条命令到底让系统做了什么1.2 目录树、权限、进程三个必须建立的心智模型第一次接触Linux最难转换的是心智模型。Windows用户习惯“C盘、D盘、桌面、我的文档”Linux没有这些只有一棵从/开始的目录树。目录树可以类比成一栋楼的房号。/etc是楼里的管理室放各种配置/var是仓库日志、缓存都堆这里/home是住户房间每个用户一个门牌号。你用cd改变当前所在位置就像在楼里走动用pwd看自己在几层几号。权限模型可以类比成门禁卡。每个文件都有三组权限属主、属组、其他用户。读是r写是w执行是x。你有没有资格进这扇门看的是门禁系统里有没有你以及卡上给了多少权限。很多第一次作业就是围绕这些在出题。进程模型则像是楼里的工作人员。你敲下一条命令系统就派一个“进程”去执行它ps能看到这些人在干什么kill可以把某个人的活停下来。这三个模型比任何命令都重要。作业做得顺不顺利取决于这三个模型清不清楚。1.3 做完作业后要能回答的五个“为什么”我不建议只按题做题更建议用下面五个问题自检。能回答上来说明这次作业真正吃透了回答不上来说明还得回头再看。为什么删除目录要用rm -r而删除普通文件不用——因为目录里可能还有文件删除目录意味着递归处理整棵子树。为什么刚写完的脚本直接运行会提示Permission denied——因为新建的文件默认没有执行权限需要chmod x。为什么输入python有时提示找不到但python3却能用——因为系统里安装的是python3python只是软链接有些发行版干脆没建这个链接。为什么当前目录一般不在PATH环境变量里——防止你在任意目录下执行到同名的恶意脚本。为什么系统时间不同步会导致编译、请求HTTPS服务时出问题——因为证书校验和有些协议强依赖时间一致性。如果这五个问题你现在都能说出个大概恭喜你第一次作业就算拿不到满分也拿到了“懂系统”的入场券。2. 从镜像到第一条命令环境搭建才是第一道真正的坎我见过太多人不是输在命令上而是输在“根本没进入Linux”。环境搭建这一步劝退率最高。尤其是第一次接触虚拟机和镜像的同学很容易在安装阶段卡一整晚。这一章把环境准备的关键细节展开讲尽量帮你一次搞定。2.1 虚拟机、WSL、云主机还是物理机第一次作业怎么选不同场景适合不同方案我直接给结论。方式优点缺点适合人群虚拟机VirtualBox/VMware隔离性强随便折腾系统坏了不影响宿主机安装相对繁琐需要开启CPU虚拟化最推荐尤其是第一次作业WSLWindows Subsystem for Linux启动快Windows和Linux文件互通部分命令、系统行为与原生Linux有差异想快速跑命令但不追求完整系统的同学云主机云服务器真实服务器环境可远程访问要花钱且公网环境需要注意安全有服务器资源或想模拟运维场景物理机直接装性能最好体验最真实风险大误操作可能毁掉原系统不推荐第一次就上第一次作业只追求“能跑命令、能练文件操作”虚拟机是最稳的选择。VirtualBox免费VMware Player也够用。下载镜像时优先选官方或国内高校镜像站比如清华TUNA、阿里云开源镜像站速度比官方源快一个数量级。镜像版本方面Ubuntu Desktop带图形界面出问题时有个兜底比纯命令的Server版更适合新手。2.2 虚拟机安装的翻车现场蓝屏、虚拟化未开启、镜像不匹配这里列几个我亲眼见过的安装期事故以及对应的排查思路。“虚拟机安装时蓝屏”或者启动虚拟机时Windows直接蓝屏——第一反应不是重装而是检查BIOS/UEFI里有没有开启虚拟化技术Intel叫VT-xAMD叫AMD-V。很多品牌机默认关着进BIOS把“Intel Virtualization Technology”打开就好了。另外如果你下载的是ARM架构镜像装到x86电脑上也不可能跑起来先确认镜像架构和CPU一致。WSL安装报“Windows linux更新子系统安装向导提前结束由于错误”——这是Windows功能组件没开全或没重启导致。需要依次启用“适用于Linux的Windows子系统”和“虚拟机平台”两个可选功能然后务必重启。旧版本的WSL残留也可能导致安装向导中断先去“启用或关闭Windows功能”面板里确认勾选状态再重跑安装命令。下载镜像慢到怀疑人生——别死磕官方源。把https://mirrors.tuna.tsinghua.edu.cn/这类地址直接复制进下载工具通常几分钟就能下完。Debian 12用户如果遇到默认源连接失败也可以在安装阶段手动指定国内镜像。2.3 登录后第一件事更新源、看版本、建普通用户系统装好、登录进去之后不要急着做作业先把三件事做掉。第一更新软件源。Debian/Ubuntu系执行sudo apt update sudo apt upgrade -y这一步为什么必须先做因为系统刚装完软件源列表是空的或者旧的。如果你直接apt install大概率遇到“软件包找不到”或下载失败。先把索引刷新后面装东西才顺畅。第二确认系统版本和内核。cat /etc/os-release uname -a前者看发行版名称和版本号后者看内核信息。作业里如果要求“查看系统版本”这两条命令足够。第三创建自己的普通用户并加入sudo组。很多人图省事直接用root跑命令这在第一次作业里看似方便实际上会让你丧失对权限的敏感度——等你进入生产环境没人允许你用root操作。正确姿势sudo useradd -m -s /bin/bash yourname sudo passwd yourname sudo usermod -aG sudo yourname然后退出登录用新用户重新进入。-m是创建家目录-s /bin/bash是设定默认shell为bashusermod -aG sudo把用户加入sudo组这样你才有“临时借用root权限”的资格。2.4 中文字体、输入法与桌面环境的取舍如果你装的是带桌面的Ubuntu进入后大概率会遇到中文字体显示成方块、无法输入中文的问题。第一次作业不强制要求中文环境但看着满屏乱码很影响心情。建议先更新源再安装常用字体和输入法框架sudo apt install fonts-noto-cjk fcitx5 fcitx5-chinese-addons安装完成后在系统设置里把输入法切换到fcitx5重启一下会话一般就能用。实在不想折腾也可以直接在英文界面下完成作业命令行操作本身和中文无关。需要提醒的是桌面环境不是Linux的核心。真正内核态的东西不会因为你用GNOME还是KDE而改变。第一次作业重点在命令在终端里做事图形界面只是辅助。3. 文件与用户操作作业里的“高频送分题”也藏着坑第一次作业出题频率最高的模块就是文件和用户操作。这部分看着简单实际上坑最多。因为我见过太多人把ls -l的输出当乱码把useradd和adduser混为一谈还有人在rm -rf的边缘疯狂试探。3.1 先学会用ls -l读懂一切做文件操作第一件事不是ls而是ls -l。看下面这行输出-rw-r--r-- 1 root root 1024 Jan 12 10:00 test.txt这行信息量很大我拆给你看部分含义-文件类型-表示普通文件d表示目录l表示软链接rw-r--r--权限位共9个字符每3个一组分别对应属主、属组、其他人1硬链接数表示有多少个文件路径指向这个inoderoot root第一个是属主第二个是属组1024文件大小字节Jan 12 10:00最后修改时间test.txt文件名权限位里每个字母对应一个数字r4w2x1。所以rw-r--r--就是644rwxr-xr-x就是755。这个数字表示法在chmod里会常用到比如给脚本加执行权限就是chmod 755 script.sh。很多人不理解为什么目录的x权限很重要。可以这样想对目录来说x权限是“通行权”。没有x你哪怕能ls看到目录里的文件名也进不去这个目录。权限模型不是玄学就是一套精细的通行规则。3.2 文件增删改查的完整命令链第一次作业里最常见的几条操作命令我放在一起讲。touch newfile新建空文件。如果文件已存在则更新它的时间戳。cp source dest复制文件。复制目录要加-r比如cp -r dir1 dir2。mv oldname newname移动文件也可以当重命名用。热搜词里“linux用shell重命名文件”就是这个操作没有单独的rename命令mv就能干。rm file删除文件。删除目录要加-r。mkdir dir、rmdir dir创建、删除空目录。rmdir只能删空目录平时更常用rm -r。这五个命令背后关键是路径概念。你每次输入的相对路径系统都会以当前目录为基准去解析。比如当前在/home/user输入cd ../../etc就是从/home/user上跳两级到/再进etc。建议做作业时多混用绝对路径和相对路径能明显加深对目录树的理解。3.3 新建用户的正确姿势“新建用户”几乎是Linux第一次作业的必考题。这里最大的坑是useradd和adduser的混用。在Debian/Ubuntu上adduser是一个更友好的前端会自动帮你创建家目录、设置默认shell、生成用户组而useradd是底层命令默认情况下不会创建家目录也不会生成对应的用户组。很多新手用了useradd tom然后发现没有/home/tom一脸懵。如果你习惯用useradd请带上参数sudo useradd -m -s /bin/bash tom sudo passwd tom-m是创建家目录-s是设置shell。然后可以检查一下ls -l /home用ls -l看/home/tom目录的属主和权限就能直观感受到“每个用户有自己的地盘”这个设计。还有个理解点用户和组的关系。Linux一开始简化了身份模型——一个进程运行一定带着一个uid用户ID和gid组ID。你ls -l看到的root root就是文件的属主和属组。作业里如果要求“新建用户后把用户加入某个组”用的就是usermod -aG groupname username。3.4 rm删除目录为什么rm -rf被反复警告作业里如果要求“删除某个目录”你很快会搜到rm -rf。但我必须提前把风险拆清楚。rm file删除普通文件。rm -r dir递归删除目录及其内容。rm -f file强制删除忽略不存在的文件也不提示确认。rm -rf dir强制递归删除目录这是最危险组合。真正危险的不是这个命令本身而是脚本里变量的误用。比如有人写脚本:dir/tmp/test rm -rf $dir/一旦$dir因为某种原因变成空字符串这条命令就变成了rm -rf /。在root权限下它会尝试删除根目录下几乎所有内容后果就是系统直接崩掉。这不是段子是真实发生过无数次的运维事故。所以我的建议是第一次作业阶段卸载rm -rf这个选项改成mv 目标目录 /tmp/待删除_时间戳。把要删的东西先移到临时目录确认没删错再真正清掉。虽然多了一步但给了自己反悔的机会。这习惯放到生产环境能救你职业生涯。4. 进程、时间、网络与软件包那些“写了但没讲”的隐藏考法有些作业题会把进程查看、系统时间、网络配置、安装软件一起打包进去。看上去像是“附加题”实际上这些才是Linux系统管理的核心操作。第一次作业如果只练命令等于只学了方向盘没学仪表盘。4.1 ps aux与top第一次看懂进程表ps是查看进程快照的命令最常用的是ps aux其中a是显示所有用户的进程u是显示用户和CPU/内存信息x是显示没有终端的进程。输出里你会看到类似这样的行USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 16800 11472 ? Ss 08:01 0:02 /sbin/init重点看三列PID是进程ID就是系统派给每个任务的唯一编号%CPU和%MEM是资源占用COMMAND是这条进程对应的命令。看到PID你就知道进程比命令更底层——同一个命令可以被启动多次每次都有一个不同PID。top是动态刷新的版本按q退出。free -h可以单独看内存使用-h是人性化显示。第一次作业里只要能把这三者用起来就足够应付“查看系统状态”这类题了。顺带一提热搜词里的“linux进程间通信”虽然听起来很高级但第一次作业不要求你写管道之外的IPC。你只需要知道一个最直观的例子——管道|就是一种进程间通信方式它把一个命令的标准输出接到另一个命令的标准输入。4.2 系统时间不同步会引发什么连锁反应“linux查看系统时间同步时间”是高频搜索词说明不少人卡在时间这里。查看当前时间用date查看和修改时区用timedatectl。Debian系同步时间通常靠systemd-timesyncdUbuntu上一般默认开启。date timedatectl timedatectl set-timezone Asia/Shanghai systemctl status systemd-timesyncd为什么时间不同步是大问题我举两个很实际的例子。第一HTTPS证书校验依赖系统时间如果时间差太多浏览器和curl都会报证书错误你以为是网络问题实际上只是时间错了。第二日志记录需要时间戳时间跳来跳去排故障时连哪条日志在前都分不清。所以“查看时间”不是无聊的送分题而是运维意识的第一课。4.3 网络基础排查ip、ping、ss第一次作业偶尔会要求“查看网络状态”或“测试网络连通性”。这里最常用的三件套是ip addr # 查看IP地址和网卡状态 ping -c 4 8.8.8.8 # 测试网络连通性-c限制次数 ss -tlnp # 查看监听的TCP端口做个类比ip addr是看自己家的门牌号ping是敲门问邻居在不在ss -tlnp是看家里开了哪些窗户端口在等客人。排查网络问题时顺序一般是从底层往上先确认网卡有没有IP再ping网关再ping外部地址逐步缩小范围。这个排查链路比记住一堆命令更值钱。4.4 管道第一次感受命令的协作能力老师如果让“统计某个文件里出现了多少行error”单靠一个命令做不到但组合起来很简单cat app.log | grep error | wc -l这条命令链的意思是先读文件内容再过滤出包含error的行最后统计行数。管道符号|把前一个命令的输出递给后一个命令。这是第一次作业里最接近“编程思想”的部分——把一个复杂任务分解成几个小步骤每一步只做一件事。另外注意grep本身很强大grep -i忽略大小写grep -r递归搜索grep -n显示行号。做作业时多查一个-i或-n能少挨很多骂。4.5 安装gcc和python软件包管理的基本逻辑有些作业要求“编译一个C程序”或“安装Python”这背后是软件包管理。Debian系的命令是apt当你搜索“linux下载gcc编译器”或“linux系统安装python”时答案其实很简单sudo apt update sudo apt install gcc python3 python3-pip安装后验证一下gcc -v python3 --version然后写个最简单的C程序验证编译流程#include stdio.h int main() { printf(Hello, Linux\n); return 0; }保存为hello.c编译运行gcc hello.c -o hello ./hello这里有个细节./hello必须带./因为当前目录默认不在PATH里。这又和前面说过的command not found问题呼应上了。软件包管理还有个关键是“换源”。默认官方源在国外速度不稳定用apt之前把源换成清华或阿里镜像能节省大量时间。5. 第一次作业最容易翻车的五类现场按排查链路复盘第一次作业最痛苦的不是不会命令而是遇到报错不知道怎么办。这一章我不直接给“标准答案”而是把排查思路完整走一遍。你记住的是方法论而不是单个case。5.1 Permission denied先看属性和上下文别急着sudo现象执行脚本或写入文件时提示Permission denied。排查链路ls -l 目标文件 whoami id先看文件权限位是什么再看自己是谁、属于哪个组。如果是脚本没有执行权限chmod x 脚本名就能解决如果是往系统目录写文件比如/etc下普通用户确实没权限这时候才轮到sudo。很多人上来就sudo反而把权限问题盖住了下次遇到还得懵。给个场景你写了个test.sh运行./test.sh提示权限不足随后ls -l test.sh一看权限是-rw-r--r--根本没有x位。这是新建文件的默认权限不是bug。执行chmod x test.sh再试试。如果还不行再考虑是不是文件系统挂载参数或SELinux的问题但第一次作业通常到不了那一步。5.2 command not foundPATH与当前目录的误解现象输入某个命令名提示command not found。排查链路which 命令名 echo $PATH ls 当前目录两种情况最常见一是系统里根本没有这个命令需要先安装二是命令明明在但不在PATH里。比如你在当前目录写了个hello.py直接输入hello.py肯定找不到输入./hello.py才能运行。因为系统只在PATH指定的目录里找命令而当前目录.通常不在其中。理解PATH很关键它就是一个冒号分隔的目录列表。你执行任何命令shell都会依次去这些目录里寻找同名可执行文件。第一次作业如果遇到command not found十有八九是先装包再检查文件名而不是重启系统。5.3 乱码与换行符Windows习惯带进Linux的副作用现象在Windows上写的脚本放到Linux里运行报错或者输出乱码。排查链路cat -A 脚本名cat -A能显示隐藏字符。如果你的脚本每行结尾出现^M说明文件是Windows的CRLF换行。Linux只认LF^M会被当成内容所以脚本运行时可能报$\r: command not found。解决办法sed -i s/\r$// 脚本名或者安装dos2unix处理。乱码问题同理如果中文显示成方块多半是系统缺中文字体装fonts-noto-cjk即可。这些问题都不是Linux本身难而是两个操作系统的文本约定不同。5.4 误删文件没有后悔药但你可以先想清楚现象rm删完才发现删错了。很多人第一次作业就经历了这种“心碎时刻”。来说怎么回事一条rm -rf进脑子手速过快回车过后才反应过来路径写错了。Linux命令行没有回收站删了就真没了。所以我前面建议第一次作业期间把rm替换成mv到临时目录mkdir -p /tmp/trash mv 想删除的东西 /tmp/trash/等作业交完了再清空/tmp/trash。这样既练习了文件移动又避免误删。再强调一次如果你一定要用rm -rf先echo一下变量内容确认路径拼接正常再执行删除。5.5 系统起不来与网络连不上先看日志第一次作业如果涉及配置网络或SSH也可能遇到“系统起不来”或“远程连不上”的情况。别慌排查链路是先看服务状态再看日志。systemctl status sshd journalctl -u sshd --no-pager -n 50systemctl是管理服务的入口journalctl查系统日志。如果SSH连不上优先看sshd服务是不是在运行、监听端口是不是有问题再看防火墙有没有放行。日志里面通常会写明原因比无头苍蝇式重启有效得多。系统如果彻底起不来可以进恢复模式grub菜单里选advanced options或者用Live USB启动后挂载原磁盘去备份数据。第一次作业遇到这种情况反而是好事因为你提前体验了“故障排查”的完整流程这在后面的“linux运维故障案例”里全是考点。6. 把第一次作业写成加分项脚本、故障案例与面试的第一次握手作业及格很容易但想做出“手感”做成之后能在面试时讲出东西就得再往前走一小步。第一次作业是最低成本试错的机会我建议你做三件事作为加分项。6.1 用Shell脚本把作业“批量做完”比如作业要求“在/home下创建5个用户”你完全可以写一个Shell脚本而不是手动敲5遍。#!/bin/bash for name in tom jerry alice bob carol do sudo useradd -m -s /bin/bash $name echo $name:123456 | sudo chpasswd echo user $name created done这段脚本用到三个基础概念#!/bin/bash声明解释器、for循环遍历列表、管道将密码交给chpasswd。给脚本加执行权限后./create_users.sh运行即可。第一次作业如果交这个上去老师一眼就能看出你理解了命令的组合意义而不是抄了一堆命令。6.2 从作业到运维故障案例做个小实验热搜词里有“linux运维故障案例”很多同学以为这是老手才碰的东西。其实第一次作业之后你就可以给自己制造一个“安全的小故障”把某个服务的配置文件改错然后启动服务再看日志最后恢复。比如sudo systemctl stop sshd sudo systemctl start sshd sudo systemctl status sshd或者故意写一个错误的定时任务观察cron日志。这个实验让你体会日志的价值日志不是给人背的而是出错时用来定位的。做完这个实验你对“系统管理”的理解会超出作业本身一大截。6.3 面试题为什么总爱考常用命令“linux面试题测试”“linux常用命令大全”这些热搜词暴露了一个现实很多人是准备面试时才回头补基础。但我要说面试官真正想听的不是命令的拼写而是你面对一个问题时的排查路径。比如面试官问“新用户建完为什么没有家目录”他期待的是你讲出useradd -m的作用以及/etc/skel目录里模板文件的机制。这些内容第一次作业里全部接触过。所以建一个自己的命令笔记很有用每条命令后面记一句“它是干什么的出错时怎么查”。到了面试前翻自己的笔记比背任何题库都高效。6.4 第一次作业之后的路线参考做完第一次作业你已经掌握了三件事会搭环境、会基本文件与用户操作、会看系统状态。接下来的合理路线是Shell编程进阶变量、条件判断、循环、函数把这四样练熟。用户与权限深挖sudoers配置、ACL、文件属性。文本处理三剑客grep、sed、awk这是运维吃饭的家伙。systemd与日志看懂systemctl、journalctl能管理服务生命周期。网络服务入门配一个nginx或DHCP服务观察端口和连接状态。书的话入门阶段《鸟哥的Linux私房菜》仍然值得翻重点看基础篇。但光看不练没用最好的学习路径是“用坏一台虚拟机再重装一台”。我第一次接触Linux时一张作业也写得磕磕绊绊和大多数人一样卡在权限上、卡在PATH上、卡在换行符上。后来我发现出错本身才是学习路径重要的是把每次报错读完整、把排查链路走一遍而不是急着复制答案。如果你这次作业也被某个报错卡住了我建议你先别搜把错误信息抄下来逐词拆开看再结合ls -l、whoami、echo $PATH这些命令去验证猜测。等你自己把问题定位出来的那一刻真正的Linux学习才算开始。
返回列表