⑴ linux shell中 ~ 符號代表什麼
shell命令中 代表用戶的家目錄 使用cd ~ 或者cd 可以轉到這個目錄
在bash shell awk命令中,~代表匹配正則表達式,例:awk 『$0 ~ /.*/ {print}』 test.txt
⑵ Linux shell 中單引號字元串裡面有單引號字元怎麼辦
Linux shell 中單引號字元串裡面有單引號字元解決:
$echo"mocha。reporter('spec')"|sed"s/'spec'/'json'/"
mocha.reporter('json')
有單引號的情況就用雙引號唄
$echo"mocha.reporter('spec')"|sed$'s/'spec'/'json'/'
mocha.reporter('json')
或者也可以這樣、加個$讓bash轉義
控制字元
轉義字元不屬於控制字元;控制字元也不屬於轉義字元。如果控制字元的定義是非圖形的字元,或者對輸出設備(列印機、文本終端)有特殊意義的字元,那麼針對這些設備的轉義字元也是控制字元。但是程序設計用的轉義字元是圖形字元,因此它們不是控制字元。相反地,大多數ASCII控制字元單獨都具有控制功能,因此它們不是轉義字元。
⑶ linux shell中'""和`的區別
和現在的開發語言一樣,語法上有些差異!
三種主要的 Shell 與其分身
在大部份的UNIX系統,三種著名且廣被支持的shell 是Bourne shell(AT&T shell,在 Linux 下是BASH)、C shell(Berkeley shell,在 Linux 下是TCSH)和 Korn shell(Bourne shell的超集)。這三種 shell 在交談(interactive)模式下的表現相當類似,但作為命令文件語言時,在語法和執行效率上就有些不同了。
Bourne shell 是標準的 UNIX shell,以前常被用來做為管理系統之用。大部份的系統管理命令文件,例如 rc start、stop 與shutdown 都是Bourne shell 的命令檔,且在單一使用者模式(single user mode)下以 root 簽入時它常被系統管理者使用。Bourne shell 是由 AT&T 發展的,以簡潔、快速著名。 Bourne shell 提示符號的默認值是 $。
C shell 是柏克萊大學(Berkeley)所開發的,且加入了一些新特性,如命令列歷程(history)、別名(alias)、內建算術、檔名完成(filename completion)、和工作控制(job control)。對於常在交談模式下執行 shell 的使用者而言,他們較喜愛使用 C shell;但對於系統管理者而言,則較偏好以 Bourne shell 來做命令檔,因為 Bourne shell 命令檔比 C shell 命令檔來的簡單及快速。C shell 提示符號的默認值是 %。
Korn shell 是Bourne shell 的超集(superset),由 AT&T 的 David Korn 所開發。它增加了一些特色,比 C shell 更為先進。Korn shell 的特色包括了可編輯的歷程、別名、函式、正規表達式萬用字元(regular expression wildcard)、內建算術、工作控制(job control)、共作處理(coprocessing)、和特殊的除錯功能。Bourne shell 幾乎和 Korn shell 完全向上兼容(upward compatible),所以在 Bourne shell 下開發的程序仍能在 Korn shell 上執行。Korn shell 提示符號的默認值也是 $。在 Linux 系統使用的 Korn shell 叫做 pdksh,它是指 Public Domain Korn Shell。
除了執行效率稍差外,Korn shell 在許多方面都比 Bourne shell 為佳;但是,若將 Korn shell 與 C shell 相比就很困難,因為二者在許多方面都各有所長,就效率和容易使用上看,Korn shell 是優於 C shell,相信許多使用者對於 C Shell 的執行效率都有負面的印象。
在shell 的語法方面,Korn shell 是比較接近一般程序語言,而且它具有子程序的功能及提供較多的資料型態。至於 Bourne shell,它所擁有的資料型態是三種 shell 中最少的,僅提供字元串變數和布爾型態。在整體考量下 Korn shell 是三者中表現最佳者,其次為 C shell,最後才是 Bourne shell,但是在實際使用中仍有其它應列入考慮的因素,如速度是最重要的選擇時,很可能應該採用 Bourne shell,因它是最基本的 shell,執行的速度最快。
作者: benny_feng 發布日期: 2006-10-17
tcsh 是近幾年崛起的一個軟體(Linux 下的C shell 其實就是使用 tcsh)執行,它雖然不是UNIX 的標准配備,但是從許多地方您都可以下載到它。如果您是 C shell 的擁護者,筆者建議不妨試試 tcsh,因為您至少可以將它當作是 C shell 來使用。如果您願意花點時間學習,您還可以享受許多它新增的優越功能,例如:
1. tcsh 提供了一個命令列(command line)編輯程序。
2. 提供了命令列補全功能。
3. 提供了拼字更正功能。它能夠自動檢測並且更正在命令列拼錯的命令或是單字。
4. 危險命令偵測並提醒的功能,避免您一個不小心執行了rm* 這種殺傷力極大的命令。
5. 提供常用命令的快捷方式(shortcut)。
bash 對 Bourne shell 是向下兼容(backward compatible),並融入許多C shell 與Korn shell 的功能。這些功能其實 C shell(當然也包括了tcsh)都有,只是過去 Bourne shell 都未支持。以下筆者將介紹 bash 六點重要的改進(詳細的使用說明筆者會在以後的章節介紹):
1. 工作控制(job contorl)。bash 支持了關於工作的訊號與指令,本章稍後會提及。
2. 別名功能(aliases)。alias 命令是用來為一個命令建立另一個名稱,它的運作就像一個宏,展開成為它所代表的命令。別名並不會替代掉命令的名稱,它只是賦予那個命令另一個名字。
3. 命令歷程(command history)。BASH shell 加入了C shell 所提供的命令歷程功能,它以 history 工具程序記錄了最近您執行過的命令。命令是由 1 開始編號,默認值為500。history 工具程序是一種短期記憶,記錄您最近所執行的命令。要看看這些命令,您可以在命令列鍵入 history,如此將會顯示最近執行過之命令的清單,並在前方加上編號。
這些命令在技術上每個都稱為一個事件。事件描述的是一個已經採取的行動(已經被執行的命令)。事件是依照執行的順序而編號,越近的事件其編號碼越大,這些事件都是以它的編號或命令的開頭字元來辨認的。history 工具程序讓您參照一個先前發生過的事件,將它放在命令列上並允許您執行它。最簡單的方法是用上下鍵一次放一個歷程事件在您的命令列上;您並不需要先用 history 顯示清單。按一次向上鍵會將最後一個歷程事件放在您的命令列上,再按一次會放入下一個歷程事件。按向下鍵則會將前一個事件放在命令列上。
⑷ Linux系統shell工具列印輸出
Linux系統shell工具列印輸出
shell腳本都是以#!/bin/bash開頭;這是固定的寫法,其中/bin/bash是bash命令的路徑。那麼Linux系統shell工具如何列印輸出呢?跟我一起來看看吧!
一般都會通過chmod授予shell腳本的可執行許可權。
在shell腳本中的列印輸出通常會有echo和printf兩種,前者會自動換行。
在shell中如果用雙引號("")作為列印輸出的內容時,如果雙引號中有特殊字元需要在特殊字元前加上轉義字元,當然也可以使用單引號或者不使用引號直接輸出,使用單引號或者不使用就不需要用到轉義字元。
格式替代符
有一些常用的格式替代符會經常在列印輸出中被用到,格式替代符只能用在printf輸出中。
%-5s:表示5個字元寬度,其中的-表示左對齊
%-4.2f:其中的f表示浮點型,4.2代表長度為4個字元且小數點2位,如果小數點超過2會進行四捨五入,-表示左對齊。
整形:
%d:整數的參數會被轉成一有符號的十進制數字
%u:整數的參數會被轉成一無符號的十進制數字
%o:整數的參數會被轉成一無符號的八進制數字
%x:整數的參數會被轉成一無符號的十六進制數字,並以小寫abcdef表示
%X:整數的參數會被轉成一無符號的十六進制數字,並以大寫ABCDEF表示
浮點型數:
%fdouble型的參數會被轉成十進制數字,默認取小數點以下六位,四捨五入
%edouble型的參數以指數形式列印,有一個數字會在小數點前,六位數字在小數點後,而在指數部分會以小寫的e來表示.
%E與%e作用相同,唯一區別是指數部分將以大寫的'E來表示.
%gdouble型的參數會自動選擇以%f或%e的格式來列印,其標準是根據欲列印的數值及所設置的有效位數來決定.
%G與%g作用相同,唯一區別在以指數形態列印時會選擇%E格式.
字元及字元串:
%c讀字元串的第一個字元
%s輸出指定寬度的字元內容.
%p如果是參數是"void*"型指針則使用十六進制格式顯示
列印輸出
在寫腳本的時候更多的會使用echo作為列印輸出,且習慣性的會使用雙引號。
echo
[root@localhosttmp]#echo"helloword"
helloword
printf
默認printf是不換行的
[root@localhosttmp]#printf"helloword"
helloword[root@localhosttmp]#
需要換行加上 參數
[root@localhosttmp]#printf"helloword "
helloword
[root@localhosttmp]#
編寫shell腳本
vimscrip.sh
#!/bin/bash
printf"%-5s%-10s%-4s "NoNameMark;
printf"%-5s%-10s%-4.2f "1aaa10.111;
printf"%-5s%-10s%-4.2f "2bbb20.146;
授予腳本執行許可權:chmo+xscrip.sh
如果使用echo就不能用格式替代符
#!/bin/bash
echoNoNameMark;
echo1aaa10.111;
echo2bbb20.146;
注意事項
在echo,printf中使用-e,-n參數時,-e,-n應該出現在命令行其它字元之前。
-e:如果要在echo的雙引號使用轉義序列作為參數得需要使用-e參數
-n:忽略末尾的換行符
不使用-e參數
[root@localhosttmp]#echo"1 2"
1 2
使用-e參數
[root@localhosttmp]#echo-e"1 2"
轉義序列:
/n:換行
/t:tab鍵
彩色輸出
字體顏色包括:0=重置,30=黑色,31=紅色,32=綠色,33=黃色,34=藍色,35=洋紅,36=青色,37=白色
背景顏色包括:0=重置,40=黑色,41=紅色,42=綠色,43=黃色,44=藍色,45=洋紅,46=青色,47=白色
echo-e"e[1;32mhelloworde[0m"
e[1;32m:將字體顏色設為綠色,e[0m:將顏色重置
;⑸ Linux Shell 腳本編程最佳實踐
IT路邊社
前言
與其它的編碼規范一樣,這里所討論的不僅僅是編碼格式美不美觀的問題, 同時也討論一些約定及編碼標准。這份文檔主要側重於我們所普遍遵循的規則,對於那些不是明確強制要求的,我們盡量避免提供意見。
編碼規范對於程序員而言尤為重要,有以下幾個原因:
本文檔中的准則致力於最大限度達到以下原則:
盡管本文檔涵蓋了許多基礎知識,但應注意的是,沒有編碼規范可以為我們回答所有問題,開發人員始終需要再編寫完代碼後,對上述原則做出正確的判斷。
注 :未明確指明的則默認為必須(Mandatory)
主要參考如下文檔:
僅建議Shell用作相對簡單的實用工具或者包裝腳本。因此單個shell腳本內容不宜太過復雜。
在選擇何時使用shell腳本時時應遵循以下原則:
可執行文件不建議有擴展名,庫文件必須使用 .sh 作為擴展名,且應是不可執行的。
執行一個程序時,無需知道其編寫語言,且shell腳本並不要求具有擴展名,所以更傾向可執行文件沒有擴展名。
而庫文件知道其編寫語言十分重要,使用 .sh 作為特定語言後綴的擴展名,可以和其他語言編寫的庫文件加以區分。
文件名要求全部小寫, 可以包含下劃線 _ 或連字元 - , 建議可執行文件使用連字元,庫文件使用下劃線。
正例:
反例:
源文件編碼格式為UTF-8。避免不同操作系統對文件換行處理的方式不同,一律使用 LF 。
每行最多不超過120個字元。每行代碼最大長度限制的根本原因是過長的行會導致閱讀障礙,使得縮進失效。
除了以下兩種情況例外:
如出現長度必須超過120個字元的字元串,應盡量使用here document或者嵌入的換行符等合適的方法使其變短。
示例:
除了在行結束使用換行符,空格是源文件中唯一允許出現的空白字元。
對從來沒有用到的或者被注釋的方法、變數等要堅決從代碼中清理出去,避免過多垃圾造成干擾。
Bash 是唯一被允許使用的可執行腳本shell。
可執行文件必須以 #!/bin/bash 開始。請使用 set 來設置shell的選項,使得用 bash echo "Process $: Done making $$$."
# 示例7:命令參數及路徑不需要引號 grep -li Hugo /dev/ "$1"
# 示例8:常規變數用雙引號,ccs可能為空的特殊情況可不用引號 git send-email --to "${reviewers}" ${ccs:+"--cc" "${ccs}"}
# 示例9:正則用單引號,$1可能為空的特殊情況可不用引號 grep -cP '([Ss]pecial||?characters*) ${1:+"$1"}
# 示例10:位置參數傳遞推薦帶引號的"$@",所有參數作為單字元串傳遞用帶引號的"$*" # content of t.sh func_t { echo num: $# echo args: 1:$1 2:$2 3:$3 }
func_t "$@" func_t "$*" # 當執行 ./t.sh a b c 時輸出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:
使用 $(command) 而不是反引號。
因反引號如果要嵌套則要求用反斜杠轉義內部的反引號。而 $(command) 形式的嵌套無需轉義,且可讀性更高。
正例:
反例:
條件測試
使用 [[ ... ]] ,而不是 [ , test , 和 /usr/bin/[ 。
因為在 [[ 和 ]] 之間不會出現路徑擴展或單詞切分,所以使用 [[ ... ]] 能夠減少犯錯。且 [[ ... ]] 支持正則表達式匹配,而 [ ... ] 不支持。參考以下示例:
盡可能使用變數引用,而非字元串過濾。
Bash可以很好的處理空字元串測試,請使用空/非空字元串測試方法,而不是過濾字元,讓代碼具有更高的可讀性。正例:
反例:
正例:
反例:
正例:
反例:
文件名擴展
當進行文件名的通配符擴展時,請指定明確的路徑。
當目錄中有特殊文件名如以 - 開頭的文件時,使用帶路徑的擴展通配符 ./* 比不帶路徑的 * 要安全很多。
應該避免使用eval。
Eval在用於分配變數時會修改輸入內容,但設置變數的同時並不能檢查這些變數是什麼。反例:
請使用進程替換或者for循環,而不是通過管道連接while循環。
這是因為在管道之後的while循環中,命令是在一個子shell中運行的,因此對變數的修改是不能傳遞給父shell的。
這種管道連接while循環中的隱式子shell使得bug定位非常困難。反例:
如果你確定輸入中不包含空格或者其他特殊符號(通常不是來自用戶輸入),則可以用for循環代替。例如:
使用進程替換可實現重定向輸出,但是請將命令放入顯式子 shell,而非 while 循環創建的隱式子 shell。例如:
總是檢查返回值,且提供有用的返回值。
對於非管道命令,使用 $? 或直接通過 if 語句來檢查以保持其簡潔。
例如:
當內建命令可以完成相同的任務時,在shell內建命令和調用外部命令之間,應盡量選擇內建命令。
因內建命令相比外部命令而言會產生更少的依賴,且多數情況調用內建命令比調用外部命令可以獲得更好的性能(通常外部命令會產生額外的進程開銷)。
正例:
反例:
載入外部庫文件不建議用使用.,建議使用source,已提升可閱讀性。正例:
反例:
除非必要情況,盡量使用單個命令及其參數組合來完成一項任務,而非多個命令加上管道的不必要組合。常見的不建議的用法例如:cat和grep連用過濾字元串; cat和wc連用統計行數; grep和wc連用統計行數等。
正例:
除特殊情況外,幾乎所有函數都不應該使用exit直接退出腳本,而應該使用return進行返回,以便後續邏輯中可以對錯誤進行處理。正例:
反例:
推薦以下工具幫助我們進行代碼的規范:
原文鏈接:http://itxx00.github.io/blog/2020/01/03/shell-standards/
獲取更多的面試題、腳本等運維資料點擊: 運維知識社區 獲取
腳本之---簡訊轟炸機
腳本之---QQ微信轟炸機
ansible---一鍵搭建redis5.0.5集群
elk7.9真集群docker部署文檔
全球最全loki部署及配置文檔
最強安全加固腳本2.0
一鍵設置iptbales腳本
⑹ linux shell中的比較符號與特殊符號介紹
shell字元串比較、判斷是否為數字
二元比較操作符,比較變數或者比較數字。注意數字與字元串的區別。
整數比較
-eq 等於,如:if [ "$a" -eq "$b" ]
-ne 不等於,如:if [ "$a" -ne "$b" ]
-gt 大於,如:if [ "$a" -gt "$b" ]
-ge 大於等於,如:if [ "$a" -ge "$b" ]
-lt 小於,如:if [ "$a" -lt "$b" ]
-le 小於等於,如:if [ "$a" -le "$b" ]
< 小於(需要雙括弧),如:(("$a" < "$b"))
<= 小於等於(需要雙括弧),如:(("$a" <= "$b"))
> 大於(需要雙括弧),如:(("$a" > "$b"))
>= 大於等於(需要雙括弧),如:(("$a" >= "$b"))
字元串比較
= 等於,如:if [ "$a" = "$b" ]
== 等於,如:if [ "$a" == "$b" ],與=等價
注意:==的功能在[[]]和[]中的行為是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"開頭(模式匹配)那麼將為true
2 [[ $a == "z*" ]] # 如果$a等於z*(字元匹配),那麼結果為true
3
4 [ $a == z* ] # File globbing 和word splitting將會發生
5 [ "$a" == "z*" ] # 如果$a等於z*(字元匹配),那麼結果為true
一點解釋,關於File globbing是一種關於文件的速記法,比如"*.c"就是,再如~也是.
但是file globbing並不是嚴格的正則表達式,雖然絕大多數情況下結構比較像.
!= 不等於,如:if [ "$a" != "$b" ]
這個操作符將在[[]]結構中使用模式匹配.
< 小於,在ASCII字母順序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意:在[]結構中"<"需要被轉義.
> 大於,在ASCII字母順序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]結構中">"需要被轉義.
具體參考Example 26-11來查看這個操作符應用的例子.
-z 字元串為"null".就是長度為0.
-n 字元串不為"null"
鏈接:https://www.jianshu.com/p/6322715ad196
⑺ linux的shell編程中的符號`是什麼
`` 符號在shell裡面正式的名稱叫做backquote , 一般叫做命令替換
其作用是將引用命令的輸出替換到字元串或者變數
通常的 你需要在一個序列中需要用到其它命令的輸出,就可以用``
⑻ 4、liunx系統基礎命令及特殊符號知識考題
什麼是PATH環境變數,它有什麼作用?
LANG PS1 PATH
######PATH含義
存放的是命令的位置/路徑
[root@oldboye01-nb ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
第二個里程牌-liunx 下面運行命令過程
####1、輸入命令
####2、在PATH裡面 路徑進行查找
####3、找到了就運行
####4、找不到就提示 command not found
第1題
如何過濾出已知當前目錄下oldboy中的所有一級目錄(提示:不包含oldboy目錄下面目錄的子目錄及隱藏目錄,即只能是第一級目錄)?
mkdir /oldboy -p
cd /oldboy
mkdir ext/oldboy test xiaodong xingfujie -p
touch jeacen olaboy wodi.gz yingsui.gz
yum install tree -y
[root@oldboye01-nb oldboy]# #如何查詢某個軟體是否安裝了?
[root@oldboye01-nb oldboy]# rpm -qa ( 查找所有安裝軟體 )
[root@oldboye01-nb oldboy]# rpm -qa
[root@oldboye01-nb oldboy]# rpm -qa |grep tree ( 查找具體的軟體安裝包 )
tree-1.5.3-3.el6.x86_64
[root@oldboye01-nb oldboy]# rpm -qa tree
tree-1.5.3-3.el6.x86_64
[root@oldboye01-nb oldboy]# rpm -qa |grep ipt
initscripts-9.03.58-1.el6.centos.x86_64
iptables-ipv6-1.4.7-16.el6.x86_64
plymouth-scripts-0.8.3-29.el6.centos.x86_64
iptables-1.4.7-16.el6.x86_64
[root@oldboye01-nb oldboy]# #查看某個軟體包裡面的內容
[root@oldboye01-nb oldboy]# rpm -ql tre
package tre is not installed
[root@oldboye01-nb oldboy]# rpm -ql tree ( 查看具體安裝包裡面的內容 )
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
###方法1
[root@oldboye01-nb oldboy]# tree -d /oldboy/
/oldboy/
ext
oldboy
test
xiaodong
xingfujie
5 directories
[root@oldboye01-nb oldboy]#
[root@oldboye01-nb oldboy]# tree -dL 1 /oldboy/
/oldboy/
ext
test
xiaodong
xingfujie
##方法2
[root@oldboye01-nb oldboy]# find -type d
.
./ext
./ext/oldboy
./xiaodong
./test
./xingfujie
[root@oldboye01-nb oldboy]# find -maxdepth 1 -type d ! -name "." ( 找出名字不是點 )
./ext
./xiaodong
./test
./xingfujie
###方法3
[root@oldboye01-nb oldboy]# ls -l
total 28
-rw-r--r--. 1 root root 0 Jun 9 07:06 alex.txt
-rw-r--r--. 1 root root 292 Jun 9 06:34 ett.txt
drwxr-xr-x 3 root root 4096 Jun 22 21:55 ext
-rw-r--r-- 1 root root 0 Jun 22 23:44 jeacen
-rw-r--r-- 1 root root 0 Jun 22 23:44 olaboy
-rw-r--r--. 1 root root 0 Jun 9 07:06 oldboy.txt
drwxr-xr-x. 2 root root 4096 Jun 9 07:26 test
-rw-r--r--. 1 root root 8 Jun 9 07:26 test.sh
-rw-r--r--. 1 root root 8 Jun 9 07:26 t.sh
-rw-r--r-- 1 root root 0 Jun 22 23:44 wodi.gz
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xiaodong
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xingfujie
-rw-r--r-- 1 root root 0 Jun 22 23:44 yingsui.gz
[root@oldboye01-nb oldboy]# ls -l |grep "^d" ( 找出目錄為d開頭的文件 )
drwxr-xr-x 3 root root 4096 Jun 22 21:55 ext
drwxr-xr-x. 2 root root 4096 Jun 9 07:26 test
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xiaodong
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xingfujie
[root@oldboye01-nb oldboy]#
#方法4
[root@oldboye01-nb oldboy]# ls -l|awk '$2>1' ( 第二列大於1 )
total 28
drwxr-xr-x 3 root root 4096 Jun 22 21:55 ext
drwxr-xr-x. 2 root root 4096 Jun 9 07:26 test
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xiaodong
drwxr-xr-x 2 root root 4096 Jun 22 21:55 xingfujie
[root@oldboye01-nb oldboy]#
#第2題假如當前目錄[root@oldboye01-nb oldboy]# pwd #==>這是列印當前目錄的,最菜的命令
/oldboy
現在因為需要進入到/tmp目錄下進行操作,執行的命令如下:
[ root@oldboy oldboy]# cd /tmp/
[ root@oldboy tmp]#pwd
/tmp/
操作完畢後,希望快速返回上一次進入的目錄,即/oldboy目錄,如何操作(不使用cd/oldboy)
[root@oldboye01-nb tmp]# #快速回到上一次的所在的位置/目錄
[root@oldboye01-nb tmp]# cd -
/oldboy
[root@oldboye01-nb oldboy]# pwd
/oldboy
[root@oldboye01-nb oldboy]#
cd -
cd . =====當前目錄 復制/移動 cp/etc/host.
cd.. =====進入到當前目錄的上一級目錄
cd~ =====進入當前用戶的家目錄,回老家
(root用戶)~ ====/root
(普通用戶)~ ====/home/
cd =====回老家 回家
cd - #快速回到上一次的所在位置/目錄
[root@oldboye01-nb oldboy]##進入到/etc/sysconfig/network-scripts/目錄,並查看你所在的位置
[root@oldboye01-nb oldboy]#進入到上一級目錄,並查看你所在位置
[root@oldboye01-nb oldboy]##進入到/root目錄下面,並顯示你所在位置
[root@oldboye01-nb oldboy]#回到老家
[root@VM-8-6-centos ~]# cd /oldboy/
[root@VM-8-6-centos oldboy]# cd /etc/sysconfig/network-scripts/
[root@VM-8-6-centos network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@VM-8-6-centos network-scripts]# cd ..
[root@VM-8-6-centos sysconfig]# pwd
/etc/sysconfig
[root@VM-8-6-centos sysconfig]# cd /root/
[root@VM-8-6-centos ~]# pwd
/root
[root@VM-8-6-centos ~]# cd -
/etc/sysconfig
#第3題一個目錄中有多文件(ls查看時好多屏),想最快速度查看到最近更新的文件,怎麼查
ls -lrt
第5題 調試系統服務時,希望能實時查看系統日誌/var/log/messages的更新,如何做?
tail -f 顯示文件的實時更新
taillf ====tail -f
第4題 列印配置文件nginx.conf 內容的行號及內容,該如何做?
[root@oldboye01-nb oldboy]# echo {1..5}
1 2 3 4 5
[root@oldboye01-nb oldboy]# echo stu {01..10}
stu 01 02 03 04 05 06 07 08 09 10
[root@oldboye01-nb oldboy]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
[root@oldboye01-nb oldboy]# echo stu{01..10}xargs -n1
stu01xargs stu02xargs stu03xargs stu04xargs stu05xargs stu06xargs stu07xargs stu08xargs stu09xargs stu10xargs -n1
[root@oldboye01-nb oldboy]# echo stu{01..10}|xargs -n1
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@oldboye01-nb oldboy]# echo stu{01..10}|xargs -n1 >nginx.conf
[root@oldboye01-nb oldboy]# cat nginx.conf
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@oldboye01-nb oldboy]#
###方法1
[root@oldboye01-nb oldboy]# cat -n nginx.conf (-n表示行號)
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
###方法2 -vi/vim
:set nu #顯示行號 number
:set monu #取消小時行號
###方法3 -grep -n參數
[root@oldboye01-nb oldboy]# grep -n "stu" nginx.conf
1:stu01
2:stu02
3:stu03
4:stu04
5:stu05
6:stu06
7:stu07
8:stu08
9:stu09
10:stu10
[root@oldboye01-nb oldboy]# grep -n "." nginx.conf
1:stu01
2:stu02
3:stu03
4:stu04
5:stu05
6:stu06
7:stu07
8:stu08
9:stu09
10:stu10
小結:
1.cat -n;vi/vim顯示行號
2、grep -n
3、awk NR $ print
###第5題,裝完系統後,希望讓網路文件共享伺服器NFS(iptables),僅在3級別上開機自啟動,如何操作?
chkconfig iptables off
###第6題,liunx系統中查看中文,但是亂碼,請問如何解決?
解決:
方法1:推薦修改xshell 字元集
方法2:修改系統字元集
1:命令行 export LANG=en_us.utf-8
2.寫入配置文件
cp /etc/sysconfig/i18n /etc/sysconfig/i18n.bat
echo 『LANG=en_us.UTF-8'>/etc/sysconfig/i18n
3、生效
source /etc/sysconfig/i18n
###第7題; /etc/目錄為liunx系統默認的配置文件及服務啟動命令的目錄
a、請用tar 打包/etc整個目錄(打包及壓縮)
b、請把a點命令的壓縮包,解壓到/tmp指定目錄下(最好只用tar命令實現)
c、請用tar打包/etc整個目錄(打包及壓縮,但需要排除/etc/services文件)。
tar 創建查看解壓壓縮包
[root@oldboye01-nb oldboy]# tar zcvf /tmp/etc.tar.gz /etc/
創建壓縮包 壓縮包存放的位置 壓縮能夠目錄
zcvf 注釋:
z----通過gzip工具進行壓縮 ,
c-----表示create創建 壓縮包 ,
v---表示verbose顯示執行過程
f-----顯示file 接上壓縮包的名字
[root@oldboye01-nb oldboy]# ls -l /tmp/ (查看文件)
total 9508
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
查看壓縮包的內容
[root@oldboye01-nb oldboy]# tar ztf /tmp/etc.tar.gz
ztf注釋: t----表示list 顯示壓縮包的內容
解壓
[root@oldboye01-nb oldboy]# cd /tmp/
[root@oldboye01-nb tmp]# tar zxf etc.tar.gz (解壓)
創建
tar zcf
查看
tar tf
解壓
tar xf
[root@oldboye01-nb tmp]# tar zxf etc.tar.gz
[root@oldboye01-nb tmp]# tar zcf /tmp/sysconfig.tar.gz /etc/sysconfig/
tar: Removing leading /' from member names tar: Removing leading /' from hard link targets
[root@oldboye01-nb tmp]# tar tf /tmp/sysconfig.tar.gz
[root@oldboye01-nb tmp]# ls -l
total 9568
drwxr-xr-x 78 root root 4096 Jun 23 03:39 etc
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
-rw-r--r-- 1 root root 53851 Jun 23 06:00 sysconfig.tar.gz
[root@oldboye01-nb tmp]# rm -fr etc
do not use rm -fr etc
[root@oldboye01-nb tmp]# ll
total 9568
drwxr-xr-x 78 root root 4096 Jun 23 03:39 etc
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
-rw-r--r-- 1 root root 53851 Jun 23 06:00 sysconfig.tar.gz
[root@oldboye01-nb tmp]# rm -fr etc
[root@oldboye01-nb tmp]# ll
total 9564
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
-rw-r--r-- 1 root root 53851 Jun 23 06:00 sysconfig.tar.gz
[root@oldboye01-nb tmp]# tar xf sysconfig.tar.gz
[root@oldboye01-nb tmp]# ll
total 9568
drwxr-xr-x 3 root root 4096 Jun 23 06:02 etc
-rw-r--r-- 1 root root 9736182 Jun 23 05:48 etc.tar.gz
-rw-r--r-- 1 root root 53851 Jun 23 06:00 sysconfig.tar.gz
[root@oldboye01-nb tmp]# ls etc
sysconfig
[root@oldboye01-nb tmp]# ls etc
sysconfig
[root@oldboye01-nb tmp]# ls etc/sysconfig/
acpid i18n kernel quota_nld sshd
atd init keyboard raid-check sysstat
auditd ip6tables moles readahead sysstat.ioconf
authconfig ip6tables-config netconsole readonly-root system-config-firewall
cbq ip6tables.old network rngd system-config-firewall.old
clock iptables networking rsyslog udev
console iptables-config network-scripts sandbox
cpuspeed iptables.old ntpd saslauthd
crond irqbalance ntpdate selinux
grub kmp prelink smartmontools
請把A點命令的壓縮包,解壓到/tmp指定目錄下(最好用tar命令實現)
[root@oldboye01-nb tmp]# tar xf etc.tar.gz -C /opt/ (指定目錄)
[root@oldboye01-nb tmp]# ls -l /opt/ (查看解壓後的目錄情況)
請用tar打包/etc整個目錄(打包及壓縮,但需要排除/etc/services文件)
[root@oldboye01-nb tmp]# tar zcf /tmp/etc.tar.gz /etc/
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboye01-nb tmp]#
[root@oldboye01-nb tmp]# tar zcf /tmp/etc-paichu.tar.gz /etc/ --exclude=/etc/services
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboye01-nb tmp]# tar zcf /tmp/etc-paichu.tar.gz /etc/ --exclude=/etc/services
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboye01-nb tmp]# tar tf /tmp/etc.tar.gz |grep services
etc/init/readahead-disable-services.conf
etc/services
[root@oldboye01-nb tmp]# tar tf /tmp/etc-paichu.tar.gz|grep services
etc/init/readahead-disable-services.conf
[root@oldboye01-nb tmp]#
cd /
tar zcf /tmp/etc.tar.gz etc/
小結:
1、tar 打包壓縮
2、創建壓縮包 查看壓縮包, 解壓
3、解壓到指定的文件夾
4、創建壓縮包排除
#第8題如何查看etc/services文件的有多少行?
[root@oldboye01-nb ~]# cd /oldboy/
[root@oldboye01-nb oldboy]# wc -l /etc/services
10774 /etc/services、
屌絲去洗浴中心之路
3、
(1) 查看22埠是否開啟telnet
(2) sshd遠程連接進程是否在運行
ps -ef
[root@oldboye01-nb oldboy]# ps -ef |grep "sshd" (過濾進程sshd)
root 1436 1 0 Jun22 ? 00:00:00 /usr/sbin/sshd
root 2461 1436 0 05:11 ? 00:00:00 sshd: root@pts/0
root 2588 1436 0 06:45 ? 00:00:00 sshd: root@pts/1
root 2656 1436 0 07:30 ? 00:00:00 sshd: root@pts/2
root 2701 2658 0 08:01 pts/2 00:00:00 grep sshd
[root@oldboye01-nb oldboy]# ps -ef |grep "/sshd"
root 1436 1 0 Jun22 ? 00:00:00 /usr/sbin/sshd
root 2705 2658 0 08:03 pts/2 00:00:00 grep /sshd
[root@oldboye01-nb oldboy]# ps -ef |grep "/sshd"|wc -l (顯示進程出現幾個;次數)
2
第9題:過濾出/etc/services 文件包含3306和1521兩數字所在行號的內容
[root@oldboye01-nb oldboy]# grep "3306" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
[root@oldboye01-nb oldboy]# egrep "3306|1521" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@oldboye01-nb oldboy]# #egrep ==grep -E支持高級正則(公雞里的戰斗機)
[root@oldboye01-nb oldboy]#
第10題命令行及shell中不加引號、加單引號和加雙引號的區別小結
單引號 所見即所得 吃啥吐啥
雙引號 裡面的特殊符號會被解析
[root@VM-8-6-centos oldboy]# echo 'hello lls $LANG $(hostname) 'pwd''
hello lls $LANG $(hostname) pwd
⑼ liunx 下的shell語句 if [ ! -d /$1/$2/$3/ ]是什麼意思
liunx 下的shell語句 if [ ! -d /$1/$2/$3/ ]這是判斷某文件夾是否存在,$1, $2, $3都是變數,操作方法如下:
1、判斷文件的基本格式。[ 操作符 文件或目錄 ]。
⑽ shell腳本中的美元符號什麼意思
linux shell腳本中的美元符號$,是作為shell中特殊變數使用的,具體含義:
$0 shell的命令本身(包括完專整路徑)
$1到$9 數字表屬示shell 的第幾個參數
$# 傳遞到腳本的參數個數
$* 以一個單字元串顯示所有向腳本傳遞的參數
$$ 腳本運行的ID號
$! 後台運行的最後一個進程的ID號
$@ 與$*相同。
$- 顯示shell使用的當前選項。
$? 顯示最後命令的執行狀況。0表示沒有錯誤。