Linux 學習筆記 二

壓縮解壓縮

壓縮格式:gz bz2 xz zip z 

壓縮算法,算法不同,壓縮比也不同


compress: filename.Z

uncompress: 

不能壓縮文件夾,會將文件夾內的文件單個壓縮

gzip: .gz

gzip filename 壓縮完成後刪除源文件

gzip -d 等於 gunzip 

-#: 1-9 指定壓縮比 默認爲6

gunzip:

gunzip filename


zcat 臨時查看壓縮的文本文件不解壓

bzip2: .bz2 

比gzip 有更大的壓縮比

使用格式相同

bzip2 filename

-d -# 都有

-k 可以保留源文件


bunzip2 :同理解壓

bzcat :


xz: .xz  同上


unxz 解壓

xzcat

xzdec 解壓


zip: zip 壓縮後的文件名 壓縮的路徑 

可以壓縮文件夾,壓縮後不刪除源文件


archive:歸檔 歸檔本身不意味着壓縮 


unzip :解壓


tar:歸檔工具 

-c:創建歸檔

-f file.tar :操作的歸檔文件

-x :展開歸檔

--xattrs 歸檔同時保留其擴展屬性信息

-t: 不展開歸檔查看內部文件

-zxf:解壓歸檔 調用gzip

-zcf:壓縮歸檔 調用gzip

-jcf 調用bzip2

-jxf

-Jcf 調用xz

-Jxf

-z -j -J 在解壓時可以省略,壓縮時不可以

cpio:歸檔工具


read: 

-p 給出提示

-t 超時時間

while 循環:

適用於循環的次數未知的場景,要有退出條件


語法:

while 條件 ;do

運行命令

done

使用顏色控制字體


echo -e \033[x;y;zm顯示文字\033[

x 字體

y 前景色

z 背景色


64,32

/lib

/lib32


IDE 133Mbps 並行

SATA 300M 600M 6G 串行

USB 3 480M 串行

SCSI SMALL COMPUTER SYSTEM INTERFACE  320M 並行總結

SAS 2.5英寸 串行


RAID:

級別,僅代表磁盤組織方式不同,沒有上下之分


條帶:0 

性能提升,讀寫

冗餘能力沒有

空間利用 n

至少2塊

鏡像:1

寫性能下降,讀性能上升

有冗餘能力

空間利用 n/2

至少2塊

效驗碼:4   盤1,盤2,盤3   盤6,壞一塊(1-3)都可以用盤6來-去好的

輪流校驗碼 :5 輪流校驗碼存儲位置

讀寫都提升

有冗餘能力

空間利用 (n-1)/n

至少3塊

1+0:先條帶再鏡像

    至少4塊

0+1:先鏡像再條帶

至少4塊

JOBD:簡單增加多塊硬盤

無性能提升

無冗餘能力

空間利用n

至少2塊

MD multi dsiks 模擬一個RAID

邏輯RAID

/dev/md# 

mdadm:任何塊設備做成RAID

模式化命令

創建模式 

-C

專用選項:

-l:級別

-n:設備個數

-a:yes/no 自動創建設備文件

-c:指定數據塊chunk大小 默認64KB

-x:指定空間盤個數

管理模式

--add,--remove,--fail

監控模式

-F

增長模式

-G

裝配模式

-A


-D --detail 查看RAID 的詳細信息

停止整列

-S --stop

將當前RAID 信息保存至配置文件

mdadm -D --scan > /etc/mdadm.conf

以後裝配就用 mdadm -A /dev/md#


watch 週期性地執行指定命令,並以全屏方式顯示結果

-n 指定週期長度,默認單位爲秒,默認2秒

watch -n '命令'

lsmod 列出內核模塊


mdadm 用戶空間工具


MD:MULTI DEVICE 多設備


DM:device mapper 設備映射

邏輯設備

lvm2

快照

多路徑

vgcreate vgname 設備

-s : pe 的大小,默認爲4mb

lvcreate -n lv name -L 空間大小 vg name 


擴展邏輯卷

lvextend

-L 大小 邏輯卷

resize2fs

resize2fs2fs 邏輯卷 擴展到大小

-p 與物理邊界一樣大小

縮減邏輯卷

resize2fs 邏輯卷 縮減到大小

不能在線縮減,先要卸載

確保縮減後的空間大小依然能存儲原有數據

在縮減之前應先強直檢查文件,以確保文件系統一致性狀態

lvreduce -L 大小 邏輯卷

再掛載

快照卷

生命週期爲整個數據時長,這段時間內,數據的增長不能超出快照卷大小

快照卷只讀

跟原卷在同一卷組內

lvcreate 

-s 快照卷

-p r|w  權限

lvcreate -s -L 大小 -n 邏輯卷名 -p r /路徑

until = !while

until who | grep "hadoop" >> /dev/null ;do

sleep 5

done

echo "hadoop is logged in"


for ((變量賦值;變量範圍;變量變化)); do

循環操作

done


ping

-c 次數

-w 超時時間

awk 條件 {動作}


df -h | awk '{print $1}'  awk -F 分隔符 '{print $字段序號}'

$NF是最後一個字段  ,NF是字段個數

-F 後跟分隔符匹配


CSMA/CD  carrier sense multi access colision detection

載波偵聽多路訪問衝突檢測

socket 套接字 ip與port 綁定


三次握手 四次斷開 tcp 有限狀態集


    A      三次握手建立TCP連接              B

1.發送 SYN=1,SN=100 

2.接受 SYN=1,ACK=1,AN=101,SN=300

3.發送 ACK=1,SN=101,AN=301


    A      四次斷開TCP連接              B

1.發送 FIN=1,

2.

3.

4.CLOSED


主機接入網絡

ip

mask

gateway

hostname

dns

route

dhcp:dynamie host configuration protocol

169.254.x.x 自動地址

linux 網絡屬於內核功能

lo:本地迴環

eth{0-9}:以太網卡

ppp{0-9}:點對點

5.8  /etc/modprobe.conf

alias


6.0 /etc/udev/rules.d/70-persistent-net.rules


ifconfig 

-a 顯示所有接口的配置信息

ifconfig eth{0-9} ip/mask up|down

配置立即生效,但重啓後失效

網絡服務:

5.8 /etc/init.d/network start|stop|restart|status

6 /etc/init.d/networkmanager 同上


網關

route 

add 添加

-host 主機

-net 網絡

-net 0.0.0.0 默認路由

route add -net 網絡 gw 下一跳地址

route add -net default gw 下一條地址

del 刪除

同上

route del -net 0.0.0.0 

route -n 以數字方式顯示主機信息


網絡配置文件

/etc/sysconfig/network


網卡配置文件

/etc/sysconfig/network-scripts/icfg-eth{0-9}

DEVICE=關聯的設備名稱,要與文件名的後半部保持一致

BOOTPROTO={static|none|dchp|bootp}:引導協議,

靜態   動態

IPADDR IP地址

NETMASK 子網掩碼

GATEWAY 網關

ONBOOT 自動啓用

HWADDR mac地址與硬件一致

USERCTL {YES|NO} 是否允許普通用戶控制接口

PEERDNS {YES|NO} 是否接受DHCP中DNS的配置信息

不會立即生效,保證永久有效

路由配置文件

/etc/sysconfig/network-scripts/route-eth{0-9}

添加格式

格式,1 

DEST     via       NEXTHOP

格式,2

ADDRESS0=

NETMASK0=

GATEWAY0=

ADDRESS1=

NETMASK1=

GATEWAY1=

DNS服務器指定 最多3個

/etc/resolv.conf

nameserver ip

本地地址解析

/etc/hosts

主機IP 主機名稱 主機別名


配置主機名

hostname 名字

立即生效,重啓失效

/etc/sysconfig/network

HOSTNAME=

永久有效

使用setup 設置效果一樣,需要重啓


ifconfig 老舊命令 

iproute2 

ip 

link:配置網卡屬性

ip -s link show 限時統計信息

ip link set 設備 狀態

addr:協議地址

ip addr add 地址 dev 設備

ip addr del 地址 dev 設備

ip addr show

route:路由

tc 流量控制

一個網卡多個地址

網絡設備可以別名

別名不能使用DHCP

ifconfig eth0:0

/etc/sysconfig/network-scripts/icfg-eth{0-9}:{0-9}

DEVICE=eth{0-9}{0-9}



程序組成

二進制文件  /bin,/sbin

/lib

配置文件 /etc

幫助文件 /usr/share/man

/etc,/bin,/sbin,/lib

都是系統啓動需要用到的目錄程序,不能單獨掛載額外分區

必須在根分區上 

/usr/

/bin

/sbin

/lib

操作系統的核心功能

可以單獨分區

/usr/local

/bin

/sbin

/lib

/etc

/man

用戶使用的第三方軟件

/opt

早期第三方軟件安裝位置

/proc

/sys  

不能單獨分區,內核自我管理

/dev 

設備,也不能單獨分區

udev 

  

/home 用戶數據目錄

 推薦單獨分區


/root 管理員家目錄,麼必要單獨分區


/var 有了他系統管理更加規範

日誌信息,和運行信息,推薦單獨分區,日積月累越來越大

/boot :內核 initrd {initramfs} 只要能被找到就行,推薦單獨分區


POST ---BIOS ----MBR (BOOTLOADER)--- 找到磁盤上的內核 ---- 找根的位置 


軟件包安裝器

打包成一個文件:二進制文件,庫文件,配置文件,幫助文件

生成數據庫:追蹤所安裝的每一個軟件


1,製作軟件包

2,安裝卸載升級查詢校驗


redhat suse :rpm

redhat package manager

rpm is package manager

redhat和suse 不能混用

debian :dpt


依賴關係:

前端工具:yum,apt-get

後端工具:rpm,dpt


yum:yellowdog  update modifier


rpm 命令:

rpm:

/var/lib/rpm

rpmbulid:

安裝,卸載,升級,查詢,校驗,數據庫重建,驗證數據包,


rpm命名:

包組成:

主包:

bind-版本 

子包:

bind-libs

bind-utils

包名

包名格式:

名稱-版本-發行號.架構.平臺.rpm

bind-major.minor.release-release.arch.rpm 

第一個release是發行號,第二個release是rpm包製作者修訂用

主版本號:重大改進

次版本號:某個子功能發生重大變化

發行號:修改了部分bug,調整了一些功能

noarch 沒有針對版本

umame -a 查看內核版本


rpm包:

二進制格式:直接使用,多數使用

源碼格式:需要編譯

rpm :

1,安裝:

rpm -i 路徑/文件名

-h 已#顯示安裝進讀,50個#,每個2%

-v 詳細過程

-vv 更詳細

rpm -ivh 常用

--nodeps:忽略依賴關係,可以安裝但是無法正常使用

--replacepkgs:重新安裝,替換原有安裝

--force:重裝,覆蓋,降級 強行安裝

--test 測試安裝

2,查詢:

rpm -q 包名 : 查詢指定包

  -qa: 查詢所有已經安裝的包

-qi: 查詢指定包的說明信息

-ql:查詢指定包安裝後生成的文件列表

-qc:查詢指定包的配置文件

-qd:查詢指定包的安裝幫助文件

-qf 查詢指定文件是由那個rpm包安裝生成的

-q --scripts 查詢指定包中的腳本

如果某RPM未安裝,希望查詢

-qpi

-qpa

同上

3,升級:

rpm -Uvh 如果有老版本的則升級,否則安裝

-Fvh 如果有老版本的則升級,否則退出

rpm -Uvh --oldpackage 包名  降級安裝包

4,卸載

rpm -e 包名

--nodeps

5,校驗

rpm -V 包名

6,重建數據庫

rpm 

--rebuliddb 重建數據庫,一定會重建

--initdb 初始化數據庫,沒有才建立,有就不建建立

7,校驗來源合法性,及軟件完整性

ls /etc/pki/rpm-gpg/

RPM-GPG-KEY-redhat-release

rpm -K 包名

dsa,gpg 驗證來源合法性

sha1,md5 驗證軟件包的完整性

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

導入redhat的祕鑰

HTML HYPERTEXT MARK LANGUAGGE

XML EXTENDED MARK LANGUAGGE


XML,JSON 半結構化數據


yum倉庫中的元數據文件

primary.xml.gz

所有rpm包的列表:

依賴關係

每個rpm生成的文件列表

filelist.xml.gz

當前倉庫RPM包的所有文件列表

other.xml.gz

額外信息,rpm修改日誌

repomd.xml

記錄以上上個文件的時間戳和校驗和

comps 開頭的.xml

rpm包的分組信息

爲yum定義repo /etc/yum.repos.d/ 以.repo結尾的文件

[標示ID]

name=       名稱

baseurl= 倉庫路徑 

ftp://

http://

file:/// 

enable= 是否可用

gpgcheck= 檢查簽名完整性

gpgkey= 檢查的祕鑰位置

yum 

list:列表

all 全部

available 可用

installed 已裝

updates 可用更新

clean:清理緩存

repolist:顯示repoe列表

install:

-y 自動回覆yes

--nogpgcheck 無檢查完整性

update:

升級到最新版本

update to:

升級到指定版本

remove|erase:

卸載

info :信息

provides:

查看指定文件或特性是那個yum安裝的

groupinstall:

grouplist

groupinfo

createrepo 手動建立yum倉庫時需要使用

在指定目錄中建立repodata

   還需要複製 XML文件


rpm 安裝

二進制格式

源程序---編譯----二進制格式

有些特性是編譯選定的,如果編譯未選定此特性,將無法使用

rpm包的版本落後於源碼包,甚至落後很多

定製:手動編譯安裝

編譯環境,開發環境

開發庫,開發工具


linux :c

gun :c

C環境,c++, 

gcc:編譯器

g++:

make:項目管理工具

makefile:定義了make (gcc,g++) 按何種次序去編譯源文件的程序

automake,創建---makefile.in

autoconf,創建---configure

以上兩者結合成makefile

make install 

perl+java,python

編譯安裝三步驟

前提:準備開發環境{編譯環境}

安裝 Development Tools 和 development libraries

先用tar 解壓二進制程序包

cd

./configure (讓用戶選擇編譯特性,檢查編譯環境)

使用 configure --help 查看選項

使用 configure --prefix 指定安裝目錄 

--sysconfdir 指定安裝的配置目錄

在安裝目錄中用 make 確認安裝

再輸入 make install

1,修改PATH環境變量,以能夠識別次程序的二進制文件路徑

1.修改/etc/profile

2.或者在/etc/profile.d 目錄中 建立以.SH爲名稱後綴的文件

在裏面定義export PATH=$PATH:/路徑

2,默認情況下,系統搜索庫文件的路徑/lib,/usr/lib,要額外添加搜索路徑

在/etc/ld.so.conf.d/中創建以.conf爲後綴命名的文件,而後把要增添的路徑直接寫入次文件

ldconfig:重新搜索庫文件

-v:顯示重新搜索的過程

3,頭文件(庫調用的參數標準相關信息):輸出給系統,

默認:/usr/include

添加頭文件搜索路徑,使用鏈接進行

/usr/local/tengine/include/  /usr/include/

第一種 ln -s  /usr/local/tengine/include/*  /usr/include/

第二種 ln -s /usr/local/tengine/include/  /usr/include/tengine

4,man文件:安裝在--prefix 指定目錄下額man目錄,/usr/share/man

1,man -M man文件的路徑

2,在/etc/man.config 中添加一條manpath


netstat :網絡狀態命令

-r 顯示路由表 -rn 數字顯示

-t 顯示tcp連接

-u 顯示udp連接

-l 監聽狀態的連接

-p 監聽指定套接字的進程號與進程名

source /etc/profile 重新載入配置文件


kill 進程號 殺死進程

while ,until,for


break :提前退出循環結束任務

continue: 提前退出當前循環,繼續循環


while 特殊用法

while: ;do


done 

無限循環



while read line; do    循環讀取 文件每一行 存入line中


done < 輸入重定向文件



函數,功能, function


代碼重用:


定義函數 2種方法


1.  function 函數名 {

函數體 

}

2.  函數名() {

函數體

|

 `` 反引號,應用程序執行結果

執行結果狀態,看命令的最後一條運行結果


return # 0-255  定義函數狀態返回


接受參數的函數

函數名 參數1 參數2

$1 調用參數1

$2 調用參數2



進程管理


CPU中 MMU 內存管理單元 MEMORY MANAGEMENT UNIT

進程切換,上下文環境切換 


rss 常駐內存,位於物理內存不被交換出去的

vsz 虛擬內存大小 ,棧,堆,庫,初始和爲初始化數據,命令


thrend 線程 由進程拆分的多個小的組成部分, 可以節省內存的使用空間


進程狀態


uninterruptible 不可中斷的睡眠

interruptible  可中斷的睡眠


init: 內核之後的第一個進程,其他均爲其子進程

優先級 0-139 共140個

進程越小越高級


100-139 :用戶控制

0-99: 內核調整


高優先級的優勢, 1,獲得更多的CPU運行時間

2,獲得優先的運行時間

每個進程都有個

nice值:友好的,優雅的

範圍-20到19

對應 100到139

nice值越小優先級越高

默認都是0

普通用戶僅能夠調大自己進程的nice值

管理員可以隨意調整

PID:process id

init:所有進程的父進程 PID 爲 1

進程的相關屬性在目錄 /proc/中對應的進程號

ps:process status

BSD 風格

sysv 風格 - 

a:所有和終端有關的進程

u:

x:所有和終端無關的進程

-e:所有進程

-l:

-f:

ps -o 字段   顯示指定字段

進程的分類:

跟終端相關的進程

跟終端無關的進程

進程狀態:

D:不可中斷的睡眠

R:運行或就緒

S:可中斷的睡眠

T:停止的

Z:殭屍

<:高優先級進程

N:低優先級

+:前臺進程組中的進程

l:多線程進程

s:會話領導者進程

pstree:顯示進程樹


pgrep: grep風格

 -u 用戶

 

pidof:根據程序名查找ID號


top:

M:根據駐留內存大小排序

P:根據CPU使用時間排序

T:根據累計時間排序

l:顯示

t:顯示

m:顯示內存

c:顯示完整命令

k:殺死進程

q:退出

top -d # 顯示延遲時長

-b 翻屏顯示

-n # 指定屏幕數量顯示

進程間通信 IPC (inter process commu)

共享內存

信號:

semaphore:旗語

kill -l 查看信號


1:SIGHUP :讓進程不用重啓就可以重讀配置文件,並讓新的配置信息生效

2:SIGINT :ctrl + c ,中斷進程

9:SIGKILL :殺死一個進程 強行殺死

15:SIGTERM : 終止一個進程 完成後事後殺死  kill 默認信號


指定一個信號:

信號號碼:kill -1

信號名稱:kill -SIGKILL

信號名稱簡寫 : kill -KILL  去掉SIG就行

kill pid

killall commmand 殺死有多個進程的命令


調整已經啓動進程的nice值

renice nice值 PID         renice  3  16522

調整準備啓動的nice值

nice -n nice值 command     nice -n 8 top


前臺作業:佔據了命令提示符

後臺作業:啓動之後釋放命令提示符,剩餘工資在後臺完成


前臺--後臺:ctrl+z ,或者在命令啓動後在後臺執行,最後加&


jobs:查看所有的作業,作業號不同於進程號

bg :讓後臺停止的作業繼續運行

bg %作業號 默認爲+



+:命令將操作的作業

-:命令將第二個操作的作業


fg:將後臺調往前臺

fg %作業號

終止作業用 kill %作業號


vmstat 系統狀態查看命令

vmstat 間隔 次數  vmstat 1 5


uptime


/proc/meninfo 文件 內存信息



post----bios(boot disk select )----mbr(bootloader 446k)-----kernel---initrd-----rootfs/sbin/init(/etc/inittab)


啓動的服務不同:

運行級別:0-6

0:halt

1:單用戶 single user mode 直接登錄管理員模式 1,S,s,single都可以

2:多用戶 multi usermode ,no NFS 不掛在

3:多用戶 multi usermode ,test 模式命令行

4:reserved 未定義,保留級別

5:多用戶 multi usermode ,圖形模式

6:reboot


redhat,suse

核心:動態加載,內核模塊

內核:/lib/modules/內核版本號命名的目錄


vmlinux-2.6.32


/lib/modules/2.6.32



內核設計風格:

單內核:linux LWP 輕量級進程

核心:ko kernel object

微內核:windows,solaris  線程 

chroot 虛根的目錄

ldd /bin/bash 查看二進制文件的共享庫

tree 


ramdisk---initrd

ramfs---initramfs

詳解啓動過程:

bootloader 

LILO: linux bootloader

grub:grand unified bootloader

stage1:MBR

stage1_5: 引導文件系統

stage2:/boot/grub

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda2

#          initrd /initrd-version.img

#boot=/dev/sda

default=0 設置默認啓動的title編號,從0開始

timeout=5 等待的超時時長

splashimage=(hd0,0)/grub/splash.xpm.gz 指定背景圖片

hiddenmenu 隱藏菜單

password 明文密碼

password --md5 加密密碼 (使用grub-md5-crypt 生成)


title Red Hat Enterprise Linux Server (2.6.18-308.el5)  內核標題,可以自由修改

root (hd0,0) 內核文件所在的設備,,gurb中所有設備都是(hd#,@) #表示第幾個磁盤,@表示第幾個分區 

kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/ rhgb quiet  內核路徑和傳遞給內核的參數

initrd /initrd-2.6.18-308.el5.img ramdisk 文件路徑



gimp 圖像編輯軟件

查看運行級別

runlevel

who -r 


查看內核:

uname -r

uname -a


安裝修復 grub

安裝 grub stage 1

方式1,

grub

root (hd0,0) 設置

setup (hd0,0)

quit


方法2,

grub-install --root-directory=/(boot所在的父母目錄) /device指定設備


grub 下啓動系統


find 查找 內核和initrd文件位置

root (hd0,0)

kernel 

initrd

kernel 初始化過程

1.設備探測

2.驅動初始化(可能從initrd中狀態驅動模塊)

3.以只讀文件掛載文件系統

4.狀態第一個進程init (pid:1)


/sbin/init (/etc/inittab)

 upstart :ubuntu開發 d bus events dirver

 systemd :


id標示符:那個運行級別:動作:運行的進程

si::sysinit:/etc/rc.d/rc.sysinit

動作:

initdefault:設定默認級別

sysinit:系統初始化

wait:等待切換至此級別

respawn:一旦程序終止,會重新重啓


/etc/rc.d/rc.sysinit 完成的任務

1.激活udev和selinux

2.根據/etc/syscti.conf 設定內核參數

3.設定系統時鐘

4.裝載鍵盤映射

5.啓用交換分區

6.設置主機名

7.根文件系統檢測,並以讀寫方式掛載

8.激活raid 和 lvm 設備

9.啓用磁盤配額

10.檢查並掛載其他文件系統,/etc/fstab

11.清理過期的鎖和pid文件

l0:0:wait:/etc/rc.d/rc.sysinit

rc0.d

k*

stop

s*

start

/etc/rc.d/init.d etc/init.d

服務類腳本:

start 

sysv : /etc/rc.d/init.d

start|stop|restart|status

reload|configtest

chkconfig

checkconfig: 第一組數字,啓動級別. 第二組SS啓動順序. 第三組KK關閉順序

當chkconfig命令爲腳本在rc#.d目錄中創建鏈接時

runlevel s表示創建S*開頭的文件

k表示創建K*開頭的文件

S後面的數字表示優先級爲SS

K後面的數字表示優先級爲KK

runlevel 是- 表示所有都是K開頭的鏈接

renlevel 可以省略,默認爲2345級別

description:用戶說明此腳本的簡單功能, \換行 

chkconfig --list 查看所有獨立守護服務的設定,獨立守護進程

 --list 服務名 查看指定服務名

 

 --add 服務名 添加到服務列表中

 --del 服務名 刪除

 --level 級別 服務名 on|off


    chkconfig --list httpd

chkconfig --level 2345 httpd on

/etc/rc.d/rc.local 系統最後啓動的腳本

可以把需要的命令寫入讓其運行

/etc/inittab 任務:

1.設定默認運行級別

2.運行系統初始化腳本

3.運行對應的指定對應級別下額目錄腳本

4.設定 ctrl+alt+del 的操作

5.定義ups電源

6.啓動虛擬終端(2345)

7.啓動圖形終端(5)

守護進程額類型

獨立守護進程

xinetd:超級守護進程,代理人

瞬時守護進程:不需要關聯至運行級別

大商場和專賣店

核心 :/boot/vm開頭

內核模塊:ko  /lib/modules/version/


內核設計:

單內核

模塊化設計

微內核

裝載模塊:

insmod

modprobe

用戶監控和訪問內核的方式

/proc /sys


僞文件系統

/proc/sys:此目錄中文件很多是可讀寫的

/sys :某些也可以寫

設定內核參數的方法

echo 數值 > 重定向 /proc/sys/文件

sysctl -w kernel.hostname=

能立即生效,不能永久有效

永久有效,但不能立即生效,/etc/sysctl.conf

使用 sysctl -p 使內核在修改後生效

sysctl -a 顯示所有內核參數選項

內核模塊管理

lsmod 列出內核模塊

modprobe 模塊名 裝載模塊

modprobe -r 模塊名 卸載模塊名

modinfo 模塊名 查看模塊具體信息

insmod 模塊路徑 裝載模塊

rmmod 模塊名 卸載模塊

depmod 模塊路徑 設置模塊的目錄

內核中的功能除了核心功能之外,在編譯時,大多數功能都有三種選擇

1,不使用功能

2,編譯成內核模塊

3,編譯進內核

如何手動編譯內核

make gconfig:ghome 桌面環境使用,需要安裝圖形開發庫 yum grouplist 安裝

make kconfig:kde 桌面使用

make menuconfig 文本方式

make

make modules_install

make install

screen命令

screen -ls 列出已經建立的會話

screen 新建屏幕

screen -r ID 可以還原屏幕

ctrl+a,d 拆除屏幕

exit 退出

二次編譯時清理,清理前,如果需要,請備份配置文件.config

make clean

make mrproper

mkinitrd initrd文件路徑 內核版本號

mkinitrd /boot/initrd-`uname -r`.img `umane -r`

 

file=/etc/init.d/acpid

echo ${file##*/}  從左向右最後一次匹配 / 刪除

acpid

echo ${file#*.}  從左向右第一次匹配 . 刪除

d/acpid

echo ${file##*/*/}

acpid

echo ${file%.*}  從右向左 第一次匹配 . 刪除

/etc/init

echo ${file%%/*} 從右向左 最後一次匹配 / 刪除

系統啓動流程

post---bios(boot device)---bootloader(mbr)---

kernel(initrd|initramfs)---init(/etc/inittab|)-----rootfs/sbin/init


/etc/inittab

設置默認運行級別

系統初始化 /etc/rc.d/rc.sysinit

運行指定級別的腳本

/etc/rc.d/init.d

/etc/rc.d/rc#.d

k

s

00-99:運行次數

啓動虛擬終端

啓動圖形終端

/etc/rc.d/rc.sysinit

檢測並以讀寫方式掛載根文件系統

設定主機名

檢測並掛載fstab中的文件系統

啓動SWAP分區

初始化外圍硬件的設備驅動

根據/etc/sysctl.conf 設定內核參數

激活udv和selinux

激活udev和selinux

清理過期的鎖和pid文件

狀態鍵映射

RELE 6

UPSTART --init

/etc/inittab

/etc/init/*.conf

內核初始化

硬件探測

裝載驅動

掛載根文件系統

啓動用戶空間的第一進程init

1,關機和重啓

shuntdown

halt

reboot

poweroff

2,主機名

3,運行對應的服務腳本

4,啓動終端

5,運行用戶

6,定義單用戶級別

7,狀態網卡驅動

8,提供一個WEB服務器

busybox

kernel


制定安裝

自動化安裝

定製引導盤

mount -n 掛載時不更新/etc/mtab文件

cat /proc/mounts 可以查看當前系統掛載的fs


mingetty 創建終端登錄  運行後會調用 /bin/longin 登錄提示符



腳本編程

變量中字符的長度,$(#變量名)

終端提示信息

/etc/issue 文件的內容

設定內核參數

/etc/sysctl.conf

sysctl -p


用戶


PAM 

/etc/pan.d/*


繞過PAM:

/bin/login:

login:驗證


nsswitch NETWORK SERVICE SWITCH

名稱解析開關

框架:

庫:libnss_file.so,

配置文件:/etc/nsswitch.conf

確定了去哪裏找用戶密碼

/etc/passwd /etc/shandow

/root/.bash_profile 中的環境變量

PS1= '[ \u @ \h \W]\$'

單用戶模式

exec init S

內核編譯


busybox

kernel+rootfs

kernel+initrd(busybox)+rootfs(busybox)


查看本機硬件信息

1. cat /proc/cpuinfo

2. lsusb

3. lspci

4. hal-device


內核配置

make menuconfig

make gconfig

make kconfig

make config


報錯爲.config 文件


make

make modules install

make install


模塊安裝位置,/lib/modules/內核版本號/


部分編譯

1,只編譯某子目錄下的相關代碼:

make dir/

make arch/

make drivers/net/


2,只編譯部分模塊

make M=drivers/net/


3,只編譯某一模塊

make /drivers/net/pcnet32.ko


4,將編譯完成的結果放置別的目錄

make O=/tmp/kernel



如何編譯busybox:


交叉編譯

make arch=平臺格式


$ {變量:-對應值} 如果變量爲空或者未定義,則變量展開爲"對應值",否則,展開爲變量的值

$ {變量:+對應值} 如果變量爲空或者未定義,無操作,否則,展開爲"對應值"的值

$ {變量:=對應值} 如果變量爲空或者未定義,則變量展開爲"對應值"並將展開爲變量的值


A=HELLOWORD

ECHO ${A:2:3}   第一個數字表示略過幾個,第二個數字表示之後的長度

LLO


/etc/rc.d/init.d/服務腳本


服務腳本支持配置文件: /etc/sysconfig/同名服務腳本



mktemp

創建零時文件或目錄

mktemp /tmp/file.XX X是隨機生成的數值

mktemp -d 零時目錄 


信號:

kill -信號 PID

1:HUP

2:INT

9:KILL

15:TERM

腳本中的信號捕捉,但是9和15無法捕捉


ctrl + c: 2 INT


trap命令

trap `command` 信號列表

一行中執行多個語句,命令中間加: 即可


任務計劃

在未來的某一點執行一次某任務


at

batch

at 時間

at>命令

at>ctrl + d

指定時間的方法

10:20

now+3m

noon中午,midnight午夜,teatime下午四點

at -l =atq 顯示執行列表

at -d =atrm 刪除

命令的執行結果,將以郵件的形式發送給安排任務的用戶

batch 系統空閒時自動執行

/etc/at.allow /etc/at.deny

週期性的執行

cron:自身是個不間斷的服務

anacron:cron的補充,能夠實現讓cron因爲各種原因在過去的時間該執行的任務恢復正常執行一次

cron:

系統cron任務

/etc/crontab

分 時 天 月 周 用戶 任務

用戶cron任務

/varspool/cron/用戶名

分 時 天 月 周 任務

時間的有效期

時間通配符表示

*:應對所有有效的取值

  3 * * * *  每小時的第3分鐘

  22 4 * * 0  每週日的4點22分

  

,:離散時間點

10,40 * * * * 每小時的10分和40分執行,半小時任務

-:連續時間點

10 02 * * 1-5 每週1-5的2點10分

/:對應取值範圍內的每多久一次

*/3 * * * *    每3分鐘一次

每2小時執行一次

0 */2 * * *

每2天執行一次

0 0 */2 * *

執行結果將以郵件形式發送給管理員

*/3 * * * * cat /etc/fstab &> /dev/null 

cron的環境變量:執行的所有命令都去PATH環境變量指定的路徑下找

PATH /bin /sbin /usr/bin /usrsbin

管理用戶任務

crontab 

-l:查看

-e:編輯

-r:移除所有任務

-u:用戶名 -e 管理其他用戶的cron任務

移除一個任務,打開編輯刪除即可

anacron:

/etc/anacrontab

第一項 第二項       第三項         第四項

多少天麼運行 開機後多少時間運行     註釋 命令

使用時需確保 crond service 開啓

make acrh/

arch/x86/boot/bzImage  編譯好的內核文件存放位置

硬件驅動:initrd

initrd:僅需提供訪問真正根文件系統所在設備的驅動

存儲設備和文件系統相關的模塊

系統初始化rc.sysinit:提供其他硬件的驅動:

ROOTFS:busybox 的INIT 不支持運行級別

/etc/inittab 格式也不盡相同


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章