91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

grub 修復及 AWK用法

發布時間:2020-05-17 23:22:34 來源:網絡 閱讀:322 作者:真的叼了都 欄目:系統運維

系統啟動和內核管理,各種修復及各種編譯

Linux就是個內核。
ldd命令可查到每一個程序依賴的庫。
Centos6的啟動流程及修復

centos6啟動步驟概述
1、上電POST自檢,加載BIOS的硬件信息,獲取第一個啟動設備
2、讀取第一個啟動設備MBR里的引導加載程序(grub)的啟動信息
3、加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備
4、核心執行init程序,并獲取默認的運行信息
5、init程序執行/etc/rc.d/rc.sysinit文件
6、啟動核心的外掛模塊
7、init執行運行的各個批處理文件(scripts)
8、init執行/etc/rc.d/rc.local
9、執行/bin/login程序,等待一會登錄
10、登錄之后開始以shell控制主機

Bootloader是用來啟動操作系統的。實現操作系統的前期引導。

GRUB啟動程序是多部份組合而成,其中MBR的前446個字節只是他的第一個階段。
第二階段放在了磁盤文件:放在了/boot下的grub文件
內核放在/boot/文件下這就是內核文件

初始化的文件系統:/boot/initramfs - VERSION -release.img 這還是一個打包文件。
:先修改后綴就能解壓。
:這個文件的目錄和根分區的目錄一樣。他就是一個縮小版的根。這個文件里面就是一個隱藏版的小內核。
:--force 這是強制安裝覆蓋安裝。

Chroot:改變根的掛載位置
Initramfs 文件被破壞的救援
:initramfs文件破壞的救援
Initramfs文件破壞的界面:↓↓

然后再關閉虛擬機在電源開啟處

在重啟虛擬機輸入esc鍵進入boot 關盤救援模式

進入這個文件。
:更改根掛載的位置,這是真的根
:mkinitrd文件制作命令在接著輸入這一條命令。

             刪除initramfs。Img  恢復之:

1 rescue mode(進入救援模式)
2 chroot /mnt/sysimage 切根
3 mkinitrd /boot/initramfs-uname -r.img uname -r
4 exit ; exit ; reboot

Mkinitrd是一個腳本文件。兩種方法都可以用來生成ramdisk這個文件。

在centos6上使用的是ubantu的init 基于upstaet這個程序來開發出來的。
但是他們都有一個相同的文件/etc/inittab文件,是init啟動的時候會讀取的文件。
Init 啟動流程及破解密碼和多次重啟的修復方法

Init進程啟動之后就開始讀取一些配置文件。
比較關鍵的文件:/evt/inittab文件:
定義了啟動時非常重要的特性,開機的時候到底進入到什么模式下。
使用runlevel命令是可以查看在那個模式下。
Init 啟動在那個模式下是靠vim /etc/inittab這個配置文件下來定義的。
:這一樣是設置開機啟動在那個模式下,這一行的作用就是用來設置開機啟動在那種模式下的。
1 模式單用戶模式。:可以用來進行維護作用。
2 模式是沒有NFS功能。其他和3模式相似的
4 模式沒有使用功能。
Init是加載系統中的第一個主程序。
:開機的配置文件
init1模式下單用戶模式 破解密碼
再單用戶模式下只提供了concole一個控制臺。只提供了一個終端,將來單用戶模式主要用于維護用,使用單用戶模式確保別人都不能訪問只有我一個人可以訪問,在工作中在單用戶下可以輕松的破解root口令的。
如何再centos 5 和6上破解root口令:
1 :輸入重啟時輸入任意鍵再輸入a進入內核

2 :進去之后輸入1進入單用戶模式

3 :進入之后輸入修改密碼

這就已經單用戶破解了口令了。
Init6模式下,虛擬機一直重啟修復
1:
在重啟界面輸入任意鍵,進入下圖↓↓然后輸入a鍵

2:
進入3模式↓↓

3:vim /etc/inittab進入修改init模式

Id:理解成一個行的標識
runlevels:后續的這個程序是在哪個運行級別里運行。(表示0-6的某一個模式)
action:表示在這個模式下要執行的事。其中action里面常見的動作有這幾種:
Wait:切換此運行級別只運行一次后續不在運行。
resoawn:這進程如果終止,將重新啟動(具有再生功

能)。
Initdefault:開機進入到此運行模式,開機系統就會運行到指定的模式下。
Sysinit: 表示的是系統初始化的一個方式,開機的時候所有init都會先運行系統運行的腳本。
啟動流程:
/etc/rc.d/rc.sysinit : 系統初始化腳本
(1)設置主機名
(2)設置歡迎信息
(3)設置udev規則,和selinux
(4)重新根據/etc/fstab文件的內容進行掛載
(5)重新掛載根,而且以可讀可寫方式掛載
(6)設置系統時間
(7)激活swap設備
(8)根據/etc/sysctl.conf 文件設置內核參數
(9)激活lvm及software raid設備
(10)加載額外設備的驅動程序
(11)清理操作
這是一個復雜的腳本,這個腳本時系統提供好的一般來將不建議修改他的。
這個腳本運行完了以后就開始根據系統的運行模式
Process:進程程序名。
:打印當前Linux系統的運行等級
如果開機進入的是0模式然后再系統讀秒的時候輸入任意鍵,然后再內核參數輸入a跟5模式,零時的繞過錯誤文件,再進入vim /etc/inittab文件配置
修改系統運行等級。

Service 引用的就是 /etc/init.d/atd 這個腳本,

K開頭決定服務不啟動
S開頭決定服務的啟動
計劃任務是一個服務。
S開頭的就是開機的啟動服務。
開機啟動的順序決定:

次序是按照字母表次序排序
啟動服務是有一定講究的有些服務之間有一定的依賴,有些服務要啟動的先把別的服務先起來。關閉服務的時候先關后面的在管前面的,因為后免得依賴性太多了,開啟的時候正好反過來。

在0-6這七種模式下,服務的啟動或者關閉都是可以加以認為改變的。 0-6的區別在于就是各種服務啟動不啟動的各種組合。

K開頭和S開頭可以手工的去修改他,把它設為K開頭或者S開頭:
ntsysv這個命令進去之后可以修改服務的啟動(只能改一種模式,但是也可以指定模式) :
進入之后*表示開機啟動,就為S開頭的文件把他關了就代表K開頭的文件。但他只能在當前修改的模式下為K開頭當開機模式切換為init 其他模式他依舊為S開頭的文件。
:該命令表示了只修改該5模式下的開機啟動服務(但是這個命令只能同一時間改一個模式)

編寫添加服務腳本

  • :表示的是剛把這個服務加進系統中,系統認為所有模式(0-6)下全是off。
    1.創建一個腳本
    (1):必須寫到這個目錄下
    (2)
    1. 添加到啟動服務中。
      Chkconfig --add 叫腳本名就加入了啟動服務中
    2. 啟動腳本出現錯誤機器起不來了。
      1.如果開啟虛擬機的時候起不來的服務就會卡在那
      2.然后再次重啟進入單用戶模式輸入 chkconfig 起不來的服務腳本名 off將他停掉
      3.然后在重啟在想辦法進入那個啟動腳本解決。
      刪除啟動腳本。
      Chkconfig --del 跟腳本名:這樣刪除帶來的好處就是馬上軟連接就沒了,當然這個腳本還在。在centos7上面已經不推薦這么使用。
      非獨立服務

Service --status -all 這個選項所有服務的狀態都能看到。
瞬態服務:用的不太多的服務找一個代理人由它來管理這個代理人叫:xinetd服務。他用來解決某些服務用的并不是這么頻繁的服務。平時用的不多的服務并不啟動,由xinetd這個服務來監控。
用xinetd來代理的服務叫做:非獨立服務。
非獨立服務都是由xinetd來進行監管和代理。

剛裝的服務都不會自動啟動,只有手動啟動:
1·先啟動xinetd服務:

3·重啟xinetd服務是修改得配置文件生效。

另一種啟動方法
:這個命令也是將配置文件的yes改為了on直接修改

S99local :
這個腳本將所有的init腳本運行后在運行。:把想開機的命令寫在這個文件就行了。不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行
的命令,可直接放置于/etc/rc.d/rc.local文件中,在centos7上面要加執行權限才能運行。

https://cache.yisu.com/upload/information/20200309/28/32514.jpg
Grnb就是Boot loader的過程:
關鍵內容分為第一階段和第二階段grub就是我們對應的boot loader
在centos6上用的版本是0.97,centos7上版本已經是2.02版。你不論它是及版本他的功能都是加載找到操作系統的 。是脫離操作系統的軟件,可以用來啟動各種操作系統。

第一階段:
GRUB啟動程序是多部份組合而成,其中MBR的前446個字節只是他的第一個階段。
第1.5階段:
還有1.5階段:存放的位置在mbr之后的扇區,把驅動放在了后續的扇區中,通過后續的某個地方來找到boot對應的驅動。找到boot的驅動之后加載boot然后我們才能進到boot里面找到這個文件。因為進入到boot之后他會先進入到grub這個文件夾里,然后通過grub的一個文件定位vmlinuz內核文件的文件名,這個文件就是grub.conf這個配置文件。
第二階段:
第二階段就會讀取grub.conf文件根據里面的配置文件來找到內核
grub.conf這個配置文件解析圖

Yum 安裝內核及卸載內核
1 :http://elrepo.org/tiki/tiki-index.php 這個網站提供了很多新版的內核

2.:根據需求下載需要的內核包

這是6就對應6,別的版本對應的不一樣。
3.: 進入內核配置文件進入官網。
(1)
(2)
(3)
(4)
4.:上面工作做完了直接安裝:

5.:進入cd /boot/grub vim grub.conf
然后reboot重啟即可生成。
刪除內核

Grub 修復,和刪除了/boot/initramfs.Xxx.img恢復,及制作linux系統

Grub對應的是第一個扇區,如果第一個扇區破壞了將如何來進行修復。
如果前446字節的boot loader被破壞了不需要去備份進行還原,用grub命令進行修復
(1)用grub-install 進行修復
語法:
在執行grub-install進行修復的時候他的語法是要指定根,也可以默認不指定后面跟上指定硬盤的設備名稱
grub-install --root-directory=DIR /dev/DISK

(2)或者用grub 的交互式命令進行修復
語法:
grub> root (hd#,#):進了以后用root指定分區的名稱,因為他要找到boot所在的位置
grub> setup (hd#):然后在指定安裝在那個硬盤上
Grnb的前446字節破壞故障修復
使用grub-install 命令修復方法
破壞前446字節

1:如果在生產中重啟直接不找硬盤找光盤就是mbr分區表出了故障:

2:進入救援模式

3:使用grub-install方法修改:這就修復成功

4:修復完了以后檢查是否修復成功
:這是查看前512字節里的前446字節是否修復成功
使用grub交互式修復方法
使用grub交互式下修復,依賴于boot下gurb里的若干文件才能修復
1:grub交互修復

2: 進入交互式后救修復就OK了

3:修復完了以后檢查是否修復成功
:這是查看前512字節里的前446字節是否修復成功
破壞grub里1.5階段修復跳過前512 字節破壞修復
1 : 破壞了512后面的字節故障顯示,這和破壞了512字節前的狀態不一樣但是也起不來了,但這次他不提示用光盤了,因為他認為硬盤具有啟動功能。

2: 直接進入救援模式下修復

3: 修復完了再同步

然后exit 退出直接到重啟界面
使用grub.conf配置文件防止單用戶模式破解密碼
1

再內核參數中我們可以加很多參數,具體需要我們可以通過安裝kernel-doc這個文檔來觀察每個參數的作用。
制作linux系統
該實驗對理解linux的組成很有意義

1 : 先創建一個小的linux系統

2 : 找到這個新建centos的配置文件

3 : 再將這個新建虛擬機添加到現有虛擬機的磁盤上

4: 添加好了就在shell上直接進行劃分工作
(1)

(2)

(3)

(4)然后進行掛載及安裝grub
掛載boot
mkdir /mnt/boot 子目錄必須為boot
mount /dev/sdb1 /mnt/boot
?安裝grub
grub-install --root-directory=/mnt /dev/sdb

(5)編寫grub.conf配置文件

(4)添加根的詳細信息

5 :添加網絡服務

6 : 將裝好的小linux那個虛擬機重啟再裝網絡服務

總結linux系統的組成:
作為啟動來講Boot Loader(就是grub),內核和其他的相關文件都得有這就可以湊一個linux出來。
邏輯卷破壞的修復。實驗:
grub第二階段破壞修復
二階段主要是對應主要對面的是/boot/grub。Grub這個目錄整個破壞了的修復方法
做實驗先將這個目錄全部刪除:

1: Grub第二階段破壞狀態:

2: 進入救援模式
·
3: 先切根再輸入grub - install /dev/sda :這命令是萬能命令,可以修復一階段和二階段的命令。
4: 修復了之后再進入到grub但是缺少grub.conf配置文件,如果現在立即重啟就缺少菜單項。進入/boot/grub文件編輯grub.conf配置文件然后重啟即可
(1)
(2)
(3)編寫grub.conf配置文件

(5)如果出現了交互式直接按照交互式的來修改
刪除了/boot/initramfs.Xxx.img,恢復
假如/etc/fstab文件和/boot文件全部被破壞

1 :

2 :

(1)邏輯卷再不是正常啟動的情況下,不會正常激活所以目前邏輯是不可訪問的狀態

(2)激活邏輯卷

(3)掛載root激活文件目錄,和掛載boot等會要用。
因為root是當根用的。Boot里面有gurb啟動文件。

(4)編譯掛載文件

3 : 改完邏輯卷配置文件再次進入到救援模式

(1)到了救援模式下的步驟掛載和安裝修復內核

(2)修復grub和編寫grub配置文件
:修復grub文件
:使用重定向把這個導入到vim配置文件里去。最后在使用sync同步刷新。
Proc目錄

在proc下有很多是可以設置的東西但是也有很多是可讀的東西。在proc下主要存放了系統運行過程中大量進程的東西都在proc下。有些設置也可以通過proc這個目錄修改。
/Proc/sys這個目錄可以修改很多參數。

這個文件專門管理此目錄的配置
禁ping↓↓
:改為1就ping不通了。
:路由器永久生效。
Sysctl - a列出所有正在生效的
Sysctl -p讀取配置文件的參數使之生效。

            TCP 協議連接優化。

源碼編譯內核

想用最新的內核就得源碼編譯:
在編譯的時候我們可以通過點菜單的方法來進行編譯。

[M]:表現為模塊方式,在磁盤上為獨立文件帶來的好處是需要就加載。
[*]:表現為集成在內核文件上去了。意味著將打包到我們的核心文件中。

lsmod 各種加載的驅動模塊,按需加載,也可以手動加載
modprobe 后面跟文件類型加載模塊手動加載(驅動模塊是可以加載也可以卸載的)
rmmod 后面跟文件類型卸載模塊
modinfo 后面跟文件類型看模塊詳細信息。
模塊和模塊之間是有依賴性的。
先卸載依賴文件類型載卸載模塊。

Insmod 安裝加載模塊(后面要加文件名和路徑)

編譯內核要安裝需要的軟件和依賴包
編譯的時候要考慮編譯環境。

7上編譯內核其支持ntfs文件
1 : 先在網上去下載新版內核,下載好后再將拖入xshell中

:在選擇這項

:在選擇NTFS文件最后全部退出保存進行編譯

2.裝的時候要分成兩步裝,第一步裝模塊第二步裝內核。
(1)make modules_install安裝模塊

(3)make install 安裝新內核

這就編譯完了。

Busybox介紹

Busybox源碼編譯

有一個工具叫make install 這個工具會自動的把軟連接放到一個叫_install的目錄中,把軟鏈接考出來就行了

Busybox源碼編譯
1 : 安裝所需的依賴包
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl
openssl-devel systemd-devel zlib-devel glibc-static ncurses-devel
2 : 進入官方網站下載源碼https://www.busybox.net/
復制版本鏈接

?cd busybox-1.30.1/
?make menuconfig 按下面選擇,把busybox編譯也靜態二進制、不用共享庫
Busybox Settings -->Build Options -->[] Build BusyBox as a static
binary (no shared libs)
?make && make install 如果出錯,執行make clean后,重新執行上面命令
?mkdir /mnt/sysroot/
?cp -a _install/
/mnt/sysroot/
Systemd 的原理
再centos7上面用systemd這個進程管理所有資源,而這些資源統稱為unit,unit把不同的資源分為了不同的類型,不管為什么類型都統稱為unit單元
Unit最主要的放在了/urs/lib/systemd/system,這個目錄里面放了各種資源,主要表現為文件后綴不同。這里面都為unit為了區分資源類型就用不同的文件后綴。
最多的就為service文件,這些service文件就等價于centos6上面的各種服務腳本。也就表現為一個一個服務除了service還有其他資源比方說target,target就像之前的runlevel的0到6這7中模式。

優先級越高就意味著該文件里面的腳本優先級越高
Systemctl 命令及各種選項用法

這種語 法帶來的好處是可以管理查看多個服務。

在centos7上啟動的時候不再顯示ok,如果不顯示則表現為正常狀態,如果顯示了往往是出了錯。

Maks選項代表是將某個服務禁止在讓他使用
Mask禁止服務流程:↓↓

Unmask取消禁止服務流程:↓↓

這樣的話就不會造成誤操作。

查看某服務當前激活與否的狀態如下兩圖:↓↓

設為開機啟動或不啟動就是本質上有沒有創建軟鏈接

下次開機禁止啟動,然后創建了一個軟連接

紅色表示沒有啟動,綠色表示啟動

就是一些服務各種狀態各種資源的集合。當進入到某個而且相互之間有各種依賴性,多個函數放到一個文件里面就相當于一個target

Centos7修復grub前446字節

Centos7破解root口令

防破解口令添加grub2密碼
Centos7修復grub2 第二階段

刪除centos7 /boot修復
修復次序:先修復內核再去修改gurb

這就修復完了
修改默認啟動內核
如果內核不想要的刪除方法及修改默認內核

下圖兩個都可以設置默認啟動內核

實驗熟練掌握:systemctl start stop restart enable disable mask unmask is-active is-enabled name.service
systemctl set-default multi-user.target
安全加固SElinux
越安全越復雜。
MAC:強制的訪問控制
:當前mac模式是否啟用禁用

這個文件可以修改禁用和允許

:臨時修改報警,不阻止

文本三劍客AWK(重點)

每讀一行處理一行,然后進行處理。這個命令可以除了各種文本信息,也能處理標準內容,和一些管道傳過來的內容

主要的功能能夠實現文本的處理
Awk語法:
Awk +選項 -f 后面可以跟文件或者程序。他后面這個文件不一定要必須跟,可以對標準輸入做處理。

程序的格式分為兩部分來組合而成,一部分是pattern,一部分是括號里面的action。Pattern就是模式,模式決定了讀入的每一行是否符合他的模式定義,如果符合這個模式定義,他將針對這一行的內容執行action動作,如果不符合這個模式定義,自然不會執行action里面的動作。
自動就把文件中的每一行讀入利用pattren做過濾滿足pattern條件的行,對應執行action,如果不滿足直接跳過
其中action最常見的動作就是print(打印),awk有個非常好的特點,自動地把某一行讀入之后,然后自動的將讀入的這行切割為了多個字段。
切割不用人為的去切割,默認的用空白符就可以切割(空格tab鍵都可以)可以用這種空白符自動把一行。切割成多個字段,而且切割完了以后awk自動的將這些切割完了的字段賦予了變量,切出來的第一個字段賦予了$1,第二個字段就是$2.直到$n。
但這個$和shell腳本里的$不是一個意思,其中$0代表了所以字段整行。 默認是一行處理但是也可以不用一行處理,其中wak在處理的時候,可以指定某一行作為一條記錄作為一個單位。事實上也可以不用行來作為單位的分割。
如果這個action動作沒有寫的話相當于執行了一個print $0的操作。
Awk工作原理

逗號分隔符;輸出的各item可以是字符串,也可是數值;當前記錄的字段、變量或awk的表達式;如省略item,相當于print $0。
awk程序通常由:BEGIN語句塊、能夠使?模式匹配的通?語句塊、END語句塊等三部分組成。program通常是被單引號或雙引號括起來。
選項:
-F:指明輸入時用到的字段分隔符;
-v var=value:自定義變量。
基本格式:
awk [options] 'program' file
program:表示為pattern{action statements;...}
pattern:表示部分決定動作語句何時觸發及觸發事件BEGIN、END;
action statements:表示對數據進行處理,放置{}內指明print、printf。
分隔符、域和記錄:
awk執行時,由分隔符的字段(域)標記$1,$2...$n稱為域標識。$0為所有域,注意:和shell中變量$符含義不
同;
文件的每一行稱為記錄;
省略action,則默認執行print $0的操作。
BEGIN 類似于打印的意思:
例圖:

Awk 最重要的功能還是對文件的處理

:雙引號中間只要是普通字符串不是變量一定要加雙引號引起來,除了數字。

會按照文件或者標準讀入輸入一行,然后執行pattren{任務}語句塊,然后逐行執行,直到最后一行執行完畢。
但是awk還支持另外兩個獨立的特殊語句,一個叫BEGIN一個叫END。
BEGIN,END并不是在文件的處理過程中來執行的,
BEGIN是開始:還沒有對文件進行讀入就先執行BEGIN的 ,文件前執行,可以做一些打印表格的表頭(大標題)

END是結束 :END恰恰相反,是把所有的文件都處理完了在執行,文件后執行
相當于一個頭一個尾,可以做匯總

Awk在執行分割打印的時候默認是將空白符來切割為多個字段,然后用$1來代表第一個字段...
事實上他的切割符也可以通過人為的切割 -F就是指定以什么字符作為切割符來進行切割。
:$1和$3中間用的逗號是默認使用空格作為分隔符,我們也能人為的加一些符號作為指定的分隔符

在AWK里面我們打印的內容只要不是變量不是數字就必須的用雙引號“”
awk 變量的用法

Awk也支持變量一種是系統支持的內置變量還有一種是自定義的變量, - v 表示后面有變量賦值,一個 - v 代表一個變量,要是有多個賦值每一個變量都得加 - v
FS:是系統自帶的變量,這個變量的作用是就是 -F 的作用。不過這個FS是個變量
要用變量標準的語法是 -v 對變量賦值,變量要賦值FS是一個系統自帶的變量他的功能是用來聲明字段和字段之間的分隔符,所以要用 -v FS對他來進行聲明賦值,賦值之后我們再去print里面去調用它。
FS變量得聲明及調用:↓↓
FS這個變量指定了對文件讀入的時候怎么去區分$1,$2,$3等等的分隔符就用FS來進行定義實際上他的作用和-F是一樣得

:需要指定分隔符所以的用-F或者FS來指定:冒號的變量。
變量的引用:↓↓(變量的好處是前面聲明后面可以引用)

多重引用變量及調用shell變量引用到awk變量中。

OF S變量指定了輸出的時候列和列之間的分隔符:↓↓

RS定義的是輸入時字段記錄和記錄之間的分隔符↓↓

ORS定義的是輸出時字段記錄與記錄之間的分隔符↓↓

NF這個變量表示為字段的數量。

NR定義了記錄數,一行就是一個記錄打印他的編號

FNR 表示每個文件有自己獨立的編號
:文件與文件之間的分割編號

FILENAME定義此行是來自那個文件

ARGC定義的是參數的個數

ARGV定義了數字保存的命令行的參數

在awk中也可以自定義變量,這些變量可以用 -v 聲明。
實際上也可以在程序里來定義變量,在花括號(程序)里面

實際上也可以在程序里來定義變量,在花括號(程序)里面↓↓必須先定義在使用

分隔符不一定是字符也可以是正則表達式↓↓

-f選項對文件的調用,文件可存放執行動作:

下圖調用了上圖的內容

Awk Printf 選項用法

Printf是我們shell中也支持的不過他是一個內部命令,awk的printf和shell中的用法相識的
Printf的強大之處它可以定義格式
Printf語法:
必須指定模板,定義后續要打印的格式,然后在后面在跟上若干打印的內容,其中打印的后面這些內容,要按照定義的格式來進行打印。
格式符:與item(英譯:項目)一一對應
不會自動換行,需要顯示給出換行控制符,\n
%c:顯示字符的ASCII碼
%d, %i:顯示十進制整數 (用的比較多)
%e, %E:顯示科學計數法數值
%f:顯示為浮點數
%g, %G:以科學計數法或浮點形式顯示數值
%s:顯示字符串 (用的比較多)
%u:無符號整數
%%:顯示%自身 (用的比較多)
其還可以指定打印字符串的格式可以在中間插入修飾符
修飾符
#[.#] 第一個數字控制顯示的寬度;第二個#表示小數點后精度,例子:%3.1f f :表示的打印的時候寬度

  • 左對齊(默認右對齊) 例子:%-15s + 顯示數值的正負符號 例子:%+d

新浪面試題:↓↓

                        操作符運算

算術操作符:
x+y:加法;
x-y:減法;
x*y:乘法;
x/y:除法;
x^y:冪運算;
x%y:取模(余數)。

賦值操作符:
=:右邊賦值給左邊;
+=:先加,再賦值;
-=:先減,再賦值;
*=:先乘,再賦值;
/=:先除,再賦值;
%=:先取余,再賦值;
^=:先冪運算,再賦值;
++:遞增操作;
--:遞減操作。
BEGIN/END模式
BEGIN{}:僅在開始處理文件中的文本之前執行一次;
END{}:僅在文本處理完成之后執行一次。

Awk 的正則表達式及操作符

?較操作符:
==:判斷相等;
!=:判斷不等;
\>:判斷大于;
\>=:判斷大于等于;
<:判斷小于;
<=:判斷小于等于。
模式匹配符:
~:左邊是否和右邊匹配包含;
!~:是否不匹配。

寫在兩個斜線中間表示正則表達式 / /或者 ” ”也是表示正則表達式
除了支持數字運算等還支持模式匹配,
~:左邊的是否和右邊的相包含
!~:不包含
Awk正則格式
當我們讀入一行之后他去檢查我們的正則表達式是否匹配,如果匹配才去執行后續的{print }

比較符用法

下圖這樣寫也行↓↓這是表示大于等于2的行

Awk 的與&& 或|| 非!!

&&與

||或者

三目表達式
表示有三個元素,邏輯意思是:
有三個組成部分,最前面一個部分是邏輯判斷,如果這個條件判斷的結果為真,就執行第二個部分,如果為假就執行第三個部分。

Pattern(英譯模式)格式匯總:
(1)沒有寫pattern,相當于所有行都滿足要求,所有行都進行打印
例圖:
(2)pattern可以寫正則表達式,可以再pattern位置直接將正則表達式放到兩個 / /
例圖:
例圖:
(3)關系表達式:前面是一個條件為真的表達式,如果為真就打印 ,假就不打印
假:雙引號里面沒有東西空或者0就是假,里面沒有任何東西
例圖:
例圖:
真:結果不是0,或者雙引號里不是空的字符(空格號是表示字符為真),里面有東西
例圖:
例圖:
例圖:
例圖:

另外也可指定從第幾行到第幾行,可以寫pat模式,從這個模式開始到下一個模式之間的所有行。
如果想表示第幾行到第幾行也可以使用NR這種模式來寫

Awk 得if循環判斷

使用循環判斷的時候一定要將循環寫在{ }里面然后再將判斷條件寫到小括號里
if 語句判斷:

Awk得while循環判斷

length(英譯長度)
break [n]:結束整個循環默認是最近的一次循環;
continue [n]:跳過本輪循環,執行下一輪循環;
next:提前結束對本行處理而直接進入下一行處理(awk自身循環)

Awk for循環判斷

For循環還有一個突出得功能能夠實現數組得便利,awk里面支持數組還支持逐個逐個得將數組取出來。

break [n]:結束整個循環默認是最近的一次循環;
continue [n]:跳過本輪循環,執行下一輪循環;
next:提前結束對本行處理而直接進入下一行處理(awk自身循環)
Continue對奇數運算

Continue對偶數運算

Break對66的運算

在awk 里面還有一個特殊得打斷得指令next:
提前結束本行得處理,直接進入到下一行

    Awk 數組      

在awk里面有一個好的功能叫數組,而且他用的數組叫關聯數組
關聯數組:下標位置定義得,可以拿任意得字符串或者數字都可以作為下標。

使用awk 結合for循環就能將數組里得東西一個一個得取出來。因為關聯數組不想普通數組都是有規律得。因為關聯數組里面得下標都是任意格式無規則得。
For循環可以將一個一個得元素取出來,進行便利。基本語法:
(1)語法:for(變量名 in 數組名)然后再進行循環得時候每一次循環執行,將把數組得下標取出來付給變量數組得下標自動就給了變量名
例圖:↓↓

打印出來的的次序并不是當初賦值的次序他是隨機的。

Awk 函數

length()函數:統計字符長度
rand()函數:?成隨機數
sub()函數:替換第?次匹配的字符
gsub()函數:全部替換
split()函數:指定分隔符,分隔字符串
Awk里面還支持函數,函數包括系統自帶的函數以及我們自定義的函數。
自帶函數rand() : 返回一個隨機數
Srand()能夠給我rand()提供種子,rand()有了種子才能實現對種子的隨機生成。

Awk 自定義函數,
他的參數不用$1 , $2是事先寫好,將來函數執行的時候第一個參數就符給了他,變量是啥,調函數的時候值就賦給了誰,這個參數作為函數定義的時候必須要寫清楚的,而這個函數在用的時候,我們可以把具體的值賦給這個參數而這個參數是定義函數用的,所以叫做形式參數簡稱形參。真正用的時候要傳一個實際的數據給他,叫實際參數簡稱實參。
在定義的時候叫形參用的時候叫實參。
Awk 中調用shell命令

在awk中還有一個特殊的函數系統自帶的函數,這個函數可以調用Linux中的命令。
語法:
awk ‘ BEGIN{system(“需要調用的命令”)} ’
將要使用的命令放到system后面用小括號引起來就可以使用這個命令。

:引號里面放的是linux命令,而dir是一個變量,所以不能放到雙引號里面,不然就成了字符串了。
甚至awk 還可以寫成專門的腳本寫成一個 #!/bin/awk -f 機制當成一個命令來執行

另外awk里面也支持傳參數,傳一些變量的話我們可以使用 - V 加上 -v 在BEGIN語句里面就可以用變量。不加 - v 就只能在shell的逐行處理中使用,就不能再BEGIN里面使用了。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

铁力市| 巨鹿县| 吴旗县| 内黄县| 华宁县| 丹棱县| 饶平县| 临颍县| 库尔勒市| 高台县| 郯城县| 富阳市| 清涧县| 石狮市| 晋宁县| 临城县| 苍梧县| 云安县| 安乡县| 文昌市| 宁强县| 岳池县| 佛冈县| 年辖:市辖区| 黄大仙区| 临潭县| 河源市| 东平县| 定南县| 芜湖市| 家居| 独山县| 栾川县| 鄂托克前旗| 泰宁县| 沙湾县| 株洲县| 彰化市| 颍上县| 安塞县| 都昌县|