用Ubuntu这几年我最大的感受是很多人不是被命令难倒的而是被目录结构绕晕的。刚接触Ubuntu时你在终端里敲ls /看到一屏/bin、/etc、/usr心里肯定犯嘀咕这都啥玩意我装个软件、放个文件到底该扔哪Windows下有C盘D盘把东西放桌面就行到了Ubuntu里想找桌面目录发现路径怎么都对不上。这篇文章就把Ubuntu的系统目录彻底讲明白重点解决两件事一是让你看懂根目录下每个文件夹到底是干什么的二是告诉你Desktop目录到底在哪、为什么有时候找不到。不管你是刚装完Ubuntu的新手还是用了一段时间但只会跟着教程敲命令的朋友这篇都值得仔细看一遍。1. 先从Windows思维转变过来Linux目录设计到底想解决什么问题1.1 从盘符到单根树目录不是“地方”而是“组织方式”Windows用户熟悉的逻辑是C盘装系统D盘放软件E盘存资料U盘插进来是一个新盘符。这种设计直观但也带来了问题盘符一多文件散得到处都是系统盘的C:盘莫名其妙就满了软件装在D盘但配置文件写到C盘用户目录删起来无比麻烦。Ubuntu用的是完全不同的思路整台电脑只有一个根目录它是一棵倒挂的树不管你有多少块硬盘、多少个分区、多少个U盘都被“挂载”mount到这棵树的某个目录节点下面。你访问某个目录本质上就是在访问某个存储设备或某个数据来源。打个比方Windows像一栋独立别墅每个房间都有门牌号C盘、D盘Linux像一棵大树所有东西都挂在这棵树的树枝上树枝可以生长、可以更换但树干永远只有一个就是/。这个设计的最大好处是统一。程序不用关心自己的文件到底在哪块物理硬盘上只要按照标准路径去读写就行。系统管理员想换大硬盘把新硬盘挂载到原来的目录位置即可上面的路径一个都不用改。这种“一切皆文件、目录树统一管理”的思路是整个Linux世界的基石。理解了这一点后面看目录就不会觉得乱了。1.2 目录命名背后的FHS标准谁规定了这些目录根目录下这些目录不是Ubuntu开发团队拍脑袋定的而是遵循了一套行业标准叫FHSFilesystem Hierarchy Standard全称是文件系统层次结构标准。这套标准规定了Linux系统里目录应该怎么组织、每个目录该放什么内容、哪些目录必须存在。为什么要定这种标准想象一下你在一家公司当运维今天管理Ubuntu明天管理Debian后天换到CentOS如果每个发行版的目录都长得完全不一样你每换一台机器都要重新学一遍那日子就没法过了。有了FHS标准不管什么Linux发行版/etc底下一定是配置文件/home底下一定是用户家目录/usr/bin底下一定是可执行程序。这对开发者、运维、以及像我这样的普通用户都是巨大的便利。Ubuntu对FHS的遵循很严格但也有自己的小特色最典型的就是根目录下有/snap目录这是Ubuntu的snap软件包安装位置在别的发行版里你基本见不到它。后面拆解目录时我会单独说。这里你只需要记住一个判断方法看到一个陌生目录先想想它对应FHS的哪个角色再结合当前系统在哪个目录下了写过什么文件基本就不会猜错。1.3 目录权限和控制权为什么不能随便往根目录写文件在Windows里只要你用的是管理员账户基本什么目录都能写C盘根目录想建文件夹就建。Ubuntu则严格得多。你在终端里执行touch /test.txt试试大概率会收到Permission denied。这不是系统故意刁难你而是多用户系统的基本安全设计。Linux系统上可以同时存在多个用户每个用户都只对自己的家目录有完全的读写权系统目录比如/etc、/usr默认只允许root用户修改。普通用户想改系统配置必须借助sudo提权。这种设计的意图很明确防止用户不小心破坏系统核心文件也防止某个被入侵的账户把整个系统搞瘫痪。很多新手对这个权限模型不适应总觉得敲命令怎么动不动就要sudo。其实理解了就顺了系统目录相当于公司的核心档案室你作为普通员工可以查阅但不能随便改动要改得找管理员审批sudo。家目录相当于你的个人工位怎么折腾都行。这种清晰的权限划分恰恰是Ubuntu比Windows更安全的重要原因之一。2. Ubuntu根目录下的核心目录逐个拆解2.1 /bin、/sbin系统启动就要用的命令工具/bin和/sbin是最早出现在你眼前的两个目录。简单来说/bin存放的是系统启动和基础操作必不可少的命令比如ls、cp、mv、cat、bash这些普通用户就能执行。/sbin存放的是系统管理类命令比如fdisk磁盘分区、mkfs格式化、shutdown关机通常需要root权限才能用这里的s就是system或者superuser的意思。但在这里要提醒你一个Ubuntu的细节新版本的Ubuntu采用了一种叫usrmerge的方案把根目录下的/bin合并到了/usr/bin里。你实际执行ls /bin时看到的其实是一个指向/usr/bin的符号链接。这不影响使用但解释了为什么有时候你用find去搜索某个命令文件报错路径会出现在/usr/bin下。那/bin和/usr/bin要不要区分清楚对普通使用来说没必要你只要知道“命令文件装在这里”就行。但有个实际问题会出现当你写脚本或排查问题时如果某个命令提示not found你需要确认这个命令到底装没装、装在哪个目录。用which ls看看然后echo $PATH看看当前用户的PATH变量里包含哪些目录就能明白为什么系统能找到ls但找不到你手动安装的某个工具。2.2 /etc系统所有配置文件的大本营/etc是全系统最核心的配置目录我甚至愿意把它称为Linux系统的“命门”。网络配置、用户账户、软件源、环境变量全都在这里管理。举几个你最可能接触到的文件/etc/apt/sources.list以及/etc/apt/sources.list.d/Ubuntu的软件源配置。每次sudo apt update读取的就是它。国内用户通常要修改这个文件来使用国内镜像源改错一个字符apt就会报错。/etc/passwd和/etc/shadow用户账户信息。前者保存用户名、UID、家目录位置这些基础信息后者加密保存密码。你创建用户、设置密码系统背地里都在改这两个文件。/etc/environment和/etc/profile系统级环境变量配置。PATH变量的初始值就是在这里定义的。/etc/hostname你的主机名在终端里看到的那串userhost就来自这里。修改/etc目录下的文件务必小心。我的习惯是动任何文件前先sudo cp /etc/xxx /etc/xxx.bak留个备份再改。而且改完不是立刻生效要区分情况改apt源要sudo apt update改环境变量要重新登录或source改hostname要重启或执行hostnamectl命令。别改了文件发现没动静就以为没保存成功其实是没重新加载。这里必须强调/etc管的是全局配置会影响到所有用户。如果你只想改当前用户的配置比如给终端加上自定义别名、设置自己的代理变量应该去修改家目录下的~/.bashrc而不要去动/etc/environment。搞混了这个边界轻则配置不生效重则导致所有用户登录时异常。2.3 /home、/root用户数据的家/home是普通用户的家目录总目录下面每个用户一个子目录路径格式通常是/home/用户名。你在终端打开时的波浪号~就代表当前用户的家目录比如用户名为hello~就是/home/hello。你的文档、图片、下载、源码、配置文件全都应该放在这里。这里有个非常隐蔽的认知点家目录下大量配置都是以隐藏文件或隐藏目录形式存在的文件名以点开头默认ls看不见得用ls -a才能看到。最典型的是~/.bashrc当前用户的终端配置文件命令别名、终端提示符、环境变量都靠它。~/.config现代桌面应用、开发工具的配置目录VS Code、各种输入法的配置都在这。~/.sshSSH密钥和已知主机列表如果你配置GitHub SSH登录文件就在这里。这些隐藏目录虽然平时看不见但占据了你家目录八成以上的空间。很多人备份家目录时只复制了看得见的文件结果重装系统后软件配置全没了就是这个原因。root用户比较特殊它的家目录不是/home/root而是/root。和普通用户家目录的差别在于root家目录不能随便让普通用户读。平时我们用sudo -i或sudo su进入root环境后当前目录会切到/root这个细节在写脚本时容易踩坑你sudo su后创建的文件跑到/root下了再用普通用户去读就读不到。2.4 /var系统运行过程中不断变化的数据/var这个目录名是variable可变的缩写存放的是系统运行过程中持续增长或变化的数据。理解/var的关键在于和/usr区分/usr里放的是“静态的、安装好的程序文件”/var里放的是“运行时产生的、会变的数据”。对日常使用和排查问题来说/var最需要关注的是子目录/var/log这是系统日志的集中地。最常用的日志文件包括/var/log/syslog系统综合日志记录了内核、服务、应用的各种消息排查绝大多数问题都能从这里找到线索。/var/log/auth.log认证和登录日志谁在什么时间从哪里登录了系统SSH爆破尝试也会记录在这里。/var/log/kern.log内核日志驱动加载失败、硬件识别异常都在这里。查日志的通用方法很简单sudo tail -f /var/log/syslog实时盯着日志滚动然后去复现你的问题往往能立刻看到报错根源。这是比到处问人高效得多的排查思路。日志文件还有个特点不会无限增长。系统自带的logrotate服务会定期对日志做切割和压缩保留一定时间后自动清理。所以正常情况下你不需要手动删日志。但有些应用比如Docker长期运行、或者某些频繁写日志的服务会产生远超预期的日志量导致/var分区被塞满。这个后面在常见问题部分会专门讲排查方法。2.5 /usr用户程序的主要安装区域/usr是全系统体量最大的目录没有之一。它的全称叫Unix System Resources也就是Unix系统资源目录。很多刚接触的人以为usr是user的缩写觉得这是用户目录其实大错特错。Ubuntu安装的绝大多数软件包都装在这里。拆开看下面这些子目录你需要有印象/usr/bin所有用户可执行命令的主仓库数量比/bin大得多。Ubuntu的usrmerge方案已经让/bin变成它的符号链接了。/usr/lib和/usr/lib64系统软件和应用的动态链接库相当于Windows的DLL文件存放位置。很多“缺少依赖”的报错本质就是/usr/lib下少了对应文件。/usr/share程序运行所需的平台无关数据文件图标、字体、文档、帮助文件都在这。/usr/local这个目录要单独划重点。它专门用来存放管理员手动编译安装的软件也就是你从源码./configure make install跨进来的程序默认会装到/usr/local/bin、/usr/local/lib这些位置。distro包管理器apt装到/usr自己编译装到/usr/local两者互不干扰这是Linux里非常重要的约定。为什么非要分出/usr/local因为apt安装的软件会被包管理器统一管理重装系统或升级时会覆盖掉。而你手动编译的软件是包管理器不知道的放一起容易被误清理。放到/usr/local后系统升级、apt更新都不会碰它相当于是你自己的“私有安装区”。我现在手动装工具时如果有编译安装选项都默认走/usr/local从来没出过冲突。2.6 /tmp、/opt、/mnt、/media临时、第三方和应用挂载这四个目录看起来低调实际使用频率极高。/tmp是临时目录所有用户都可以往里写文件存放一些临时生成的数据。它的特点是系统重启后内容大概率会被清理某些配置下还会定期自动删除旧文件。所以下载到一半的安装包、随手导出的临时文件可以放这里但千万别放重要资料。我见过有人在/tmp下写代码重启电脑后整个项目直接蒸发追悔莫及。/opt是可选软件目录专门装第三方大型商业软件。比如某些需要手动解压安装的软件包、闭源SDK、JetBrains系列IDE的Linux版默认都装在/opt下。它的定位是包管理器管不着的、独立打包的软件放这里每个软件一个子目录卸载时直接删除对应子目录即可干净利落。/mnt和/media都是挂载点目录区别在于/media是桌面环境自动挂载移动设备的地方你插入U盘或移动硬盘系统会自动在/media/你的用户名/下创建一个子目录来访问设备内容/mnt则更适合管理员手动挂载网络共享、额外硬盘等场景。有个常见需求是把新硬盘挂载到/mnt/data这样开机后自动挂载到固定路径应用就可以稳定读写这个目录了。2.7 /proc、/dev、/sys虚拟目录系统运行时的“实时窗口”这三个目录不是传统意义上的“文件夹”它们不占磁盘空间是内核生成的虚拟文件系统更像是一扇实时查看系统状态的窗户。/proc里放的是进程和系统运行信息。你运行cat /proc/cpuinfo就能看到CPU型号和核心数cat /proc/meminfo能看到内存详情。系统里每个正在运行的进程在/proc下都有一个以进程ID命名的子目录里面有这个进程的启动命令、环境变量、打开的文件等信息。排查一个程序为什么起不来先看看/proc/对应pid/cmdline往往能发现启动参数不对的问题。/dev是设备文件目录。Linux把硬盘、键盘、终端、声卡都抽象成文件你往对应文件里写数据就是在操作设备。/dev/sda代表第一块SATA硬盘/dev/nvme0n1代表NVMe固态硬盘/dev/ttyUSB0代表USB转串口设备这也是你开发嵌入式经常要看的。刻录启动U盘时用dd命令写的是/dev/sdb这样的设备文件而不是某个目录理解这点对避免“刻错盘”至关重要。/sys目录则暴露了内核设备和驱动的运行状态很多底层参数可以在这里直接调节。比如/sys/class/backlight下的亮度控制文件、/sys/block/里面的块设备信息。平时不会频繁用到但遇到硬件功耗、风扇、亮度这类问题时排查路径通常就在/sys里。3. 用户目录和Desktop目录位置详解3.1 为什么有人找不到Desktop目录标题里说的“Desktop目录”是很多人实际使用中最容易卡壳的地方。先直接给结论Ubuntu桌面版里桌面目录的完整路径是/home/你的用户名/Desktop。比如你的用户名是hello桌面路径就是/home/hello/Desktop。那为什么很多人找了半天找不到常见原因有三个。第一个原因是用的系统版本或环境差异。如果你安装的是Ubuntu Server版或者某个精简桌面环境根本没有图形桌面自然不会生成Desktop目录。没有桌面功能找Desktop目录等于缘木求鱼。第二个原因最坑也是搜索量常年居高不下的关键系统语言环境。Ubuntu桌面版的默认目录命名会跟随桌面环境的语言设置。如果你的系统界面语言是中文系统可能创建的不是Desktop而是“桌面”这个中文目录。你在终端里用ls ~看看如果看到的是“桌面”那就对了。文件管理器里显示的“桌面”到命令行下可能就变成了中文名的目录。第三个原因是你或者某个配置工具修改过用户目录的映射关系。Ubuntu桌面环境用一套叫xdg-user-dirs的机制管理“桌面、下载、文档、图片”这些标准目录配置存储在~/.config/user-dirs.dirs文件里。如果这个文件被改动或删除桌面目录就会失效或指向错误位置。判断到底是哪种情况一条命令就能搞定ls -a ~把你家目录下的所有隐藏和非隐藏内容都列出来直接看有没有Desktop或桌面。再执行cat ~/.config/user-dirs.dirs看看XDG_DESKTOP_DIR一行指向的是哪个路径真相立刻水落石出。3.2 Desktop目录的真相是个真实目录还是符号链接弄清楚Desktop到底是一个真实目录还是一个软链接能帮你避免很多误会。在标准的Ubuntu桌面版安装流程下Desktop目录是一个普通的真实目录不是软链接。它的位置和显示名称完全由~/.config/user-dirs.dirs这个配置文件控制和决定。看一下这个文件的核心内容通常长这样XDG_DESKTOP_DIR$HOME/Desktop XDG_DOWNLOAD_DIR$HOME/Downloads XDG_DOCUMENTS_DIR$HOME/Documents XDG_PICTURES_DIR$HOME/Pictures如果系统语言是中文你打开这个文件会看到XDG_DESKTOP_DIR$HOME/桌面 XDG_DOWNLOAD_DIR$HOME/下载 XDG_DOCUMENTS_DIR$HOME/文档 XDG_PICTURES_DIR$HOME/图片这里就理解了一个关键知识点文件管理器里显示的“桌面”两个字是根据这个配置文件的路径值去渲染的本质是xdg-user-dirs这个标准在起作用。你把XDG_DESKTOP_DIR指向哪里桌面就在哪里。还有种情况需要特别说明如果你装了一些第三方桌面环境比如KDE Plasma或深度桌面或者把系统语言从英文切换成中文、从中文切换成英文目录名字会跟着变。切换语言后原来的Desktop目录并不会自动改名为桌面而是新环境按新规则去查找“桌面”目录找不到就新建一个结果就出现“桌面上文件不见了”的惊魂一刻。文件其实原封不动还在Desktop里只是桌面环境找错了位置或者你看看config文件指向的路径就明白了。3.3 自定义Desktop目录位置把桌面搬到数据盘知道了Desktop目录由config文件控制我们就能安全地修改它。有些人想把桌面目录放到一块单独的数据盘上或放在一个统一管理的空间下可以在不重装的情况下实现。步骤很简单但要按顺序操作否则桌面会变空。第一步创建新目录并迁移文件。假设你要把桌面移动到/home/hello/Documents/MyDesktopmkdir -p /home/hello/Documents/MyDesktop mv /home/hello/Desktop/* /home/hello/Documents/MyDesktop/第二步修改配置文件。编辑~/.config/user-dirs.dirs把XDG_DESKTOP_DIR这一行改成XDG_DESKTOP_DIR$HOME/Documents/MyDesktop第三步刷新配置xdg-user-dirs-update执行完重新登录一下桌面就会指向新目录。这里必须给出几个重度警告。第一修改前务必确认旧目录里的文件已经被完整迁移否则改了配置后旧目录在桌面上消失你也不一定记得去原来的路径找。第二不要只改配置不动目录也不要把多个标准目录都指向同一个目录否则会出现桌面和下载目录内容混在一起的情况。第三如果你用的不是GNOME桌面而是KDE、XFCE这些xdg配置文件可能不完全相同建议先备份config文件再动。最后再补充一个小常识Desktop目录本质上就是一个普通文件夹。你从远程终端传文件给机器传到/home/hello/Desktop桌面上立刻就会显示这个文件反过来桌面上存在的文件在终端里就是/home/hello/Desktop下的一个普通文件ls、mv、rm操作和普通目录完全一样。想往桌面放快捷方式也只是创建.desktop文件而已和目录本身没有关系。4. 新手最常踩的目录相关坑和排查技巧4.1 命令找不到或路径不对时怎么办用Ubuntu最常见的一个报错是command not found。你明明记得装了这个软件敲命令却提示找不到。这个问题的本质是Shell在PATH变量指定的目录里没找到可执行文件。先看当前PATH里有哪些目录echo $PATH输出通常是一串用冒号分隔的目录。如果你装完软件后没有把安装目录加进PATH命令自然找不到。临时解决方案是export PATH$PATH:/opt/某个软件/bin永久生效则要把这行写进~/.bashrc然后source ~/.bashrc或重新打开终端。排查命令位置时这几个工具很有用which命令查当前注册到PATH的命令所在路径。whereis命令能查到命令文件、源码、手册页的路径。type命令告诉我你的命令是内部命令、外部命令、还是别名。find命令全局搜索文件比如find / -name code 2/dev/null适合找那些不在PATH里的程序。有个特别容易踩的坑很多人修改环境变量时把PATH写错了导致连ls、cd这些基本命令都找不到。万一遇到这种情况不要慌用完整路径执行/usr/bin/ls然后赶紧把~/.bashrc或/etc/environment里写错的内容改回来。我的建议是修改系统级环境变量前先写好一条正确的export语句保存后不要在同一个会话里立即退出先用source测试一下命令还能不能正常执行。4.2 磁盘空间不足的常见元凶和清理方法系统用了一段时间很多人会收到磁盘空间不足的提示。此时第一反应不该是删数据而是先定位空间到底被谁占了。查看磁盘整体使用情况df -h查看当前目录下各子目录的大小du -sh *配合排序找出最大的几个目录。基于我的经验空间被吃掉的元凶排在前几名的通常是/var/log下的日志文件。长期运行的系统syslog、kern.log这些文件可能膨胀到几个GB。用sudo journalctl --vacuum-size100M可以快速压缩journal日志老派方式是清理/var/log下的压缩旧日志注意不要直接rm正在被进程写入的日志文件。/tmp下的临时文件。重启后一般会清空但在长期不重启的服务器上可能堆积很大。snap包缓存。Ubuntu的snap会保留多版本旧包用sudo snap set system refresh.retain2限制保留版本再清理不需要的snap先snap list看看然后用sudo snap remove 包名释放空间。apt缓存。/var/cache/apt/archives下的deb安装包会一直留着用sudo apt clean清空。Docker镜像。如果装了Docker/var/lib/docker可能占几十GB用docker system prune -a清理不用的镜像和容器。清理完再跑一遍df -h确认效果。记住一个理念日常维护的关键是别让日志和缓存无限膨胀而不是等到满了才来救火。4.3 目录被删或被覆盖的“高危操作”警示目录操作中最大的风险不是找不到目录而是误删、误覆盖。最臭名昭著的自然是rm -rf。例句sudo rm -rf / 会把整个系统删干净。虽然现在Ubuntu对根目录的删除操作加了保护但你如果在某个关键子目录下多打了一个空格或写错了路径后果一样严重。我的安全操作守则分享给大家第一删除前先ls确认。不管你要删除什么先ls -la看一下目标路径的内容确认没有重要文件再动手。第二能不用rm就不用rm优先用mv把文件移动到~/Trash或某个临时目录确认没误删再清空。第三涉及系统目录的修改先备份修改/etc文件前备份原文件是底线操作。第四多用Tab补全路径避免手输长路径时少了个点或多了个空格手输路径是误操作的重灾区。第五路径里带变量时加引号比如rm -rf $HOME/My Documents不加引号时空格会把路径拆成两个参数极容易删错。4.4 几个提高目录操作效率的命令技巧最后分享几个我日常离不开的目录操作技巧不复杂但能明显提升使用体验。第一个是cd -。在终端里输入cd -可以直接回到上一次所在目录在两个目录之间来回切换时不用反复敲路径效率极高。第二个是cd ~一键回到当前用户家目录比打完整路径舒服太多。第三个是pushd和popd适合需要记住多个目录的时候用。pushd /path/to/dir会切换并把你之前的目录压入栈中之后用popd弹回来。查看目录结构的帮手是tree命令如果没有装可以先sudo apt install tree。用tree -L 2 /etc可以限制只显示两层结构避免刷屏。分析目录空间占用时我强烈推荐ncdu它用交互式界面展示每个目录占多少空间可以用方向键层层进入定位大文件比反复执行du命令高效太多了。终端里快速跳转文件还有一个神器是fzf配合cd命令可以做模糊搜索切换目录输入几个字符就能匹配到目标目录用惯了基本离不开。这些工具本身都不复杂装好试一次就知道香了。最后分享点私人经验玩Linux这些年我帮人处理过非常多的Ubuntu使用问题复盘下来发现一个规律十个问题里至少有五个是目录或路径理解不清导致的。不是命令不会敲而是不知道文件被系统放到了哪里、自己该把东西放在哪里。所以这篇文章我不讲花里胡哨的黑客技巧而是把目录这件事讲透因为这是使用Ubuntu的地基。地基打好了后面学权限、学服务管理、学网络配置都是水到渠成的事。我个人建议新装好Ubuntu后先做一件事打开终端执行一遍ls -a /和ls -a ~然后对照这篇文章把每个目录浏览一遍看看里面都装了啥、自己能修改哪些、哪些碰都不能碰。花不了半个小时但会让你对整个系统产生一种“尽在掌握”的感觉。以后遇到关于目录的任何问题比如桌面图标不见了、下载的文件不知道去哪了、软件装了但命令找不到回来查查这篇文章里对应的小节多半问题就迎刃而解了。
阅读完成 · 觉得有帮助?