Java面試基礎 -- Linux篇


0.日常命令
  • cd 目錄路徑: 跳轉到指定目錄
  • mkdir 目錄名稱:新增目錄
  • pwd: 獲取當前路徑
  • su: 切換用戶
  • ll: 查看當前目錄俠的文件和目錄
  • rm -rf 目錄: 遞歸刪除指定目錄下的所有文件
  • vi 文件:修改文件
  • mv 源文件夾名 新文件夾名:移動文件夾到指定目錄
  • grep:查找想要的信息
  • cp -r 源目錄名 新目錄名:拷貝指定目錄中的文件到新目錄中
  • touch 文件名:創建文件
  • find -name 文件名:查找文件
  • ls -ahl:查看文件的所有者
  • chkconfig --add xxx: 將xxx腳本加入到開機啟動項里面
  • chkconfig --list:查看添加是否成功
  • shutdown -h now:指定現在立即關機;
  • shutdown +5 "System will shutdown after 5 minutes":指定5分鍾后關機,同時送出警告信息給登入用戶
  • reboot: 重開機
  • reboot -w:做個重開機的模擬(只有紀錄並不會真的重開機)

1. 幫助命令:man,help, info
  • help xxx #顯示內置命令幫助信息;
    xxx --help #顯示外置命令幫助信息;
  • man xxx #無內外置之分,顯示的內容比help更詳細;
  • info xxx #得到的內容比man更詳細;

2.查看活動進程的命令:ps,top, pidstat
  • ps 用於顯示系統內的所有進程
    ps-elf 查看所有進程;
    ps -ef | grep java 查看和java有關的所有進程;
  • top 用於查看活動進程的CPU和內存信息,能夠實時顯示系統中各個進程的資源占用情況,
    可以按照CPU、內存的使用情況和執行時間對進程進行排序。
  • pidstat 用於監控全部或指定的進程占用系統資源的情況,包括CPU、內存、磁盤I/O、線程切換、線程數等數據。
    pidstat -u/-r/-d -p 進程號 --解釋:(-u CPU, -r 內存,-d 磁盤I/O

3.查看日志常用命令:tail,head,cat,more,less,sed
  • tail:對文件進行動態監控
    tail -fn 200 test.log 實時監控200行日志
    tail -n 10 test.log 查詢最后10行日志
    tail -n +10 test.log 查詢10行之后的所有日志
  • head -n 10 test.log 查看頭10行日志
    head -n -10 test.log 查看除最后10行的其他日志
  • cat -n test.log | grep "run" 在test.log中查詢包含run的行
    cat test.log 顯示test.log中的所有內容
  • sed -n '/2019-11-17 16:17:20/,/2019-12-17 16:17:36/p' test.log 查找指定日期范圍內的日志
    sed -n '1,3p' test.log 顯示第1到3行日志
  • more可以顯示百分比,回車可以向下一行, 空格可以向下一頁,q可以退出查看
    more -4 test.log 每屏顯示4行日志
    more +/run test.log 從日志中查找第一個出現"run"字符串的行,並從該處前兩行開始顯示輸出
    cat test.log | more -5 得到test.log中的全部內容並且每次顯示5行
    more 僅能向前移動,卻不能向后移動
  • less test.log test1.log 瀏覽多個文件
    ps -ef | less -N ps查看進程信息並通過less分頁顯示同時顯示行號
    ps aux|grep redis:查看包括redis字符串的進程
    pgrep redis -a:查看包括redis字符串的進程
  • history 查看所有的歷史記錄
    history | grep xxx 查看歷史記錄中包含某些指令的記錄
    history | more 分頁查看記錄
    history -c 清空所有的歷史記錄
打開超大文件: 
    1. head -10000 slowquery.log > temp.log  將slowquery.log的前10000行日志寫入到temp.log中
    2. tail -10000 slowquery.log > temp.log   將slowquery.log的后10000行日志寫入到temp.log中
    3. sed -n '10,10000p' slowquery.log > temp.log 把slowquery.log第10到10000行的數據寫入到temp.log中
    4. cat catalina.log | grep   '2017-09-06 15:15:42' > test.log  根據查詢條件導出

4.壓縮文件命令
  • tar -zxvf xxxx.gz: 解壓文件到當前目錄下
    tar -zxvf xxxx.gz -C /usr/local 解壓文件到指定位置
  • tar -zcvf abc.gz a.txt b.txt c.txt 將這三個文件壓縮成abc.gz壓縮包
    tar -zcvf abc.gz /abc/ 將指定目錄壓縮成壓縮包

5.殺死一個進程的操作
方法一:把ps的查詢結果通過管道給grep查找包含特定字符串的進程, 管道符“|”用來隔開兩個命令,管道符左邊命令的輸出會作為管道符右邊命令的輸入。
例如: ps -ef | grep firefox 找到firefox進程的進程號
然后:kill -s 9 6496   殺死進程
方法二:  使用pgrep查詢某個進程的進程號
例如:pgrep firefox    
然后:kill -s 9 6496
方法三: 使用pkill, pkill無須 “s”,終止信號等級直接跟在 “-“ 后面
例如:pkill -9 firefox

6.權限命令

操作系統中每個文件都擁有特定的權限、所屬用戶和所屬組,Linux中權限一般分為讀(readable)、寫(writable)和執行(excutable),分為三組。分別對應文件的屬主(owner),屬組(group)和其他用戶(other),通過 ls -l 命令我們可以 查看某個目錄下的文件或目錄的權限
文件的類型:

  • d: 代表目錄
  • -: 代表文件
  • l: 代表軟鏈接(可以認為是window中的快捷方式)

Linux中權限分為以下幾種:

  • r:代表權限是可讀,可以用數字4表示
  • w:代表權限是可寫,可以用數字2表示
  • x:代表權限是可執行,可以用數字1表示
    對文件和目錄而言,讀寫執行表示不同的意義。對於文件:
權限名稱 可執行操作
r 可以使用cat查看文件的內容
w 可以修改文件的內容
x 可以將其運行為二進制文件

對於目錄:

權限名稱 可執行操作
r 可以查看目錄下列表
w 可以創建和刪除目錄下文件
x 可以使用cd進入目錄

超級用戶可以無視普通用戶的權限,即使文件目錄權限是000,依舊可以訪問。 在linux中的每個用戶必須屬於一個組,不能獨立於組外

修改文件/目錄的權限的命令:chmod
示例:
修改/test下的aaa.txt的權限為屬主有全部權限,屬主所在的組有讀寫權限, 其他用戶只有讀的權限:
chmod u=rwx,g=rw,o=r aaa.txt
上述示例還可以使用數字表示:chmod 764 aaa.txt

更多請看這里


7.查看磁盤情況的命令:free,vmstat,du,df

顯示系統使用和空閑的內存情況,包括物理內存、交互區內存(swap)和內核緩沖區內存

  • free:
    • [ ] -b  以Byte為單位顯示內存使用情況。
    • [ ] -k  以KB為單位顯示內存使用情況。
    • [ ] -m  以MB為單位顯示內存使用情況。
    • [ ] -g   以GB為單位顯示內存使用情況。
    • [ ] -o  不顯示緩沖區調節列。
    • [ ] -s<間隔秒數>  持續觀察內存使用狀況。
    • [ ] -t  顯示內存總和列。
    • [ ] -V  顯示版本信息。 
      例:free -s 10 每隔10秒查看內存的使用情況
  • cat /proc/meminfo等價於free命令
  • vmstat: 動態的了解系統資源運行情況
  • du: 顯示每個文件和目錄的磁盤使用空間以及文件的大小。
    例: du -h tomcat8.5/ 表示顯示tomcat8.5文件夾下每個文件、目錄的占用空間
  • df: 顯示磁盤分區上可以使用的磁盤空間
    例:
    df -a 表示查看全部文件系統,單位默認KB
    df -h 表示以KB、MB、GB的單位來顯示,可讀性高
    更多內容參考這里

8.文件傳輸命令:ftp,scp,rsync,rz,sz
  • ftp:先忽略

  • scp:
    scp -p ./files/yum.log 192.168.214.187:/tmp/demo/ :表示將當前系統的files目錄下的yum日志文件復制到IP為192.168.214.18的機器的/tmp/demo目錄下

  • sz:
    sz test.log: 下載test.log日志文件到windows下

  • rz:
    文件上傳,出現彈出框,選中要上傳的文件,確定之后即可上傳文件

  • rsync:
    rsync是可以實現增量備份的工具。配合任務計划,rsync能實現定時或間隔同步,配合inotify或sersync,可以實現觸發式的實時同步。rsync可以實現scp的遠程拷貝,cp的本地拷貝、rm刪除和"ls -l"顯示文件列表等功能


9.網絡配置相關命令:netstat、ifconfig、ss、tcpdump、traceroute、ping、nslookup、dig、nmap
  • ifconfig:查看當前系統的網卡信息. 和ip addr命令類似

  • ping:查看與某台機器的連接情況

  • netstat:用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態,masquerade 連接,多播成員等。
    查看當前系統的端口使用:netstat -an
    列出所有端口: netstat -a
    列出所有tcp端口: netstat -at
    列出所有udp端口: netstat -au
    只顯示監聽端口: netstat -l
    只列出所有監聽tcp端口: netstat -lt
    只列出所有監聽udp端口: netstat -lu
    只列出所有監聽UNIX端口: netstat -lx
    顯示所有端口的統計信息: netstat -s
    netstat 將每隔2秒輸出網絡信息:netstat -t -c 2
    顯示核心路由信息:netstat -rn
    找出程序運行的端口:netstat -apn | grep ssh
    找出運行在指定端口的進程:netstat -an | grep ':22'
    查看6379端口占用情況: netstat -ntlp | grep 6379

  • ss:可以用來獲取socket統計信息,可以顯示和netstat類似的內容,優勢在於它能夠顯示更多更詳細的有關TCP和連接狀態的信息,而且比netstat更快速更高效。
    例:ss -l 顯示本地打開的所有端口
    ss -pl 顯示每個進程具體打開的socket
    ss -t -a 顯示所有tcp socket
    ss -u -a 顯示所有的UDP Socekt
    ss -o state established '( dport = :smtp or sport = :smtp )' 顯示所有已建立的SMTP連接
    ss -o state established '( dport = :http or sport = :http )' 顯示所有已建立的HTTP連接
    ss -x src /tmp/.X11-unix/* 找出所有連接X服務器的進程
    ss -s 列出當前socket詳細信息

ss 與 netstat對比:  
    ss命令是iproute工具集(CentOS 最小化安裝帶有);netstat命令是net-tools工具集;
    當服務器的socket連接數量變得非常大時,無論是使用netstat命令還是直接cat /proc/net/tcp,執行速度都會很慢;
    ss快的秘訣在於,它利用到了TCP協議棧中tcp_diag。tcp_diag是一個用於分析統計的模塊,可以獲得Linux 內核中第一手的信息,這就確保了ss的快捷高效。
  • tcpdump:用於傾倒網絡傳輸數據,執行tcpdump指令可列出經過指定網絡界面的數據包文件頭
    例: tcpdump 顯示TCP包信息
    tcpdump -c 20:顯示指定數量包
    tcpdump -c 10 -q:精簡模式顯示 10個包
    tcpdump -ddd:轉換成十進制格式
  • traceroute:可以知道信息從你的計算機到互聯網另一端的主機是走的什么路徑
    例如:
  1. traceroute -n -m 5 -q 4 -w 3 www.baidu.com
    說明: -n 顯示IP地址,不查主機名,  -m 設置跳數   -q 4每個網關發送4個數據包    -w 把對外發探測包的等待響應時間設置為3秒
  2. traceroute -p 6888 www.baidu.com 探測包使用的基本UDP端口設置6888
  3. traceroute -r www.baidu.com 繞過正常的路由表,直接發送到網絡相連的主機
  • nslookup:用於查詢DNS的記錄,查詢域名解析是否正常,在網絡故障時用來診斷網絡問題。
    例:nslookup www.baidu.com 表示使用本機默認DNS來解析百度地址
    nslookup www.baidu.com 8.8.8.8 表示指定DNS服務器來解析百度地址
    nslookup -d www.baidu.com 表示只要在查詢的時候,加上-d參數,即可查詢域名的緩存
  • nmap
    tcp端口掃描:-sT、-sP
    TCP SYN端口掃描:-sS
    nmap -sS 192.168.137.10 -255 -p 20,21,53-110,30000 --v
    UDP端口掃描:-sU
    TCP ACK掃描:-sA
  • dig 命令主要用來從 DNS 域名服務器查詢主機地址信息
    dig baidu.com 查詢單個主機的信息

注意點:
linux連接超時,處理方案:
1. 測試網絡是否通:ping 遠程IP
2. 如果能ping通則表示與服務器網絡連接是正常,接下來測試端口:telnet 遠程ip 端口
3.如果telnet不上,要考慮服務器是否有防火牆攔截:
  (1)CentOS7查看防火牆是否運行: firewall-cmd --state
  (2) CentOS6查看防火牆是否運行:/sbin/service iptables status
4. 如果防火牆被攔截,需要放行端口。如果防火牆沒有攔截,則要考慮服務內部是否配置限定IP訪問。MySQL、MongoDB、Redis都有bind選項,用來限定客戶端IP
5. 再檢查服務內部是否有其它權限設置,例如MySQL有遠程訪問配置,Redis有protected-mode改為no

面試題:Linux查看cpu占用率高的進程(阿里面試題)
面試題:查看占用某端口的進程(阿里面試題)
面試題:查看某進程監聽的端口(阿里面試題)
面試題:查看系統負載(今日頭條面試題)
面試題:查看進程中線程的狀態(蘑菇街面試題)

第一題: 
可以使用以下命令查使用內存最多的K個進程:ps -aux | sort -k4nr | head -K
ps -aux中(a指代all——所有的進程,u指代userid——執行該進程的用戶id,x指代顯示所有程序,不以終端機來區分)
或者直接用命令:top
第一題:
可以使用以下命令查使用CPU最多的K個進程:ps -aux | sort -k3nr | head -K
第二題:
查看占用某端口的進程:
lsof -i:端口號
netstat -tunlp | grep 端口號
第三題:
查看某進程監聽的端口:ps -aux | grep tomcat
第四題:
查看系統負載:
top命令查看linux負載:top  
輸入top,會輸出top - 01:18:39 up 2 days, 18:54, 1 user, load average: 0.04, 0.03, 0.05 
//01:18:39:系統當前時間 
//up 2 days, 18:54 :系統開機到現在經過了2天
//1 users:當前1用戶在線 
//load average:0.04, 0.03, 0.05:系統1分鍾、5分鍾、15分鍾的CPU負載信息. 
第五題:
查看進程中線程的狀態:top -H
查指定進程的狀態:top -H -p <pid>


免責聲明!

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



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