Linux基礎語法:
1. / :絕對路徑:/home/anaconda3
相對路徑:anaconda3
用戶home: ~
2. pwd :輸出當前工作目錄的全名
3. ls :列出目錄內容
ls -l :長清單格式
ls -a :所有條目
ls -d :列表目錄
ls -R :列出子目錄
ls -1 :一行顯示一個名字
ls -F :有分類的目錄,名字後面加字符(*【可執行的文件】、/【路徑】、@【鏈接】、|【兩個進程要用這個鏈接】、=【網絡連接socket】)
4. gedit :編輯文本文件
5. echo :查找環境變量
echo $PATH 環境變量(裏面全是路徑,分號是分隔符,Windows和Linux都是path作爲環境變量)
6. printenv :打印出所有的環境變量(都是XXX=xxx的格式)
7. grep :幫助查找(printenv | grep PATH 把前面的的輸出作爲後面的輸入)
grep -i :不區分大小寫的搜索
grep -w :只匹配完整的單詞
grep -l :只顯示匹配的文件名
grep -r :在當前目錄和所有子目錄中搜索
grep -n :用行號列出匹配的行
grep -v :反操作,顯示不匹配的項目
grep --color :顯示匹配的顏色
grep --include :通過名字類型查找文件
舉例子:
printenv | grep path :查找名字是path的環境變量
printenv | grep -i path :不區分大小寫的查找名字是path的環境變量
grep -ir python . :從當前路徑開始找所有包含python的文件;r是一直找下去;.是很特殊的路徑指當前路徑;..是指父親的路徑;要是想查找一段文字要用引號引起來 ”python path name”
grep -ir python file1 :在file1中找到python文件
grep -ir “python$” . :從當前路徑查找以python結尾的
grep -ir --include *.py math ~ :--include *.py表示只看.py結尾的文件,其他不看;math是要找的東西;~是從home裏面找
8. man :說明書菜單,可以解釋命令的用法
9. env :也是查詢(env | less :只顯示一頁可以用鍵盤的上一頁下一頁來控制頁面的顯示;env | more和less功能一樣,但是less更強大,因爲more要把所有的文件都緩存到內存裏纔開始顯示,而less是有多少先顯示多少)
10. | :是管道的意思,把前面的輸出作爲後面的輸入,可以接很多個
11. clear :把屏幕清掉
12. file :鑑定文件類型,是個鏈接,連接到另外一個地方去,看文件裏面是什麼
13. wc :統計命令
wc -w :統計有多少字
wc -I :統計有多少行
wc -L :統計最長的一行有多長
ls –1F | grep “*” | wc –I(*是特殊字符,所以使用時候要加””)
【很常用,統計有多少條命令】
ls –1F | grep “@” | wc –I(*是特殊字符,所以使用時候要加””)
【很常用,統計有多少條鏈接】
14. head : 列舉文件的頭幾行,查看文件時會用到
head -5 zipfile.py:顯示開始的幾行
15. tail :顯示尾巴上的幾行
tail -f file:實時跟蹤文件的最後幾行
16. mkdir :創建目錄路徑;要創造一整套的路徑
mkdir –p ~/tmp3/abc/xyz不用分別創建,直接輸命令就可以
17. tree ;可以吧當前路徑寫成樹的形式
18. cp :複製文件或者路徑
cp ~/anaconda3/lib/python3.6/zip* . 複製該文件到當前文件夾下
cp f1 f2 複製f1到f2中
cp –r d1 d2 把d1和它的子文件都複製到d2中
19. cat :把幾個文件合併爲同一個文件生成一個新的
cat zip* > my.py 把cat和zip合起來公洞放到my.py中去
cat –n my.py 顯示一個文件,把行號也顯示出來
20. 標準輸入stdin標識爲0輸出,輸出要輸出兩個,一個是正常輸出stdout標識爲1,一個輸出錯誤信息stderr標識爲2
< 重定向進命令
> 重定向輸出到文件中去,並且重寫
>> 重定向輸出到文件中去,但是不重寫,附加
2> 重定向輸出到文件中去,輸出的是錯誤的,並且重寫
2>>重定向輸出到文件中去,輸出的是錯誤的,但是不重寫
ls ~ /Toronto > ~/out.txt 2> ~/err.txt
生成兩個新的文件,錯誤信息輸到err.txt,正確信息輸到out.txt
21. hexdump :把文件原始的數字顯示出來,十六進制
hexdump -C my.py 按字符把所有的數字輸出出來
22. which :給出命令的原始路徑
23. ln :軟鏈接連接到文件,可以直接到那個位置
24. sudo :升級成超級root用戶
sudo ls -alR /root
顯示root下的所有文件,並且包含所有子路徑
25. tar :打包和解壓
tar czvf demo.tar.gz * 把當前路徑下所有東西打包放到demo.tar.gz中
tar xzvf demo.tar.gz * 把demo.tar.gz中的所有東西都取出來放到當前路徑下
# extract all files in demo.tar.gz into current directory
26. find :找文件
find / -name 'tar' 從/這個文件下找名字是tar的文件
find ~/tmp -name '*.txt' -type f -exec d -C {} \; 從~/tmp 文件下找名字是*.txt類型是文件並且執行命令
-name 後面加名字
-type 後面加類型
-exec 後面加想要執行的命令,前面找到的東西是後面命令的輸
\; 表示命令的結束
27. date :輸出或者設置日期和時間
date +%Y-%m-%d 年月日2017-12-23和%F一樣
date +%H:%M:%S 時分秒13:29:03和%T一樣
date +%I:%M:%S 以12小時來顯示當前的時分秒
date +%c 當前的本地系統時間
date -u UTC的日期和時間
date -R RFC-2822格式的時間
date -Iseconds ISO-8601格式的時間輸出到秒,如果最後是Iminutes就是輸出到分鐘,注意是大寫的i:I
28. cut :把一串字符串切開
date -u | cut -d ' ' -f2,3,6 把時間,以空格爲工具來切並且取出第2個,第3個和第六個域但是空格和空格相連也會把空格選出來
cut -d ' ' -f1,2 /etc/mtab 把/etc/mtab裏的文件,以空格爲工具來切並且取出第1個,第2個
29. tr :轉換,壓縮,刪除字符串
date -u | tr 'a-z' 'A-Z'將所有的輸出都轉換成大寫
echo 'abcdefg' | tr7 -d 'b-e' 把b到e之間的都刪掉
echo 'abbbbg' | tr -s 'b' 把中間重複的b壓縮成一個
30. nohup :當窗口退出的時候,使得命令繼續執行;該命令將不接收輸入,所有輸出,包括任何錯誤消息,都將寫入文件nohu .out;該命令將作爲前臺進程運行,後面跟着&時在後臺處理
nohup jupyter notebook & 在後臺運行jupyter notebook
nohup comm >/dev/null 2>&1 & 在後臺運行comm >/dev/null:把輸出輸到/dev/null;2>&1:把錯誤輸出和標準輸出輸出到一起
31. ps :顯示當前進程的信息
ps aux 顯示所有的進程
ps -x 只是顯示自己的進程
ps -e --forest 用樹的形式顯示進程
ps -eo pid,user,cmd 有選擇的查看進程。Pid:進程id;user:哪個用戶啓動的;cmd:查看命令行
32. kill :送一個信號給進程,用來關閉或者其他操作
kill -l 顯示可以使用的信號
kill -9 1234 發送無條件終止信號給ID爲1234的進程
kill 1234 發送終止信號給ID爲1234的進程
33. passwd :設置、修改或者管理用戶密碼
34. 權限:
chmod :改變文件的權限
+ 增加權限
- 減少權限
= 設置權限
U,g,o,a user,group,other,all
1=x;3=wx;2=w;5=rx;4=r;6=rw;7=rwx
35. rm :移除文件或者路徑
rm dir/file 刪除dir中的文件
rm -r dir 刪除dir和他的內容
rm -d dir 刪除空的dir
36. rmdir :刪除路徑
rmdir tmp/d1/d2 d2會被刪除
rmdir -p tmp/d1/d2 tmp,d1,d2都會刪除
37. ping :發送ICMP ECHO_REQUEST給網絡用戶
Shell腳本:
是一個包含一系列命令的文本文件
1. for循環
$*給你一個包含所有參數的字符串,不能在for循環中提供字符串列表,必須以"$*"開頭
echo "Command-line parameters: $*" 這是一個反射命令
$@提供for循環中的字符串列表
for arg in "$@" 這是一個for循環語句,arg是一個變量
do 從do到done是“for循環”主體
echo "arg: $arg" arg會被變量的值取代
done
2. while循環
$#提供參數的數量 -gt是大於0的意思
$0是命令本身
第一個參數是$1,第二個參數是$2
while [ $# -gt 0 ]; do 這是“while循環”,從do到done是它的主體
case $1 in 這是case語句,以esac結尾
-a | --aA )echo "Got $1" 如果$1的值是-a或-aA,則執行此塊;|:或者
;;
-b | --bB )echo "Got $1" 如果$1的值是-b或-bB,執行這個block
;;
* ) echo "Received $1" 所有其他情況執行此塊
esac
shift shift將刪除第一個參數,依次往後刪
done
3. var變量
本質上,Bash變量是字符串。
varA=1234 我們不需要聲明變量
varB=${varA/23/'A B C'} 把A中的23編程A B C並且輸出
var=${MYTEST} 環境變量可以直接使用
設置環境變量使用export MYTEST=233;想要查看使用env | grep MYTEST
thatVar=varA thatVar的值是一個變量的名字
var=${!thatVar} 間接引用;將varA的值賦給var,如果不加!就會直接取出thatVar中的值;加了!就是取出變量裏面變量的值
var=`ls -l` 將命令的結果賦值給變量
$? 上一個命令執行的結果
$$ 本身進程的ID
展開並計算(())之間的整數表達式
Bash允許對變量進行算術操作和比較。
決定因素是該值是否只含有數字
v1=123 v2=567
((var=$v1+$v2*890))
echo "var is: $var" 最後值是504753
4. 引號的使用
var=`ls -l` `用來執行,把結果給變量
echo $var 裏面空格作爲分隔符的值的集合,變量裏可以存放很多值
echo "$var" 雙引號括起來之後就是一個值了,變量裏原來是什麼就是什麼
echo '$var' 單引號括起來,輸出單引號裏面的值
for a in $var; do 循環裏的不加引號就是用空格分割開的值的集合
echo "=> $a"
done
for a in "$var"; do 用雙引號引起來裏面就一個值,就是$var一個值
echo "=> $a"
done
5. if語句(命令和參數之間一定要用空格隔開)
if 結束妝臺 0代表真,其他代表假
then
if test 比較表達式或文件測試
then
if [ 比較表達式或文件測試 ] 單括號其實就是test
then
建議使用擴展測試命令。[[和]]是語言裏保留的字,並不是一個命令
if [[比較表達式或文件測試]]
then
實際操作中並不需要if語句
v1="Toronto" v2="Beijing"
[[ "$v1" != "$v2" ]] && echo "$v1 is not equal to $v2"
如果前面爲真就會執行後面的
v1=123 v2=45
[[ "$v1" -gt "$v2" ]] && echo "$v1 is greater than $v2"
數字比較大小使用-gt,123更大
[[ "$v1" > "$v2" ]] || echo "$v2 is greater than $v1"
字符串比較使用符號。45更大,因爲4比1大
dir=~/xyz
[[ -d "$dir" ]] || echo "directory $dir does not exist"
-d表示看看後面的是不是可以執行成一個路徑,如果前面爲假纔會執行後面的
file=~/tmp/readMe.txt
[[ ! -f "$file" ]] && echo "file $file not found."
-f表示看看後面的是不是一個文件
v1=$1 && [[ -z "$v1" ]] && v1=DEFAULT
-z表示查詢後面的裏面有沒有值,如果命令行有值就用命令行裏的值,如果沒值就用給的值