shell小技巧
什麼是shell?
命令解析器,幫助人機交互的翻譯官!
windows的桌面也是shell的一種!
Linux的shell有哪些
/etc/shells 記錄該Linux安裝了哪些shell。
B類 sh bash
C類 tcsh
shell不同,命令提示符不同
幾乎所有linux缺省都是bash (Bourne-again Shell) ,非常適合於一些管理操作
一些比較老的unix,缺省都是sh
bash提供常用功能如下:
一、命令補全
使用Tab鍵
命令補全、文件名補全
如果不是唯一的,按兩下Tab,全列出來
二、快捷操作
CTRL+C終止命令
CTRL+A光標到行首
CTRL+E光標到行尾
CTRL+U剪切光標前內容
CTRL+K剪切光標後內容
CTRL+Y粘貼剪切的內容
CTRL+L清理屏幕
CTRL+D註銷登陸相當於exit和logout或者保存
CTRL+Z將進程在後臺掛起 bg fg
三、命令歷史
history 列出所有的命令(默認最多保存條數1000)
!序號 執行歷史中第幾個命令
!命令 執行最近的這條命令
按向上(或向下)箭頭,翻出歷史記錄
四、命令別名
什麼是別名?(類似快捷命令)
命令:alias (顯示當前可用別名命令)
ls爲什麼可以顯示顏色?因爲是ls--color=tty的別名
可以看到 ll 是ls -l --color=tty的別名
添加一個別名(臨時):
alias copy=cp 就可以用copy來複制文件了
如果有參數:
alias drm="rm -rf"
刪除別名:
unalias copy
別名永久生效:在用戶宿主目錄 ~/.bashrc 文件中添加別名信息如:aliasvi=vim。
重啓生效或者source ~/.bashrc及時生效
五、輸入輸出重定向
Shell對於每個進程預先定義了3個文件描述字
0標準輸入 STDIN 鍵盤
1標準輸出 STDOUT 顯示器
2標準錯誤輸出 STDERR
重定向,就是改變這個標準設備,不用鍵盤輸入,不用顯示器輸出
輸出重定向
> 或 >>
例:echo hello 直接顯示到顯示器
echo hello>test.txt 將輸出重定向到test.txt
ls -l /tmp>files.txt 將輸出重定向到files.txt
more files.txt 查看文件內容
把/website下大於100M的文件列表
find /website -size +204800>/backup/100M+.file.list
追加,用 >>
輸入重定向 (不從鍵盤輸入內容了)
例:wall < /test/msg 從一個文件讀取內容發廣播
這樣,就可以用計劃任務,把一年的節日祝福語寫上,到時自動發送
錯誤輸出重定向
2> 或 2>> #描述字和符號間不許有空格
例:自動備份通常用計劃任務在凌晨自動執行
cp -R /usr /backup/use2>>/bak.error
將錯誤信息,定向到一個文件中
實例:
ls/aaaaaa 2>ls.err 如果/aaaaa這個目錄不存在,則將錯誤信息保存到ls.err中
這裏面的2,就是前面講的 Shell對於每個進程預先定義了3個文件描述字
0和1都可以省略,2不能省略了
ls -l >> outputfile 2>&1
六、管道連接符
將一個命令的輸出,傳送給另一個命令,作爲另一個命令的輸入,可以連接多個命令
用法:
命令1|命令2|命令3...
例:
ls-l /etc | more 文件太多,一次看不完,用more來查看 下一頁:空格或f 下一行:回車 退出:q 或Q
ls-l /etc | grep init 只顯示init相關的行
ls-l /etc | grep init | wc -l 查看init相關的有多少行,也就是包含init的文件有多少個
who| grep root 只顯示root的登錄信息
wc -l 統計文件有多少行
who | grep root| wc -l 查看root 用戶登錄了幾次
七、命令連接符
; 不管執行是否成功,多個命令依次執行
例: pwd ; ls ; date
&& 前面執行成功,才執行後面的命令,如果第一個失敗,則不執行第二個
write user1 < /home/jack/love.txt&& rm /home/jack/love.txt 情書發成功,就刪除
ls && pwd 第一個成功後,將執行pwd命令
|| 前面執行失敗,才執行後面的命令
write mary < /home/jack/love.txt ||mail mary< /home/jack/love.txt 情書發失敗,則發郵件
`` 命令替換符
將一個命令的輸出作爲另一個命令的參數
命令1 `命令2`,命令1的參數,是命令2的執行結果
ls -l `whichtouch` 找到touch命令的路徑,然後用ls查看屬性
看起來有點類似管道,不過順序相反,會先執行後面的