主頁 > 作業系統 > Linux文本處理三劍客之awk學習筆記12:實戰演練

Linux文本處理三劍客之awk學習筆記12:實戰演練

2021-02-07 06:12:46 作業系統

此博文的例題來源于駿馬金龍的awk課程以及awk示例的整合,一些在以往的awk學習筆記中有涉及的示例,這里就不再重復了,

處理代碼注釋

# cat comment.txt 
/*AAAAAAAAAA*/    # 整行都被注釋所占滿,
1111
222

/*aaaaaaaaa*/
32323
12341234
12134 /*bbbbbbbbbb*/ 132412    # 注釋的左右兩邊有內容,需保留,

14534122
/*    # 跨行注釋,
    cccccccccc
*/
xxxxxx /*ddddddddddd    # 跨行注釋且注釋的左邊有內容,需保留,
    cccccccccc
    eeeeeee
*/ yyyyyyyy    # 跨行注釋且注釋的右邊有內容,需保留,
5642341

需要充分理解哪些是應該洗掉的,哪些是應該保留的,

# cat comment.awk
index($0,"/*"){
    if(index($0,"*/")){    # 同行包含“*/”字串,
        # 12134 /*bbbbbbbbbb*/ 132412
        print gensub("^(.*)/\\*.*\\*/(.*)$","\\1\\2","g")
    }else{    # 同行不包含“*/”字串,
        print gensub("^(.*)/\\*.*$","\\1","g")
        while(getline){
            if(index($0,"*/")){
                print gensub("^.*\\*/(.*)$","\\1","g")
                next    # 這里不能使用break,請理解它們的區別,
            }
        }
    }
}

!index($0,"/*"){
    print
}

# awk -f comment.awk comment.txt 

1111
222


32323
12341234
12134  132412

14534122


xxxxxx 
 yyyyyyyy
5642341

這個代碼還有一些可以優化的點,例如去除空白行與空行,

 

前后段落判斷

有這樣的一個檔案,

# cat order.txt
2019-09-12 07:16:27 [-][
  'data' => [
    'http://192.168.100.20:2800/api/payment/i-order',
  ],
]
2019-09-12 07:16:27 [-][
  'data' => [
    false,
  ],
]
2019-09-21 07:16:27 [-][
  'data' => [
    'http://192.168.100.20:2800/api/payment/i-order',
  ],
]
2019-09-21 07:16:27 [-][
  'data' => [
    'http://192.168.100.20:2800/api/payment/i-user',
  ],
]
2019-09-17 18:34:37 [-][
  'data' => [
    false,
  ],
]

由多段構成,每一段的格式類似如下:

YYYY-MM-DD HH:mm:SS [-][
  'data' => [
    'URL',
  ],
]

需求:找出段資訊包含“false”并且它的前一段包含“i-order”,然后將符合條件的這兩段資訊列印出來,

思路:

  • 文本資訊具有規律性,修改RS使得每段資訊成為一條記錄,
  • 需要定義一個變數來保存前一段資訊,
  • 當前段資訊和前一段資訊需要同時滿足條件,
# cat order.awk
BEGIN{
    ORS=RS="]\n"
}
{
    if($0~/false/&&prev~/i-order/){    # 只有第一條記錄的$0會和prev相同,如果第一條記錄同時包含了“false”和“i-order”,那么就要另作考慮了,
        print prev
        print $0
    }
    prev=$0
}
# awk -f order.awk order.txt 
2019-09-12 07:16:27 [-][
  'data' => [
    'http://192.168.100.20:2800/api/payment/i-order',
  ],
]
2019-09-12 07:16:27 [-][
  'data' => [
    false,
  ],
]

 

行列轉換

示例一

這道題我個人認為是比較經典的一道題目,尤其是進階版的考察了awk的許多方面,

首先我們來看基礎版,也就是作者的原版,

# cat RowColumnConvert.txt
ID  name   gender  age  email
1   Bob    male    28   qq.com
2   Alice  female  20   163.com
3   Tony   male    18   gmail.com
4   Kevin  female  30   xyz.com

期望將行轉換成列,

ID      1       2       3           4
name    Bob     Alice   Tony        Kevin
gender  male    female  male        female
age     28      20      18          30
email   qq.com  163.com gmail.com   xyz.com

原作者給出的答案,

# cat RowColumnConvert.awk
{
    for(i=1;i<=NF;i++){
        if(typeof(arr[i])=="unassigned"){
            arr[i]=$i
        }else{
            arr[i]=arr[i]"\t"$i
        }
    }
}

END{
    for(i=1;i<=NF;i++){
        print arr[i]
    }
}

這種使用字串連接再在其中加入一個制表符來構建的方式,如果某些記錄的長度過長或者過短,就會導致排版的不統一,

在該示例中則是原第5行第4列“gmail.com”長度過長導致的,

這個代碼要求每一行同欄位之間的長度不可以太長,

因此我們來看一下進階版,要求行列轉換以后要對齊,

  • 首先需要先將原始資料保存起來,然后再輸出,原始資料由第N行第N列以及其對應的具體值來表述,例如“第3行第3列是female”,那么需要存盤的資訊就有3個,就可以使用二維陣列,
  • 使用變數i表示原始資料的行,變數j表示原始資料的列,在腦中要有這樣的思路,不然很容易出錯,
  • 原檔案行數和列數一致,容易造成誤導,最好修改一下,使它們不一致,
  • 對齊的思路是我們去計算應該填充多少空格字符,
# cat RowColumnConvert2.awk
{
    for(j=1;j<=NF;j++){
        arr[NR,j]=$j
        len[j]=length($j)
        maxLength[NR]=len[j]>maxLength[NR]?len[j]:maxLength[NR]
    }
}
func cat(count    ,str,x){    # 這里的“區域變數”的定義很重要,尤其是如果這里使用了同名變數i或者j的情況下!
    for(x=1;x<=count;x++){
        str=str" "
    }
    return str
}
END{
    for(j=1;j<=NF;j++){
        for(i=1;i<=NR;i++){
            if(typeof(brr[j])=="unassigned"){
                brr[j]=arr[i,j]""cat(maxLength[i]-length(arr[i,j]))"  "
            }else{
                brr[j]=brr[j]""arr[i,j]""cat(maxLength[i]-length(arr[i,j]))"  "
            }
        }
        print brr[j]
    }
}
# awk -f RowColumnConvert2.awk RowColumnConvert.txt 
ID      1       2        3          4        5            
name    Bob     Alice    Tony       Kevin    Tom          
gender  male    female   male       female   male         
age     28      20       18         30       25           
email   qq.com  163.com  gmail.com  xyz.com  alibaba.com

示例二

name age
alice 21
ryan 30

期望轉換成:

name alice ryan
age 21 30
# cat RowColumnConvert3.awk
{
    for(i=1;i<=NF;i++){
        if(typeof(arr[i])=="unassigned"){
            arr[i]=$i
        }else{
            arr[i]=arr[i]" "$i
        }
    }
}
END{
    for(i=1;i<=NF;i++){
        print arr[i]
    }
}
# awk -f RowColumnConvert3.awk test.txt 
name alice ryan
age 21 30

示例三

# cat test.txt
74683 1001
74683 1002
74683 1011
74684 1000
74684 1001
74684 1002
74685 1001
74685 1011
74686 1000
100085 1000
100085 1001

期望輸出:

74683 1001 1002 1011
74684 1000 1001 1002
74685 1001 1011
74686 1000
100085 1000 1001
# cat RowColumnConvert4.awk
{
    if(!$1 in arr){
        arr[$1]=$2
    }else{
        arr[$1]=arr[$1]" "$2
    }
}
END{
    for(i in arr){
        print i,arr[i]
    }
}
# awk -f RowColumnConvert4.awk test.txt 
74683  1001 1002 1011
74684  1000 1001 1002
74685  1001 1011
74686  1000
100085  1000 1001

 

格式化空白字符

主要涉及awk對于$N進行修改時會基于OFS來重建$0,在【欄位與記錄的重建】中我們已經提到過,

# cat chaos.txt
      aaa          bb cccc
dd ee        ff gg
  hhhhh    i                jjjj
# awk 'BEGIN{OFS="\t"}{$1=$1;print}' chaos.txt
aaa    bb    cccc
dd    ee    ff    gg
hhhhh    i    jjjj

在Linux中是對齊的,不曉得是不是博客園【插入代碼】顯示的問題,

 

篩選IP地址

目標是從ifconfig的輸出結果中篩選出IPv4地址,這題我們以前就做過,具體的解題思路詳見讀取檔案中的【資料篩選示例】,這里直接給答案,

ifconfig | awk '/inet /&&!/127.0.0.1/{print $2}'
ifconfig | awk 'BEGIN{RS=""}!/^lo/{print $6}'
ifconfig | awk 'BEGIN{RS="";FS="\n"}!/^lo/{FS=" ";$0=$2;print $2;FS="\n"}'

 

讀取組態檔中的某段

這里我們以yum源的組態檔為例,我們過濾掉注釋和空行,

# grep -vE "^#|^$" /etc/yum.repos.d/CentOS-Base.repo
... ...
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
... ...

期望僅取出某一段資料,例如[extras]段,

思路一:

  • 組態檔具備規律性,將中括號作為記錄分隔符,
  • 基于上面那點再修修補補即可取到想要的資訊,
# grep -vE "^#|^$" /etc/yum.repos.d/CentOS-Base.repo | awk 'BEGIN{RS="[";ORS=""}/^extras/{print "["$0}'
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

思路二:

  • 先找extras那行,找到以后輸出,
  • 隨后回圈getline并列印,直到遇到下一個配置段“[.+]”,
# cat extract.awk
index($0,"[extras]"){
    print
    while((getline)>0){
        if($0~/\[.+\]/){
            break
        }
        print
    }
}
# grep -vE "^#|^$" /etc/yum.repos.d/CentOS-Base.repo | awk -f extract.awk 
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

根據$0中的部分資訊進行去重

首先來看示例檔案,

# cat partDuplicate.txt
2019-01-13_12:00_index?uid=123
2019-01-13_13:00_index?uid=123
2019-01-13_14:00_index?uid=333
2019-01-13_15:00_index?uid=9710
2019-01-14_12:00_index?uid=123
2019-01-14_13:00_index?uid=123
2019-01-15_14:00_index?uid=333
2019-01-16_15:00_index?uid=9710

如果問號后面的“uid=xxx”相同,我們就認為是重復的資料,并且將其去除,

輸出的時候,我們要保證原本的資料出現的順序,因此就不應存入陣列并進行無序遍歷了,

思路在陣列的實戰中我們就有接觸過了,

思路一:

以問號作為FS,將$2作為陣列索引,每次awk內部回圈對arr[$2]進行自增,第一次出現的資料arr[$2]的值就為1,僅針對第一次出現的資料進行輸出即可,

# awk 'BEGIN{FS="?"}{arr[$2]++;if(arr[$2]==1){print}}' partDuplicate.txt
2019-01-13_12:00_index?uid=123
2019-01-13_14:00_index?uid=333
2019-01-13_15:00_index?uid=9710

思路二:

我們可以將“!arr[$2]++”拿來做pattern,第一次出現資料時回傳值為1,往后的回傳值均是0,

action部分只需要輸出,并且以下三者等價:

PAT{print $0}
PAT{print}
PAT

關于pattern和action的省略情況,詳見這里,因此我們就只需要pattern即可,

# awk 'BEGIN{FS="?"}!arr[$2]++' partDuplicate.txt
2019-01-13_12:00_index?uid=123
2019-01-13_14:00_index?uid=333
2019-01-13_15:00_index?uid=9710

 

次數統計

示例檔案:

# cat test.txt
portmapper
portmapper
portmapper
portmapper
portmapper
portmapper
status
status
mountd
mountd
mountd
mountd
mountd
mountd
nfs
nfs
nfs_acl
nfs
nfs
nfs_acl
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgr
# awk '{arr[$0]++}END{for(i in arr){print i"-->"arr[i]}}' test.txt
nfs-->4
status-->2
nlockmgr-->5
portmapper-->6
nfs_acl-->2
mountd-->6

 

統計TCP連接狀態數量

詳見陣列的實戰部分,

 

根據http狀態碼統計日志中各IP的出現次數

需求:統計web日志中,http狀態碼非200的客戶端IP的出現次數,按照降序的方式統計出前10行,

日志檔案放百度網盤了,提取碼是jtlg,

111.202.100.141 - - [2019-11-07T03:11:02+08:00] "GET /robots.txt HTTP/1.1" 301 169 "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)" "-"
# awk '$8!=200{arr[$1]++} END{PROCINFO["sorted_in"]="@val_num_desc";for(i in arr){if(cnt++==10){break}print arr[i]"-->"i}}' access.log 
896-->60.21.253.82
75-->216.83.59.82
21-->211.95.50.7
21-->61.241.50.63
20-->59.36.132.240
18-->182.254.52.17
16-->50.7.235.2
15-->101.89.19.140
15-->94.102.50.96
13-->198.108.67.80

 

統計獨立IP

# cat independence.txt
a.com.cn|202.109.134.23|2015-11-20 20:34:43|guest
b.com.cn|202.109.134.23|2015-11-20 20:34:48|guest
c.com.cn|202.109.134.24|2015-11-20 20:34:48|guest
a.com.cn|202.109.134.23|2015-11-20 20:34:43|guest
a.com.cn|202.109.134.24|2015-11-20 20:34:43|guest
b.com.cn|202.109.134.25|2015-11-20 20:34:48|guest

從該檔案中統計每個域名及其對應的獨立IP數,

例如,a.com.cn的行有3條,但是獨立IP只有2個,因此需要記錄的資訊就是:

a.com.cn 2

將所有的域名及其獨立IP的數量統計后輸出到“域名.txt”格式的檔案中,

# awk 'BEGIN{FS="|"} !arr[$1,$2]++{brr[$1]++} END{for(i in brr){print i,brr[i]>i".txt"}}' independence.txt
# cat a.com.cn.txt 
a.com.cn 2
# cat b.com.cn.txt 
b.com.cn 2
# cat c.com.cn.txt 
c.com.cn 1

 

兩個檔案的處理

存在兩個檔案file1.txt和file2.txt:

# cat file1.txt
50.481  64.634  40.573  1.00  0.00
51.877  65.004  40.226  1.00  0.00
52.258  64.681  39.113  1.00  0.00
52.418  65.846  40.925  1.00  0.00
49.515  65.641  40.554  1.00  0.00
49.802  66.666  40.358  1.00  0.00
48.176  65.344  40.766  1.00  0.00
47.428  66.127  40.732  1.00  0.00
51.087  62.165  40.940  1.00  0.00
52.289  62.334  40.897  1.00  0.00

# cat file2.txt
48.420  62.001  41.252  1.00  0.00
45.555  61.598  41.361  1.00  0.00
45.815  61.402  40.325  1.00  0.00
44.873  60.641  42.111  1.00  0.00
44.617  59.688  41.648  1.00  0.00
44.500  60.911  43.433  1.00  0.00
43.691  59.887  44.228  1.00  0.00
43.980  58.629  43.859  1.00  0.00
42.372  60.069  44.032  1.00  0.00
43.914  59.977  45.551  1.00  0.00

需求:替換file2.txt的第5列的值為file2.txt的第1列減去file1.txt的第1列的值,

方法一

# cat twoFile1.awk
{
    num1=$1
    if((getline < "file2.txt")>0){
        $5=$1-num1
        print $0
    }
}
# awk -f twoFile1.awk file1.txt 
48.420 62.001 41.252 1.00 -2.061
45.555 61.598 41.361 1.00 -6.322
45.815 61.402 40.325 1.00 -6.443
44.873 60.641 42.111 1.00 -7.545
44.617 59.688 41.648 1.00 -4.898
44.500 60.911 43.433 1.00 -5.302
43.691 59.887 44.228 1.00 -4.485
43.980 58.629 43.859 1.00 -3.448
42.372 60.069 44.032 1.00 -8.715
43.914 59.977 45.551 1.00 -8.375

方法二

我們期望將file1.txt和file2.txt都直接作為命令的引數,形如:

awk '...rule...' file1.txt file2.txt
# cat twoFile2.awk
NR==FNR{    # 如果NR和FNR相等,那么就表示awk在處理的檔案是第一個檔案
    arr[FNR]=$1
}
NR!=FNR{
    $5=$1-arr[FNR]
    print $0
}
# awk -f twoFile2.awk file1.txt file2.txt 
48.420 62.001 41.252 1.00 -2.061
45.555 61.598 41.361 1.00 -6.322
45.815 61.402 40.325 1.00 -6.443
44.873 60.641 42.111 1.00 -7.545
44.617 59.688 41.648 1.00 -4.898
44.500 60.911 43.433 1.00 -5.302
43.691 59.887 44.228 1.00 -4.485
43.980 58.629 43.859 1.00 -3.448
42.372 60.069 44.032 1.00 -8.715
43.914 59.977 45.551 1.00 -8.375

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/257301.html

標籤:其他

上一篇:linux查看磁盤資訊

下一篇:docker部署 springboot 多模塊專案+vue

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more