Java面試基礎 -- Linux篇

来源:https://www.cnblogs.com/yzh-blog/archive/2019/10/14/11670289.html
-Advertisement-
Play Games

0.日常命令 cd 目錄路徑: 跳轉到指定目錄 mkdir 目錄名稱:新增目錄 pwd: 獲取當前路徑 su: 切換用戶 ll: 查看當前目錄俠的文件和目錄 rm rf 目錄: 遞歸刪除指定目錄下的所有文件 vi 文件:修改文件 mv 源文件夾名 新文件夾名:移動文件夾到指定目錄 grep:查找想要 ...


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>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文首發於:微信公眾號「運維之美」,公眾號 ID:Hi Linux。 「運維之美」是一個有情懷、有態度,專註於 Linux 運維相關技術文章分享的公眾號。公眾號致力於為廣大運維工作者分享各類技術文章和發佈最前沿的科技信息。公眾號的核心理念是:分享,我們認為只有分享才能使我們的團體更強大。如果你想第一 ...
  • 最近使用git 管理項目的時候,編譯過程中出現了很多中間文件,今天發現使用 git clean 命令可以很方便進行清除: 保持更新,轉載請註明出處;更多內容請訪問 cnblogs.com/xuyaowen ...
  • linux掛載iso鏡像可以分為兩種,直接掛載鏡像和上傳鏡像文件至伺服器進行掛載 一、虛擬機鏡像掛載 測試時使用虛擬機,此時可以直接在虛擬機的設置中將鏡像文件直接選擇併進行掛載,無需上傳至虛擬機伺服器內。 1、點擊cd/dvd,選擇使用ISO映像文件,瀏覽所需iso文件,並勾選已連接。此時虛擬機桌面 ...
  • Ubuntu 網路配置 安裝 操作系統之後,為了通過 連接主機,或者連接其他主機。需要進行如下網路配置和ssh服務配置。 1 網路配置 1.1 修改網路配置信息 ,在其中找到對應網卡進行修改 輸入以下內容 接下來配置 打開配置文件進行修改 ,輸入以下內容: 1.2 重啟機器 這是因為 之後,發現網路 ...
  • 假如當前存在的問題是: /bin/bazel 存在命令的版本為 0.18.0 /home/yaoxu/bin/bazel 存在的命令的版本為 0.10.0 我們應該如何配置環境變數,來確定執行哪個版本呢? 通過我的實驗,環境變數是逐層覆蓋的,越在後面的環境變數優先順序越高;如果系統中預設是 0.18. ...
  • 本文是i.MXRT硬體那些事系列第二篇,第一篇痞子衡給大家整體介紹了i.MXRT官方EVK,從本文開始痞子衡將細聊EVK上的組件,今天要講的是一個非常經典而且常用的組件 - 板載調試器。如今各大半導體廠商推出的EVK基本都會配置自己家設計的板載調試器,方便客戶開箱即用,不需要自己額外準備模擬器。眾所... ...
  • 在使用 python anaconda時,經常會用到很多常用操作,記錄下來,方便以後更好地使用: conda: Conda既是一個包管理器又是一個環境管理器。你肯定知道包管理器,它可以幫你發現和查看包。但是如果當我們想要安裝一個包,但是這個包只支持跟我們目前使用的python不同的版本時。你只需要幾 ...
  • [表示命令]man -f [] 顯示一個命令的功能whatis [] 顯示一個命令的功能ls -lR | grep '^-' | wc -l 統計一個目錄下總共有多少個文件head 【-n number】取出前幾行tail 【-n number】取出後幾行cat 查看文本內容 tac 反向查看mor ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...