shell常用命令
more
查看文件里的內容
- return鍵:換行
- 空格鍵:下一頁
- b: 后退,上一頁
- /pattern:查找文檔中pattern
- q:強制退出
ls
展示文件夾內內容
- ls:輸出文檔基本屬性
- ls -l: 長數據串行出,包含檔案的屬性等等數據
- ls -a:全部的檔案,連同隱藏檔( 開頭為 . 的檔案) 一起列出來,隱藏文檔以一個點開頭
- ls -F:根據檔案、目錄等信息,給予附加數據結構,例如: *:代表可執行檔; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 檔案;
- ls -R:連同子目錄內容一起列出來
- ls -Rl:結合了R和l的功能,列出所有目錄包括子目錄的屬性
- ls -lFa:組合功能,列出所有文件以及隱藏文件的屬性以及附加數據結構
mkdir
命令創建目錄
- mkdir 目錄名:在當前路徑下創建目錄
- mkdir newdir/sub1 newdir/sub2 newdir/sub3:同時創建多個已存在目錄的子目錄
- mkdir -p newdir/sub1:當newdir不存在的時候也能創建
cd
切換當前目錄
- cd ~/SAN/unixlab1:采用絕對路徑的方式切換路徑
- cd unixlab1:采用相對路徑的方式切換路徑
- cd ..:切換到上一級目錄
- cd /:切換到根目錄
rmdir
刪除目錄
- rmdir newdir:刪除當前文件夾下的newdir,當其不包含子目錄時刪除
- rmdir newdir/*:刪除newdir中的所有文件
cat
連接文件或標准輸入並打印。這個命令常用來顯示文件內容,或者將幾個文件連接起來顯示,或者從標准輸入讀取內容並顯示,它常與重定向符號配合使用。部分功能與more類似
- cat test1: 查看test1中內容
- cat -n test1:不僅顯示內容,同時顯示內容的行序號
- cat test1 test2 > newtest:連接兩個文件test1和test2的內容到newtest,注意此過程也包含創建newtest文件
cp
復制作用
- cp test1 test1b:復制test1文件,同時存在內容相同的文件test1和test1b,若test1b存在,就會被覆蓋
- cp -i test1 test1b:詢問是否復制,y為執行
- cp -R subdir1 subdir4:遞歸持續復制,用於目錄的復制行為
- cp test* subdir1:將以test開頭的所有文件,復制到subdir1中,但是test*文件還是存在原來的位置,與第一行復制文件的區別是,subdir1是目錄,並且已經存在產品
mv
移動目錄或者重命名
- mv test3 newtest3:當不存在newtest3,將test3文件重命名為newtest3
- mv test1 test2:由於test2存在,將test1覆蓋test2
- mv subdir4 dir4:將目錄subdir4重命名為dir4,當dir4不存在時
- mv newtest3 unixlab1:移動文件,將文件newtest3移到目錄unixlab1中,前提為unixlab1存在
- mv dir4 unixlab1:移動目錄,將目錄dir4移到目錄unixlab1中
rm
作用為刪除
- rm test4:刪除文件
- rm -i *:采用通配符的方式刪除掉所有的文件,不包括目錄,i表示是詢問是否刪除
- rm -r subdir1:強制刪除,可以刪除文件或者目錄
file
查看文件類型
- file test1:顯示為"test1:ASCII text",為txt類型
- file dir4:顯示為"dir4:directory",為目錄類型
- file *:顯示該目錄下所有文檔類型
find
- find -name newtest3 (-print):找出文件名為newtest3的文件
- find -name 'test':找出所有名字包含test字符串的文檔,包括文件和目錄
- find -name 'file*' -type d:查找的文檔為目錄類型
pwd
顯示當前路徑
- pwd
du
顯示目錄所占的內存
- du:顯示當前路徑下的目錄,目錄中的子目錄,總文件所占的內存
- du -s:顯示總文件所占的內存,結果"20 ."
- du -s *:顯示目錄和每一個文件所占的內存
chmod
權限的更改
rwx:分別問讀、寫、可執行的權限
ugo:分別為文檔擁有者,一組的人,和其余的人
- chmod o-r test2:給other其余人減去read的權限
- chmod g+w test1:給group一組的人添加寫的權限
- chmod go-r newtest3*:給group和other減去讀的權限
- chmod 754 test2:分別給ugo給754權限,7對應着111,即給所有的權限
grep
該命令常用於分析一行的信息,若當中有我們所需要的信息,就將該行顯示出來,該命令通常與管道命令一起使用,用於對一些命令的輸出進行篩選加工等等,比如可以加在ps, tail, cat后面
- grep Not ed-500.txt:在uk-500這個文檔行中查找Not所在的記錄並顯示出來
- more ed-500.txt | grep Not:用管道連接more和grep兩個命令,結果與上個命令相同
- more ed-500.txt | grep “Not”:結果與上個命令相同
- grep “West Ward” ed-500.txt:能正確查找出West Ward
- grep West Ward ed-500.txt:第一行會報錯,因為不能正確解讀空格的意思,只能查找出West##
文件重定向
- 執行程序grep West Ward ed-500.txt,會將默認的錯誤結果輸出到控制台屏幕上,因為STDERR的默認位置為控制台
- 大多數 UNIX 系統命令從你的終端接受輸入並將所產生的輸出發送回到您的終端。一個命令通常從一個叫標准輸入的地方讀取輸入,默認情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標准輸出,默認情況下,這也是你的終端。
- 需要注意的是文件描述符 0 通常是標准輸入(STDIN),1 是標准輸出(STDOUT),2 是標准錯誤輸出(STDERR)。
參考鏈接:http://www.runoob.com/linux/linux-shell-io-redirections.html
命令 | 說明 |
---|---|
command > file | 將輸出重定向到 file。 |
command < file | 將輸入重定向到 file。 |
command >> file | 將輸出以追加的方式重定向到 file。 |
n > file | 將文件描述符為 n 的文件重定向到 file。 |
n >> file | 將文件描述符為 n 的文件以追加的方式重定向到 file。 |
n >& m | 將輸出文件 m 和 n 合並。 |
n <& m | 將輸入文件 m 和 n 合並。 |
<< tag | 將開始標記 tag 和結束標記 tag 之間的內容作為輸入。 |
- grep West Ward ed-500.txt > myAddresses:將輸出重定向到myAdresses文件中,但是錯誤輸出還是在控制台
- grep West Ward ed-500.txt > myAddresses 2>&1:將STDOUT和STDERR都輸出到myAdresses文件中
- grep West Ward ed-500.txt > myAddresses 2> myErrors:將錯誤輸出到myErrors文件中
Piping的使用
- more ed-500.txt | grep “Manr”:在uk-500.txt文件中查找“Man”
- more ed-500.txt | grep “Man” | wc -l:查找“Man”之后統計個數
- more ed-500.txt | grep “Man” | sort > man.txt:將查找的結果按照所在記錄的首字母排序,並輸出到文件man.txt中
- more ed-500.txt | grep “[Not|Man]” :查找了所有包含在[]中的字符,而非字符串
- more ed-500.txt | grep [Not|Manr] :-bash: Man]: command not found grep: Unmatched [ or [^,因為shell想要解讀 “grep [Not” ,但解讀不出來, “|” 視為一個管道連接 “Man]” 命令,因此報錯
正則表達式中特殊字符
- * : 代表任意字符(0到多個)
- [ ] : 中間為字符組合,僅匹配其中任一一個字符
- ^string:表示以string開頭的字符
- string$:表示以string結尾的字符
- . :表示單個字符
grep
- 它在一個或多個文件中搜索字符串模板。
轉譯字符 \
- grep "St." ed-500.txt:其中的點表示的是任意單個字符
- grep "St\." ed-500.txt:其中.表示的就是一個點,字面的意思
使用$存放變量值
- export count=23 grep $count ed-500.txt:其中$count指的是23,查找23
- grep ‘$count’ ed-500.txt:查找結果什么都沒有,‘’防止了將$進行轉換,查找的任然是$count
echo
- echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。
顯示普通字符
- echo "It is a test":結果 It is a test
顯示轉義字符
- echo "\"It is a test\"":結果 "It is a test"
顯示換行
echo -e "OK! \n" # -e 開啟轉義
echo "It is a test"
結果:
OK!
It is a test
顯示不換行
echo -e "OK! \c" # -e 開啟轉義 \c 不換行
echo "It is a test"
結果:
OK! It is a test
原樣輸出字符串,不進行轉義或取變量,用單引號(')
- echo '$name\"':結果 $name\"
顯示命令執行結果,注意反引號(`)
- echo `date`:結果Thu Jul 24 10:08:46 CST 2014,
- 注意: 這里使用的是反引號 `, 而不是單引號 '。結果將顯示當前日期
- 反引號(`) 位於鍵盤的Tab鍵的上方,起命令替換的作用。命令替換也就是shell能夠將一個命令的標准輸出插在一個命令行中任何位置。
參考鏈接:https://www.runoob.com/linux/linux-shell-echo.html
單引號(')和雙引號(“)
- 如果沒有單引號或雙引號,shell會把空格后的字符串解釋為命令。
- 單引號和雙引號的區別。單引號告訴shell忽略所有特殊字符,而雙引號忽略大多數,但不包括$、\、`。
實例:
testvalue=100
echo 'The testvalue is $testvalue'
The testvalue is $testvalue
echo "The testvalue is $testvalue"
The testvalue is 100
參考鏈接:https://blog.csdn.net/beginning1126/article/details/8633900