真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

grub修復(fù)及AWK用法-創(chuàng)新互聯(lián)

系統(tǒng)啟動和內(nèi)核管理,各種修復(fù)及各種編譯

創(chuàng)新互聯(lián)公司長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為龍湖企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、做網(wǎng)站,龍湖網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

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

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

Bootloader是用來啟動操作系統(tǒng)的。實(shí)現(xiàn)操作系統(tǒng)的前期引導(dǎo)。

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

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

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

然后再關(guān)閉虛擬機(jī)在電源開啟處

在重啟虛擬機(jī)輸入esc鍵進(jìn)入boot 關(guān)盤救援模式

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

             刪除initramfs。Img  恢復(fù)之:

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

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

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

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

2 :進(jìn)去之后輸入1進(jìn)入單用戶模式

3 :進(jìn)入之后輸入修改密碼

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

2:
進(jìn)入3模式↓↓

3:vim /etc/inittab進(jìn)入修改init模式

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

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

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

K開頭決定服務(wù)不啟動
S開頭決定服務(wù)的啟動
計(jì)劃任務(wù)是一個服務(wù)。
S開頭的就是開機(jī)的啟動服務(wù)。
開機(jī)啟動的順序決定:

次序是按照字母表次序排序
啟動服務(wù)是有一定講究的有些服務(wù)之間有一定的依賴,有些服務(wù)要啟動的先把別的服務(wù)先起來。關(guān)閉服務(wù)的時候先關(guān)后面的在管前面的,因?yàn)楹竺獾靡蕾囆蕴嗔?,開啟的時候正好反過來。

在0-6這七種模式下,服務(wù)的啟動或者關(guān)閉都是可以加以認(rèn)為改變的。 0-6的區(qū)別在于就是各種服務(wù)啟動不啟動的各種組合。

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

編寫添加服務(wù)腳本

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

Service --status -all 這個選項(xiàng)所有服務(wù)的狀態(tài)都能看到。
瞬態(tài)服務(wù):用的不太多的服務(wù)找一個代理人由它來管理這個代理人叫:xinetd服務(wù)。他用來解決某些服務(wù)用的并不是這么頻繁的服務(wù)。平時用的不多的服務(wù)并不啟動,由xinetd這個服務(wù)來監(jiān)控。
用xinetd來代理的服務(wù)叫做:非獨(dú)立服務(wù)。
非獨(dú)立服務(wù)都是由xinetd來進(jìn)行監(jiān)管和代理。

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

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

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

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

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

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

Yum 安裝內(nèi)核及卸載內(nèi)核
1 :http://elrepo.org/tiki/tiki-index.php 這個網(wǎng)站提供了很多新版的內(nèi)核

2.:根據(jù)需求下載需要的內(nèi)核包

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

5.:進(jìn)入cd /boot/grub vim grub.conf
然后reboot重啟即可生成。
刪除內(nèi)核

Grub 修復(fù),和刪除了/boot/initramfs.Xxx.img恢復(fù),及制作linux系統(tǒng)

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

(2)或者用grub 的交互式命令進(jìn)行修復(fù)
語法:
grub> root (hd#,#):進(jìn)了以后用root指定分區(qū)的名稱,因?yàn)樗业絙oot所在的位置
grub> setup (hd#):然后在指定安裝在那個硬盤上
Grnb的前446字節(jié)破壞故障修復(fù)
使用grub-install 命令修復(fù)方法
破壞前446字節(jié)

1:如果在生產(chǎn)中重啟直接不找硬盤找光盤就是mbr分區(qū)表出了故障:

2:進(jìn)入救援模式

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

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

2: 進(jìn)入交互式后救修復(fù)就OK了

3:修復(fù)完了以后檢查是否修復(fù)成功
:這是查看前512字節(jié)里的前446字節(jié)是否修復(fù)成功
破壞grub里1.5階段修復(fù)跳過前512 字節(jié)破壞修復(fù)
1 : 破壞了512后面的字節(jié)故障顯示,這和破壞了512字節(jié)前的狀態(tài)不一樣但是也起不來了,但這次他不提示用光盤了,因?yàn)樗J(rèn)為硬盤具有啟動功能。

2: 直接進(jìn)入救援模式下修復(fù)

3: 修復(fù)完了再同步

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

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

1 : 先創(chuàng)建一個小的linux系統(tǒng)

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

3 : 再將這個新建虛擬機(jī)添加到現(xiàn)有虛擬機(jī)的磁盤上

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

(2)

(3)

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

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

(4)添加根的詳細(xì)信息

5 :添加網(wǎng)絡(luò)服務(wù)

6 : 將裝好的小linux那個虛擬機(jī)重啟再裝網(wǎng)絡(luò)服務(wù)

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

1: Grub第二階段破壞狀態(tài):

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

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

1 :

2 :

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

(2)激活邏輯卷

(3)掛載root激活文件目錄,和掛載boot等會要用。
因?yàn)閞oot是當(dāng)根用的。Boot里面有g(shù)urb啟動文件。

(4)編譯掛載文件

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

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

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

在proc下有很多是可以設(shè)置的東西但是也有很多是可讀的東西。在proc下主要存放了系統(tǒng)運(yùn)行過程中大量進(jìn)程的東西都在proc下。有些設(shè)置也可以通過proc這個目錄修改。
/Proc/sys這個目錄可以修改很多參數(shù)。

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

            TCP 協(xié)議連接優(yōu)化。

源碼編譯內(nèi)核

想用最新的內(nèi)核就得源碼編譯:
在編譯的時候我們可以通過點(diǎn)菜單的方法來進(jìn)行編譯。

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

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

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

編譯內(nèi)核要安裝需要的軟件和依賴包
編譯的時候要考慮編譯環(huán)境。

7上編譯內(nèi)核其支持ntfs文件
1 : 先在網(wǎng)上去下載新版內(nèi)核,下載好后再將拖入xshell中

:在選擇這項(xiàng)

:在選擇NTFS文件最后全部退出保存進(jìn)行編譯

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

(3)make install 安裝新內(nèi)核

這就編譯完了。

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 : 進(jìn)入官方網(wǎng)站下載源碼https://www.busybox.net/
復(fù)制版本鏈接

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

優(yōu)先級越高就意味著該文件里面的腳本優(yōu)先級越高
Systemctl 命令及各種選項(xiàng)用法

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

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

Maks選項(xiàng)代表是將某個服務(wù)禁止在讓他使用
Mask禁止服務(wù)流程:↓↓

Unmask取消禁止服務(wù)流程:↓↓

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

查看某服務(wù)當(dāng)前激活與否的狀態(tài)如下兩圖:↓↓

設(shè)為開機(jī)啟動或不啟動就是本質(zhì)上有沒有創(chuàng)建軟鏈接

下次開機(jī)禁止啟動,然后創(chuàng)建了一個軟連接

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

就是一些服務(wù)各種狀態(tài)各種資源的集合。當(dāng)進(jìn)入到某個而且相互之間有各種依賴性,多個函數(shù)放到一個文件里面就相當(dāng)于一個target

Centos7修復(fù)grub前446字節(jié)

Centos7破解root口令

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

刪除centos7 /boot修復(fù)
修復(fù)次序:先修復(fù)內(nèi)核再去修改gurb

這就修復(fù)完了
修改默認(rèn)啟動內(nèi)核
如果內(nèi)核不想要的刪除方法及修改默認(rèn)內(nèi)核

下圖兩個都可以設(shè)置默認(rèn)啟動內(nèi)核

實(shí)驗(yàn)熟練掌握:systemctl start stop restart enable disable mask unmask is-active is-enabled name.service
systemctl set-default multi-user.target
安全加固SElinux
越安全越復(fù)雜。
MAC:強(qiáng)制的訪問控制
:當(dāng)前mac模式是否啟用禁用

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

:臨時修改報(bào)警,不阻止

文本三劍客AWK(重點(diǎn))

每讀一行處理一行,然后進(jìn)行處理。這個命令可以除了各種文本信息,也能處理標(biāo)準(zhǔn)內(nèi)容,和一些管道傳過來的內(nèi)容

主要的功能能夠?qū)崿F(xiàn)文本的處理
Awk語法:
Awk +選項(xiàng) -f 后面可以跟文件或者程序。他后面這個文件不一定要必須跟,可以對標(biāo)準(zhǔn)輸入做處理。

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

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

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

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

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

END是結(jié)束 :END恰恰相反,是把所有的文件都處理完了在執(zhí)行,文件后執(zhí)行
相當(dāng)于一個頭一個尾,可以做匯總

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

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

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

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

多重引用變量及調(diào)用shell變量引用到awk變量中。

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

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

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

NF這個變量表示為字段的數(shù)量。

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

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

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

ARGC定義的是參數(shù)的個數(shù)

ARGV定義了數(shù)字保存的命令行的參數(shù)

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

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

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

-f選項(xiàng)對文件的調(diào)用,文件可存放執(zhí)行動作:

下圖調(diào)用了上圖的內(nèi)容

Awk Printf 選項(xiàng)用法

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

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

新浪面試題:↓↓

                        操作符運(yùn)算

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

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

Awk 的正則表達(dá)式及操作符

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

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

比較符用法

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

Awk 的與&& 或|| 非??!

&&與

||或者

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

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

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

Awk 得if循環(huán)判斷

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

Awk得while循環(huán)判斷

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

Awk for循環(huán)判斷

For循環(huán)還有一個突出得功能能夠?qū)崿F(xiàn)數(shù)組得便利,awk里面支持?jǐn)?shù)組還支持逐個逐個得將數(shù)組取出來。

break [n]:結(jié)束整個循環(huán)默認(rèn)是最近的一次循環(huán);
continue [n]:跳過本輪循環(huán),執(zhí)行下一輪循環(huán);
next:提前結(jié)束對本行處理而直接進(jìn)入下一行處理(awk自身循環(huán))
Continue對奇數(shù)運(yùn)算

Continue對偶數(shù)運(yùn)算

Break對66的運(yùn)算

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

    Awk 數(shù)組

在awk里面有一個好的功能叫數(shù)組,而且他用的數(shù)組叫關(guān)聯(lián)數(shù)組
關(guān)聯(lián)數(shù)組:下標(biāo)位置定義得,可以拿任意得字符串或者數(shù)字都可以作為下標(biāo)。

使用awk 結(jié)合for循環(huán)就能將數(shù)組里得東西一個一個得取出來。因?yàn)殛P(guān)聯(lián)數(shù)組不想普通數(shù)組都是有規(guī)律得。因?yàn)殛P(guān)聯(lián)數(shù)組里面得下標(biāo)都是任意格式無規(guī)則得。
For循環(huán)可以將一個一個得元素取出來,進(jìn)行便利。基本語法:
(1)語法:for(變量名 in 數(shù)組名)然后再進(jìn)行循環(huán)得時候每一次循環(huán)執(zhí)行,將把數(shù)組得下標(biāo)取出來付給變量數(shù)組得下標(biāo)自動就給了變量名
例圖:↓↓

打印出來的的次序并不是當(dāng)初賦值的次序他是隨機(jī)的。

Awk 函數(shù)

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

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

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

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

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)頁名稱:grub修復(fù)及AWK用法-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/dcopjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部