shell命令总结一
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                shell命令总结一
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                簡述:這篇總結是在360企業安全實習第一周學到的。
Linux中的 2>&1 、if文件命令 、tr 、$0等相關參數含義的用法
1. 2>&1
command>/dev/null 2>&1 &這樣形式的命令。首先我們把這條命令大概分解下首先就是一個nohup表示當前用戶和系統的回話下的進城忽略響應HUP消息。&是把該命令以后臺的job的形式運行。那么就剩下command>/dev/null 2>&1,command>/dev/null較好理解,/dev/null表示一個空設備,就是說吧command的執行結果重定向到空設備中,說白了就是不顯示任何信息。那么2>&1又是什么含義?command>a 2>a 與 command>a 2>&1的區別
通過上面的分析,對于command>a 2>&1這條命令,等價于command 1>a 2>&1可以理解為執行command產生的標準輸入重定向到文件a中,標準錯誤也重定向到文件a中。那么是否就說command 1>a 2>&1等價于command 1>a 2>a呢。其實不是,command 1>a 2>&1與command 1>a 2>a還是有區別的,區別就在于前者只打開一次文件a,后者會打開文件兩次,并導致stdout被stderr覆蓋。&1的含義就可以理解為用標準輸出的引用,引用的就是重定向標準輸出產生打開的a。從IO效率上來講,command 1>a 2>&1比command 1>a 2>a的效率更高。幾個基本符號及其含義
/dev/null 表示空設備文件 0 表示stdin標準輸入 1 表示stdout標準輸出 2 表示stderr標準錯誤從command>/dev/null說起
其實這條命令是一個縮寫版,對于一個重定向命令,肯定是a > b這種形式,那么command > /dev/null難道是command充當a的角色,/dev/null充當b的角色。這樣看起來比較合理,其實一條命令肯定是充當不了a,肯定是command執行產生的輸出來充當a,其實就是標準輸出stdout。所以command > /dev/null相當于執行了command 1 > /dev/null。執行command產生了標準輸出stdout(用1表示),重定向到/dev/null的設備文件中。說說2>&1
通過上面command > /dev/null等價于command 1 > /dev/null,那么對于2>&1也就好理解了,2就是標準錯誤,1是標準輸出,那么這條命令不就是相當于把標準錯誤重定向到標準輸出么。等等是&1而不是1,這里&是什么?這里&相當于等效于標準輸出。這里有點不好理解,先看下面。?舉個栗子
來個shell //test.sh #!/bin/sh t date chmod +x test.sh為test.sh增加執行權限。這里我們弄了兩條命令,其中t指令并不存在,執行會報錯,會輸出到stderr。date能正常執行,執行會輸出當前時間,會輸出到stdout。 執行./test.sh > res1.log結果為 我們發現stderr并沒有被重定向到res1.log中,stderr被打印到了屏幕上。這也進一步證明了上面說的./test.sh > res1.log等價于./test.sh 1>res1.log 執行./test.sh>res2.log 2>&1結果為 這次我們發現stdout和stderr都被重定向到了res2.log中了。上面我們未對stderr也就是2說明如何輸出,stderr就輸出到了屏 幕上,這里我們不僅對stdout進行說明,重定向到res2.log中,對標準錯誤也進行了說明,讓其重定向到res2.log的引用即 res2.log的文件描述符中。再思考一下
為何2>&1要寫在command>1的后面,直接用2可以么。比如ls 2>a。其實這種用法也是可以的,ls命令列出當前的目錄,用stdout(1)表示,由于這個時候沒有stderr(2),這個時候執行ls 2>a也會正常產生一個a的文件,但是a的文件中是空的,因為這時候執行ls并沒有產生stderr(2)。 shell中>&2的含義及用法 在閱讀《Shell腳本學習指南》時,看到這么一段代碼| shell上: 0表示標準輸入 1表示標準輸出 2表示標準錯誤輸出 > 默認為標準輸出重定向,與 1> 相同 2>&1 意思是把 標準錯誤輸出 重定向到 標準輸出. &>file 意思是把 標準輸出 和 標準錯誤輸出 都重定向到文件file中 用例子說話: 1. grep da * 1>&2? 2. rm -f $(find / -name core) &> /dev/null 上面兩例中的 & 如何理解,&不是放到后臺執行嗎? 牛解: 1.&>file或n>&m均是一個獨立的重定向符號,不要分開來理解。 2.明確文件和文件描述符的區別。 3.&>file表示重定向標準輸出和錯誤到文件 例如: rm -f $(find / -name core) &> /dev/null,/dev/null是一個文件,這個文件比較特殊,所有傳給它的東西它都丟棄掉。 4.n>&m表示使文件描述符n成為輸出文件描述符m的副本。這樣做的好處是,有的時候你查找文件的時候很容易產生無用的信息,如:2> /dev/null的作用就是不顯示標準錯誤輸出;另外當你運行某些命令的時候,出錯信息也許很重要,便于你檢查是哪出了毛病,如:2>&1 例如: 注意,為了方便理解,必須設置一個環境使得執行grep da *命令會有正常輸出和錯誤輸出,然后分別使用下面的命令生成三個文件: grep da * > greplog1 grep da * > greplog2 1>&2??? grep da * > greplog3 2>&1??//grep da * 2> greplog4 1>&2?結果一樣 #查看greplog1會發現里面只有正常輸出內容 #查看greplog2會發現里面什么都沒有 #查看greplog3會發現里面既有正常輸出內容又有錯誤輸出內容 | 
| ?shell if | ????c語言if | 
| 0為真,走then | ?正好相反,非0走then | 
| 不支持整數變量直接if 必須:if [ i –ne 0 ] 但支持字符串變量直接if if [ str ] 如果字符串非0 | 支持變量直接if if (i ) | 
Linux下的 >, >>, <, ps, |, grep, /dev/null
1 要將命令行運行的結果保存到文件中,truncate模式下使用?>,append模式下使用?>> ls > ~/test.txt 2 要將文件中的內容作為標準輸入,應使用?<: grep test < ~/test.txt 3?ps(process status)命令用來查看當前系統中運行著哪些進程,常用命令: ps -ef 4 "|" 是Linux下的管道命令,對命令 cmd1 | cmd2,解釋為將cmd1的STDOUT作為cmd2的STDIN來執行. (每個Linux命令運行時都會打開三個文件,文件描述符0代表stdin,1代表stdout,2代表stderr) 5?grep(global regular expression print, 全局正則表達式輸出),用于查詢,例如: ps -ef | grep test 6?/dev/null文件是一個特殊的文件,將輸出重定向到這里,寫入的內容全都會被丟棄,從這里讀取,什么也讀不到. 常用于實現"禁止輸出"的功能. 3.tr命令 tr(選項)(參數) -c或——complerment:取代所有不屬于第一字符集的字符; -d或——delete:刪除所有屬于第一字符集的字符; -s或--squeeze-repeats:把連續重復的字符以單獨一個字符表示; -t或--truncate-set1:先刪除第一字符集較第二字符集多出的字符。?參數
字符集1:指定要轉換或刪除的原字符集。當執行轉換操作時,必須使用參數“字符集2”指定轉換的目標字符集。但執行刪除操作時,不需要參數“字符集2”; 字符集2:指定要轉換成的目標字符集。實例
將輸入字符由大寫轉換為小寫: echo "HELLO WORLD" | tr 'A-Z' 'a-z' hello world 'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都屬于集合,集合里可以使用'\n'、'\t',可以可以使用其他ASCII字符。 使用tr刪除字符: echo "hello 123 world 456" | tr -d '0-9' hello world 將制表符轉換為空格: cat text | tr '\t' ' ' 字符集補集,從輸入文本中將不在補集中的所有字符刪除: echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n' 1 2 3 4 此例中,補集中包含了數字0~9、空格和換行符\n,所以沒有被刪除,其他字符全部被刪除了。 用tr壓縮字符,可以壓縮輸入中重復的字符: echo "thissss is a text linnnnnnne." | tr -s ' sn' this is a text line. 巧妙使用tr做數字相加操作: echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ] 刪除Windows文件“造成”的'^M'字符: cat file | tr -s "\r" "\n" > new_file 或 cat file | tr -d "\r" > new_file tr可以使用的字符類: [:alnum:]:字母和數字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:數字 [:graph:]:圖形字符 [:lower:]:小寫字母 [:print:]:可打印字符 [:punct:]:標點符號 [:space:]:空白字符 [:upper:]:大寫字母 [:xdigit:]:十六進制字符 使用方式: tr '[:lower:]' '[:upper:]' 4.$?相關含義 $0 這個程式的執行名字 $n 這個程式的第n個參數值,n=1..9 $* 這個程式的所有參數,此選項參數可超過9個。 $# 這個程式的參數個數 $$ 這個程式的PID(腳本運行的當前進程ID號) $! 執行上一個背景指令的PID(后臺運行的最后一個進程的進程ID號) $? 執行上一個指令的返回值 (顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤) $- 顯示shell使用的當前選項,與set命令功能相同 $@ 跟$*類似,但是可以當作數組用轉載于:https://www.cnblogs.com/yanghang-great/p/8544331.html
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的shell命令总结一的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Python 用pygame模块播放MP
 - 下一篇: Linux awk命令使用方法