文件系統(tǒng)

在Linux操作系統(tǒng)中,文件的概念包括文件的組織和管理、操作系統(tǒng)中文件的表示,以及文件存儲(chǔ)的過程等。

一、文件系統(tǒng)結(jié)構(gòu)

Linux文件系統(tǒng)的結(jié)構(gòu)層次鮮明,就像一棵倒立的樹。文件系統(tǒng)結(jié)構(gòu)從一個(gè)主目錄開始,稱為根目錄。根目錄下可以有任意多個(gè)文件和子目錄,并且可以按任意的方式組織在一起。


典型的Linux文件結(jié)構(gòu).png
  • 根目錄 /
    根目錄位于分層文件系統(tǒng)的最頂層,用斜線 / 表示。它包含一些標(biāo)準(zhǔn)文件和目錄,因此可以說它包含了所有的目錄和文件。
    cd /
  • bin
    也被稱為二進(jìn)制目錄,包含了系統(tǒng)管理員和普通用戶使用的重要的Linux命令的二進(jìn)制(可執(zhí)行)程序。
    cd /bin
  • lib
    存放重要的庫文件,其他的庫文件則大部分存儲(chǔ)在/usr/lib下。
    cd /lib
  • home
    存放所有普通系統(tǒng)用戶的默認(rèn)工作目錄(用戶主目錄)。
    cd /home
  • root
    大多數(shù)Linux系統(tǒng)中,/root目錄是系統(tǒng)管理員的目錄,普通用戶沒有權(quán)限訪問/root目錄。
  • tmp
    存放臨時(shí)性的文件
    cd /tmp
  • usr
    它是Linux文件系統(tǒng)中最大的目錄之一,存放了可以在不同主機(jī)間共享的只讀數(shù)據(jù)。
    cd /usr

二、基本操作

熟悉了文件的系統(tǒng)結(jié)構(gòu),下面將詳細(xì)介紹一下在Linux系統(tǒng)中文件目錄的表示方法以及一些基本的操作命令。

1、文件或目錄的表示方法

Linux下的文件或者目錄通過路徑來表示,路徑有兩種表示方式:

  • 絕對路徑:從根目錄開始。
  • 相對路徑:從當(dāng)前工作目錄開始。
    當(dāng)用戶登錄Linux或者在Ubuntu上打開一個(gè)終端后,首先進(jìn)入一個(gè)特殊目錄,稱為“用戶主目錄”。Linux規(guī)定可以用符號(hào)“~”表示當(dāng)前登錄用戶的“用戶主目錄”。當(dāng)前工作目錄可以用“.”表示,當(dāng)前工作目錄的父目錄可以用“..”表示。

2、命令

下面介紹Linux下目錄操作和文件操作命令的使用,包括目錄創(chuàng)建、刪除和查看,以及文件的查看、復(fù)制、刪除和比較等。這些操作都是文件的基本操作,掌握它們有助于快速管理文件系統(tǒng)。

2.1 查看當(dāng)前所在目錄的絕對路徑 pwd

使用pwd命令可以確定當(dāng)前所在目錄的絕對路徑

  xuqing@master: ~ $ pwd

執(zhí)行此命令的輸出結(jié)果為"/home/xuqing",這也是當(dāng)前用戶的主目錄。

2.2 創(chuàng)建新目錄 mkdir

用mkdir命令創(chuàng)建一個(gè)新目錄,注意是新建目錄而不是文檔,其語法格式如下:
mkdir [選項(xiàng)] <目錄名>

  • -m,對新建的目錄設(shè)置權(quán)限
  • -p,創(chuàng)建存在中間路徑的目錄
    例如:創(chuàng)建一個(gè)目錄名為information的目錄
    mkdir information
    例如:若需要在information目錄下創(chuàng)建A,在A目錄下創(chuàng)建B,可執(zhí)行下列命令。
    mkdir information/A/B -p
2.2.1 創(chuàng)建文件
  • touch file創(chuàng)建文件或者是可以改變文件的修改時(shí)間
2.3 改變目錄 cd

cd命令用于改變目錄,其語法格式如下:
cd [目錄名]

  • cd,進(jìn)入用戶主目錄;
  • cd ~,進(jìn)入用戶主目錄;
  • cd -,返回進(jìn)入此目錄之前所在的目錄;
  • cd ..,返回上級(jí)目錄;
  • cd ../,返回上級(jí)目錄;
2.4 列目錄內(nèi)容 ls

ls命令的語法格式如下:
ls [選項(xiàng)] [目錄或文件]

  • -a,顯示指定目錄下的所有子目錄與文件,包括隱藏文件;
  • -l,采用長格式來顯示文件的詳細(xì)信息;
  • -r,將目錄的內(nèi)容清單以字母順序的逆序顯示;
  • -R,將目標(biāo)目錄以及子目錄都顯示出來;
  • -t,按時(shí)間信息排序;
    ls -l /usr
    顯示結(jié)果如下:
    drwxr-xr-x 2 xuqing xuqing 4096 Dec 8 23:18 Documents
    drwxr-xr-x:文件屬性,第一位是文件類型d表示目錄文件,-表示普通文件,剩下9位為文件權(quán)限;
    2:連接數(shù);
    xuqing:所有者;
    xuqing:所有者所在的組;
    4096:文件字節(jié)大小;
    Dec 8 23:18:最近一次修改時(shí)間;
    Documents:文件名;
2.5 列目錄內(nèi)容 ll

ll命令能以長格式的方式顯示所有文件。

2.5.1 查看文件完整內(nèi)容 cat

cat命令用于查看完整的文件內(nèi)容,注意cat命令是針對的文檔,這個(gè)要跟目錄區(qū)分開來,其語法格式如下:
cat [option] <file>

  • -E,在每一行的末尾顯示符號(hào)$;
  • -n,顯示每一行的行號(hào),包括空行;
  • -b,顯示每一行的行號(hào),不包括空行;
    cat -n /etc/passwd
2.5.2 查看多于一頁的文件內(nèi)容 more 或 less

命令more或less來分頁顯示文件,其中more的語法格式如下:
more [option] <file>

  • +number,從第number行開始顯示內(nèi)容;
  • -number,指定每屏幕要顯示number行;
  • -s,把重復(fù)的空行壓縮成一個(gè)空行;
  • -p,不以卷動(dòng)的方式顯示每一頁,而是先清除整個(gè)屏幕再顯示文本;
    空格鍵顯示文件下一頁,按Enter鍵顯示文件下一行,按q鍵可以退出命令回到Shell。
    命令less具有more沒有的功能,因此效率會(huì)更高,其語法格式如下:
    less [option] <file>
  • -N,顯示行號(hào);
  • -pwant,在文件中查找匹配want的第一處位置,此命令也可以直接用"/want"來替代;
    例如:分頁顯示/etc/passwd文件內(nèi)容,并查找字符串“xuqing”的第一處位置。
    less -pxuqing /etc/passwd
2.5.3 head命令

head命令用于查看文件頭部內(nèi)容,其語法格式如下:
head [option] <file>

  • -number,顯示開始的number行,若不使用該選項(xiàng),默認(rèn)是10行。
    例如:查看/etc/passwd文件中的前5行內(nèi)容。
    head -5 /etc/passwd
2.5.4 tail命令

tail命令用于查看文件尾部的內(nèi)容,用法跟head類似,其語法格式如下:
tail [option] <file>

  • -n,表示顯示文件的最后n行;
  • -c n,表示輸出最后n個(gè)字節(jié);
    例如:輸出/etc/passwd文件的最后40個(gè)字節(jié)。
    tail -c 40 /etc/passwd
2.6 查看文件大小 du

du命令可以查看文件或者目錄的大小,其語法格式如下:
du [option] <file>

  • -a,對涉及到的所有文件進(jìn)行統(tǒng)計(jì),而不只是包含子目錄;
  • -h,自動(dòng)以合適的單位輸出文件的大小;
  • -b,輸出以字節(jié)為單位的文件的大??;
  • -k,輸出以1024字節(jié)為計(jì)數(shù)單位的文件的大??;
  • -m,輸出以兆字節(jié)的塊為計(jì)數(shù)單位的文件的大??;
  • -c,給出總計(jì);
    例如:以1024字節(jié)為計(jì)數(shù)單位查看文件/usr的大小。
    du -k /usr
2.6.1 查看磁盤大小 df
  • -k,以kbytes為單位顯示;
  • -l,只顯示本地磁盤;
2.7 文件復(fù)制 cp

cp命令是復(fù)制命令,其語法格式如下:
cp [option] <file1> <file2>

  • -i,如果目的文件存在,會(huì)在覆蓋前提示;
  • -p,保留文件的權(quán)限屬性和修改時(shí)間;
  • -r,遞歸復(fù)制目錄(包括目標(biāo)文件的子目錄);
    file1,是被復(fù)制的文件;
    file2,是要復(fù)制到的文件或目錄;
    例如:如下的兩個(gè)命令。
    cp -i /usr/bin/ldd ~
    cp -r /usr/bin information
2.8 文件移動(dòng)或重命名 mv

mv命令可以實(shí)現(xiàn)轉(zhuǎn)移文件和重命名文件,其語法格式如下:
mv [option] <file1> <file2>

  • -f,在覆蓋目的文件前永不提示用戶;
  • -i,在覆蓋目的文件前提示用戶;
    file1,要轉(zhuǎn)移的文件;
    file2,要轉(zhuǎn)移到的位置;
    例如:在當(dāng)前用戶主目錄下的ldd文件轉(zhuǎn)移到information目錄下,并且修改名為ldd.exe。
    mv ldd information/ldd.exe
2.9 文件刪除 rm

刪除文件的命令是rm,其語法格式如下:
rm [option] <file>

  • -r,遞歸地刪除目錄中的內(nèi)容及目錄本身;
  • -i,在刪除文件列表中的文件前給出提示;
    文件列表,可以是多個(gè)文件,不同文件之間由空格分開;
    rm -r information
2.10 比較文件 diff

Linux中,diff命令用來比較兩個(gè)文件的內(nèi)容,通過把其中一個(gè)文件轉(zhuǎn)換成另一個(gè)文件的命令形式來顯示這兩個(gè)文件之間的區(qū)別,其語法格式如下:
diff [option] [file1] [file2]

  • -b,忽視行尾的空,把空白字符串當(dāng)做相同的字符串來處理;
  • -h,快速比較;
    使用這個(gè)指令可以將file1轉(zhuǎn)換成file2,所以diff的操作對象是file1,實(shí)質(zhì)上,diff命令在執(zhí)行時(shí),一行一行地比較兩個(gè)文件的內(nèi)容,并以命令的形式顯示它們之間的區(qū)別。如果兩個(gè)文件相同,diff命令不會(huì)產(chǎn)生任何輸出,否則它會(huì)產(chǎn)生一系列指令,這些指令是a(增加)、c(替換)、d(刪除)。這些指令以及意義如下:
  • 1a2,3,將file2的第2行到第3行添加到file1的第一行后面;
  • 1c1,將file1的第一行用file2的第二行替代;
  • 16,17d15,將file1的第16、17行刪除;
2.11 刪除重復(fù)行 uniq

用命令uniq刪除文件中所有連續(xù)的重復(fù)行(連續(xù)出現(xiàn)才被稱為重復(fù)行,不連續(xù)行出現(xiàn)不被認(rèn)為是重復(fù)行),只留下一行。該命令不改變文件的內(nèi)容,只是把結(jié)果輸出到屏幕或者文件中,其語法格式如下:
uniq [option] [input-file] [output-file]

  • -c,在每行之前顯示它們出現(xiàn)的次數(shù);
  • -d,只顯示重復(fù)行;
  • -u,只顯示未重復(fù)行;
    例如:顯示abc文件中的重復(fù)信息,將結(jié)果輸出到屏幕上;將結(jié)果輸出到ABC文件中。
    uniq -d abc ABC

3、訪問權(quán)限

所謂文件安全,也就是常說的文件保護(hù)。文件保護(hù)分為基于密碼的文件保護(hù)、基于文本加密的文件保護(hù)和基于訪問權(quán)限的文件保護(hù)。我們主要討論基于訪問權(quán)限的文件保護(hù)。

3.1 訪問權(quán)限的分類和用戶類別

在Linux中每一個(gè)文件或目錄都包含有訪問權(quán)限。

  • 訪問權(quán)限的分類:可讀(r)、可寫(w)、可執(zhí)行(x)三種。

  • 訪問權(quán)限的用戶類別:文件所有者、同組用戶、其他用戶。

    xuqing@master:~ $ ls -l /usr
    drwxr-xr-x 2 xuqing xuqing 4096 Dec 8 23:18 Documents
    

    drwxr-xr-x:訪問權(quán)限一共10個(gè)字符,其中d表示文件類型,rwx表示用戶所有者的權(quán)限,r-x表示同組用戶,r-x表示其他用戶。

3.2 訪問權(quán)限設(shè)置

在Linux中,可以使用命令chmod來改變文件或目錄的訪問權(quán)限,其語法格式如下:
chmod [option] [mode] <file>

  • -v,顯示權(quán)限變更的詳細(xì)資料;
  • -R,對目前目錄下的所有檔案與子目錄進(jìn)行相同的權(quán)限變更(即以遞歸的方式逐個(gè)變更);

mode,是權(quán)限標(biāo)記,可以有符號(hào)標(biāo)記和八進(jìn)制數(shù)兩種格式。由[who][operator][permission]三部分組成。
(1) 符號(hào)標(biāo)記法修改權(quán)限
[who]

  • u,表示“用戶(user)”,即文件或目錄的所有者;
  • g,表示“同組用戶(group)”,即與文件所有者同組的所有者;
  • o,表示“其他用戶(other)”;
  • a,表示“所有用戶(all)”,它是系統(tǒng)默認(rèn)值;
    [operator]
  • +,添加某個(gè)權(quán)限;
  • -,取消某個(gè)權(quán)限;
  • =,賦予給定權(quán)限并取消其他權(quán)限,即設(shè)定唯一的權(quán)限;
    [permission]
  • r,可讀;
  • w,可寫;
  • x,可執(zhí)行;
    例如:要修改當(dāng)前目錄下的abn文件的權(quán)限,使其他用戶沒有讀、寫、執(zhí)行權(quán)限;修改當(dāng)前目錄下的abn文件的權(quán)限,使得同組用戶只有只讀權(quán)限;將當(dāng)前test目錄下的所有文件及子目錄全部去掉寫權(quán)限。
  chmod o-rwx abn
  chmod g=r abn
  chmod -R a-w test

(2) 八進(jìn)制數(shù)法修改權(quán)限
使用八進(jìn)制數(shù)法修改權(quán)限
chmod命令中的mode用三個(gè)八進(jìn)制abc表示,其中:

  • a,表示用戶(user)權(quán)限;
  • b,表示同組(group)用戶權(quán)限;
  • c,表示其他(other)用戶的權(quán)限;
    而八進(jìn)制數(shù)是4(可讀)、2(可寫)、1(可執(zhí)行)的組合,因此,
  • rwx,則4+2+1=7;
  • rw-,則4+2=6;
  • r-x,則4+1=5;
    例如:要修改當(dāng)前目錄下的abn文件的權(quán)限,用戶具有讀、寫、執(zhí)行權(quán)限,同組用戶和其他用戶具有讀和執(zhí)行權(quán)限。
    chmod 755 abn

4、高級(jí)處理

下面將介紹一些高級(jí)的文件處理操作,包括正則表達(dá)式、文件查找、文件壓縮與解壓、文件備份與還原等。

4.1 正則表達(dá)式

正則表達(dá)式,又稱規(guī)則表達(dá)式(Regular Expression)。在代碼中常簡寫為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式描述了一種字符串匹配的模式,可以用來檢查一個(gè)串是否含有某種子串、將匹配的子串做替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。正則表達(dá)式的部分操作符及其含義

  • ^,匹配輸入字符串開始的位置?!癪st”匹配以st開始的行
  • ****,匹配輸入字符串結(jié)尾的位置。“st”匹配以st結(jié)尾的行
  • , 匹配零次或多次前面的字符或表達(dá)式?!皕o*”匹配“z”和“zo”
  • +,一次或多次匹配前面的字符或表達(dá)式。“zo+”匹配“zo”和“zoo”
  • =,前一項(xiàng)可有可無
  • \ |,多選一
  • ?,零次或一次匹配前面的字符或表達(dá)式?!癲o?”匹配“do”或者“does”中的“do”
  • {n},n是非負(fù)整數(shù),正好匹配n次?!皁{2}”與“Bob”中的“o”不匹配,但與“food”中的“oo”匹配
  • {n,m},m n是非負(fù)整數(shù),n=<m,匹配至少n次,至多m次。“o{1,3}”匹配“foooood”中的前三個(gè)“o”
  • x|y,匹配x或y。“z|food”匹配“z”或“food”,“(z|f)ood”匹配“zood”或“food”
  • [a-z],字符范圍,匹配指定范圍內(nèi)的任何字符。“[a-z]”匹配“a”到“z”范圍內(nèi)任何小寫字母
  • [^a-z],反向字母范圍,匹配不在指定范圍內(nèi)的任何字符。
  • \b,匹配一個(gè)字邊界?!癳r\b”匹配“never”中的“er”,但不匹配“verb”中的“er”
  • \B,非字邊界匹配?!癳r\B”匹配“verb”中的“er”,但不匹配“never”中的“er”
  • \f,換頁符匹配。
  • \d,數(shù)字字符匹配,等效于[0-9]。
  • \D,非數(shù)字字符匹配,等效于[^0-9]。
  • \n,換行匹配。
  • \r,匹配一個(gè)回車符。
  • \s,匹配任何空白字符,包括空格、制表符、換頁符等。
  • \t,制表符匹配。
  • \w,匹配任何字類字符。
  • \W,匹配任何非字類字符。
4.2 文件內(nèi)容的查找

搜索文件內(nèi)容的命令有g(shù)rep、egrep和fgrep。三個(gè)命令中,fgrep命令是執(zhí)行速度最快的,不過有較多的限制;egrep是最慢的,但卻是最靈活的,完全支持正則表達(dá)式;grep具有合理的速度和部分正則表達(dá)式支持。

4.2.1 grep、egrep、fgrep命令

三種命令的語法格式如下:
grep [option] [mode] [file]
egrep [option] [mode] [file] 等價(jià)于grep -E
fgrep [option] [mode] [file]等價(jià)于grep -F

  • -c,顯示匹配的行數(shù);
  • -w,把表達(dá)式作為詞來尋找;
  • -l,只列出行所在文件名;
  • -n,顯示匹配內(nèi)容所在文檔的行號(hào);
  • -i,匹配時(shí)忽略大小寫;
  • -v,輸出不匹配內(nèi)容;
  • -x,只選擇能匹配完整一行的匹配;
    [mode]是要搜索文件的類型,指字符串或是表達(dá)式。常用的正則表達(dá)式操作符有:
  • ^,$,匹配字符串在行首,行尾;
  • <,匹配表達(dá)式的開始;<man匹配manic、man
  • >,匹配表達(dá)式的結(jié)尾;>man匹配batman、man
  • ,匹配零個(gè)或多個(gè)字符;man*匹配manic、Batman、man
  • [ ],單個(gè)字符;
  • [-],范圍;
4.2.2 關(guān)于引號(hào)的使用
  • 當(dāng)抓取的是一個(gè)不包含空格的簡單字符時(shí),既可以使用單引號(hào)也可以使用雙引號(hào),或者甚至不使用引號(hào)。

    grep hello abn
    grep 'hello' abn
    grep "hello" abn
    

三者是等價(jià)的。

  • 當(dāng)抓取的字符串包含空格時(shí),需要使用單引號(hào)或者雙引號(hào)。

    grep 'hello ok' abn
    grep "hello ok" abn
    

兩者是等價(jià)的。

  • 當(dāng)抓取含有正則表達(dá)式的操作符時(shí),具體情況具體分析。

    grep '$hello' abn
    grep "$hello" abn
    grep $hello abn
    

第一條:查找abn文件中含有$hello字符串的行;
第二和第三條:查找abn文件中包含變量hello所代表的內(nèi)容行;

4.2.3 應(yīng)用實(shí)例

使用grep命令將stdio.h文件中包含字符串“include”的行都顯示出來;
使用grep命令查找以字符串“#ifndef”開頭的行;
使用grep命令搜索/usr/include目錄下以.h為擴(kuò)展名的文件且包含stdio.h的行;

grep -n 'include' stdio.h
grep '^#ifndef' /usr/include/stdio.h
grep 'stdio.h' /usr/include/*.h

5、文件查找

在Linux中,用find命令查找文件,其語法格式:
find [file] [option] [pathname]

  • -name,按照文件名查找文件;
  • -perm,按照文件權(quán)限查找文件;
  • -user,按照文件所有者查找文件;
  • -group,按照文件所屬的組查找文件;
  • -mtime -n +n,按照文件的更改時(shí)間查找文件,-n表示文件更改時(shí)間距現(xiàn)在n天以內(nèi),+n表示文件更改時(shí)間距現(xiàn)在n天以前;
  • -amin n,查找系統(tǒng)中最后n分鐘訪問的文件;
  • -cmin n,查找系統(tǒng)中最后n分鐘改變文件狀態(tài)的文件;
  find -name stdio.h /usr/include

6、文件排序

排序是指按照一定的標(biāo)準(zhǔn)對集合里的元素指定順序。Linux中的文件內(nèi)容排序使用sort命令,其語法格式如下:
sort [option] [file]

  • -b,忽略每行前面開始處的空白字符;

  • -c,檢查文件是否已經(jīng)按照順序排序;

  • -d,排序時(shí),除了英文字母、數(shù)字及空格字符外,忽略其他字符;

  • -f,排序時(shí),忽略大小寫;

  • -n,依照數(shù)值的大小排序;

  • -r,以反向的順序來排序;

  • -u,排序輸出時(shí),去掉重復(fù)行;

    sort number.txt
    

7、文件壓縮與解壓縮

在Linux中,利用gzip命令的來壓縮和解壓文件,其語法格式如下:
gzip [option] [file]

  • -c,將輸出寫到標(biāo)準(zhǔn)輸出上,并保留原有文檔;

  • -d,將壓縮文件解壓;

  • -r,遞歸式地查找指定目錄并壓縮或解壓其中所有文件;

  • -t,測試、檢查壓縮文檔是否完整;

  • -v,對每一個(gè)壓縮和解壓縮的文件顯示文件名和壓縮比;

    gzip -r ztest
    gzip -rd ztest
    

8、文件備份和還原

在Linux操作系統(tǒng)中,利用tar命令可以將一個(gè)目錄壓縮成一個(gè)普通的文件(稱為檔案文件),需要還原時(shí),可以再次使用tar命令從檔案中釋放文件。
tar命令的語法格式如下:
tar [option] [file]

  • -c,創(chuàng)建新的檔案文件。如果用戶想備份一個(gè)目錄或文件就要使用這個(gè)選項(xiàng);

  • -r,把要存檔的文件追加到檔案的末尾。例如用戶已經(jīng)做好備份文件,又發(fā)現(xiàn)還有一個(gè)目錄或一個(gè)文件忘記備份了,此時(shí)可以選擇這個(gè)選項(xiàng),將忘記的目錄或者文件追加到檔案文件中;

  • -t,列出檔案文件的內(nèi)容,查看已經(jīng)備份了哪些文件;

  • -u,更新文件。即用新增的文件取代原來備份的文件,如果在檔案文件中找不到要更新的文件,則把它追加到檔案文件的最后;

  • -x,從檔案文件中釋放文件;

  • -f,指定要使用的文件夾名,這個(gè)選項(xiàng)通常是必選項(xiàng),選項(xiàng)后面要有文件名;

  • -v,詳細(xì)報(bào)告tar命令處理的文件信息;

  • -z,用gzip來解壓/壓縮文件,此選項(xiàng)可以實(shí)現(xiàn)同樣的操作,但注意如果壓縮時(shí)使用該選項(xiàng),則解壓時(shí)也同樣使用該選項(xiàng);
    例如:將ztest目錄做成檔案文件,備份文件、文件還原、壓縮備份文件、還原解壓文件;

    tar -cvf ztest.tar ztest
    tar -xvf ztest.tar
    tar -cvzf ztest.tar.gz ztest
    tar -xvzf ztest.tar.gz 
    

注意:-f后面必須要緊跟要使用的文件夾名;-xz表示還原解壓。

9、文件補(bǔ)丁的制作

在開發(fā)過程中,當(dāng)程序發(fā)布以后,難免要對源代碼進(jìn)行修改升級(jí)。在Linux上可以很方便地制作源碼補(bǔ)丁,然后將補(bǔ)丁發(fā)給用戶,由用戶進(jìn)行打補(bǔ)丁和重新編譯程序,從而實(shí)現(xiàn)程序的升級(jí)。
制作補(bǔ)丁文件可以使用diff命令;打補(bǔ)丁可以使用另一個(gè)命令patch。

9.1 補(bǔ)丁制作

diff命令可以完成比較功能,生成補(bǔ)丁文件。其語法格式如下:
diff [option] <oldfile> <newfile> > <patchfile>

  • -r,對目錄進(jìn)行遞歸比較;

  • -u,輸出統(tǒng)一格式;

  • -N,比較目錄時(shí),若一個(gè)目錄或文件缺失,則視之為空文件;

  • -a,將所有文件視為文本文件,逐行比較;
    >,重定向操作符,將diff的輸出結(jié)果輸出到patchfile;

    diff -u t.old t.new > t.patch
    
9.2 打補(bǔ)丁

打補(bǔ)丁時(shí)使用patch命令,該命令就是利用diff制作的補(bǔ)丁文件實(shí)現(xiàn)源文件和目標(biāo)文件的轉(zhuǎn)換。patch命令的語法格式如下:
patch [option] [源文件 [補(bǔ)丁文件]]
使用-u選項(xiàng)制作補(bǔ)丁后,補(bǔ)丁文件中含有舊文件和新文件的信息,因此可以使用如下格式:
patch [option] < [補(bǔ)丁文件]
此格式要求運(yùn)行patch所在的目錄跟diff生成補(bǔ)丁時(shí)的目錄一致。

  • -p0,從當(dāng)前目錄查找源文件;

  • -p1,忽略第一層目錄,從當(dāng)前目錄開始查找源文件;

  • -E,如果發(fā)現(xiàn)空文件,則刪除它;

    patch -p0 < t.patch
    

附:

  • Ctrl+c可以強(qiáng)制結(jié)束Linux命令
  • ln創(chuàng)建文件鏈接,格式:ln [-s] /tmp/test/readme.txt /tmp/readme.lnk。創(chuàng)建文件/tmp/test/readme.txt的鏈接/tmp/readme.lnk
  • file file,查詢文件類型

1、which command
在環(huán)境變量PATH的范圍內(nèi)查找命令command,顯示命令的路徑或alias。
2、whereis command
在標(biāo)準(zhǔn)路徑中查找一個(gè)命令的二進(jìn)制碼、源碼及聯(lián)機(jī)手冊所在的位置。


  • awk:如果要格式化報(bào)文或者從一個(gè)大的文本文件中抽取數(shù)據(jù)包,相比于屏幕處理的優(yōu)點(diǎn)在處理龐大文件時(shí)不會(huì)出現(xiàn)內(nèi)存溢出揮著處理緩慢的問題。依次對每一行進(jìn)行處理,然后輸出。
    命令的形式:awk [-F|-f|-v] ‘ ’ file
    1、[-F|-f|-v] 大參數(shù),-F指定分隔符,-f調(diào)用腳本,-v定義變量 var=value
    2、''引用代碼塊
    例:
    awk '{print}' /etc/passwd == awk '{print 0}' /etc/passwd //表示整行
    awk -F: '{print $6}' OFS="\t" /etc/passwd //輸出字段6,以制表符作為分隔符

  • sed:用來自動(dòng)編輯一個(gè)或多個(gè)文件;簡化對文件的反復(fù)操作,編寫轉(zhuǎn)換程序等。
    命令的形式:sed [-option] '' file:file 必須是文本文件
    例:
    sed -e 4a\newline file:在file的第四行后加入newline,-e表示按照表達(dá)式4a\newline操作。
    cat -n /etc/passwd | sed -n '5,7p':利用管道操作,只打印5-7行的內(nèi)容,-n表示只對操作行進(jìn)行操作
    cat -n /etc/passwd | sed -n '2i xuqing': 在第二行前加入xuqing
    cat -n /etc/passwd | sed -n '2a xuqing': 在第二行后加入xuqing
    需要特別注意:以上的這些操作都是默認(rèn)的標(biāo)準(zhǔn)輸出即顯示器,并沒有改變文件的內(nèi)容,但是實(shí)際的操作中我們有時(shí)需要對大量的文件做修改,這時(shí)需要我們修改文件的內(nèi)容,那我們又該怎么做呢?下面的兩個(gè)例子將解決這個(gè)問題。
    例:
    sed -i ‘$a #This is a test’ file:在文件的最后一句話上面添加#This is a test
    sed -i 's/./!/g' file:將所有以.結(jié)尾換成!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容