Linux shell筆記


由於工作的需要,越來越多的接觸到linux系統。最近看了《Linux與Unix Shell》這本書,安裝書的章節整理了一些自己認為比較重要的命令,方便以后查閱。

 

No.001 文件安全與權限

1. umask 決定了新建文件的權限
2. 軟鏈接(符號鏈接) ln -s source_path target_path

 

No.002 find和xargs

1. find pathname -options [-print -exec -ok]
   其中exec參數的命令格式: 'command-' {} \; 注意必須包含【{} \;】
   -perm 按權限來查找  ex. find . -perm 755 -print
   -mtime 按修改時間來查找 ex. find / -mtime -5 -print 更改時間5天以內
                               find / -mtime +5 -print 更改時間5天以前
2. xargs與-exec和-ok類似,但是限制更少,也更快
   3種參數的命令:find . -name "*.c" -exec wc -l {} \;
                        find . -name "*.c" -ok wc -l {} \;   每次執行命令前有提示
                        find . -name "*.c" | xargs wc -l

 

No.003 后台執行命令

1. [crontab] [at] [&] [nohup]四種

 

No.004 文件名置換

1. 列出隱藏文件 ex. ls .*

 

No.005 shell輸入與輸出

1. echo輸出時加上 -n 參數不換行, ex. echo -n "aaaa"
2. tee 命令可以同時輸出到屏幕和文件中 ex. ls | tee file.out
3. 標准輸入 0  標准輸出 1  標准錯誤 2
4. 將標准輸出和標准錯誤輸入到一個文件  ex. command >file.out 2>&1

 

No.006 命令執行順序

1. 命令1 && 命令2    命令1執行成功后才會執行命令2
2. 命令1 || 命令2    命令1執行失敗后才會執行命令2

 

No.007 正則表達式

1. 正則表達式元字符及含義
    ^                     只匹配行首
    $                     只匹配行尾
    *                     匹配0次或多次
    []                    匹配[]內字符
    \                     轉義符
    .                     匹配任意一個字符
    pattern\{n\}          匹配pattern出現的次數,n次
    pattern\{n, \}        同上,最少n次
    pattern\{n, m\}       同上,次數在n與m之間

 

No.008 grep

1. grep 主要選項及其含義
   -c    只輸出匹配行的行數
   -i    不區分大小寫
   -h    查詢多文件時不顯示文件名
   -l    查詢多文件時只輸出包含匹配字符的文件名
   -n    顯示匹配行及行號
   -s    不顯示不存在或無匹配文本的錯誤信息
   -v    顯示不包含匹配文本的所有行
2. 查詢空行 grep '^$' filename
3. 類名及等價的正則表達式
   [[:upper:]]    =    [A-Z]
   [[:lower:]]    =    [a-z]
   [[:digit:]]    =    [0-9]
   [[:alnum:]]    =    [0-9a-zA-Z]
   [[:space:]]    =    空格或tab鍵
   [[:alpha:]]    =    [a-zA-Z]

 

No.009 AWK

# awk的主要作用在於將文本分成各個區域,便於分別進行處理
1. awk -F指定分隔符,-f指定awk腳本
   ex. awk -F: 'commands' input-file(s)
   ex. awk -f awk-script input-file(s)
2. awk 分隔出的域用$1,$2...$n來表示,其中$0表示所有域
3. awk 條件操作符 <, <=, >=, ==, !=
   ~  匹配正則表達式   !~  不匹配正則表達式
4. awk 內置變量
   ARGC        命令行參數個數
   ARGV        命令行參數排列
   ENVIRON     支持隊列中系統環境變量的使用
   FILENAME    awk瀏覽的文件名
   FNR         瀏覽文件的記錄數
   FS          設置輸入域分隔符,等價於命令行-F選項
   NF          記錄的域個數
   NR          已讀的記錄數
   OFS         輸出域分隔符
   ORS         輸出記錄分隔符
   RS          控制記錄分隔符
   ex. awk '{print NF,NR,$0} END{print FILENAME}' input-file
5. awk 字符串函數
   gsub, index, length, match, split, sprint, sub, substr, substr
6. awk 中的printf函數可以控制格式化輸出
7. awk 的循環結構 For (element in array) print array[element]

 

No.010 sed

# sed的主要作用在於過濾和查找文本中的特定內容
1. sed 命令格式: sed [options] sed-command input-file
                  sed [options] -f sed-script input-file

 

No.011 合並和分隔文件

1. sort, uniq, join, cut, paste, split

 

No.012 tr的用法

1. 去除oops.txt中的重復字符 tr -s "[a-z]" < oops.txt
2. 去除oops.txt中的空行 tr -s "[\n]" < oops.txt
3. oops.txt中小寫轉大寫 tr -s "[a-z]" "[A-Z]" < oops.txt

 

No.013 登錄環境

1. /etc/passwd 保存所有賬號的基本信息(不包括密碼)
2. /etc/profile 基本的配置信息,登錄時讀取此文件
3. $HOME/*profile 各個用戶的profile文件,會覆蓋系統的profile文件
4. $HOME/*logout logout(鍵入命令exit時)是執行的腳本

 

No.014 環境和shell變量

1. shell變量的設置方式
   Variable-name=value    設置實際值到variable-name
   Variable-name+value    如果設置了variable-name,則重設其值
   Variable-name:?value   如果未設置variable-name,顯示未定義用戶錯誤信息
   Variable-name?value    如果未設置variable-name,顯示系統錯誤信息
   Variable-name:=value   如果未設置variable-name,設置其值
   Variable-name:-value   如果未設置variable-name,就用value,但是不設置variable-name
2. 設置只讀變量  readonly variable-name
3. export variable-name 可以將變量導入到子shell中
4. shell腳本的參數 $0表示腳本名字,$1表示第一個參數......$9表示第九個參數
5. 特定shell變量
   $#    參數個數
   $*    用一個字符串顯示所有參數
   $$    腳本運行的當前進程ID
   $!    后台運行的最后一個進程的進程ID
   $@    與$*相同,每個參數作為獨立的字符串
   $-    顯示shell的當前選項,與set命令相同
   $?    顯示shell命令的退出狀態,0表示無錯誤,其他表示有錯

 

No.015 引號

1. 雙引號("") 其中引用的變量會替換為變量值。比如:
    [wangyb@localhost bash]$ STR="Hello world"
    [wangyb@localhost bash]$ echo "$STR"
    Hello world
2. 單引號('') 忽略變量和其他特殊字符,單引號內任何內容都當成字符串顯示。比如:
    [wangyb@localhost bash]$ STR="Hello world"
    [wangyb@localhost bash]$ echo '$STR'     
    $STR
3. 單引號和雙引號同時使用時,誰在外面誰起作用。比如
    [wangyb@localhost bash]$ echo "'$STR'"
    'Hello world'
    [wangyb@localhost bash]$ echo '"$STR"'
    "$STR"
4. 反引號(``) 反引號中的內容被當做命令來執行。比如
    [wangyb@localhost bash]$ VAR=`date`
    [wangyb@localhos bash]$ echo $VAR
    Thu Dec 22 22:08:07 JST 2011
5. 轉義符(\)

 

No.016 Shell腳本介紹

1. 腳本的第一行一般以  #!/bin/bash  開始
2. 給腳本加入執行權限后就可以運行腳本了

 

#No.017 條件測試

1. 測試語法  test condition 或者 [ condition ] 使用方括號是注意在condition兩邊加上空格
2. 文件狀態測試
   -d    目錄            -s    文件長度大於0
   -f    正規文件        -w    可寫
   -L    符號連接        -u    文件有suid位設置
   -r    可讀            -x    可執行
   例子如下:測試是否為目錄,也可以用 test -d bash.sh 來代替方括號
    [root@localhost bash]# [ -d bash.sh ]
    [root@localhost bash]# echo $?
    1
    [root@localhost bash]# [ -d . ]     
    [root@localhost bash]# echo $?
    0
3. 邏輯與 -a  邏輯或 -o  邏輯否 ! 例子如下:
    [root@localhost bash]# [ -d bash.sh -a -d . ]
    [root@localhost bash]# echo $?
    1
    [root@localhost bash]# [ -d bash.sh -o -d . ] 
    [root@localhost bash]# echo $?
    0
    [root@localhost bash]# [ ! -d bash.sh -a -d . ]   
    [root@localhost bash]# echo $?
    0
    [root@localhost bash]# [ ! -d bash.sh -a ! -d . ]
    [root@localhost bash]# echo $?
    1
4. 字符串測試  [ string1 string_operator string2 ] 或者 [ string_operator string ]
   string_operator可為:=      兩個字符串相等
                        !=     兩個字符串不等
                        -z     空串
                        -n     非空串
5. 數值測試  [ "number1" num_operator "number2" ]
   num_operator可為:  -eq     數值相等
                       -ne     數值不等
                       -gt     number1 > number2
                       -lt     number1 < number2
                       -le     number1 <= number2
                       -ge     number1 >= number2
   例子:   [root@localhost bash]# [ "100" -gt "101" ]
            [root@localhost bash]# echo $?
            1
            [root@localhost bash]# [ "100" -lt "101" ]
            [root@localhost bash]# echo $?           
            0
6. expr語法  expr arg1 operator arg2
   例子:變量自增
            [root@localhost bash]# COUNT=1       
            [root@localhost bash]# echo $COUNT   
            1
            [root@localhost bash]# COUNT=`expr $COUNT + 1`
            [root@localhost bash]# echo $COUNT           
            2

 

No.018 控制流結構

1. if語句格式
   if 條件1
   then
        執行命令1
   elif 條件2
   then
        執行命令2
   else
        執行命令3
   fi
2. case語句格式
   case 值 in
   模式1)
       命令1
       ;;
   模式2)
       命令2
       ;;
   ......
   easc
其中的“模式”可以是 *(任意字符), ?(任意單字符), [..](范圍內任意字符)
“模式”中還可以是使用 | (比如 str1|str2 表示str1和str2都可以)
3. for語句格式
   for 變量名 in 列表
   do
       命令1
       命令2 ......
   done
4. until語句格式
   until 條件
         命令1
         ......
   done
一直執行至條件為真時才結束,至少執行一次
5. while語句格式
   while 條件
         命令1
         ......
   done
6. 利用IFS來改變讀取內容的分隔符
7. 利用break和continue控制循環的執行

 

No.019 Shell函數

1. shell函數格式
   函數名 ()
   {
       命令1
       ......
   }
或者
   function 函數名 ()
   {
       命令1
       ......
   }
2. 引用其他腳本中函數  . /pathname/funcfile (<點><空格><斜線><文件完整路徑名>或者<點><空格><文件相對路徑名>)
3. 函數中通過 $1, $2,......$9來獲取參數

 

No.020 向腳本傳遞參數

1. 使用shift依次獲取各個參數,比如
   while [ $# -ne 0 ]
   do
         echo $1  # 通過shift,$1將依次表示各個參數
         shift
   done
2. getopts語法格式 getopts operation-string variable。

 

No.021 屏幕輸出

1. tput 控制屏幕上的字符輸出,比如加粗字符,隱藏光標等等
2. 改變字符顏色的方法,比如
   echo "<CTRL-V><ESCAPE>[40;32m"   設置背景黑色(40), 字符綠色(32)

 

No.022 屏幕輸入

1. 輸入時進行validation check
   “送進的是垃圾,出來的肯定是垃圾”

 

No.023 調試腳本

1. shell不會對錯誤進行精確定位,當shell打印錯誤后,需要觀察報錯的整個代碼段
2. 在腳本中利用set命令輔助調試
   set -n    讀命令但不執行
   set -v    顯示讀取的所有行
   set -x    顯示所有命令及參數
   - 表示打開; + 表示關閉;set +x 表示關閉顯示所有命令及參數

 

No.024 shell 嵌入命令

1. set 命令在腳本中設置腳本的運行參數
2. times命令打印shell消耗時間和運行命令消耗時間 ???
3. type 命令查詢命令是否有效及命令類型
4. ulimit 命令設置運行在shell上的顯示限制
5. wait 命令是父進程等待子進程完成

 

No.025 深入討論<<

1. 創建文本  ex. cat >> file <<end
                 > (輸入內容)
                 > end
   (輸入內容)將被追加到file中

 

No.026 shell工具

1. 用日期做文件名,ex.  $ Myfile=`date +%Y%m%d%H%M%S`
                        $ touch $Myfile
2. 腳本中的臨時文件名中加入進程號,可以保證文件名唯一,並在腳本結束時刪掉文件
   ex. TmpFile1=/tmp/tempfile1.$$
       TmpFile2=/tmp/tempfile2.$$
       rm /tmp/*.$$
3. 常用信號
   信號    信號名        含義
   1       SIGHUP        掛起或父進程被殺死
   2       SIGINT        來自鍵盤的中斷信號,通常是<CTRL-C>
   3       SIGQUIT       從鍵盤退出
   9       SIGKILL       無條件終止
   11      SIGSEGV       段(內存)沖突
   15      SIGTERM       軟件終止(缺省殺進程信號)
4. trap 捕獲信號 語法 trap "do-something" signal(s)
   ex.  trap "" 2 3           忽略信號2和信號3,用戶不能終止該腳本
        trap "commands" 2 3   如果捕捉到信號2和信號3,就執行相應的commands
        trap 2 3              復位信號2和3,用戶可以終止該腳本
5. eval 對變量進行2次掃描 比如:
        [wangyb@localhost bash]$ VAR1="cat a.sh"
        [wangyb@localhost bash]$ echo $VAR1
        cat a.sh
        [wangyb@localhost bash]$ eval echo $VAR1 
        cat a.sh
        [wangyb@localhost bash]$ eval $VAR1    
        #!/bin/bash
        TMP='HELLO'
        sleep 2
        times
6. 獲取命令行的最后一個參數: ex. $(eval echo \$$#)
7. logger 命令記錄日志

 

No.027 幾個腳本例子

# 作者常用的幾個腳本

No.028 運行級別腳本

1. 確定當前的運行級別:who -r
2. 運行級別含義
   運行級別0    啟動和停止整個系統
   運行級別1    單用戶或管理模式
   運行級別2    多用戶模式;部分網絡服務被啟動。
   運行級別3    正常操作運行模式,啟動所有的網絡服務
   運行級別4    用戶定義的模式,可以使用該級別來定制所需要運行的服務
   運行級別5    有些Unix操作系統變體叫起作為缺省X-windows模式
   運行級別6    重啟動

 

No.029 cgi腳本

# 感覺現在應該不會有人用bash來開發web程序了吧

No.030 常用shell命令

1. basename : basename path
2. cat : cat optiones file
       -v 顯示控制字符
3. compress : compress options files
       -v 顯示壓縮結果
4. cp : cp options file1 file2
       -i 覆蓋文件之前提示用戶確認
       -p 保留權限模式和更改時間
       -r 拷貝相應的目錄及其子目錄
5. diff : diff options file1 file2
       -c 按照標准個數輸出
       -I 忽略大小寫
6. dircmp : dircmp options directory1 directory2
       -s 不顯示相同的文件
7. dirname : dirname pathname
8. du : du options directory
       -a 顯示每個文件的大小,不僅是整個目錄所占用的空間
       -s 只顯示總計
9. file : file filename
10. fuser : fuser options file
       -k 殺死所有訪問該文件或文件系統的進程
       -u 顯示訪問該文件或文件系統的進程
11. head : head -number files
12. logname : logname (顯示當前使用的登陸用戶名)
13. mkdir : mkdir options directory
        -m 在創建目錄時按照該選項的值設置訪問權限
14. more : more options files
        -c 不滾屏,而是通過覆蓋來換頁
        -d 在分頁處顯示提示
        -n 每屏顯示n行
15. nl : nl options file
        -I 行號每次增加n;缺省為1
        -p 在新的一頁不重新計數
16. printf : printf format arguments
17. pwd : pwd
18. rm : rm options files
        -i 在刪除文件之前給出提示(安全模式)
        -r 刪除目錄
19. rmdir : rmdir options directory
        -p 如果相應的目錄為空目錄,則刪除該目錄
20. script : script option file
        -a 將輸出附加在文件末尾
21. shutdown : shutdown now
22. sleep : sleep number(秒數)
23. strings : strings filename (查看二進制文件中的文本)
24. touch : touch options filename
        -t MMDDhhmm 創建一個具有相應月,日,時分時間戳的文件
25. tty : tty 顯示所連接的設備或終端
26. uname : uname options
        -a 顯示所有信息
        -s 系統名
        -v 只顯示操作系統版本或其發布日期
27. uncompress : uncompress files
28. wait : wait processID
29. wc : wc options files
        -c 顯示字符數
        -l 顯示行數
        -w 顯示單詞數
30. whereis : whereis command_name
31. who : who options
        -a 顯示所有的結果
        -r 顯示當前的運行級別
        -s 列出用戶名及時間域


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM