Linux系統(一)檔案系統、壓縮、打包操作總結

張龍豪發表於2017-02-22

序言

當前的形勢,.Net已經開源,.Net Core 正在跨平臺,可見微軟巨人在努力,在改變,在進步,在走向春天。從前被微軟供作上帝的.Net從業者,如果不開啟心扉面向開源,改變自己,那麼很可能在不久的將來,恐英雄無用武之地,可悲可嘆,嗚呼哀哉!

如今Linux已經是開發者必備技能之一,我們想要了解它,深入它,就不能偷懶,只操作圖示按鈕完美的介面。我要像微軟一樣改變,進步,深入,飛翔,與太陽肩並肩。

那麼感興趣者就來跟哥哥裝裝B,漲漲姿勢,敲敲像電視劇裡面只有黑客才會懂的,黑色背景下的命令吧。一天一點,重在累積吧,其實Linux的學習也就是一個積沙成塔的過程,前後關聯不是很大,學一點會一點,努力吧。

我的Linux目標

我的目標很簡單,就是用命令操作Linux系統,像操作Windows一樣簡單,直觀。

前提:0、不知道什麼是Linux的請點選網頁頂部右上方的X。1、裝個Linux系統,我裝的是CentOS7,不會裝系統的也請點選網頁右上角的X。2、你要自己能夠進入系統中,不要自己都登入,連線不上(好尷尬啊,也X吧)!

接下來我會寫幾篇關於linux的博文,裡面的命令我建議初學者不要只看,不練,要看著敲著,用心記著,記不著啦,就常回來看看。

始於cd,ls命令

好啦,步入正題,我使用的linux連線工具為xshell,mRemoteNG,對兩款工具不做介紹啦,你可以百度一下,實在不會入左上方群。

進入之後,便是上面的介面黑乎乎一片,對於初學者也可能是一片懵逼,猶如狗拿刺蝟,那麼不要急,我們先來看下人生中的第一個linux命令:ls 與 cd 。

首先你先使用下面的cd命令:

[root@localhost ~]#   這個是當前使用者的使用者資料夾主目錄
[root@localhost  /]#   這個是整個系統的根目錄

緊接著輸入ls命令展示出一下結果。

那麼這些檔案都裝載啦什麼東東,為什麼要放在根目錄下,接下來我們對此做個詳解。

ls,cd命令的語法與引數使用方法:http://man.linuxde.net  ,不能偷懶哦,要敲敲, 你才能學好,多敲才能記住的。

Linux的檔案種類,副檔名

在linux中,任何裝置都是檔案,就連資料通訊介面也有專門的檔案負責。所以我們要搞清楚linux下的檔案有哪些?哪些作用?

首先我們這樣輸入命令,如下:

亂七八糟的都是什麼呢?我拿dev這個資料夾做為示例分解下:

1、檔案型別

普通檔案:就是我們一般的檔案,他在linux中按照檔案內容大致分文3種。

  • 純文字檔案(ASCII):內容直接被我們讀到,如數字,字母等,幾乎我們可以設定讀寫的檔案都是這一種,他可以通過cat命令開啟,直接檢視內容。
  • 二進位制檔案(binary):linux唯一可以識別執行的檔案,在系統中可執行檔案就是這種格式,例如:剛剛執行的cat就是一個二進位制檔案。
  • 資料格式檔案(data):程式在執行過程中讀取的特定格式檔案,就是資料檔案,比如:使用者登入的使用者資料記錄在/var/log/wtmp這個資料格式檔案中。比較明顯的特徵使用last可以讀出來,cat讀時是亂碼。

塊(block)裝置檔案:為一些儲存資料,以體統隨機訪問的介面裝置,如硬碟,軟盤等,可以隨機的在硬碟的不同塊讀寫,可以看看/dev/sda

字元(character)裝置檔案:一些串列埠的介面裝置,如鍵盤、滑鼠等。這些裝置的特徵就是“一次性讀取”的,不能夠截斷輸出。例如:滑鼠只能滑動到一個地方而不能跳到另外一個地方。

套位元組(sockets):這種檔案型別用於在網路上的資料連線。

管道(FIFO,pipe):fifo,first-in-first-out,主要解決多個程式同事訪問一個檔案所造成的錯誤問題。

目錄(directory):就是目錄。

連線檔案(link):類似windows系統中的快捷鍵。

 2、檔案許可權r-xr-xr-x

  • 縮寫字母的意義:x:可執行,r:可讀,w:可寫,-佔位。
  • 123:擁有者許可權,456:使用者組使用者許可權,789:其他使用者許可權。
  • 特徵順序為rwx。

3、連線數:表示有多少檔名連線到此節點。

4、檔名

  • linux中沒有像windows中所謂的副檔名。但是為啦方便認識還是要有寫副檔名的習慣。
  • 檔案長度限制,一般不要超過255個字元就好。

  • 檔案命名限制,最好避免*?><;&|、\'"(){}

檔案目錄結構

當你開啟linux系統之後,輸入命令:cd \ 進入根目錄之後,再ls會顯示出如下目錄結構

那麼這些目錄都有存放些什麼檔案,我們的檔案又該以何種規範來存放呢?

Linux目錄結構標準:FHS(Filesystem Hierarchy Standard)標準

為什麼要使用一個標準呢?很簡單,就是讓使用者和廠商有個共同的認識與約束,不至於各自為政,把linux系統的目錄搞的亂七八糟,東西隨便放,那我們的學習成本就很大啦。

關於FHS網上有很多介紹,FHS根據多去的經驗也一直在持續改版(http://www.pathname.com/fhs/),FHS根據檔案系統使用的頻繁情況,是否允許使用者隨意改動,將目錄定義成4種互動作用的形態,如下:

  • 可分享的:可以分享給其他系統掛載使用的目錄。
  • 不可分享的:僅與自身機器有關,不適合分享給其他主機的。如自己機器上執行的裝置檔案或者與程式有關的socket檔案。
  • 不變的:不會經常變動的資料,如說明檔案,函式庫,主機服務配置檔案等。
  • 可變動的:經常會改變的資料,如登入檔案,新聞組等。

根目錄與根目錄下的資料夾存放說明

根目錄是整個系統最重要的一個目錄,因為所有的目錄都是由它衍生出來,而且根目錄也與開機,還原,系統修復等操作有關。

由於系統開機需要特定的開機軟體、核心檔案、開機所需要的程式、函式庫等檔案資料,若系統出現異常時,根目錄也要有能夠修復檔案系統的程式。由此可見根目錄的重要性,所以FHS建議,根目錄不要放在非常大的分割槽內,因為越大防止的檔案越多,出錯的機率也越大,效能也越不好,所以,根目錄應該越小越好,且應用程式所安裝的軟體最好不要與根目錄放在一個分割槽內。

由此我們來說說下面的檔案都是什麼,又怎麼放置才好。

其實,FHS標準對根目錄的定義僅有如下的目錄資料。

其中有5個目錄不可與根目錄分開放在不同的分割槽。這5個目錄分別為:etc,bin,dev,lib,sbin。

那麼除啦以上的資料夾之外,還有一些linux系統中也非常重要的目錄如下:

/dev目錄:

  • hd[a-t]:IDE裝置
  • sd[a-z]:SCSI裝置
  • fd[0-7]:標準軟碟機
  • md[0-31]:軟raid裝置
  • loop[0-7]:本地迴環裝置
  • ram[0-15]:記憶體
  • null:無限資料接收裝置,相當於黑洞
  • zero:無限零資源
  • tty[0-63]:虛擬終端
  • ttyS[0-3]:串列埠
  • lp[0-3]:並口
  • console:控制檯
  • fb[0-31]:framebuffer
  • cdrom => /dev/hdc
  • modem => /dev/ttyS[0-9]
  • pilot => /dev/ttyS[0-9]
  • random:隨機數裝置
  • urandom:隨機數裝置

/etc目錄

  • /etc/rc,/etc/rc.d,/etc/rc*.d : 啟動、或改變執行級時執行的scripts或scripts的目錄。
  • /etc/passwd: 使用者資料庫,其中的域給出了使用者名稱、真實姓名、家目錄、加密的口令和使用者的其他資訊。
  • /etc/fstab :啟動時mount -a命令(在/etc/rc 或等效的啟動檔案中)自動mount的檔案系統列表。Linux下,也包括用swapon -a啟用的swap區的資訊。
  • /etc/group :類似/etc/passwd ,但說明的不是使用者而是使用者組。
  • /etc/inittab :init 的配置檔案,設定系統啟動時init程式將把系統設定成什麼樣的runlevel 。
  • /etc/issue getty 在登入提示符前的輸出資訊.通常包括系統的一段短說明或歡迎資訊內容由系統管理員確定。
  • /etc/motd: Message Of The Day,成功登入後自動輸出內容由系統管理員確定,經常用於通告資訊,如計劃關機時間的警告。
  • /etc/mtab: 當前安裝的檔案系統列表.由scripts初始化,並由mount 命令自動更新,需要一個當前安裝的檔案系統的列表時使用,例如df 命令。
  • /etc/shadow: 在安裝了影子口令軟體的系統上的影子口令檔案.影子口令檔案將/etc/passwd 檔案中的加密口令移動到/etc/shadow 中,而後者只對root可讀這使破譯口令更困難.
  • /etc/login.defs: login 命令的配置檔案。
  • /etc/printcap: 類似/etc/termcap ,但針對印表機語法不同。
  • /etc/profile , /etc/csh.login , /etc/csh.cshrc :登入或啟動時Bourne或C shells執行的檔案,這允許系統管理員為所有使用者建立全域性預設環境。
  • /etc/securetty: 確認安全終端,即哪個終端允許root登入.一般只列出虛擬控制檯,這樣就不可能(至少很困難)通過modem或網路闖入系統並得到超級使用者特權。
  • /etc/shells: 列出可信任的shell.chsh 命令允許使用者在本檔案指定範圍內改變登入shell.提供一臺機器FTP服務的服務程式ftpd 檢查使用者shell是否列在 /etc/shells 檔案中,如果不是將不允許該使用者登入.
  • /etc/sysconfig :網路配置相關目錄
  • /etc/DIR_COLORS: 設定顏色
  • /etc/HOSTNAME: 設定使用者的節點名
  • /etc/NETWORKING: 只有YES標明網路存在
  • /etc/host.conf: 檔案說明使用者的系統如何查詢節點名
  • /etc/hosts: 設定使用者自已的IP與名字的對應表
  • /etc/hosts.allow: 設定允許使用inetd的機器使用
  • /etc/hosts.deny: 設定不允許使用inetd的機器使用
  • /etc/hosts.equiv: 設定遠端機不用密碼
  • /etc/inetd.conf: 設定系統網路守護程式inetd的配置
  • /etc/inetd.pid :inetd這個程式的程式id
  • /etc/hosts.lpd :設定遠端有哪些節點可以使用本機的印表機
  • /etc/gateways: 設定路由器
  • /etc/protocols: 設定系統支援的協議
  • /etc/named.boot: 設定本機為名字伺服器的配置檔案
  • /etc/named.pid: 本機上執行的名字伺服器的程式id
  • /etc/networks :設定網路的配置檔案
  • /etc/resolv.conf :設定系統的名字伺服器
  • /etc/services: 設定系統的端品與協議型別和提供的服務
  • /etc/exports: 設定NFS系統用的
  • /etc/NNTP_INEWS_DOMAIN: 設定新聞伺服器的配置檔案
  • /etc/nntpserver: 設定使用者使用的新聞伺服器的地址
  • /etc/XF86Config: X Window的配置檔案
  • /etc/hostid: 系統獨有的一個硬體id
  • /etc/at.deny: 設定哪些使用者不能使用at命令
  • /etc/bootptab: 給MAKEDEV程式設定各種不同的裝置驅動檔案的格式
  • /etc/makedev.cfg: 同DEVINFO一樣給MAKEDEV使用的設定檔案
  • /etc/diphosts: 設定拔號伺服器的使用者名稱和口令
  • /etc/slip.hosts,/etc/slip.login: 設定SLIP的配置檔案
  • /etc/fastboot: 使用shutdown -f產生的,重啟系統要查這個檔案
  • /etc/fstab: 記錄開機要mount的檔案系統
  • /etc/ftpaccess: FTP伺服器的一些配置
  • /etc/ftpconversions: 設定在FTP時使用的過濾器的位置
  • /etc/ftpusers: 設定不能使用FTP服務的使用者
  • /etc/ld.so.cache: 查詢系統動態連結庫的快取
  • /etc/ld.so.conf: 系統動態連結庫的路徑
  • /etc/lilo.conf lilo:的配置檔案
  • /etc/magic: 給file命令使用的
  • /etc/aliases :給sendmail使用的設定別名的檔案
  • /etc/sendmail.st: 設定sendmail的
  • /etc/motd: 超級使用者釋出通知的地方
  • /etc/organization: 存放使用者的名字和組織
  • /etc/pnpdevices: 列出支援的Plug&Play裝置
  • /etc/snooptad: 監控使用者的螢幕,監聽的終端列表
  • /etc/sudoers: 可以sudo命令的配置檔案
  • /etc/syslog.conf: 系統記錄程式syslogd的配置檔案
  • /etc/utmp: 目前在用系統的使用者資訊
  • /etc/wtmp: 同utmp差不多,只是它累加
  • /etc/nologin: 系統在shutdown時不希望使用者登入就產生這個檔案
  • /etc/termcap: 設定系統終端資訊的
  • /etc/ttys: 設定系統的終端型別
  • /etc/gettydefs: getty_ps的定義檔案
  • /etc/yp.conf: NIS的配置檔案
  • /etc/mtools.conf: 設定mtools程式的引數
  • /etc/fdprm: 設定格式化軟盤的引數
  • /etc/login.access: 控制使用者登入許可權的檔案

/proc目錄

  • /proc/cmdline: 載入 kernel 時所下達的相關引數,查閱此檔案,可瞭解系統是如何啟動。
  • /proc/cpuinfo: 本機的 CPU 的相關資訊,包含時脈、型別與運算功能等
  • /proc/devices: 這個檔案記錄了系統各個主要裝置的主要裝置代號,與 mknod 有關。
  • /proc/filesystems: 目前系統已經載入的檔案系統。
  • /proc/interrupts: 目前系統上面的 IRQ 分配狀態。
  • /proc/ioports: 目前系統上面各個裝置所配置的 I/O 位址。
  • /proc/kcore: 這個就是記憶體的大小,但是不要讀他。
  • /proc/loadavg: 還記得 top 以及 uptime 吧?沒錯,上頭的三個平均數值就是記錄在此。
  • /proc/meminfo: 使用 free 列出的記憶體資訊,在這裡也能夠查閱到。
  • /proc/modules: 目前我們的 Linux 已經載入的模組列表,也可以想成是驅動程式。
  • /proc/mounts: 系統已經掛載的資料,就是用 mount 這個命令呼叫出來的資料。
  • /proc/swaps: 到底系統掛載入的記憶體在哪裡?使用掉的 partition 就記錄在此啦。
  • /proc/partitions: 使用 fdisk -l 會出現目前所有的 partition 吧?在這個檔案當中也有紀錄。
  • /proc/pci: 在 PCI 匯流排上面,每個裝置的詳細情況,可用 lspci 來查閱。
  • /proc/uptime: 就是用 uptime 的時候,會出現的資訊。
  • /proc/version: 核心的版本,就是用 uname -a 顯示的內容。
  • /proc/bus/*: 一些匯流排的裝置,還有 U盤 的裝置也記錄在此。

/usr目錄

依據FHS的基本定義/usr裡面放置的資料屬於可分享不可變動的。usr是UNIX Software Resource的縮寫,也就是“UNIX作業系統軟體資源”所放置的目錄,而不是使用者資料,不要跟user扯上關係。它相當於windows系統中的c:\windows與c:program files這兩個目錄的綜合體。剛裝完系統時,這個目錄佔用的硬碟容量最多。因為幾乎所有的應用程式都安裝在這裡,本地安裝的程式和其他東西放在/usr/local下。

  • /usr/etc: 存放配置檔案。
  • /usr/games: 存放遊戲和教學檔案。
  • /usr/include: c/c++等程式語言的標頭檔案與包含檔案放置處,當我們以tarball方式(*.tar.gz的方式安裝軟體)安裝某些資料時,會使用到裡面的許多包含檔案。開發和編譯應用程式所需要的標頭檔案。
  • /usr/share:放置共享檔案的地方,在這個目錄下放置的資料幾乎是不分硬體架構均可讀取的資料,因為幾乎都是文字檔案。如/usr/share/man:線上幫助檔案,/usr/share/doc:軟體雜項的檔案說明,zoneinfo:與時區相關的檔案。
  • /usr/bin: 絕大部分使用者可使用的命令都放在這裡。有些命令在/bin(是否與開機過程有關) 或/usr/local/bin 中。
  • /usr/sbin :根檔案系統不必要的系統管理命令,例如多數服務程式。
  • /usr/share/man , /usr/share/info , /usr/share/doc: 手冊頁、GNU資訊文件和各種其他文件檔案。
  • /usr/lib: 包含各應用軟體的函式庫,目標檔案,以及不被一般使用者慣用的執行檔案或指令碼。某些軟體會提供一些特殊的命令來進行伺服器的設定,這些命令也不會經常被系統管理員操作,那就被放在這個目錄下。
  • /usr/local:管理員在本機自己安裝自己下載的軟體,建議安裝到此目錄。該目錄也具有bin,etc,include,lib。
  • /usr/src: 存放程式的原始碼,linux核心的原始碼存放在/usr/src/kernels。

/var目錄

usr是安裝時佔用大量的硬碟容量,而var則是在系統執行後才會慢慢佔用硬碟的容量。因為var目錄主要針對常態性變動的檔案,比如,快取,登入檔案,以及某些軟體執行所產生的檔案,包括程式檔案(lock file,run file)。

  • /var/catman:當要求格式化時的man頁的cache.man頁的原始檔一般存在/usr/man/man* 中;有些man頁可能有預格式化的版本,存在/usr/man/cat* 中.而其他的man頁在第一次看時需要格式化,格式化完的版本存在/var/man 中,這樣其他人再看相同的頁時就無須等待格式化了. (/var/catman 經常被清除,就象清除臨時目錄一樣.)
  • /var/lib:系統正常執行時要改變的檔案。
  • /var/local,/usr/local:中安裝的程式的可變資料(即系統管理員安裝的程式).注意,如果必要,即使本地安裝的程式也會使用其他/var 目錄,例如/var/lock 。
  • /var/lock:鎖定檔案.許多程式遵循在/var/lock 中產生一個鎖定檔案的約定,以支援他們正在使用某個特定的裝置或檔案.其他程式注意到這個鎖定檔案,將不試圖使用這個裝置或檔案。
  • /var/log:各種程式的Log檔案,特別是login (/var/log/wtmp log所有到系統的登入和登出) 和syslog (/var/log/messages 裡儲存所有核心和系統程式資訊. /var/log 裡的檔案經常不確定地增長,應該定期清除。
  • /var/run:某些程式或者服務啟動後,會將他們的pid放置在這個目錄下。儲存到下次引導前有效的關於系統的資訊檔案.例如, /var/run/utmp 包含當前登入的使用者的資訊。
  • /var/spool:放置一些佇列資料,就是排隊等待其他程式使用的資料。這些資料被使用後通常都會被刪除。例如,系統收到新信件會放置到/var/spool/mail中,使用者收下後,該信件原則上時會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue中,等到被送出去就被刪除。如果是工作排程資料,就會被放置到/var/spool/cron目錄中。
  • /var/tmp 比/tmp:允許的大或需要存在較長時間的臨時檔案。 (雖然系統管理員可能不允許/var/tmp 有很舊的檔案.)
  • /var/cache:應用程式本身執行過程中會產生的一些暫存檔案。

LIUNX系統的目錄樹,如下:

Linux系統中檔案的壓縮打包功能 

壓縮:是一種通過特定的演算法來減小計算機檔案大小的機制(百度百科下)。

打包:將多個檔案放入一個檔案中,最終以一個檔案的形式存在。

Linux系統中常見的壓縮命令有三種:compress , gzip , bzip2 。

  • compress:這個壓縮命令僅存在古老的unix機器上,是一個很古老的壓縮方式,被gzip所取代,gzip也可以解壓commress的壓縮檔案。所以我這裡不做過多介紹,有需求的朋友可以:http://man.linuxde.net/compress  我這裡給一個截圖如下:
  • gzip:這個壓縮命令在目前來說算是最常見的,它可以解開compress\zip\gzip等軟體所壓縮的檔案。有9個壓縮等級,1最快壓縮比最差,9最慢壓縮比最好,預設為6。使用zcat命令可以檢視讀取compress與gzip的壓縮檔案。對文字的壓縮率可達到:60%-70%,可配合tar使用。
  • bzip:如果說gzip是用來取代compress的,那麼bzip就是為了取代gzip而存在的。他的壓縮率竟然比gzip還要好,可配合tar使用。

gzip的常用用法:

語法:gzip  引數  檔名

引數:

-c:將壓縮的資料輸出到螢幕上,可通過資料重定向來處理。

-d:解壓的引數

-t:可以用來檢驗一個壓縮檔案的一致性,看看檔案是否有錯誤。

-v:可以顯示出原始檔/壓縮檔案的壓縮比資訊。

-#:壓縮等級,1-9。

常用的語句:壓縮:gzip -v filename  ,解壓:gzip -d filename 。 檢視文字壓縮檔案:zcat 檔名。

bzip2的常用用法:

語法:bzip2 引數 檔名

引數:

-c:將壓縮過程中產生的資料輸出到螢幕上

-d:解壓縮

-k:保留原始檔,而不會刪除原始檔案

-z:壓縮

-v:顯示出原始檔/壓縮檔案的壓縮比等資訊。

-#:與gzip相同,1-9壓縮比的引數,1最快,9最佳。

常用的語句:壓縮:bzip2 -z  filename ,解壓:bzip2 -d filename 。檢視壓縮文字:bzcat filename.bz2

tar打包命令

以上三種壓縮解壓只能針對單檔案執行,那麼如果將多個檔案合併到一個大檔案中,怎麼做到呢?那就要用tar這個命令。tar不止這麼多,它還支援gzip/bzip2在打包的同時對檔案進行壓縮。由於這tar使用過於廣泛,就連windows中的WinRAR也支援.tar.gz檔名的解壓縮。

語法:打包與壓縮:tar  [-j|-z] [cv] [-f 新建的檔名] filename     解壓縮: tar [-j|-z] [xv] [-f 新建的檔名] [-C 目錄]

引數:

-c:新建打包檔案,可搭配-v來檢視過程中被打包的檔名

-t:檢視打包檔案的內容含有那些檔名,重點在檢視檔案

-x:解壓縮或解打包的功能,可搭配-C在特定目錄解開。特別留意的是,-c,-t,-x不可同時出現在一串命令中。

-j:通過bzip2的支援進行壓縮或解壓。

-z:通過gzip的支援進行壓縮或解壓。

-v:在壓縮或解壓的過程中,將正在處理的檔名稱顯示出來。

-f filename:-f後面要接被處理的檔名。建議-f單獨寫一個引數。

-C 目錄:這個引數在解壓時,若要在特定目錄解壓縮,可以使用這個引數。

 

.tar.bz2 格式常用的語法

解壓: tar jxvf filename.tar.bz2 , 壓縮: tar jcvf filename.tar.bz2  要壓縮的檔案

.tar.gz 格式常用的語法

解壓:tar zxvf filename.tar.gz ,壓縮: tar zcvf filename.tar.gz  要壓縮的檔案

總結

接下來是大家最喜歡的總結內容啦,內容有三,如下:

1、希望能關注我其他的文章。

2、部落格裡面有沒有很清楚的說明白,或者你有更好的方式,那麼歡迎加入左上方的2個交流群,我們一起學習探討。

3、你可以忘記點贊加關注,但千萬不要忘記掃碼打賞哦。

相關文章