Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 www.欧美在线,亚洲人成一区二区不卡,国产jizz18高清视频

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          一篇文章從了解到入門shell

          一篇文章從了解到入門shell

          、shell介紹

          shell 俗稱叫做殼,計(jì)算機(jī)的殼層,和內(nèi)核是相對(duì)的,用于和用戶交互,接收用戶指令,調(diào)用相應(yīng)的程序。

          因此,把shell分為2大類

          1.1、圖形界面shell(Graphical User Interface shell 即 GUI shell)

          也就是用戶使用GUI和計(jì)算機(jī)核交互的shell,比如Windows下使用最廣泛的Windows Explorer(Windows資源管理器),Linux下的X Window,以及各種更強(qiáng)大的CDE、GNOME、KDE、 XFCE。

          他們都是GUI Shell。

          1.2、命令行式shell(Command Line Interface shell ,即CLI shell)

          也就是通過命令行和計(jì)算機(jī)交互的shell。 Windows NT 系統(tǒng)下有 cmd.exe(命令提示字符)和近年來微軟大力推廣的 Windows PowerShell。 Linux下有bash / sh / ksh / csh/zsh等 一般情況下,習(xí)慣把命令行shell(CLI shell)直接稱做shell,以后,如果沒有特別說明,shell就是指 CLI shell,后文也是主要講Linux下的 CLI shell。

          2、交互方式

          根據(jù)交互方式的不一樣,命令行式shell(CLI shell),又分為交互式shell和非交互式shell。

          2.1、交互式shell

          交互式模式就是shell等待你的輸入,并且執(zhí)行你提交的命令,然后馬上給你反饋。這種也是我們大多數(shù)時(shí)候使用的。

          2.2、非交互式shell

          非交互式shell,就是把shell放在寫在一個(gè)文件里面,執(zhí)行的時(shí)候,不與用戶交互,從前往后依次執(zhí)行,執(zhí)行到文件結(jié)尾時(shí),shell也就終止了。

          3、shell的種類

          在Linux下 ,各種shell百花齊放,種類繁多,不同的shell,也有不同的優(yōu)缺點(diǎn)。 我們要查看當(dāng)前系統(tǒng)下支持的shell,可以讀取/etc/shells文件。

          3.1、bash

          Bourne Again Shell 用來替代Bourne shell,也是目前大多數(shù)Linux系統(tǒng)默認(rèn)的shell。

          3.2、sh

          Bourne Shell 是一個(gè)比較老的shell,目前已經(jīng)被/bin/bash所取代,在很多l(xiāng)inux系統(tǒng)上,sh已經(jīng)是一個(gè)指向bash的鏈接了。 下面是CentOS release 6.5 的系統(tǒng)

          3.3、csh/tcsh

          C shell 使用的是“類C”語法,csh是具有C語言風(fēng)格的一種shell,tcsh是增強(qiáng)版本的csh,目前csh已經(jīng)很少使用了。

          3.4、ksh

          最早,bash交互體驗(yàn)很好,csh作為非交互式使用很爽,ksh就吸取了2者的優(yōu)點(diǎn)。

          3.5、zsh

          zsh網(wǎng)上說的目前使用的人很少,但是感覺使用的人比較多。 zsh本身是不兼容bash的,但是他可以使用仿真模式(emulation mode)來模擬bash等,基本可以實(shí)現(xiàn)兼容。 在交互式的使用中,目前很多人都是zsh,因?yàn)閦sh擁有很強(qiáng)大的提示和插件功能,炫酷吊炸天。推薦在終端的交互式使用中使用zsh,再安利一個(gè)插件Oh My Zsh 其實(shí)我個(gè)人的理解是,在終端中使用shell,基本上只是調(diào)用各種命令,比如:curl cat ls等等,基本不會(huì)使用到zsh的編程,所以終端中使用zsh是可以的。但是在寫shell腳本的時(shí)候,需要考慮兼容性, 最主流的還是bash shell,所以,后文我們介紹的shell腳本也是bash shell的。

          4、shell腳本

          4.1、基礎(chǔ)

          #!/bin/bash
          echo "Hello World !"
          

          #!:是一個(gè)特殊的標(biāo)記,表明使用啥解釋器來執(zhí)行,比如這里使用了:/bin/bash 來執(zhí)行這個(gè)腳本。 #:只用一個(gè)#,就是注釋 echo:輸出 我們把上面的腳本保存成一個(gè)文件, 1.sh 后面的這個(gè)sh是shell腳本的擴(kuò)展名。 然后要怎嚒來執(zhí)行呢?執(zhí)行一個(gè)shell腳本有很多種方式:

          • sh 1.sh 這樣可以直接執(zhí)行這個(gè)1.sh
          • 也可以直接 ./1.sh ,但是這種要注意,才編輯好的文件這樣執(zhí)行可能會(huì)報(bào)錯(cuò)

          這個(gè)是因?yàn)闆]有這個(gè)腳本沒有執(zhí)行權(quán)限,運(yùn)行 chmod a+x 1.sh 加上執(zhí)行權(quán)限即可。 這里順帶說一下,為啥直接運(yùn)行1.sh不行呢?因?yàn)樗J(rèn)是去PATH里面找程序,當(dāng)前目錄,一般都不在PATH里面。所以直接運(yùn)行1.sh就回報(bào)找不到文件。

          • 還可以使用類似curl http://xxxxx.xxx/xxx.sh|sh 這樣的方式,來執(zhí)行遠(yuǎn)程的腳本

          根據(jù)測(cè)試,#!/bin/bash 的標(biāo)記,只是針對(duì)第二種方式 ./xxx.sh的方式有效。本文中代碼,第一行均為這個(gè)標(biāo)記,為了節(jié)約篇幅,已經(jīng)省略.

          執(zhí)行并獲取返回結(jié)果,有點(diǎn)類似JavaScript 的eval函數(shù)。

          #!/bin/bash
          dt=`date` #反引號(hào)內(nèi)的字符串會(huì)當(dāng)作shell執(zhí)行 ,并且返回結(jié)果。
          echo "dt=${dt}"
          

          4.2、Shell 變量

          shell的使用比較簡(jiǎn)單,就像這樣,并且沒有數(shù)據(jù)類型的概念,所有的變量都可以當(dāng)成字符串來處理:

          #!/bin/bash
          myName="tom"
          youName="cat"
          

          不需要申明,直接寫就可以了,但是有幾個(gè)點(diǎn)需要特別注意:

          • 等號(hào)兩邊不能有空格?。。√貏e要注意,非常容易寫錯(cuò)
          • 命名只能使用英文字母,數(shù)字和下劃線,首個(gè)字符不能以數(shù)字開頭。
          • 中間不能有空格,可以使用下劃線(_)。
          • 不能使用標(biāo)點(diǎn)符號(hào)。
          • 不能使用bash里的關(guān)鍵字。

          使用變量

          ABC="tom"
          echo $ABC #使用變量前面加$美元符號(hào)
          echo "ABC=$ABC" #可以直接在字符串里面引用
          echo "ABC=${ABC}" #但是建議把變量名字用{}包起來
          

          只讀變量

          ABC="tom"
          echo "ABC=${ABC}"
          readOnly ABC #設(shè)置只讀
          ABC="CAT" #會(huì)報(bào)錯(cuò),因?yàn)樵O(shè)置了只讀,不能修改
          

          刪除變量

          ABC="tom"
          echo "ABC=${ABC}"
          unset ABC #刪除
          echo "ABC=$ABC" 
          echo "ABC=${ABC}" 
          

          從這個(gè)例子當(dāng)中,我們也發(fā)現(xiàn),使用一個(gè)不存在的變量,shell不會(huì)報(bào)錯(cuò),只是當(dāng)作空來處理。

          4.3、Shell 的字符串

          使用字符串

          NAME="tom"
          A=my #你甚至可以不用引號(hào),但是字符串當(dāng)中不能有空格,這種方式也不推薦
          B='my name is ${NAME}' #變量不會(huì)被解析
          C="my name is ${NAME}" #變量會(huì)解析
          echo $A
          echo $B
          echo $C
          

          執(zhí)行結(jié)果

          我們可以發(fā)現(xiàn),這個(gè)字符串的單雙號(hào)和PHP的處理非常類似,單引號(hào)不解析變量,雙引號(hào)可以解析變量。但是都可以處理轉(zhuǎn)義符號(hào)。

          A='my\nname\nis\ntom'
          B="my\nname\nis\ntom"
          echo $A
          echo $B
          

          執(zhí)行結(jié)果

          拼接字符串 其實(shí)shell拼接字符串,大概就是2種

          • 一是直接在雙引號(hào)內(nèi)應(yīng)用變量,類似模版字符串
          • 二是直接把字符串寫在一起,不需要類似Java鏈接字符串的“+” 和PHP鏈接字符串的“.”
          NAME="TOM"
          # 使用雙引號(hào)拼接
          echo "hello, "$NAME" !" #直接寫在一起,沒有字符串連接符
          echo "hello, ${NAME} !" #填充模版
          # 使用單引號(hào)拼接
          echo 'hello, '$NAME' !' #直接寫在一起,沒有字符串連接符
          echo 'hello, ${NAME} !' #上面已經(jīng)提高過,單引號(hào)里面的變量是不會(huì)解析的
          

          強(qiáng)大的字符串處理 shell中簡(jiǎn)單的處理字符串,可以直接使用各種標(biāo)記,只是比較難記憶,要用的時(shí)候,可以查一下。

          ABC="my name is tom,his name is cat"
          echo "字符串長(zhǎng)度=${#ABC}" # 取字符串長(zhǎng)度
          echo "截取=${ABC:11}" # 截取字符串, 從11開始到結(jié)束
          echo "截取=${ABC:11:3}" # 截取字符串, 從11開始3個(gè)字符串
          echo "默認(rèn)值=${XXX-default}" #如果XXX不存在,默認(rèn)值是default
          echo "默認(rèn)值=${XXX-$ABC}" #如果XXX不存在,默認(rèn)值是變量ABC
          echo "從開頭刪除最短匹配=${ABC#my}" # 從開頭刪除 my 匹配的最短字符串
          echo "從開頭刪除最長(zhǎng)匹配=${ABC##my*tom}" # 從開頭刪除 my 匹配的最長(zhǎng)字符串
          echo "從結(jié)尾刪除最短匹配=${ABC%cat}" # 從結(jié)尾刪除 cat 匹配的最短字符串
          echo "從結(jié)尾刪除最長(zhǎng)匹配=${ABC%%,*t}" # 從結(jié)尾刪除 ,*t 匹配的最長(zhǎng)字符串
          echo "替換第一個(gè)=${ABC/is/are}" #替換第一個(gè)is
          echo "替換所有=${ABC//is/are}" #替換所有的is
          

          運(yùn)行結(jié)構(gòu)

          這里只是介紹了比較常用的一些字符串處理,實(shí)際shell支持的還有很多。

          4.4、數(shù)組

          Bash Shell 也是支持?jǐn)?shù)組的,與絕大部分語言一樣,數(shù)組下標(biāo)從0開始。不過需要注意的是,它只支持一維數(shù)組。 定義一個(gè)數(shù)組,用小括號(hào)闊氣來,當(dāng)中用“空格”分割,就像下面這樣:

          array=("item0" "item1" "item2")
          

          也可以根據(jù)下標(biāo)來定義元素

          array[0]="new_item0"
          array[1]="new_item1"
          array[2]="new_item2"
          array[4]="new_item4" #數(shù)組下標(biāo)可以是不連續(xù)的
          

          讀取數(shù)組元素,和變量類似

          echo ${array[0]}
          echo "array[0]=${array[0]}"
          

          獲取數(shù)組所有的元素

          echo "數(shù)組的元素為: ${array[*]}"
          echo "數(shù)組的元素為: ${array[@]}"
          

          獲取數(shù)組的長(zhǎng)度

          echo "數(shù)組的長(zhǎng)度為: ${#array[*]}"
          echo "數(shù)組的長(zhǎng)度為: ${#array[@]}"
          

          4.5、輸入輸出

          4.5.1、echo

          在上文中,其實(shí)我們已經(jīng)到多次,就是:echo “字符串” 來輸出,一個(gè)很簡(jiǎn)單的例子

          echo "Hello world!"
          

          如果當(dāng)中包含特殊符號(hào),可以使用轉(zhuǎn)義等:

          echo "Hello \nworld!"
          echo "\"Hello\""
          echo '"Hello"' #當(dāng)然,也可以這樣,單引號(hào)不轉(zhuǎn)義,上文提到過
          echo `date` #打印執(zhí)行date的結(jié)果
          echo -n "123" #加-n 表示不在末尾輸出換行
          echo "456"
          echo -e "\a處理特殊符號(hào)" #-e 處理特殊符號(hào)
          

          -n 讓echo輸出結(jié)束以后,在默認(rèn)不輸出換行符 -e 讓echo處理特殊符號(hào),比如:

          符號(hào)作用 \a發(fā)出警告聲 \b刪除前一個(gè)字符 \c后不加上換行符號(hào) \f換行但光標(biāo)仍舊停留在原來的位置 \n換行且光標(biāo)移至行首 \r光標(biāo)移至行首,但不換行 \t插入tab 上面的特殊符號(hào),寫到mac的shell腳本里面要注意,執(zhí)行的時(shí)候,要用bash執(zhí)行才有效 ,sh無效。

          當(dāng)然,你也可以玩一點(diǎn)更有趣的,就是我們隨時(shí)在終端中看到的五顏六色的文字:

          echo -e "\033[31m 紅色前景 \033[0m 缺省顏色" 
          echo -e "\033[41m 紅色背景 \033[0m 缺省顏色" 
          

          其中 3[是一個(gè)特殊標(biāo)記,表示終端轉(zhuǎn)義開始, 31m表示使用紅色字體,你也可以使用其他顏色,[30-39]是前景顏色,[40-49]是背景顏色。 3[0m回復(fù)到缺省設(shè)置 還可以有一些其他的動(dòng)作

          echo -e "\033[2J" #清除屏幕
          echo -e "\033[0q" #關(guān)閉所有的鍵盤指示燈
          echo -e "\033[1q" #設(shè)置"滾動(dòng)鎖定"指示燈(Scroll Lock)
          echo -e "\033[2q" #設(shè)置"數(shù)值鎖定"指示燈(Num Lock)
          echo -e "\033[1m" #設(shè)置高亮度
          echo -e "\033[4m" #下劃線
          echo -e "\033[7m" #反顯
          echo -e "\033[y;xH" #設(shè)置光標(biāo)位置 
          

          其他更多的特殊碼請(qǐng)自行查詢。

          4.5.2、read

          有輸出,必然有輸入,read命令接收標(biāo)準(zhǔn)輸入的輸入。

          read name
          echo "my name is ${name}"
          

          可以使用-p給一個(gè)輸入提示

          read -p "please input your name:" name
          echo "my name is ${name}"
          

          如果沒有指定輸入的變量,會(huì)把輸入放在環(huán)境標(biāo)量REPLY中

          read -p "please input your name:"
          echo "my name is ${REPLY}"
          

          計(jì)時(shí)輸入,如果一段時(shí)間沒有輸入 ,就直接返回,使用-t 加時(shí)間

          read -t 3 -p "please input your name in 3 senconds:" name
          

          指定輸入字符個(gè)數(shù),使用-n ,后面的是輸入字符個(gè)數(shù)

          read -n 1 -p "Are you sure [Y/N]?" isYes
          

          默讀(輸入不再監(jiān)視器上顯示),加一個(gè)-s參數(shù)。

          read -s -p "Enter your password:" password
          

          4.5.3、printf

          echo已經(jīng)比較強(qiáng)大,但是有的時(shí)候,我們需要用到字符串模版輸出,printf就比較好用了,他類似C里面的printf程序。 語法是:printf format-string [arguments...] 比如我們要輸出一個(gè)表格

          printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg 
          printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
          printf "%-10s %-8s %-4.2f\n" 楊過 男 48.6543 
          printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 
          

          運(yùn)行結(jié)果

          %s %c %d %f都是格式替代符 %-10s 指一個(gè)寬度為10個(gè)字符(-表示左對(duì)齊,沒有則表示右對(duì)齊),至少顯示10字符寬度,如果不足則自動(dòng)以空格填充,超過不限制。 %-4.2f 指格式化為小數(shù),其中.2指保留2位小數(shù)。

          4.5.4、重定向

          大多數(shù) UNIX 系統(tǒng)命令從你的終端接受輸入并將所產(chǎn)生的輸出發(fā)送回到您的終端。一個(gè)命令通常從一個(gè)叫標(biāo)準(zhǔn)輸入的地方讀取輸入,默認(rèn)情況下,這恰好是你的終端。同樣,一個(gè)命令通常將其輸出寫入到標(biāo)準(zhǔn)輸出,默認(rèn)情況下,這也是你的終端。

          命令作用 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將開始標(biāo)記 tag 和結(jié)束標(biāo)記 tag 之間的內(nèi)容作為輸入。 需要注意的是文件描述符 0 通常是標(biāo)準(zhǔn)輸入(STDIN),1 是標(biāo)準(zhǔn)輸出(STDOUT),2 是標(biāo)準(zhǔn)錯(cuò)誤輸出(STDERR)。

          輸出到文件

          echo "test">text.txt #直接輸出
          echo "test">>text.txt #追加在text.txt后面
          

          重定向輸入

          read a <<EOF
          "測(cè)試"
          EOF
          echo "a=$a"
          

          來個(gè)比較過分的

          cat < 1.sh > text.txt
          

          把1.sh文件的內(nèi)容出入到cat,然后cat在輸出到text.txt中,相當(dāng)于,把1.sh的內(nèi)容輸出到text.txt中了

          還有一種用法,把標(biāo)準(zhǔn)錯(cuò)誤直接輸出到標(biāo)準(zhǔn)輸出,并且輸出到文件file

          command > file 2>&1
          

          /dev/null 文件 這個(gè)是一個(gè)特殊文件,他是一個(gè)黑洞,寫入到它的內(nèi)容都會(huì)被丟棄,如果我們不關(guān)心程序的輸出,可以這樣

          command > /dev/null 2>&1
          

          4.6、條件判斷(if)

          和其他語言一樣,shell也有條件判斷

          單分支:

          if condition
          then
           command1 
           command2
           ...
          fi
          

          雙分支:

          if condition
          then
           command1 
           command2
           ...
          else
           command
          fi
          

          多分支:

          if condition1
          then
           command1
          elif condition2 
          then 
           command2
          else
           commandN
          fi
          

          比如

          if [ "2"=="2" ]; then # "2" 的2邊都有空格,不能省略 ,寫在一行,條件后面加一個(gè)分號(hào)
           echo "2==2"
          else
           echo "2!=2"
          fi
          

          需要特別注意:[ "2"=="2" ] 其中的"=="兩邊都有空格,不能省略,否則結(jié)果不正確。 判斷普通文件是否存在

          if [ -f "1.sh" ]; then # 判斷一個(gè)普通文件是否存在
           echo "1.sh 存在"
          fi
          

          判斷目錄是否存在

          if [ -d "1.sh" ]; then # 判斷一個(gè)目錄是否存在
           echo "1.sh 存在"
          fi
          

          判斷字符串長(zhǎng)度為0

          a=""
          if [ -z $a ]; then
           echo "a為空"
          fi
          

          4.7、()、(())、[]、[[]]和{}

          在shell中,有幾個(gè)符號(hào)要非常注意,用的也比較多,不要搞混了,搞混了,邏輯運(yùn)算很容易出錯(cuò)

          4.7.1、單小括號(hào)()

          • 命令組 括號(hào)中的命令將會(huì)新開一個(gè)子shell順序執(zhí)行,所以括號(hào)中的變量不能夠被腳本余下的部分使用。括號(hào)中多個(gè)命令之間用分號(hào)隔開,最后一個(gè)命令可以沒有分號(hào),各命令和括號(hào)之間不必有空格。
          a="123"
          (echo "123";a="456";echo "a=$a")
          echo "a=$a
          


          • 命令替換 發(fā)現(xiàn)了$(cmd)結(jié)構(gòu),便將$(cmd)中的cmd執(zhí)行一次,得到其標(biāo)準(zhǔn)輸出,再將此輸出放到原來命令。
          • 用于初始化數(shù)組 如:array=(a b c d)

          4.7.2、雙小括號(hào)(())

          • 運(yùn)算擴(kuò)展,比如,你可以
          a=$((4+5)) 
          echo "a=$a"
          
          • 做數(shù)值運(yùn)算,重新定義變量
          a=5
          ((a++))
          echo "a=$a"
          
          • 用于算術(shù)運(yùn)算比較
          if ((1+1>1));then
           echo "1+1>1"
          fi
          

          4.7.3、單中括號(hào)[]

          • 用于字符串比較 需要注意,用于字符串比較,運(yùn)算符只能是==和!=,需要注意,運(yùn)算符號(hào)2邊必須有空格,不然結(jié)果不正確?。。”热纾?/li>
          if [ "2"=="2" ]; then # "2" 的2邊都有空格,不能省略
           echo "2==2"
          else
           echo "2!=2"
          fi
          
          • 用于整數(shù)比較 需要注意,整數(shù)比較,只能用-eq,-gt這種形式,不能直接使用大于(>)小于(<)符號(hào)。只能用于整形。
          if [ 2 -eq 2 ]; then
           echo "2==2"
          else
           echo "2!=2"
          fi
          
          • 符號(hào)表
          • 符號(hào)運(yùn)算 -eq等于 -ne不等于 -gt大于 -ge大于等于 -lt小于 -le小于等于
          • 多個(gè)邏輯組合 -a 表示and 與運(yùn)算 -o 表示or 或運(yùn)算
          if [ "2"=="2" -a "1"=="1" ]; then #注意,在這里,不能是[ "2"=="2" ] -a [ "1"=="1" ] 會(huì)報(bào)錯(cuò)
           echo "ok"
          fi
          

          4.7.4、雙中括號(hào)[[]]

          [[是 bash 程序語言的關(guān)鍵字。并不是一個(gè)命令,[[ ]] 結(jié)構(gòu)比[ ]結(jié)構(gòu)更加通用。

          • 字符串匹配時(shí)甚至支持簡(jiǎn)單的正則表達(dá)式
          if [[ "123"==12* ]]; then #右邊是正則不需要引號(hào)
           echo "ok"
          fi
          
          • 支持對(duì)數(shù)字的判斷,是支持浮點(diǎn)型的,并且可以直接使用<、>、==、!=符號(hào)
          if [[ 2.1 > 1.1 ]]; then
           echo "ok"
          fi
          
          • 多個(gè)邏輯判斷 可以直接使用&&、||做邏輯運(yùn)算,并且可以在多個(gè)[[]]之間進(jìn)行運(yùn)算
          if [[ 1.1 > 1.1 ]] || [[ 1.1==1.1 ]]; then
           echo "ok"
          fi
          

          4.7.5、大括號(hào){}

          • 統(tǒng)配擴(kuò)展
          touch file_{1..5}.txt #創(chuàng)建new_1.txt	new_2.txt	new_3.txt	new_4.txt	new_5.txt 5個(gè)文件
          

          4.8、循環(huán)

          4.8.1、for循環(huán)

          語法格式為:

          for a in "item1" "item2" "item3"
          do
           echo $a
          done
          

          輸出當(dāng)前目錄下 .sh結(jié)尾的文件

          for a in `ls ./`
          do
           if [[ $a==*.sh ]]
           then
           echo $a
           fi
          done
          

          4.8.2、for循環(huán)

          語法

          while condition
          do
           command
          done
          

          我們要輸出1-10000

          int=1;
          while(($int<=10000))
          do
           echo $int
           ((int++))
          done
          

          4.8.3、until循環(huán)

          語法

          until condition
          do
           command
          done
          

          用法類似,這里不再贅述。 循環(huán)中 continue命令與break作用和其他語言中類似。

          4.9、case

          case和其他語言switch類型,多分支,選擇一個(gè)匹配。匹配發(fā)現(xiàn)取值符合某一模式后,其間所有命令開始執(zhí)行直至 ;;,有點(diǎn)類型Java的break。如果無一匹配模式,使用星號(hào) * 捕獲該值,再執(zhí)行后面的命令。

          echo '輸入 1 到 4 之間的數(shù)字:'
          echo '你輸入的數(shù)字為:'
          read aNum
          case $aNum in
           1) echo '你選擇了 1'
           ;;
           2) echo '你選擇了 2'
           ;;
           3) echo '你選擇了 3'
           ;;
           4) echo '你選擇了 4'
           ;;
           *) echo '你沒有輸入 1 到 4 之間的數(shù)字'
           ;;
          esac
          

          4.10、函數(shù)

          shell也可以用戶定義函數(shù),然后在shell腳本中可以隨便調(diào)用。 注意:所有函數(shù)在使用前必須定義。這意味著必須將函數(shù)放在腳本開始部分,直至shell解釋器首次發(fā)現(xiàn)它時(shí),才可以使用。調(diào)用函數(shù)僅使用其函數(shù)名即可。 語法格式如下:

          [function] funname()
          {
           cmd....
           [return int]
          }
          

          一個(gè)最簡(jiǎn)單的函數(shù)

          Line(){
           echo "--------分割線--------"
          }
          echo "123"
          Line
          echo "456"
          

          在Shell中,調(diào)用函數(shù)時(shí)可以向其傳遞參數(shù)。 在函數(shù)體內(nèi)部,通過 $n 的形式來獲取參數(shù)的值,例如,表示第一個(gè)參數(shù),表示第二個(gè)參數(shù)... 調(diào)用的時(shí)候 ,函數(shù)名,參數(shù)直接用空格分割開。 帶參數(shù)的函數(shù)示例:

          out(){
           echo "1-->$1"
           echo "2-->$2"
          }
          out 1 2 #調(diào)用的之后
          

          還有一些其他的特殊符號(hào)需要注意

          符號(hào)作用 $#傳遞到腳本的參數(shù)個(gè)數(shù) $*以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù) $$腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào) $!后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào) $@與$*相同,但是使用時(shí)加引號(hào),并在引號(hào)中返回每個(gè)參數(shù)。 $?顯示最后命令的退出狀態(tài)。0表示沒有錯(cuò)誤,其他任何值表明有錯(cuò)誤。 所以我們可以寫一個(gè)代碼參數(shù),返回值的函數(shù)

          out(){
           echo "全部參數(shù)$*"
           for item in $*
           do
           echo "$item"
           done
           return $# #這類返回參數(shù)個(gè)數(shù),返回值必須是整數(shù)
          }
          out this is perfect
          echo "函數(shù)返回值:$?"
          

          4.11、shell傳遞參數(shù)

          我們可以在執(zhí)行 Shell 腳本時(shí),向腳本傳遞參數(shù),腳本內(nèi)獲取參數(shù)的格式為:$n。n 代表一個(gè)數(shù)字,1 為執(zhí)行腳本的第一個(gè)參數(shù),2 為執(zhí)行腳本的第二個(gè)參數(shù),以此類推…… 除了參數(shù)可以使用特殊符號(hào),也可以使用上文中函數(shù)所使用的特殊符號(hào),這里不再贅述

          echo "執(zhí)行的文件名:$0";
          echo "全部參數(shù):$*"
          echo "參數(shù)個(gè)數(shù):$#"
          echo "第一個(gè)參數(shù)為:$1";
          echo "第二個(gè)參數(shù)為:$2";
          echo "第三個(gè)參數(shù)為:$3";
          

          5、其他實(shí)用技巧

          shell腳本,他本身的功能并不強(qiáng)大,強(qiáng)大的是他可以調(diào)用其他程序,而在Linux下,系統(tǒng)自帶的就有非常多的強(qiáng)大工具可以調(diào)用。

          5.1、后臺(tái)執(zhí)行

          后臺(tái)執(zhí)行一個(gè)腳本只需要在后面加上&符號(hào)即可,我們先用之前學(xué)習(xí)的,寫一個(gè)腳本,1s輸出一個(gè)數(shù)字

          #!/bin/bash
          int=1
          while :
          do
           echo $int
           ((int++))
           sleep 1s #睡眠一秒
          done
          

          我們執(zhí)行sh d.sh & 我們發(fā)現(xiàn),的確會(huì)后臺(tái)輸出,但是會(huì)輸出到當(dāng)前控制臺(tái),我們可以用之前學(xué)的重定向,把輸出重定向到文件

          sh d.sh > out.log 2>&1 &

          這樣就把輸出和錯(cuò)誤重新定向到out.log文件了 但是,我們發(fā)現(xiàn),關(guān)閉終端以后,文件就不輸出了。 當(dāng)我們端口連接遠(yuǎn)程主機(jī)的session或者關(guān)閉當(dāng)前終端的時(shí)候, 會(huì)產(chǎn)生一個(gè)SIGHUP信號(hào) ,導(dǎo)致程序退出,我們可以使用nuhup來忽略這個(gè)信號(hào) ,達(dá)到真正的后臺(tái)。

          nuhup sh d.sh > out.log 2>&1 &

          這樣啟動(dòng)程序,就可以打到真正后臺(tái)運(yùn)行了。 那么問題來了,我們驗(yàn)證程序在后臺(tái)運(yùn)行呢?要怎嚒結(jié)束后臺(tái)程序呢?請(qǐng)繼續(xù)看。

          5.2、cat

          在本文中,我們已經(jīng)多次用到cat,他的作用就是讀取文件輸出到標(biāo)準(zhǔn)輸出上,也就是我們的終端。 語法是:

          cat [option] file

          我們也可以使用:cat -n file ,來輸出行號(hào)。

          5.2、tail

          類似上面的例子,我們要驗(yàn)證程序是不是在后臺(tái),每一秒輸出一個(gè)數(shù)字到文件,使用cat讀取,需要不斷的多次查看,一次cat只能輸出一次。 tail非常適合查看這種日志類文件,他的作用是讀取文件末尾幾行輸出到標(biāo)準(zhǔn)輸出上。 tail out.log 默認(rèn)顯示10行,可以使用參數(shù)-n指定行數(shù) tail -20 out.log 顯示文件末尾20行 tail -f out.log 持續(xù)監(jiān)控文件out.log,如果有變化,他會(huì)試試的顯示在我們的屏幕上面。

          5.3、ps

          ps,查詢進(jìn)程 這個(gè)命令參數(shù)比較多,列舉幾個(gè)比較常用的

          參數(shù)作用 a顯示終端上的所有進(jìn)程,包括其他用戶的進(jìn)程。 u顯示面向用戶的格式信息。 x顯示沒有控制終端的進(jìn)程。 一般查詢,使用 ps aux就可以了,查詢出來比較多,可以篩選一下。 這里我們使用 ps u 就可以查詢出我們剛才開啟的后臺(tái)進(jìn)程了。

          我們看到我們剛才啟動(dòng)的程序PID為7523, 使用kill命令就可以殺死他了

          5.4、kill

          kill命令比較簡(jiǎn)單,就是根據(jù)PID結(jié)束一個(gè)程序,比如我們已經(jīng)查詢到,我們開的后臺(tái)進(jìn)行是7523,要結(jié)束他可以使用: kill 7523 以上是常用用法,其實(shí)kill是給程序發(fā)送一個(gè)信號(hào),上面的程序給會(huì)程序發(fā)送一個(gè)SIGTERM信號(hào),程序收到這個(gè)信號(hào),完成資源的釋放,就退出了。 但是也有程序不聽話,收到信號(hào)就是不退出,這個(gè)時(shí)候,就要強(qiáng)制他退出,使用9號(hào)命令(SIGKILL),強(qiáng)制殺死他。 簡(jiǎn)單的說 kill PID 是告訴程序,你應(yīng)該退出了,請(qǐng)自己退出。 kill -9 PID ,是直接告訴程序,你被終結(jié)了,這個(gè)命令信號(hào),不能被抓取或者忽略。

          6、總結(jié)

          • shell使用的比較少,但是特別強(qiáng)大;
          • shell對(duì)語法比較敏感,并且應(yīng)為解釋器很多,每個(gè)解釋器語法標(biāo)準(zhǔn)也可能不完全一致;
          • 使用到的編號(hào)、編碼、參數(shù)特別多,并且都是簡(jiǎn)寫,很多記不住。其實(shí)不用死記硬背,記住有這個(gè)功能就可以了,需要用到的時(shí)候再查詢。

          文章來源:http://blog.zjiecode.com/2019/04/15/shell/

          寫前面的博文的時(shí)候,我發(fā)現(xiàn)MongoDB shell提供了很多方法,其中MongoDB的很多方法也在其中,下面是我從MongoDB官網(wǎng)上查到的所有MongoDB shell的所有方法,當(dāng)然,我不會(huì)對(duì)每個(gè)方法進(jìn)行詳細(xì)解釋,因?yàn)樘嗔恕N視?huì)將方法功能說明白,并且把官網(wǎng)連接掛在后面,有興趣的可以點(diǎn)進(jìn)去看一下。由于個(gè)人翻譯水平有限,可能有些翻譯文不及意,忘海涵!

          對(duì)于查看方法有一個(gè)小技巧,就是我們使用shell或在linux系統(tǒng)里面想要查看某個(gè)對(duì)象能夠調(diào)用的所有方法時(shí)可以使用:對(duì)象.+tab+tab,如圖db對(duì)象能夠調(diào)用的所有方法和集合(后面帶半括號(hào)的都是方法,不帶半括號(hào)的都是對(duì)象):

          下面開始:

          集合方法(Collection Methods)

          注:db.collection.*==db.要操作的集合名稱.*

          方法名方法功能官網(wǎng)連接db.collection.aggregate(pipeline, options)計(jì)算集合或視圖中的數(shù)據(jù)的聚合值。鏈接db.collection.bulkWrite()3.2版本,控制多個(gè)操作順序執(zhí)行寫入操作鏈接db.collection.copyTo(newCollection)3.0版本以后不建議使用,使用服務(wù)器端的javascript將當(dāng)前集合中的所有文檔復(fù)制到newCollection中。如果newCollection不存在,mongodb會(huì)自動(dòng)創(chuàng)建。鏈接db.collection.count(query, options)根據(jù)查詢條件和限制條件,獲取符合條件的文檔數(shù)鏈接db.collection.createIndex(keys, options)在集合中創(chuàng)建索引,3.2版本修改:mongodb不允許創(chuàng)建0版本索引。若要升級(jí)現(xiàn)有的0版本索引,請(qǐng)參考 Version 0 Indexes鏈接db.collection.createIndexes([keyPatterns, ]options)3.2版本新功能,在集合上創(chuàng)建一個(gè)或多個(gè)索引鏈接db.collection.dataSize()返回當(dāng)前集合的數(shù)據(jù)量大小,此方法提供了一個(gè)包裹c(diǎn)ollStats(即db.collection.stats()命令的大小輸出的包裝器鏈接db.collection.deleteOne(filter,[writeConcern],[collation])從集合中刪除單個(gè)文檔鏈接db.collection.deleteMany(filter,[writeConcern],[collation])刪除所有與篩選器匹配的文檔鏈接db.collection.distinct(field, query, [options])在單個(gè)集合或視圖中找到指定字段的不同值列表,并返回?cái)?shù)組中的結(jié)果。鏈接db.collection.drop()從數(shù)據(jù)庫中刪除一個(gè)集合或視圖,該方法還會(huì)刪除與已刪除集合關(guān)聯(lián)的任何索引。該方法提供了包裹drop命令的包裝器鏈接db.collection.dropIndex(index)從集合中刪除指定索引,該方法提供了包裹dropIndexes命令的包裝器鏈接db.collection.dropIndexes()刪除除_id字段上的必需索引以外的所有索引。只調(diào)用dropIndexes()作為集合對(duì)象上的方法。警告:此命令在受影響數(shù)據(jù)庫中獲得寫入鎖,并將阻止其他操作直到完成為止。鏈接db.collection.ensureIndex(keys, options)如果索引未存在,則在指定字段上創(chuàng)建索引。3.0.0版本以后不建議使用:該方法更名為createIndex()。鏈接db.collection.explain()3.0版本新功能,3.0版本添加 db.collection.distinct()支持。返回下列操作的查詢計(jì)劃的信息: aggregate(); count(); distinct(); find(); group(); remove(); 和 update()方法。鏈接db.collection.find(query, projection)在集合或視圖中查詢符合條件的文檔,并返回選定文檔的游標(biāo)。鏈接db.collection.findAndModify(document)修改并返回單個(gè)文檔。默認(rèn)情況下,返回的文檔不包含更新上所做的修改。若要使用更新上的修改返回文檔,請(qǐng)使用新參數(shù)。鏈接db.collection.findOne(query, projection)返回滿足集合或視圖上指定的查詢條件的文檔列表的磁盤上文檔順序的自然順序的第一個(gè)文檔。在覆蓋集合中,自然順序與插入順序相同。如果沒有文檔滿足查詢,則該方法返回null。鏈接db.collection.findOneAndDelete(filter, options)3.2版本新功能,根據(jù)篩選條件刪除第一個(gè)惡文檔,并返回已刪除的文檔。鏈接db.collection.findOneAndReplace(filter, replacement, options)3.2版本新功能,根據(jù)篩選條件替換第一個(gè)文檔鏈接db.collection.findOneAndUpdate(filter, update, options)3.2版本新功能,根據(jù)篩選器條件更新第一個(gè)文檔。鏈接db.collection.getIndexes()返回當(dāng)前集合中現(xiàn)有索引的文檔列表數(shù)組。您必須在集合上調(diào)用該方法。鏈接db.collection.getShardDistribution()打印一個(gè)sharded集合的分布統(tǒng)計(jì)數(shù)據(jù),您必須在sharded集合上調(diào)用該方法鏈接db.collection.getShardVersion()當(dāng)我們?cè)\斷sharded集群基礎(chǔ)問題時(shí),返回關(guān)于sharded集群的有用的狀態(tài)信息。僅用于內(nèi)部診斷鏈接db.collection.group({ key, reduce, initial [, keyf] [, cond] [, finalize] })將集合中的文檔按指定鍵進(jìn)行組,并執(zhí)行簡(jiǎn)單聚合函數(shù),該方法類似于sql中語句的SELECT <…> GROUP BY語句,3.4版本不建議使用:3.4版本重新定義了該方法. 使用aggregate()的$group或者mapReduce()方法代替鏈接db.collection.insert()在集合中插入一個(gè)文檔或多個(gè)文檔鏈接db.collection.insertOne()3.2版本新功能,在集合中插入一個(gè)文檔鏈接db.collection.insertMany()3.2版本新功能,在集合中插入多個(gè)文檔鏈接db.collection.isCapped()判斷當(dāng)前集合是否是一個(gè)capped collection鏈接db.collection.latencyStats(options)返回給定集合的延遲統(tǒng)計(jì)值,它是一個(gè)$collStats的包裝器鏈接db.collection.mapReduce(map, reduce, {out, query, sort, limit, finalize, scope, jsMode, verbose})該方法提供了一個(gè) mapReduce命令的包裝器鏈接db.collection.reIndex()該將集合中的所有索引都刪除并重新創(chuàng)建它們。對(duì)于擁有大量數(shù)據(jù)和或大量索引的集合來說,此操作可能會(huì)很浪費(fèi)資源。鏈接db.collection.remove()刪除集合中打的所有文檔,該方法可以攜帶兩個(gè)參數(shù),查詢條件和一個(gè)justOne 的boolean值鏈接db.collection.renameCollection(target, dropTarget)給集合重命名,該方法提供了一個(gè) renameCollection database命令的包裝器鏈接db.collection.replaceOne(filter, replacement, options)3.2新功能,根據(jù)篩選器替換集合內(nèi)的單個(gè)文檔。鏈接db.collection.save()根據(jù)文檔參數(shù),更新現(xiàn)有文檔或插入新文檔鏈接db.collection.stats(scale \ options)返回有關(guān)集合的統(tǒng)計(jì)信息。鏈接db.collection.storageSize()分配給此集合用于文檔存儲(chǔ)的總存儲(chǔ)量。提供了一個(gè)封裝collStats輸出的storageSize字段的包裝器鏈接db.collection.totalIndexSize()集合中所有索引的總數(shù),該方法封裝了一個(gè)collStats(即db.collection.stats())操作的輸出totalIndexSize的封裝器鏈接db.collection.totalSize()集合中數(shù)據(jù)的字節(jié)總數(shù)加上集合中的每個(gè)索引的大小。鏈接db.collection.update(query, update, options)修改集合中的一個(gè)文檔或多個(gè)文檔。該方法可以修改文檔的特定字段,或者完全替換現(xiàn)有文檔,取決于更新參數(shù)。默認(rèn)情況下,update()方法更新單個(gè)文檔。設(shè)置多參數(shù)( Multi Parameter)以更新所有符合查詢標(biāo)準(zhǔn)的文檔。鏈接db.collection.updateOne(filter, update, options)3.2版本新功能根據(jù)篩選器更新集合中的單個(gè)文檔。鏈接db.collection.updateMany(filter, update, options)3.2新版本功能,根據(jù)篩選器更新集合中的多個(gè)文檔。鏈接db.collection.watch(pipeline, options)在集合上打開一個(gè)更改流游標(biāo)(change stream cursor)。鏈接db.collection.validate(true)驗(yàn)證集合。該方法掃描集合的數(shù)據(jù)結(jié)構(gòu)的正確性并返回一個(gè)文檔,該文檔描述邏輯集合與數(shù)據(jù)本身描述之間的關(guān)系。鏈接

          游標(biāo)方法(Cursor Methods)

          注:游標(biāo)即為調(diào)用下列方法的對(duì)象

          方法名方法功能官網(wǎng)連接cursor.addOption(flag)添加OP_QUERY有線協(xié)議標(biāo)志,比如tailable flag,來更改查詢的行為。但是3.2版本以后,不建議在MongoDB shell中使用,可以使用有用的游標(biāo)方法代替鏈接cursor.batchSize(size)從mongodb實(shí)例中獲取每個(gè)批處理響應(yīng)中返回的文檔數(shù)。在大多數(shù)情況下,修改批處理大小不會(huì)影響用戶或應(yīng)用程序,因?yàn)樵趕hell和大多數(shù)驅(qū)動(dòng)程序中返回結(jié)果就好像mongodb返回單個(gè)批處理一樣。鏈接cursor.close()指示服務(wù)器關(guān)閉游標(biāo)并釋放相關(guān)服務(wù)器資源。服務(wù)器會(huì)自動(dòng)關(guān)閉沒有剩余結(jié)果的游標(biāo),以及那些已經(jīng)閑置了一段時(shí)間且沒有被cursor.noCursorTimeout()方法選中的游標(biāo)。鏈接cursor.isClosed()返回服務(wù)器是否關(guān)閉了該游標(biāo),一個(gè)關(guān)閉的游標(biāo)仍可能保留最后的批處理中的文檔。使用cursor.isExhausted()或cursor.hasNext()來檢查游標(biāo)是否已完全處理完成。鏈接cursor.collation(collation document)3.4版本新功能,使用db.collection.find()來校驗(yàn)游標(biāo)返回說明鏈接cursor.comment()3.2版本新功能,向查詢添加注釋字段鏈接cursor.count()返回游標(biāo)引用的文檔數(shù)。將count()方法追加到find()查詢以返回匹配文檔的數(shù)量。該操作不會(huì)執(zhí)行查詢,而是查詢可能返回的結(jié)果數(shù)量。2.6版本以后,mongodb支持hint()使用count()。鏈接cursor.explain(verbosity)提供 db.collection.find()方法的查詢計(jì)劃的相關(guān)信息。該方法的參數(shù)和輸出格式在3.0中發(fā)生了變化。鏈接cursor.forEach(function)迭代游標(biāo),使標(biāo)中的每個(gè)文檔執(zhí)行javascript函數(shù)。鏈接cursor.hasNext()返回當(dāng)前游標(biāo)是否還有剩余的文檔鏈接cursor.hint(index)在一個(gè)查詢上調(diào)用本方法來重寫MongoDB的默認(rèn)搜索索引和查詢優(yōu)化過程,使用 db.collection.getIndexes()方法返回集合中當(dāng)前索引的列表。鏈接cursor.isExhausted()判斷光標(biāo)關(guān)閉,批處理中是否還有剩余對(duì)象??梢允褂胕sExhausted()支持迭代游標(biāo),即使當(dāng)前批中沒有文檔,比如tailable或更改流游標(biāo)(change stream cursors),仍然保持打開鏈接cursor.itcount()返回游標(biāo)中剩余的文檔數(shù)。該方法與cursor.count()方法相近,但是其實(shí)際上執(zhí)行了對(duì)現(xiàn)有迭代器的查詢,會(huì)在進(jìn)程中耗盡它的內(nèi)容。鏈接cursor.limit()在一個(gè)游標(biāo)上使用該方法,限制游標(biāo)將返回的的最大文檔數(shù),該方發(fā)與sql數(shù)據(jù)庫中的LIMIT語句功能類似。鏈接cursor.map(function)將函數(shù)應(yīng)用于游標(biāo)中的每個(gè)文檔,并持續(xù)將從應(yīng)用程序中的返回值收集到數(shù)組中鏈接cursor.max()指定特定索引的專有的上限,以約束find().max()的返回結(jié)果,提供了指定復(fù)合索引的上限的方法。鏈接cursor.maxScan()3.2版本新功能,指定查詢計(jì)劃將掃描的最大文檔或索引鍵數(shù)。一旦達(dá)到了極限會(huì)終止執(zhí)行查詢并返回當(dāng)前批處理的結(jié)果。鏈接cursor.maxTimeMS(time limit)2.6版本新功能,指定用于處理游標(biāo)操作的總毫秒時(shí)間限制。鏈接cursor.min()指定特定索引的專有的下限,以約束find().max()的返回結(jié)果,提供了指定復(fù)合索引的下限的方法。鏈接cursor.next()通過db.collection.find()來返回游標(biāo)中的下一個(gè)文檔。參考cursor.hasNext()相關(guān)功能。鏈接cursor.noCursorTimeout()指示服務(wù)器避免在一個(gè)不活動(dòng)期間自動(dòng)關(guān)閉游標(biāo)。鏈接cursor.objsLeftInBatch()返回當(dāng)前批處理中剩余的文檔數(shù)。mongodb實(shí)例在批返回響應(yīng)時(shí),若要從一個(gè)游標(biāo)中檢索所有文檔,可能需要mongodb實(shí)例的多個(gè)批處理響應(yīng)。當(dāng)當(dāng)前批處理中沒有其他文檔時(shí),游標(biāo)將檢索另一個(gè)批處理,以便在當(dāng)前游標(biāo)耗盡之前獲取更多文檔鏈接cursor.pretty()配置游標(biāo)以易于讀的格式顯示結(jié)果。鏈接cursor.readConcern(level)3.2版本新功能,指定當(dāng)前游標(biāo)的db.collection.find()方法的寫關(guān)注等級(jí)鏈接cursor.readPref(mode, tagSet)將readPref()方法追加到游標(biāo)上,來控制客戶端怎樣的方式查詢副本集的成員鏈接cursor.returnKey()3.2版本新功能,修改游標(biāo)以返回索引鍵而不是文檔。鏈接cursor.showRecordId()3.2版本該方法替換前面的cursor.showDiskLoc()方法,通過向匹配文檔添加字段recordId來修改查詢的輸出。recordId是唯一標(biāo)識(shí)集合中文檔的內(nèi)部鍵。鏈接cursor.size()返回經(jīng)過任意cursor.skip()或cursor.limit()方法限制之后的符合db.collection.find()方法的查詢條件的文檔數(shù)鏈接cursor.skip(offset)在一個(gè)游標(biāo)上調(diào)用該方法來控制mongodb返回結(jié)果的開始位置。這種方法可能有助于實(shí)現(xiàn)分頁的結(jié)果。鏈接cursor.sort(sort)指定查詢返回匹配文檔的順序。在檢索數(shù)據(jù)庫中的任何文檔之前,必須將sort()應(yīng)用到游標(biāo)中。鏈接cursor.tailable()3.2版本新功能,將游標(biāo)標(biāo)記為“tailable”。只用于對(duì)覆蓋集合進(jìn)行使用。使用tailable對(duì)非限定集合進(jìn)行處理將報(bào)錯(cuò)。鏈接cursor.toArray()該方法返回一個(gè)包含游標(biāo)中所有文檔的數(shù)組。該方法將完全迭代游標(biāo),將所有文檔加載到ram中并耗盡游標(biāo)。鏈接

          數(shù)據(jù)庫方法(Database Methods)

          方法名方法功能官網(wǎng)連接db.adminCommand(command)提供一個(gè)助手來運(yùn)行指定數(shù)據(jù)庫命令,以執(zhí)行管理數(shù)據(jù)庫。鏈接db.aggregate()3.6版本新功能,運(yùn)行一個(gè)指定的不需要底層集合的admin/diagnostic渠道,用于收集數(shù)據(jù)的聚合信息,請(qǐng)參考db.collection.aggregate()。鏈接db.cloneCollection(from, collection, query)復(fù)制MongoDB實(shí)例之間的數(shù)據(jù),該方法封裝了cloneCollection指令鏈接db.cloneDatabase(“hostname”)將遠(yuǎn)程數(shù)據(jù)庫數(shù)據(jù)復(fù)制到當(dāng)前數(shù)據(jù)庫。該命令假定遠(yuǎn)程數(shù)據(jù)庫與當(dāng)前數(shù)據(jù)庫具有相同的名稱。鏈接db.commandHelp(command)顯示指定數(shù)據(jù)庫命令的幫助文本。鏈接db.copyDatabase(fromdb, todb, fromhost, username, password, mechanism)將數(shù)據(jù)庫從一個(gè)mongod實(shí)例復(fù)制到當(dāng)前的mongod實(shí)例或在mongod. db.copyDatabase()封裝copydb指令的包裝器的范圍內(nèi)。3.0以后,當(dāng)對(duì)在實(shí)例進(jìn)行身份驗(yàn)證時(shí),db.copyDatabase()支持SCRAM-SHA-1和 MONGODB-CR機(jī)制來驗(yàn)證在用戶。鏈接db.createCollection(name, options)創(chuàng)建一個(gè)集合或視圖,3.4版本增加創(chuàng)建視圖集合、校驗(yàn)功能。由于mongodb在命令中在首次引用集合時(shí)會(huì)隱式創(chuàng)建集合,所以該方法主要用于創(chuàng)建使用特定選項(xiàng)的新集合。鏈接db.createView()3.4版本新功能,從源集合或視圖上創(chuàng)建一個(gè)應(yīng)用具體的aggregation pipeline的結(jié)果視圖。視圖充當(dāng)只讀集合,并在讀取操作期間根據(jù)需求計(jì)算。mongodb將視圖中的讀取操作作為一部分隱含的aggregation pipeline。鏈接db.currentOp()返回一個(gè)包含數(shù)據(jù)庫實(shí)例的進(jìn)程操作信息的文檔。該方法封裝了數(shù)據(jù)庫指令currentOp鏈接db.dropDatabase()刪除當(dāng)前數(shù)據(jù)庫,刪除關(guān)聯(lián)的數(shù)據(jù)文件。鏈接db.eval(function, arguments)提供在mongodb服務(wù)器上運(yùn)行javascript代碼的能力。3.0版本以后不建議使用鏈接db.fsyncLock()強(qiáng)制在將所有掛起的寫入操作刷新到磁盤,并鎖定整個(gè)mongod實(shí)例以防止額外的寫入,直到用戶釋放帶有相應(yīng)的db.fsyncUnlock()命令的鎖為止。鏈接db.fsyncUnlock()將一個(gè)mongod實(shí)例上通過 db.fsyncLock()方法上的鎖減1鏈接db.getCollection(name)返回一個(gè)集合或視圖對(duì)象,該集合或視圖對(duì)象函數(shù)等效于使用 db.collectionName語法。該方法對(duì)于集合或視圖有用,該集合或視圖名可能與mongo shell本身交互,例如以_開頭的名稱或匹配數(shù)據(jù)庫shell方法的名稱。鏈接db.getCollectionInfos(filter)3.0版本新功能,返回一個(gè)包含當(dāng)前數(shù)據(jù)庫的集合或視圖信息的文檔數(shù)組,如名稱和選項(xiàng)鏈接db.getCollectionNames()返回包含當(dāng)前數(shù)據(jù)庫中所有集合和視圖的名稱的數(shù)組。鏈接db.getLastError(w, wtimeout)指定寫入關(guān)注級(jí)別,以確認(rèn)在同一連接上執(zhí)行的先前的寫入操作的成功,并返回該操作的錯(cuò)誤字符串。當(dāng)使用該方法時(shí),當(dāng)前操作必須與他們希望確認(rèn)的寫入操作在相同的連接上。鏈接db.getLastErrorObj()指定寫入關(guān)注級(jí)別,以確認(rèn)在同一連接上執(zhí)行的先前的寫入操作的成功,并返回該操作的文檔。當(dāng)使用該方法時(shí),當(dāng)前操作必須與他們希望確認(rèn)的寫入操作在相同的連接上。鏈接db.getLogComponents()3.0版本新功能,返回當(dāng)前詳細(xì)設(shè)置。詳細(xì)設(shè)置了mongodb為每個(gè)日志消息組件生成的日志信息的數(shù)量。鏈接db.getMongo()該方法在shell啟動(dòng)時(shí)運(yùn)行。使用此命令測(cè)試mongo shell是否具有正確的數(shù)據(jù)庫實(shí)例的連接。鏈接db.getName()當(dāng)前數(shù)據(jù)庫名稱。鏈接db.getPrevError()一個(gè)包含錯(cuò)誤的狀態(tài)文檔。1.6版本之后不建議使用鏈接db.getProfilingLevel()該方法提供了一個(gè)封裝了數(shù)據(jù)庫命令profile的包裝器,返回當(dāng)前的概要文件級(jí)別。1.8.4版本以后不建議使用, 使用db.getProfilingStatus()相關(guān)功能鏈接db.getProfilingStatus()當(dāng)前配置文件級(jí)別、slowOpThresholdMs設(shè)置和slowOpSampleRate設(shè)置。鏈接db.getReplicationInfo()使用oplog投票的數(shù)據(jù),返回具有副本集的狀態(tài)的文檔。在診斷復(fù)制問題時(shí)使用此輸出。鏈接db.getSiblingDB(database)用于無需修改shell環(huán)境中的db變量而能返回另一個(gè)數(shù)據(jù)庫。鏈接db.help()列出了db對(duì)象上的常用方法的文本。鏈接db.hostInfo()返回一個(gè)文檔,該文檔包含 mongod或mongos運(yùn)行的底層系統(tǒng)的信息。一些返回字段僅包含在一些平臺(tái)上。鏈接db.isMaster()返回mongod實(shí)例的角色的描述文檔。如果該mongod是副本集的成員,則ismaster和 secondary字段實(shí)例是否為主集報(bào)告,或者它是復(fù)制集的輔助成員。鏈接db.killOp(opid)終止操作id指定的操作。查找操作及其相應(yīng)的id,可以參考db.currentOp()鏈接db.listCommands()提供所有數(shù)據(jù)庫命令的列表。鏈接db.loadServerScripts()該方法將當(dāng)前數(shù)據(jù)庫的在system.js集合中的所有腳本加載到mongo shell會(huì)話中。鏈接db.logout()結(jié)束當(dāng)前身份驗(yàn)證會(huì)話。如果當(dāng)前會(huì)話未被驗(yàn)證,則此函數(shù)沒有效果。鏈接db.printCollectionStats()提供了一個(gè)封裝 db.collection.stats() 方法的包裝器,從每個(gè)集合中返回統(tǒng)計(jì)數(shù)據(jù),由三個(gè)連字符符號(hào)分隔。鏈接db.printReplicationInfo()打印副本集成員的oplog的格式化報(bào)表。所顯示的報(bào)表由db.getReplicationInfo()返回的數(shù)據(jù)格式化而成。鏈接db.printShardingStatus()打印分片配置的格式化報(bào)告以及關(guān)于一個(gè)分片集群中現(xiàn)有塊的信息鏈接db.printSlaveReplicationInfo()從集合的從成員的角度返回副本集一個(gè)副本集的狀態(tài)的格式化報(bào)告,其輸出與rs.printSlaveReplicationInfo()方法一致。鏈接db.repairDatabase()該方法提供了封裝數(shù)據(jù)庫命令repairDatabase的封裝器,與運(yùn)行選項(xiàng) mongod –repair選項(xiàng)一樣,僅限于當(dāng)前數(shù)據(jù)庫。鏈接db.resetError()1.6版本以后不建議使用,重置由db.getPrevError或getPrevError返回的錯(cuò)誤消息。提供了封裝resetError命令的包裝器。鏈接db.runCommand(command)提供了一個(gè)運(yùn)行指定數(shù)據(jù)庫指令的助手,這是執(zhí)行數(shù)據(jù)庫命令的首選方法,因?yàn)樗峁┝藄hell和驅(qū)動(dòng)程序之間的一致接口。鏈接db.serverBuildInfo()提供了一個(gè)封裝 buildInfo數(shù)據(jù)庫命令的包裝器, buildInfo返回一個(gè)文檔,該文檔包含用于編譯此mongod實(shí)例的參數(shù)概述。鏈接db.serverCmdLineOpts()包裝getCmdLineOpts數(shù)據(jù)庫指令,返回用于對(duì)用于啟動(dòng)mongod或mongos實(shí)例的參數(shù)和配置選項(xiàng)進(jìn)行報(bào)告的文檔。鏈接db.serverStatus()返回提供數(shù)據(jù)庫進(jìn)程狀態(tài)的概述文檔。3.0版本修改:該方法不再輸出workingSet、indexCounters和recordStats部分。鏈接db.setLogLevel()3.0版本新功能,設(shè)置日志消息的單個(gè)詳細(xì)級(jí)別。鏈接db.setProfilingLevel(level, options)配置database profiler。該方法提供了一個(gè)封裝profile指令的包裝器鏈接db.shutdownServer()干凈和安全的關(guān)閉當(dāng)前的mongod或mongos進(jìn)程。該方法必須在admin數(shù)據(jù)庫中執(zhí)行,該指令提供了一個(gè)封裝shutdown指令的包裝器鏈接db.stats(scale)返回反映單個(gè)數(shù)據(jù)庫使用狀態(tài)的統(tǒng)計(jì)信息。鏈接db.version()返回mongod或mongos實(shí)例的版本信息鏈接

          查詢計(jì)劃緩存方法(Query Plan Cache Methods)

          方法名方法功能官網(wǎng)連接db.collection.getPlanCache()返回一個(gè)接口來訪問集合的查詢計(jì)劃緩存。該接口提供查看和清除查詢計(jì)劃緩存的方法。查詢優(yōu)化器只緩存那些可以具有多個(gè)可行計(jì)劃的查詢結(jié)構(gòu)的計(jì)劃。鏈接PlanCache.clear()刪除集合中所有緩存查詢計(jì)劃鏈接PlanCache.clearPlansByQuery(query, projection, sort)清除指定查詢結(jié)構(gòu)的緩存查詢計(jì)劃。鏈接PlanCache.getPlansByQuery(query, projection, sort)顯示指定查詢結(jié)構(gòu)的緩存查詢計(jì)劃。查詢優(yōu)化器只緩存那些可以具有多個(gè)可行計(jì)劃的查詢結(jié)構(gòu)的計(jì)劃。鏈接PlanCache.help()顯示查看和修改集合的查詢計(jì)劃緩存的可用方法。鏈接PlanCache.listQueryShapes()顯示存活的緩存查詢計(jì)劃的查詢結(jié)構(gòu)。查詢優(yōu)化器只緩存那些可以具有多個(gè)可行計(jì)劃的查詢結(jié)構(gòu)的計(jì)劃。鏈接

          批量操作方法(Bulk Operation Methods)

          方法名方法功能官網(wǎng)連接db.collection.initializeOrderedBulkOp()初始化并返回一個(gè)用于集合的新的批量操作生成器。生成器構(gòu)造了mongodb執(zhí)行批量執(zhí)行的一個(gè)有序的寫入操作列表。從3.2版本開始,mongodb還提供了用于執(zhí)行批量寫入操作的在db.collection.bulkWrite() 方法。鏈接db.collection.initializeUnorderedBulkOp()2.6版本新功能,初始化并返回一個(gè)用于集合的新的批量操作生成器。生成器構(gòu)造了mongodb在批量執(zhí)行的無序?qū)懭氩僮髁斜?。鏈接Bulk()2.6版本新功能,批量操作生成器用于在單個(gè)集合上的批量操作構(gòu)造寫入操作列表。想要實(shí)例化生成器,可以使用 db.collection.initializeOrderedBulkOp()或 db.collection.initializeUnorderedBulkOp()方法。鏈接Bulk.execute()2.6版本新功能,通過批量操作生成器執(zhí)行批量操作鏈接Bulk.find(query)2.6版本新功能,指定用于更新或刪除操作的查詢條件。鏈接Bulk.find.arrayFilters(array of filter documents)3.6版本新功能,指定用于確定用于更新或更新一個(gè)數(shù)組的元素的過濾器。鏈接Bulk.find.collation(document)3.4版本新功能,指定批量寫入的校驗(yàn)規(guī)則。追加到Bulk.find()方法來指定查找操作的校驗(yàn)規(guī)則。鏈接Bulk.find.remove()2.6版本新功能,在批量操作中添加一個(gè)移除操作,使用Bulk.find()方法指定能確定哪些文檔要移除的條件。該方法刪除集合中的所有匹配文檔。如果移除單個(gè)文檔,可以參考Bulk.find.removeOne()鏈接Bulk.find.removeOne()2.6版本新功能,在批量操作中添加一個(gè)單文檔刪除操作。使用Bulk.find()方法指定能確定哪些文檔要移除的條件。該方法限制刪除單個(gè)文檔。鏈接Bulk.find.replaceOne(document)2.6版本新功能,在批量操作中添加一個(gè)單文檔替換操作。使用Bulk.find()方法指定能確定哪些文檔要替換的條件。該方法限制替換單個(gè)文檔。鏈接Bulk.find.updateOne(update)2.6版本新功能,在批量操作中添加一個(gè)單文檔修改操作。使用Bulk.find()方法指定能確定哪些文檔要修改的條件。該方法限制修改單個(gè)文檔。如果想要批量更改文檔,請(qǐng)參考Bulk.find.update()鏈接Bulk.find.update(update)2.6版本新功能,在批量操作中添加一個(gè)批量修改操作。該方法更新現(xiàn)有文檔中的特定字段。使用Bulk.find()方法指定能確定哪些文檔要修改的條件。該方法修改所有的匹配文檔。鏈接Bulk.find.upsert()2.6版本新功能,需要在一個(gè)修改或替換操作將upsert選項(xiàng)設(shè)為true。如果將upsert選項(xiàng)設(shè)置為true,如果不存在匹配文檔,則執(zhí)行插入操作。如果確實(shí)存在匹配文檔,則執(zhí)行指定的更新或替換。鏈接Bulk.getOperations()2.6版本新功能,返回通過Bulk.execute()方法執(zhí)行的寫入操作數(shù)組。返回的寫入操作是由mongodb確定的用于執(zhí)行的群組。鏈接Bulk.insert(document)2.6版本新功能,將插入操作添加到批量操作列表中。鏈接Bulk.tojson()2.6版本新功能,返回一個(gè)包含了批量方法對(duì)象中操作數(shù)和批處理數(shù)的json文檔。鏈接Bulk.toString()2.6版本新功能,將包含了批量方法對(duì)象中操作數(shù)和批處理數(shù)的json文檔作為字符串返回鏈接

          用戶管理方法(User Management Methods)

          方法名方法功能官網(wǎng)連接db.auth()允許用戶在shell中對(duì)數(shù)據(jù)庫進(jìn)行身份驗(yàn)證。鏈接db.changeUserPassword(username, password)修改用戶的密碼鏈接db.createUser(user, writeConcern)為運(yùn)行該方法的數(shù)據(jù)庫創(chuàng)建一個(gè)新用戶。如果用戶已經(jīng)存在于數(shù)據(jù)庫中,則會(huì)報(bào)用戶重復(fù)錯(cuò)誤信息。鏈接db.dropUser(username, writeConcern)從當(dāng)前數(shù)據(jù)庫中刪除用戶。鏈接db.dropAllUsers(writeConcern)從當(dāng)前數(shù)據(jù)庫中刪除所有用戶。鏈接db.getUser(username, args)返回指定用戶的用戶信息。在用戶所在的數(shù)據(jù)庫上運(yùn)行該方法。鏈接db.getUsers()返回?cái)?shù)據(jù)庫中所有用戶的信息。鏈接db.grantRolesToUser(username, roles, writeConcern)授權(quán)用戶角色列表鏈接db.removeUser()根據(jù)用戶名從數(shù)據(jù)庫中刪除指定的用戶。2.6版本以后不建議使用使用db.dropUser()替換。鏈接db.revokeRolesFromUser( username, [ roles ], { writeConcern } )移除一個(gè)用戶的一個(gè)或多個(gè)角色鏈接db.updateUser(username, update, writeConcern)更新運(yùn)行該方法的數(shù)據(jù)庫的對(duì)應(yīng)用戶的數(shù)據(jù)。對(duì)字段的更新會(huì)完全替換先前字段的值。這包括對(duì)用戶角色數(shù)組的更新。注:當(dāng)您更新角色數(shù)組時(shí),您會(huì)完全替換先前數(shù)組的值。所以若要添加或刪除角色,無需替換所有用戶現(xiàn)有角色,請(qǐng)使用db.grantRolesToUser()或db.revokeRolesFromUser()方法。鏈接

          角色管理方法(Role Management Methods)

          方法名方法功能官網(wǎng)連接db.createRole(role, writeConcern)在數(shù)據(jù)庫中創(chuàng)建角色(自定義角色)。您可以通過顯示列出權(quán)限列表或通過角色繼承來自其他角色或兩者的特權(quán)來指定角色的權(quán)限。該角色適用于運(yùn)行該方法的數(shù)據(jù)庫上。鏈接db.dropRole(rolename, writeConcern)從運(yùn)行該方法的數(shù)據(jù)庫中刪除指定的用戶自定義的角色鏈接db.dropAllRoles(writeConcern)從運(yùn)行該方法的數(shù)據(jù)庫中刪除所有的用戶自定義的角色鏈接db.getRole(rolename, args)返回指定角色繼承權(quán)限的角色列表。同樣,該方法還可以返回該角色的所有權(quán)限。在包含該角色的數(shù)據(jù)庫中運(yùn)行該方法,該命令可以獲取用戶定義角色(user-defined roles)和內(nèi)置角色(built-in roles)的信息。鏈接db.getRoles()返回運(yùn)行該方法的數(shù)據(jù)庫中所有角色的信息。該方法有無參數(shù)都可以運(yùn)行。如果沒有參數(shù)運(yùn)行,該方法返回?cái)?shù)據(jù)庫所有用戶定義角色的繼承信息。鏈接db.grantPrivilegesToRole(rolename, privileges, writeConcern)向指定用戶定義角色授予附加權(quán)限。鏈接db.revokePrivilegesFromRole(rolename, privileges, writeConcern)從運(yùn)行該方法的數(shù)據(jù)庫中刪除指定自定義角色的指定權(quán)限鏈接db.grantRolesToRole(rolename, roles, writeConcern)給指定自定義角色授權(quán)權(quán)限鏈接db.revokeRolesFromRole(rolename, roles, writeConcern)從一個(gè)角色中移除指定的繼承角色。鏈接db.updateRole(rolename, update, writeConcern)更新指定的用戶自定義角色,該方法必須運(yùn)行在該角色所在的數(shù)據(jù)庫上。注:對(duì)角色字段數(shù)據(jù)的更改會(huì)完全覆蓋以前的數(shù)據(jù),如果只是增加或刪除某一數(shù)據(jù),請(qǐng)參考上列方法。鏈接

          副本方法(Replication Methods)

          方法名方法功能官網(wǎng)連接rs.add(host, arbiterOnly)添加一個(gè)成員到副本集中,若要運(yùn)行該方法,必須連接到復(fù)制集的主集。鏈接rs.addArb(host)給一個(gè)現(xiàn)有副本集中添加一個(gè)新的仲裁。注:一般來說,盡量避免每個(gè)副本集有超過一個(gè)的仲裁鏈接rs.conf()返回包含當(dāng)前副本集配置的文檔。該方法包裝了replSetGetConfig指令鏈接rs.freeze(seconds)使當(dāng)前副本集在一段時(shí)間內(nèi)放棄精選主集的資格鏈接rs.help()返回用于所有副本集相關(guān)shell函數(shù)的幫助文本。鏈接rs.initiate(configuration)啟動(dòng)一個(gè)副本集。該方法可以選擇以包含副本集配置信息的文檔形式進(jìn)行參數(shù)化。鏈接rs.printReplicationInfo()2.6版本新功能,以格式化報(bào)表打印副本集成員的oplog,所顯示的格式化報(bào)表的數(shù)據(jù)是由db.getReplicationInfo()返回的。rs.printReplicationInfo()的輸出與db.printReplicationInfo()的輸出相同。鏈接rs.printSlaveReplicationInfo()從集合的從成員的角度返回包含副本集狀態(tài)的格式化報(bào)表,該方法與db.printSlaveReplicationInfo()的輸出完全相同。鏈接rs.reconfig(configuration, force)重新定義現(xiàn)有副本集,覆蓋現(xiàn)有副本集配置。若要運(yùn)行該方法,必須連接到副本集的主集。鏈接rs.remove(hostname)從當(dāng)前副本集中刪除參數(shù)所描述的成員。此函數(shù)會(huì)斷開shell鏈接,并將作為復(fù)制集重聯(lián)且會(huì)重新選舉誰將成為主集。因此,即使該命令成功執(zhí)行,shell也會(huì)報(bào)錯(cuò)。鏈接rs.slaveOk()為db.getMongo().setSlaveOk()做一個(gè)簡(jiǎn)要說明,其允許當(dāng)前連接同意在從節(jié)點(diǎn)運(yùn)行讀取操作。請(qǐng)參考readPref()方法以便在mongo shell上的讀取操作獲取更細(xì)粒度的控制。鏈接rs.stepDown(stepDownSecs, secondaryCatchUpPeriodSecs)將副本集的主節(jié)點(diǎn)屬性設(shè)為從節(jié)點(diǎn),當(dāng)主節(jié)點(diǎn)降級(jí)完成之后,eligble secondaries將會(huì)舉行主節(jié)點(diǎn)的選舉。該方法不會(huì)立刻將主節(jié)點(diǎn)降級(jí),如果沒有可以使用的從節(jié)點(diǎn)與主節(jié)點(diǎn)保持一致,則主節(jié)點(diǎn)會(huì)等待secondaryCatchUpPeriodSecs參數(shù)(默認(rèn)10秒)讓一個(gè)從節(jié)點(diǎn)提升為主節(jié)點(diǎn)。一旦有可用的空閑從節(jié)點(diǎn),則該方法會(huì)將主節(jié)點(diǎn)降級(jí)。一旦降級(jí),原先的主節(jié)點(diǎn)會(huì)變成從節(jié)點(diǎn)并且在接下來的stepDownSecs參數(shù)的時(shí)間內(nèi)沒有資格選舉變成主節(jié)點(diǎn)。鏈接rs.syncFrom()提供了一個(gè)封裝replSetSyncFrom的包裝器,它允許管理員暫時(shí)為當(dāng)前成員重寫默認(rèn)同步目標(biāo)。以[hostname]:[port]格式指定要復(fù)制的成員名稱。鏈接

          分片方法(Sharding Methods)

          方法名方法功能官網(wǎng)連接sh.addShard(url)將一個(gè)片副本添加到一個(gè)片集群中。此方法必須運(yùn)行在一個(gè)mongos實(shí)例上。鏈接sh.addShardTag(shard, tag)將一個(gè)片與標(biāo)記或標(biāo)識(shí)符關(guān)聯(lián)。mongodb使用這些標(biāo)識(shí)符直接將位于標(biāo)記范圍內(nèi)的塊連接到特定的片。該方法將塊范圍與標(biāo)記范圍關(guān)聯(lián)起來。3.4版本修改:該方法又名為sh.addShardToZone(),上面的功能仍然適用于3.2版本。3.4版本MongoDB提供Zone sharding作為標(biāo)記-感知分片的替代品鏈接sh.addShardToZone(shard, zone)3.4版本新功能,將一個(gè)片與一個(gè)分區(qū)關(guān)聯(lián)起來。mongodb將此片與給定區(qū)域關(guān)聯(lián)。被區(qū)域覆蓋的塊被分配給與區(qū)域關(guān)聯(lián)的片。鏈接sh.addTagRange(namespace, minimum, maximum, tag)將一系列片鍵的值附加到使用sh.addShardTag()方法創(chuàng)建的片標(biāo)記中。3.4版本修改:該方法又名為sh.updateZoneKeyRange(),上面的功能仍然適用于3.2版本。3.4版本MongoDB提供Zone sharding作為標(biāo)記-感知分片的替代品鏈接sh.disableBalancing(namespace)禁用指定的分片集合的平衡器。這不會(huì)影響同一集群中其他分片集合的塊的平衡。注:您只能在mongos實(shí)例上運(yùn)行該方法,如果運(yùn)行在mongod實(shí)例上,則會(huì)報(bào)錯(cuò)。鏈接sh.enableBalancing(namespace)啟用用于分片集合的指定命名空間的平衡器。注:您只能在mongos實(shí)例上運(yùn)行該方法,如果運(yùn)行在mongod實(shí)例上,則會(huì)報(bào)錯(cuò)。鏈接sh.disableAutoSplit()3.4版本新功能,禁用在config.settings集合中的自動(dòng)拆分標(biāo)志。當(dāng)啟用了對(duì)一個(gè)分片集群進(jìn)行自動(dòng)拆分功能時(shí),mongodb會(huì)從快速增長(zhǎng)的塊的片鍵的值自動(dòng)拆分塊。默認(rèn)情況下啟用自動(dòng)拆分。注:您只能使用shell鏈接到mongos實(shí)例上運(yùn)行該方法,如果運(yùn)行在mongod實(shí)例上,則會(huì)報(bào)錯(cuò)。鏈接sh.enableAutoSplit()3.4版本新功能,啟用分片集群的自動(dòng)拆分功能。該方法啟用了在config.settings集合中的自動(dòng)拆分標(biāo)志。默認(rèn)情況下啟用自動(dòng)拆分。注:您只能使用shell鏈接到mongos實(shí)例上運(yùn)行該方法,如果運(yùn)行在mongod實(shí)例上,則會(huì)報(bào)錯(cuò)。鏈接sh.enableSharding(database)啟用指定數(shù)據(jù)庫上的分片。這并不自動(dòng)地將任何集合進(jìn)行分片處理,而是可以使用sh.shardCollection()啟動(dòng)分片集合。鏈接sh.getBalancerHost()自3.4版本開始,不推薦使用:從3.4開始,平衡器運(yùn)行在CSRS(Config Server Replication Set-配置服務(wù)器副本集)的主節(jié)點(diǎn)上。CSRS的主節(jié)點(diǎn)上使用一個(gè)名為“ConfigServer”的進(jìn)程id來持有“balancer”鎖。這個(gè)鎖永遠(yuǎn)不會(huì)釋放。鏈接sh.getBalancerState()該方法用于判斷平衡器是否啟用,這并不能反映平衡操作的當(dāng)前狀態(tài):使用sh.isBalancerRunning()來檢查平衡器的當(dāng)前狀態(tài)。鏈接sh.removeTagRange(namespace, minimum, maximum, tag)3.0版中的新功能,移除一系列使用sh.addShardTag方法創(chuàng)建的片鍵的值。3.4版本修改:該方法又名為sh.removeRangeFromZone(),上面的功能仍然適用于3.2版本。3.4版本MongoDB提供Zone sharding作為標(biāo)記-感知分片的替代品鏈接sh.removeRangeFromZone(namespace, minimum, maximum)3.4版本新功能,刪除一系列片鍵的值和區(qū)域之間的關(guān)聯(lián)。鏈接sh.help()返回shell關(guān)于所有的分片函數(shù)基本的幫助文本。鏈接sh.isBalancerRunning()判斷平衡器進(jìn)程是否正在運(yùn)行,且正在遷移塊。使用sh.getBalancerState()來確定是否啟用了平衡器或禁用了平衡器。鏈接sh.moveChunk(namespace, query, destination)將包含符合指定查詢的文檔的塊移動(dòng)到目標(biāo)片。該方法提供了一個(gè)包裝moveChunk數(shù)據(jù)庫指令的包裝器鏈接sh.removeShardTag(shard, tag)刪除標(biāo)記與片之間的關(guān)聯(lián)。該方法只能運(yùn)行連接的mongos實(shí)例上。3.4版本中更改:該方法別名為sh.removeShardFromZone(),上面的功能仍然適用于3.2版本。3.4版本MongoDB提供Zone sharding作為標(biāo)記-感知分片的替代品鏈接sh.removeShardFromZone(shard, zone)3.4版本新功能,移除區(qū)域與片之間的關(guān)聯(lián)。鏈接sh.setBalancerState(state)啟用或禁用平衡器。使用sh.getBalancerState()來確定當(dāng)前是否啟用了平衡器或禁用了平衡器,并使用sh.isBalancerRunning()來檢查其當(dāng)前狀態(tài)。注:您只能使用shell鏈接到mongos實(shí)例上運(yùn)行該方法,如果運(yùn)行在mongod實(shí)例上,則會(huì)報(bào)錯(cuò)。鏈接sh.shardCollection(namespace, key, unique, options)使用片鍵作為關(guān)鍵字來切分集合。鏈接sh.splitAt(namespace, query)以查詢獲得的數(shù)據(jù)作為片鍵的值來切分塊。鏈接sh.splitFind(namespace, query)將包含以查詢獲得的數(shù)據(jù)作為片鍵的值的塊從中間切分成兩個(gè)相等的塊。相反地,要在特定點(diǎn)上拆分塊,請(qǐng)參考sh.splitAt()。鏈接sh.startBalancer(timeout, interval)在一個(gè)分片集群中啟動(dòng)平衡器。從mongodb 3.4開始,該方法不會(huì)等待平衡器來開始。在早期版本中,該方法等待平衡器才啟動(dòng)。注:您只能使用shell鏈接到mongos實(shí)例上運(yùn)行該方法,如果運(yùn)行在mongod實(shí)例上,則會(huì)報(bào)錯(cuò)。鏈接sh.status()當(dāng)運(yùn)行在一個(gè)mongos實(shí)例時(shí),打印一個(gè)格式化的分片配置報(bào)表以及關(guān)于一種分片集群中現(xiàn)有塊的信息。如果塊總數(shù)大于或等于20,則會(huì)默認(rèn)不顯示詳細(xì)的塊信息。鏈接sh.stopBalancer(timeout, interval)3.4版本新功能,禁用一個(gè)分片集群中的平衡器。如果平衡進(jìn)程正在運(yùn)行中,則會(huì)等待平衡器完成平衡操作。注:您只能使用shell鏈接到mongos實(shí)例上運(yùn)行該方法,如果運(yùn)行在mongod實(shí)例上,則會(huì)報(bào)錯(cuò)。鏈接sh.waitForBalancer(wait, timeout, interval)等待平衡器狀態(tài)的改變,該方法是一個(gè)內(nèi)部的方法。鏈接sh.waitForBalancerOff(timeout, interval)內(nèi)部方法,等待平衡器停止。鏈接sh.waitForPingChange(activePings, timeout, interval)該方法等待activepings的一個(gè)ping狀態(tài)的改變,并且只有當(dāng)指定的ping更改狀態(tài)時(shí)才返回。鏈接sh.updateZoneKeyRange(namespace, minimum, maximum, zone)3.4版本新方法,將一系列片鍵的值與區(qū)域關(guān)聯(lián)起來.鏈接

          對(duì)象決策與方法(Object Constructors and Methods)

          方法名方法功能官網(wǎng)連接BulkWriteResult()2.6版本新功能。一個(gè)包含Bulk.execute()方法返回結(jié)果的包裝器鏈接Date()返回當(dāng)前日期作的字符串或日期對(duì)象。date():在shell中返回當(dāng)前日期的字符串。new date():將當(dāng)前日期作為日期對(duì)象返回。shell使用ISODate助手封裝日期對(duì)象,ISODate屬于UTC。鏈接ObjectId(hexadecimal)返回一個(gè)新的objectid值。12字節(jié)的objectid值包括:4字節(jié)值,表示自u(píng)nix紀(jì)元(1970.1.1)以來的秒數(shù),3字節(jié)機(jī)器標(biāo)識(shí)符,2字節(jié)進(jìn)程id,3字節(jié)的以隨機(jī)值開頭計(jì)數(shù)器。鏈接ObjectId.getTimestamp()返回ObjectId()的時(shí)間戳部分作為日期鏈接ObjectId.toString()返回ObjectId()的字符串表示形式。此字符串值具有ObjectId(…)的格式。鏈接ObjectId.valueOf()將ObjectId()以小寫十六進(jìn)制字符串返回。此值是 ObjectId()對(duì)象的str屬性。鏈接UUID()生成一個(gè)bson uuid對(duì)象。鏈接WriteResult()一個(gè)包含有mongo shell 寫入方法的結(jié)果狀態(tài)的封裝器鏈接WriteResult.hasWriteError()判斷mongo shell的寫方法的結(jié)果是否具有WriteResult.writeError鏈接WriteResult.hasWriteConcernError()判斷mongo shell的寫方法的結(jié)果是否具有WriteResult.writeConcernError鏈接

          連接方法(Connection Methods)

          方法名方法功能官網(wǎng)連接connect(url, user, password)創(chuàng)建一個(gè)與mongodb實(shí)例的連接并返回到數(shù)據(jù)庫的引用。然而,在大多數(shù)情況下,使用Mongo()對(duì)象及其getDB()方法代替。鏈接Mongo(host)JavaScript構(gòu)造器從mongo shell或者一個(gè)JavaScript文件中實(shí)例化一個(gè)數(shù)據(jù)庫鏈接鏈接Mongo.getDB(database)從mongo shell或者一個(gè)JavaScript文件中提供一個(gè)訪問數(shù)據(jù)庫的對(duì)象鏈接Mongo.getReadPrefMode()返回Mongo()鏈接對(duì)象的讀取操作方式鏈接Mongo.getReadPrefTagSet()返回Mongo()鏈接對(duì)象的讀取操作標(biāo)記鏈接Mongo.isCausalConsistency()3.6版本新功能,返回一個(gè)當(dāng)前連接對(duì)象是否啟用因果一致性(causal consistency)的布爾值。鏈接Mongo.setCausalConsistency(boolean)3.6版本新功能,啟用或禁用連接對(duì)象的因果一致性(causal consistency),注:即使會(huì)話可能具有因果一致性,也可能導(dǎo)致因果一致性,因此,在連接對(duì)象可能具有因果一致性,反之亦然。鏈接Mongo.setReadPref(mode, tagSet)在一個(gè)mongo連接中調(diào)用該方法控制客戶端如何將查詢到副本集成員的所有路由。鏈接Mongo.setSlaveOk()對(duì)于當(dāng)前會(huì)話,此命令允許從非控制(即從屬或次要)實(shí)例進(jìn)行讀取操作。鏈接Mongo.startSession(options)3.6版本新功能,為一個(gè)鏈接開啟一個(gè)session,mongo shell將會(huì)話id分配給與會(huì)話關(guān)聯(lián)的命令鏈接Session()3.6版本新功能,在mongo shell對(duì)象鏈接的session對(duì)象鏈接SessionOptions()3.6版本新功能,返回mongo shell對(duì)象鏈接的session對(duì)象的參數(shù)鏈接

          本機(jī)方法(Native Methods)

          方法名方法功能官網(wǎng)連接cat(filename)返回指定文件的內(nèi)容。該方法使用當(dāng)前shell會(huì)話的輸出返回,不會(huì)影響服務(wù)器。鏈接cd(path)更改mongo shell的目錄上下文,并且對(duì)mongodb服務(wù)器沒有任何影響。鏈接copyDbpath()內(nèi)部應(yīng)用鏈接fuzzFile(filename)內(nèi)部應(yīng)用鏈接getHostName()返回運(yùn)行mongo shell進(jìn)程的系統(tǒng)的主機(jī)名。鏈接getMemInfo()返回一個(gè)包含兩個(gè)字段的文檔,用于查看javascript shell進(jìn)程使用的內(nèi)存量。返回的字段是resident和virtual的。鏈接hostname()返回運(yùn)行mongo shell進(jìn)程的系統(tǒng)的主機(jī)名。鏈接listFiles()返回目錄中包含每個(gè)對(duì)象的文檔的數(shù)組。此函數(shù)在mongo shell的上下文中運(yùn)行。鏈接load(file)加載并運(yùn)行一個(gè)javascript文件到當(dāng)前shell環(huán)境中。鏈接ls()返回當(dāng)前目錄中文件的列表。鏈接md5sumFile(filename)返回指定文件的md5哈希值。鏈接mkdir(path)在指定路徑中創(chuàng)建目錄。運(yùn)行mongo shell的用戶必須擁有在指定路徑中創(chuàng)建目錄的權(quán)限。鏈接pwd()返回當(dāng)前目錄。(經(jīng)測(cè)試解釋沒問題,但是它的名字太有誤導(dǎo)性了)鏈接quit()退出當(dāng)前shell會(huì)話。鏈接removeFile(filename)從本地文件系統(tǒng)中刪除指定的文件。鏈接resetDbpath()內(nèi)部應(yīng)用鏈接sleep(ms)在指定時(shí)間內(nèi)暫停javascript執(zhí)行上下文。鏈接setVerboseShell()該方法使指示mongo shell打印每個(gè)操作的持續(xù)時(shí)間。鏈接version()返回mongo shell 版本字符串,在2.4版本以前,該方法只是打印版本號(hào),但是不是字符串鏈接_isWindows()判斷當(dāng)前mongo shell運(yùn)行的系統(tǒng)是不是windows系統(tǒng)鏈接_rand()返回介于0和1之間的隨機(jī)數(shù)。鏈接_srand()內(nèi)部應(yīng)用鏈接

          件操作命令

          • ls:列出當(dāng)前目錄下的所有文件和目錄

          在linux中使用ls命令  ls -lh 可以顯示文件或者目錄大小,下面是顯示列內(nèi)容說明
          第一列:文件類型和權(quán)限
          第二列:鏈接數(shù)量
          第三列:所有者 - 顯示文件或目錄的所有者用戶名稱
          第四列:顯示文件或者目錄用戶組
          第五列:顯示文件的大小。單位為字節(jié)
          第六列:顯示文件最后的修改時(shí)間和日期
          第七列:顯示文件或者目錄名稱====================ls -l:以長(zhǎng)格式列出文件和目錄,包括權(quán)限、所有者、大小和最后修改時(shí)間
          ls -a:顯示所有文件,包括以點(diǎn)(.)開頭的隱藏文件
          ls -lt:按時(shí)間排序,最新修改的文件或目錄會(huì)顯示在最前面
          ls -lh:結(jié)合 -l 和 -h 選項(xiàng),以易讀的格式顯示文件大?。ɡ纾褂肒B、MB)
          • cd:改變目錄

          cd /home/user/Documents  切換到指定目錄下
          cd ..:切換到當(dāng)前目錄的父目錄(返回到上一級(jí)目錄)
          • pwd:打印當(dāng)前工作目錄

          • cat:查看文件內(nèi)容

          cat cbus_onl_busi.log   顯示文件filename的內(nèi)容
          cat -n cbus_onl_busi.log 顯示文件filename的內(nèi)容,并在每行前面顯示行號(hào)
          cat cbus_onl_busi.log | tail -n 10  顯示文件filename的最后幾行
          grep "pattern" cbus_onl_busi.log | cat -n:使用grep搜索包含特定模式的行,然后通過管道將其傳遞給cat,并使用cat的-n選項(xiàng)顯示行號(hào)
          
          cat al-gateway-oapi.log | grep 'error'  | tail -n  10
          • more:分頁查看文件內(nèi)容 它一次顯示一屏文本,允許用戶逐步瀏覽文件

          打開文件后,more默認(rèn)顯示第一屏的內(nèi)容
          按Space鍵可以翻到下一頁   按Enter鍵可以翻到下一行
          按b鍵可以回退到上一頁  
          按q鍵退出more
          • less:反向分頁查看文件內(nèi)容 ,它允許用戶以分頁的方式瀏覽文件,而不必一次性加載整個(gè)文件
          按Space鍵(空格鍵)可以向前翻一頁  按b鍵可以向后翻一頁
          按q鍵退出less
          按:n可以顯示當(dāng)前行號(hào)
          • touch:創(chuàng)建一個(gè)空文件或更改文件的訪問和修改時(shí)間
          touch newfile.txt  使用touch命令創(chuàng)建空文件
          ls -l:在使用touch命令后,通常使用ls -l命令查看文件的時(shí)間戳和其他狀態(tài)信息
          
          • cp:復(fù)制文件或目錄
          cp source destination:將名為source的文件復(fù)制到destination。如果destination是目錄,則文件將被復(fù)制到該目錄中
          cp file1 file2 file3 destination:將多個(gè)文件復(fù)制到指定的destination目錄
          cp -r source destination:遞歸地復(fù)制整個(gè)目錄source及其內(nèi)容到destination。-r選項(xiàng)表示遞歸。
          • mv:移動(dòng)或重命名文件或目錄
          移動(dòng)文件:
          mv source destination:將名為source的文件移動(dòng)到destination。如果destination是目錄,則文件將被移動(dòng)到該目錄中
          
          移動(dòng)目錄:
          mv -r source destination:遞歸地移動(dòng)整個(gè)目錄source及其內(nèi)容到destination。-r選項(xiàng)表示遞歸
          
          重命名文件:
          mv oldname newname:將文件從oldname重命名為newname
          • rm:刪除文件或目錄

          rm命令是非常危險(xiǎn)的,特別是當(dāng)使用-r選項(xiàng)時(shí),因?yàn)樗梢赃f歸地刪除大量文件;如果不確定,可以使用-i選項(xiàng),它會(huì)在刪除每個(gè)文件之前提示確認(rèn)。

          刪除文件:
          rm filename  這將刪除名為filename的文件。
          
          刪除目錄:
          rm -r directory  -r(或--recursive)選項(xiàng)用于遞歸地刪除目錄及其內(nèi)容
          
          強(qiáng)制刪除:
          rm -f file  -f(或--force)選項(xiàng)用于強(qiáng)制刪除文件,不提示確認(rèn)
          
          強(qiáng)制刪除只讀文件:
          rm -i file  -i選項(xiàng)在刪除每個(gè)文件之前提示確認(rèn),對(duì)于只讀文件特別有用
          
          刪除舊文件:
          rm -t 7 file  -t選項(xiàng)刪除訪問時(shí)間超過7天的文件。
          • find:在文件系統(tǒng)中搜索文件或目錄
          按名稱搜索:
          find /path/to/search -name "filename"   -name選項(xiàng)用于按文件名搜索
          
          使用通配符:
          find /path/to/search -name "*.txt"   使用通配符*可以搜索所有擴(kuò)展名為.txt的文件
          
          按大小搜索:
          find /path/to/search -size +100M  -size選項(xiàng)用于按文件大小搜索,+100M表示大于100MB的文件
          
          根目錄開始查找所有擴(kuò)展名為 .log 的文本文件,并找出包含 “ERROR” 的行
          find / -type f -name "*.log" | xargs grep "ERROR"
          
          根目錄開始查找所有擴(kuò)展名為 .log 的文本文件,并找出包含 “20240607310111936703” 的文件路徑
          find /data/logs/pm-service-onl/busi/20240607 -name "*.log" -exec zgrep "20240607310111936703" {} \; -print
          • grep:在文件中搜索具有特定模式的行
          搜索文本:
          grep "pattern"  310H001.log
          
          遞歸搜索:選項(xiàng)遞歸地在指定目錄及其子目錄中搜索
          grep -r "pattern" /path/to/search 
          
          使用前綴和后綴:-B選項(xiàng)打印每個(gè)匹配行之前的行,-A選項(xiàng)打印之后。數(shù)字指定要打印的行數(shù)
          grep  "pattern" 310H001.log  -B 20 -A 10
          
          搜索多個(gè)模式:使用\|操作符在單個(gè)命令中搜索多個(gè)模式
          grep "pattern1\|pattern2" 310H001.log
          • head:輸出文件的開始部分

          查看文件的前10行
          head -n 10 /var/log/syslog/test.log
          
          顯示文件的第N行到第M行
          head -n M test.log | tail -n +N
          
          • tail:輸出文件的尾部
          指定顯示的行數(shù): -n選項(xiàng)允許你指定顯示的行數(shù),lines是你想要顯示的行數(shù)
          tail -n 20 /var/log/syslog/test.log
          
          實(shí)時(shí)顯示文件新增內(nèi)容: -f選項(xiàng)用于實(shí)時(shí)查看文件的新增內(nèi)容,通常用于查看日志文件。
          tail -f  /var/log/syslog/test.log
          • sort:對(duì)文本文件的行進(jìn)行排序
          sort /etc/passwd/test.log
          • wc:計(jì)算字?jǐn)?shù)、行數(shù)和字節(jié)數(shù)
          計(jì)算行數(shù):
          wc -l /var/log/syslog/test.log
          
          只顯示總計(jì): 使用管道和awk命令只顯示總計(jì)
          wc -l file1 file2 file3 | awk '{total +=$1} END {print total}'
          • cut:從文件的每一行中剪切字節(jié)、字符和字段
          cut -d: -f1 /etc/passwd
          • nano,vi,emacs:常用的文本編輯器
          nano /home/user/file.txt
          vi /home/user/file.txt
          emacs /home/user/file.txt
          • paste:合并文件的行。
          paste file1.txt file2.txt

          搜索命令

          • find:在文件系統(tǒng)中搜索文件或目錄。
          find / -name '*.log'
          參考1文件命令
          • grep:在文本文件中搜索決定的文本模式。
          grep 'error' /var/log/syslog
          
          • locate:基于文件名在數(shù)據(jù)庫中快速找到文件。
          locate myFile.txt
          
          • which:返回可執(zhí)行文件的路徑。
          which java
          參考16其他命令說明


          • whereis:此命令可用于查找二進(jìn)制程序、源文件、手冊(cè)頁以及其他文件的位置。
          whereis ls
          參考16其他命令說明


          目錄操作命令

          • mkdir:創(chuàng)建一個(gè)新的目錄
          mkdir /home/user/new_directory
          • rmdir:刪除一個(gè)空目錄
          rmdir /home/user/empty_directory
          • tree:以樹形結(jié)構(gòu)列出目錄的內(nèi)容
          tree /home/user/
          • du:估計(jì)文件和目錄的磁盤使用空間
          du -sh /home/user/Documents
          可以參考 9磁盤命令管理
          • df:顯示磁盤使用空間
          df -h
          可以參考 9磁盤命令管理



          權(quán)限操作命令

          • chmod:更改文件或目錄的權(quán)限
           chmod 755 /home/user/file.txt
          表示設(shè)置文件的主用戶有讀,寫和執(zhí)行權(quán)限(rwx=7),同組的用戶和其他用戶有讀和執(zhí)行權(quán)限(rx=5)。
          
          • chown:更改文件或目錄的所有者和所屬的組
          chown newuser:newgroup /home/user/file.txt
          表示將/home/user/file.txt的所有者更改為newuser,所屬的組更改為newgroup。
          
          • chgrp:更改文件或目錄的所屬組
          chgrp newgroup /home/user/file.txt
          表示將/home/user/file.txt的所屬的組更改為newgroup。

          網(wǎng)絡(luò)操作命令

          • ping:發(fā)送網(wǎng)絡(luò)請(qǐng)求以測(cè)試網(wǎng)絡(luò)連接
          測(cè)試與 www.example.com 的網(wǎng)絡(luò)連通性
          ping www.baidu.com
          • ifconfig:顯示或配置網(wǎng)絡(luò)接口


          顯示 eth0 網(wǎng)絡(luò)接口的信息
          ifconfig eth0
          
          開啟 eth0 網(wǎng)絡(luò)接口
          sudo ifconfig eth0 up
          
          關(guān)閉 eth0 網(wǎng)絡(luò)接口
          sudo ifconfig eth0 down
          • netstat:顯示網(wǎng)絡(luò)連接、路由表等網(wǎng)絡(luò)狀態(tài)信息


          用于列出所有監(jiān)聽的 TCP 端口以及與之關(guān)聯(lián)的進(jìn)程
          netstat -ntlp
          
          用于查找所有與端口 80 相關(guān)的網(wǎng)絡(luò)連接,包括監(jiān)聽和已建立的連接
          netstat -aonp|grep 80
          
          用于計(jì)算與端口 80 相關(guān)的網(wǎng)絡(luò)連接數(shù)量
          netstat -nat|grep -i "80"|wc -l
          • ssh:遠(yuǎn)程登錄或執(zhí)行遠(yuǎn)程命令
           ssh user@remote_host
          • scp:在本地和遠(yuǎn)程系統(tǒng)之間安全地復(fù)制文件
          scp /path/to/file user@remote_host:/remote/path/
          
          • curl:獲取網(wǎng)絡(luò)資源

          curl www.linuxyz.cn
          
          curl -H "Content-Type:application/json" -X POST -d '{"appId": "akulaku-business","data": "081915122488","token": "963444d4-88f9-4c38-b2c2-19b60b2d8"}' 'http://pre-oapi.akulaku.local/midendkmshttp/encrypt'
          • telnet:遠(yuǎn)程登錄工具
          這將嘗試連接到 example.com 的 23 號(hào)端口(Telnet 默認(rèn)端口),并開始一個(gè) Telnet 會(huì)話 :一般用來檢查網(wǎng)絡(luò)是否通
          telnet example.com 23
          
          • nslookup:查詢 DNS 名稱服務(wù)器的記錄


          • ftp:在本地主機(jī)和FTP服務(wù)器之間建立FTP連接。
          ftp ftp_server
          
          • wget:獲取網(wǎng)絡(luò)資源
          wget www.linuxyz.cn -o google.html 

          進(jìn)程和系統(tǒng)控制命令

          • ps:顯示當(dāng)前進(jìn)程的狀態(tài)
          參考11 進(jìn)程管理命令
          • top:動(dòng)態(tài)顯示運(yùn)行中的進(jìn)程
          • kill:發(fā)送信號(hào)以終止進(jìn)程
          參考11 進(jìn)程管理命令
          • shutdown:關(guān)閉機(jī)器
          • reboot:重啟機(jī)器
          • logout:退出登錄會(huì)話



          文本操作命令

          • echo:打印信息到終端。
          echo 'Hello, World!'
          • printf:格式化并打印信息。
          printf 'Name: %s\nAge: %d\n' 'Alice' 20
          
          • sed:流編輯器,用于對(duì)文本文件進(jìn)行特定的行處理和替換。
          echo 'Hello, World!' | sed 's/World/Shell/g'
          
          • awk:在文本文件中進(jìn)行模式掃描和處理語言。
          echo -e 'name\tage\nAlice\t20\nBob\t22' | awk '{if ($2 >=21) print $1}'
          



          壓縮與解壓命令

          • tar:創(chuàng)建、展開及管理tar包。
          創(chuàng)建歸檔文件: directory/ 目錄下的所有文件和子目錄打包成 archive.tar.gz 歸檔文件,并使用 gzip 壓縮
          tar -czvf archive.tar.gz directory/
            
           解壓歸檔文件:從 archive.tar.gz 歸檔文件中解壓所有文件到當(dāng)前目錄
          tar -xzvf archive.tar.gz
          
          查看歸檔文件內(nèi)容:列出 archive.tar.gz 歸檔文件中的所有文件和目錄
          tar -tvf archive.tar.gz

          gzip:用于文件壓縮或解壓。

          壓縮文件:
          gzip file.txt
          
          解壓文件:
          gzip -d file.txt.gz
          • gunzip:用于解壓gzip壓縮的文件。
          gunzip file.gz
          
          • zip/unzip:創(chuàng)建和解壓zip格式的壓縮包。
          zip -r archive.zip folder
          unzip archive.zip

          磁盤使用管理命令

          • df:報(bào)告文件系統(tǒng)磁盤空間使用情況。

          • du:估計(jì)并報(bào)告文件及文件夾的磁盤使用情況。


          • fdisk:對(duì)磁盤進(jìn)行分區(qū)管理。


          • hdparm:查看或修改SATA/ATA磁盤參數(shù)。
          sudo hdparm -i /dev/sda

          包管理命令

          進(jìn)程管理命令

          • ps:報(bào)告進(jìn)程當(dāng)前狀態(tài)。

          顯示所有進(jìn)程,按 CPU 使用率排序:
          ps aux --sort=-%cpu
          
          結(jié)合 grep 命令來過濾輸出結(jié)果:
          ps aux | grep java
          ps -ef | grep java
          
          統(tǒng)計(jì)當(dāng)前系統(tǒng)線程數(shù)量:
          pstree -p|wc -l
          • top:動(dòng)態(tài)顯示當(dāng)前耗費(fèi)系統(tǒng)資源最多的進(jìn)程。

          • htop:比top更友好的動(dòng)態(tài)進(jìn)程查看工具。


          • kill:終止或者發(fā)送一個(gè)信號(hào)到指定進(jìn)程。
          終止 PID 為 1234 的進(jìn)程:
          kill 1234
          
          優(yōu)雅地終止 PID 為 5678 的進(jìn)程:
          kill -SIGTERM 5678
          
          強(qiáng)制終止 PID 為 9101 的進(jìn)程:使用 kill -9 強(qiáng)制終止進(jìn)程時(shí)需謹(jǐn)慎,因?yàn)檫@會(huì)導(dǎo)致進(jìn)程立即退出,可能不會(huì)釋放其占用的資源,也不會(huì)執(zhí)行任何清理操
          kill -9 9101
          • pkill:條件地終止或者發(fā)送一個(gè)信號(hào)到指定進(jìn)程。
          pkill process_name

          環(huán)境變量命令

          • env:顯示當(dāng)前所有的環(huán)境變量。

          • set:顯示當(dāng)前shell所有的環(huán)境變量及函數(shù)。
           輸入:set
          輸出:展示所環(huán)境變量以及函數(shù)
          • export:設(shè)置或顯示環(huán)境變量。
          輸入:
          export VARName='Value'
          echo $VARName
          輸出結(jié)果:
          Value

          系統(tǒng)信息發(fā)布命令

          • uname:會(huì)打印操作系統(tǒng)的名稱。
          • hostname:打印系統(tǒng)的主機(jī)名。
          • df:展示文件系統(tǒng)的磁盤空間使用情況。

          • free:展示系統(tǒng)中未使用和已經(jīng)使用的物理和swap內(nèi)存。


          • uptime:展示系統(tǒng)已經(jīng)運(yùn)行了多久,有多少用戶正在登錄,以及系統(tǒng)負(fù)載。

          • last:查看系統(tǒng)的重啟和關(guān)機(jī)記錄。

          • w:展示哪些用戶正在登錄。

          • who:展示哪些用戶正在登錄,和w命令相似但信息更少。


          • id:展示當(dāng)前用戶的UID、GID以及所在的組。




          系統(tǒng)控制命令

          • halt:關(guān)機(jī)。
          輸入:sudo halt
          • reboot:重啟系統(tǒng)。
          輸入:sudo reboot
          • shutdown:關(guān)機(jī)或者重啟,和上述兩個(gè)命令一樣,但是提供更多的選項(xiàng)。
          關(guān)閉系統(tǒng):sudo shutdown -h now
          重啟系統(tǒng):sudo shutdown -r now
          • passwd:更改用戶密碼。
          更改密碼:passwd

          文本編輯命令

          • vi/vim:vi是一個(gè)文本編輯器,而vim是vi的改進(jìn)版,提供了更多的功能。
          打開文件:
          vi vhost.conf
          
          進(jìn)入編輯模式:
          當(dāng)你第一次打開文件時(shí),你會(huì)進(jìn)入“普通模式”(Normal Mode)。
          按下i鍵進(jìn)入“插入模式”(Insert Mode),在這里可以開始編輯文件。
          
          退出編輯器:
          在普通模式下,按下:鍵,然后輸入q(表示退出)并按Enter鍵退出編輯器。
          
          保存并退出:
          在普通模式下,按下:鍵,然后輸入wq(表示寫入并退出)并按Enter鍵保存更改并退出編輯器。
          
          撤銷更改:
          在普通模式下,輸入u鍵撤銷最近的操作。
          
          查找文本:
          在普通模式下,按下:/ 鍵,然后輸入要查找的文本,并按Enter鍵。查找zone  :/zone
          
          跳轉(zhuǎn)到行:
          在普通模式下,按下:鍵,輸入行號(hào)并按Enter鍵跳轉(zhuǎn)到指定行號(hào)。
          
          設(shè)置行號(hào):
          在普通模式下,按下:鍵,輸入set number或簡(jiǎn)寫為set nu啟用行號(hào)顯示。
          
          復(fù)制和粘貼:
          在普通模式下,使用v(可視模式)選擇文本,然后使用y(復(fù)制)復(fù)制文本,再使用p(粘貼)粘貼文本
          • nano:一個(gè)簡(jiǎn)單易用的命令行文本編輯器。


          • emac:一個(gè)強(qiáng)大的文本編輯器,也是一個(gè)定制化的計(jì)算環(huán)境。


          其他有用命令

          • man:查看命令的幫助文檔


          • whatis:顯示一個(gè)命令的簡(jiǎn)單描述。


          • whereis:查找命令的二進(jìn)制文件、源文件及幫助文檔位置。

          • which:查找并顯示給定命令的完整路徑。

          whereis:當(dāng)你需要快速找到命令的多個(gè)相關(guān)文件(如二進(jìn)制、源代碼、手冊(cè)頁)時(shí)使用。
          which:當(dāng)你只需要知道某個(gè)命令的可執(zhí)行文件路徑時(shí)使用。
          
          whereis:默認(rèn)會(huì)在/usr/bin, /bin, /usr/sbin, /sbin, /usr/local/bin等標(biāo)準(zhǔn)目錄下搜索。
          which:只搜索PATH環(huán)境變量中列出的目錄。
          • whoami:打印當(dāng)前有效的用戶名。
          輸入:whoami
          輸出:user
          • date:顯示或設(shè)置系統(tǒng)日期和時(shí)間
          輸入:date
          輸出: Tue Dec 21 02:16:12 UTC 2021
          • cal:顯示日歷

          • history:顯示命令歷史
          顯示歷史命令:
          history
          
          顯示特定數(shù)量的歷史命令:
          history 10
          
          查看特定用戶的命令歷史:-u選項(xiàng)用于查看指定用戶username的命令歷史
          history -u username
          
          搜索歷史命令:
          history | grep "search_pattern"
          • clear:清除屏幕或窗口內(nèi)容
          • watch:用于實(shí)時(shí)查看當(dāng)前命令打印信息

          主站蜘蛛池模板: 一区二区三区在线| 丰满爆乳无码一区二区三区| 正在播放国产一区| 久久久久人妻一区精品果冻| 蜜桃臀无码内射一区二区三区| 午夜视频久久久久一区 | 在线一区二区三区| 亚洲av无码一区二区三区天堂古代| 国产激情无码一区二区三区| 波多野结衣一区二区三区高清av| 国产乱人伦精品一区二区| 精品无码成人片一区二区98| 久久精品视频一区| 国产激情з∠视频一区二区| 在线精品国产一区二区三区| av在线亚洲欧洲日产一区二区| 国产成人欧美一区二区三区| 在线精品亚洲一区二区| 91在线看片一区国产| 肉色超薄丝袜脚交一区二区| 久久se精品动漫一区二区三区| 色妞色视频一区二区三区四区| 亚洲国产精品一区二区第一页 | 国产一区二区三区在线看片| 国产成人一区二区三区电影网站| 亚洲丰满熟女一区二区哦| 人妻少妇精品视频三区二区一区 | 国产伦精品一区二区三区女| 男人的天堂av亚洲一区2区| 国产精品免费视频一区| 久久精品国产一区二区三区不卡| 成人午夜视频精品一区| 国产亚洲无线码一区二区 | 国产伦精品一区二区三区不卡| 亚洲综合无码一区二区痴汉| 国产精品成人一区无码| 精品国产一区二区三区AV性色| a级午夜毛片免费一区二区| 亚洲一区二区三区四区在线观看| 亚洲一区二区三区不卡在线播放| 日韩最新视频一区二区三|