Linux必會基本知識
1、統計現在登入到系統上的賬戶總數
who | wc -l
who命令可以檢視登入到系統上的賬戶。wc命名是Linux系統裡面的統計程式,可以計算出行數(-l)、字數(-w)、字元數(-c)。此例中是統計行數。
2、將終端使用者的輸入儲存到檔案中
cat > filename
cat 命令通常使用來顯示文字檔案的內容。當使用重定向符號時,將會把使用者在終端的輸入儲存到檔案中。^+D結束輸入。如果我們想把一系列命令儲存到文字中,這種方法是非常合適的。
3、shell指令碼的第一行
通常shell指令碼的第一行是:
#!/bin/sh -
選項 “-”代表沒有選項。通常為了安全考慮才加的,可以避免某種程度的欺騙式攻擊。
shell指令碼第一行#!的作用是告訴Linux核心用什麼直譯器來執行這段指令碼。
4、同一行執行多條命令
同一行執行多條命令的方法是將不同的命令使用分號“;”分割開。如果命令後面接了&號,則代表這個命令是在後臺執行,意味著,shell不用等待這條命名完成,就可以繼續執行下一條命令。
5、Shell基本命令種類
Shell有三種基本的命令:Shell內鍵命令、Shell函式以及外部命令。
內建命令:cd,read,test,echo,printf等。
Shell函式:功能健全的一系列程式程式碼,以Shell語言寫成。
外部命令:是由shell的副本(新的程序)所執行的命令,基本過程如下:1)建立一個新的程序,這個程序是shell的一個副本。2)在新程序中,執行特定的命令(命令沒有指定絕對路徑時,在PATH變數列出來的路徑裡面查詢)。3)命令執行完成後,最初的shell接著讀取下一條命令,或執行腳本里的下一條命令。
6、Shell中變數的定義、賦值、引用和列印
定義:字母、下劃線開頭,任意長度字母、數字、下劃線符號組成的字串;
賦值:變數名=值;等號兩邊沒有空格!!舉例:
first=isac middle=bashrc last=singer 單行多次賦值
fullname=”liu chunming” 值包含空格的時使用引號
oldname=$firstname 用其他變數值給本變數賦值,不需要雙引號
avada=”\$first \$middle \$last” 將多個變數連線起來,需要使用引號。
引用:變數名前面加上$。
7、簡單的echo輸出
最常用的顯示變數的值。echo通常的任務是產生輸出內容,可以用來提示使用者、或是產生資料供進一步處理。
通常echo顯示輸出時,會在輸出內容的後面加一個換行符號。如果不需要這個換行符號可以加-n引數。
8、強大的printf輸出
printf的語法分為兩部分:
printf format-string [arguments,……]
輸出簡單字串:
printf "Hello,world!\n"
與echo非常相似,但是不同的是,你必須手動提供一個換行符,printf不會自動給你加上這個換行符。
格式化輸出:
printf "Happy new year %s %d \n" Hello 2018
9、重定向
重定向就是改變預設的輸出目的地、輸入來源的行為。
1)program < file將program的標準輸入改為file。
2)program > file將program的標準輸出改為file。
舉例:
將windows文字中的換行符(\r\n)改成linux系統下的換行符(\n)
tr -d '\r' < dos-file.txt > unix-file.txt
> 重定向符的目標檔案不存在時,將會自動建立一個。然後,如果目標檔案存在,則會覆蓋目標檔案中的資料。如果想保留目標檔案中的資料,只是將新資料追加到目標檔案中,可以使用>>重定向符。
例如:
for f in dos-file*.txt
do
tr -d '\r' < f >> unix-file.txt
done
10、管道
管道的作用是前一個程式的輸出與後一個程式的輸入 的橋樑。
語法是:
prrgram1 | program2
舉個例子,將dos-file.txt中的回車符號刪除並且按行排序後儲存到unix-file.txt裡面
tr -d '\r' < dos-file.txt | sort > unix-file.txt
11、字元轉換工具tr
tr命名是進行字元轉換的工具,是translate的簡寫。以字元為操作物件。比如刪除字元、將小寫字元轉換成大寫字元,將多個連串的重複字元濃縮成1個字元等。
刪除:
echo 1234444444567 | tr -d 4 #輸出123567
去重:
echo 1234444444567 | tr -s 4 #輸出1234567
替換:
echo 1234444444567 | tr 4 '*' #輸出123*******567
翻轉替換:
echo 1234444444567 | tr -c 4 '*' #輸出***4444444****
12、正則表示式
舉例說明吧:
grep root /etc/passwd #匹配/etc/passwd中帶有root的行
grep ^root /etc/passwd #匹配/etc/passwd中以root開始的行
grep bash$ /etc/passwd #匹配/etc/passwd中以bash結尾的行
grep ^bash$ /etc/passwd #匹配/etc/passwd中以bash開頭並且以bash結尾的行,也就是正好包含bash四個字元而沒有其他字元的行
grep [gr]o /etc/passwd #匹配/etc/passwd中含有go或者ro的行
grep no..dy /etc/passwd #匹配/etc/passwd中含有no這兩個字元並且加上任何兩個字元,再接上dy這兩個字元的行
grep liu.*g /etc/passwd #匹配/etc/passwd中含有liu3個字元,加上任意的0個或者多個字元,在繼續g這個字元的行(比如含有liuchunming、liuliang,liug等的行)
grep -E "mail|mailnull" /etc/passwd #/etc/passwd中含有mail或者mailnull的行,注意要使用擴充套件的正則表示式-E選項。
13、grep命令
通常與正則表示式一同使用,關於正則表示式上面已經介紹了。這裡只介紹grep本身的選項的用法。
grep -e mail -e mailnull /etc/passwd #/etc/passwd中含有mail或者mail null的行,使用-E 擴充套件的正則表示式選項也可以達成此效果
grep -v mail /etc/passwd #/etc/passwd中不含有mail或者mail null的行
grep -n -e mail -e mailnull /etc/passwd #/etc/passwd中含有mail或者mail null的行以及行號也打印出來。
grep -i "ab" data.doc #輸出所有含有ab或Ab的字串的行,-i 不區分大小寫(用於單字元)
grep -c "48" data.doc #輸出data.doc文件中含有48字元的行數,與grep "48" data.doc | wc -l同樣效果。