1 前言
首先承諾:對於從Windows系統遷移過來的用戶,困擾大家的 “Linux系統下是否可以把系統文件和用戶文件分開到C盤和D盤中” 的問題也可以得到完滿解決。
之前的文章對Linux的文件系統有過粗略的介紹,但是了解文件系統結構后,有什么用途呢?在本章節將圍繞 "基於用戶角度的Linux下的數據備份和遷移" 的場景,對Linux文件系統相關知識進行實地應用,產生生產力 。
在了解Linux文件系統之后,就可以 藝高人膽大 玩轉Linux的文件目錄了。
本文案例 --- "基於用戶角度的Linux下的數據備份和遷移" 的使用場景描述如下:
發生在安裝了新系統之后,需要將舊系統的數據進行復制或者是遷移,用戶需要知道哪些數據是需要遷移的,哪些數據是需要備份的,以最小的代價實現文件的備份和遷移。
涉及的數據類型主要有:
- 用戶多媒體文檔數據
- 用戶/系統 應用程序配置數據
- 用戶/系統 應用程序執行文件
- 系統日志數據
2 FHS文件模型
在之前章節的文章里面提到過由 Linux Foundation 提出的對Linux各分支進行的文件目錄的相關約定標准 : Linux的FHS(Filesystem Hierachy Standart)。
FHS把Linux的文件系統按照 "是否可變" 與 "是否可分享" 將所有目錄大概分成四類:
shareable | unshareable | |
---|---|---|
static |
|
|
variable |
|
|
最大的基准分類框架就如上表所示。對於初識Linux的人來說,看到根目錄下的一系列的文件肯定會感到困惑。所以完全有必要對FHS相關規定進行研究,這樣有如下好處:
- 在使用或者開發Linux文件系統時,能了解Linux的設計標准,並在使用過程中盡量遵守准則
- 在接觸並使用不同Linux分支時,即使Linux分支有萬千,但也能萬變不會離其宗,FHS不是“宗”之一
- 在進行系統級別數據遷移時,可以進行科學的選擇性的遷移(比如,重裝系統后的用戶配置數據遷移)
- 在進行文件物理隔離存儲時,可以根據“文件數據重要級別”或者“目錄的潛在占用空間增長”進行合理物理分離存儲或備份
- 在性能優化時,根據讀寫的頻率,對不同目錄分配不同存儲設備(如:機械硬盤或者SSD固態硬盤)
- 在部署系統集群時,對於靜態的可分享的目錄,可以部署在某此只讀存儲器上,然后被需要的機器進行掛載,可以避免不必要的存儲空間
3 用戶數據
本文所指的用戶數據是指,對比標准化的原生系統,由用戶或者系統管理員在使用過程中產生的修改化配置或者安裝的文件。
3.1 home
每新建一個用戶,都會在此目錄下面建立一個和用戶名相同名稱的目錄,用於存儲此用戶產生的文件數據和用戶個性化配置數據。
通過命令行列出所有的用戶目錄文件:
➜ ~ ls -a . .gconf .pip .Xauthority .. .Genymobile .pki .xinputrc .adobe .gimp-2.8 .profile .xmind .android .gitconfig proxychains-ng .xsession-errors .AndroidStudio1.3 .gksu.lock Public .xsession-errors.old .bash_history .gnome .PyCharm40 .zcompcache .bash_logout .gnome2 pycharm-config.jar .zcompdump .bashrc .gphoto record-demo-plus-hold.mp4 .zcompdump-zheng-desktop-5.0.2 .cache .gradle .sample-music .zsh_history .config .gstreamer-0.10 shortcuts-images .zshrc .cr3 .icons .ssh .zshrc.pre-oh-my-zsh .cxoffice .java .ssr .zsh-update .dbus .kingsoft Templates 公共的 .dde-dock-applets.ini KuaiPan Tencent Files 模板 Desktop .local .themes 視頻 .dlockpid .macromedia .thumbnails 圖片 .dmrc .mozilla .thunderbird 文檔 Documents Music .viminfo 下載 Downloads .oh-my-zsh .viminfo.tmp 音樂 .esd_auth .pam_environment .wireshark 桌面 .filezilla Pictures .wiznote
如上主要分為如下幾類文件:
-
- 用戶通用文檔文件
-
視頻、圖片、文檔、下載、音樂、桌面
-
- 應用程序配置文件
-
和桌面應用程序相關的程序的配置文件,以 . 點號開頭,默認的隱藏文件,例如:
- .adobe 是 pdf閱讀器 adobe 應用程序的配置文件目錄
- .filezilla 是FTP客戶端程序 filezilla 配置文件目錄
- 其它。。。
-
- 用戶環境變量配置文件
-
-
- .profile
-
對應用戶登錄的時候,會加載的環境變量
-
- .bashrc
-
每次使用當前用戶開啟 bash shell 的時候要執行的腳本
-
在用戶數據遷移的時候,很關心的是應用程序的配置信息,關於用戶應用程序配置文件的目錄有兩個地方:
- /home/xxx 目錄下的以點號開頭的隱藏文件
- /home/xxx/.config 目錄下的文件
用戶目錄下的隱藏配置文件,前端已經介紹,在 .config 目錄下面還有一些:
➜ .config cd /home/zheng/.config ➜ .config ls -a . deepin_monitors.json eog htop Pencil Trolltech.conf .. deepin-movie fcitx ipython pulse ubuntukylin autostart deepin-software-center fcitx-qimpanel kingsoft QtProject.conf user-dirs.dirs bleachbit deepin-terminal geany Kingsoft ReText project user-dirs.locale calibre deepin-ui gedit launcher robomongo yelp chromium desktop Genymobile liteide shutdown youdao-dict compiz-1 dock git matplotlib SogouPY zone dconf Dolezel google-chrome menus SogouPY.users dde-daemon dra gtk-2.0 nautilus sogou-qimpanel deepin DUI gtk-3.0 not_first_run_dde sublime-text-2
用戶所安裝的主要的桌面應用程序的配置文件都在此處,例如:
-
- kingsoft
-
金山辦公套件配置文件
-
- google-chrome
-
谷歌Chrome瀏覽器的用戶配置及用戶數據存儲目錄
-
- robomongo
-
mongodb數據庫的客戶端操作軟件
說了這么多,這些配置文件具體有什么作用呢?舉兩個最簡單的例子:
- FTP客戶端軟件 filezilla
- mongodb數據庫客戶端軟件 robomongo
如果做系統管理員,必然會少不了使用相應的客戶端軟件來管理多個服務器( 文件服務器 或者 數據庫服務器 ),在用戶使用Linux Desktop的過程中,有些客戶端軟件會不斷的積累應用程序配置文件,例如:
FTP客戶端配置數據:

Mongodb客戶端配置數據:

如果將上述提到的配置目錄復制到新的機器下面,再打開相應的客戶端軟件的時候,這些配置信息都會跟隨着遷移過去(其實本質上是里面的配置文本數據遷移過去了,此處為了簡便,干脆整個目錄一起遷移過去了)
3.2 etc
關於etc目錄的全稱,比較公認的說法是 Editable Text Config :可編輯的文本配置文件。
里面主要存放系統運行時所用到的一些文本配置文件。例如:除去用戶密碼這些信息外,基本上所有的和服務器應用程序相關的配置文件都存放在此處。關於此目錄下具體的文件的意義,此處也不再贅述,在進行遷移和備份的時候,需要擇取所需要的配置文件進行遷移備份即可。
如果是Linux服務器系統管理員,打交道最多的目錄應該就是 etc 目錄了,搭建各種服務器必然要處理的配置目錄。
3.3 opt
通過命令行,查看此目錄下的文件:
➜ /opt ls -a . .. cxoffice deepin-boot-maker google kingsoft Point ubuntukylin
此目錄是部分應用程序的安裝目錄,一般情況是指通過 deb/rpm 文件或者是 make 的方式安裝的時候,應用程序的目錄會放在此處。
例如:
-
- google/chrome
-
chrome瀏覽器安裝目錄
-
- kingsoft/wps-office
-
金山辦公套件應用程序安裝目錄
這些應用程序都通過 deb 包安裝的。
3.4 var
var目錄主要存放一些經常變化的數據,例如:
-
-
郵件數據
-
- log
-
系統應用程序或者用戶應用程序的日志,主要是文本文件。
這一塊是隨着系統不斷運行的過程中會不斷變化的。這一塊的數據不是系統運行所必須的,但是對於系統管理員排查應用程序運行中的狀態值很有幫助。
3.5 usr
usr的全稱是 Unix Software Resource ,專門用來存放Unix系統的安裝軟件,在/opt目錄不同的是,此目錄一般存放的是通過 命令行安裝的應用程序,例如,在ubuntu下面一般存放的是通過 apt-get install 安裝的應用程序。
此目錄下的主要文件目錄如下:
➜ /usr ls -a . .. bin games include lib local sbin share src
基本上,只要將此目錄遷移到新系統中,舊系統中通過 apt-get install 安裝的應用程序也會遷移過去了。
4 文件遷移命令
使用rsync命令可以實現文件的同步遷移。
使用 man rsync 命令可以查看rsync的具體用法:
NAME rsync - a fast, versatile, remote (and local) file-copying tool SYNOPSIS Local: rsync [OPTION...] SRC... [DEST] Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync 是一種極其快速而且萬能的復制工具,主要功能如下:
- 本地A目錄往B目錄同步復制文件(local copy)
- 本地A目錄往遠程RB目錄同步復制push文件(remote push )
- 遠程RC目錄往本地A目錄同步復制pull文件(remote pull )
主要的 OPTION 參數可以通過 man rsync 命令查看
在本文中向新的系統做數據遷移時主要用到的是歸檔功能,相應的命令如下:
rsync -avzP src_dir dest_dir
-
- a archive 稱為歸檔模式,執行以下操作
-
- 遞歸模式
- 保留符號鏈接
- 保留權限
- 保留時間標記
- 保留用戶名及組名
-
v verbose 輸入命令執行的中間過程
-
z compress 對同步中的文件進行壓縮傳送(相當以耗費CPU計算資源來節省傳送的IO成本)
-
P progress 傳送過程中的詳細進度百分比
一般情況下,只需要使用 rsync 命令,將用戶所需要遷移的數據進行相應的目錄同步拷貝即可。
5 小結和展望
Linux系統下面沒有Windows系統下所謂的注冊表。可以將Linux系統理解為一個“純綠色”的軟件安裝系統。至於為何有些程序可以直接(不需要指定路徑)通過命令行的方式啟動,有些則不能,這個和“注冊表”無關,只是因為此應用程序如果采用標准安裝方式,系統會在環境變量PATH 目錄下面生成一個軟鏈接而已。
通過Linux的文件遷移實驗,可以清楚了解Linux文件系統中的各種文件是如何各司其責,並存放在相應的目錄下的,然后就不會產生“因為不了解,所以害怕”的為難情緒了。
關於遷移到新系統后,應用程序如何遷移,本文提供的是直接文件級別的復制,還有一種自動化的方法就是基於命令行的批處理文件的執行安裝,如果有比較快速的網絡,推薦執行命令行自動化安裝(后面會奉上文章)。
作者: | Harmo哈莫 |
---|---|
作者介紹: | https://zhengwh.github.io |
技術博客: | http://www.cnblogs.com/beer |
Email: | dreamzsm@gmail.com |
QQ: | 1295351490 |
時間: | 2015-10-02 |
版權說明: | 未經許可,嚴禁用於商業目的的非法傳播 |
聯系或打賞: | http://zhengwh.github.io/contact-donate.html |