上篇博文爲大家簡單介紹了在Linux中的一些簡單命令以及vi/vim的初步介紹,在此爲大家在介紹一下關於vi/vim的一些操作以及Linux中一些命令的基本操作知識;
vi/vim作爲Linux中的默認編輯器它不僅僅只能編輯一個文本文件,而是能夠同時編輯多個文本文件,在多個文本文件中可以相互轉移,方便進行工作;對多個文本文件進行操作可以有編輯模式以及末行模式兩種。
在vim下創建多個文件:
$vim file1 file2 file3…
在上述情況中創建多個文件需使用下述編輯模式下的調用方法轉換文本文件;
在編輯模式下:
:next(可編輯下一個文件)
:prev(返回上一個編輯文件)
:first(查看或編輯第一個文檔的內容)
:last(查看或編輯最後一個文件)
在vim下創建多個文件分佈在同一個平面:
vim –o|-O file1 file2 file 3
-o:水平顯示文件;
-O:垂直顯示文件;
Ctrl+w:跳過窗口;
#Ctrl+w:跳過多個窗口;
Ctrl+w,s:將一個文件水平分屏顯示;
Ctrl+w,v:將一個文件垂直分屏顯示;
:qa:一次性退出所有編輯窗口;
:wa:保存全部;
在vim進行文本文件編輯時,還可以在vim界面下對shell命令進行交互,在敲擊腳本時可以在vim下調用命令查看等;
跟shell交互(末行模式)
格式::!+命令
例
:!ifconfig(查看虛擬機IP)
:!mkdir 。。。。(執行一次創建目錄的命令)
在將文件保存到所創建的路徑下:
格式::!w 。。。。
例
:w /PATH/TO/SOMEFILES(將文本文件另存在所定路徑下)
:m,nw /PATH/TO/SOMEFILES(保存文本m至n行的內容在所定路徑下)
:m,+nw /PATH/TO/SOMEFILES(保存文本以m行爲起點往下的n行的內容在所定路徑下)
:.,$w /PATH/TO/SOMEFILES(保存文本所有內容在所定路徑下)
shell概述:
UNIX的shell有很多種類,Linux系統繼承了UNIX系統中shell的全部功能,現在默認使用的shell是bash;若需要更換shell則在終端中直接輸入shell名,回車。如註銷當前shell則輸入exit,回車;
shell具有如下突出特點:
①對已有的命令進行適當組合構成新的命令;
②提供文件名擴展字符[],*,^等;
③可以使用shell的內置命令,而勿需建立新的進程;
④允許靈活的使用數據流,通配符,輸入/輸出重定向,管道線等機制;
⑤提供順序,條件,循環等控制流程;
⑥提供在後臺(&)執行的能力;
⑦允許用戶創建,修改命令,命令提示符和其他系統行爲;
⑧提供一個高級命令語言,允許用戶創建從簡單到複雜的程序;
Bash的特性:
一.命令的別名:
用戶可以自定義命令,利用簡單的方式來代替複雜的方式即命令別名的含義;
例如
alias cls=‘clear’(以cls字符串代替clear清空屏幕命令)
注意:需要注意的是,當前所定義的別名只在dangqianshell運行的環境下可以使用,一旦退出shell的連接,再次登陸時就要重新定義別名;但是如果想讓修改的別名永久生效,可以採用修改.bashrc配置文件的方法,其中保存的別名並不會立即生效,只有在重新加載該文件的內容後,纔會生效,且永久生效;
在修改.bashrc文件後如想在當前連接下立刻使用,可以即使加載.bashrc配置文件就可以不用退出連接使用設置的別名即
. .bashrc(在當前的shell當中加載文件的內容)
撤銷別名的命令:
unalias;
unalias NAME;
二.命令歷史(一部分保存在bash歷史緩衝區中,一部分保存在硬盤):
BASH進程會保存其會話中用戶曾經執行過的命令,以方便用戶重複去執行某個命令;通過BASH提供的 歷史命令文件來持久保存執行過的命令,每個用戶都有其自己私有的歷史文件;登陸shell的時候, bash會自動讀取~/.bash_history文件中所記錄的所有命令;
顯示歷史命令:
history命令顯示命令歷史表中的命令,其語法格式是:
history[option][arg...]
$history:命令不帶任何參數時,則history命令會顯示歷史命令清單;
$history 14:最近執行的14條命令;
$history –d 9:刪除第九條命令;
$history –c:清空歷史緩衝區的歷史命令;
重複之前使用的命令:
①上下箭頭,回車執行;
②Ctrl+p(等同於上方向鍵)
③!-1把之前執行過的命令在執行一次;
④!!執行上一次的命令;
重複執行歷史緩衝區的命令:
!number:重複執行從歷史緩衝區的第number個命令執行;
!string:從歷史緩衝區中查找最近一次執行過的以“string開頭的命令;
!?string:從歷史緩衝區中查找最近一次執行的包含字符串的命令,並執行;”
!-n:執行緩衝區倒數第n條;
Ctrl+r:在歷史緩衝區中實施搜索,回車執行即可;
重複使用歷史命令中的一部分:
!$:表示最後一次命令中最後一個參數;
ESC,.:按完ESC再按.可以把最後一次命令的最後一個參數補全;
!^:表示上一個命令的第一個參數;
!:number:表示上一個命令的第number個參數;
! SEQUENCE:NUMBER:表示在歷史緩衝區中第“SEQUENCE”個命令的第NUMBER個參數;
在默認情況下,bash使用用戶主目錄下的文件“.bash_history”來保存命令歷史。但是,用戶也可以通過重新賦值環境變量來改變存放歷史命令的文件。如
HISTSIZE;
HISTFILESIZE(保存歷史的文件的大小);
HISTTIMEFORMAT(歷史時間格式);
HISTCONTROL(歷史命令的記錄方式);
$HISTFILE="/home/mengqc/.myhistory"
命令執行後,歷史命令將存放在上述路徑下;
也可以通過HISTSIZE來修改歷史文件中保留命令的個數;
$HISTSIZE=400
同理,可以修改HISTCONTROL的值
HISTCONTROL:
ignoredups:忽略連續且相同的命令的歷史緩存;
ignorespace:忽略以空白字符開頭的命令;
ignoreboth:以上兩個功能都啓用;
三.快捷鍵
C—>Ctrl
M-->Alt
E-->ESC
DEL-->Backspace
C-l:Ctrl+l,clear,清0;
C-a:Ctrl+a,光標移到開頭;
C-e:Ctrl+e,光標移到編輯行末尾;
C-k:Ctrl+k,刪除光標所在位置至行尾的命令行信息;
C-u:Ctrl+u,刪除光標所在位置至行首的命令行信息;
C-c:Ctrl+c,取消當前命令的執行;
四.命令補全機制
在bash命令行上輸入目錄或文件名時,如果記不清楚完整的目錄名或文件名,則可以使用Tab鍵,Linux就會根據輸入的字母查找以那些字母開頭的目錄或文件,並自動補全;
使用Tab鍵可以完成命令補全如果給出的字符串不能作爲唯一標識,則不予補全;在此敲擊Tab鍵,bash會給出參考列表,如果參考列表中的內容過多則會詢問是否列出這麼多功能;“空格”+tab鍵能把當前工作目錄的所有文件顯示出來;根據提供的參數路徑來進行補全,如果參數沒有任何提示信息,則默認從工作目錄進行查找;
Shell命令的執行過程:
1.shell會根據用戶鍵入回車來判斷用戶的輸入結束
2.shell會將收集到的命令信息,根據空白字符分段(token)
第一個分段被理解爲命令字段;
3.判斷第一個字段是內部命令還是外部命令,如果是內部命令,則直接運行;如果是外部命令, 通過PATH變量所指示的路徑信息,去查找相關位置,以確定是否存在同名文件,如果有,就執 行;否則就報錯;
4.判斷選項是否正確,判斷參數是否正確;
五. Shell的命令行展開特性:
~:bash會自動將其展開爲當前登錄用戶的家目錄;
~STRING:bash會自動將其展開爲以“STRING”爲用戶名的用戶的家目錄;
~+:調用shell變量“pwd”的值;
~-:調用shell變量“OLDPWD”的值;
{}:在花括號中可以填充一個以“,”分割的路徑列表,bash會將其展開爲多個獨立的路徑;
問題:創建a_a,a_b,b_a,b_b目錄
mkdir{a,b}_{b_a}
六.命令的執行結果
任何一個Linux命令都有兩種執行結果,一是命令的正常輸出結果;二是命令執行狀態的返回值;
其一:
``:反向單引號,反引號,可以執行在倒引號裏的所有命令;
$():標準的命令引用格式;
如$ss=$(echo);即可以利用ss代替echo命令;
wc:不加參數選項時,以標準輸入接入,再Ctrl+d退出,顯示行數,字數,字節數等;
-c:只顯示字節數
-l:只顯示行數
-w:只顯示字數
其二:命令執行狀態的返回值;
跟命令執行成功與否相關的返回內容;
保存在bash的一個特殊變量中:$?
RETSTAT=$?將上一個命令的狀態返回值永久保存下來;
0:表示命令執行成功;
1,2,127:bash的內置狀態返回值;
1:表示小問題;
2:嚴重的問題;
127:命令本身出現問題;
3-126,128-255:用戶自定義狀態信息;
七.引用
‘’(單引號):強引用
凡是被單引號引用的內容,bash一律將其視爲普通字符,即便其本身有特殊功能和作用也是如此。但 單引號本身是個例外。
“”:弱引用
被雙引號引用的內容中,有一些特殊字符仍然會保留其特殊含義,比如說$,\,``;其他均作爲普通字符對待;$表示變量替換,``倒引號表示命令替換,反斜線\僅當其後的字符是“$”,“`”,“"”,“\”或換行符之一時,“\”纔是轉義字符。轉義字符告訴shell不要對其後面的那個字符進行特殊處理,只是當作普通字符;
``:倒引號
倒引號括起來的字符串被shell解釋爲命令行,在執行時,shell會先執行該命令行,並以他的標準輸出結果取代整個倒引號部分;
例如:
$echo current directory is `pwd`
$current directory is /home/m
問題:備份/etc/整個目錄的內容到/tmp,要求備份後的文件名爲etc-系統時間;
$cp -a /etc /tmp/etc-"date +%F%T"
[wjq@localhost~]$ echo '(只輸入一個單引號)
>aaa
>dfs
>'
aaa
dfs
八.轉義命令
alias ls=’rm –rf’
當對一些危險命令設置別名時可以通過轉義命令“\”撤銷別名,亦可通過轉義命令對輸入的命令進行換行輸入;
\ls(撤銷別名)
\:轉義字符,讓後面的一個字符失去某種意義;
[wjq@localhost~]$ echo \(這樣可以一行行輸入)
>w \
>w \
>w
w ww
九.Globbing文件名通配
*:匹配任意長度的任意字符,某些特殊位置的“.”不能被匹配,路徑名中的/只能顯示匹配,空也可以匹配;例如,“f*”可以匹配f,fa,f1,模式*f不能匹配.profile而.*file可以;
?:匹配任意單個字符,必須且只有一個字符被匹配,無法匹配空字符;例如,“f?”可以匹配f1,fa等,但不能匹配f,fab;
[]:匹配任意指定範圍內的任意單個字符,必須且只有一個字符被匹配;例如f[abcd]可以匹配fa,fb,fc,fd但不能匹配fab,fac之類的多個字符;
注意:
[a-z]:a,A,b,B,c,C…z
[A-Z]:A,b,B…z,Z
字符集:[::]
這些字符集,如果要用則必須把他放入中括號(通配符)中即兩對括號
[:lower:]表示所有的小寫字母;
[:upper:]表示所有的大寫字母;
[[:lower:]]通配任意單個小寫字母;
[:alpha:]表示所有字母字符;
[:digit:]表示所有的十進制數字;
[:alnum:]表示所以大小寫字母以及十進制數字;
[:space:]表示空白字符;
[:punct:]所有的標點符號;
^:取反
例:ls p[^a]d(不要小寫字母a)
問題:顯示/etc/目錄下,以非字母開頭,且其後跟了一個字母
$ls -a /etc/[^[:alpha:]][a-Z]*
十.輸入出處重定向
在使用計算機的時候,實現某種功能的主體是:程序;
程序=指令+數據;
數據:文件,一切皆文件;
可以用來輸入的設備:文件;鍵盤文件,文件系統中的常規文件,網卡設備,聲卡設備等;
可以用來輸出的設備:文件,顯示器,文件系統中常規文件,網卡設備,聲卡設備等;
每一種程序都會有三種形式的數據流
輸入的數據流:爲程序獲取數據流;默認的輸入數據流的來源叫做鍵盤;
輸出的數據流:將程序處理的數據結果展示給用戶的數據流;默認的輸出數據流的終點是顯示器;
錯誤數據流:將程序無法處理或處理過程中出現問題的結果展示給用戶的數據流;默認的錯誤數據流 的終點是顯示器;
從鍵盤輸入的數據流稱爲標準輸入;
到顯示器上的輸出數據流成爲標準輸出;
到顯示器上的錯誤數據流稱爲標準錯誤輸出,簡稱標準錯誤;
IO重定向:採用非標準設備文件實現的IO操作;
簡單來說:
不是從鍵盤設備完成的數據流輸入就可以稱爲輸入重定向或重定向輸入;
不是到顯示器設備的正確輸出數據流就被稱爲輸出重定向或重定向輸出;
不是到顯示器設備的錯誤輸出數據流就被稱爲錯誤輸出重定向或重定向錯誤輸出;
文件描述符:file Descriptor,FD(Linux用文件的方式來標識標準輸入輸出以及錯誤)
0:標準輸入,stdin
1:標準輸出,stdout
2:標準錯誤,stderr
輸出重定向:
輸出重定向有兩種
一,輸出重定向符“>”,其作用是,把命令的標準輸出重定向到指定文件,覆蓋文件的內容,這樣該命令就不會在屏幕下顯示,而是寫入指定文件;“>”還可以直接創建文件如,>filename,可直接創建文件;
輸出重定向的一般格式:
命令 > 文件
例如
$who > abc
把命令who中輸出重定向到abc文件中,在屏幕下看不到執行who的結果。查看abc文件的內容可以查看到who命令下的內容;
二,輸出附加定向符“>>”,其作用是,把命令的輸出附加到指定文件後面,而該文件原有內容不被破壞;
爲了防止輸出定向符“>”對文件的覆蓋Linux中設定了一個命令,可以防止人們在無意識的情況下造成破壞性的操作;
~]#set–C //開啓防誤覆蓋開關;
在此開關開啓後可以使用“>|”符號繼續覆蓋重定向;
~]#set +C //關閉防誤覆蓋開關;
錯誤重定向:
其作用是,將命令執行系統所產生的錯誤提示輸出到一個文件中;
2>:覆蓋錯誤重定向;
2>>:追加錯誤重定向;
合併標準輸出和標準錯誤輸出重定向:
其作用是既可以輸出標準輸出的值到一個文件,又可以輸出標準錯誤的值到文件;
1)&>,&>>(方法新但不是所有bash都支持)
2)COMMAND>|>> /PATH/to/SOMEFILE 2>&1(&1把錯誤標準輸出也放入之前的標準輸出路徑中)
/dev/null:BlackHole,BitBucket(位桶)
ls/tmp/a.txt &> /dev/null
ls/tmp/a.txt > /dev/null 2>&1(兩者等價)
輸入重定向:
<:唯一輸入重定向符號;(對應路徑的內容輸入到命令進行操作)
<<:Here Document此處文檔;(在這個文檔內當場添加內容,輸入路徑名退出)
<<<:Here String此處字符串;
輸入重定向的一般格式:
命令 < 文件名
tr:具有轉換,刪除的功能;
利用tr命令將小寫字母轉換成大寫字母,將數字刪除等,tr命令不破壞文件內容;
關於tr命令的使用可以結合管道線和輸入輸出重定向操作結合使用
選項:
-d:刪除指定字符串中的內容;
-s:刪除所有重複出現的字符序列,如空格tr -s "\n"
例如:
#cat file | tr -d "Snail" > new_file
這裏,凡是在file文件中出現的'S','n','a','i','l'字符都會被刪除!而不是緊緊刪除出現 的"Snail”字符串。
# cat file | tr -d "\n\t" >new_file
刪除文件file中出現的換行'\n'、製表'\t'字符
[root@localhostwjq]# tr -d '0-9' < /etc/passwd
(刪除0-9的數字)
[root@localhostwjq]# tr 'a-z' 'A-Z' < /etc/passwd
(將小寫轉換成大寫)
#cat file | tr -s "\n" > new_file
刪除空行
[wjq@localhost~]$ wc << /etc/onit
>hello
>everyone
>/etc/onit(以此爲結尾)
2 2 15
[wjq@localhost~]$
[root@localhostwjq]# cat > /etc/aqq <<EOF
>hell
>aaa
>EOF(以此結束)
[root@localhostwjq]# cat /etc/aqq
hell
aaa
十一.管道(使用管道的命令必須要有標準輸出,沒有標準輸出就沒有下一個命令的輸入數據流)
前面一個命令的輸出結果作爲後面一個命令的輸入;
|:
COMMAND|COMMAND2|COMMAND3|…
注意:所有的用於管道連接的命令,都應該是能夠有標註輸出數據流的命令;
head–n 9 /etc/passwd |tail –n 1
tee:保存在文件裏,同時標準輸出;
例
[root@localhostwjq]# echo hhhh | tee /tmp/tee.out
hhhh //先從echo輸出,再保存在文件中
[root@localhostwjq]# cat /tmp/tee.out
hhhh
[root@localhostwjq]#
[root@localhostwjq]# echo "wujunqi,wujunqi2" | tr ',' '\n'
wujunqi
wujunqi2
[root@localhostwjq]#