天天看點

shell常用指令整理

1、 ls: 類似于dos下的dir指令

ls最常用的參數有三個: -a -l -F。

ls –a

Linux上的檔案以.開頭的檔案被系統視為隐藏檔案,僅用ls指令是看不到他們的,而用ls -a除了顯示一般檔案名外,連隐藏檔案也會顯示出來。

ls –l

該參數顯示更詳細的檔案資訊。

ls –F

使用這個參數表示在檔案的後面多添加表示檔案類型的符号,例如*表示可執行,/表示目錄,@表示連結檔案,這都是因為使用了-F這個參數。但是現在基本上所有的Linux發行版本的ls都已經内建了-F參數,也就是說,不用輸入這個參數,我們也能看到各種分辨符号。

2、cd: 用于切換使用者目前工作目錄

cd aaa 進入aaa目錄

cd 指令後不指定目錄,會切換到目前使用者的home 目錄

cd ~ 作用同cd後不指定目錄,切換到目前使用者的home 目錄

cd - 指令後跟一個減号,則會退回到切換前的目錄

cd … 傳回到目前目錄下的上一級目錄

3、pwd:用于顯示使用者目前工作目錄

4、mkdir 和 rmdir

midir:建立目錄 rmdir:删除目錄

兩個指令都支援-p參數,對于mkdir指令若指定路徑的父目錄不存在則一并建立,對于rmdir指令則删除指定路徑的所有層次目錄,如果檔案夾裡有内容,則不能用rmdir指令

如下:

mkdir -p 1/2/3

rmdir -p 1/2/3

5、cp:複制指令

複制一個檔案到另一目錄:cp 1.txt …/test2

複制一個檔案到本目錄并改名:cp 1.txt 2.txt

複制一個檔案夾a并改名為b:cp -r a b

6、mv:移動指令

将一個檔案移動到另一個目錄:mv 1.txt …/test1

将一個檔案在本目錄改名:mv 1.txt 2.txt

将一個檔案一定到另一個目錄并改名:mv 1.txt …/test1/2.txt

7、rm指令

rm指令用于删除檔案,與dos下的del/erase指令相似,rm指令常用的參數有三個:-i,-r,-f。

–i :系統在删除檔案之前會先詢問确認,使用者回車之後,檔案才會真的被删除。需要注意,linux下删除的檔案是不能恢複的,删除之前一定要謹慎确認。

–r:該參數支援目錄删除,功能和rmdir指令相似。

–f:和-i參數相反,-f表示強制删除

8、du、df指令

du指令可以顯示目前的目錄所占用的磁盤空間,df指令可以顯示目前磁盤剩餘空間。

如果du指令不加任何參數,那麼傳回的是整個磁盤的使用情況,如果後面加了目錄的話,就是這個目錄在磁盤上的使用情況。

du -hs 指定目錄 檢視指定目錄的總大小

du -hs .1’ aa

如果west被比對,則es就被存儲到記憶體中,并标記為1,然後搜尋任意個字元(.),這些字元後面緊跟着另外一個es(/1),找到就顯示該行。如果用egrep或grep -E,就不用"/"号進行轉義,直接寫成’w(es)t./1’就可以了。

15、man,logout指令

man指令

man是manual的縮寫,相當于Unix/Linux的聯機Help,每個系統指令和調用都有非常詳細的說明,絕大多數都是英文。如:man ls即是檢視ls指令的使用說明,一般還有另一種方法用來檢視幫助,如:ls –help,這種方式絕大多數指令都支援。

logout指令

該指令用于退出系統,與login指令對應。

16、管道和xargs

管道:

利用Linux所提供的管道符“|”将兩個指令隔開,管道符左邊指令的輸出就會作為管道符右邊指令的輸入。連續使用管道意味着第一個指令的輸出會作為第二個指令的輸入,第二個指令的輸出又會作為第三個指令的輸入,依此類推。

注意:管道左邊指令的輸入作為管道右邊指令的輸入(指令的輸入是一定的),不是參數,并不是所有指令都支援管道

例子:ls | grep a 檢視目前目錄下名稱包含a的檔案或檔案夾

xargs:

大多數 Linux 指令都會産生輸出:檔案清單、字元串清單等。但如果要使用其他某個指令并将前一個指令的輸出作為參數該怎麼辦?例如,file 指令顯示檔案類型(可執行檔案、ascii 文本等);你能處理輸出,使其僅顯示檔案名,目前你希望将這些名稱傳遞給 ls -l指令以檢視時間戳記。xargs 指令就是用來完成此項工作的。

注意:find指令把比對到的檔案傳遞給xargs指令,而xargs指令每次隻擷取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先擷取的一部分檔案,然後是下一批,并如此繼續下去

例子:

1、在整個系統中查找記憶體資訊轉儲檔案(core dump) ,然後把結果儲存到/tmp/core.log 檔案中:

$ find / -name “core” -print | xargs echo “” >/tmp/core.log

2、當一個目錄下檔案太多時,直接用rm * 指令會包參數過長,用如下方法可以全部删除

$ls | xargs rm

17、basename 和 dirname

basename用于檢視檔案不含路徑的名字,dirname則用于檢視檔案路徑,使用效果我們測試一下便知:

basename /home/hj/1.txt

1.txt

dirname /home/hj/1.txt

/home/hj

basename 1.txt

1.txt

dirname 1.txt

18、不帶任何參數的set指令将顯示shell的全部變量

19.vi

按ESC鍵回到指令模式

:wq 儲存檔案并退出vi

:w 儲存檔案但不退出vi

:w file 将修改另外儲存到file中,不退出vi

:q 不儲存檔案,退出vi

删除多行的方法:

dd 删除一行

d$ 删除以目前字元開始的一行字元

ndd 删除以目前行開始的n行

dw 删除以目前字元開始的一個字

ndw 删除以目前字元開始的n個字

x:删除目前字元;

u:恢複前一步操作;

p:複制之前删除的行

vi n filename :打開檔案,并将光标置于第n行首

vi /pattern filename:打開檔案,并将光标置于第一個與pattern比對的串處

vi -r filename :在上次正用vi編輯時發生系統崩潰,恢複filename

vi filename…filename :打開多個檔案,依次進行編輯

查找

/pattern 向下查找pattern比對字元串

?pattern 向上查找pattern比對字元串

替換

利用 ? 指令可以實作字元串的替換。具體的用法包括:

?/str1/str2/ 用字元串 str2 替換行中首次出現的字元串 str1

?/str1/str2/g 用字元串 str2 替換行中所有出現的字元串 str1

:.,$ s/str1/str2/g 用字元串 str2 替換正文目前行到末尾所有出現的字元串 str1

:1,$ s/str1/str2/g 用字元串 str2 替換正文中所有出現的字元串 str1

20.vim

正常模式:可以使用快捷鍵指令,或按:輸入指令行。

插入模式:可以輸入文本,在正常模式下,按i、a、o等都可以進入插入模式。

可視模式:正常模式下按v可以進入可視模式, 在可視模式下,移動光标可以選擇文本。按V進入可視行模式, 總是整行整行的選中。ctrl+v進入可視塊模式。

替換模式:正常模式下,按R進入

yy or Y: 複制整行文本

21.翻屏

ctrl+f: 下翻一屏。

ctrl+b: 上翻一屏。

ctrl+d: 下翻半屏。

ctrl+u: 上翻半屏。

ctrl+e: 向下滾動一行。

ctrl+y: 向上滾動一行。

n%: 到檔案n%的位置。

zz: 将目前行移動到螢幕中央。

zt: 将目前行移動到螢幕頂端。

zb: 将目前行移動到螢幕底端。

22.顯示行号

:set nu

23、動态顯示檔案尾部的符合條件的資料及後10行

tail -f log.log | grep -10 exception*

24、ps

檢視程序指令

-e 顯示所有程序

-f 全格式

r 隻顯示正在運作的程序

25、awk

以空格為預設分隔符将每行切片,切開的部分再進行各種分析處理。

awk ‘{pattern + action}’ {filenames}

awk [-F field-separator] ‘commands’ input-file(s)

其中,commands 是真正awk指令,[-F域分隔符]是可選的。 input-file(s) 是待處理的檔案。

在awk中,檔案的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔符的情況下,預設的域分隔符是空格。

last -n 5 | awk ‘{print $1}’

26、 0 , 0 , 0,?, $#

$$

Shell本身的PID(ProcessID)

$!

Shell最後運作的背景Process的PID

$?

最後運作的指令的結束代碼(傳回值)

$-

使用Set指令設定的Flag一覽

∗ 所 有 參 數 列 表 。 如 " * 所有參數清單。如" ∗所有參數清單。如"*“用「”」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。

@ 所 有 參 數 列 表 。 如 " @ 所有參數清單。如" @所有參數清單。如"@“用「”」括起來的情況、以"$1" “ 2 " … " 2" … " 2"…"n” 的形式輸出所有參數。

$#

添加到Shell的參數個數

$0

Shell本身的檔案名

1 ~ 1~ 1~n

添加到Shell的各參數值。$1是第1參數、$2是第2參數…。

27、curl指令

curl localhost:2300/goods/infos

加上 -v參數,可以看到詳細的請求資訊

-X POST表明請求的方法,-d 傳遞參數

curl http://localhost:8080/company/infos -X POST -d ‘title=aa&name=bb’

如果資料是json格式的

curl localhost:8080/company/infos -X POST -H “Content-Type:application/json” -d ‘“title”:“comewords”,“content”:“articleContent”’

上傳檔案 用 -F “[email protected]FILE_PATH” 的請示,傳輸檔案即可

curl localhost:8080/api/v1/upimg -F “[email protected]/Users/fungleo/Downloads/401.png” -H “token: 222” -v

28、nohup指令

一般想讓某個程式在背景運作,于是我們将常會用 & 在程式結尾來讓程式自動運作。

nohup Command [ Arg … ] [ & ]

例子

nohup command > /dev/null 2>&1 &

作業系統中有三個常用的流:

  0:标準輸入流 stdin

  1:标準輸出流 stdout

  2:标準錯誤流 stderr

把标準錯誤(2)重定向到标準輸出中(1),而标準輸出又導入檔案/dev/null裡面

29、修改時間

date -s "YYYY-MM-DD hh:mm:ss"可以修改系統時間,硬體時間指的是主機闆上CMOS的時間,這兩個時間并不總是同步的,一般間隔大約11分鐘會同步一次。當系統啟動時會從CMOS上讀取一次時間作為系統時間,而後系統時間獨立。

通過hwclock --systohc将系統時間同步到硬體時間

所有可以通過date -s “YYYY-MM-DD hh:mm:ss” &&hwclock --systohc來修改系統時間

30、netstat

用于顯示與IP、TCP、UDP和ICMP協定相關的統計資料,一般用于檢驗本機各端口的網絡連接配接情況。netstat是在核心中通路網絡及相關資訊的程式,它能提供TCP連接配接,TCP和UDP監聽,程序記憶體管理的相關報告。

顯示網卡清單 netstat –i

顯示多點傳播組的關系 netstat –g

顯示網絡統計 netstat -s

-l, --listening display listening server sockets

-a, --all, --listening display all sockets

-p, --programs display PID/Program name for sockets

-n, --numeric don’t resolve names

31、xargs

find指令把比對到的檔案傳遞給xargs指令,而xargs指令每次隻擷取一部分檔案而不是全部

-n num 後面加次數,表示指令在執行的時候一次用的argument的個數,預設是用所有的

cat test.txt | xargs -n3

-d delim 分隔符,預設的xargs分隔符是回車

xargs 一般是和管道一起使用 somecommand |xargs -item command