文章目录

  • 一、Linux 介绍
  • 二、Linux 的文件系统(File System)
    • 2.1 Linux 的文件系统架构
    • 2.2 /bin 和 /sbin
    • 2.3 /boot
    • 2.4 /dev
    • 2.5 /etc
    • 2.6 /lib
    • 2.7 /media
    • 2.8 /mnt
    • 2.9 /opt
    • 2.10 /proc
    • 2.11 /root
    • 2.12 /run 和 /sys
    • 2.13 /srv
    • 2.14 /tmp
    • 2.15 /usr
    • 2.16 /var
    • 2.17 /home
  • 最后总结

一、Linux 介绍

   Linux 系统大家一定不陌生,学习工作中肯定会和 Linux 打交道。不过谈及 Linux,给人的第一印象可能就是黑乎乎的命令行,乱七八糟的文件夹,甚至安装软件都不知道是怎么安装上去的。

   其实这些都是用惯了 Windows 的后遗症,多用用 Linux 就会发现这玩意还是挺好用的,关键还能 DIY,非常装逼。

二、Linux 的文件系统(File System)

2.1 Linux 的文件系统架构

   Linux 文件系统的一个整体结构,无论是什么 Linux 发行版,根目录/基本上就是这些文件。不要害怕这么多文件夹,大部分都不需要你操心,只要大概了解它们是干啥的就行了。

2.2 /bin 和 /sbin

  bin是Binary的缩写,存放着可执行文件或可执行文件的链接(类似快捷方式),如下图:

  可以看到cp,chmod,cat等常用命令都在这里。注意不要被图标上的 TXT 字样误导了,Linux 不按后缀识别文件类型,/bin目录中的文件都是可执行的二进制文件,而不是文本文件。

  /sbin目录与/bin类似,是System Binary 的缩写,这里存放的命令可以对系统配置进行操作。普通用户可能可以使用这里的命令查看某些系统状态,但是如果想更改配置,就需要sudo授权或者切换成超级用户。

  可以看到一些熟悉的命令,比如ifconfig,iptables。普通用户可以使用ifconfig查看网卡状态,但是想配置网卡信息,就需要授权了。

2.3 /boot

   /boot这里存放系统启动需要的文件,你可以看到grub文件夹,它是常见的开机引导程序。我们不应该乱动这里的文件

2.4 /dev

  dev是device的缩写,这里存放着所有的设备文件。在 Linux 中,所有东西都是以文件的形式存在的,包括硬件设备。鼠标、键盘等等设备也都可以在这里找到。

  比如说,sda,sdb就是我电脑上的两块硬盘,后面的数字是硬盘分区:

2.5 /etc

  如果你要修改一些系统程序的配置,十有八九要到etc目录下寻找。

  这个目录经常使用,存放很多程序的配置信息,比如包管理工具 apt:
  在 /etc/apt 中就存放着对应的配置,比如说镜像列表(我配置的阿里云镜像):

2.6 /lib

  lib是 Library 的缩写,包含 bin 和 sbin 中可执行文件的依赖,类似于 Windows 系统中存放dll文件的库。

  也可能出现lib32或lib64这样的目录,和lib差不多,只是操作系统位数不同而已。

2.7 /media

  这里会有一个以你用户名命名的文件夹,里面是自动挂载的设备,比如 U 盘,移动硬盘,网络设备等。

  比如说我在电脑上插入一个 U 盘,系统会把 U 盘自动给我挂载到/media/fdl这个文件夹里(我的用户名是 fdl),如果我要访问 U 盘的内容,就可以在那里找到。

2.8 /mnt

  这也是和设备挂载相关的一个文件夹,一般是空文件夹。media文件夹是系统自动挂载设备的地方,这里是你手动挂载设备的地方。

  比如说,刚才我们在dev中看到了一大堆设备,你想打开某些设备看看里面的内容,就可以通过命令把设备挂载到mnt目录进行操作。

  不过一般来说,现在的操作系统已经很聪明了,像挂载设备的操作几乎都不用你手动做,系统应该帮你自动挂载到media目录了。

2.9 /opt

  opt是 Option 的缩写,这个文件夹的使用比较随意,一般来说我们自己在浏览器上下载的软件,安装在这里比较好。当然,包管理工具下载的软件也可能被存放在这里。比如我在这里存放了 Chrome 浏览器(google),网易云音乐(netease),CLion IDE 等等软件。

2.10 /proc

  proc是process的缩写,这里存放的是全部正在运行程序的状态信息。你会发现/proc里面有一大堆数字命名的文件夹,这个数字其实是 Process ID(PID),文件夹里又有很多文件。

  前面说过,Linux 中一切都以文件形式储存,类似/dev,这里的文件也不是真正的文件,而是程序和内核交流的一些信息。比如说我们可以查看当前操作系统的版本,或者查看 CPU 的状态:

如果你需要调试应用程序,proc目录中的信息也许会帮上忙。

2.11 /root

  这是超级用户的家目录,普通用户需要授权才能访问。

  区别一下 root 用户和根目录的区别哈,root 用户就是 Linux 系统的超级用户(Super User),而根目录是指 / 目录,整个文件系统的「根部」。

2.12 /run 和 /sys

  用来存储某些程序的运行时信息和系统需要的一些信息。比如说下面这个路径有一个名为 brightness 的文件:

sudo vim /sys/devices/pci0000:00/
0000:00:02.0/drm/card0/card0-eDP-1/
intel_backlight/brightness

:里面存储着一个数字,是你的显卡亮度,你修改这个数字,屏幕亮度就会随之变化。

  需要注意的是,这两个位置的数据都存储在内存中,所以一旦重启,/run和/sys目录的信息就会丢失,所以不要试图在这里存放任何文件。

2.13 /srv

  srv是service的缩写,主要用来存放服务数据。

  对于桌面版 Linux 系统,这个文件夹一般是空的,但是对于 Linux 服务器,Web 服务或者 FTP 文件服务的资源可以存放在这里。

2.14 /tmp

  tmp是temporary的缩写,存储一些程序的临时文件。

  临时文件可能起到很重要的作用。比如经常听说某同学的 Word 文档崩溃了,好不容易写的东西全没了,Linux 的很多文本编辑器都会在/tmp放一份当前文本的 copy 作为临时文件,如果你的编辑器意外崩溃,还有机会在/tmp找一找临时文件抢救一下。
  比如下图的VSCode Crashes应该就是 VScode 编辑器存放临时文件的地方。

  当然,tmp文件夹在系统重启之后会自动被清空,如果没有被清空,说明系统删除某些文件失败,也许需要你手动删除一下。

2.15 /usr

  usr是 Universal System Resource 的缩写,这里存放的是一些非系统必须的资源,比如用户安装的应用程序。

  /usr和/usr/local目录中又含有bin和sbin目录,也是存放可执行文件(命令),但和根目录的bin和sbin不同的是,这里大都是用户使用的工具,而非系统必须使用的。

   比如说/usr/bin中含有我通过包管理工具安装的应用程序 Chrome 浏览器和 goldendict 字典的可执行文件:

   值得一提的是,如果使用 Linux 桌面版,有时候在桌面找不到应用程序的快捷方式,就需要在/usr/share/applications中手动配置桌面图标文件:

2.16 /var

  var是variable的缩写,这个名字是历史遗留的,现在该目录最主要的作用是存储日志(log)信息,比如说程序崩溃,防火墙检测到异常等等信息都会记录在这里。

  日志文件不会自动删除,也就是说随着系统使用时间的增长,你的var目录占用的磁盘空间会越来越大,也许需要适时清理一下。

  这是我的/var/log目录,可以看到很多系统工具的 log 文件(夹):

2.17 /home

  最后说home目录,这是普通用户的家目录。在桌面版的 Linux 系统中,用户的家目录会有下载、视频、音乐、桌面等文件夹,这些没啥可说的,我们说一些比较重要的隐藏文件夹(Linux 中名称以.开头就是隐藏文件)。

  这是我的家目录的部分文件:

  其中.cache文件夹存储应用缓存数据,.config文件夹存储了一部分应用程序的配置,比如说我的 Chrome 浏览器配置就是那里面。但是还有一部分应用程序并不把配置储存在.config文件夹,而是自己创建一个隐藏文件夹,存放自己的配置文件等等信息,比如你可以看到 Intellij 的配置文件就不在.config中。

  最后说.local文件夹,有点像/usr/local,里面也有bin文件夹,也是存放可执行文件的。比如说我的 python pip 以及 pip 安装的一些工具,都存放在~/.local/bin目录中。但是,存在这里的文件,只有该用户才能使用。

  这就是为什么,有时候普通用户可以使用的命令,用 sudo 或者超级用户却被告知找不到该命令。因为有的命令是特定用户家目录里的,仅被添加到了该用户的PATH环境变量里,只有他可以直接用。你超级用户想用当然可以,但是得写全绝对路径才行。

最后总结

  如果修改系统配置,就去/etc找,如果修改用户的应用程序配置,就在用户家目录的隐藏文件里找。

  你在命令行里可以直接输入使用的命令,其可执行文件一般就在以下几个位置:

/bin /sbin/usr/bin/usr/sbin/usr/local/bin/usr/local/sbin/home/USER/.local/bin/home/USER/.local/sbin

  如果你写了一个脚本/程序,想在任何时候都能直接调用,可以把这个脚本/程序添加到上述目录中的某一个。

  如果某个程序崩溃了,可以到/val/log中尝试寻找出错信息,到/tmp中寻找残留的临时文件。

  设备文件在/dev目录,但是一般来说系统会自动帮你挂载诸如 U 盘之类的设备,可以到/media文件夹访问设备内容。

Linux文件系统架构相关推荐

  1. 每个程序员都应该知道的Linux基础知识!全文4900字,没有耐心的不建议看 ——( Linux文件系统 + 系统管理类命令 + bash基础特性)

    文章目录 - Linux的文件系统 - LSB - FHS - 根文件系统 - 对根文件系统下目录的概述: /boot /bin /sbin /lib /lib64 /etc /home /root ...

  2. linux 文件系统 vfs,Linux 万物皆文件—VFS文件系统

    linux 里面当我们执行 ls -li 命令 的时候会发现,很多文件类型.例如: – 普通文件 d 目录文件 s socket 文件 b 块设备文件 比如说磁盘 l  连接文件 p 管道文件 他们虽 ...

  3. linux 删除分区_详解linux系统架构--文件系统体系

    概述 之前已经对Linux系统架构的内核部分单独做了深入介绍,今天就拿Linux系统架构中的文件系统做一下介绍吧~先介绍下概念: 文件系统是文件存放在磁盘等存储设备上的组织方法.Linux系统能支持多 ...

  4. 深入linux内核架构--虚拟文件系统VFS

    [推荐阅读] Linux内核源码分析--内核启动之zImage自解压过程 你应该知道的Linux内核基础及内核编译 深入理解LINUX内核堆栈 [零声教育]vico老师教你怎么学习Linux内核 值得 ...

  5. Linux——Linux概念架构的理解

    摘要 Linux kernel成功的两个原因:(1)灵活的架构设计使得大量的志愿开发者能够很容易加入到开发过程中:(2)每个子系统(尤其是那些需要改进的)都具备良好的可扩展性.正是这两个原因使得Lin ...

  6. Linux网站架构系列之Apache----进阶篇

    本篇博文为Linux网站架构系列之apache的第二篇,我将带大家一起学习apache的编译参数,目录结构和配置文件等方面的知识,实现对apache服务的进一步掌握,并使之能更好的应用到生产实战中去. ...

  7. 低调的 Linux 文件系统家族

    在 Linux 中,最直观.最可见的部分就是 文件系统(file system).下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想. 这些思想中有一些 ...

  8. 如何才能加深对Linux概念架构的理解

    一.Linux内核在整个计算机系统中的位置 Fig 1 - 计算机系统分层结构 分层结构的原则:the dependencies between subsystems are from the top ...

  9. 【译】Linux概念架构的理解

    声明:本文翻译自Conceptual Architecture of the Linux Kernel 摘要 Linux kernel成功的两个原因:(1)灵活的架构设计使得大量的志愿开发者能够很容易 ...

最新文章

  1. 关于递归三要素的理解
  2. Android Bundle类,通过bundle实现在两个activity之间的通讯
  3. G-华华对月月的忠诚
  4. FTP 时代已逝:Firefox、Chrome 等多个浏览器均已弃用!
  5. Android官方教程翻译(2)——运行第一个程序
  6. mac brew加速
  7. 计算机主板设置中的英语,技嘉主板bios设置(进BIOS按什么键+中英文对照设置教程)...
  8. 尚学堂马士兵老师oracle笔记
  9. 配置javaw.exe双击运行jar包
  10. 远程桌面提示“用户帐户限制(例如,时间限制)会阻止你登录。请与系统管理员或技术支持联系以获取帮助。”
  11. Rewrite 做二级域名转向
  12. 云计算设计模式翻译(五):Compute Resource Consolidation Pattern
  13. Matplotlib学习笔记3
  14. 袋鼠云数栈UI5.0体验升级背后的故事:可用性原则与交互升级
  15. java ps old gen_PSYoungGen /PSOldGen/PSPermGen区别
  16. java笔记之基础-outer标签
  17. 红皮书——红色启示录
  18. 计算机专业写作与沟通大作业,四川电大5110047 计算机办公软件应用第1次形考作业答案...
  19. OPC DA调研报告
  20. 在Visio中实现任意两点之间的连线

热门文章

  1. OAF开发基本知识点
  2. svchost|dllhost系统进程与系统安全——“其实我们很无辜”
  3. Carla release与ros-bridge
  4. 百度网盘 php解析,【搬运】百度云盘下载地址解析工具 有点不完美!
  5. ble理论(13) BT4.2 ble 广播详解
  6. 联想Y400win10基础上在安装win7
  7. 晒晒我的厨艺修炼成果
  8. Use Octavia to Implement HTTPS Health Monitors (by quqi99)
  9. 《论股票市价规则缺陷》根治方法
  10. 【OpenStack】在OpenStack上搭建OpenStack UT环境