一. Linux文件和目錄
一切皆文件
Linux 中所有內(nèi)容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目錄(Windows 下稱為文件夾)是文件,硬件設(shè)備(鍵盤、監(jiān)視器、硬盤、打印機)是文件,就連套接字(socket)、網(wǎng)絡(luò)通信等資源也都是文件。
Linux系統(tǒng)中,文件具體可分為以下幾種類型:
1) 普通文件
類似 mp4、pdf、html 這樣,可直接拿來使用的文件都屬于普通文件,Linux 用戶根據(jù)訪問權(quán)限的不同可以對這些文件進行查看、刪除以及更改操作。
2) 目錄文件
對于用慣 Windows 系統(tǒng)的用戶來說,目錄是文件可能不太好理解。
Linux 系統(tǒng)中,目錄文件包含了此目錄中各個文件的文件名以及指向這些文件的指針,打開目錄等同于打開目錄文件,只要你有權(quán)限,可以隨意訪問目錄中的任何文件。
注意,目錄文件的訪問權(quán)限,同普通文件的執(zhí)行權(quán)限,是一個意思。
3) 字符設(shè)備文件和塊設(shè)備文件
這些文件通常隱藏在 /dev/ 目錄下,當進行設(shè)備讀取或外設(shè)交互時才會被使用。
例如,磁盤光驅(qū)屬于塊設(shè)備文件,串口設(shè)備則屬于字符設(shè)備文件。
Linux 系統(tǒng)中的所有設(shè)備,要么是塊設(shè)備文件,要么是字符設(shè)備文件。
4) 套接字文件(socket)
套接字文件一般隱藏在 /var/run/ 目錄下,用于進程間的網(wǎng)絡(luò)通信。
5) 符號鏈接文件(symbolic link)
類似與 Windows 中的快捷方式,是指向另一文件的簡介指針(也就是軟鏈接)。
6) 管道文件(pipe)
主要用于進程間通信。例如,使用 mkfifo 命令創(chuàng)建一個 FIFO 文件,與此同時,啟用進程 A 從 FIFO文件讀數(shù)據(jù),啟用進程 B 從 FIFO文件中寫數(shù)據(jù),隨寫隨讀。
在文件系統(tǒng)中,有兩個特殊的目錄,一個是用戶所在的工作目錄,即當前目錄,可用一個點“.”表示;另一個是當前目錄的上一層目錄,也叫父目錄,用兩個點“..”表示。
表 1 Linux一級目錄及其作用
| 一級目錄 | 功能(作用) |
|---|---|
| /bin/ | 存放系統(tǒng)命令,普通用戶和 root 都可以執(zhí)行。放在 /bin 下的命令在單用戶模式下也可以執(zhí)行 |
| /boot/ | 系統(tǒng)啟動目錄,保存與系統(tǒng)啟動相關(guān)的文件,如內(nèi)核文件和啟動引導(dǎo)程序(grub)文件等 |
| /dev/ | 設(shè)備文件保存位置 |
| /etc/ | 配置文件保存位置。系統(tǒng)內(nèi)所有采用默認安裝方式(rpm 安裝)的服務(wù)配置文件全部保存在此目錄中,如用戶信息、服務(wù)的啟動腳本、常用服務(wù)的配置文件等 |
| /home/ | 普通用戶的主目錄(也稱為家目錄)。在創(chuàng)建用戶時,每個用戶要有一個默認登錄和保存自己數(shù)據(jù)的位置,就是用戶的主目錄,所有普通用戶的主目錄是在 /home/ 下建立一個和用戶名相同的目錄。如用戶 liming 的主目錄就是 /home/liming |
| /lib/ | 系統(tǒng)調(diào)用的函數(shù)庫保存位置 |
| /media/ | 掛載目錄。系統(tǒng)建議用來掛載媒體設(shè)備,如軟盤和光盤 |
| /mnt/ | 掛載目錄。早期 Linux 中只有這一個掛載目錄,并沒有細分。系統(tǒng)建議這個目錄用來掛載額外的設(shè)備,如 U 盤、移動硬盤和其他操作系統(tǒng)的分區(qū) |
| /misc/ | 掛載目錄。系統(tǒng)建議用來掛載 NFS 服務(wù)的共享目錄。雖然系統(tǒng)準備了三個默認掛載目錄 /media/、/mnt/、/misc/,但是到底在哪個目錄中掛載什么設(shè)備可以由管理員自己決定。例如,筆者在接觸 Linux 的時候,默認掛載目錄只有 /mnt/,所以養(yǎng)成了在 /mnt/ 下建立不同目錄掛載不同設(shè)備的習(xí)慣,如 /mnt/cdrom/ 掛載光盤、/mnt/usb/ 掛載 U 盤,都是可以的 |
| /opt/ | 第三方安裝的軟件保存位置。這個目錄是放置和安裝其他軟件的位置,手工安裝的源碼包軟件都可以安裝到這個目錄中。不過筆者還是習(xí)慣把軟件放到 /usr/local/ 目錄中,也就是說,/usr/local/ 目錄也可以用來安裝軟件 |
| /root/ | root 的主目錄。普通用戶主目錄在 /home/ 下,root 主目錄直接在“/”下 |
| /sbin/ | 保存與系統(tǒng)環(huán)境設(shè)置相關(guān)的命令,只有 root 可以使用這些命令進行系統(tǒng)環(huán)境設(shè)置,但也有些命令可以允許普通用戶查看 |
| /srv/ | 服務(wù)數(shù)據(jù)目錄。一些系統(tǒng)服務(wù)啟動之后,可以在這個目錄中保存所需要的數(shù)據(jù) |
| /tmp/ | 臨時目錄。系統(tǒng)存放臨時文件的目錄,在該目錄下,所有用戶都可以訪問和寫入。建議此目錄中不能保存重要數(shù)據(jù),最好每次開機都把該目錄清空 |
Linux /usr目錄
usr(注意不是 user),全稱為 Unix Software Resource,此目錄用于存儲系統(tǒng)軟件資源。FHS 建議所有開發(fā)者,應(yīng)把軟件產(chǎn)品的數(shù)據(jù)合理的放置在 /usr 目錄下的各子目錄中,而不是為他們的產(chǎn)品創(chuàng)建單獨的目錄。
Linux 系統(tǒng)中,所有系統(tǒng)默認的軟件都存儲在 /usr 目錄下,/usr 目錄類似 Windows 系統(tǒng)中 C:\Windows\ + C:\Program files\ 兩個目錄的綜合體。
FHS 建議,/usr 目錄應(yīng)具備表 3 所示的子目錄。
表 3 /usr 子目錄及其功能
| 子目錄 | 功能(作用) |
|---|---|
| /usr/bin/ | 存放系統(tǒng)命令,普通用戶和超級用戶都可以執(zhí)行。這些命令和系統(tǒng)啟動無關(guān),在單用戶模式下不能執(zhí)行 |
| /usr/sbin/ | 存放根文件系統(tǒng)不必要的系統(tǒng)管理命令,如多數(shù)服務(wù)程序,只有 root 可以使用。 |
| /usr/lib/ | 應(yīng)用程序調(diào)用的函數(shù)庫保存位置 |
| /usr/XllR6/ | 圖形界面系統(tǒng)保存位置 |
| /usr/local/ | 手工安裝的軟件保存位置。我們一般建議源碼包軟件安裝在這個位置 |
| /usr/share/ | 應(yīng)用程序的資源文件保存位置,如幫助文檔、說明文檔和字體目錄 |
| /usr/src/ | 源碼包保存位置。我們手工下載的源碼包和內(nèi)核源碼包都可以保存到這里。不過筆者更習(xí)慣把手工下載的源碼包保存到 /usr/local/src/ 目錄中,把內(nèi)核源碼保存到 /usr/src/linux/ 目錄中 |
| /usr/include | C/C++ 等編程語言頭文件的放置目錄 |
Linux /var 目錄
/var 目錄用于存儲動態(tài)數(shù)據(jù),例如緩存、日志文件、軟件運行過程中產(chǎn)生的文件等。通常,此目錄下建議包含如表 4 所示的這些子目錄。
<caption>表 4 /var子目錄及其功能</caption>
| /var子目錄 | 功能(作用) |
|---|---|
| /var/lib/ | 程序運行中需要調(diào)用或改變的數(shù)據(jù)保存位置。如 MySQL 的數(shù)據(jù)庫保存在 /var/lib/mysql/ 目錄中 |
| /var/log/ | 登陸文件放置的目錄,其中所包含比較重要的文件如 /var/log/messages, /var/log/wtmp 等。 |
| /var/run/ | 一些服務(wù)和程序運行后,它們的 PID(進程 ID)保存位置 |
| /var/spool/ | 里面主要都是一些臨時存放,隨時會被用戶所調(diào)用的數(shù)據(jù),例如 /var/spool/mail/ 存放新收到的郵件,/var/spool/cron/ 存放系統(tǒng)定時任務(wù)。 |
| /var/www/ | RPM 包安裝的 Apache 的網(wǎng)頁主目錄 |
| /var/nis和/var/yp | NIS 服務(wù)機制所使用的目錄,nis 主要記錄所有網(wǎng)絡(luò)中每一個 client 的連接信息;yp 是 linux 的 nis 服務(wù)的日志文件存放的目錄 |
| /var/tmp | 一些應(yīng)用程序在安裝或執(zhí)行時,需要在重啟后使用的某些文件,此目錄能將該類文件暫時存放起來,完成后再行刪除 |
Linux命令行下如何識別文件類型?
通過 ls -l 命令,我們就可以查看當前目錄下所有文件和目錄各自的屬性,如圖 3 所示。

圖 3 顯示的執(zhí)行結(jié)構(gòu)中,每行代表一個文件或目錄,其中第一個字符表示的就是文件的類型,其可能的取值以及表示的文件類型,如表 4 所示。
表 4 不同字符對應(yīng)的文件類型
| 第一個字符 | 文件類型 |
|---|---|
| - | 普通文件,包括純文本文件、二進制文件、各種壓縮文件等。 |
| d | 目錄,類似 Windows 系統(tǒng)中的文件夾。 |
| b | 塊設(shè)備文件,就是保存大塊數(shù)據(jù)的設(shè)備,比如最常見的硬盤。 |
| c | 字符設(shè)備文件,例如鍵盤、鼠標等。 |
| s | 套接字文件,通常用在網(wǎng)絡(luò)數(shù)據(jù)連接,可以啟動一個程序開監(jiān)聽用戶的要求,用戶可以通過套接字進行數(shù)據(jù)通信。 |
| p | 管道文件,其主要作用是解決多個程序同時存取一個文件所造成的錯誤。 |
| l | 鏈接文件,類似 Windows 系統(tǒng)中的快捷方式。 |
命令的基本格式
接下來看看 Linux 命令的基本格式:
[root@localhost ~]# 命令[選項][參數(shù)]
使用 env 命令來查看到 Linux 系統(tǒng)中所有的環(huán)境變量,執(zhí)行命令如下:
[root@localhost ~]# env
表 1 Linux系統(tǒng)中重要的10個環(huán)境變量
| 環(huán)境變量名稱 | 作用 |
|---|---|
| HOME | 用戶的主目錄(也稱家目錄) |
| SHELL | 用戶使用的 Shell 解釋器名稱 |
| PATH | 定義命令行解釋器搜索用戶執(zhí)行命令的路徑 |
| EDITOR | 用戶默認的文本解釋器 |
| RANDOM | 生成一個隨機數(shù)字 |
| LANG | 系統(tǒng)語言、語系名稱 |
| HISTSIZE | 輸出的歷史命令記錄條數(shù) |
| HISTFILESIZE | 保存的歷史命令記錄條數(shù) |
| PS1 | Bash解釋器的提示符 |
| 郵件保存路徑 |
可以使用 export 命令將其提升為全局環(huán)境變量,這樣其他用戶就可以使用它了:
[root@localhost ~]# mkdir /home/work1
[root@localhost ~]# WORKDIR=/home/work1
[root@localhost work1]# export WORKDIR
參考鏈接:
Linux文件和目錄管理