转自:http://myhat.blog.51cto.com/391263/107931/
 
  • *根目录(/)的意义与内容:
    根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软体、核心档案、开机所需程式。函式库等等档案资料,若系统出现错误时,根目录也需要包含有能够修复档案系统的程式才行。 因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分割槽内, 因为越大的分割槽你会放入越多的资料,如此一来根目录所在分割槽就可能会有较多的发生错误的机会。
    因此FHS标准建议:根目录(/)所在分割槽应该越小越好,且应用程式所安排的软体最好不要与根目录放在同一个分割槽内,保持根目录越小也好。如此不但效能较佳,根目录所在的档案系统也较不容易发生问题。
    有鉴于上述的说明,因此FHS定义根目录(/)底下应该要有底下这些次目录的存在才好:
目录
应放置档案内容
/bin
系统有很多放置执行档的目录,但/bin 比较特殊。因为/bin 放置的在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root一般账号所使用,主要有:cat,chmod,chown,date,mv,mkdir,cp,bash等等常用的指令。
/boot
这个目录主要是放置开机会使用到的档案,包括Linux核心档案以及开机选单与关机所需设定档等等。Linux Kernel常用的档名为:vmlinuz,  如果使用的是grub这个开机管理程式,则还会存在/boot/grub这个目录哦!
/dev
在Linux系统上,任何装置与周边设备都是以档案的形态存在于这个目录当中的. 你只要透过存取这个目录底下的某个档案,就等于存取某个装置哦~ 比较重要的档案有/dev/null,/dev/zero./dev/tty,/dev/lp*,/dev/hd*,/dev/sd*等等
/etc
系统主要的设定档几乎都放置在这个目录内,例如人员的账号密码档,各种服务的起始档等等。一般来说,这个目录下的各档案属性是可以让一般使用者查阅的,但是只有root有权限修改。 FHS建议不要放置可执行档(binary)在这个目录中哦。比较重要的档案有:/etc/inittab,/etc/init.d,/etc/modprobe.conf,/etc/X11,/etc/fstab,/etc/sysconfig等等。另外,其下重要的目录有:
  • /etc/init.d/:所有服务的预设启动 . 都是放在这里的,例如要启动或关闭iptables 的话:『 /etc/init.d/iptables start』、『/etc/init.d/iptables stop』
  • /etc/xinetd.d/:这就是所谓的super daemon管理各项服务的设定档。
  • /etc/X11/:与Xwindow有关的各种设定档,尤其是 xorg.conf 或 XF86Config 这两个 X Server 的设定档。
/home
这个系统预设的使用者家目录(home directory)。在你新增一个一般使用者账号时,预设的使用者家目录就会规范到这里来。比较重要的是,家目录有两种代号:
~:代表目前这个使用者的家目录,
~dmtsai :则代表dmtsai 的家目录!
/lib
系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或、sbin/底下的指令会呼叫的函式库而已。什么是函式库呢?你可以将它想成是『外挂』,某些指令必须要有这些『外挂』才能够顺利完成程式的执行之意。尤其重要的是/lib/modules/这个目录,因为该目录会放置核心先关的模组(驱动程式)哦!
/media
media是『媒体』的英文,顾名思义,这个/media底下放置的就是可移除的装置啦!包括软碟、光碟、DVD等等装置都暂时挂在于此。常见的档名有:、media/floppy, /media/cdrom等等。
/mnt
如果你想要暂时挂在某些额外的装置,一般建议你可以放置到这个目录中。在古早时候,这个目录的用途与/media相同,知识有了/media 之后,这个目录就用来暂时挂在用了。
/opt
这个是给第三方协力软体放置的目录.什么是第三方协力软体啊?举例来说,KDE这个桌面管理系统是一个独立的计划,不过他可以安装到Linux系统中,因此KDE的软体就建议放置到此目录下了。 另外,如果你想要自行安装额外的软体(非原本的distribution提供的),那么也能够将你的软体安装到这里来,不过,以前的Linux系统中,我们还是习惯放置在/user/local目录下。
/root
系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分割槽中。
/sbin
Linux有非常多指令时用来设定系统环境的, 这些指令只有root 才能够用来【设定】系统,其他使用者最多只能用来【查询】而已。 放在/sbin 底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软体程式,一般则放置到/user/sbin当中。 至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/user/local/sbin、当中了。 常见的指令包括: fdisk,fsck,ifconfig,init,mkfs 等等。
/srv
srv可以视为【service】的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW,FTP等等。举例来说,WWW服务器需要的网页资料就可以放置在/srv/www里面。
/tmp
这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是人和人都能够存取的,所以你需要定期的清理一下。 当然,重要资料不可放置在此目录。 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除!
 
事实上FHS针对根目录所定义的标准就仅有上面的东西,不过我们的Linux底下还有许多目录你也需要了解一下的。 底下是几个在Linux当中也是非常重要的目录哦:
目錄
應放置檔案內容
/lost+found
這個目錄是使用標準的ext2/ext3檔案系統格式才會產生的一個目錄,目的在於當檔案系統發生錯誤時, 將一些遺失的片段放置到這個目錄下。這個目錄通常會在分割槽的最頂層存在, 例如你加裝一顆硬碟於/disk中,那在這個系統下就會自動產生一個這樣的目錄『/disk/lost+found』
/proc
這個目錄本身是一個『虛擬檔案系統(virtual filesystem)』喔!他放置的資料都是在記憶體當中, 例如系統核心、行程資訊(process)、周邊裝置的狀態及網路狀態等等。因為這個目錄下的資料都是在記憶體當中, 所以本身不佔任何硬碟空間啊!比較重要的檔案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。
/sys
這個目錄其實跟/proc非常類似,也是一個虛擬的檔案系統,主要也是記錄與核心相關的資訊。 包括目前已載入的核心模組與核心偵測到的硬體裝置資訊等等。這個目錄同樣不佔硬碟容量喔!
除了這些目錄的內容之外,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載, 其他分割槽則是在開機完成之後才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分割槽去!那哪些目錄不可與根目錄分開呢?有底下這些:
  • /etc:設定檔
  • /bin:重要執行檔
  • /dev:所需要的裝置檔案
  • /lib:執行檔所需的函式庫與核心所需的模組
  • /sbin:重要的系統執行檔
這五個目錄千萬不可與根目錄分開在不同的分割槽!請背下來啊! 好了,談完了根目錄,接下來我們就來談談/usr以及/var囉!先看/usr裡面有些什麼東西:
  • /usr 的意義與內容:
依據FHS的基本定義,/usr裡面放置的資料屬於可分享的與不可變動的(shareable, static), 如果你知道如何透過網路進行分割槽的掛載(例如在伺服器篇會談到的NFS伺服器),那麼/usr確實可以分享給區域網路內的其他主機來使用喔!
很多讀者都會誤會/usr為user的縮寫,其實usr是Unix Software Resource的縮寫, 也就是『Unix作業系統軟體資源』所放置的目錄,而不是使用者的資料啦!這點要注意。 FHS建議所有軟體開發者,應該將他們的資料合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟體自己獨立的目錄。
因為是所有系統預設的軟體(distribution發佈者提供的軟體)都會放置到/usr底下,因此這個目錄有點類似Windows 系統的『C:\Windows\ + C:\Program files\』這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬碟容量。 一般來說,/usr的次目錄建議有底下這些:
目錄
應放置檔案內容
/usr/X11R6/
為X Window System重要資料所放置的目錄,之所以取名為X11R6是因為最後的X版本為第11版,且該版的第6次釋出之意。
/usr/bin/
絕大部分的使用者可使用指令都放在這裡!請注意到他與/bin的不同之處。(是否與開機過程有關)
/usr/include/
c/c++等程式語言的檔頭(header)與包含檔(include)放置處,當我們以tarball方式 (*.tar.gz 的方式安裝軟體)安裝某些資料時,會使用到裡頭的許多包含檔喔!
/usr/lib/
包含各應用軟體的函式庫、目標檔案(object file),以及不被一般使用者慣用的執行檔或腳本(.)。 某些軟體會提供一些特殊的指令來進行伺服器的設定,這些指令也不會經常被系統管理員操作, 那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64的Linux系統, 那可能會有/usr/lib64/目錄產生喔!
/usr/local/
系統管理員在本機自行安裝自己下載的軟體(非distribution預設提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的distribution提供的軟體較舊,你想安裝較新的軟體但又不想移除舊版, 此時你可以將新版軟體安裝於/usr/local/目錄下,可與原先的舊版軟體有分別啦! 你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib...的次目錄喔!
/usr/sbin/
非系統正常運作所需要的系統指令。最常見的就是某些網路伺服器軟體的服務指令(daemon)囉!
/usr/share/
放置共享文件的地方,在這個目錄下放置的資料幾乎是不分硬體架構均可讀取的資料, 因為幾乎都是文字檔案嘛!在此目錄下常見的還有這些次目錄:
  • /usr/share/man:線上說明文件
  • /usr/share/doc:軟體雜項的文件說明
  • /usr/share/zoneinfo:與時區有關的時區檔案
/usr/src/
一般原始碼建議放置到這裡,src有source的意思。至於核心原始碼則建議放置到/usr/src/linux/目錄下。
  • /var 的意義與內容:
如果/usr是安裝時會佔用較大硬碟容量的目錄,那麼/var就是在系統運作後才會漸漸佔用硬碟容量的目錄。 因為/var目錄主要針對常態性變動的檔案,包括快取(cache)、登錄檔(log file)以及某些軟體運作所產生的檔案, 包括程序檔案(lock file, run file),或者例如MySQL資料庫的檔案等等。常見的次目錄有:
目錄
應放置檔案內容
/var/cache/
應用程式本身運作過程中會產生的一些暫存檔;
/var/lib/
程式本身執行的過程中,需要使用到的資料檔案放置的目錄。在此目錄下各自的軟體應該要有各自的目錄。 舉例來說,MySQL的資料庫放置到/var/lib/mysql/而rpm的資料庫則放到/var/lib/rpm去!
/var/lock/
某些裝置或者是檔案資源一次只能被一個應用程式所使用,如果同時有兩個程式使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上所(lock),以確保該裝置只會給單一軟體所使用。 舉例來說,燒錄機正在燒錄一塊光碟,你想一下,會不會有兩個人同時在使用一個燒錄機燒片? 如果兩個人同時燒錄,那片子寫入的是誰的資料?所以當第一個人在燒錄時該燒錄機就會被上鎖, 第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續使用囉。
/var/log/
重要到不行!這是登錄檔放置的目錄!裡面比較重要的檔案如/var/log/messages, /var/log/wtmp(記錄登入者的資訊)等。
/var/mail/
放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中! 通常這兩個目錄是互為連結檔啦!
/var/run/
某些程式或者是服務啟動後,會將他們的PID放置在這個目錄下喔! 至於PID的意義我們會在後續章節提到的。
/var/spool/
這個目錄通常放置一些佇列資料,所謂的『佇列』就是排隊等待其他程式使用的資料啦! 這些資料被使用後通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中, 但使用者收下該信件後該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中, 等到被送出後就被刪除。如果是工作排程資料(crontab),就會被放置到/var/spool/cron/目錄中!
建議在你讀完整個基礎篇之後,可以挑戰FHS官方英文文件 ,相信會讓你對於Linux作業系統的目錄有更深入的瞭解喔!
  • 針對FHS,各家distributions的異同
由於FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的檔案或目錄資料, 因此,在其他次目錄層級內,就可以隨開發者自行來配置了。舉例來說,CentOS的網路設定資料放在 /etc/sysconfig/network-.s/ 目錄下,但是SuSE則是將網路放置在 /etc/sysconfig/network/ 目錄下,目錄名稱可是不同的呢!不過只要記住大致的FHS標準,差異性其實有限啦!
 
PS.
FHS:Filesystem Hierarchy Standard(文件系统目录标准),FHS采用树形结构组织文件,定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。
 
    
 

Linux根目录详解-转自鸟哥的私房菜的更多相关文章

  1. [Linux]《鸟哥的私房菜》笔记 (缓慢更新)

    暂时不更新了..这几天一看起书来发现内容很多,这样写blog太慢,也没意义.所以现在是每天看书,在笔记本上记笔记,再配合着<操作系统>和 linux内核 加深理解.往后会以心得体会为主写一 ...

  2. linux: 鸟哥的私房菜

    鸟哥的私房菜 http://vbird.dic.ksu.edu.tw/linux_basic/0320bash.php

  3. 鸟哥的私房菜:Linux文件与目录管理

    1. 目录与路径 1.1 相对路径与绝对路径           绝对路径:路径的写法『一定由根目录 / 写起』,如:/usr/share/doc 这个目录.     相对路径:路径的写法『不是由 / ...

  4. 41个linux命令大全(鸟哥的私房菜)

    转http://www.xmws.cn/show-87-419-1.html 41个linux命令大全 发布作者:微思网络   发布时间:2017-01-10   浏览量:709次 学过linux的人 ...

  5. (整理)ubuntu 的 相关知识(来自 鸟哥的私房菜)

    1. Linux 文件权限概念 $ ls 察看文件的指令 $ ls -al 出所有的文件详细的权限与属性 (包含隐藏档,就是文件名第一个字符为『 . 』的文件) 在你第一次以root身份登入Linux ...

  6. 鸟哥的私房菜上 xpenguins 设备(ubuntu 12.04)

    看了一个暑假linux,我觉得很辛苦啊,要很好地利用linux并不是的easy... 今天装了一下鸟哥课后给的xpenguins软件,就是桌面特性软件.会有非常多企鹅下落,本以为能够非常轻松的搞定.没 ...

  7. 鸟哥的私房菜:Bash shell(六)-管道命令

    就如同前面所说的, bash 命令执行的时候有输出的数据会出现! 那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设定? 这就牵涉到管线命令的问题了 (pipe) ,管线命令 ...

  8. 鸟哥的私房菜:Bash shell(四)-Bash shell的使用环境

    Bash shell(四)-Bash shell的使用环境   是否记得我们登入主机的时候,屏幕上头会有一些说明文字,告知我们的 Linux 版本啊什么的, 还有,登入的时候,我们还可以给予使用者一些 ...

  9. 鸟哥的私房菜:Bash shell(二)-变量的丰富功能

    一  Shell变量的取用与设定,变量规则 由于系统需要一些变量来提供他数据的存取,所以就有一些所谓的『环境变量』 需要来读入系统中了!这些环境变量例如 PATH.HOME.MAIL.SHELL.为了 ...

随机推荐

  1. ShoneSharp语言(S#)的设计和使用介绍系列(3)— 修炼工具

    ShoneSharp语言(S#)的设计和使用介绍 系列(3)- 修炼工具 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSharp. ...

  2. 初学PHP心得(第一天)

    我是PHP初学者,听说女生挺适合学这门语言的.所以,我就下定决心,来好好的探究下它,希望它能成为我开启IT道路的第一道关卡. 今天心血来潮,来记录下一天的成果和收获吧.既然想法有了,那就要去实现它.于 ...

  3. 自己动手编写IOC框架(四)

    终于到了激动人心的时刻了,首先感谢小伙伴们的阅读,如果能多点评论,多点探讨就更好了,没有交流让我觉得我写的东西只有标题有点价值,内容只是在浪费大家的时间.为了泪滴下周能写下一个框架orm,请小伙伴们能 ...

  4. phpcms的验证码替换 及 phpcms实现全站搜索功能

    在使用phpcms替换网页的时候,除了正常的替换栏目.内容页等,其他的什么验证码啦,提交表单了,搜索功能了,这些在替换的时候可能会对一些默认文件有一些小小 的改变 下面就是自己在失败中成功的过程,最后 ...

  5. angularjs 利用$http 请求出现 400 Bad Request

    1. 出现400错误-代表错误的请求,说明我们的参数有问题 说明此时传入的参数存在问题,我们看下此时参数的格式是什么: 此时的参数是对象格式,查了一下,如果利用ajax格式传输数据的话,参数必须是js ...

  6. 用tortoiseGit管理GitHub项目代码(完整教程)

    一.为什么要写这篇博客呢,因为在一开始用tortoiseGit来管理项目的时候,在百度上找了很多教程,但是感觉说的都不是很全,有些东西以及操作没写清楚,所以想写一片比较完整用tortoiseGit管理 ...

  7. python :ascii codec can't decode byte 0xe8 in posit

    python代码: slide.setAttribute("SlideName", module.slide_name)  slide.setAttribute("Sli ...

  8. [Bootstrap 源码]——bootstrap源码之初始化

    bootstrap源码之初始化 我们先来分析normalize.less编译后的源码,我们知道normalize.css是一个专门将不同浏览器的默认css特性设置为统一效果的css库,它和reset. ...

  9. JavaScript学习笔记(十六)——面向对象编程

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  10. 数据结构之【栈】+十进制转d进制(堆栈数组模拟)

    其实这篇文章开出来主要是水文章%% %% 栈--后进先出的婊 特点:只能在某一端插入和删除的特殊的线性表 操作:进栈--PUSH->向栈顶插入元素 出栈--POP-->将栈顶元素删除 实现 ...