【大數據】02 Linux 命令

在前面,我們已經裝好了 CentOS 的虛擬機系統,並且複製了 4 臺機器,現在,我們就不直接使用 VMware 直接操作服務器虛擬機了,而是使用 Xshell 軟件。官方下載地址:https://www.netsarang.com/zh/xshell/

Xshell 軟件是一款客戶機軟件,通過SSH協議遠程訪問服務器。以後你們到公司上班的話,是見不到那些物理服務器的,你要訪問那些服務器,必須通過你公司的電腦通過網絡遠程連接,目前比較常用的就是 Xshell 軟件。

打開 Xshell,

輸入:ssh 主機名@主機IP地址 ,回車,就會讓你輸入密碼:

輸入密碼,點 確定,即遠程連接服務器成功。Xshell界面和VMware界面是一樣一樣的。


VMware界面
 

Xshell界面
 

接下來進入今天的主題:開始講 Linux 命令啦

Linux 命令

1、type

type命令 用來顯示指定命令的類型,判斷給出的指令是內部指令還是外部指令。

2、file

file命令 用於辨識文件類型。通過file指令,我們得以辨識該文件的類型。

3、echo

4、man

如果在使用 man 命令時提示該命令沒有安裝,就使用 yum install man man-pages 安裝 man 命令和其幫助文檔 man-pages

5、yum

6、help

總結來說,Linux 就兩類命令,

一類是 外部命令,使用 man 來學習

一類是 內部命令,使用 help 來學習

Linux 所有的內部命令 可通過 help 直接回車得到顯示:

[root@node0001 ~]# help
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
These shell commands are defined internally.  Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

 job_spec [&]                          history [-c] [-d offset] [n] or hi>
 (( expression ))                      if COMMANDS; then COMMANDS; [ elif>
 . filename [arguments]                jobs [-lnprs] [jobspec ...] or job>
 :                                     kill [-s sigspec | -n signum | -si>
 [ arg... ]                            let arg [arg ...]
 [[ expression ]]                      local [option] name[=value] ...
 alias [-p] [name[=value] ... ]        logout [n]
 bg [job_spec ...]                     mapfile [-n count] [-O origin] [-s>
 bind [-lpvsPVS] [-m keymap] [-f fil>  popd [-n] [+N | -N]
 break [n]                             printf [-v var] format [arguments]>
 builtin [shell-builtin [arg ...]]     pushd [-n] [+N | -N | dir]
 caller [expr]                         pwd [-LP]
 case WORD in [PATTERN [| PATTERN]..>  read [-ers] [-a array] [-d delim] >
 cd [-L|-P] [dir]                      readarray [-n count] [-O origin] [>
 command [-pVv] command [arg ...]      readonly [-af] [name[=value] ...] >
 compgen [-abcdefgjksuv] [-o option]>  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE>  select NAME [in WORDS ... ;] do CO>
 compopt [-o|+o option] [-DE] [name >  set [--abefhkmnptuvxBCHP] [-o opti>
 continue [n]                          shift [n]
 coproc [NAME] command [redirections>  shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFilrtux] [-p] [name[=v>  source filename [arguments]
 dirs [-clpv] [+N] [-N]                suspend [-f]
 disown [-h] [-ar] [jobspec ...]       test [expr]
 echo [-neE] [arg ...]                 time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [>  times
 eval [arg ...]                        trap [-lp] [[arg] signal_spec ...]>
 exec [-cl] [-a name] [command [argu>  true
 exit [n]                              type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or >  typeset [-aAfFilrtux] [-p] name[=v>
 false                                 ulimit [-SHacdefilmnpqrstuvx] [lim>
 fc [-e ename] [-lnr] [first] [last]>  umask [-p] [-S] [mode]
 fg [job_spec]                         unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMA>  unset [-f] [-v] [name ...]
 for (( exp1; exp2; exp3 )); do COMM>  until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or nam>  variables - Names and meanings of >
 getopts optstring name [arg]          wait [id]
 hash [-lr] [-p pathname] [-dt] [nam>  while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]             { COMMANDS ; }

7、whereis

-----------------------  華麗的分割線    --------------------------------

文件系統命令

1、df

Linux df命令用於顯示目前在Linux系統上的文件系統的磁盤使用情況統計。

2、du

Linux du命令用於顯示目錄或文件的大小。

du會顯示指定的目錄或文件所佔用的磁盤空間。

du == disk usage (磁盤使用量,佔用的磁盤空間)

一個文件佔用的磁盤空間和一個文件的大小是兩碼事情。佔用空間取決於文件系統的塊(block)的大小,linux一般默認是4k(4096) ,因此,一個大小爲1個字節的文件,最小也要佔用4k,如果你創建文件系統的時候制定塊大小是16K,那麼即便一個文件只有1個字節,佔用空間也是16K。

如果一個分區上主要放大文件,那麼block可以大一些,有利於減少磁盤碎片,如果主要放小文件,那麼block設置小一下,否則太浪費磁盤空間。

通常情況下,ls 顯示的文件大小比du顯示的磁盤佔用空間小,比如文件系統的block是4K,一個13K的文件佔用的空間是 13k/4k = 3.25 個block,一個block只能被一個文件佔用,因此實際佔用空間就是4個block,就是16K。

3、cd

Linux cd命令用於切換當前工作目錄至 dirName(目錄參數)。

其中 dirName 表示法可爲絕對路徑或相對路徑。若目錄名稱省略,則變換至使用者的 home 目錄 (也就是剛 login 時所在的目錄)。

另外,”~” 也表示爲 home 目錄 的意思,”.” 則是表示目前所在的目錄,”..” 則表示目前目錄位置的上一層目錄。

語法

cd [dirName]

  • dirName:要切換的目標目錄。

實例

跳到 /usr/bin/ :

cd /usr/bin/

跳到自己的 home 目錄 :

cd ~

或者 cd

跳到目前目錄的上上兩層 :

cd ../..

跳到上次所在的目錄:

cd -

另外,如果當前用戶爲 root 用戶,root 用戶可以訪問其它任何用戶的 家目錄,可以通過:

cd /home/ 用戶名  

另外,還可以通過(波浪線擴展):

cd ~用戶名

4、mkdir

Linux mkdir命令用於建立名稱爲 dirName 之子目錄。

語法

mkdir [-p] dirName

參數說明

  • -p 確保目錄名稱存在,不存在的就建一個。

實例

在工作目錄下,建立一個名爲 AAA 的子目錄 :

mkdir AAA

在工作目錄下的 BBB 目錄中,建立一個名爲 Test 的子目錄。 若 BBB 目錄原本不存在,則建立一個。(注:本例若不加 -p,且原本 BBB目錄不存在,則產生錯誤。)

mkdir -p BBB/Test

同時創建多個目錄,用 {} 括起來即可:

mkdir ./AAA/{1,2,3}

5、rm

Linux rm命令用於刪除一個文件或者目錄。

語法

rm [options] name...

參數

  • -i 刪除前逐一詢問確認。
  • -f 即使原檔案屬性設爲唯讀,亦直接刪除,無需逐一確認。
  • -r 將目錄及以下之檔案亦逐一刪除。

實例

刪除文件可以直接使用rm命令,若刪除目錄則必須配合選項”-r”,例如:

# rm test.txt rm:

是否刪除 一般文件 "test.txt"? y

# rm homework rm:

無法刪除目錄"homework": 是一個目錄

# rm -r homework rm:

是否刪除 目錄 "homework"? y

刪除當前目錄下的所有文件及目錄,命令行爲:

rm -r *

文件一旦通過rm命令刪除,則無法恢復,所以必須格外小心地使用該命令。

6、cp

Linux cp命令主要用於複製文件或目錄。

語法

cp [options] source dest

cp [options] source... directory

參數說明

  • -a:此選項通常在複製目錄時使用,它保留鏈接、文件屬性,並複製目錄下的所有內容。其作用等於dpR參數組合。
  • -d:複製時保留鏈接。這裏所說的鏈接相當於Windows系統中的快捷方式。
  • -f:覆蓋已經存在的目標文件而不給出提示。
  • -i:與-f選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答”y”時目標文件將被覆蓋。
  • -p:除複製文件的內容外,還把修改時間和訪問權限也複製到新文件中。
  • -r:若給出的源文件是一個目錄文件,此時將複製該目錄下所有的子目錄和文件。
  • -l:不復制文件,只是生成鏈接文件。

實例

使用指令”cp”將當前目錄”test/”下的所有文件複製到新目錄”newtest”下,輸入如下命令:

cp –r test/ newtest

注意:用戶使用該指令複製目錄時,必須使用參數”-r”或者”-R”

7、mv

Linux mv命令用來爲文件或目錄改名、或將文件或目錄移入其它位置。

語法

mv [options] source dest

mv [options] source... directory

參數說明

  • -i: 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件;
  • -f: 在mv操作要覆蓋某已有的目標文件時不給任何指示;

mv參數設置與運行結果

命令格式 運行結果
mv 文件名 文件名 將源文件名改爲目標文件名
mv 文件名 目錄名 將文件移動到目標目錄
mv 目錄名 目錄名 目標目錄已存在,將源目錄
移動到目標目錄;目標
目錄不存在則改名
mv 目錄名 文件名 出錯

實例

將文件 aaa 更名爲 bbb :

mv aaa bbb

將info目錄放入logs目錄中。注意,如果logs目錄不存在,則該命令將info改名爲logs。

mv info/ logs

再如將/usr/student下的所有文件和目錄移到當前目錄下,命令行爲:

mv /usr/student/* .

8、ln

Linux ln命令是一個非常重要命令,它的功能是爲某一個文件在另外一個位置建立一個同步的鏈接。

當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然後在 其它的目錄下用ln命令鏈接(link)它就可以,不必重複的佔用磁盤空間。

語法

ln [參數][源文件或目錄][目標文件或目錄]

其中參數的格式爲

[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]

[–help] [–version] [–]

命令功能 :

Linux文件系統中,有所謂的鏈接(link),我們可以將其視爲檔案的別名,而鏈接又可分爲兩種 : 硬鏈接(hard link)與軟鏈接(symbolic link),硬鏈接的意思是一個檔案可以有多個名稱,而軟鏈接的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬鏈接是存在同一個文件系統中,而軟鏈接卻可以跨越不同的文件系統。

不論是硬鏈接或軟鏈接都不會將原本的檔案複製一份,只會佔用非常少量的磁碟空間。

軟鏈接

  • 1.軟鏈接,以路徑的形式存在。類似於Windows操作系統中的快捷方式
  • 2.軟鏈接可以 跨文件系統 ,硬鏈接不可以
  • 3.軟鏈接可以對一個不存在的文件名進行鏈接
  • 4.軟鏈接可以對目錄進行鏈接

硬鏈接

  • 1.硬鏈接,以文件副本的形式存在。但不佔用實際空間。
  • 2.不允許給目錄創建硬鏈接
  • 3.硬鏈接只有在同一個文件系統中才能創建

命令參數

必要參數

  • -b 刪除,覆蓋以前建立的鏈接
  • -d 允許超級用戶製作目錄的硬鏈接
  • -f 強制執行
  • -i 交互模式,文件存在則提示用戶是否覆蓋
  • -n 把符號鏈接視爲一般目錄
  • -s 軟鏈接(符號鏈接)
  • -v 顯示詳細的處理過程

選擇參數

  • -S “-S<字尾備份字符串> “或 “–suffix=<字尾備份字符串>”
  • -V “-V<備份方式>”或”–version-control=<備份方式>”
  • –help 顯示幫助信息
  • –version 顯示版本信息

實例

給文件創建軟鏈接,爲log2013.log文件創建軟鏈接link2013,如果log2013.log丟失,link2013將失效:

ln -s log2013.log link2013

輸出:

[root@localhost test]# ll
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
[root@localhost test]# ln -s log2013.log link2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log

給文件創建硬鏈接,爲log2013.log創建硬鏈接ln2013,log2013.log與ln2013的各項屬性相同

ln log2013.log ln2013

輸出:

[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
[root@localhost test]# ln log2013.log ln2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 2 root bin      61 11-13 06:03 ln2013
-rw-r--r-- 2 root bin      61 11-13 06:03 log2013.log

9、stat

Linux stat命令用於顯示inode內容(常稱爲 元數據)。

stat以文字的格式來顯示inode的內容。

語法

stat [文件或目錄]

實例

查看 testfile 文件的inode內容內容,可以用以下命令:

# stat testfile

執行以上命令輸出結果:

# stat testfile                #輸入命令
  File: `testfile'
  Size: 102             Blocks: 8          IO Block: 4096   regular file
Device: 807h/2055d      Inode: 1265161     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-08-13 14:07:20.000000000 +0800
Modify: 2014-08-13 14:07:07.000000000 +0800
Change: 2014-08-13 14:07:07.000000000 +0800

10、touch

Linux touch命令用於修改文件或者目錄的時間屬性,包括存取時間和更改時間。若文件不存在,系統會建立一個新的文件。

ls -l 可以顯示檔案的時間記錄。

語法

touch [-acfm][-d<日期時間>][-r<參考文件或目錄>] [-t<日期時間>][--help][--version][文件或目錄…]

  • 參數說明
  • a 改變檔案的讀取時間記錄。
  • m 改變檔案的修改時間記錄。
  • c 假如目的檔案不存在,不會建立新的檔案。與 –no-create 的效果一樣。
  • f 不使用,是爲了與其他 unix 系統的相容性而保留。
  • r 使用參考檔的時間記錄,與 –file 的效果一樣。
  • d 設定時間與日期,可以使用各種不同的格式。
  • t 設定檔案的時間記錄,格式與 date 指令相同。
  • –no-create 不會建立新檔案。
  • –help 列出指令格式。
  • –version 列出版本訊息。

實例

使用指令”touch”修改文件”testfile”的時間屬性爲當前系統時間,輸入如下命令:

$ touch testfile                      #修改文件的時間屬性

首先,使用ls命令查看testfile文件的屬性,如下所示:

$ ls -l testfile                   #查看文件的時間屬性

#原來文件的修改時間爲16:09

-rw-r--r-- 1 hdd hdd 55 2019-11-15 16:09 testfile

執行指令”touch”修改文件屬性以後,並再次查看該文件的時間屬性,如下所示:

$ touch testfile                              #修改文件時間屬性爲當前系統時間

$ ls -l testfile                                 #查看文件的時間屬性

#修改後文件的時間屬性爲當前系統時間

-rw-r--r-- 1 hdd hdd 55 2019-11-15 16:53 testfile

使用指令”touch”時,如果指定的文件不存在,則將創建一個新的空白文件。例如,在當前目錄下,使用該指令創建一個空白文件”file”,輸入如下命令:

$ touch file                      #創建一個名爲“file”的新的空白文件

11、cat

cat 命令用於連接文件並打印到標準輸出設備上。

使用權限

所有使用者

語法格式

cat [-AbeEnstTuv] [--help] [--version] fileName

參數說明:

  • -n 或 –number:由 1 開始對所有輸出的行數編號。
  • -b 或 –number-nonblank:和 -n 相似,只不過對於空白行不編號。
  • -s 或 –squeeze-blank:當遇到有連續兩行以上的空白行,就代換爲一行的空白行。
  • -v 或 –show-nonprinting:使用 ^ 和 M- 符號,除了 LFD 和 TAB 之外。
  • -E 或 –show-ends : 在每行結束處顯示 $。
  • -T 或 –show-tabs: 將 TAB 字符顯示爲 ^I。
  • -e : 等價於 -vE。
  • -A, –show-all:等價於 -vET。
  • -e:等價於”-vE”選項;
  • -t:等價於”-vT”選項;

實例:

把 textfile1 的文檔內容加上行號後輸入 textfile2 這個文檔裏:

cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的文檔內容加上行號(空白行不加)之後將內容附加到 textfile3 文檔裏:

cat -b textfile1 textfile2 >> textfile3

清空 /etc/test.txt 文檔內容:

cat /dev/null > /etc/test.txt

cat 也可以用來製作鏡像文件。例如要製作軟盤的鏡像文件,將軟盤放好後輸入:

cat /dev/fd0 > OUTFILE

相反的,如果想把 image file 寫到軟盤,輸入:

cat IMG_FILE > /dev/fd0

  • 1. OUTFILE 指輸出的鏡像文件名。
  • 2. IMG_FILE 指鏡像文件。
  • 3. 若從鏡像文件寫回 device 時,device 容量需與相當。
  • 4. 通常用製作開機磁片。

12、more

Linux more 命令類似 cat ,不過會以一頁一頁的形式顯示,更方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示,而且還有搜尋字串的功能(與 vi 相似),使用中的說明文件,請按 h 。

語法

more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]

參數

  • -num 一次顯示的行數
  • -d 提示使用者,在畫面下方顯示 [Press space to continue, ‘q’ to quit.] ,如果使用者按錯鍵,則會顯示 [Press ‘h’ for instructions.] 而不是 ‘嗶’ 聲
  • -l 取消遇見特殊字元 ^L(送紙字元)時會暫停的功能
  • -f 計算行數時,以實際上的行數,而非自動換行過後的行數(有些單行字數太長的會被擴展爲兩行或兩行以上)
  • -p 不以捲動的方式顯示每一頁,而是先清除螢幕後再顯示內容
  • -c 跟 -p 相似,不同的是先顯示內容再清除其他舊資料
  • -s 當遇到有連續兩行以上的空白行,就代換爲一行的空白行
  • -u 不顯示下引號 (根據環境變數 TERM 指定的 terminal 而有所不同)
  • +/pattern 在每個文檔顯示前搜尋該字串(pattern),然後從該字串之後開始顯示
  • +num 從第 num 行開始顯示
  • fileNames 欲顯示內容的文檔,可爲複數個數

實例

逐頁顯示 testfile 文檔內容,如有連續兩行以上空白行則以一行空白行顯示。

more -s testfile

從第 20 行開始顯示 testfile 之文檔內容。

more +20 testfile

常用操作命令

  • Enter 向下n行,需要定義。默認爲1行
  • Ctrl+F 向下滾動一屏
  • 空格鍵 向下滾動一屏
  • Ctrl+B 返回上一屏
  • = 輸出當前行的行號
  • :f 輸出文件名和當前行的行號
  • V 調用vi編輯器
  • !命令 調用Shell,並執行命令
  • q 退出more

13、less

less 與 more 類似,但使用 less 可以隨意瀏覽文件,而 more 僅能向前移動,卻不能向後移動,而且 less 在查看之前不會加載整個文件。

語法

less [參數] 文件

參數說明

  • -b <緩衝區大小> 設置緩衝區的大小
  • -e 當文件顯示結束後,自動離開
  • -f 強迫打開特殊文件,例如外圍設備代號、目錄和二進制文件
  • -g 只標誌最後搜索的關鍵詞
  • -i 忽略搜索時的大小寫
  • -m 顯示類似more命令的百分比
  • -N 顯示每行的行號
  • -o <文件名> 將less 輸出的內容在指定文件中保存起來
  • -Q 不使用警告音
  • -s 顯示連續空行爲一行
  • -S 行過長時間將超出部分捨棄
  • -x <數字> 將”tab”鍵顯示爲規定的數字空格
  • /字符串:向下搜索”字符串”的功能
  • ?字符串:向上搜索”字符串”的功能
  • n:重複前一個搜索(與 / 或 ? 有關)
  • N:反向重複前一個搜索(與 / 或 ? 有關)
  • b 向後翻一頁
  • d 向後翻半頁
  • h 顯示幫助界面
  • Q 退出less 命令
  • u 向前滾動半頁
  • y 向前滾動一行
  • 空格鍵 滾動一行
  • 回車鍵 滾動一頁
  • [pagedown]: 向下翻動一頁
  • [pageup]: 向上翻動一頁

實例

1、查看文件

less log2013.log

2、ps查看進程信息並通過less分頁顯示

ps -ef |less

3、查看命令歷史使用記錄並通過less分頁顯示

history | less

4、瀏覽多個文件

less log2013.log log2014.log

說明:
輸入 :n後,切換到 log2014.log
輸入 :p 後,切換到log2013.log

附加備註

1.全屏導航

  • ctrl + F – 向前移動一屏
  • ctrl + B – 向後移動一屏
  • ctrl + D – 向前移動半屏
  • ctrl + U – 向後移動半屏

2.單行導航

  • j – 向前移動一行
  • k – 向後移動一行

3.其它導航

  • G – 移動到最後一行
  • g – 移動到第一行
  • q / ZZ – 退出 less 命令

4.其它有用的命令

  • v – 使用配置的編輯器編輯當前文件
  • h – 顯示 less 的幫助文檔
  • &pattern – 僅顯示匹配模式的行,而不是整個文件

5.標記導航

當使用 less 查看大文件時,可以在任何一個位置作標記,可以通過命令導航到標有特定標記的文本位置:

  • ma – 使用 a 標記文本的當前位置
  • ‘a – 導航到標記 a 處

14、head

在屏幕上顯示指定文件的開頭若干行

補充說明

head命令 用於顯示文件的開頭的內容。在默認情況下,head命令顯示文件的頭10行內容。

語法

head(選項)(參數)

選項

  • -n<數字>:指定顯示頭部內容的行數;
  • -c<字符數>:指定顯示頭部內容的字符數;
  • -v:總是顯示文件名的頭信息;
  • -q:不顯示文件名的頭信息。

參數

文件列表:指定顯示頭部內容的文件列表。

15、tail

在屏幕上顯示指定文件的末尾若干行

補充說明

tail命令 用於輸入文件中的尾部內容。tail命令默認在屏幕上顯示指定文件的末尾10行。如果給定的文件不止一個,則在顯示的每個文件前面加一個文件名標題。如果沒有指定文件或者文件名爲“-”,則讀取標準輸入。

注意:如果表示字節或行數的N值之前有一個”+”號,則從文件開頭的第N項開始顯示,而不是顯示文件的最後N項。N值後面可以有後綴:b表示512,k表示1024,m表示1 048576(1M)。

語法

tail(選項)(參數)

選項

--retry:即是在tail命令啓動時,文件不可訪問或者文件稍後變得不可訪問,都始終嘗試打開文件。使用此選項時需要與選項“——follow=name”連用;
-c<N>或——bytes=<N>:輸出文件尾部的N(N爲整數)個字節內容;
-f<name/descriptor>或;--follow<nameldescript>:顯示文件最新追加的內容。“name”表示以文件名的方式監視文件的變化。“-f”與“-fdescriptor”等效;
-F:與選項“-follow=name”和“--retry"連用時功能相同;
-n<N>或——line=<N>:輸出文件的尾部N(N位數字)行內容。
--pid=<進程號>:與“-f”選項連用,當指定的進程號的進程終止後,自動退出tail命令;
-q或——quiet或——silent:當有多個文件參數時,不輸出各個文件名;
-s<秒數>或——sleep-interal=<秒數>:與“-f”選項連用,指定監視文件變化時間隔的秒數;
-v或——verbose:當有多個文件參數時,總是輸出各個文件名;
--help:顯示指令的幫助信息;
--version:顯示指令的版本信息。
 

參數

文件列表:指定要顯示尾部內容的文件列表。

實例

tail file (顯示文件file的最後10行)
tail +20 file (顯示文件file的內容,從第20行至文件末尾)
tail -c 10 file (顯示文件file的最後10個字符)

16、管道 |

簡單來說,管道就是把前一個命令的結果當成後一個命令的輸入。

管道是由內核管理的一個緩衝區,相當於我們放入內存中的一個紙條。管道的一端連接一個進程的輸出。這個進程會向管道中放入信息。管道的另一端連接一個進程的輸入,這個進程取出被放入管道的信息。一個緩衝區不需要很大,它被設計成爲環形的數據結構,以便管道可以被循環利用。當管道中沒有信息的話,從管道中讀取的進程會等待,直到另一端的進程放入信息。當管道被放滿信息的時候,嘗試放入信息的進程會堵塞,直到另一端的進程取出信息。當兩個進程都終結的時候,管道也自動消失。

實例:

查看 a.txt 文件5-10行的內容

# 在前面的 head 和 tail 命令中,只能顯示前面或後面的連續內容,如果想顯示中間的部分內容,就可以使用管道

head -n10 a.txt | tail -n5

查詢帶有關鍵字 python 的進程,一條一條列出。

ps -ef | grep python

17、grep

Linux grep命令用於查找文件裏符合條件的字符串。

grep指令用於查找內容包含指定的範本樣式的文件,如果發現某文件的內容符合所指定的範本樣式,預設grep指令會把含有範本樣式的那一列顯示出來。若不指定任何文件名稱,或是所給予的文件名爲”-“,則grep指令會從標準輸入設備讀取數據。

語法

grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<範本樣式>][-f<範本文件>][--help][範本樣式][文件或目錄...]

參數

  • -a或–text 不要忽略二進制的數據。
  • -A<顯示列數>或–after-context=<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之後的內容。
  • -b或–byte-offset 在顯示符合範本樣式的那一列之前,標示出該列第一個字符的位編號。
  • -B<顯示列數>或–before-context=<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前的內容。
  • -c或–count 計算符合範本樣式的列數。
  • -C<顯示列數>或–context=<顯示列數>或-<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前後的內容。
  • -d<進行動作>或–directories=<進行動作> 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep指令將回報信息並停止動作。
  • -e<範本樣式>或–regexp=<範本樣式> 指定字符串做爲查找文件內容的範本樣式。
  • -E或–extended-regexp 將範本樣式爲延伸的普通表示法來使用。
  • -f<範本文件>或–file=<範本文件> 指定範本文件,其內容含有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每列一個範本樣式。
  • -F或–fixed-regexp 將範本樣式視爲固定字符串的列表。
  • -G或–basic-regexp 將範本樣式視爲普通的表示法來使用。
  • -h或–no-filename 在顯示符合範本樣式的那一列之前,不標示該列所屬的文件名稱。
  • -H或–with-filename 在顯示符合範本樣式的那一列之前,表示該列所屬的文件名稱。
  • -i或–ignore-case 忽略字符大小寫的差別。
  • -l或–file-with-matches 列出文件內容符合指定的範本樣式的文件名稱。
  • -L或–files-without-match 列出文件內容不符合指定的範本樣式的文件名稱。
  • -n或–line-number 在顯示符合範本樣式的那一列之前,標示出該列的列數編號。
  • -q或–quiet或–silent 不顯示任何信息。
  • -r或–recursive 此參數的效果和指定”-d recurse”參數相同。
  • -s或–no-messages 不顯示錯誤信息。
  • -v或–revert-match 反轉查找。
  • -V或–version 顯示版本信息。
  • -w或–word-regexp 只顯示全字符合的列。
  • -x或–line-regexp 只顯示全列符合的列。
  • -y 此參數的效果和指定”-i”參數相同。
  • –help 在線幫助。

實例

1、在當前目錄中,查找後綴有”test”字樣的文件中包含”test”字符串的文件,並打印出該字符串的行。此時,可以使用如下命令:

grep test *file

結果如下所示:

$ grep test test* #查找後綴有“test”的文件包含“test”字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 

2、以遞歸的方式查找符合條件的文件。例如,查找指定目錄/etc/acpi 及其子目錄(如果存在子目錄的話)下所有文件中包含字符串”update”的文件,並打印出該字符串所在行的內容,使用的命令爲:

grep -r update /etc/acpi

輸出結果如下:

$ grep -r update /etc/acpi #以遞歸的方式查找“etc/acpi”  
#下包含“update”的文件  
/etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)  
Rather than  
/etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  
IO.) Rather than  
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 

3、反向查找。前面各個例子是查找並打印出符合條件的行,通過”-v”參數可以打印出不符合條件行的內容。

查找文件名中包含test 的文件中不包含test 的行,此時,使用的命令爲:

grep -v test*

結果如下所示:

$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行  
testfile1:helLinux!  
testfile1:Linis a free Unix-type operating system.  
testfile1:Lin  
testfile_1:HELLO LINUX!  
testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
testfile_1:THIS IS A LINUX TESTFILE!  
testfile_2:HELLO LINUX!  
testfile_2:Linux is a free unix-type opterating system.

18、xargs

給其他命令傳遞參數的一個過濾器

補充說明

xargs命令 是給其他命令傳遞參數的一個過濾器,也是組合多個命令的一個工具。它擅長將標準輸入數據轉換成命令行參數,xargs能夠處理管道或者stdin並將其轉 換成特定命令的命令參數。xargs也可以將單行或多行文本輸入轉換爲其他格式,例如多行變單行,單行變多行。xargs的默認命令是echo,空格是默 認定界符。這意味着通過管道傳遞給xargs的輸入將會包含換行和空白,不過通過xargs的處理,換行和空白將被空格取代。xargs是構建單行命令的 重要組件之一。

xargs命令用法

xargs用作替換工具,讀取輸入數據重新格式化後輸出。

定義一個測試文件,內有多行文本數據:

cat test.txt

a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

多行輸入單行輸出:

cat test.txt | xargs

a b c d e f g h i j k l m n o p q r s t u v w x y z

-n選項 多行輸出:

cat test.txt | xargs -n3

a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

-d選項 可以自定義一個定界符:

echo "nameXnameXnameXname" | xargs -dX

name name name name

結合 -n選項 使用:

echo "nameXnameXnameXname" | xargs -dX -n2

name name
name name

讀取stdin,將格式化後的參數傳遞給命令

假設一個命令爲 sk.sh 和一個保存參數的文件arg.txt:

#!/bin/bash
#sk.sh命令內容,打印出所有參數。

echo $*

arg.txt文件內容:

cat arg.txt

aaa
bbb
ccc

xargs的一個 選項-I ,使用-I指定一個替換字符串{},這個字符串在xargs擴展時會被替換掉,當-I與xargs結合使用,每一個參數命令都會被執行一次:

cat arg.txt | xargs -I {} ./sk.sh -p {} -l

-p aaa -l
-p bbb -l
-p ccc -l

複製所有圖片文件到 /data/images 目錄下:

ls *.jpg | xargs -n1 -I cp {} /data/images

xargs結合find使用

用rm 刪除太多的文件時候,可能得到一個錯誤信息:/bin/rm Argument list too long. 用xargs去避免這個問題:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0將\0作爲定界符。

統計一個源代碼目錄中所有php文件的行數:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

查找所有的jpg 文件,並且壓縮它們:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

xargs其他應用

假如你有一個文件包含了很多你希望下載的URL,你能夠使用xargs下載所有鏈接:

cat url-list.txt | xargs wget -c

子Shell(Subshells)

運行一個 shell腳本時會啓動另一個命令解釋器.,就好像你的命令是在命令行提示下被解釋的一樣,類似於批處理文件裏的一系列命令。每個shell腳本有效地運 行在父shell(parent shell)的一個子進程裏。這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程。

cmd1 | ( cmd2; cmd3; cmd4 ) | cmd5

如果cmd2 是cd /,那麼就會改變子Shell的工作目錄,這種改變只是侷限於子shell內部,cmd5則完全不知道工作目錄發生的變化。子shell是嵌在圓括號()內部的命令序列,子Shell內部定義的變量爲局部變量。

子shell可用於爲一組命令設定臨時的環境變量:

COMMAND1
COMMAND2
COMMAND3
(
  IFS=:
  PATH=/bin
  unset TERMINFO
  set -C
  shift 5
  COMMAND4
  COMMAND5
  exit 3 # 只是從子shell退出。
)
# 父shell不受影響,變量值沒有更改。
COMMAND6
COMMAND7

echo / | xargs ls -ll

[root@node0001 ~]# echo /
/
[root@node0001 ~]# echo / | xargs ls -ll
total 94
dr-xr-xr-x.  2 root root  4096 Oct 23 02:59 bin
dr-xr-xr-x.  5 root root  1024 Oct 23 03:00 boot
drwxr-xr-x  18 root root  3700 Nov 15 16:36 dev
drwxr-xr-x. 61 root root  4096 Nov 15 16:36 etc
drwxr-xr-x.  2 root root  4096 Sep 23  2011 home
dr-xr-xr-x.  8 root root  4096 Oct 23 02:59 lib
dr-xr-xr-x.  9 root root 12288 Oct 23 03:00 lib64
drwx------.  2 root root 16384 Oct 23 02:58 lost+found
drwxr-xr-x.  2 root root  4096 Sep 23  2011 media
drwxr-xr-x.  2 root root  4096 Sep 23  2011 mnt
drwxr-xr-x.  2 root root  4096 Sep 23  2011 opt
dr-xr-xr-x  86 root root     0 Nov 15 16:36 proc
dr-xr-x---.  2 root root  4096 Nov 15 17:33 root
dr-xr-xr-x.  2 root root 12288 Oct 23 03:00 sbin
drwxr-xr-x.  2 root root  4096 Oct 23 02:59 selinux
drwxr-xr-x.  2 root root  4096 Sep 23  2011 srv
drwxr-xr-x  13 root root     0 Nov 15 16:36 sys
drwxrwxrwt.  3 root root  4096 Nov 15 16:36 tmp
drwxr-xr-x. 13 root root  4096 Oct 23 02:59 usr
drwxr-xr-x. 17 root root  4096 Oct 23 02:59 var

請繼續關注後面的筆記,還會繼續講解更高級的Linux命令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章