檔案權限與目錄配置

zz/2024/5/23 1:42:28

下達『 ls -al 后可以看到列出file/folder的详细信息。

[root@www ~]# ls -al

total 156

drwxr-x---   4    root   root     4096   Sep  8 14:06 .

-rw-r--r--   1    root   root      100   Jan  6  2007 .cshrc

drwx------   3    root   root     4096   Sep  5 10:37 .gconf 

-rw-r--r--   1    root   root    42304   Sep  4 18:26 install.log

[    1   ]  [2]   [3]    [4]     [5]     [    6    ]   [ 7 ]

[  權限  ][連結][擁有者][群組][檔案容量] [修改日期 ]  [ 檔名 ]

 

  • 第一欄代表這個檔案的類型與權限(permission)

共有十個字元

  • 第一個字元代表這個檔案是『目錄、檔案或連結檔等等』
    • 當為[ d ]則是目錄
    • 當為[ - ]則是檔案
    • 若是[ l ]則表示為連結檔(link file)
    • 若是[ b ]則表示為裝置檔裡面的可供儲存的周邊設備(可隨機存取裝置)
    • 若是[ c ]則表示為裝置檔裡面的序列埠設備,例如鍵盤、滑鼠(一次性讀取裝置)
  • 接下來的字元中,以三個為一組,且均為『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)[ w ]代表可寫(write)[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。
    • 第一組為『檔案擁有者的權限』;
    • 第二組為『同群組的權限』;

第三組為『其他非本群組的權限』

另外,目錄與檔案的權限意義並不相同

 

  • 第二欄表示有多少檔名連結到此節點(i-node)

每個檔案都會將他的權限與屬性記錄到檔案系統的i-node,不過,我們使用的目錄樹卻是使用檔名來記錄, 因此每個檔名就會連結到一個i-node囉!這個屬性記錄的,就是有多少不同的檔名連結到相同的一個i-node號碼去就是了。

  • 第三欄表示這個檔案(或目錄)的『擁有者帳號』
  • 第四欄表示這個檔案的所屬群組
  • 第五欄為這個檔案的容量大小,預設單位為bytes
  • 第六欄為這個檔案的建檔日期或者是最近的修改日期:

這一欄的內容分別為日期(/)及時間。如果這個檔案被修改的時間距離現在太久了,那麼時間部分會僅顯示年份而已。 如下所示:

[root@www ~]# ls -l /etc/termcap /root/install.log

-rw-r--r-- 1 root root 807103 Jan  7  2007 /etc/termcap

-rw-r--r-- 1 root root  42304 Sep  4 18:26 /root/install.log

# 如上所示,/etc/termcap 2007 年所修改過的檔案,離現在太遠之故;

# 至於 install.log 是今年 (2009) 所建立的,所以就顯示完整的時間了。

如果想要顯示完整的時間格式,可以利用ls的選項,亦即:『ls -l --full-time』就能夠顯示出完整的時間格式了

  • 第七欄為這個檔案的檔名

這個欄位就是檔名了。比較特殊的是:如果檔名之前多一個『 . 』,則代表這個檔案為『隱藏檔』,你可以使用ls』及『ls -a』這兩個指令去感受一下什麼是隱藏檔囉

 

如何改變檔案屬性與權限

  • chgrp :改變檔案所屬群組
  • chown :改變檔案擁有者
  • chmod :改變檔案的權限, SUID, SGID, SBIT等等的特性

chgrp

改變檔案的所属群組

注意:要被改變的群組名稱必須要在/etc/group檔案內存在才行,否則就會顯示錯誤

[root@www ~]# chgrp [-R] dirname/filename ...
選項與參數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案、目錄
     都更新成為這個群組之意。常常用在變更某一目錄內所有的檔案之情況
範例:
[root@www ~]# chgrp users install.log
[root@www ~]# ls -l
-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
[root@www ~]# chgrp testing install.log
chgrp: invalid group name `testing' <=發生錯誤訊息囉~找不到這個群組名

 

chown

改變檔案擁有者

注意使用者必須是已經存在系統中的帳號,也就是在/etc/passwd 這個檔案中有紀錄的使用者名稱才能改變

chown的用途還滿多的,他還可以順便直接修改群組的名稱!此外,如果要連目錄下的所有次目錄或檔案同時更改檔案擁有者的話,直接加上 -R 的選項即可

 
[root@www ~]# chown [-R] 帳號名稱 檔案或目錄
[root@www ~]# chown [-R] 帳號名稱:群組名稱 檔案或目錄
選項與參數:
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都變更
 
範例:將install.log的擁有者改為bin這個帳號:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
 
範例:將install.log的擁有者與群組改回為root
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

 

 

什麼時候要使用chownchgrp?有時候需要變更檔案的擁有者的,最常見的例子就是在複製檔案給你之外的其他人時, 我們使用最簡單的cp指令來說明好了:

[root@www ~]# cp 來源檔案 目的檔案

假設你要將.bashrc這個檔案拷貝成為.bashrc_test檔名,且是要給bin這個人,你可以這樣做

[root@www ~]# cp .bashrc .bashrc_test
[root@www ~]# ls -al .bashrc*
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
-rw-r--r--  1 root root 395Jul13 11:3 .bashrc_test <==新檔案的屬性沒變

 

由於複製行為(cp)複製執行者的屬性與權限,所以!怎麼辦?.bashrc_test還是屬於root所擁有, 如此一來,即使你將檔案拿給bin這個使用者了,那他仍然無法修改的(看屬性/權限就知道了吧) 所以你就必須要將這個檔案的擁有者與群組修改一下囉!

 

chmod

改變檔案權限權限的設定方法有兩種, 可以使用數字或者是符號來進行權限的變更。

1) 數字類型改變檔案權限
先複習一下剛剛上面提到的資料:檔案的權限字元為:『-rwxrwxrwx』,這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:

r:4
w:2
x:1

每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:

owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0

 

變更權限的指令chmod的語法是這樣的:

[root@www ~]# chmod [-R] xyz 檔案或目錄
選項與參數:
xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
-R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更
[root@www ~]# ls -al .bashrc
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

 

如果要將權限變成『 -rwxr-xr-- 』呢?那麼權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754 囉!所以你需要下達『 chmod 754 filename』。 另外,在實際的系統運作中最常發生的一個問題就是,常常我們vim編輯一個shell的文字批次檔後,他的權限通常是 -rw-rw-r-- 也就是664 如果要將該檔案變成可執行檔,並且不要讓其他人修改此一檔案的話, 那麼就需要-rwxr-xr-x這樣的權限,此時就得要下達:『 chmod 755 test.sh 』的指令囉!

另外,如果有些檔案你不希望被其他人看到,那麼應該將檔案的權限設定為例如:『-rwxr-----』,那就下達『 chmod 740 filename 』吧!

 

2) 符號類型改變檔案權限

九個權限分別是(1)user (2)group (3)others三種身份!那麼我們就可以藉由u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那麼讀寫的權限就可以寫成r, w, x囉!也就是可以使用底下的方式來看:

 

chmod

u
g
o
a

+(加入)
-(
除去)
=(
設定)

r
w
x

檔案或目錄

[root@www ~]# chmod  u=rwx,go=rx  .bashrc
# 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空白字元!
[root@www ~]# ls -al .bashrc
-rwxr-xr-x  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod  a+w  .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod  a-x  .bashrc
[root@www ~]# ls -al .bashrc
-rw-rw-rw-  1 root root 395 Jul  4 11:45 .bashrc

注意理解上面例子+, -, = 的不同點

 

權限對檔案的重要性

權限對於檔案來說,他的意義是這樣的:

  • r (read):可讀取此一檔案的實際內容,如讀取文字檔的文字內容等;
  • w (write)可以編輯、新增或者是修改該檔案的內容(但不含刪除該檔案)
  • x (eXecute)該檔案具有可以被系統執行的權限

至於最後一個w這個權限呢?當你對一個檔案具有w權限時,你可以具有寫入/編輯/新增/修改檔案的內容的權限, 但並不具備有刪除該檔案本身的權限!對於檔案的rwx來說, 主要都是針對『檔案的內容』而言,與檔案檔名的存在與否沒有關係喔!因為檔案記錄的是實際的資料嘛!

不過,可以被執行跟可以執行成功是不一樣的~舉例來說,在root家目錄下的install.log 是一個純文字檔,如果經由修改權限成為 -rwxrwxrwx 後,這個檔案能夠真的執行成功嗎? 當然不行~因為他的內容根本就沒有可以執行的資料。所以說,這個x代表這個檔案具有可執行的能力, 但是能不能執行成功,當然就得要看該檔案的內容囉

權限對目錄的重要性

如果是針對目錄,那個 r, w, x 對目錄是什麼意義呢?

  • r (read contents in directory)
    表示具有讀取目錄結構清單的權限,所以當你具有讀取(r)一個目錄的權限時,表示你可以查詢該目錄下的檔名資料
    注意:但不表示能用cd命令切换到该目录。 所以你就可以利用 ls 這個指令將該目錄的內容列表顯示出來!
  • w (modify contents of directory)
    對目錄
    可寫入的權限,表示你具有異動該目錄結構清單的權限,也就是底下這些權限:
    • 建立新的檔案與目錄;
    • 刪除已經存在的檔案與目錄(不論該檔案的權限為何!)
    • 將已存在的檔案或目錄進行更名;
    • 搬移該目錄內的檔案、目錄位置

總之,目錄的w權限就與該目錄底下的檔名異動有關就對了啦

  • x (access directory)
    目錄的執行權限有啥用途啊?沒錯!目錄不可以被執行,目錄的x代表的是使用者能否
    (用cd command進入該目錄成為工作目錄的用途! 注意:如果user对该目录只有r权限,但没有x权限,是无法cd进该目录的,也就無法執行該目錄下的任何指令不具有x的權限, 那麼你就無法切換到該目錄下,也就無法執行該目錄下的任何指令,即使你具有該目錄的r的權限

很多朋友在架設網站的時候都會卡在一些權限的設定上,他們開放目錄資料給網際網路的任何人來瀏覽, 卻只開放r的權限,如上面的範例所示那樣,那樣的結果就是導致網站伺服器軟體無法到該目錄下讀取檔案(最多只能看到檔名), 最終用戶總是無法正確的查閱到檔案的內容(顯示權限不足啊!)。要注意:要開放目錄給任何人瀏覽時,應該至少也要給予rx的權限,但w權限不可隨便給為什麼w不能隨便給,我們來看下一個例子:

例題:

假設有個帳號名稱為dmtsai,他的家目錄在/home/dmtsai/dmtsai對此目錄具有[rwx]的權限。 若在此目錄下有個名為the_root.data的檔案,該檔案的權限如下:

-rwx------ 1 root  root  4365 Sep 19 23:20  the_root.data

請問dmtsai對此檔案的權限為何?可否刪除此檔案

答:

如上所示,由於dmtsai對此檔案來說是『others』的身份,因此這個檔案他無法讀、無法編輯也無法執行,也就是說,他無法變動這個檔案的內容就是了。
但是由於這個檔案在他的家目錄下, 他在此目錄下具有rwx的完整權限,因此對於the_root.data這個『檔名』來說,他是能夠『刪除』的! 結論就是,dmtsai這個用戶能夠刪除the_root.data這個檔案

 

Linux文件系统层次结构标准FHS

因為利用Linux來開發產品或distributions的社群/公司與個人實在太多了, 如果每個人都用自己的想法來配置檔案放置的目錄,那麼將可能造成很多管理上的困擾。 因此所謂的Filesystem Hierarchy Standard (FHS)標準的出爐了!

FHS主要目的是希望讓使用者可以瞭解到已安裝軟體通常放置於那個目錄下, 所以他們希望獨立的軟體開發商、作業系統製作者、以及想要維護系統的使用者,都能夠遵循FHS的標準。也就是說,FHS的重點在於規範每個特定的目錄下應該要放置什麼樣子的資料而已。

FHS依據檔案系統使用的頻繁與否與是否允許使用者隨意更動, 而將目錄定義成為四種交互作用的形態

 

可分享的(shareable)

不可分享的(unshareable)

不變的(static)

/usr (軟體放置處)

/etc (設定檔)

 

/opt (第三方協力軟體)

/boot (開機與核心檔)

可變動的(variable)

/var/mail (郵件信箱)

/var/run (程序相關)

 

/var/spool/news (新聞群組)

/var/lock (程序相關)

上表中的目錄就是一些代表性的目錄

我們要瞭解的是,什麼是那四個類型?

  • 可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行檔與使用者的郵件等資料, 是能夠分享給網路上其他主機掛載用的目錄;
  • 不可分享的:自己機器上面運作的裝置檔案或者是與程序有關的socket檔案等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了。
  • 不變的:有些資料是不會經常變動的,跟隨著distribution而不變動。 例如函式庫、文件說明檔、系統管理員所管理的主機服務設定檔等等;
  • 可變動的經常改變的資料,例如登錄檔、一般用戶可自行收受的新聞群組等。

FHS实际上仅是规范

l  在根目录(/)下面各个主要目录应该放什么样的文件。例如 /etc应该要放置设置文件,/bin /sbin则应该要放置可执行文件等等

l  针对 /usr目录的子目录来定义。例如/usr/share放置共享数据等等

l  针对/var目录的子目录来定义。例如 /var/log放置系统登录文件等等

 

由于FHS仅是定义出最上层(/)及子层(/usr, /var)的目录内容应该要放置的文件数据,因此,在其他子目录层级内,就可以随开发人员自行配置了。举例来说,FC4的网络设置数据放在 /etc/sysconfig/network-script/ 目录下,但SuSE Server 9则是将网络放在 /etc/sysconfig/network/ 目录下,目录名称是不同的。

 

 

/”下的目录内容和用途

 

/bin

一般用户使用的命令

/bin底下的指令可以root與一般帳號所使用

主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令

/boot

放置内核及LILOGRUB等导引程序(bootloader)的文件,用于启动。

/dev

硬盘,分区,键盘,鼠标,USBtty等所有的设备文件都放在这个目录。

 

/etc

 

系统的所有配置文件都存放在此目录中

系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、 各種服務的啟始檔等等。一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的, 但是只有root有權力修改FHS建議不要放置可執行檔(binary)在這個目錄中喔。比較重要的檔案有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目錄有

  • /etc/init.d/:所有服務的預設啟動 script 都是放在這裡的,例如要啟動或者關閉 iptables 的話:『 /etc/init.d/iptables start』、『/etc/init.d/iptables stop
  • /etc/xinetd.d/:這就是所謂的super daemon管理的各項服務的設定檔目錄。
  • /etc/X11/ X Window 有關的各種設定檔都在這裡,尤其是 xorg.conf 這個 X Server 的設定檔。

/home

用户空间,所有的用户都是用此空间。

/home有兩種代號喔:
~
:代表目前這個使用者的home,而
~dmtsai
:則代表 dmtsai home

/lib

共享连接库,如C库和C编译器等等

/lib放置的則是在開機時會用到的函式庫, 以及在/bin/sbin底下的指令會呼叫的函式庫而已。尤其重要的是/lib/modules/這個目錄, 因為該目錄會放置核心相關的模組(驅動程式)

/media

挂接CD-ROM等设备的目录

/mnt

移动设备文件系统的挂点

/opt

這個是給第三方協力軟體 (Add-on application) 放置的目錄

什麼是第三方協力軟體啊? 舉例來說,KDE這個桌面管理系統是一個獨立的計畫,不過他可以安裝到Linux系統中,因此KDE的軟體就建議放置到此目錄下了

注意:第三方協力軟體也不是指安装系统时linux distribution预设安装的software,因为预设安装的software是安装在/usr目录下

另外,如果妳想要自行安裝額外的軟體(非原本的distribution预设安装),我們還是習慣放置在/usr/local目錄下呢

/root

roothome目录

/sbin

存放系统管理所需要的命令

/tmp

临时文件目录,重新启动时被清除

這是讓一般使用者或者是正在執行的程序暫時放置檔案的地方。 這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要資料不可放置在此目錄啊! 因為FHS甚至建議在開機時,應該要將/tmp下的資料都刪除唷!

注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載,其他分割槽則是在開機完成之後才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分割槽去!下面5目錄不可與根目錄分開

  • /etc:設定檔
  • /bin:重要執行檔
  • /dev:所需要的裝置檔案
  • /lib:執行檔所需的函式庫與核心所需的模組
  • /sbin:重要的系統執行檔
  • /usr 的意義與內容:

/usr

/usr裡面放置的資料屬於可分享的與不可變動的(shareable, static), 如果你知道如何透過網路進行分割槽的掛載(例如在伺服器篇會談到的NFS伺服器),那麼/usr確實可以分享給區域網路內的其他主機來使用喔!

很多讀者都會誤會/usruser的縮寫,其實usrUnix 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),以及不被一般使用者慣用的執行檔或腳本(script)。 某些軟體會提供一些特殊的指令來進行伺服器的設定,這些指令也不會經常被系統管理員操作, 那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64Linux系統, 那可能會有/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/

一般原始碼建議放置到這裡,srcsource的意思。至於核心原始碼則建議放置到/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这个标准被设计的目的是给Unix发行版开发者,应用程序开发者,和系统实现者使用的,它的初终是作为一个参考,并不是来教用户怎么管理unix文件系统或目录结构的。
      
当前linux用户也面临一些问题,  由于FHS仅定义了最上层(/)及子层(/usr, /var)的目录内容应该要放置的文件数据,所有现有Linux不同发行版中,其他二层下面的内容各部相同,有时会给用户迁移到不同Linux发行版上带 来麻烦,比如/etc下面的对统一功能的不同配置文件放置的位置不同,导致用户花费大量时间去熟悉新的系统。

 

l  /bin, /sbin, /usr/bin, /usr/sbin 等的区别

/bin : commands in this dir are all system installed user commands,即你install linux时安装的系统指令。

/sbin:  commands in this dir are all system installed super user commands,即你install linux时安装的供super user使用的系统指令。

> /sbin目录下的绝大部分程序需要root权限才能够完成全部的功能。

> lsof, ifconfig这种管理员用的比较多的命令都在/sbin里面。

> 通常普通用户的PATH里面是没有sbin的,不过可以自己加。

>普通用户也可以運行部份程式,但一般只能查看不能修改。

/usr/bin: user commands for applications,即在后期安装的一些软件的运行脚本

/usr/sbin: super user commands for applications,即在后期安装的一些软件的供super user使用的运行脚本

/usr/X11R6/bin : X application user commands

/usr/X11R6/sbin: X application super user commands

 

 

l  /usr/usr/local的区别

在安装系统时你的linux distribution预设安装的software是装在/usr下。在安装好系统之后系統管理員自己在系统里安装software,那么则是安装在/usr/local目录下。

 

這樣會比較便於管理。舉例來說,你的distribution提供的軟體較舊,你想安裝較新的軟體但又不想移除舊版, 此時你可以將新版軟體安裝於/usr/local/目錄下,可與原先的舊版軟體有分別啦 你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib...的次目錄喔!

 

(英文解释)

/usr directory is where the app installed by the distribution stands

/usr/local directory is where the app installed (compiled?) by the system admin stands.

 

For ex. if you download mplayer and do a ./configure - make - make install it comes to the /usr/local.

 

另外,还有一些rules:

  • On a network of several machines all running LFS, or mixed LFS and other Linux distributions, /usr/local could be used to hold packages that are common between all the computers in the network. It can be NFS mounted or mirrored from a single server. Here local indicates local to the site.
  • On a network of several computers all running an identical LFS system, /usr/local could hold packages that are different between the machines. In this case local refers to the individual computers.
  • Even on a single computer, /usr/local can be useful if you have several distributions installed simultaneously, and want a place to put packages that will be the same on all of them.
  • Or you might regularly rebuild your LFS, but want a place to put files that you don't want to rebuild each time. This way you can wipe the LFS file system and start from a clean partition every time without losing everything.

 

l  /lib/usr/lib/usr/local/lib的区别

简单说,/lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的.

 

/lib/ 包含许多被 /bin/ /sbin/ 中的程序使用的库文件。/lib目录下放置的是/bin/sbin目录下程序所需的库文件。

 

/usr/lib/ 中含有更多用于用户程序的库文件。

 

仅仅被/usr目录下的程序所使用的共享库不必放到/lib目录下。只有/bin/sbin下的程序所需要的库有必要放到/lib目录下

 


http://www.ngui.cc/zz/2731654.html

相关文章

Spring 3 get started

使用Eclipse构建Maven的SpringMVC project http://limingnihao.iteye.com/blog/830409 Maven 建一个spring webapp http://www.blogjava.net/birds/archive/2011/04/07/347748.html 手动在eclipse里搭建spring 3 mvc project http://www.cnblogs.com/springmvc3/archive/…

关于iphone/ipad同步,如何避免同步后目录和程序的顺序混乱

http://www.soft4fun.net/ipad-iphone/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D-iphoneipad-%E8%88%87-itunes-%E5%90%8C%E6%AD%A5%E6%99%82%E8%B3%87%E6%96%99%E5%A4%BE%E4%BA%82%E8%B7%91.htm

iOS: 第一个iphone app

参考视频&#xff1a;http://s3.amazonaws.com/screencasts.pragmaticstudio.com/013_ib_xcode4.mov 1. run Xcode, select "create a new project > view-based application", input "project name" as "HelloWorld", "company identif…

install python 3.2, django and eclipse pydev plugin in mac for python devolopment

Step 1. install eclipse 3.7 or later Step 2. install python 3.2 (ref link: http://www.youtube.com/watch?vMEmEJCLLI2k ) 注意&#xff1a;我安装了python3.2后&#xff0c;在"terminal"里输入命令 "python --version"&#xff0c;出现的版本是v2.7…

iOS: NSString应该用initWithFormat? 还是 stringWithFormat?

注意&#xff1a;对于iOS 5的ARC特性来说&#xff0c;两个方法是等价的&#xff0c;不会有memory leak的问题&#xff01;&#xff08;ref link: http://stackoverflow.com/questions/7960912/stringwithformat-vs-initwithformat-under-arc) 下面文字的参看文档&#xff1a; …

iOS: Some issues about push notification

custom data in push notification http://no001.blog.51cto.com/1142339/642817 当运行带apns feature的app到真机上后&#xff0c;会弹出错误&#xff1a; "Error DomainNSCocoaErrorDomain Code3000 "no valid aps-environment entitlement string found for a…

iOS: #define

typedef与#define的区别。 http://www.sf.org.cn/article/base/200608/18988.html #define 是宏定义&#xff0c;所谓的宏定义&#xff0c;就是将某段代码、地址、字符串等一串的文字&#xff0c;用一个宏来代替。#define是一种预处理。 #define与typedef功能类似&#xff0…

Raphael无法处理event的问题!!!

当你用下列代码画一个矩形&#xff0c;然后click it&#xff0c;照例应该会popup alert var paper Raphael("canvas", 600, 480); var rect paper.rect(10, 40, 50, 50); rect.click(function () {alert(hello); }); 但实际上并不会popup alert&#xff0c;是…

iOS: NSUserDefaults issues

NSUserDefaults用于存储一些app setting。当你关闭app之后再打开后&#xff0c;之前存储的setting依然可以从NSUserDefaults里读取。注意&#xff1a;密码最好不要存储在NSUserDefaults里&#xff0c;要存储也必须用AES/DES加密存储&#xff0c;更安全的方法是 https://github.…

Hibernate: cannot simultaneously fetch multiple bags 问题的解决办法

如果在一个pojo里使用超过一个List的变量&#xff0c;则会出现这个错误 详见&#xff1a; http://www.quanlei.com/2011/10/2817.html 他提供了4个解决方法&#xff0c;我采用方案3&#xff1a; 改变FetchMode为Fetch(FetchMode.SUBSELECT) 其他参考links: http://www.mkyong.…