第三周LINUX學習筆記

来源:https://www.cnblogs.com/gohrx/archive/2019/03/24/10588016.html
-Advertisement-
Play Games

周期性任務丶find 文件查找:find命令 locate :在資料庫中查找,非實時查找,精確度不高,查找速度快,模糊查找 /tmp/passwad/a.textfind:實時查找:速度慢 ,精確匹配find [option] [查找路徑][查找標準][執行動作](預設為顯示)查找路徑:預設為當前路 ...


                                                                                                                      周期性任務丶find

文件查找:find命令
locate :在資料庫中查找,非實時查找,精確度不高,查找速度快,模糊查找  /tmp/passwad/a.text
find:實時查找:速度慢  ,精確匹配

find [option] [查找路徑][查找標準][執行動作](預設為顯示)
查找路徑:預設為當前路徑
查找標準:預設為指定路徑下的所有文件

查找標準:
                       -name “文件名稱”:根據文件名查找 支持使用globbing(文件名統配符)
                        -iname 忽略大小寫

                        -user UserName :根據屬主查找
                        -group groupname:根據屬組查找
                        -uid UID:根據UID查找
                        -gid GID:根據GID查找   以上兩個作用在於,有些用戶被刪除了,但是屬於該用戶的文件沒被刪除,所以通過UID,GID 來查找
                        -nouser:查找沒有屬主的文件
                        -nogroup:查找沒有屬組的文件
                     組合條件
                             -a :且  -標準1 -a -標準2  兩標準都滿足,-a可省略,
                             -o:或
                             -not:反
      
                      -type:根據文件類型查找
                          f:普通文件
                          d:目錄文件
                          b:塊設備
                          c:字元設備
                          l:符號鏈接文件
                          p:命名管道
                          s:套接字
                      -size:根據文件大小查找
                          -size [+|-](大於|小於)#Unit
                            例如:-size +2M
                            常用單位:K,M,G
                            另外在一個單位之內的都表示等於 20K也是被當做1M文件,但是搜索-1M文件只能查找到0K的文件
                      根據時間查找:
                         以天為單位(time)  
                           最近訪問時間    -atime [+|-]#unit #:表示(#+1)天之外被訪問過
                           :表示#天內被訪問過的
                            無符號:表示短於(#+1)>x>=#天的時間段被訪問過
                            最近更改時間-mtime
                            最近狀態改動時間-ctime    
                         以分鐘為單位(min)
                            -amin
                            -mmin
                            -cmin
                      根據許可權查找:
                          -perm [+|-]MODE
                                MODE:精確匹配
                                +MODE:任何一類用戶的任何一位許可權都得匹配
                                -MODE:每類用戶的指定要檢查的許可權位都匹配
                                如 文件許可權 644
                                -perm -600 :否
                                -perm +222 :是
處理動作:



                      -ls :以長格式輸出各文件信息
                      -exec COMMAND {} \; :對查找到的文件指定的命令
                       -ok COMMAND {} \; :互動式
                         find把查找到的所有文件一次性地傳遞給-exec執行
                        find |xargs



文件的特殊許可權:
             有這麼一個問題:對於設置用戶密碼的文件/etc/shadow 他的許可權是000,也就是說除了管理員以外,其他用戶都不能修改這個文件的內容
             那麼,當用戶想要修改自己的用戶密碼時究竟要怎麼實現呢。

   讓可執行文件有suid
         任何用戶執行可執行可執行文件時,不再以用戶自己的身份達成進程的屬主,而是以文件的屬主當作進程的屬主
     suid表現為文件屬主許可權執行位上的s或S
      x:s
     -:S
        如何設定suid許可權
        chmod u+s FILE
        或者:假設原來的許可權為755
    chmod 4755

    目錄文件的sgid
       具有sgid的目錄,用戶再此創建文件時,新建文件的屬組不再是用戶的屬組,而是目錄的屬組  
        chmod g+s FILE
       或者:假設原來的許可權為755
       chmod 2755

       粘滯位:sticky
       對於公共可寫的目錄,用戶可創建文件,可以刪除自己的文件,但無法刪除別的用戶的文件
        
         chmod o+t FILE
     或者:假設原來的許可權為755
         chmod 1755
       sticky表示其在其他用戶上表示為t或者T
        x:t
    -:T
     suid sgid sticky
      0    0     0

Linux任務計劃
 一次性任務計劃
    at,batch
 周期性任務計劃:
    crontab
    anacron


一次性任務計劃:
   at 互動式:讓用戶在at>提示符輸入多個要執行命令:
      批處理:讓任務的個命令寫入文件由at進行調用

      at TIME
      at>
      Ctrl+d 提交作業
      at -l:查看作業 =atq
      at -q 字母 TIME 添加別的隊列
      at -d job_name 刪除一個尚未執行的作業= atrm
 
  at批模式:
      at  -f 文件路徑 TIME
      TIME:
         模糊時間:
           now,noon(中午) midnight(午夜)teatime(下午4點)tomorrow
任務的執行結果會議郵件的形式發送給提交者
    使用mail
          交互模式接受郵件
      交互模式發動郵件
      -s 指定主題
      < /path/to/somefile
      可以通過管道來提交郵件內容
    
    batch:一批,與at不同的是,不能指定時間:它自動選擇系統空閑時執行
 
 周期性任務計劃:cron,建議寫全路徑 ,否則有些命令可能找不到路徑
     crond:守護進程,運行在後臺,隨時監視著進程等待執行
         服務進程:阻塞,輪訓

   系統cron
     文件:/etc/crontab
/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
 時間表示法:
  1.每個事件為都應該使用其可用的有效取之範圍內的值
  2.某事件圍上的*表示對應位的有效取值
  3、-:連續的相鄰時間點取值
  4、,:離散的時間點取值
  5,/# :表示在指定時間範圍內每隔#一次

註意:通過輸出重定向而拒收郵件:
   &> /dev/null
  > /dev/null 2>&1
用戶cron
     /var/spool/cron/UserName 該目錄下存儲crontab任務
    使用crontab命令來實現:
     -l:查看自己的cron任務列表
     -e:通過EDITOR變數中定義的編輯器打開用戶自己的cron配置文件:
         編輯單獨的任務都使用-e選項,無論是刪除、修改還是新建
     -r:移除crontab文件

    如果是管理員:
    -u UserName :為別的用戶配置crontab作業;
提醒:如果在crontab的用戶命令中使用%,得轉義為\%
5 3 * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt

在使用單引號後,%也可以不轉義
5 3 * * * /bin/touch ~/testfile_`date +’%Y-%m-%d‘`.txt

如何實現秒級別的任務:

* * * * for i in {0..4};do /bin/echo “how are you?”;sleep10;done


crontab文件的格式
  空白行會被忽略
  #開頭的行是註釋


 anacron: 是crontab的補充,用於檢查crontab中某任務在過去的一個周期內是否沒有執行,
 如果沒有執行,則在開機以後的某時間點讓其執行一次,無論其周期是否到達

facl:文件訪問控制列表

普通用戶無法安全地將某文件授權給其他用戶訪問

facl:附加原有許可權模型之上另一層許可權控制機制,保存至文件擴展屬性信息中

getfacl FILE。。。獲取facl
setfacl[-m|-x]許可權 文件
-m:設定許可權
   -m u:UserName:Perms
   -m g:GroupName:Perms
   -m m::Perms
-x:取消許可權
   -x u:UserName
   -x g:GroupName
   -x m:
ll表示為+,有額外的許可權屬性
 -R:遞歸,對文件夾內的文件也生效




bash編製之迴圈控制
   for varName in LIST;do
      迴圈體
   done

   while CONDITION;do
     迴圈體
    done

   until CONDITION;do
     迴圈體
    done


迴圈控制:
   continue:提前結束本次迴圈而開始評估下一輪
   break[n]:跳出當前迴圈
                                                                                             網路詳解
網路基本知識
   TCP/IP
      物理層
      鏈路層:從設備到設備主機通信,MAC地址,MAC<-->IP(RARP/ARP)
      網路層: 從源主機到目標主機之間通信,IP地址,IP報文
      傳輸層:從源主機進程到目標主機特定進程之間通信,tcp/udp
      應用層:

      ISO/OSI:七層
      1-4:通信子網
      5-7:資源子網
         會話層
     表示層
     應用層
      

    TCP:有連接協議,建立邏輯鏈接
        SYN,ACK,FIN,RST,PSH,URG
    三次握手:
     SYN=1 ACK=0,FIN=0
     SYN=1 ACK=1 FIN=0
     SYN=0 ACK=1 FIN=0
    四次斷開:

主機:TCP/IP協議棧

配置主機介入TCP/IP網路:
   IP/Netmask
   路由:
     主機路由:一臺主機
     網路路由:是一個網路
     預設路由:
   DNS伺服器:
       主DNS伺服器
       備用DNS伺服器
    主機名:

  動態指定:
    IP/Netmask
  動態配置:
    DHCP伺服器
     Dynamic Host Configuration Protocol

靜態指定:
     用戶空間工具
       ifconfig
       ip
     網路設備服務配置文件:
        /etc/sysconfig/network-script/ifcfg-eth0
        完成長久有效配置
     GUI/TUI

用戶空間的命令行工具:立即生效,當不會長久有效
     ifconfig
     iproute2(ip,ss)
網路設備如何表示
      內核識別設備:驅動
      
      設備:別名
      乙太網設備:ethX
      PPP設備:pppX
      本地迴環:lo

ifconfig ip addr   ip link
   ifconfig:顯示所有活動狀態的相關信息
   ifconfig Interface:僅顯示指定介面的相關信息
   ifconfig Interface Address
      ip/mask
          長格式:
        ifconfig Interface IP netmask MASK
      CIDR:無類別的預見路由
           ifconfig Interface IP/MASK
route:ip route
    route:顯示路由信息
        -n:使用數字格式顯示,不反解地址到主機名
    route add:
      -host HOST_IP gw Next [dev Device]
      -net Net_ADDR

      -net 0.0.0.0 目標地址為任意地址
route del
   -host HOST_IP gw 下一跳
   -net Net_ADDR gw 下一跳

DNS伺服器指向:
  配置文件:/etc/resolv.conf
      最多三個:
      nameserver DNS_SERVER_IP

      dig -t A 功能變數名稱
         正解測試
      dig -x IP
          反解測試

Centos5/6:
  服務腳本:/etc/init.d/network

Centos 6
  服務腳本:/etc/init.d/NetworkManager

  服務腳本:SysV style LSB
       控制運行在後臺守護進程,接受參數{start|stop|restart|status}
       腳本位置:/etc/rc.d/init.d或/etc/init.d
   
   配置某服務開機自動啟動:chkconfig Src_Script_Name on
   禁止開機自動啟動:chkconfig Src_Script_Name off
   查看 chkconfig --list

   調用機制:
      1./etc/init.d/Script_Name {start|stop|restart|status}
      1.service Script_Name {start|stop|restart|status}

與網路設備相關的服務控制腳本
  他們通常能夠讀取為網路配置的配置文件,以之實現其配置生效或失效等管理功能

  配置文件有兩類(/etc/sysconfig/network-scripts/)
    配置IP、掩碼、網關
       乙太網:ifcfg-ethX
       PPP:ifcfg-pppX
     匹配路由
      route-ethX
      route-pppX

    配置IP、掩碼、網關:ethX
      DEVICE="eth0"
        此配置關聯至的設備。設備名要與文件ifcfg-後ude內容保持一致
      BOOTPROTO=none
           引導協議:{none|static|dhcp|bootp}
      HWADDR="00:0C:29:26:62:92"
            MAC地址:要與真實MAC地址保持一致,可省略
      NM_CONTROLLED="yes"
            是否接受NetworkManager腳本控制:{yes|no}
      ONBOOT="yes"
           是否開機自動啟動此網路設備{yes|no}
      TYPE="Ethernet"
            設備類型Etheraget Bridge(橋接)
      UUID="14351f7f-a726-4dfc-966e-dfb1f352f226"
          唯一標識,可省略
      IPADDR=
         ip地址
      NETMASK=
        掩碼
      GATEWAY=
        預設網關
      DNS1=
         DNS1服務地址
      IPV6INIT=no
         是否開啟ipv6
      USERCTL=no
         是否允許普通用戶操作網卡
      PEERDNS={yes|no}
         是否允許DHCP服務分配地址時直接更新/etc/resolv。conf中的DNS伺服器地址
   配置路由:route-ethX
     配置文件的格式1:每行一個要配置的路徑條目
       目標 via 下一跳
     配置文件的格式2:每一組一個路由條目
       ADDRESS#=目標
       NETMASK#=掩碼
       GATEWAY#=下一跳


       ADDRESS0=192.168.0.0
       NETMASK0=255.255.255.0
       GATEWAY0=172.16.100.1

如何實現在單網卡上配置多個地址:
    通過網路介面別名來實現
     eth0X
     eth0:X eth0:0 eth0:1....

     配置1:
     ifconfig ethX:Y IP/mask
     配置2:
     ifcfg-ethX:Y
      DEVICE=ethX:Y
      BOOTPROTO={none|static}
      IPADDR=
      NETMASK=
      GATEWAY=
     非主地址不支持DHCP協議獲取

            
ip命令的使用
  ip link
    ip link show 查看預設信息
    ip link set 介面 [up|down] [multicast on|off]:
  ip addr
      可以在一個介面配置多個地址而不使用介面別名:顯示這些地址
       ip addr show
    ip addr add dev 介面 ip地址/掩碼 [ ladel 別名 ]
    ip addr add dev 介面 ip地址 [ ladel 別名 ]
    ip addr flush 介面 [to 網路地址]
  ip route             
     ip route add 目標 via 下一跳 src 源地址 [dev 設備] 發到 “目標” 網段的網路包,下一跳的路由器 IP 是 “下一跳“”,包的源IP地址設為“源地址“” src 選項只會影響該 host 上產生的網路包。如果是一個被路由的外來包,明顯地它已經帶有了一個源 IP 地址,這時候,src 參數的配置對它沒有任何影響
     ip route del 目標
     ip route show


啟用/禁用介面:
  ip link set 介面 up|down
  ifconfig 介面 up|down
  ifdown 介面,ifup 介面
     重置網路連接

TUI或GUI
 system-config-network-tui
    配置結束後將保存配置文件中
 setup --> Network Configuration


網路管理或檢測等相關的工具:
    ping:ICMP
       ping [options] ip
         -c 次數
     -w 測試執行時長
    traceroute HOST:
        獲取當前主機到目標主機所經過的網關
    mtr HOST

    netstat
       -t:tcp協議的連接
       -u:udp協議的鏈接
       -l:監聽狀態的連接
       -a:所有狀態的連接
       -p:連接相關的進程
       -n:數字格式顯示
       -r: 顯示路由表,類似於route或ip route show

       常用組合:
        netstat -tan
    netstat -tunl
    netstat -rn
    ss,用於取代netstat
       -t:tcp協議的連接
       -u:udp協議的鏈接
       -l:監聽狀態的連接
       -a:所有狀態的連接
       -e:顯示擴展信息
       -m:顯示套接連接使用的記憶體信息
       -p:進程及UDP
       -n:數字格式顯示
       -o state (established)
    ethtool 介面: 顯示介面設備屬性
    ethtool -S 介面:顯示設備介面的統計數據

                                                                                                  進程管理

進程管理:
 二進位的格式為ELF,是CPU指令集中的指令
 程式=指令+數據,
 進程是程式的副本,可以有多個
 內核是一個資源調度監視器
 Linux是搶占式多任務
 記憶體被事先劃分成多個相同大小的頁框
 LIU:最近最少使用
 mmap 共用記憶體
 通過fork()進程生成
 記憶體泄漏

 init是所有進程的父進程
 task_struct任務結構:是一種數據結構
 雙向迴圈鏈表
 線程是一個進程內的多個執行流
WLP:輕量級進程
模式轉換:

時鐘驅動:
    進程優先順序:

    是進程調度的核心資源

    公平:
        結果公平:
    起點公平:
演算法:完成工作的調度方式
BIG O
    O(1)
    O(logn)
    O(n)
    O(N^2)
    O(2^N)
一共140個隊列
0-99 為實時優先順序


進程間通信:IPC
      InterProcess Communication
         signal:信號
     shm:共用記憶體
     semerphor:旗語
     socket:
     rpc:Remoter Procedure Calling
             xml-rpc,rest

     過程:沒有返回值的函數
     函數:

進程的分類:
  CPU-Bound:CPU密集型
  I/O-Bound:I/O密集型

進程的分類:
     批處理進程
     互動式進程
     實時進程

進程調度器:
    進程優先順序:0-139
        實時優先順序: 1-99,數字越大,優先順序越高
    靜態優先順序:100-139,nice值調整,數字越大,優先順序越低
                    nice:-20,19
            priority:100,139
     動態優先順序:由內核維護,動態調整

進程狀態:
      運行態:running R
         就緒態:
      睡眠態:sleeping
          可中斷睡眠 inruptable
      不可中斷睡眠 uninruptable
      停止態:不會被調度 stopped
      僵死態:zombie

進程管理命令:
  ps pstree pidof top htop pmap vmstat dstat

ps:顯示進程狀態的命令
   進程:
       與終端相關的進程:a
       與終端無關的進程:x
     STAT:
         R:運行或可運行
         S:可中端睡眠
         D:不可中端睡眠
         T:停止
         Z:僵死
         s:session leader 有子進程
         +:前臺進程
         l:多線程進程
         N:低優先順序進程
         <: 高優先順序進程
       u:以用戶為中心顯示進程相關信息
           %CPU:cputime/realtime
          VSZ:虛擬記憶體集,Virutal menmory Size
      RSS:常駐記憶體集,
      STIME:啟動時間
      TIME:累計占用的記憶體時間 []表示內核線程
    常用組合一:ps aux
    其他常用選項:
     -e:顯示所有進程
     -f:以進程的長格式顯示
     常用組合之二:ps -ef
     常用組合之三:ps -eFH
          -F:顯示額外信息
      -H:顯示進程的層次信息
    pstree:顯示進程樹

      自定義要顯示的信息:-o
              ps  auo pid, command
               rtprio:實時優先順序
           ni:nice值
           pri:優先順序
           psr:運行的cpu
pgrep pattern:
      例如:pgrep bash
   -U Username:僅顯示指定用戶的進程的進程的PID
   -G Groupname:僅顯示指定用戶組的進程的進程的PID

pidof:顯示指定命令所啟動的pid
    pidof command
 
top:
  M:按記憶體占用百分比大小排序
  P:按cpu占用百分比大小排序,預設
  T:按累計占有時長進行排序
  1:分開顯示
  l: 是否顯示負載信息
  t:是否顯示cpu和進程的統計信息
  m:是否顯示記憶體和交互分區的信息
  q:退出
  k:kill,殺掉進程
  s:改變top刷新頻率
top - 11:49:38 up  3:18,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:    502168k total,   420160k used,    82008k free,    57496k buffers
Swap:  2097144k total,        0k used,  2097144k free,   254164k cached

us — 用戶空間占用CPU的百分比。
 sy — 內核空間占用CPU的百分比。
 ni — 改變過優先順序的進程占用CPU的百分比
 id — 空閑CPU百分比
wa — IO等待占用CPU的百分比
 hi — 硬中斷(Hardware IRQ)占用CPU的百分比
 si — 軟中斷(Software Interrupts)占用CPU的百分比

VIRT:virtual memory usage 虛擬記憶體
1、進程“需要的”虛擬記憶體大小,包括進程使用的庫、代碼、數據等
2、假如進程申請100m的記憶體,但實際只使用了10m,那麼它會增長100m,而不是實際的使用量
RES:resident memory usage 常駐記憶體
1、進程當前使用的記憶體大小,但不包括swap out
2、包含其他進程的共用
3、如果申請100m的記憶體,實際使用10m,它只增長10m,與VIRT相反
4、關於庫占用記憶體的情況,它只統計載入的庫文件所占記憶體大小
SHR:shared memory 共用記憶體
1、除了自身進程的共用記憶體,也包括其他進程的共用記憶體
2、雖然進程只使用了幾個共用庫的函數,但它包含了整個共用庫的大小
3、計算某個進程所占的物理記憶體大小公式:RES – SHR
4、swap out後,它將會降下來
DATA
1、數據占用的記憶體。如果top沒有顯示,按f鍵可以顯示出來。
2、真正的該程式要求的數據空間,是真正在運行中要使用的。

  常用選項:
     -d #:指定刷新時間間隔
     -b:以批次顯示top的刷新
     -n # 指定指定的次數
htop
    u:選擇指定用戶的進程
    l: 顯示進程所打開的文件列表
    s:顯示進程執行的系統調用
    a:顯示進程的進程的cpu上
    #:快速將游標定位之指定的PID進程上
    quit
vmstst
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0  57460  54564 285520    0    0    30     5   21   14  0  0 99  1
  procs
    r:運行或等待cpu時間片的進程的個數
    b:被阻塞(通常為等待I/O完成)的進程的長度
  memory
    swpd:從物理記憶體交互至swap中的數據量
    free:未使用的記憶體大小
    buffer:buffer空間大小,通常與緩存寫操作相關
    cache:cache空間大小,通常與緩存讀操作相關
  swap
    si:swap in 數據進入swap中的數據量,通常是速率。kb/s
    so:swap out 數據離開swap中的數據量,通常是速率。kb/s
  io:
    bi:block in:從塊設備讀入的數據量,通常是速率,kb/s
    bo:block out:保存至塊設備中的數據量,通常是速率,kb/s
   
    in:中斷發生頻率。每秒的中斷數
    cs:context switch 上下文切換,進程切換,通常是速率,kb/s
  cpu:
    us:用戶空間的使用率
    sy:內核空間的使用率
    id:空閑
    wa:等待的
    st:被偷走的
    
   使用格式
   vmstat [delay [counts]]
     -s:顯示記憶體統計數據

進程:nice
      用來手動調整進程優先順序
      -20,19
      100,139

      預設nice為0.其預設優先順序為120

      nice:普通用戶只能調大此值

      對於尚未啟動的程式
         nice -n # COMMAND 表示進程以#進程啟動

       對於運行中的進程:
          renice # PID 調整PID的nice值

        查看 ps axo ni,command, pid


進程間通信(IPC):
    信號:

    kill命令:可以實現向其他進程發送信息
     
       kill -l :可以查看向進程發送的所有信息
       man 7 sigual
       
       kill -SIGNAL PID
             -SIGNAL:
             數字代號:比如1,9等
         信號名稱:如SIGHUP等
         簡寫的信號名稱:如HUP等

        1) SIGHUP:讓程式重讀配置文件,而不用重啟程式
        2) SIGINT:中斷信號。Ctrl+c即發送次信號      
        9) SIGKILL:殺死進程    
        15) SIGTERM:終止進程,比較優雅(預設)
        
     killall -SIGNAL 進程名



Linux的作業控制
    前臺作業:占據著一個終端
    後臺作業:作業執行時不占據終端,作業啟動後就釋放終端

    非守護進程類的程式,啟動以後都在前臺工作
          如果已經啟動:前臺-->後臺。ctrl+z把前臺作業送往後臺,作業被”停止“
      如果尚未啟動:COMMAND &

      退出當前會話,作業也會終止,因為作業與當前終端相關,如果把作業送往後臺後,不期望作業隨終止結束而停止
            nohup COMMAND &
           
       如何讓送往後臺的作業繼續執行:
        fg [[%]作業號碼]:將作業調回前臺繼續進行
        bg [[%]作業號碼]:讓作業在後臺繼續進行
            預設的為最後一個進入後臺的任務
              kill %作業號碼:終止作業       
       查看作業號:
           jobs
                                                                                                          系統初始化流程丶拯救模式   
內核管理

os:
   內核的功能:
        進程管理:task_struct,scheduler
    記憶體管理:
    I/O管理:中斷及中斷處理
    文件系統:ext3,ext4,reiserfs,xfs
    驅動程式:
    安全相關:SELinux
    是通用軟體,平臺類的軟體
    內核設計流派:
        單內核:單一體繫結構
        Linux
           模塊化設計:核心+外圍功能性模塊組成
               .ko:Kernel object
           內核支持動態裝卸載模塊
               
    微內核:內核子系統
        Windows
        Solaris
         
     fock()
         init:負責管理用戶空間的進程
            init:PID 1
        /sbin/init:可執行文件

Linux的初始化流程
 POST:ROM+RAM
 
 BIOS:Boot Sequence

 MBR:
     446:bootloader,用以選擇操作系統。還要能識別文件系統
     64:分區表,16個位元組一個分區
     2:5A
 
 kernel文件:基本磁碟分區,無法放在LVM上
             vmlinuz 壓縮存放,有兩段代碼組成,一個解壓代碼,一個為內核代碼
 /sbin/init
 /lib/
 
 initrd:
    rd:ram disk

 /sbin/init:
      /etc/inittab
         /etc/rc.d/rc.sysinit腳本



 init:
    CentOS 5: SysV格式的系統初始化程式
         串列化:
    CentOS 6:Upstart
         dbus
           A
       B
       C
     SystemD:參考OS X中並行初始化過程

   運行級別:
     0-6:7個級別
        0:關機
    1:單用戶模式,直接以root用戶登錄
    2:多用戶模式,不支持NFS文件系統
    3:完全多用戶模式,文本模式,不啟動圖形界面
    4:預留級別
    5:完全多用戶模式,圖形模式
    6:重啟

/sbin/init的配置文件:
    每行定義一種操作:
      id:操作的id
      運行級別:runlevels:在那些級別下執行此操作
      action:動作
         initdefault:設置預設運行級別,無需定義操作
           sysinit:指定系統初始化腳本
       si::sysinit:/etc/rc.d/rc.sysinit
     wait:等待系統切換至此級別時運行一次;
     ctrlaltdel:定義組合鍵被按下時要運行的命令:
     respawn:當指定的操作進程被關閉時立即在重啟一次
       tty1:2345:respawn:/sbin/mingetty tty1
      process:操作
   /etc/inittab中定義的操作(init要完成的任務)
      指定預設運行級別
      指定系統運行的初始腳本
      啟動指定級別下的要啟動的服務,關閉要停止的服務
        /etc/init.d
             /etc/rc.d/rc.N.d(0-6)
                s##
            k##
      定義ctrlaltdel組合的動作
      初始化字元終端
          終端:對應的是設備
                /dev/tty#,/dev/ttyS#,/dev/console,/dev/pts/#
      調用:login-->/etc/issue
      啟動圖形終端
cmdline:內核啟動時傳遞給內核的參數
系統初始化腳本:/etc/rc.d/rcinit
      設置主機名:
      列印文本歡迎信息
      激活SELinux和udev
      激活swap
      掛載/etc/fstab定義的本地文件系統
      實現檢查根文件系統並對其以讀寫重新掛載
      設置系統時鐘
      裝載鍵盤映射
      根據/etc/sysctl.conf設置內核參數
      激活RAID和LVM設備
      清理操作
MBR:
    bootloader:引導載入器,是一個程式
         LILO:LInux LOader
          不能引導位於1024 Cylinder(柱面)以後的分區中的os;
     GRUB:GRand Unified Bootloader
          1st stage:位於MBR中,為了引導2nd stage
          1.5 stage:位於boot基本磁碟分區中,為識別內核文件所在的文件系統提供文件識別擴展
          2nd stage:位於boot基本磁碟分區中,GRUB的引導成勛
              boot分區大小
             Centos5:100M
             Centos6:200M

          /boot/grub/
             stage2:讀取配置文件grub.conf
          Grub的功能:
          1.選擇要啟動的內核或系統
              隱藏互動式介面
          2.互動式介面
              e: 編輯模式
          3.基於密碼保護:在配置文件中 輸入 password --md5 密碼
              啟用內核映像
              定義在相應title下
          傳遞參數(進入編輯模式)
           
           定義在全局段中
          grub介面
          title:操作系統或內核的標題
              root:設定內核文件所在的分區為grub的根
                  kernel:定義要使用的文件,後面可以附加傳遞給內核的啟動參數
          initrd:指定為內核提供額外驅動等功能的ram disk或ram fs文件
          
      init的級別1的表示方法:
           1,s single S
           單用戶模式幾乎不會啟動任何服務,且不需要用戶登錄;單是會執行/etc/rc.d/rc.sysinit腳本
           如果連/etc/rc.d/rc.sysinit文件也不載入,則傳遞emergency

           運行級別的切換
           #init [0-6]
           查看運行級別:
                  runlevel
          who -r
        grub.conf配置文件語法:
       default=#:指定預設啟動的內核或os
       timeout=#:等待用戶選擇要啟動的內核或os的時長,單位為秒鐘
       splashimage=   :指定使用的背景圖片
       hiddenmenu:隱藏菜單
       title
          root(hd0,0)
                    (Device Part)
             Device(磁碟)表示方式:在grub中,統統以hd開頭,並緊跟一個數字做各磁碟設備的標記,從0開始
             part表示方式:代表分區,從0開始編號
           kernel
                指定內核文件及傳遞給內核的參數
            參數:ro root=設備文件,quiet 靜默模式輸出
        initrd
            文件:通常為cpio歸檔,並使用gzip壓縮,通常以.img作為文件尾碼名
        在緊急救援模式下:
         grub的安裝:
        第一種方式
        #grub
          grub root(hd0,0)
          grub setup(hd0)
          grub quit

         第二種方式:
         # chroot /mnt/sysimage
         # grub-install --root-directory=/ /dev/sda


         sync 將記憶體文件載入到硬碟上
啟動流程:POST-->BIOS(boot sequence) --> GRUB(bootloader(stage1:mbr;stage2:grub目錄中)) --> kernel(initrd) --> SHELL

  HOST:宿主機
  Target:目標機
 
  基於HOST只做一個簡單的可啟動的Linux
   1.給目標磁碟分區
      兩個:
         宿主機上:/dev/sdb1 /dev/sdb2
     /dev/sdb1 掛載至 /mnt/boot
         /dev/sdb2 掛載至 /mnt/sysroot

   2.安裝grub至目標磁碟
    # grub-install --root-directory=/mnt /dev/sdb
    
   3、複製內核和initrd文件
      cp /boot/vmlinuz-Version  /mnt/boot/vmlinuz
      cp /boot/initramfs-Version.img /mnt/boot/iniyramfs.img

    4.創建目標文件的根系統文件
       mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,src,mnt,media,home,root}
       接著去移植bash等至目標主機的根文件系統

     5.為grub提供配置文件
       vim /mnt/boot/grub/grub.conf
       default=0
       timeout=5
       title
         root(hd0,0)
     kernel /vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash
     initramfs /initramfs

Linux的內核,單內核,支持動態裝載和卸載
      模塊:/lib/modules/Kernel_version/


      查看pci設備的命令
      lspci -v

      查看當前內核裝載的所有模塊
      lsmod

      查看某模塊的詳細信息
      modinfo 模塊

      動態卸載某模塊
         modprobe -r 模塊
         rmmod 模塊

       動態裝載某模塊
          modprobe 模塊
      insmod 路徑文件


       /sbin/init
          /etc/inittab
       /etc/rc.d/rc.sysinit
        啟動對應級別的需要啟動的服務。停止需要關閉的服務
         /etc/rc.d/rcN.d/
           S##
           K##
         符號鏈接:/etc/init.d

         ##:表示優先順序(0-99),數字越小,優先順序越大


         chkconfig --add 添加服務
         指定級別
         --level

         刪除:
         chkconfig --del

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之前因為學習TensorFlow,所以在自己的Ubuntu上安裝了cuda,cudnn以及Nvidia驅動。但可能是由於自己經常不註重正常關閉自己的Ubuntu,這就導致了一個問題: 某天在查看自己的顯卡信息時,輸入 結果報錯 黑人問好臉???自己之前明明安裝好了Nvidia驅動的呀,怎麼現在就報錯 ...
  • 個人動態功能變數名稱管理系統。Personal DDNS. 來源: "https://www.cnblogs.com/osnosn/p/10591431.html" 來自 "osnosn的博客" 簡單又實用的動態功能變數名稱管理系統, 自建動態功能變數名稱管理系統 使用 bind9 + php + mysql , 創建個人 ...
  • 導語:為什麼要學習linux?學到什麼程度? 大數據技術是運行在集群,且是linux操作系統這樣的集群當中的,所以學習大數據之前,你得先掌握了linux的簡單操作,沒錯,我們不是專門的做linux工作,所以只要學會簡單操作,會用了就行 學習階段不可能專門買四五台伺服器,成本太高了,所以我們就用虛擬化 ...
  • Linux 自動化部署DNS伺服器 1.首先配置主DNS伺服器的IP地址,DNS地址一個寫主dns的IP地址,一個寫從dns的地址,這裡也可以不寫,在測試的時候在/etc/resolv.conf中添加記錄。 2.配置從dns的IP地址 3. 運行腳本,選擇1,部署主DNS伺服器 4.運行完腳本之後, ...
  • 1.linux的體繫結構 體繫結構主要分為用戶態(用戶上層活動)和內核態 內核:本質是一段管理電腦硬體設備的程式 系統調用:內核的訪問介面,是一種不能再簡化的操作 公用函數庫:系統調用的組合拳 shell:命令解釋器,可編程 2.linux下如何查找特定文件 find 3.linux下檢索文件內容 ...
  • 使用yum命令報錯File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: 解決辦法: 修改yum配置文件,將python版本指向以前的舊版本 # vi /usr/bin/yum #!/usr/bin/python2.7 修改urlgrabb... ...
  • 1. 前言 本文只講解實戰應用,不會涉及原理講解。如果想要瞭解iptables的工作流程或原理可參考如下博文。 具體操作是在PC機的VMware虛擬機上進行的,因此涉及的地址都是內網IP。在實際工作中也是一樣的操作流程,只需要把涉及外網的地址改為公網IP即可。 文章參考:iptables nat及端 ...
  • 一、虛擬主機 A、基於IP地址 B、基於功能變數名稱 C、基於埠號 複習yum倉庫掛載 mkdir /media/cdrom mount /dev/cdrom /media/cdrom/ vim /etc/fstab /dev/cdrom /media/cdrom iso9960 defaults 0 0 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...