Linux常用運維命令整理記錄


  前言

  作為后端開發者,掌握一些常用的運維命令也是很有必要的,本文記錄常用Linux運維命令

   

  基本命令

  目錄切換

cd base-admin/  切換到當前目錄下的base-admin目錄
cd ..  切換到上一層目錄
cd
/   切換到系統根目錄
cd
~   切換到用戶主目錄
cd
-   切換到上一個操作所在目錄

 

  目錄操作

mkdir 目錄名稱    創建目錄

ls或者ll(ll是ls -l的別名,ll命令可以看到該目錄下的所有目錄和文件的詳細信息)    查看目錄信息

find 目錄 參數    尋找目錄(查)
    示例:
    列出當前目錄及子目錄下所有文件和文件夾: find .
    在/home目錄下查找以.txt結尾的文件名:find /home -name "*.txt"
    同上,但忽略大小寫: find /home -iname "*.txt"
    當前目錄及子目錄下查找所有以.txt和.pdf結尾的文件:find . \( -name "*.txt" -o -name "*.pdf" \)或find . -name "*.txt" -o -name "*.pdf"

mv 目錄名稱 新目錄名稱    修改目錄的名稱(改)
注意:mv的語法不僅可以對目錄進行重命名而且也可以對各種文件,壓縮包等進行 重命名的操作。mv命令用來對文件或目錄重新命名,或者將文件從一個目錄移到另一個目錄中。后面會介紹到mv命令的另一個用法。

mv 目錄名稱 目錄的新位置    移動目錄的位置---剪切(改)
注意:mv語法不僅可以對目錄進行剪切操作,對文件和壓縮包等都可執行剪切操作。另外mv與cp的結果不同,mv好像文件“搬家”,文件個數並未增加。而cp對文件進行復制,文件個數增加了。

cp -r 目錄名稱 目錄拷貝的目標位置    拷貝目錄(改),-r代表遞歸拷貝
注意:cp命令不僅可以拷貝目錄還可以拷貝文件,壓縮包等,拷貝文件和壓縮包時不 用寫-r遞歸

rm [-rf] 目錄    刪除目錄(刪)
注意:rm不僅可以刪除目錄,也可以刪除其他文件或壓縮包,為了增強大家的記憶, 無論刪除任何目錄或文件,都直接使用rm -rf 目錄/文件/壓縮包

 

  文件操作

touch 文件名稱    文件的創建(增)

cat|more|less|tail 文件名稱    文件的查看(查)
    cat    查看顯示文件內容
    more    可以顯示百分比,回車可以向下一行, 空格可以向下一頁,q可以退出查看
    less    可以使用鍵盤上的PgUp和PgDn向上 和向下翻頁,q結束查看
    tail-10     查看文件的后10行,Ctrl+C結束
注:命令 tail -f 文件 可以對某個文件進行動態監控,例如tomcat的日志文件, 會隨着程序的運行,日志會變化,可以使用tail -f catalina-2016-11-11.log 監控 文 件的變化

vim 文件名稱    修改文件的內容(改)
注:vim編輯器是Linux中的強大組件,是vi編輯器的加強版,vim編輯器的命令和快捷方式有很多,但此處不一一闡述,大家也無需研究的很透徹,使用vim編輯修改文件的方式基本會使用就可以了。
   在實際開發中,使用vim編輯器主要作用就是修改配置文件,下面是一般步驟:
   vim 文件------>進入文件----->命令模式------>按i進入編輯模式----->編輯文件 ------->按Esc進入底行模式----->輸入:wq/q! (輸入wq代表寫入內容並退出,即保存;輸入q!代表強制退出不保存。)
如果沒有這個命令,先進行yum在線安裝:yum -y install vim*
rm
-rf 文件 刪除文件(刪) 注:同目錄刪除:熟記 rm -rf 文件 即可

rz #彈出選擇文件上傳框
sz 文件 #即可從liunx下載該文件
注:如果沒有這個命令,先進行ynm在線安裝:yum install -y lrzsz

 

  查看Linux參數

  查看系統信息

#查看內核信息
uname -a
#查看linux系統版本
cat /etc/issue

 

  查看CPU信息

查看cpu信息
cat /proc/cpuinfo

顯示當前正在執行的進程的CPU使用率,內存使用率
top

查看線程的CPU使用率,內存使用率
top -Hp pid

 

  查看內存信息

free -h

 

  查看磁盤信息

df -h

 

  端口與防火牆

1、查看當前所有tcp端口及進程服務
    netstat -ntlp    

2、防火牆
iptables
    service iptables status    查看防火牆狀態
    service iptables stop    停止防火牆
    service iptables start    啟動防火牆
    service iptables restart 重啟防火牆
    
    開放、移除8080端口
    vim /etc/sysconfig/iptables
    
    加入、刪除配置文件,如:
            -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEP
    修改完成后使用 :wq 保存退出文件,重啟生效:service iptables restart


firewalld
    systemctl status firewalld 查看狀態
    systemctl enable firewalld 啟用防火牆 永久
    systemctl stop firewalld 停止防火牆 重啟后失效
    systemctl disable firewalld 禁用防火牆 永久
    systemctl start firewalld 啟動
    systemctl restart firewalld 重啟
    
    開放、移除8080端口
    開放    firewall-cmd --add-port=8080/tcp --permanent
    移除    firewall-cmd --permanent --remove-port=8080/tcp
    修改完成重啟生效    systemctl restart firewalld

 

  yum安裝jdk

  參考:linux在線安裝JDK(1.8版本):https://blog.csdn.net/zxb730916/article/details/80899429?tdsourcetag=s_pctim_aiomsg

 

  安裝

查看是否已安裝JDK,卸載
yum list installed |grep java  

卸載CentOS系統Java環境,*表示卸載所有openjdk相關文件輸入  
yum -y remove java-1.8.0-openjdk*

卸載tzdata-java  
yum -y remove tzdata-java.noarch

列出java環境安裝包
yum -y list java*    

安裝JDK,如果沒有java-1.8.0-openjdk-devel就沒有javac命令 
yum  install  java-1.8.0-openjdk   java-1.8.0-openjdk-devel

 

  查看

使用 java -version 查看版本號確認是否安裝成功
java -version

 

  yum安裝mysql

  參考:Linux之yum安裝MySQL:https://www.jianshu.com/p/136003ffce41

 

  安裝

  2020-09-13更新

  注意,選擇yum源的時候要看下自己的linux系統是什么版本,el7 表示centos7.x平台,el6 表示centos6.x平台,否則后續安裝會報錯,版本匹配

 

 

  詳情可參考mysql官網說明介紹:

  https://dev.mysql.com/downloads/mysql/ 

  https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html#yum-repo-select-series

  https://dev.mysql.com/downloads/repo/yum/

下載yum源
# 命令說明:wget -i -c http://dev.mysql.com/get/mysql{數據庫版本}-community-release-el{linux系統版本}.noarch.rpm
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm wget -i -c http://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm 安裝 yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server

  如果你碰到安裝的是el6的源,但安裝數據庫服務的時候還是去安裝el7,然后還是導致報錯(場景跟這篇文章一樣:https://ask.csdn.net/questions/770387)

   解決方法:https://www.jianshu.com/p/7b8c4dea6829

 

  安裝后使用命令查看版本號,驗證是否安裝成功

mysql -V

 

  啟動

啟動
systemctl start  mysqld.service

查看root初始密碼
grep "password" /var/log/mysqld.log

使用root登錄mysql
mysql -uroot -p  

設置安全級別
set global validate_password_policy=0

默認密碼長度為8,可以設置為其它值,最小4位
set global validate_password_length=4

修改root密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

可視化工具的登錄授權:(如果授權不成功,請查看防火牆)
grant all on *.* to root@'%' identified by 'root';

  配置到這里就可以使用數據庫工具去連接操作數據庫了

 

  2020-09-12更新 

  如果按上面的配置不成功,可以按下面這種方式進行配置,注意:直接使用yum安裝的mysql會是默認版本5.1的版本

  1、先卸載舊的mysql

#查看現有的
rpm -qa|grep mysql

#一一卸載
rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

  重新安裝

#安裝mysql 服務器端
yum -y install mysql-server mysql-devel

#安裝mysql客戶端
yum install mysql

#啟動mysql服務
service mysqld start 或者 /etc/init.d/mysqld start
停止: service mysqld stop
重啟: service mysqld restart

#創建root管理員:
mysqladmin -u root password root

#登陸
mysql -uroot -proot

#配置遠程連接
grant all on *.* to root@'%' identified by 'root';

 

  忘記密碼了怎么辦?

#修改配置文件,添加 skip-grant-tables 開啟免密登錄
vim /etc/my.cof

 

   重啟,登錄后修改用戶密碼

#重啟
service --status-all

service mysqld stop

service mysqld start

#修改密碼
update mysql.user set password=password('新密碼') where user='root';

  然后在修改回配置文件,取消免密登錄,重啟服務即可

 

  PS:yum安裝下載速度巨慢無法接受?由於安裝centos后的默認yum源為centos的官方地址,所以在國內使用很慢甚至無法訪問,可以把yum源換成阿里鏡像:參考:https://cloud.tencent.com/developer/article/1115975

 

  部署JAR包

  配置環境變量

  我們的項目大多都是通過環境變量去選擇配置文件分支,因此要選配置好環境變量

1、vim ~/.bash_profile

2、export HUANZI_PROFILE=huanzi-prod,esc :wq保存退出

3、source ~/.bash_profile

4、查看環境變量  echo $HUANZI_PROFILE,如果輸出huanzi-prod設置成功

 

  從關閉到啟動

0、查看運行的java項目
    pgrep java | xargs ps

1、先kill掉舊服務
    pkill -f myspringboot-0.0.1
    kill -9 pid #強制執行,徹底殺死進程 2、后台啟動新服務 (nohup后台運行,&后台運行的區別: 使用nohup運行程序: 結果默認會輸出到nohup.out 使用Ctrl + C發送SIGINT信號,程序關閉 關閉session發送SIGHUP信號,程序免疫 使用&后台運行程序: 結果會輸出到終端 使用Ctrl + C發送SIGINT信號,程序免疫 關閉session發送SIGHUP信號,程序關閉 ) 注:先cd進到jar位置 nohup java -jar myspringboot-0.0.1.jar & 如需額外輸出日志(如果項目已經配置了日志,就不需要再重復輸出日志了) nohup java -jar myspringboot-0.0.1.jar > myspringboot-0.0.1.log & 3、控制台查看日志 tail -f myspringboot-0.0.1.log 4、如需修改jar包(前端代碼、配置文件等) 1、先cd進到jar位置,然后使用 vim 命令進入jar包 2、使用 / 命令模糊搜索定位文件,例如main.js 3、按回車進入文件,修改完成后使用 :wq 保存退出文件,回到jar包目錄,使用 :q 退出jar包,即可成功修改文件內容 PS:修改jar,重啟生效

 

  常用啟動參數

  例如(將堆的最小值-Xms參數與最大值-Xmx參數設置為一樣即可避免堆自動擴展)

nohup java -Xmn200m -Xms800m -Xmx800m -XX:+UseG1GC -jar myspringboot-0.0.1.jar &

 

  2020-12-07更新

  使用nohup命令啟動,程序運行一段時間后,nohup.out過大,三個月時間,就達到了5個G

   這種問題處理辦法(參考文章:https://www.jianshu.com/p/d0f55a25486b):

  1、關閉當前的服務,rm -rf 直接刪掉,重啟服務(生產環境勿用

  2、清空nohup.out,這個不需要關閉服務

echo ''  > nohup.out

  3、一勞永逸解決nohup.out文件過大的問題,關閉當前服務,重啟服務重定向輸出out文件(生產環境勿用

# 指定到黑洞目錄,什么信息也不要
nohup java -jar base-admin.jar  > /dev/null 2>&1 &
  關於/dev/null文件
  Linux下還有一個特殊的文件/dev/null,它就像一個無底洞,所有重定向到它的信息都會消失得無影無蹤。這一點非常有用,當我們不需要回顯程序的所有信息時,就可以將輸出重定向到/dev/null。

 

  JVM性能排查

  簡單命令

查看目標JVM的所有配置項參數
jinfo -flags pid

查看堆內存信息和垃圾回收信息 jstat
-gc pid S0C:年輕代中 To Survivor 的容量(單位 KB); S1C:年輕代中 From Survivor 的容量(單位 KB); S0U:年輕代中 To Survivor 目前已使用空間(單位 KB); S1U:年輕代中 From Survivor 目前已使用空間(單位 KB); EC:年輕代中 Eden 的容量(單位 KB); EU:年輕代中 Eden 目前已使用空間(單位 KB); OC:老年代的容量(單位 KB); OU:老年代目前已使用空間(單位 KB); MC:元空間的容量(單位 KB); MU:元空間目前已使用空間(單位 KB); YGC:從應用程序啟動到采樣時年輕代中 gc 次數; YGCT:從應用程序啟動到采樣時年輕代中 gc 所用時間 (s); FGC:從應用程序啟動到采樣時 老年代(Full Gc)gc 次數; FGCT:從應用程序啟動到采樣時 老年代代(Full Gc)gc 所用時間 (s); GCT:從應用程序啟動到采樣時 gc 用的總時間 (s)。 查看堆內存的初始化信息以及堆內存的使用情況 jmap -heap pid 同時還可以生成dump文件來進行詳細分析 jmap -dump:live,format=b,file=heap-dump.bin pid 查看線程的堆棧信息 jstack pid

  dump文件可以下載下來進行分析,也可以直接使用liunx上的jdk的  

  1、在線分析,啟用服務,訪問http://ip:7000查看分析結果

jhat -J-Xmx512m heap-dump.bin

  2、下載到本地,使用JVisualvm,是 JDK 內置的可視化性能診斷工具(雙擊運行,文件,裝入堆dump文件)

 

   PS:通過參數-XX:+HeapDumpOnOutOfMemoryError可以讓虛擬機在出現內存溢出異常時Dump出當前的內存堆轉儲快照以便事后進行分析。

   在大量使用反射、動態代理、CGLib等ByteCode框架、動態生成JSP以及OSGi這類頻繁自定義ClassLoader的場景都需要虛擬機具備類卸載的功能,以保證永久代不會溢出:-verbose:class-XX:+TraceClassLoading

  圖形工具

  JVisualvm(看上面)

  JProfiler (性能診斷利器 JProfiler 快速入門和最佳實踐

 

  后記

  Linux常用運維命令整理暫時記錄到這,后續再進行補充;

 

  參考如下:

       Linux命令大全(手冊)

  https://github.com/Snailclimb/JavaGuide/blob/master/docs/operating-system/linux.md

  https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/手把手教你定位常見Java性能問題.md

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM