Linux系統(tǒng)開發(fā): 命令進階學(xué)習(xí)(一)

      網(wǎng)友投稿 860 2025-03-31

      一、解壓縮命令介紹

      linux下最常用的打包程序是tar命令,使用tar打出來的包我們常稱為tar包,tar包文件的命令通常都是以.tar結(jié)尾的,生成tar包后,就可以用其它的程序來進行壓縮了。

      1.1.1 tar命令介紹

      功能:tar是一個壓縮解壓工具。利用tar,用戶可以為某一特定文件創(chuàng)建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。tar最初被用來在磁帶上創(chuàng)建檔案,現(xiàn)在,用戶可以在任何設(shè)備上創(chuàng)建檔案,如軟盤。利用tar命令,可以把一大堆的文件和目錄全部打包成一個文件,這對于備份文件或?qū)讉€文件組合成為一個文件以便于網(wǎng)絡(luò)傳輸是非常有用的。linux上的tar是GNU版本的。

      語法:tar ?[主選項+輔選項] ?<目標(biāo)文檔> ?<源文件或者目錄>

      使用該命令時,主選項是必須要有的,它告訴tar要做什么事情,輔選項是輔助使用的,可以選用。

      參數(shù):

      c 創(chuàng)建新的檔案文件。如果用戶想備份一個目錄或是一些文件,就要選擇這個選項。

      r 把要存檔的文件追加到檔案文件的未尾。例如用戶已經(jīng)作好備份文件,又發(fā)現(xiàn)還有一個目錄或是一些文件忘記備份了,這時可以使用該選項,將忘記的目錄或文件追加到備份文件中。

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

      u 更新文件。就是說,用新增的文件取代原備份文件,如果在備份文件中找不到要更新的文件,則把它追加到備份文件的最后。

      x 從檔案文件中釋放文件。

      注意:c/x/t 僅能存在一個!不可同時存在!

      輔助選項:

      b 該選項是為磁帶機設(shè)定的。其后跟一數(shù)字,用來說明區(qū)塊的大小,系統(tǒng)預(yù)設(shè)值為20(20*512 bytes)。

      f 使用檔案文件或設(shè)備,這個選項通常是必選的。請留意,在 f 之后要立即接檔名喔!不要再加參數(shù)!

      k 保存已經(jīng)存在的文件。例如我們把某個文件還原,在還原的過程中,遇到相同的文件,不會進行覆蓋。

      m 在還原文件時,把所有文件的修改時間設(shè)定為現(xiàn)在。

      M 創(chuàng)建多卷的檔案文件,以便在幾個磁盤中存放。

      v 詳細報告tar處理的文件信息。如無此選項,tar不報告文件信息。

      w 每一步都要求確認。

      z 用gzip來壓縮/解壓縮文件,后綴名為.gz,加上該選項后可以將檔案文件進行壓縮,但還原時也一定要使用該選項進行解壓縮。

      j 用bzip2來壓縮/解壓縮文件,后綴名為.bz2,加上該選項后可以將檔案文件進行壓縮,但還原時也一定要使用該選項進行解壓縮。

      1.1.2 tar命令解壓/壓縮使用范例

      將/test目錄下的所有文件打包為test.tar文件。

      # tar -cvf test.tar /test

      注意:如果打包的文件或者目錄是絕對路徑,可能會出現(xiàn)提示:tar: 從成員名中刪除開頭的“/”

      在參數(shù)中加上-P即可消除。

      示例:

      # tar -cvPf test.tar /test

      解壓打包的.tar文件

      # tar -xvf test.tar

      更新文件

      就是說,用新增的文件取代原備份文件,如果在備份文件中找不到要更新的文件,則把它追加到備份文件的最后。

      # tar -uf test.tar 123.c

      列出已經(jīng)打包的文件,可以用于查看已經(jīng)備份了哪些文件。

      # tar -tf test.tar

      使用gzip來壓縮/解壓縮文件

      # tar -czf test.tar.gz test/? //壓縮

      # tar -xzf test.tar.gz????? //解壓

      使用bzip2來壓縮/解壓縮文件

      # tar -cjf test.tar.bz2 test/?? //壓縮

      # tar -xjf test.tar.bz2?????? //解壓

      1.1.3 ZIP格式壓縮/解壓

      linux下提供了zip和unzip程序?qū)IP格式壓縮包進行處理,zip是壓縮程序,unzip是解壓程序。它們的參數(shù)選項很多,下面只做簡單介紹。

      將所有.jpg的文件壓縮成一個zip包

      # zip all.zip *.jpg

      將all.zip中的所有文件解壓出來

      # unzip all.zip

      常用參數(shù):

      -r 遞 歸處理,將指定目錄下的所有文件和子目錄一并處理。

      壓縮指定目錄下的所有文件

      # zip -r 123.zip /test/

      二、磁盤操作相關(guān)命令介紹

      1.2.1 fdisk命令:磁盤分區(qū)

      Linux下的fdisk功能是極其強大的,用它可以劃分出最復(fù)雜的分區(qū)。

      查看設(shè)備的詳細信息。# fdisk -l

      在console上輸入fdisk/dev/sda,可進入分割硬盤模式。

      輸入m顯示所有命令列示。

      輸入p顯示硬盤分割情形。

      輸入a設(shè)定硬盤啟動區(qū)。

      輸入n設(shè)定新的硬盤分割區(qū)。

      輸入e硬盤為[延伸]分割區(qū)(extend)。

      輸入p硬盤為[主要]分割區(qū)(primary)。

      輸入t改變硬盤分割區(qū)屬性。

      輸入d刪除硬盤分割區(qū)屬性。

      輸入q結(jié)束不存入硬盤分割區(qū)屬性。

      輸入w結(jié)束并寫入硬盤分割區(qū)屬性。

      1.2.2 dd命令:磁盤備份命令

      dd是Linux/UNIX 下的一個非常有用的命令,作用是將一個指定文件拷貝到磁盤的指定塊。可以用于磁盤備份、程序燒寫等應(yīng)用。

      基本語法: ?dd iflag=dsync oflag=dsync if=<輸入文件> of=<輸出的文件> seek=<跳過的塊數(shù)量>

      dd命令的主要選項:

      if=file

      輸入文件名,缺省為標(biāo)準(zhǔn)輸入。

      of=file

      輸出文件名,缺省為標(biāo)準(zhǔn)輸出。

      ibs=bytes

      一次讀入 bytes 個字節(jié)(即一個塊大小為 bytes 個字節(jié))。

      obs=bytes

      一次寫 bytes 個字節(jié)(即一個塊大小為 bytes 個字節(jié))。

      bs=bytes

      同時設(shè)置讀寫塊的大小為 bytes ,可代替 ibs 和 obs 。

      cbs=bytes

      一次轉(zhuǎn)換 bytes 個字節(jié),即轉(zhuǎn)換緩沖區(qū)大小。

      skip=blocks

      從輸入文件開頭跳過 blocks 個塊后再開始復(fù)制。

      seek=blocks

      從輸出文件開頭跳過 blocks 個塊后再開始復(fù)制。(通常只有當(dāng)輸出文件是磁盤或磁帶時才有效)。

      count=blocks

      僅拷貝 blocks 個塊,塊大小等于 ibs 指定的字節(jié)數(shù)。

      conv=conversion[,conversion...]

      用指定的參數(shù)轉(zhuǎn)換文件。

      數(shù)字:b=512 ,k=1024

      運用實例

      修復(fù)硬盤

      dd if=/dev/sda of=/dev/sda

      當(dāng)硬盤較長時間(比如1,2年)放置不使用后,磁盤上會產(chǎn)生magnetic flux point(磁通點)。當(dāng)磁頭讀到這些區(qū)域時會遇到困難,并可能導(dǎo)致I/O錯誤。當(dāng)這種情況影響到硬盤的第一個扇區(qū)時,可能導(dǎo)致硬盤報廢。上邊的命令有可能使這些數(shù)據(jù)起死回生。且這個過程是安全,高效的。

      清除磁盤數(shù)據(jù)

      # dd if=/dev/urandom /dev/sdb

      利用隨機的數(shù)據(jù)填充硬盤,在某些必要的場合可以用來銷毀數(shù)據(jù)。執(zhí)行此操作以后,/dev/sdb將無法掛載,創(chuàng)建和拷貝操作無法執(zhí)行。 其中的/dev/urandom是產(chǎn)生隨機數(shù)的文件。

      也可以直接獲取隨機數(shù)據(jù):

      # dd if=/dev/urandom of=123.dat bs=1024k count=2

      其中bs表示每一個塊的大小是1024kb。count就表示塊數(shù)量。 加起來就會拷貝(1024*2)kb的數(shù)據(jù)

      磁盤備份

      dd if=/dev/sdb of=disk.img

      將磁盤數(shù)據(jù)備份到當(dāng)前目錄的disk.img文件。備份之后可以使用壓縮軟件打開。如果需要恢復(fù)直接將參數(shù)變換個位置。

      dd if= disk.img of=/dev/sdb

      從光盤拷貝iso鏡像

      dd if=/dev/cdrom of=/root/cd.iso

      拷貝光盤數(shù)據(jù)到root文件夾下,并保存為cd.iso文件。

      程序燒寫

      dd iflag=dsync oflag=dsync if=123.bin of=/dev/sdb seek=1057

      將123.bin文件拷貝到/dev/sdb設(shè)備中,seek表示跳過1057個塊之后再進行拷貝。

      1.2.3 mount命令:掛載硬盤或鏡像

      mount命令用于掛載磁盤分區(qū)或者網(wǎng)絡(luò)文件系統(tǒng)。

      語法:mount -t [文件系統(tǒng)類型] [將要掛載的設(shè)備] [-o 選項] [掛載的目標(biāo)目錄]

      注: 通過-t這個參數(shù),我們來指定文件系統(tǒng)的類型,一般的情況下不指定也能自動識加。-t 后面跟 ext3 、ext2 、reiserfs、vfat 、ntfs、nfs 等;可以通過查看mount的幫助文檔進行查看詳細信息。

      -o ?主要用來描述設(shè)備或檔案的掛接方式。常用的參數(shù)有:

      loop:用來把一個文件當(dāng)成硬盤分區(qū)掛接上系統(tǒng)

      ro:采用只讀方式掛接設(shè)備

      rw:采用讀寫方式掛接設(shè)備

      iocharset:指定訪問文件系統(tǒng)所用字符集

      運用實例

      掛載SD卡分區(qū)到指定目錄

      # mount /dev/sdb2 /test/

      將sdb2設(shè)備掛載到/test目錄下。

      如果掛載之后需要取消,可以使用umount命令。

      # umount? /test/

      掛載光盤映像文件到指定目錄

      # mount 123.iso -o loop /test/

      將123.iso文件當(dāng)成硬盤掛載到/test目錄下。

      將一個目錄掛載到另一個目錄下

      # mount --bind /work/ ?/test/

      相當(dāng)于使用ln建立鏈接一樣效果。

      使用mount命令掛載NFS網(wǎng)絡(luò)文件系統(tǒng)

      # mount -t nfs 192.168.11.123:/work /test/

      如果掛載提示設(shè)備資源上鎖,可以使用下面方式進行掛載:

      # mount -t nfs -o nolock 192.168.11.123:/work /test/

      其中192.168.11.123表示服務(wù)器的IP地址,/work表示NFS服務(wù)器共享的目錄。/test/表示本地掛載的目錄。

      搭建NFS服務(wù)器方法

      首先設(shè)置將要共享的路徑。

      編輯/etc/exports文件,示例:

      /work/ *(rw,no_root_squash,sync)

      重啟NFS服務(wù)器

      # service nfs restart

      1.3 文件搜索與修改

      1.3.1 find命令:搜索文件

      命令功能:用于在文件樹種查找文件,并作出相應(yīng)的處理。

      語法:find [查找的路徑] [選項] [表達式]

      命令選項

      Linux系統(tǒng)開發(fā): 命令進階學(xué)習(xí)(一)

      -name

      按照文件名查找文件。

      -perm

      按照文件權(quán)限來查找文件。

      -prune

      使用這一選項可以使find命令不在當(dāng)前指定的目錄中查找,如果同時使用-depth選項,那么-prune將被find命令忽略。

      -user

      按照文件屬主來查找文件。

      -group

      按照文件所屬的組來查找文件。

      -mtime -n +n

      按照文件的更改時間來查找文件, - n表示文件更改時間距現(xiàn)在n天以內(nèi),+ n表示文件更改時間距現(xiàn)在n天以前。

      -nogroup

      查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在。

      -nouser

      查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。

      -newer file1 ! file2

      查找更改時間比文件file1新但比文件file2舊的文件。

      -type

      查找某一類型的文件,諸如:

      b - 塊設(shè)備文件。

      d - 目錄。

      c - 字符設(shè)備文件。

      p - 管道文件。

      l - 符號鏈接文件。

      f - 普通文件。

      -size n:

      [c] 查找文件長度為n塊的文件,帶有c時表示文件長度以字節(jié)計。

      -depth :

      在查找文件時,首先查找當(dāng)前目錄中的文件,然后再在其子目錄中查找。

      -fstype:

      查找位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通常可以在配置文件/etc/fstab中找到,該配置文件中包含了本系統(tǒng)中有關(guān)文件系統(tǒng)的信息。

      -mount :

      在查找文件時不跨越文件系統(tǒng)mount點。

      -follow:

      如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。

      -cpio? :

      對匹配的文件使用cpio命令,將這些文件備份到磁帶設(shè)備中。

      -amin n

      查找系統(tǒng)中最后N分鐘訪問的文件

      -atime n

      查找系統(tǒng)中最后n*24小時訪問的文件

      -cmin n

      查找系統(tǒng)中最后N分鐘被改變文件狀態(tài)的文件

      -ctime n

      查找系統(tǒng)中最后n*24小時被改變文件狀態(tài)的文件

      -mmin n

      查找系統(tǒng)中最后N分鐘被改變文件數(shù)據(jù)的文件

      -mtime n

      查找系統(tǒng)中最后n*24小時被改變文件數(shù)據(jù)的文件

      根據(jù)文件名查找文件

      # find /work/ -name 123.c

      在/work目錄下查找名稱為123.c的文件。

      根據(jù)通配符進行查找文件

      # find /work/ -name "*.c"

      在/work目錄下查找以.c為后綴的文件。注意:該查找方式區(qū)分大小寫。

      不區(qū)分大小寫的方式:

      # find /work/ -iname "*.c"

      同時查找多個文件

      # find /work/ -name "*.txt" -o -name "*.c" -o -name "*.h"

      在/work目錄下查找以.c、.txt、.h為后綴的文件。 主要參數(shù)是-o。

      匹配路徑或者文件

      # find /work/ -path "*mplayer*"

      在/work目錄下查找包含mplayer字符的文件和目錄。

      根據(jù)正則表達式查找

      # find /work/ -regex ".*\.h∥\.c

      \.

      h

      \.

      c

      $"

      否定參數(shù)

      # find /work/ ! -name "*.c"

      在/work目錄下查找不是以.c為后綴的文件。

      根據(jù)文件類型搜索

      # find /work/ -type f

      在/work目錄下查找類型為f的普通文件。

      常用的類型:f 普通文件、 l 符號連接、 d 目錄、 c 字符設(shè)備、 b 塊設(shè)備、 s 套接字、 p ?Fifo管道文件

      根據(jù)文件大小進行匹配

      # find /work/ -type f -size 200k

      在/work目錄下查找類型為f的普通文件,并且文件的大小為200k。

      文件大小單元:

      b —— 塊(512字節(jié))

      c —— 字節(jié)

      w —— 字(2字節(jié))

      k —— K字節(jié)

      M —— 兆字節(jié)

      G —— G字節(jié)

      常用大小搜索方式:

      搜索大于100KB的文件 # find /work/ -type f -size +100k

      搜索小于100KB的文件 # find /work/ -type f -size -100k

      搜索等于100KB的文件 # find /work/ -type f -size 100k

      根據(jù)文件時間戳進行搜索

      UNIX/Linux文件系統(tǒng)每個文件都有三種時間戳:

      訪問時間(-atime/天,-amin/分鐘):用戶最近一次訪問時間。

      修改時間(-mtime/天,-mmin/分鐘):文件最后一次修改時間。

      變化時間(-ctime/天,-cmin/分鐘):文件數(shù)據(jù)元(例如權(quán)限等)最后一次修改時間。

      最近七天內(nèi)被訪問過的所有文件:find /work -type f -atime -7

      搜索恰好在七天前被訪問過的所有文件: find /work -type f -atime 7

      搜索超過七天內(nèi)被訪問過的所有文件: find /work -type f -atime +7

      搜索訪問時間超過10分鐘的所有文件: find /work -type f -amin +10

      找出比file.log修改時間更長的所有文件: find . -type f -newer file.log

      查找并刪除指定文件

      find /test/ -work f -name "*.c" -delete

      在work目錄下查找以.c為后綴的文件,并將其刪除。

      根據(jù)權(quán)限進行查找

      # find /work/ -type f -perm 777

      在/work目錄下搜索出權(quán)限為777的文件。

      借助-exec選項與其他命令結(jié)合使用

      查找并刪除指定的文件

      # find /work/ -name "*.txt" -ok rm? {} \;

      # find /work/ -name "*.txt" -exec rm? {} \;

      在work目錄下查找以.txt為后綴的文件,將其全部刪除。

      其中-ok和-exec行為一樣,不過-ok會給出提示,是否執(zhí)行相應(yīng)的操作,而-exec不會提示,直接執(zhí)行。

      {} 用于與-exec和-ok選項結(jié)合使用來匹配所有文件。

      查找并拷貝文件

      # find /work/ -name "*.txt" -exec cp? {} /opt/ \;

      在work目錄下查找以.txt為后綴的文件,將其全部拷貝到/opt目錄下。

      執(zhí)行多條命令的方法

      因為單行命令中-exec參數(shù)中無法使用多個命令,我們可以將命令寫成腳本,然后使用-exec進行調(diào)用。

      # find /work/ -name "*.txt" -exec ./text.sh {} \;

      {}是匹配所有文件,傳遞給腳本之后,在腳本中使用$1獲取傳入的參數(shù)信息。

      腳本文件中的代碼示例: echo $1

      1.3.2 grep命令:文本搜索工具

      Linux系統(tǒng)中g(shù)rep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權(quán)限是所有用戶。

      語法:grep [選項] [文件]

      主要選項:

      -c

      只輸出匹配行的計數(shù)。

      -i

      不區(qū)分大 小寫(只適用于單字符)。

      -h

      查詢多文件時不顯示文件名。

      -l

      查詢多文件時只輸出包含匹配字符的文件名。

      -n

      顯示匹配行及行號。

      -s

      不顯示不存在或無匹配文本的錯誤信息。

      -v

      顯示不包含匹配文本的所有行。

      正則表達式主要參數(shù):

      \

      忽略正則表達式中特殊字符的原有含義。

      ^

      匹配正則表達式的開始行。

      $

      匹配正則表達式的結(jié)束行。

      \<

      從匹配正則表達 式的行開始。

      \>

      到匹配正則表達式的行結(jié)束。

      [ ]

      單個字符,如[A]即A符合要求 。

      [ - ]

      范圍,如[A-Z],即A、B、C一直到Z都符合要求 。

      所有的單個字符。

      *

      有字符,長度可以為0。

      使用實例

      搜索文本并添加文本

      grep -q "12345" /work/test.txt || echo "12345" >> /work/test.txt

      在/work/test.txt文件中搜索12345這個字符串?dāng)?shù)據(jù),如果有就不執(zhí)行||后面的代碼,如果沒有,就執(zhí)行||后面的代碼。-q在這里是將grep變?yōu)轭愃朴趇f的效果。

      同時搜索多個文件

      # grep "A" /work/*.c

      在work目錄下以.c后綴的文件中搜索A這個數(shù)據(jù),如果搜索成功,會將A出現(xiàn)的行打印到屏幕上。

      搜索輸出行與行號

      # grep -n "data" 123.c

      在123.c文件中搜索data數(shù)據(jù),搜索成功后將data所在的行與行號全部打印出來。

      大小寫敏感

      # grep -i "data" 123.c

      輸出所有含有data或DAT的字符串的行。

      1.3.3 sed命令:在線編輯器

      sed 是一種在線編輯器,它一次處理一行內(nèi)容。處理時,把當(dāng)前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復(fù)操作;編寫轉(zhuǎn)換程序等。

      Sed本質(zhì)上是一個編輯器,但是它是非交互式的,這點與VIM不同;同時它又是面向字符流的,輸入的字符流經(jīng)過Sed的處理后輸出。這兩個特性使得Sed成為命令行下面非常有用的一個處理工具。

      sed的處理流程,簡化后是這樣的:

      讀入新的一行內(nèi)容到緩存空間;

      從指定的操作指令中取出第一條指令,判斷是否匹配pattern;

      如果不匹配,則忽略后續(xù)的編輯命令,回到第2步繼續(xù)取出下一條指令;

      如果匹配,則針對緩存的行執(zhí)行后續(xù)的編輯命令;完成后,回到第2步繼續(xù)取出下一條指令;

      當(dāng)所有指令都應(yīng)用之后,輸出緩存行的內(nèi)容;回到第1步繼續(xù)讀入下一行內(nèi)容;

      當(dāng)所有行都處理完之后,結(jié)束;

      語法:

      sed [-hnV][-e

      亚洲妓女综合网99| 亚洲日韩AV一区二区三区中文| 亚洲精品私拍国产福利在线| 亚洲乱色伦图片区小说| 亚洲校园春色另类激情| 亚洲精品美女视频| 亚洲综合久久1区2区3区| 久久亚洲AV成人无码电影| 久久99国产亚洲精品观看| 亚洲AV无码专区国产乱码电影 | 亚洲一区中文字幕在线电影网| 91亚洲国产在人线播放午夜| 久久久久亚洲Av无码专| 亚洲黄色在线观看网站| 亚洲欧洲日韩国产| 亚洲AV无码成人专区| 亚洲人成7777| 亚洲乱妇老熟女爽到高潮的片| 亚洲精品无码久久久久久| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 国产亚洲美女精品久久| 国产成人 亚洲欧洲| mm1313亚洲精品国产| 亚洲精品国产福利一二区| 亚洲午夜福利精品久久| 在线a亚洲v天堂网2019无码| 国产亚洲精品a在线无码| 久久亚洲精品成人| 777亚洲精品乱码久久久久久 | va天堂va亚洲va影视中文字幕| 国产精品高清视亚洲精品| 亚洲精品无码永久在线观看男男| 亚洲国产成人无码AV在线| 成人亚洲综合天堂| 国产成人亚洲影院在线观看| 国产V亚洲V天堂A无码| 久久精品亚洲一区二区三区浴池| 亚洲视频在线不卡| 亚洲最大成人网色香蕉| 亚洲精品无码av中文字幕| 亚洲AⅤ优女AV综合久久久|