1.tar指令
功能 | 描述 |
---|---|
-A | 将一個tar歸檔檔案追加到另一個已有tar歸檔檔案 |
-c | 建立一個新的tar歸檔檔案 |
-r | 追加檔案到已由tar歸檔檔案的末尾 |
-t | 列出已有tar歸檔檔案的内容 |
-u | 将比tar歸檔檔案中已有的同名檔案新的檔案追加到該tar歸檔檔案 |
-x | 從已有tar歸檔檔案中提取檔案 |
選項 | 描述 |
---|---|
-C | dir 切換到指定目錄 |
-f | file 輸出結果到檔案或裝置 |
-j | 将輸出重定向給bzip2指令來壓縮内容 |
-p | 保留所有檔案權限 |
-v | 在處理檔案時顯示檔案 |
-z | 将輸出重定向給gzip指令來壓縮内容 |
2.Linux目錄
路徑 | 描述 |
---|---|
/ | 虛拟目錄根目錄 |
/bin | 二進制檔案目錄,存放使用者級的GUN工具 |
/boot | 啟動目錄,存放啟動檔案 |
/dev | 裝置目錄,Linux在此建立裝置節點 |
/etc | 系統配置檔案目錄 |
/home | 主目錄,Linux在此建立使用者目錄 |
/lib | 庫目錄,存放系統和應用程式的庫檔案 |
/media | 媒體目錄,可移動媒體裝置的常用挂載點 |
/mnt | 挂載目錄,可移動裝置的常用挂載點 |
/opt | 可選目錄,常用于存放第三方軟體包和資料檔案 |
/proc | 程序目錄,存放現有硬體及目前程序的資訊 |
/root | root使用者的主目錄 |
/sbin | 系統二進制目錄,存放GUN管理者級工具 |
/run | 運作目錄,存放系統運作時的運作時資料 |
/srv | 服務目錄,存放本地服務的相關檔案 |
/sys | 系統目錄,存放系統硬體資訊的相關檔案 |
/tmp | 臨時目錄,可以在該目錄中建立和删除臨時工作檔案 |
/usr | 使用者二進制目錄,存放使用者級GUN工具和資料檔案 |
/var | 可變目錄,用于存儲經常變化的檔案,如日志檔案 |
3.vim編輯器操作
兩種操作模式:普通模式 、插入模式(按 i 鍵進入)。按ESC鍵即可退出插入模式,回到普通模式
【普通模式】下,編輯資料指令:
指令 | 描述 |
---|---|
x | 删除目前光标所在位置的字元 |
dd | 删除目前光标所在的行 |
dw | 删除目前光标所在位置的單詞 |
d$ | 删除目前光标所在位置至行尾的内容 |
J | 删除目前光标所在行行尾的換行符(拼接行) |
u | 撤銷前一編輯指令 |
a | 在目前光标後追加資料 |
A | 在目前光标所在行行尾追擊資料 |
r char | 用char替換目前光标所在位置的當個字元 |
R char | 用text覆寫目前光标所在位置的資料,直到按下ESC鍵 |
普通模式下,複制與粘貼操作:
指令 | 描述 |
---|---|
p | 将文本插入到光标所在行之後(粘貼) |
yw | 複制一個單詞 |
y$ | 複制到行尾 |
v | 按下v鍵進入可視模式,移動光标時高亮顯示文本 |
y | 激活複制指令(複制) |
【普通模式】下,按 冒号(:)鍵進入指令行模式,在該模式有一下指令,可以講緩存區的資料儲存到檔案并退出vim:
指令 | 描述 |
---|---|
q | 如果未修改緩存區的資料,退出 |
q! | 取消所有對緩存區資料的修改并退出 |
w filename | 将緩存區資料儲存到另一個檔案 |
wq | 将緩存區資料儲存到檔案并退出 |
在【指令行模式】下,查找與替換:
按下 / 鍵,輸入要查找的内容;
繼續查找同一内容,按下 / 鍵,然後按Enter鍵,使用 n 鍵,表示下一個
替換指令格式:(編輯器會跳到old第一次出現的地方,用new來替換)
:s/old/new/
舉例 | 描述 |
---|---|
: s/old/new/g | 替換一行中所有的old |
:n,ms/old/new/g | 替換行号n和m之間的所有old |
:%s/old/new/g | 替換整個檔案中所有的old |
:%s/old/new/gc | 替換整個檔案中的所有old,但在每次出現時提示 |
4.搜尋資料(grep)
指令行格式:grep [option] pattern [file]
選項 | 描述 |
---|---|
-v | 進行反向搜尋(輸出不比對該模式的行) |
-n | 顯示比對模式的行所在的行号 |
-C | 隻需知道有多少行含有比對模式 |
-e | 如果要指定多個比對模式,可用此選項來指定每一個模式 |
eg:$ grep -e t -e f file1 #輸出含有字元t或f的所有行
用正規表達式方式為:$ grep [tf] file1 #輸出含有字元t或f的所有行
附加:
ls -lR | grep '^-' | wc -l # 檔案夾套檔案夾時,查找檔案夾下檔案個數
ls -l | grep '^-' | wc -l # 單個檔案夾時,查找檔案夾下檔案個數
5.檢視檔案内容指令
5.1 檢視檔案類型指令
file指令可檢視檔案是什麼類型
5.2 檢視整個檔案指令
1)cat 指令
選項 | 描述 |
---|---|
-n | 給所有的行加上行号 |
-b | 隻給有文本的行加上行号 |
-T | 不顯示制表符(用 ^I 字元替換制表符) |
2)more 指令,顯示每頁資料之後停下,逐行浏覽,按q 鍵退出。
從第 n 行開始顯示,指令為:$ more +n /etc/local.log
3)less 指令,支援上下滾動檢視内容
5.3 檢視部分檔案指令
1)tail 指令
顯示檔案最後幾行的内容,預設情況下顯示檔案的末尾10行。
選項 | 描述 |
---|---|
-n | 修改所顯示的行數。$ tail -n 2 file 顯示file檔案最後2行 |
-f | 它允許在其他程序使用該檔案時檢視檔案的内容,tail指令會保持活動狀态并不斷的顯示添加到該檔案的内容(可用于實時監控系統日志)。 |
2)head 指令
顯示檔案開頭幾行的内容,預設情況會顯示檔案前10行。
選項 | 描述 |
---|---|
-n | 修改所要顯示的行數 |
6.檔案權限
$ls -l
drwx------ 4 soldier staff 128 8 21 13:35 Desktop
- 每一行都包含如下資訊:檔案類型、檔案權限、檔案硬連結總數、屬主使用者名、屬組組名、檔案大小、檔案上次修改時間、檔案名或目錄名。
1)檔案類型,主要常見的有以下幾種:
_:檔案 d:目錄 l;連結
2)檔案權限,由三組字元編碼組成,每一組定義了3種通路權限:
r 可讀 w 可寫 x 可執行
注:若沒有某種權限,則在該權限位會出現單下劃線(‘-’)代替,這三組權限分别對應對象的三個安全級别:對象的屬主、對象的屬組、其他使用者。
7.改變檔案權限(chmod)
chmod指令用來改變檔案和目錄的安全性設定,格式如下:
[ugoa...][+-=][rwxXstugo...]
1)第一組字元定義權限作用的對象:
u代表使用者、g代表組、o代表其他使用者、a代表上述所有
2)第二組:
+ 增權重限、- 移除權限、= 将權限設定成後面的值
3)第三組符号代表作用到設定上的權限:
權限 | 描述 |
---|---|
r | 可讀 |
w | 可寫 |
x | 可執行 |
X | 如果對象是目錄或它已有執行權限,賦予執行權限 |
s | 運作時重新設定UID或GID |
t | 保留檔案或目錄 |
u | 将權限設定為跟屬主一樣 |
g | 将權限設定為跟屬組一樣 |
o | 将權限設定為跟其他使用者一樣 |
8.預設檔案權限
- umask指令用來設定所建立檔案和目錄的預設權限,對檔案全權限的值是666(rw_rw_rw_),對目錄全權限的值是777(rwxrwxrwx).
Linux檔案權限碼
權限 | 二進制值 | 八進制值 | 描述 |
---|---|---|---|
--- | 000 | 沒有任何權限 | |
--x | 001 | 1 | 隻有執行權限 |
-w- | 010 | 2 | 隻有寫入權限 |
-wx | 011 | 3 | 有寫入和執行權限 |
r-- | 100 | 4 | 隻有讀取權限 |
r-x | 101 | 5 | 有讀取和執行權限 |
rw- | 110 | 6 | 有讀取和寫入權限 |
rwx | 111 | 7 | 有全部權限 |
$ umask
0022 #預設的umask值為0022。對應八進制,檔案權限為644,目錄權限為755.
$
知道umask值,計算權限的方法為:檔案目錄的全權限值減去umask值
對于檔案:666-022=644 對應權限為:rw-r--r--
對于目錄:777-022=755 對應權限為:rwxr-xr-x
9.排序資料(sort指令)
選項 | 描述 |
---|---|
-n | 把數字識别成數值,而不是字元,按數值排序 |
-M | 識别三字元的月份名,并相應地排序 |
-r | 反序排序(升序變降序) |
-o | 将排序結果寫出到指定檔案中 |
注:預設情況下,sort指令會把數字識别成字元來執行标準的字元排序
$ sort -t ':' -k 3 -n /etc/passwd
指令意思為: 對密碼檔案/etc/passwd根據以冒号(:)為分隔符,指定使用者ID為排序字段。
. -t選項:指定一個用來區分鍵位置的字元
. -k選項:--key=POS1[,POS2] 排序從POS1位置開始,如果指定了POS2的話,到POS2位置結束
. -n選項:按字元串數值來排序(并不轉換為浮點數)
. -r選項:反序排序(升序變降序)
10.使用df指令
- 檢視所有已挂載磁盤的使用情況指令輸出如下:
- 裝置的裝置檔案位置、能容納多少個1024位元組大小的塊、已用了多少個1024位元組大小的塊、還有多少個1024位元組的塊可用、已用空間所占的比例、裝置挂載到了哪個挂載點上
選項 | 描述 |
---|---|
-h | 格式輸出大小,用M替代兆位元組、用G代替吉位元組 |
$ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1 233Gi 59Gi 172Gi 26% 1023198 9223372036853752609 0% /
devfs 186Ki 186Ki 0Bi 100% 646 0 100% /dev
/dev/disk1s4 233Gi 2.0Gi 172Gi 2% 2 9223372036854775805 0% /private/var/vm
map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home
11.指令替換
- 兩種方式将指令輸出賦給變量:
- 反引号字元(` `)和 $( )格式
testing=`date`
testing=$(date)
注:指派等号和指令替換字元之間沒有空格
12.Linux環境變量
- 1)全局環境變量,可使用env或printenv指令檢視全局變量(輸出結果無序),使用printenv指令,檢視個别環境變量的值,不用加$符号。
- 2)局部環境變量,set指令會顯示為某個特定程序設定的所有環境變量,包括局部變量、全局變量、使用者定義變量(輸出結果已排序)。
- 3)删除環境變量,unset指令,可以删除已存在的環境變量,在引用變量時,不用加$符号。
- 4)設定全局環境變量:
- 先建立一個局部變量,然後通過 export指令,導出到全局變量。(注:修改子shell中的全局變量并不會影響到父shell中的該變量的值)。
13.處理使用者輸入
- 1)讀取參數,位置參數變量是标準的數字,$0是程式名,$1 是第一個參數,$2 是第二個參數,依此類推,直到第9個參數$9.(如果參數不止9個,則在第9個參數後,在變量數字周圍加上花括号,如:${10},表示第10個參數)。
- 如果要輸入多個參數,則每個參數都要用空格分開;
- 要在參數值中包含空格,必須使用引号(引号隻表明資料的起止位置)。
- 2)讀取腳本名
- 可用$0參數擷取shell在指令行啟動的腳本名。
- basename $0指令會傳回不含路徑的腳本名,例:name=$(basename $0)
- 3)參數數量統計
- 特殊變量$# 含有腳本運作時攜帶的指令行參數的個數;
- 擷取指令行中最後一個參數,可以使用${!#}。當指令行沒有任何參數時,${!#}變量會傳回指令行用到的腳本名。
- 4)抓取所有參數資料
- $* 變量會将指令行上的所有參數當成一個單詞存儲,視為一個整體
- [email protected] 變量會将指令行上的所有參數當成同一個字元串中的多個獨立的單詞(可通過for指令得到每個參數)
14.輸入與輸出
Linux标準檔案描述符
檔案描述符 | 縮寫 | 描述 |
---|---|---|
STDIN | 标準輸入 | |
1 | STDOUT | 标準輸出 |
2 | STDERR | 标準錯誤 |
1)重定向錯誤
- 隻重定向錯誤,将該檔案描述符放在重定向符号前,此方法shell隻會重定向錯誤資訊,而非普通資料
$ ls tests badtest test2 2> test5
tests
$ cat test5
ls: badtest: No such file or directory
ls: test2: No such file or directory
- 重定向錯誤和資料,必須使用兩個重定向符号,在符号前放上待重定向資料所對應的檔案描述符,然後指向用于儲存資料的輸出檔案
$ ls tests badtest test2 2> test5 1> test6
$ cat test5
ls: badtest: No such file or directory
ls: test2: No such file or directory
$ cat test6
tests
2)臨時重定向
- 在重定向到檔案描述符時,必須在檔案描述符之前,加上 &符号
$ echo "This is an error" >&2
3)永久重定向
- 用 exec指令 告知shell在腳本執行期間重定向某個特定的檔案描述符。
$ cat test7.sh
#!/bin/bash
exec 2> testerror
echo the line 1
echo the line 2 >&2
exec 1> testout
echo the line 3
echo the line 4
$
$ ./test7.sh
the line 1
$ cat testerror
the line 2
$cat testout
the line 3
the line 4
4)建立自己的檔案描述符
- 在 shell中最多可以有9個打開的檔案描述符,其中6個從3~8的檔案描述符可以用作輸入或輸出重定向。
- 關閉建立的檔案描述符:将它重定向到特殊符号 &- ,如 exec 3>&-(即可關閉檔案描述符3)
5)在腳本中重定向輸入
- exec指令允許将STDIN重定向到Linux系統的檔案中: exec 0 < testfile,這條指令,告訴shell應該從檔案testfile中擷取輸入,而不是STDIN。
$ cat test12.sh
#!/bin/bash
exec 0 < testfile
count=1
while read line:
do
echo "Line #$count : $value"
count=$[ $count+1 ]
done
$./test12.sh
Line #1 : This is the first line
Line #2 : This is the second line
15.擷取使用者輸入
1)讀取(read指令)
- read指令,加【-p選項】允許直接在read指令行指定變量。當在read指令行中不指定變量時,則read指令會将它收到的任何資料都放進特殊環境【變量REPLY】中;
- echo指令,加【-n選項】,不會在字元串末尾輸出換行符,允許使用者緊跟其後輸入資料。
#!/bin/bash
echo -n "Enter your age:"
read age
echo "Your age is $age"
指定變量(一個參數):
#!/bin/bash
read -p "Enter your age:" age
echo "Your age is $age"
指定變量(多個變量,用空格分開):
#!/bin/bash
read -p "Enter your name and age :" name age
echo "Your name is $name , age is $age"
不指定變量:
#!/bin/bash
read -p "Enter your name :"
echo "Hello $REPLY,welcome to China"
2)輸入逾時(-t選項)
- 【-t選項】指定了read指令等待輸入的秒數,當計時器過期後,read指令會傳回一個非零的退出狀态碼
#!/bin/bash
if read -t 5 -p "Enter your name :" name
then
echo "Your name is $name"
else
echo "Sorry ,to slow"
fi
3)限制輸入字元數(-n加字元個數)
- 【-n選項】結合數字一起使用,告訴 shell 會在接受指定個數字元後推出。
#!/bin/bash
read -n1 -p "Do you want to continue [Y/N] :" answer
case $answer in
Y | y)
echo "fine ,continue on ...";;
N | n)
echo "OK goodbye"
exit;;
esac
4) 隐藏方式讀取(-s選項)
- 【-s選項】可以避免在read指令中輸入的資料出現在顯示器上(實際上,隻是read指令将文本顔色設定成背景色一樣)
5)從檔案中讀取
- 每次調用read指令,都會從檔案中讀取一行,當檔案中沒有内容時,read指令會退出并傳回非零狀态碼
#!/bin/bash
count=1
cat tests | while read line
do
echo "Line $count :$line"
count=$[ $count+1 ]
done
16.建立臨時目錄,臨時檔案
- 建立臨時檔案(目前目錄):mktemp 檔案名稱.XXXXXX (此指令傳回:檔案名)
- 建立臨時檔案(在系統臨時目錄): mktemp -t 檔案名稱.XXXXXX (此指令傳回:用來建立臨時檔案的全路徑)
- 建立臨時目錄:mktemp -d 目錄名.XXXXXX
$ cat test21
#!/bin/bash
#建立臨時目錄tempdir
tempdir=$(mktemp -d dir.XXXXXX)
#建立臨時檔案tempfile1
cd $tempdir
tempfile1=$(mktemp temp.XXXXXX)
#建立臨時檔案tempfile2
tempfile2=$(mktemp temp.XXXXXX)
exec 7>$tempfile1 #自定義輸出重定向檔案描述符7
exec 8>$tempfile2 #自定義輸出重定向檔案描述符8
echo "Sending data to directory $tempdir"
echo "This is a test line of data for $tempfile1" >&7 #臨時輸出重定向到檔案描述符7
echo "This is a test line of data for $tempfile2" >&8 #臨時輸出重定向到檔案描述符8
注:此腳本在目前目錄建立了一個臨時目錄,然後cd指令切換進此目錄,并建立兩個臨時檔案,之後這兩個檔案被配置設定給檔案描述符,用來存儲腳本的輸出。
17.連結檔案
- 隻能對處于同一存儲媒體的檔案建立硬連結
- 在不同存儲媒體的檔案之間建立連結,隻可以建立符号連結
18.readlink指令
$ readlink -f /usr/bin/vi
-f選項:能夠檢視連結檔案的最終目标
19.使用者變量
- 使用等号(=)将值賦給使用者變量,在變量、等号和值之間不能出現空格
20.wc指令
- wc指令可以對資料中的文本進行計數,預設情況下會輸出三個值:
- 文本的行數
- 文本的詞數
- 文本的位元組數
21.在腳本中使用bc
- 格式一:variable=$(echo “options;expression” | bc)
- options:可以設定變量
- expression: 定義通過bc執行的數學表達式
例:var1=$(echo “scale=4;3.44/5” | bc)
scale=4指保留四位小數,3.44除以5,保留四位小數
- 格式二:EOF文本字元串辨別了内聯重定向資料的起止
variable=$(bc << EOF
>options
>statements
>expressions
>EOF)
var1=10.33
var2=45.67
var3=33.2
var4=67
var5=$(bc << EOF
>scale=4
>a1=$( $var1 * $var2 )
>a2=$( $var3 * $var4 )
>a1 + a2
>EOF)
echo The final answer for this mess is $var5
22.Linux退出狀态碼
狀态碼 | 描述 |
---|---|
指令成功結束 | |
1 | 一般性未知錯誤 |
2 | 不适合的shell指令 |
126 | 指令不可執行 |
127 | 沒找到指令 |
128 | 無效的退出參數 |
128+x | 與Linux信号x相關的嚴重錯誤 |
130 | 通過Ctrl+C終止的指令 |
255 | 正常範圍之外的退出狀态碼 |