linux_shell筆記(一)

 

 

自由軟件:更注重對軟件的解放,而非價格上的免費。

人工智能:AI--artificial intelligence

 

麻省理工學院:MIT

公共許可協議:General Public License,GPL

 

POSIX: 可移植計算機操作系統接口。Portable System Interface for computer Environments

ANSI: 美國國家標準協會,American National Standards Institute

 

ACL: 訪問控制列表。Access Control List

 

在文本環境下,shell 作爲命令解釋器,建立了用戶和操作系統之間的接口。bashtcsh

shell 除了具有解釋鍵盤命令的作用外,還是一種高級編程語言。shell 命令可以組織在一個文件中供以後執行,shell 腳本,批處理文件

 

shell 處理命令時可以使用對shell 具有特殊意義的字符來構造模式。這種特殊字符稱爲通配符。模式稱爲模糊文件引用。

 

輸入輸出都是設備無關的,可被重定向

 

shell 可以作爲一種編程語言來使用。因爲是一解釋器 所以不能對爲它編寫的程序進行編譯,而是每次重磁盤加載這些程序時,對他進行解釋。Shell 函數

 

Job Control :作業控制,允許用戶同時運行多個作業,並且根據需求可將前後臺的作業進行切換。

 

Linux 包括很多工具程序,這些程序通常被稱爲命令,可以提供用戶普通需求的功能。

 

管道(pipe )和過濾器(filter )管道是可以將程序的輸出作爲另一個程序的輸入。過濾器,作爲管道的一種特殊形式,對輸入數據流處理以後得到輸出數據流。

 

X window 系統(也稱爲X ) 的一部分是由MIT 的研究人員開發的,這位linux 中的圖形用戶界面(Graphical User Interface GUI )奠定了基礎。X 是一種跨網絡協議。桌面管理器 窗口管理器,GNOMEKDE 是比較流行的桌面控制器

 

bison 工具生成的解析代碼使得編譯器的開發工作變得容易。

make 工具和GNU 中進行的自動配置的configure 工具使得複雜項目的開發管理變得容易。

 

顯示 TERM 變量

> echo $TERM

顯示 PATH 變量

> echo $PATH

回到 home 目錄

> cd ~

terry@terry-pc:~$

用戶名 系統名:路徑名 $

 

顯示 PS1 變量 (設置用戶提示符格式如:‘ terry@terry-pc:~$ ’

> echo $PS1

> echo $PS2

 

通過網絡登錄: telnet (不安全),顯示文本的方式發送登錄時的用戶名和密碼, ssh (安全) 將所有的信息進行加密發送。

> ssh terry-pc

 

工作在文本界面下, shell 將作爲命令解釋器運行。由 shell 來顯示提示符,當輸入命令後, shell 執行該命令並顯示另一個提示符

 

查詢系統正在運行的工具或命令

> ps

> pstree

> ps -elf

 

>ps

>xclock

CONTROL+Z ( 程序掛起鍵,停止程序的作業 ) 掛起 xclock 進程

查看當前作業

>jobs

將作業轉爲後臺執行

>bg %1

查看當前運行命令

>ps

將作業 1 轉爲前臺執行

>fg %1

CONTROL+C 殺死當前進程(前臺作業相關的 xclock ,該命令向正在運行的程序和 shell 發送終端中斷信號,效果與運行的具體程序有關)

>jobs

後臺運行 xclock

>xclock &

>ps

殺死 xclock 進程( ps 查看進程 ID 號)

>kill 11701

 

>jobs

>xclock

CONTORL+Z

殺死標號 1 作業

>kill -KILL %1

 

>jobs

>xclock

CONTORL+Z

殺死標號 1 作業

>kill %1

上述兩種方式的區別在於:第一種利用 kill 發送信號 - KILL ,而第兒種採用默認的 kill 發送的是- TERM 信號,- KILL 信號對於任何運行的程序都不能突略

 

shell 輸入命令模式下 COUTROL W 刪除單詞 COUTROL U 刪除整行

顯示所有終端參數

>stty -a

將字符擦除 和 行刪除設置爲默認值 (erase & kill)

>stty ek

 

按下方向鍵中的 向上 向下鍵可以得到以前輸入的命令,然後 Return 可再次運行該命令。

 

用戶可以通過 man info 工具獲得 man 頁(用戶手冊)和 info 頁內容

 

GNU 工具都有 – help 選項,用來顯示工具的一些信息

>cat –help

通過管道用 less 分頁程序進行分屏顯示。

>ls –help | less

 

man 工具用於顯示系統文檔中的 man 頁內容。

列出 who man 頁內容。

>man who

顯示登錄用戶信息

>who -a

 

清除屏幕顯示內容。

>clear

 

less 使得用戶可以分屏瀏覽一個文件。當以這種方式顯示手冊頁時, less 工具將在顯示完一屏之後,在屏幕底部顯示提示符 ':' ,並等待鍵盤輸入,按下 SPACE 鍵可以顯示下一屏的文本信息;按下 h 鍵可顯示 less 命令列表,按下 q 鍵就退出 less 文本顯示並返回 shell 提示符。用 man 顯示命令 man 頁的時候 man 工具通過分頁程序(通常是 less )自動發送輸出結果。

 

FHS Filesystem Hierarchy Standard 文件系統層次標準。

linux 系統的手冊頁和 man 頁分爲 10 個部分,每個部分描述了相關工具的使用方法。

1 :用戶命令

2 :系統調用

3 :子程序

4 :設備

5 :文件格式

6 :遊戲

7 :其他

8 :系統管理

9 :本地

10 :最新

默認顯示的手冊頁中最早出現的相關內容。

>man write

顯示第 2 部分中的 write 工具對應頁內容。

>man 2 write

可以利用- a 選項瀏覽相關主題的所有 man 頁,通過 q 鍵轉到下一部分

瀏覽 write 所有的 man 頁內容。

>man -a write

 

man 工具顯示非 GNU 工具的信息經常是唯一的。 Info 顯示的非 GNU 工具的信息通常是 man 頁內容的副本,與 man 相比 info 可顯示 GNU 工具更完整的最新信息。

 

得到 sleep info 頁內容。

>info sleep

info 頁中如果 行最左邊利用*作爲菜單項的開始,其後爲菜單項名稱,每個菜單項可以鏈接到描述該菜單項的 info 頁。將光標移動到菜單項上並 RETURN 跳到描述該菜單項目的頁。 p 得到前一個節點, d 可返回到初始菜單頁面。

 

CONTROL D 組合鍵,或者在 shell 提示符下 利用 exit 命令即可從字符界面退出。

 

按下 CONTROL ALT 和要瀏覽控制檯對應的功能鍵即可在控制檯之間切換。

我們稱第一次啓動時( CONTROL ALT F1 )調用的控制檯爲系統控制檯。

 

修改密碼

>passwd

 

 

 

 

 

 

 

在命令行下的工作過程就是使用 shell 的過程。

關機

>shutdown -P 0

 

最好不要將特殊字符作爲文件名中的字符,如果要將特殊字符作爲普通字符來使用,需要對他們進行轉義:反斜槓,‘ /*/*’ 對‘ **’ 的轉義。‘ //’ 對‘ /’ 的轉義;單引號,‘ This is a special character:>’ 其中的普通字符仍將被視爲普通字符,而特殊字符將被解釋爲普通字符。

 

輸入下面命令(試圖用單引號對控制字符進行轉義),由於含有‘ CONTROL U’ (刪除行) , 將使得命令在輸入過程中被整行刪除。

>echo 'xxxxxxxxCONTROL+U'

利用 'CONTROL+V' 對控制字符進行轉義:

>echo xxxxxxxxCONTROL+V CONTROL+U

echo 輸出通過管道將其作爲 od 的輸入,然後 od 用八進制顯示。

>echo xxxxxxxxCONTROL+V CONTROL U od -c

 

linux 優點是它的成千上萬的工具可以完成許多功能,在使用 linux 時將一直以直接 ( 通過命令行 ) 或間接(通過圖標和菜單)的方式使用這些工具。

 

顯示當前目錄下的所有文件列表

>ls

顯示文本文件 practice 內容

>cat practice

顯示文件 example.c 標準輸入 ( 需要利用 CTRL+D 表徵 EOF 結束標準輸入的顯示 ) 和 文件 example2.c

>cat example.c – example2.c

刪除 practice 文件

>rm practice

顯示當前目錄下的所有文件列表

>ls

顯示文本文件 practice 內容(由於上面命令將該文件刪除,所以這行命令將提示該文件不存在)。

>cat practice

 

複製當前目錄下 example.c 到 當前目錄下 example2.c

>cp example.c example2.c

採用交互式刪除 example2.c (將詢問是否刪除 y 刪除 n 不刪除)--創建別名並保存到初始文件中,那麼以後運行 rm 時均採用交互方式。

>rm -i example2.c

 

less more 分屏顯示文件:分頁程序, less 到文件末尾處,顯示 EOF end of file )信息等待輸入 q 來返回到 shell more 直接退出到 shell

>more example.c

>less example.c

 

文件名補齊:在命令行上的命令之後輸入文件名的一個或幾個字符,再按 TAB 鍵, shell 將盡可能的補全文件名。若文件名沒有補齊(多個可匹配文件存在時,部分補齊)再按 TAB 鍵將顯示完整的可補齊文件名列表。

 

顯示正在使用的系統名

>hostname

 

cp :文件複製,可對任何文件進行復制,文本文件和程序的可執行文件等。

>ls

>cp example.c example.c.copy

>ls

如果 cp 命令的目標文件是一個已經存在的文件,執行結果會重寫目標文件。重寫時沒有警告信息,- i 選項交互方式執行 cp ,這種情況下將提示重寫警告。

>rm example.c.copy

複製 example.c example.c.copy

>cp example.c example.c.copy

直接重寫

>cp example.c example.c.copy

提示是否重寫?

>cp -i example.c example.c.copy

 

cp 命令用來對文件進行備份,副本命名可以在後加 '. 日期 '

 

 

mv :可以對文件重命名,與 cp 命令一樣, mv 也會覆蓋文件,也有‘- i’ 選現進行交互式操作。

>ls

>mv example.c example.c.mv

>ls

>mv example.c.mv example.c

 

 

lpr: 打印文件

使用默認的打印機打印文件

>lpr example.c

使用打印機 mailroom 打印文件

>lpr -Pmailroom example.c

>lpr -Pmailroom example.c example.sh

查看打印作業

>lpq

刪除作業號 86 的打印作業

>lprm 86

 

grep: global regular expression print ,全局正則表達式及打印)查找字符串。在一個或多個文件中搜索是否包含某給定字符串。只是顯示包含查找字符串的文件行,並不修改搜索出的文件。

>cat example.c

example.c 中搜索含有 'u' 字符串的文件行。

>grep 'u' example.c

example.c 中單詞匹配搜索含有 'return' 字符串的文件行,結果輸出到當前默認輸出文件(默認控制終端顯示設備)。

>grep -w 'return' example.c

查找並顯示行號。

>grep -n -w 'return' example.c

顯示以 'example' 爲文件名起始字符串的文件列表

>ls example*

example.c 中搜索含有 'u' 字符串的文件行。輸出被重定向到文件 example.gerp ,即結果將被輸出到 example.grep 文件中,如果該文件不存在將被創建,存在將被重寫。 '&' 表示該命令將在後臺執行。

>grep -w 'return' example.c > example.grep &

>ls example*

 

head: 顯示文件的前 10 行信息,可以幫助我們回憶起文件的內容。 '-' 和數字可指定顯示的行數。

>cat example.c

顯示文件的前 10

>head example.c

顯示文件的前 3 (參數指定)行

>head -3 example.c

 

 

tail: 顯示文件尾部。默認顯示文件的最後 10 行,利用 '-' 和數字可以指定顯示的行數。

顯示文件的最後 10 (默認)行

>tail example.c

顯示最後 4 (參數指定)行

>tail -4 example.c

監視逐漸增長的文件 logfile 的增加行的內容。

>tail -f logfile

 

sort: 按順序顯示文件的內容。並不改變文件內容。

>cat example.c

按照順序顯示文件的內容 ...

>sort example.c

選項 u 使得每行顯示都是唯一的,沒有重複

>cat example.c

 

uniq : 忽略文件中的重複行,不會改變原文件的內容。

>cat example.c

>unqi example.c

 

diff: 比較兩個文件,顯示兩者所有的不同之處,不該變任何一個文件的內容。對比較兩個版本的源代碼很有幫助 , 選項‘- u’ unified output format , 統一輸出格式),執行結果將首先說明要比較的兩個文件,其中一個用正號表示,一個用負號表示。 @@ 中間的數字表明瞭塊在兩個文件中開始的行號和後續的行數。

>diff -u example.c example.sh

 

file :測試文件內容

不通過打開文件查看內容的情況下,直接獲得 linux 系統中任何文件的內容信息。

>file example.c

>file example.sh

>file example.c example.sh

 

|( 管道 ): 實現進程間的通信,進程在 linux 中是指某個命令的執行,進程間通信是 linux 的特點之一。管道(在命令行上用豎線‘|’表示)爲這種通信的最簡單方式。管道接收一個工具的輸出並將其作爲另一個工具的輸入。管道是將一個進程的標準輸出重定向爲另一個進程的標準輸入。

Cat 顯示 example.c 輸出到標準輸出,管道的存在使得其標準輸出被重定向到 head 命令的標準輸入,所以 head 工具顯示其標準輸入的文件( cat 的標準輸出被重定向到該標準輸入)第一行內容到其標準輸出(打印到屏幕)上。通過管道顯示程序輸出的前 1 行。

>cat example.c | head -1

通過管道打印程序的輸出。

>tail example.c | lpr

>cat -n example.c > example.c.cp

'-n' 選項將輸出列出行號。

 

echo: 顯示文本。可複製其後跟的任何內容,並輸出到標準輸出上。複製自身參數並輸出到標準輸出上。

在標準輸出上顯示‘ Hi’

>echo Hi

在標準輸出上顯示 'star:*'

>echo star:*

在標準輸出上顯示‘ star: 當前目錄下所有文件列表’。注意於上一個命令行的區別

>echo star: *

利用管道向文件 'example.echo' 寫入字符串 'example.echo'

>echo example.echo > example.echo

 

 

顯示當前登錄用戶主目錄。

>echo ~

顯示 PATH 包含路徑

>echo $PATH

顯示當前目錄下所有文件列表

>echo *

 

利用管道將顯示的控制字符 CONTROL M (顯示的 ^M 是利用 CONTROL V CONTROL M 進行轉義)轉成 8 進制形式輸出到 od 的標準輸出上

>echo ^M | od -c

 

cat 爲顯示文本文件(參數給定文件名)內容, echo 爲顯示輸入的參數(參數給定文件名的話則顯示文件名本身而不是內容)注意兩者之間的區別。

在標準輸出上顯示字符串 'example.c'

>echo example.c

在標準輸出上顯示文件 example.c 的內容。

>cat example.c

 

date :顯示日期和時間

 

script :記錄 linux 會話信息,該工具可記錄登錄會話的部分或全部信息,如輸入和系統的響應。只對基於文本的設備有效,如終端或終端模擬器。默認情況下捕捉的內容被保存到 typescript 文件中,可參數指定文件命, -a 選項表示以追加方式寫入文件,否則會重寫已經存在的文件。

開始 script 記錄會話到文件 example.script

>script example.script

>date

>ls -l example.*

>file example.*

>echo *

>apropos mtools

>w

>who

退出 script 記錄會話。

>exit

>cat example.script

如果需要利用編輯器( vim emacs 或其他編輯器)編輯上面得到的文件,需要利用 dos2uinx 將文件中每行末尾的 ^M( 回車符 /r) 去掉。

 

unix2dos: linux 文件轉換爲 windows 格式,

將文件轉換爲 dos 格式,不帶選項將直接重寫原文件。

>unix2dos example.script

dos2unix: dos 格式文件轉換爲 linux 格式。

 

tr 也可實現 dos 格式的文本文件向 linux 格式的轉換。

產生文件副本時通過 -d 選項刪除了其中的回車符(‘ /r’

>cat example.script | tr -d '/r' >example.scriptdos

 

bzip2: 壓縮文件,通過分析和有效記錄文件內容的方法來壓縮文件。

選項 '-k' 保留原來文件,如果沒有該選項者默認會刪除原有文件; '-v' verbose )顯示節省空間的百分比;‘ -f’ 選項強制壓縮文件,當已經存在該文件的壓縮包時可以利用該選項強制重寫壓縮包;文件被壓縮後被重命名爲原文件加後綴 .bz2 ,壓縮文件並不改變文件的修改日期;

>bzip2 -kv example.jpg

>bzip2 -kvf example.jpg

>ls *JPG

壓縮當前目錄下所以以‘ JPG’ 作爲文件名末尾字符的文件 ( 當然也可以在命令行輸入多個要壓縮的文件名,效果相同 ) ,並保留原文件,壓縮結果是生成多個壓縮包與每個 'JPG' 文件對應。

>bzip2 -kv *JPG

>rm *bz2

 

bunzip2 bzcat: 解壓縮文件, bunzip2 可以將 bzip2 壓縮的文件解壓縮恢復爲原來文件。 bzcat 用來顯示 bzip2 壓縮文件的內容,首先將壓縮數據解壓然後顯示解壓後文件的內容,和 cat 一樣 bzcat 並不改變文件的內容,文件仍然以壓縮包的形式存在,方便在不解壓縮的情況下查看壓縮包的文件內容。

>ls *JPG

>bzip2 -kv example.JPG

>bzcat example.JPG.bz2 | head -1

>rm example.JPG

>bunzip2 -k example.JPG.bz2

>bunzip2 -kf example.JPG.bz2

>rm *.bz2

 

gzip,gunzip zcat bzip2 bunzip2 bzcat 使用方式相同。不要於 zip uzip 混淆,後兩個是 windows 下對歸檔文件進行打包和解包,將多個文件歸檔;而前者是將一個文件進行壓縮。

 

tar: 打包和解包文件;常用來將多個文件或多個目錄歸檔爲一個 tar 文件,或將某個 tar 文件分解開。

選項 '-c'(creat 創建 ),'-v'(verbose 顯示詳細信息 ),'-f'(file 從文件進行讀寫 ),'-t'(table 列出歸檔文件的內容而並不解包 ) '-x'(extract 取出歸檔文件中的文件,解包處理 ) ;選項 '-c''-x' 在創建或解包處理過程中並不刪除原有文件,這與 bzip2 bunzip2 (需要利用 '-k' 避免原文件的刪除)不同。

>ls example*

將當前目錄下所有的以 'example' 最爲文件名開頭字符的文件歸檔到 all.tar 歸檔文件中,並顯示操作提示。

>tar -cvf all.tar example*

列出歸檔文件中的文件信息

>tar -tvf all.tar

對歸檔文件進行解壓,如果當前目錄中有文件和歸檔包中文件同名,該文件將被重寫。可以將歸檔文件移到一個新的目錄下解壓縮,避免文件重寫。

>rm *tar

>tar -cvf all.tar example*

>tar -tvf all.tar

>tar -xvf all.tar

>mkdir example

>mv all.tar example/example.tar

>cd example

>tar -xvf example.tar

>ls -l

>cd ..

遞歸刪除目錄和目錄下的文件。

>rm -r example

 

利用 tar 歸檔多個文件到歸檔文件中,然後使用 bzip2 壓縮歸檔文件;利用 bunzip2 解壓壓縮文件,然後利用 tar 提取歸檔文件。

>rm *tar *bz2

>tar -cvf example.tar example*

>bzip2 -kv example.tar

>mkdir example

>mv example.tar.bz2 example/example.tar.bz2

>cd example

>bunzip2 -kv example.tar.bz2

>tar -xvf example.tar

>ls

>cd ..

>rm -r example

>rm *tar *bz2

 

通過管道可將 bunzip2 tar 命令放在一個命令行上。利用 '-j' 選項使得 tar 直接調用 bunzip2

>tar -cvf example.tar example*

>bzip2 -v example.tar

>mkdir example

>mv example.tar.bz2 example/example.tar.bz2

>cd example

-c’ 選項使得 bunzip2 輸出送到管道而不再創建文件。

>bunzip2 -c example.tar.bz2 | tar -xvf -

>ls

>mv example.tar.bz2 all.tar.bz2

>rm example*

'-j' 選項使得 tar 直接調用 bunzip2 '-z' 選項則調用 gunzip

>tar -xvjf all.tar.bz2

>ls

>cd ..

>rm -r example

 

工具 whereis apropos 用來找不知道名字或確切位置的命令。當某個工具或程序有多個副本時, which 來識別哪個副本在運行。

Which whereis 定位工具,當輸入一個命令時 shell 將在一組目錄中查找該名字的程序,並運行第一個找到的程序。這一組目錄被稱爲搜索路徑( PATH )。通過 which 可確定 shell 運行了程序的哪個副本;當感覺某個命令運行異常時可利用該命令來確定是哪一個程序運行異常; whereis 搜索於工具相關的文件; which 報告在搜索路徑下搜索到的第一個程序; whereis 顯示所有搜索到的文件 ( 可執行文件,手冊頁,對應源碼等 )

>which tar

>whereis tar

注意 ,which whereis 只能報告在磁盤上搜索到的命令名,而不能搜索到 shell 的內置命令。在 bash 下,使用 type 內置命令可確定命令是否爲內置命令。

Which 顯示運行的 echo 程序路徑,因爲實際運行的 echo shell 內置命令,所以該顯示是一個錯誤的路徑。

>which echo

>whereis echo

>type echo

 

apropos :搜索關鍵字,當需要完成某個特定任務但是又不知道命令名時,可使用關鍵字和 apropos 工具進行搜索。 whatis apropos 類似,只是搜索完全匹配的信息,

>apropos tar

>whatis tar

>apropos who

>whatis who

 

who 列出系統上的用戶,將登錄到系統上的用戶列出,可以確定某個用戶是否再線然後利用 write 立即與該用戶建立連接。

>who

>who am I

>who | grep -w 'terry'

 

finger: 列出系統上的用戶,比 who 顯示的內容更加豐富 . 列出信息中的設備列前面的 '*' 表示該用戶阻止其他用戶直接向她的終端發送消息 . finger 後跟用戶名可以獲得用戶的更多消息 .

>finger

>finger terry

finger 搜索 terry 用戶主目錄下的 .plan 文件並顯示其中的內容,類似的也會顯示主目錄下的 .project 文件的內容。

 

w: 列出系統上的用戶。與 'who''finger' 不同在於顯示信息的關注點不同。

Who ,顯示登錄用戶的信息; w ,顯示登錄用戶詳細信息; finger ,顯示用戶的詳細信息,包括他們的全名。

 

Write: 與其他用戶通信,用來給一個已登錄用戶發送消息。兩個用戶利用 write 發送消息是一個雙向通信

的方式。

 

CONTROL+ALT+F2 切換到第二個虛擬控制檯,然後利用 root 用戶名登錄:

>mesg

>mesg y

>w

>write terry pts/0

hi,i am root,are you here?o

CONTROL+ALT+F7 切換到第七個虛擬控制檯:

>w

>write root

hi,im here,o

以後就可以進行雙向通信了,要使通信結束,雙方利用 CONTROL+D(EOF) 結束通信。 Mesg 拒絕或接收其他用戶由 write 發來的消息。

 

 

 

 

 

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