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

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

grub修復及AWK用法

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

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比勐臘網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式勐臘網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋勐臘地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。

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

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

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

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

初始化的文件系統(tǒng):/boot/initramfs - VERSION -release.img 這還是一個打包文件。
:先修改后綴就能解壓。
:這個文件的目錄和根分區(qū)的目錄一樣。他就是一個縮小版的根。這個文件里面就是一個隱藏版的小內(nèi)核。
:--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這個程序來開發(fā)出來的。
但是他們都有一個相同的文件/etc/inittab文件,是init啟動的時候會讀取的文件。
Init 啟動流程及破解密碼和多次重啟的修復方法

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

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

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

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

2:
進入3模式↓↓

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

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

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

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

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

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

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

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

編寫添加服務腳本

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

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

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

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

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

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

/upload/otherpic57/32514.jpg
Grnb就是Boot loader的過程:
關鍵內(nèi)容分為第一階段和第二階段grub就是我們對應的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ū),把驅動放在了后續(xù)的扇區(qū)中,通過后續(xù)的某個地方來找到boot對應的驅動。找到boot的驅動之后加載boot然后我們才能進到boot里面找到這個文件。因為進入到boot之后他會先進入到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就對應6,別的版本對應的不一樣。
3.: 進入內(nèi)核配置文件進入官網(wǎng)。
(1)
(2)
(3)
(4)
4.:上面工作做完了直接安裝:

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

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

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

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

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

2:進入救援模式

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

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

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

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

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

3: 修復完了再同步

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

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

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

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

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

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 :添加網(wǎng)絡服務

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

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

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

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

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

1 :

2 :

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

(2)激活邏輯卷

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

(4)編譯掛載文件

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

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

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

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

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

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

源碼編譯內(nèi)核

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

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

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

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

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

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

:在選擇這項

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

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

?cd busybox-1.30.1/
?make menuconfig 按下面選擇,把busybox編譯也靜態(tài)二進制、不用共享庫
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這個進程管理所有資源,而這些資源統(tǒng)稱為unit,unit把不同的資源分為了不同的類型,不管為什么類型都統(tǒng)稱為unit單元
Unit最主要的放在了/urs/lib/systemd/system,這個目錄里面放了各種資源,主要表現(xiàn)為文件后綴不同。這里面都為unit為了區(qū)分資源類型就用不同的文件后綴。
最多的就為service文件,這些service文件就等價于centos6上面的各種服務腳本。也就表現(xiàn)為一個一個服務除了service還有其他資源比方說target,target就像之前的runlevel的0到6這7中模式。

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

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

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

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

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

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

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

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

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

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

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

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

Centos7破解root口令

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

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

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

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

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

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

:臨時修改報警,不阻止

文本三劍客AWK(重點)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Awk Printf 選項用法

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

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

新浪面試題:↓↓

                        操作符運算

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

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

Awk 的正則表達式及操作符

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

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

比較符用法

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

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

&&與

||或者

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

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

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

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

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

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

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

Awk for循環(huán)判斷

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

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

Continue對偶數(shù)運算

Break對66的運算

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

    Awk 數(shù)組      

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

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

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

Awk 函數(shù)

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

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

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

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

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


網(wǎng)站標題:grub修復及AWK用法
網(wǎng)頁鏈接:http://weahome.cn/article/ghipos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部