(九)JVM成神路之性能調(diào)優(yōu)、GC調(diào)試、各內(nèi)存區(qū)、Linux參數(shù)大全及實(shí)用小技巧

引言

? ?本章節(jié)主要用于補(bǔ)齊之前GC篇章、JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的一些JVM參數(shù)以及常用的Linux指令,更多的作用也可以看作是JVM與Linux的參數(shù)列表大全。對(duì)于開發(fā)者而言,能夠控制JVM的部分也就只有啟動(dòng)參數(shù)了,同時(shí),對(duì)于JVM的性能調(diào)優(yōu)而言,JVM的參數(shù)也是基礎(chǔ)。

“本篇主要用于記錄一些常用的JVM參數(shù)與Linux指令,方便之后使用時(shí)快速查找”。

? ?在JVM的所有參數(shù)中,總體會(huì)被分為幾種類型:標(biāo)準(zhǔn)參數(shù)(Standard)、非標(biāo)準(zhǔn)參數(shù)(Non-Standard)、高級(jí)運(yùn)行時(shí)選項(xiàng)以及不建議使用(可能會(huì)被遺棄的)四大類,其中:

  • 標(biāo)準(zhǔn)參數(shù):開頭直接為參數(shù)名,例如:-server、-client等。
  • 非標(biāo)準(zhǔn)參數(shù): -X開頭,例如:-Xdebug、-XBatch等。
  • 高級(jí)選項(xiàng):-XX:開頭,例如:-XX:+UseG1GC、-XX:-UseG1GC等,其中+號(hào)代表開啟,-號(hào)代表關(guān)閉。

上述簡單介紹清楚JVM參數(shù)中,不同開頭的參數(shù)代表的含義后,接下來開始羅列JVM中的參數(shù)列表。

當(dāng)然,也可以根據(jù)其他維度定義為行為參數(shù)、性能調(diào)優(yōu)參數(shù)、調(diào)試參數(shù)這類的。

PS:本章是將一些常用的JVM、Linux參數(shù)寫成個(gè)參數(shù)表,以便于使用時(shí)方便查閱,如果你認(rèn)為對(duì)于你有幫助,也歡迎點(diǎn)贊、收藏!當(dāng)然,對(duì)于不足也可以在評(píng)論區(qū)補(bǔ)充。

一、JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)參數(shù)列表

? ?虛擬機(jī)的運(yùn)行時(shí)數(shù)據(jù)區(qū)中,堆空間無疑是最重要的,除堆空間之外,虛擬機(jī)棧/本地方法棧(HotSpot中二合一)、元數(shù)據(jù)空間、本地內(nèi)存等區(qū)域也有對(duì)應(yīng)的參數(shù),接下來依次列出。

1.1、通用參數(shù)

  • -client:以客戶端模式啟動(dòng)JVM。
  • -server:以服務(wù)器模式啟動(dòng)JVM。
  • -agentlib:裝載本地lib庫。
  • -agentpath: 按全路徑裝載本地庫。
  • -classpath:聲明jvm搜索目錄名、jar、zip文檔名,之間用分號(hào);分隔。
  • -D property=value:設(shè)置系統(tǒng)[屬性名/值]對(duì)。
    • 應(yīng)用程序運(yùn)行時(shí)可通過System.getProperty("property")獲取。
  • -enableassertions:設(shè)置JVM是否啟動(dòng)斷言機(jī)制,默認(rèn)關(guān)閉(1.4開始支持的)。
    • 后續(xù)跟-esa代表開啟,跟-dsa代表關(guān)閉。
  • -jar:指定以jar包的形式執(zhí)行一個(gè)應(yīng)用程序。
  • -javaagent:jarpath:指定JVM啟動(dòng)時(shí)裝入java語言設(shè)備代理。
  • -verbose:這個(gè)參數(shù)比較有趣,可以用于輸出JVM一些信息,如下:
    • 結(jié)尾跟:class:輸出JVM類加載相關(guān)信息,JVM找不到類時(shí)可以用于排查。
    • 結(jié)尾跟:gc:輸出每次GC相關(guān)的簡略信息。
    • 結(jié)尾跟:jni:輸出native方法調(diào)用的相關(guān)狀況,可以用于診斷jni調(diào)用錯(cuò)誤。
  • -version:輸出當(dāng)前機(jī)器Java環(huán)境版本信息。
  • -version:release:指定當(dāng)前機(jī)器以某個(gè)特定的版本執(zhí)行。
    • -version:"1.5.0_04 1.5*&1.5.1_02+":以1.5或比1.5更高的版本執(zhí)行。
  • -help:輸出Java所有標(biāo)準(zhǔn)參數(shù)及其描述。
  • -X: 輸出非標(biāo)準(zhǔn)的參數(shù)列表及其描述。
  • -Xint:設(shè)置JVM以純解釋器模式執(zhí)行。
  • -Xcomp:完全采用即時(shí)編譯器模式執(zhí)行程序。
  • -Xmixed:采用解釋器+JIT即時(shí)編譯器的混合模式共同執(zhí)行。
  • -Xbatch:禁止JVM后臺(tái)編譯,將編譯過程放到前臺(tái)任務(wù)執(zhí)行。
  • -Xbootclasspath:讓Bootstrap從指定目錄下加載庫、jar、zip包。
    • 結(jié)尾跟/a:path:將指定路徑的全部文件追加到默認(rèn)bootstrap路徑中。
    • 結(jié)尾跟/p:path:讓JVM優(yōu)先于bootstrap默認(rèn)路徑加載指定路徑的文件。
  • -Xcheck:jni: 對(duì)JNI函數(shù)進(jìn)行附加檢查,校驗(yàn)傳遞給JNI函數(shù)參數(shù)的合法性。
  • -Xfuture:讓JVM對(duì)類文件執(zhí)行嚴(yán)格模式檢查(默認(rèn)不使用)。
  • -Xnoclassgc:關(guān)閉針對(duì)class的gc(開啟后類不會(huì)被卸載/會(huì)導(dǎo)致OOM)。
  • -Xincgc: 開啟增量gc,會(huì)減少停頓,但會(huì)導(dǎo)致吞吐量下降。
  • -Xprof:跟蹤正運(yùn)行的程序,適合于開發(fā)環(huán)境調(diào)試。
  • -Xrs:減小JVM對(duì)操做系統(tǒng)信號(hào)(signals)的使用。
  • -XX:DisableExplicitGC:禁止程序內(nèi)部調(diào)用System.gc()觸發(fā)GC。
  • -XX:MaxFDLimit:文件描述符的最大數(shù)量限制。
  • -XX:UseThreadPriorities:啟用本地線程優(yōu)先級(jí)。
  • -XX:UnlockExperimentalVMOptions:開啟未知參數(shù)識(shí)別機(jī)制。
  • -XX:PrintFlagsInitial:輸出當(dāng)前程序的參數(shù)默認(rèn)值。

1.2、堆空間常用參數(shù)

  • -Xms:JVM啟動(dòng)時(shí)堆空間大小。
  • -Xmx:堆空間的最大大小。
  • -XX:NewSize=n/-Xmn:分配年輕代的空間大小。
  • -XX:NewRatio=n:設(shè)置年輕代和年老代的比值。
  • -XX:SurvivorRatio:設(shè)置新生代中Eden區(qū)和Survivor區(qū)的大小比值。
  • - XX:TargetsurvivorRatio:設(shè)置Survivor區(qū)的目標(biāo)使用率,默認(rèn)為50%。
  • -XX:MaxTenuringThreshold:設(shè)置年老代對(duì)象的晉升年齡。
  • -XX:PretenureSizeThreshold:指定直接進(jìn)入年老代大對(duì)象的閾值。
  • -XX:MaxHeapFreeRatio:GC后允許堆中空閑內(nèi)存占的最大比例。
  • -XX:MinHeapFreeRatio:GC后允許堆中空閑內(nèi)存占的最小比例。
  • -XX:MaxNewSize:新生代單個(gè)對(duì)象允許存在的最大值。
  • -XX:MaxPermSize:年老代單個(gè)對(duì)象允許存在的最大值。
  • -XX:UseLargePages:開啟大頁面內(nèi)存技術(shù)(大內(nèi)存下使用)。
  • -XX:LargePageSizeInBytes:設(shè)置Java堆空間的大頁面尺寸。
  • -XX:HandlePromotionFailire:是否開啟空間分代擔(dān)保機(jī)制。
  • -XX:HeapDumpOnOutOfMemoryError:堆空間首次發(fā)生OOM時(shí)輸出dump日志。
  • -XX:HeapDumpPath:和上面的參數(shù)配套使用,指定輸出的位置。
  • -XX:OnOutOfMemoryError:當(dāng)JVM首次發(fā)生OOM時(shí),可以執(zhí)行制定腳本。
  • -XX:+UseGCOverheadLimit:在拋出OOM前限制JVM耗費(fèi)在GC上的時(shí)間比例。
  • -XX:UseAdaptiveSizePolicy:是否開啟自適應(yīng)堆比例調(diào)整機(jī)制(并行GC器)。
  • -XX:MaxGCPauseMillis:設(shè)置每次新生代垃圾回收的期望最大停頓時(shí)間。
  • -XX:UseCompressedOops:是否開啟對(duì)象指針壓縮機(jī)制。
  • -XX:CompressedClassSpaceSize:是否開啟類指針壓縮機(jī)制。
  • -XX:UseTLAB:是否開啟TLAB分配機(jī)制。
  • -XX:TLABWasteTargetPercent:指定TLAB與整個(gè)Eden區(qū)的占比。
  • -XX:TLABSize:顯示指定TLAB區(qū)域的大小。
  • -XX:ResizeTLAB:是否開啟JVM自適應(yīng)的TLAB大小自調(diào)整機(jī)制。
  • -XX:BiasedLockingStartupDelay:設(shè)置sync匿名偏向鎖的延遲啟動(dòng)時(shí)間。
  • -XX:PreBlockSpin:指定Sync自旋鎖次數(shù)(1.6被棄用,引入自適應(yīng)自旋)。
  • -XX:PermSize:設(shè)置非堆空間初始大小(1.7后被棄用,改為元空間)。
  • -XX:MaxPermSize:設(shè)置非堆空間最大大小(1.7后被棄用,改為元空間)。

1.3、Java棧參數(shù)

  • -Xss:設(shè)置虛擬機(jī)棧的默認(rèn)大小。
  • -XX:ThreadStackSize:設(shè)置線程棧默認(rèn)大小。
  • -XX:+DoEscapeAnalysis:是否開啟逃逸分析機(jī)制。
  • -XX:PrintEscapeAnaysis:輸出逃逸分析信息。
  • -XX:EliminateAllocations:是否開啟標(biāo)量替換機(jī)制。
  • -XX:EliminateLocks:是否開啟同步消除機(jī)制。
  • -XX:PrintEliminateAllocations:輸出標(biāo)量替換信息。

1.4、元數(shù)據(jù)空間參數(shù)

  • -XX:MetaspaceSize:指定元數(shù)據(jù)空間的初始大小。
  • -XX:MaxMetaspaceSize:指定元數(shù)據(jù)空間的最大大小。
  • -XX:MinMetaspaceFreeRatio:FullGC后,允許元空間空閑內(nèi)存的最小比例。
  • -XX:MaxMetaspaceFreeRatio:FullGC后,允許元空間空閑內(nèi)存的最大比例。
  • -XX:MinMetaspaceExpansion:設(shè)置元空間中允許存在的單個(gè)數(shù)據(jù)的最小大小。
  • -XX:MaxMetaspaceExpansion:設(shè)置元空間中允許存在的單個(gè)數(shù)據(jù)的最大大小。
  • -XX:CompileThreshold:方法調(diào)用計(jì)數(shù)器編譯觸發(fā)閾值設(shè)置。
  • -XX:ReservedCodeCacheSize:熱點(diǎn)代碼緩存區(qū)的最大大小。
  • -XX:InitialCodeCacheSize:設(shè)置熱點(diǎn)代碼緩存區(qū)的初始大小。
  • -XX:+UseCodeCacheFlushing:熱點(diǎn)代碼空間已滿時(shí),取消部分冷代碼的編譯。
  • -XX:UseCounterDecay:是否開啟熱度衰減機(jī)制。
  • -XX:CounterHalfLifeTime:調(diào)整半衰周期的時(shí)間,單位為秒。
  • -XX:PrintCompilation:當(dāng)方法被編譯時(shí)輸出相關(guān)信息。
  • XX:BackgroundCompilation:禁止JVM后臺(tái)編譯,將編譯任務(wù)在前臺(tái)執(zhí)行。
  • -XX:CITime:JVM關(guān)閉時(shí),輸出各種編譯的統(tǒng)計(jì)信息。
  • -XX:TraceClassLoading:跟蹤類加載信息。
  • -XX:TraceClassLoadingPreorder:跟蹤所有被使用的類加載信息。
  • -XX:TraceClassUnloading:跟蹤類卸載信息。
  • -XX:TraceLoaderConstraints:跟蹤類加載器相關(guān)信息。
  • -XX:TraceClassResolution:跟蹤常量池信息。

1.5、直接內(nèi)存參數(shù)

  • -XX:DirectMemorySize:設(shè)置直接內(nèi)存的初始空間值(不設(shè)置默認(rèn)與Xmx參數(shù)值相同)。
  • -XX:MaxDirectMemorySize:設(shè)置直接內(nèi)存的最大空間值。

1.6、調(diào)試通用參數(shù)

  • -XX:+PrintVMOptions:輸出當(dāng)前運(yùn)行程序的顯式啟動(dòng)參數(shù)。
  • -XX:+PrintCommandLineFlags:輸出傳遞給虛擬機(jī)的顯式和隱式參數(shù)。
  • -XX:+PrintFlagsInitial:查看所有的參數(shù)的默認(rèn)初始值。
  • -XX:+PrintFlagsFinal:輸出所有的系統(tǒng)參數(shù)的最終值。
  • -XX:PrintTLAB:輸出TLAB分配相關(guān)的信息
  • -XX:CITime:輸出JIT即時(shí)編譯的耗時(shí)。
  • -XX:ErrorFile:保存錯(cuò)誤日志或者數(shù)據(jù)到文件中。
  • -XX:OnError=”;”:出現(xiàn)致命錯(cuò)誤時(shí)執(zhí)行自定義的指定腳本。

1.7、GC調(diào)試通用參數(shù)

  • -XX:+PrintGC/-verbose:gc:輸出GC的簡略日志。
  • -XX:+PrintGCDetails:輸出GC發(fā)生時(shí)的詳細(xì)日志。
  • -XX:+PrintGCTimeStamps:輸出GC發(fā)生的時(shí)間。
  • -XX:+PrintGCApplicationConcurrentTime:輸出應(yīng)用程序的執(zhí)行時(shí)間。
  • -XX:+PrintGCApplicationStoppedTime:輸出應(yīng)用由于GC而產(chǎn)生的停頓時(shí)間。
  • -Xloggc:將輸出的GC日志轉(zhuǎn)儲(chǔ)到指定目錄中。
  • -XX:+PrintReferenceGC:跟蹤并輸出軟/弱/虛引用和Finallize隊(duì)列信息。
  • -XX:+PrintHeapAtGC:每次GC前后打印堆信息。
  • -XX:PrintGCCause:輸出導(dǎo)致本次GC觸發(fā)的原因。

二、新生代垃圾收集器參數(shù)列表

? ?上述階段中,將一些JVM通用參數(shù)、JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)參數(shù)以及部分調(diào)試參數(shù)進(jìn)行了簡單整理,接下來看看GC相關(guān)的一些參數(shù)。

2.1、Serial收集器參數(shù)

  • -XX:UseSerialGC:是否啟用Serial作為新生代收集器。

2.2、ParNew收集器參數(shù)

  • -XX:UseParNewGC:是否啟用ParNew作為新生代收集器。

2.3、ParallelScavenge收集器參數(shù)

  • -XX:UseParallelGC:是否啟用ParallelScavenge作為新生代收集器。
  • -XX:MaxGCPauseMillis:設(shè)置GC發(fā)生時(shí)允許的最大停頓時(shí)間。
  • -XX:GCTimeRatio:精準(zhǔn)控制GC發(fā)生時(shí)的吞吐量占比。
  • -XX:UseAdaptiveSizePolicy:是否開啟JVM自適應(yīng)的GC調(diào)節(jié)策略。
  • -XX:ParallelGCThreads:指定GC工作時(shí)的并行線程數(shù)(默認(rèn)為CPU核數(shù))。

三、年老代垃圾收集器參數(shù)列表

3.1、SerialOld收集器參數(shù)

  • -XX:UseSerialGC:是否啟用SerialOld作為年老代收集器。

3.2、ParallelOld收集器參數(shù)

  • -XX:UseParallelOldGC:是否啟用ParallelOld作為年老代收集器。

3.3、CMS收集器參數(shù)

  • -XX:UseConcMarkSweepGC:是否啟用CMS作為年老代收集器。
  • -XX:UseCMSInitiatingoccupancyonlyn:指定觸發(fā)CMS回收的閾值。
  • -XX:CMSInitIatingOccupancyFaction:指定空間占用達(dá)到多少比例時(shí)觸發(fā)MSC工作。
  • -XX:UseCMSCompactAtFullCollection:內(nèi)存碎片化嚴(yán)重時(shí)是否開啟MSC工作。
  • -XX:CMSFullGCsBeforeCompaction:設(shè)置間隔多少次FullGC觸發(fā)一次MSC工作,默認(rèn)0。
  • -XX:ParallelCMSThreads:指定CMS執(zhí)行GC工作時(shí)的并發(fā)線程數(shù)。
  • -XX:CMSClassUnloadingEnabled:是否開啟類元數(shù)據(jù)卸載(回收)機(jī)制。
  • -XX:CMSInitiatingPermOccupancyFraction:指定元空間GC的觸發(fā)比例。
  • -XX:GCTimeRatio:指定GC停頓時(shí)間與用戶線程工作時(shí)間的占比。
  • -XX:MaxGCPauseMillis:指定一次GC允許發(fā)生的最大停頓時(shí)間。
  • -XX:CMSIncrementalMode:是否啟用增量回收模式(1.8中被廢棄,1.9中移除)。
  • -XX:CMSScavengeBeforeRemark:是否在重新標(biāo)記階段前觸發(fā)一次新生代GC。

四、整堆分區(qū)垃圾收集器參數(shù)列表

4.1、G1收集器參數(shù)

  • -XX:+UseG1GC:讓JVM使用G1收集器。
  • -XX:ConcGCThreads:指定并發(fā)GC工作階段的并發(fā)線程數(shù)量。
  • -XX:ParallelGCThreads:指定STW階段,GC工作的并行線程數(shù)。
  • -XX:MaxGCPauseMillis:期望的目標(biāo)停頓時(shí)間(默認(rèn)200ms)。
  • -XX:GCPauseIntervalMillis:GC的間隔時(shí)間。
  • -XX:G1HeapRegionSize:指定單個(gè)分區(qū)大小(1~32MB,且必須是2的N次冪)。
  • -XX:G1NewSizePercent:新生代初始空間占比(默認(rèn)整堆的5%)。
  • -XX:G1MaxNewSizePercent:新生代最大空間占比。
  • GCTimeRatio:GC停頓的時(shí)間占比(G1會(huì)根據(jù)此值調(diào)整堆空間)。
  • -XX:TargetSurvivorRatio:G1中空間分配擔(dān)保的觸發(fā)比例。
    • 當(dāng)Survivor空間達(dá)到填充容量閾值時(shí)(默認(rèn)50%),將對(duì)象轉(zhuǎn)入年老代。
  • -XX:MaxTenuringThreshold:新生代空間對(duì)象的晉升年齡閾值(默認(rèn)15)。
  • -XX:InitiatingHeapOccupancyPercent:年老代空間觸發(fā)MixedGC的閾值。
  • -XX:GCPauseIntervalMillis:設(shè)置停頓間隔時(shí)間(作用于G1-回收階段)。
  • -XX:ExplicitGCInvokesconcurrent:對(duì)顯示調(diào)用觸發(fā)的GC是否啟用并發(fā)回收。
  • -XX:G1ReservePercent:預(yù)留年老代的空閑Region數(shù),為分代擔(dān)保做準(zhǔn)備,默認(rèn)10。
    • 默認(rèn)為整堆45%,年老代空間使用比例達(dá)到該閾值時(shí)觸發(fā)混合GC。
  • -XX:G1MixedGCLiveThresholdPercent:單個(gè)Region觸發(fā)GC的垃圾占比閾值。
    • 默認(rèn)為85%,單個(gè)分區(qū)中垃圾對(duì)象達(dá)到該閾值時(shí)才可被選作目標(biāo)區(qū)域回收。
  • -XX:G1MixedGCCountTarget:指定回收階段時(shí),分為幾次篩選回收。
    • 默認(rèn)8次,在G1最后的篩選回收階段可以回收一段時(shí)間,然后暫?;厥?,恢復(fù)系統(tǒng)運(yùn)行,過一會(huì)兒再回收,這樣做可以讓系統(tǒng)不至于單次停頓時(shí)間過長。
  • -XX:G1HeapWastePercent:GC回收停止的空閑Region閾值(默認(rèn)5%)。
    • 回收階段是基于復(fù)制算法來完成的,回收一個(gè)分區(qū)時(shí)會(huì)將該區(qū)內(nèi)的所有存活對(duì)象移入到另外一個(gè)區(qū)域,然后統(tǒng)一清除該分區(qū),這樣最終就會(huì)出現(xiàn)一個(gè)空的Region,而當(dāng)空閑的Region數(shù)量達(dá)到5%時(shí),G1會(huì)結(jié)束本次MixedGC。
  • -XX:G1OldCSetRegionThresholdPercent:每輪MixedGC回收分區(qū)的最大比例,默認(rèn)10%。
  • -XX:SoftRefLRUPolicyMSPerMB:指定每兆空間中軟引用的存活時(shí)間,默認(rèn)為1000ms。

4.2、ZGC收集器參數(shù)

  • -XX:UnlockExperimentalVMOptions:是否解鎖JVM隱藏的額外參數(shù)(實(shí)驗(yàn)參數(shù))。
  • -XX:UseZGC:是否啟用ZGC作為JVM整堆的垃圾收集器。
  • -XX:ZCollectionInterval:定期觸發(fā)一次GC(默認(rèn)不開啟,單位:秒)。
  • -XX:ZProactive:設(shè)置ZGC主動(dòng)觸發(fā)GC的閾值(默認(rèn)開啟)。

4.3、ShenandoahGC收集器參數(shù)

  • -XX:UseShenandoahGC:是否啟用ShenandoahGC作為JVM整堆的垃圾收集器。

其實(shí)整堆收集器中,除開G1之外,其他兩款整堆收集器,因?yàn)闆]有做分代實(shí)現(xiàn),所以能夠暴露給外部操作的JVM參數(shù)其實(shí)也并不會(huì)太多,大概也只能調(diào)調(diào)線程數(shù)、內(nèi)存大小、GC觸發(fā)條件、GC頻率這類的了。因?yàn)檫@些整堆收集器本身就能夠很好的駕馭已分配的堆空間。

五、Linux系統(tǒng)常用指令

? ?Linux系統(tǒng)是每位開發(fā)者逃不開的話題,程序發(fā)布、上線中間件、數(shù)據(jù)庫部署等幾乎都會(huì)基于Linux系統(tǒng)。因此,對(duì)于Linux你大概不需要掌握的特別精通,但至少對(duì)于它的一些常用指令必須要會(huì)使用,畢竟項(xiàng)目上線、線上排查等場景下,我們都必須要通過指令進(jìn)行操作。

5.1、目錄管理與文件操作指令

  • pwd:顯示當(dāng)前所在目錄的路徑。
  • cd:切換目錄,后面需要跟具體操作:
    • ..:回到上一級(jí)目錄。
    • /:回到根目錄。
    • ~:回到/home/user/目錄下。
    • dirName:進(jìn)入當(dāng)前目錄的dirName子目錄。
    • /xx/xx/xxx:進(jìn)入到指定路徑的目錄下。
  • ls:查看當(dāng)前目錄下的所有文件,可跟選項(xiàng)如下:
    • -a:顯示目錄下的所有文件,包含隱藏文件。
    • -l:顯示目錄中所有文件的詳細(xì)信息,如權(quán)限、所有者、群組、大小、日期等。
    • -f:顯示文件的類型。
    • -r:逆向模式,從后至前的顯示整個(gè)目錄下所有文件。
    • -R:遞歸模式,顯示當(dāng)前目錄下所有子目錄的內(nèi)容。
    • -s:按文件大小排序顯示。
    • -h:按KB、MB、GB等單位顯示文件大小。
    • ls -l xxx:顯示名稱為xxx文件的詳細(xì)信息。
  • ll:顯示當(dāng)前目錄下所有文件,并顯示文件的詳細(xì)信息。
  • treelstree:顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)。
  • find:在系統(tǒng)中搜索指定文件:
    • -type:按類型搜索。
    • -name:按文件名搜索。
    • -atime +N:按時(shí)間搜索N天內(nèi)未被使用過的文件。
    • -mtime -N:按時(shí)間搜索過去N天內(nèi)創(chuàng)建的文件。
    • -size:按文件大小搜索文件。
  • man 指令名稱:查詢、解釋一個(gè)指令令的使用方法、注意事項(xiàng)。
  • locate filename:查詢某個(gè)文件的具體位置。
  • whatis 指令名稱:查詢某個(gè)指令的作用。
  • in file link:為文件file創(chuàng)建一個(gè)link物理鏈接(Windows的快捷方式)。
    • -s:創(chuàng)建一個(gè)軟鏈接。
  • mkdir xxx:新建名稱為xxx的文件夾。
  • touch filename:創(chuàng)建文件名為filename的文件。
  • cp /xx/xx.xx /xx/xx.xx:將/xx/xx.xx文件復(fù)制到其他路徑。
    • -i:互動(dòng)模式,如果目標(biāo)目錄下存在相同文件是,提示是否確認(rèn)覆蓋?
    • -r:遞歸模式,將目錄下所有的子目錄、子文件等全部復(fù)制。
    • -v:詳細(xì)進(jìn)度模式,顯示當(dāng)前復(fù)制的完成進(jìn)度。
  • mv /xx/xx.xx /xx/xx.xx:將/xx/xx.xx文件移動(dòng)(剪切)到其他路徑。
    • -i:互動(dòng)模式,如果目標(biāo)目錄下存在相同文件是,提示是否確認(rèn)覆蓋?
    • -f:強(qiáng)制模式,不管目標(biāo)路徑下是否存在同名文件,都直接強(qiáng)制覆蓋。
    • -v:詳細(xì)進(jìn)度模式,顯示當(dāng)前移動(dòng)的完成進(jìn)度。
  • rm filename:刪除指定文件,可選參數(shù):
    • -i:互動(dòng)模式,提示是否確認(rèn)刪除該文件?
    • -f:強(qiáng)制模式,強(qiáng)制刪除目標(biāo)文件。
    • -r:遞歸模式,遞歸刪除目標(biāo)文件所有的子目錄及其文件。
    • -v:詳細(xì)進(jìn)度模式,顯示當(dāng)前刪除的完成進(jìn)度。
    • rm -rf /*:老梗,代表強(qiáng)制遞歸刪除根目錄下的所有文件。
  • rmdir xxx:刪除指定文件夾目錄。

5.2、文本操作指令

  • cat filename:打開filename文件查看文件內(nèi)容。
  • more filename:打開filename文件,輸出一屏數(shù)據(jù)。
  • less filename:和more作用相同,輸出一屏數(shù)據(jù),但可以上下滑動(dòng)。
  • tac filename:和less作用相同,但是從末尾開始顯示,支持上下滑動(dòng)。
  • tail filename:查看文件末尾十行數(shù)據(jù)內(nèi)容。
    • -n:輸出指定的n行末尾數(shù)據(jù)。
    • -f:監(jiān)控某個(gè)文本文件,實(shí)時(shí)輸出最新追加的數(shù)據(jù),通常用于監(jiān)控日志。
  • head -n filename:輸出文件頭部n行數(shù)據(jù)。
  • grep xx filename:在filename文件內(nèi)查找xx字符。
  • wc:查看指定文件或進(jìn)程的數(shù)量:
    • -l:查看指定目標(biāo)的行數(shù)。
    • -w:查看指定文件的單詞數(shù)量。
    • -c:查詢指定文件的字節(jié)數(shù)量。
    • -m:查詢指定文件的字符數(shù)量。
  • vi filename:編輯指定文件的內(nèi)容(vi命令是Unix/Linux通用的文件編輯器,vimvi的增強(qiáng)版)。
    • 進(jìn)入vi工具時(shí)的命令:
      • vi n filename:打開指定文件并將光標(biāo)置于第n行。
      • vi /pattern filename:打開指定文件并將光標(biāo)置于第一個(gè)與pattern匹配處。
      • vi -r filename:打開指定文件,并恢復(fù)上次系統(tǒng)崩潰時(shí)的狀態(tài)。
      • vi filename...filename:同時(shí)編輯多個(gè)文件,依次進(jìn)行編輯。
    • 屏幕翻滾類操作(命令模式):
      • Ctrl+u:向前滾動(dòng)半屏。
      • Ctrl+d:向后滾動(dòng)半屏。
      • Ctrl+f:向前滾動(dòng)一屏。
      • Ctrl+b:向后滾動(dòng)一屏。
      • [n]z:將第n行滾至屏幕頂部,不指定n時(shí),將當(dāng)前行滾至屏幕頂部。
    • 插入文本類操作(插入模式):
      • i:在光標(biāo)位置前插入。
      • I:在當(dāng)前行的行首插入。
      • a:在光標(biāo)位置后插入。
      • A:在當(dāng)前行的行尾插入。
      • o:在當(dāng)前行上面新增一行。
      • O:在當(dāng)前行下面新增一行。
      • s:替換光標(biāo)位置的字符。
      • S:替換光標(biāo)位置的行。
    • 刪除、復(fù)制、粘貼、查找、替換、撤銷類操作(命令模式):
      • x:刪除光標(biāo)后一個(gè)字符。
      • X:刪除光標(biāo)前一個(gè)字符。
      • dd:刪除當(dāng)前行。
      • dG:向下刪除到最后一行。
      • D0:從光標(biāo)位置刪除至行首。
      • [n]x:刪除光標(biāo)后n個(gè)字符。
      • [n]X:刪除光標(biāo)前n個(gè)字符。
      • [n]dd:向下刪除n行。
      • dw:刪除當(dāng)前的單詞。
      • d$:刪除光標(biāo)至行尾。
      • yy:復(fù)制當(dāng)前行。
      • [n]yy:向下復(fù)制n行。
      • p:在下一行位置粘貼內(nèi)容。
      • r:替換光標(biāo)處的字符。
      • R:替換光標(biāo)所到處的字符(按ESC鍵結(jié)束)。
      • u:撤銷操作。
      • ctrl+r:反撤銷操作。
      • /[filed]:查找filed關(guān)鍵字(按n查找下一個(gè))。
      • ?[filed]:查找filed關(guān)鍵字(按n查找下一個(gè))。
    • 退出保存命令(底行模式/需先按ESC):
      • :w:保存更改內(nèi)容但不退出本次編輯。
      • :w file:將內(nèi)容保存到file文件中,不退出本次編輯。
      • :w!:強(qiáng)制保存更改內(nèi)容,不退出本次編輯。
      • :wq:保存更改內(nèi)容并退出編輯。
      • :wq!:強(qiáng)制保存更改內(nèi)容并退出編輯。
      • :q:不保存更改內(nèi)容,直接退出編輯。
      • :q!:不保存更改內(nèi)容,強(qiáng)制退出編輯。
      • :e!:放棄本次編輯中的所有更改內(nèi)容,從上次保存的時(shí)刻重新編輯。

5.3、文件壓縮/解壓/備份指令

  • tar:壓縮解壓命令:
    • -z:讓打包的文件具備gz壓縮性質(zhì)(gz格式,壓縮速度最快)。
    • -j:讓打包的文件具備bzip壓縮性質(zhì)(bz2格式,壓縮文件最?。?。
    • -J:讓打包的文件具備xz壓縮性質(zhì)(xz格式,壓縮率最佳)。
    • -x:解壓打包文件。
    • -t:查看壓縮文件中的內(nèi)容。
    • -c:將文件打成壓縮包。
    • -C:解壓時(shí)指定解壓位置,如tar -xf xx.tar.gz -C /usr/xxx/
    • -v:顯示解壓時(shí)的壓縮包文件列表。
    • -f:參數(shù)后面指定要解壓或壓縮的文件名。
    • -p:保留備份數(shù)據(jù)的原本權(quán)限與屬性,一般用于打包重要的配置信息。
    • -P:保留絕對(duì)路徑。
    • 壓縮命令示例:tar -czvf xx.tar.gz xx.txt xx.conf。
    • 解壓命令示例:tar -xf xx.tar.gz -C /usr/xxx/。
  • zipzip壓縮命令(需要額外安裝):
    • -m:將目標(biāo)文件壓縮后,刪除原文件。
    • -o:將壓縮包內(nèi)所有文件的最新變動(dòng)時(shí)間改為壓縮的時(shí)間。
    • -q:安靜模式,在壓縮的時(shí)候不顯示壓縮執(zhí)行的過程。
    • -r:遞歸模式,將指定目錄下的所有子文件以及目錄一起壓縮。
    • -x:可以跟一個(gè)文件列表,壓縮時(shí)排除文件列表中的文件。
  • unzipzip解壓命令(需要額外安裝):
    • -o:強(qiáng)制模式,解壓時(shí)如果存在同名的文件直接覆蓋。
    • -l:不解壓查看壓縮包中包含的文件。
    • -v:解壓時(shí)顯示執(zhí)行過程中的詳細(xì)信息。
    • -t:檢查解壓文件是否正確(是否損壞、數(shù)據(jù)丟失等)。
    • -q:安靜模式,在解壓的時(shí)不顯示解壓執(zhí)行的過程。
    • -d:指定文件解壓后存儲(chǔ)的目錄。
    • -x:指定不要解壓壓縮包中的那些文件。
  • bzip2:將文件打包成拓展名為.bz2的壓縮包。
  • bunzip2:將文件拓展名為.bz2的壓縮包解壓。
  • gzip:將文件打包成拓展名為.gz的壓縮包。
  • gunzip:將文件拓展名為.gz的壓縮包解壓。
  • compress:將文件打包成拓展名為.Z的壓縮包。
  • uncompress:將文件拓展名為.Z的壓縮包解壓。
  • rar:將文件打包成拓展名為.rar的壓縮包。
  • unrar:將文件拓展名為.rar的壓縮包解壓。

5.4、系統(tǒng)操作、權(quán)限管理/用戶群組管理指令

  • shutdown:關(guān)機(jī)命令:
    • -k:不會(huì)真正關(guān)機(jī),僅發(fā)出關(guān)機(jī)的警告(結(jié)合sh腳本做運(yùn)維監(jiān)控用)。
    • -r:關(guān)機(jī)后重啟。
    • -t:在指定的時(shí)間后關(guān)機(jī)(默認(rèn)單位:min)。
  • reboot:重啟命令:
    • -d:關(guān)機(jī)時(shí)不會(huì)將內(nèi)存中的數(shù)據(jù)寫入到/var/log/wtmp檔案內(nèi)。
    • -f:不管是否有應(yīng)用阻止關(guān)機(jī),強(qiáng)制性重啟。
    • -n:在重開機(jī)前不做將記憶體數(shù)據(jù)寫回硬盤(包含了-d操作)。
    • -w:不會(huì)真的重啟,只是把數(shù)據(jù)記錄寫到/var/log/wtmp檔案里。
  • kill:終止(殺)進(jìn)程指令(只是給進(jìn)程發(fā)個(gè)信號(hào),讓進(jìn)程“自殺”):
    • -l:列出所有可用的信號(hào)名稱。
    • -p:輸出pid但并不發(fā)送操作信號(hào)。
    • -signal:給進(jìn)程傳遞信號(hào)(目前有三種):
      • -HUP/-1:重新啟動(dòng)進(jìn)程。
      • -KILL/-9:終止(殺掉)進(jìn)程。
      • -TERM/-15:結(jié)束進(jìn)程。
  • date:更改或查看目前日期。
  • cal:顯示月歷及年歷。
  • arch:顯示機(jī)器的處理器架構(gòu)。
  • uname:顯示機(jī)器的信息:
    • -m:顯示機(jī)器的處理器架構(gòu)。
    • -r:顯示當(dāng)前系統(tǒng)的內(nèi)核版本。
  • chmod:用于改變Linux系統(tǒng)文件或目錄的訪問權(quán)限,支持文字、數(shù)字設(shè)定法:
    • -R:遞歸模式,如果打算更改一個(gè)目錄的權(quán)限,加這個(gè)才可更改所有子文件權(quán)限。
    • 文件使用者分為所有者、群組、其他用戶三種:
      • u:文件或目錄的所有者。
      • g:所有者所在的用戶群組。
      • o:其他用戶。
      • a:所有用戶(包含u、o、a)。
    • 文件權(quán)限分為讀、寫、執(zhí)行三個(gè)級(jí)別:
      • r:讀權(quán)限,數(shù)字為4。
      • w:寫權(quán)限,數(shù)字為2。
      • x:執(zhí)行權(quán)限,數(shù)字為1。
    • 權(quán)限操作:
      • +:添加權(quán)限。
      • +:移除權(quán)限。
      • =:覆蓋原有權(quán)限,讓當(dāng)前設(shè)置的權(quán)限成為唯一權(quán)限。
    • 示例:
      • chmod a+rwx filename:為所有用戶添加filename文件的讀、寫、執(zhí)行權(quán)限。
      • chmod 777 filename:這條指令是上面那條指令的數(shù)字設(shè)定法。
  • su username:將當(dāng)前登錄的用戶切換指定用戶(更改時(shí)需要輸入密碼)。
  • useradd username:添加一個(gè)名字為username的用戶(root用戶操作)。
  • passwd username:更改username用戶的密碼,其他操作如下:
    • -l username:禁止指定用戶登錄。
    • -u username:解除被禁止登錄的用戶。
    • -d username:清除指定用戶的登錄密碼,該用戶之后無需密碼即可登錄。
  • userdel -r username:刪除指定用戶賬號(hào)(-r:遞歸刪除用戶的所有目錄)。
  • groupadd groupname:創(chuàng)建用戶組。
  • w:查看當(dāng)前登錄用戶的詳細(xì)信息。
  • who:查看當(dāng)前登錄的所有用戶信息。
  • last:查看用戶登錄的記錄(多次登錄的記錄)。
  • lastlog:查看所有用戶最后的登錄時(shí)間。
  • touch /etc/nologin:禁止除root賬號(hào)外的所有用戶登錄。

5.5、網(wǎng)絡(luò)、內(nèi)存、磁盤管理指令

  • ping ip/domain-name:檢測與某個(gè)節(jié)點(diǎn)之間通信是否正常:
    • -c:設(shè)置要求響應(yīng)的次數(shù)。
    • -d:使用SocketSO_DEBUG功能。
    • -f:大量且快速的發(fā)送網(wǎng)絡(luò)封包給一臺(tái)機(jī)器,看它的回應(yīng)。
    • -i:指定收發(fā)信息的間隔時(shí)間,單位為秒。
    • -s:設(shè)置數(shù)據(jù)包的大小,單位:字節(jié)。
    • -r:忽略目標(biāo)機(jī)器的網(wǎng)關(guān),直接將數(shù)據(jù)保送到遠(yuǎn)程主機(jī)上。
    • -q:不顯示命令的執(zhí)行過程,只顯示結(jié)果。
    • -v:詳細(xì)顯示命令的執(zhí)行過程,包括非回應(yīng)信息和其它信息。
    • -t:設(shè)置存活數(shù)值TTL的大小。
  • ftp ip/domain-name:遠(yuǎn)程文件傳輸(下載、上傳)文件:
    • -d:顯示指令執(zhí)行過程中的詳細(xì)信息。
    • -i:關(guān)閉互動(dòng)模式,每次執(zhí)行不詢問任何問題。
    • -g:關(guān)閉本地主機(jī)文件名稱支持特殊字符的擴(kuò)充特性。
    • -n:不試用自動(dòng)登錄,每次連接都需要手動(dòng)輸入賬號(hào)密碼。
    • -v:顯示ftp文件傳輸?shù)倪M(jìn)度信息。
    • FTP內(nèi)部指令:
      • 大部分指令與Linux的基本操作指令相同,如cd等。
      • get remote-file local-file:從其他機(jī)器中下載文件到當(dāng)前機(jī)器。
      • mget remote-files:批量下載。
      • put local-file remote-file:將本地文件上傳到遠(yuǎn)程機(jī)器。
      • mput local-files:批量上傳。
      • bye:退出ftp服務(wù)。
      • .......
  • telnet ip/domain-name:遠(yuǎn)程登錄主機(jī)。
  • rlogin ip/domain-name:也是遠(yuǎn)程登錄主機(jī)的作用,與telnet指令類似。
  • netstat:查看Linux系統(tǒng)的網(wǎng)絡(luò)情況:
    • -a:顯示所有連接中的Socket。
    • -f:顯示FIB信息。
    • -c:持續(xù)輸出網(wǎng)絡(luò)狀態(tài)。
    • -i:顯示網(wǎng)絡(luò)界面信息。
    • -n:不顯示網(wǎng)絡(luò)名稱,顯示真實(shí)網(wǎng)絡(luò)IP。
    • -o:顯示計(jì)數(shù)器信息。
    • -r:顯示網(wǎng)絡(luò)路徑表信息。
    • -t:顯示TCP連接信息。
    • -u:顯示UDP連接信息。
    • -v:顯示版本信息。
    • -w:顯示RAW連接信息。
    • netstat -nat|grep -i "8080"|wc -l:查看8080端口的連接數(shù)。
  • ifconfig:查看和設(shè)置網(wǎng)卡信息。
  • ip addr:查看網(wǎng)卡信息。
  • route:查看和操作當(dāng)前機(jī)器的路由表。
  • netstat:查看本機(jī)的網(wǎng)絡(luò)狀態(tài),可看到端口占用情況和網(wǎng)絡(luò)連接情況。
  • traceroute:顯示一個(gè)請(qǐng)求到目標(biāo)服務(wù)器所經(jīng)的全部路由節(jié)點(diǎn)(排錯(cuò)用)。
  • iftop:查看實(shí)時(shí)網(wǎng)絡(luò)io情況。
  • lsof:檢查端口是否被占用。
  • dig:查看域名解析信息。
  • curl:發(fā)送一個(gè)http請(qǐng)求,檢測目標(biāo)服務(wù)器是否可以正常工作。
  • wget:下載一個(gè)網(wǎng)絡(luò)文件到本地機(jī)器。
  • yum install:在線安裝需要用到的工具,類似于Python的PIP指令。
  • firewall-cmd --state:查看防火墻狀態(tài)。
  • systemctl list-unit-files|grep firewalld.service:查看防火墻信息。
  • systemctl restart firewalld.service:重啟防火墻。
  • systemctl stop firewalld.service:關(guān)閉防火墻。
  • systemctl disable firewalld.service:開機(jī)時(shí)禁止啟動(dòng)防火墻。
  • firewall-cmd --zone=public --add-port=8080/tcp --permanent:開放8080端口。
  • firewall-cmd --zone=public --list-ports:查看防火墻已開放的端口。
  • ps:查看當(dāng)前系統(tǒng)中在后臺(tái)執(zhí)行的進(jìn)程信息:
    • -a:查看當(dāng)前運(yùn)行的所有進(jìn)程。
    • -u:列出所有進(jìn)程所屬者的名稱以及運(yùn)行時(shí)長。
    • -x:列出所有程序,包括那些沒有終端機(jī)的進(jìn)程。
    • -ef:顯示進(jìn)程的全部信息,包括父進(jìn)程ID、創(chuàng)建者、創(chuàng)建時(shí)間、PID等。
    • -l:只顯示與本次登錄有關(guān)的進(jìn)程信息。
    • -T:查看某個(gè)進(jìn)行內(nèi)的線程信息。
    • -p:指定一個(gè)進(jìn)程ID,與-T一同使用。
    • -m:輸出后臺(tái)所有進(jìn)程對(duì)于系統(tǒng)內(nèi)存的占用情況。
    • -r:只單獨(dú)顯示在執(zhí)行的前臺(tái)進(jìn)程。
  • top:查看系統(tǒng)執(zhí)行程序?qū)?nèi)存、CPU、磁盤的使用情況(會(huì)實(shí)時(shí)刷新):
    • -H:查看所有線程的負(fù)載情況。
    • top -H -p pid:根據(jù)pid列表指定進(jìn)程下的所有線程信息。
  • service:查看系統(tǒng)服務(wù)信息:
    • service servicename -status:查看指定名稱服務(wù)的運(yùn)行狀態(tài)。
    • service --status-all:查看所有服務(wù)的運(yùn)行狀態(tài)。
    • service servicename start:啟動(dòng)指定名稱的系統(tǒng)服務(wù)。
    • service servicename restart:重啟指定名稱的系統(tǒng)服務(wù)。
    • service servicename stop:關(guān)閉指定名稱的系統(tǒng)服務(wù)。
  • free:查看內(nèi)存信息及使用信息。
  • mount dir:掛載指定目錄下的文件系統(tǒng)(Linux文件系統(tǒng)只有掛載了才能使用):
    • -a:掛上/etc/fstab下的全部文件系統(tǒng)。
    • -t:制定所掛上來的文件系統(tǒng)的名稱(類似于Windows的盤符重命名)。
    • -n:掛上文件系統(tǒng),但不把文件系統(tǒng)的數(shù)據(jù)寫入/etc/mtlab這個(gè)文件。
    • -w:將文件系統(tǒng)設(shè)為可讀寫。
    • -r:掛上來的文件系統(tǒng)設(shè)為只讀。
  • umount dir:卸載某個(gè)掛上來的文件系統(tǒng)。
  • df:檢查硬盤分區(qū)與已經(jīng)掛載的文件系統(tǒng)的磁盤空間,既查看硬盤的使用情況:
    • -a:顯示所有文件系統(tǒng)和各分區(qū)的硬盤使用情況。
    • -i:列出I-nodes的使用情況。
    • -k:將各硬盤分區(qū)以及掛載的文件分區(qū)大小用k表示。
    • -t:列出某一文件系統(tǒng)的所有分區(qū)磁盤空間使用情況。
    • -x:列出不是某一文件系統(tǒng)的所有分區(qū)空間使用情況(-t的反作用)。
    • -T:列出每個(gè)分區(qū)所屬的文件系統(tǒng)名稱。
  • du:查看文件及目錄大?。?
    • -a:顯示所有目錄下每個(gè)文件所占的空間大小。
    • -b:顯示目錄及其文件大小,以字節(jié)為單位。
    • -c:顯示文件總大小。
    • -h:指定大小單位,提高信息可讀性,如KB、MB、GB等。
    • -s:列出各文件大小的總和。
    • -x:只計(jì)算屬于同一文件系統(tǒng)的文件。
  • fsck:檢測和修復(fù)Linux文件系統(tǒng)。
  • iostat:查看磁盤IO的狀態(tài)。
  • iotop:與top命令類似,實(shí)時(shí)顯示各個(gè)進(jìn)程的io狀態(tài)。

5.6、Linux超級(jí)實(shí)用的小技巧

? ?對(duì)于上述羅列的指令是一些經(jīng)常接觸Linux系統(tǒng)時(shí)常用的指令,如某些指令未列出,可參考:Linux命令大全。不過在Linux系統(tǒng)中,掌握了眾多指令的同時(shí),也要熟練Linux系統(tǒng)中的一些操作,接下來分享一些個(gè)人看來比較實(shí)用的小技巧!


①同時(shí)執(zhí)行多條指令時(shí),不同命令之間可以用;隔開,如:

cd /usr/xxx/;ls
如上指令執(zhí)行后的結(jié)果則是:進(jìn)入到指定的目錄下,并查看該目錄下的所有文件信息。


②如果執(zhí)行的某條指令耗時(shí)比較長,導(dǎo)致自己當(dāng)前終端需要等待執(zhí)行完成,無法繼續(xù)操作時(shí),可以在指令最后加上&符號(hào),將任務(wù)交給Linux的后臺(tái)進(jìn)程完成,如:

cp /xxx/xxx.xx /xxx/xx/xx.xx &
該條指令執(zhí)行后,會(huì)將拷貝文件的任務(wù)交給后臺(tái)進(jìn)程執(zhí)行,當(dāng)前終端可以繼續(xù)操作。


③如果當(dāng)你想要執(zhí)行一個(gè)他人編寫好的腳本文件,但卻不知道通過什么命令執(zhí)行時(shí),你可以嘗試在前面通過加個(gè).來執(zhí)行,如下:

. xxx.sh
快速執(zhí)行指定的腳本文件,當(dāng)然,也不僅僅只局限于.sh后綴的腳本,該方式可以用于執(zhí)行大部分的腳本文件。


④如果你想將某個(gè)指令執(zhí)行后的結(jié)果,作為其他指令的入?yún)?,或想將其?zhí)行結(jié)果寫出到某個(gè)文件,那么你可以嘗試>、>>、<等這些符號(hào),如:

ls > xxx.txt
上述命令執(zhí)行后,會(huì)將ls指令的執(zhí)行結(jié)果(即當(dāng)前目錄下的所有文件信息)寫入到xxx.txt文件中,如果xxx.txt文件不存在,系統(tǒng)會(huì)默認(rèn)創(chuàng)建出來。同時(shí),你也可以通過>>將結(jié)果追加到某個(gè)文件中,如:ls >> xxx.txt


⑤你如果想要同時(shí)執(zhí)行多個(gè)命令,但后面的命令需要建立在前面命令執(zhí)行成功的基礎(chǔ)之上時(shí),你可以嘗試使用&&符號(hào),如:

cp /usr/soft/a.txt new.txt && cat new.txt
上述命令中,如果直接執(zhí)行cat new.txt必然是不行的,因?yàn)楫?dāng)前目錄下不存在new.txt文件,所以需要先執(zhí)行拷貝的命令,將其從其他目錄下復(fù)制過來后,才能執(zhí)行cat命令。因此,可以將兩個(gè)指令用&&連接,只有當(dāng)cp命令執(zhí)行成功后,再執(zhí)行cat指令。


⑥當(dāng)執(zhí)行一個(gè)指令耗時(shí)比較長或有可能執(zhí)行失敗時(shí),但又得需要考慮執(zhí)行失敗之后的處理,這種情況可以考慮使用||,如:

wget xxx || wget xxx
執(zhí)行該指令后,因?yàn)?code>wget是從網(wǎng)絡(luò)上下載文件,所以有時(shí)會(huì)因?yàn)榫W(wǎng)絡(luò)問題導(dǎo)致失敗,此時(shí)我們可以通過||,再次執(zhí)行wget指令,重新下載。


⑦你執(zhí)行的命令中,下一條指令需要上一條的結(jié)果作為入?yún)ⅲ敲纯梢允褂?code>|管道命令,如下:

ps aux | grep java
查詢Linux后臺(tái)的所有進(jìn)程信息,但是只顯示Java的進(jìn)程。


⑧當(dāng)你想要同時(shí)操作Linux中的多個(gè)文件時(shí),可以選擇使用通配符*,如下:

rm -rf /xxx/xx/*.txt
如上命令執(zhí)行之后,會(huì)刪除指定目錄下的所有.txt后綴文件。


⑨...........

? ?其實(shí)在Linux下還有各種各樣的符號(hào)操作,如$、%、?、#、()、[]、{}、(())、[[]]等,它們都有各自的作用與功能,有些會(huì)在Shell編寫中經(jīng)常用到,如$、{}等。同時(shí),上述介紹的幾種小技巧中所用的“符號(hào)”,在運(yùn)維人員手中可能會(huì)組成一大長串令人“難以直視”的命令,但作為開發(fā)人員,對(duì)于前面那些技巧簡單掌握即可,畢竟咱也不是專業(yè)搞運(yùn)維或Linux云計(jì)算/調(diào)度開發(fā)的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容