【系統與工具】Linux——Linux簡介、安裝、簡單使用

  1. 計算機概論與Linux簡介

    • 計算機概論
    • Linux介紹與版本
  2. Linux的規劃與安裝

    • Linux與硬件平臺密切相關
    • 規劃硬件與Linux安裝
      • 主機規劃與磁盤分區
      • 安裝CentOS、多重引導
  3. 簡單使用

    • 幫助手冊
    • 文本編輯器
    • 關機

0. Linux介紹與版本

操作系統(Linux):高效地控制計算機系統硬件,以及系統資源的分配,提供計算機運行所需的功能,為應用層提供一組系統調用接口

  • 操作系統移植:參照硬件的功能函數,修改操作系統程序碼,經改版后的操作系統就能在另一個硬件平臺運行
    • 2006之前,MAC基于Power CPU架構(IBM設計的硬件架構),之后,基于X86架構(采用Intel設計的硬件架構)

0.1 Linux是類Unix的GNU GPL自由、開源軟件

0.1.1 Unix


第一階段:Unix出現前

1969年前,主機的輸入輸出設備僅可用讀卡機/打印機——批次型操作系統

  • 程序設計者將程序相關信息在讀卡紙上打孔,再將讀卡紙插入讀卡機作為主機的輸入,進行運算

1960年,MIT提出 相容分時系統 (Compatible Time-Sharing System, CTSS),多個終端機通過連線接入大型主機,利用主機的資源進行運算

在這里插入圖片描述

貝爾實驗室、MIT、奇異公司(通用電器)共同發起Multics計劃:讓大型主機達成可供300個以上終端機連線使用的目標

  • 1969年前后,貝爾實驗室退出,但最終發展出這一系統https://www.multicians.org/

第二階段:Unix的產生

  • 1969年,Ken Thompson的小型文件服務系統

    Thompson基于PDP-7這一主機,進行操作系統核心程序編寫。基于組合語言(Assembler)寫出了一組核心程序,包括核心工具程序以及一個文件系統——Unics,Unix的原型

    Assembler:直接與芯片對接的低級語言,必須了解硬件架構

    • 所有程序或設備都是文件

    • 構建編輯器伙伴或文件,一個程序完成一個目標,且要高效地完成目標

  • 1973年,Ritchie等人以C語言寫出Unix的核心

    thompson與Ritchie合作想將Unics改為高階語言編寫,但當時的B高級語言性能不好,所以將B重寫為C語言,以C語言改寫Unics的核心程序。

    使用高級語言編寫,與硬件相關性減小,可以輕易移植到不同機器上

    Assembler具有專一性,每次安裝到一臺新的機器都需要重新編寫組合語言

  • 1977年,Unix第一個重要分支——BSD

    貝爾屬于AT&T,Berkeley大學取得了Unix的核心源代碼后,著手修改成適合自己機器的版本, 并且同時增加了很多工具軟件與編譯程序,最終將它命名為Berkeley Software Distribution(BSD)

    Sun公司以BSD發展的核心進行自己的商業Unix版本發展

  • 1979年,Unix第二個重要分支——System V架構,以及版權宣告

    每一家公司自己出的Unix雖然在架構上面大同小異,但是卻真的僅能支持自身的硬件

    Unix強調多用戶多任務環境,但早期286架構下的CPU性能不足,所以沒有人研究將Unix移植到x86 CPU

  • 1979年,AT&T推出System V第七版Unix,支持x86架構的計算機

    出于商業考慮,AT&T在發布時,提及版權限制,“不向學生提供源碼”


第三階段:后續發展

  • 1984年,X86架構的Minix操作系統開始撰寫,1986年完成,次年出版Minix相關書記(Andrew Tanenbaum,譚寧邦),完全不參考Unix源碼,但強調與Unix相容

    可通過磁片/磁帶購買,且提供源碼

    教學目的,因此并不關注生態以及用戶需求

  • 1984年,Richard Mathew Stallman(史托曼)發起GNU計劃

    1983年以后,因為實驗室硬件的更換,使得史托曼無法繼續以原有的硬件與操作系統(Lisp)繼續自由程序的撰寫
    將軟件移植到Unix上面,為了讓軟件可以在不同的平臺上運行, 因
    此,史托曼將他發展的軟件均撰寫成可以移植的型態(公布源碼)

    1984年,開始GNU計劃,目的是:創建一個自由、開放的Unix系統

    參考Unix上的軟件,依據這些軟件開發相同功能的軟件——GNU軟件

    隨著GNU軟件的流行,史托曼開始撰寫GCC編譯器,

    • 所有軟件都需要編譯為二進制的可執行文件,C語言編譯器眾多,但都是專利軟件
    • GNU C Compiler
    • 先將編輯器Emacs移植到Unix上(語法檢查),磁帶出售,資金,成立自由軟件基金會(Free Software Foundation,FSF)。而后,合作完成了GCC。并撰寫了很多可以被調用的C語言函數庫(GNU C library,glibc)以及操作系統的接口BASH Shell——1990年左右完成
  • 1985年,為避免GNU開發的自由軟件被轉化為專利軟件,與律師起草了通用公共許可證(General Public License,GPL)。

    emacs

    GCC

    glibc

    Bash shell

    hurd,GNU開發的內核

  • 1988年:圖形接口XFree 86計劃

    1984年,MIT與合作廠商發布 X Window System

    1988年,成立非營利性XFree86組織(X Window System+Free+x86)

  • 1991年,芬蘭的赫爾辛基大學的Linus Torvalds,宣稱他以bash, gcc等 GNU 的工具寫了一個小小的核心程序,可以在Intel的386機器上面運行

0.1.2 GNU,自由軟件與開放源碼

自由軟件活動:將源代碼連同軟件程序釋出的舉動,在 GNU 計劃的范疇之內就稱為自由軟件(Free Software)運動

自由軟件的版權GNU GPL:而為了避免Open source自由軟件被拿去做成專利軟件, 于是Stallman同時將GNU與FSF發展出來的軟件,都掛上GPL的版權宣告~

  • http://people.ofset.org/~ckhung/a/c_83.php
  • http://www.gnu.org

自由軟件(Free Software):一個軟件掛上了GPL版權宣告之后,他就成了自由軟件

  • 任何人可取得軟件與源代碼
    任何人可復制、修改、再發行
    回饋:你應該將你修改過的程序碼回饋于社群!

但不能

  • 修改授權:你不能將一個GPL授權的自由軟件,在你修改后而將他取消GPL授權
    單純販賣:你不能單純的販賣自由軟件。

自由軟件與商業行為:自由軟件搭配售后服務與相關手冊是可以售賣的

  • GPL是可以從事商業行為的

  • GPL 目前已經出到第三版 GPLv3。但是,目前使用最廣泛的,還是 GPLv2,包括 Linux 核心就還是使用 GPLv2 的


開源(Open Source):軟件在發布時,同時將作者的源代碼一起公布的意思

開源軟件:滿足開源軟件授權的軟件

需要滿足的條件

  • 公布源碼
  • 源碼可被全部或部分出售
  • 允許修改或衍生產品
  • 可以使用與原本完全不同的名稱或編號再發行
  • 不可限制個人或團體、領域、產品使用權
  • 不可具有排他條款

開源軟件與GPL自由軟件的區別:

  • 開源軟件授權不要求再發行軟件具有相同的授權

  • 開源軟件的全部或部分可作為其他軟件的一部分

    任何軟件只要用了GPL的全部或部份程序碼,那么該軟件就得要使用GPL的授權

常見的開源軟件授權

  • Apache License 2.0
  • BSD 3-Clause “New” or “Revised” license
  • BSD 2-Clause “Simplified” or “FreeBSD” license
  • GNU General Public License (GPL)
  • GNU Library or “Lesser” General Public License (LGPL)
  • MIT license
  • Mozilla Public License 2.0
  • Common Development and Distribution License

專利軟件:僅推出可執行的二進制程序

  • 免費專利軟件授權膜式
    • Freeware:不公布源碼的免費軟件
    • Shareware:有試用期

0.1.3 Linux

Linux歷史

386的多任務測試

多任務:同一CPU的分時復用

  • 假設CPU頻率1GHZ,即每秒工作周期為10910^9109 次,假設每個程序運行1000個時鐘周期,然后就要切換到下一個程序,則CPU一秒可切換 10610^6106
  • 實際上,任務切換也需要占用一定資源,所以在CPU上同時啟動兩個任務,比一個一個執行更耗時

早期X86的多任務處理表現不佳,386得到很大改善

  • 要實現多任務,除了硬件(主要是CPU)具有多任務的特性外,操作系統也需要支持這個功能

多任務操作系統中,每個程序被執行,都會被分配一個最大CPU使用時長,一旦超過,當前工作就會被丟出CPU,等待下次工作調度再次調入內核

釋放Linux0.02

測試完386硬件性能后,Linus將Minix安裝到386計算機。

但Minix的軟件支持并不多,所以Linus決定依靠bash與gcc編譯器自己寫內核

很多在Unix上能夠運行的軟件,不能在Linux上運行

為了讓Linux相容于Unix系統,有兩種思路

  • 修改軟件
  • 修改Linux,讓Linux符合Unix的軟件運行規范

參考POSIX規范

可移植操作系統接口(Portable Operating System Interface,POSIX),規定了操作系統應當提供哪些功能,以及這些功能的接口和行為方式

  • 旨在使應用程序在不同的Unix系統之間或從Unix系統向其他符合POSIX標準的系統之間移植時更加便捷,減少因系統差異帶來的問題。

系統級應用:系統調用、文件系統、網絡接口、進程控制、信號處理、進程間通信等

編程語言綁定:為C語言等常用編程語言提供了與操作系統接口交互的方式

工具與工具接口:定義了一系列工具的規范,比如文本處理工具(如grep、awk等)

Linux的發展

  • 個人維護階段,Linus解決使用者的問題,或者特殊需求所需的硬件驅動

  • 廣大志愿者維護階段,志愿者寫出相容的驅動程序/軟件,Linus將其代入內核,只要測試可以運行,則講這些程序加入內核

    為應對隨時加入的程序,Linux發展出模塊化,一些功能獨立于內核,僅有需要時才加入內核,

  • 核心功能分工發展階段,副手會先將來自志工們的修補程序或者新功能的程序碼進行測試, 并且結果上傳給托瓦茲看,讓托瓦茲作最后核心加入的源代碼的選擇與整合

1994年,完成Linux正式版內核,V1.0,并加入X window system的支持

1996年,完成2.0,2011年3.0,2015年4.0

Linux核心版本

release版本則是在主、次版本架構不變的情況下,新增的功能累積到一定的程度后所新釋出的核心版本

主線版本與長期維護版本

舊的版本在新的主線版本出現之后,會有兩種機制來處理,一種是結束開發 (End of Live,EOL),另一種是保持該版本的持續維護,即長期維護版本(Longterm)

uname -r

Linux distributions版本

GNU很多軟件都以LInux為主要操作系統,來進行開發

Linux kernel與可運行軟件整合,加上獨有工具,成為LInux的安裝套件(Linux distribution=Kernel+Softwares+Tools+可完整安裝程序)

為了讓所有Linux distributions開發不至于過大差異,采用Linux Standard Base(LSB),以及目錄架構的File system Hierarchy Standard(FHS)等標準來規范開發者

主要分為兩大類系統,一種使用RPM方式安裝軟件,一種使用Debian的dpkg方式安裝系統

RPM軟件管理DPKG軟件管理
商業公司RHEL (Red Hat 公司)、SuSE (Micro Focus)Ubuntu(Canonical Ltd.)
非商業公司Fedora、CentOS、OpenSuSEDebian、B2D
Linux應用

企業環境應用:向消費者或員工提供產品信息,整合企業內部的數據統一性

  • 網絡服務器

  • 關鍵任務的應用(金融數據庫、大型企業網管環境)

    x86計算機性能大幅提升,且價格便宜

  • 學術機構的高性能運算任務

個人環境的應用:圖形化界面

  • 與X window System結合——KDE與GNOME窗口

移動設備

  • Android,針對ARM機器

    安卓版本號就是Linux內核版本號

嵌入式系統:操作系統嵌入產品,不會被改動

  • 家電、路由器、控制芯片等微控制器

云端應用:單一主機功能強大,造成硬件資源閑置

  • 虛擬化技術得以快速發展:在一部實體主機上仿真出多個邏輯上完全獨立的硬件

1. Linux規劃與安裝

安裝Linux之前,需要對distributions特性,服務器的驅動支撐程度、未來升級需求、硬件擴充性需求等考慮

安裝過程中,需要對磁盤分區、文件系統等有一定程度的了解

1.1 主機規劃

各組件或裝置在Linux系統中都是一個文件

1.1.1 硬件選購

任務目標

首先要了解Linux系統預計實現的任務,在選購硬件時才知道哪些組件最為重要

  • 裝機目標

    計算機硬件的等級與主機未來的功能相關

  • 效能/價格、效能/消耗瓦數

    如果高一級的產品讓你的花費多一倍,但是新增加的效能卻只有10%,效能/價格比太低

    每瓦效能越高,越省電

  • 驅動支撐程度

    硬件廠商是否提供操作系統相應的驅動程序

硬件選購

較早期的計算機已經沒有能力再負荷新的操作系統

較早期的硬件配備也可能由于保存的問題或者是電子零件老化的問題, 導致系統在運行過程中出現不明的宕機

  • CPU

  • RAM:主存越大越好

  • 硬盤:若是作為備份或文件服務器,需要考慮磁盤陣列(RAID)

    RAID利用硬件技術將多個硬盤整合為一個大硬盤,操作系統只會看到最后被整合起來的大硬盤

  • 網卡

裝機目標與硬件搭配

  • 需要桌面系統,則對CPU于內存要求高一些
  • 中型以上單位的網絡服務器,對CPU、內存、網卡要求高一些,最好組磁盤陣列

需要更為穩定的Linux服務器,并考慮到系統整體搭配與運行效能,購買已組裝測試過的商用服務器是很好的選擇

  • Red Hat 的硬件支持:https://hardware.redhat.com/?pagename=hcl
  • Open SuSE 的硬件支持:http://en.opensuse.org/Hardware?LANG=en_UK
  • Linux 對筆記本電腦的支援:http://www.linux-laptop.net/
  • Linux 對打印機的支持:http://www.openprinting.org/
  • Linux 硬件支持的中文HowTo:http://www.linux.org.tw/CLDP/HOWTO/hardware.html#hardware

1.1.2 磁盤分區

硬盤連接方式與設備文件名的關系

在Linux中,每個設備都被當做一個文件,/dev 目錄下

  • 實體硬盤大多使用 /dev/sd[a-] 的文件名
  • 虛擬機內的硬盤由仿真器產生,磁盤名為 /dev/vd[a-p]

SATA/USB/SAS等磁盤接口都是用SCSI模塊驅動,這些接口的磁盤裝置文件名都是 /dev/sd[a-p] 格式

因此,各裝置文件名與Linux核心偵測到的順序有關

磁盤結構

數據的寫入實際是在磁盤盤片上,磁盤盤面分為扇區與磁道兩種單位

  • 內側磁道周長短,可存儲的數據量少;外側磁道周長常,可存儲的數據量大

  • 每個磁道分為若干扇區(每個磁道的扇區編號都從0開始),不同磁道的扇區有相同的存儲容量,每個扇區的存儲容量為512Bytes或4KBytes

在對硬盤劃分扇區時,有兩種思路:

  • 固定磁道密度:每個磁道的扇區數相等
  • 分區磁道密度:外側磁道的扇區數比內側磁道多,內外磁道的扇區存儲容量相等

相對內側磁道,外側磁道的線速度快,數據存取速度更快

磁盤分區

分區:以柱面(cylinder)為單位的連續磁盤空間

  • 不同盤片的同一磁道組成一個柱面,柱面是文件系統的最小單位
  • 一跨多個磁道
分區目的
  • 數據安全性:每個分區的數據都是獨立的,需要對分區內的數據重整時,可將重要數據移動到其他分區

  • 系統的效率:利用分區,將數據集中在柱面的某個區段,有助于提高數據讀取的速度與效率

整個磁盤的第一個扇區(0磁道0扇區)存儲磁盤的重要信息,這些信息以MBR(Master Boot Record)格式保存。

但MBR格式的分區,最大的磁盤分區容量為2TB,因此新出現了GPT分區

MBR分區格式
整個盤片的第0扇區

存放兩個信息

  • 主要啟動記錄區(MBR):安裝開機管理程序,446Bytes

  • 分區表:記錄整顆磁盤的分區狀態,有64Bytes

    • 分區表項

      字節位內容及含義
      0引導標志。
      0X80H:活動分區
      0X00H:非活動分區。
      1,2,3本分區的起始磁頭號(第1字節)、扇區號(第二字節低6bit)、柱面號(第3字節高2位+第4字節8位)
      4分區類型符。
      0X00H:分區未用(即沒有指定)
      0X06H:FAT16基本分區
      0X0BH:FAT32基本分區;
      0X05H:擴展分區;
      0X07H:NTFS分區;
      0X0FH:(LBA模式)擴展分區(83H為Linux分區等)。
      5,6,7本分區的結束磁頭號、扇區號、柱面號。
      8,9,10,11邏輯起始扇區號 ,本分區之前已用扇區數。
      12,13,14,15本分區的總扇區數。
    • 本分區已占用扇區數第912Bytes,本分區總扇區數為第1316Bytes、

      232=4G2^{32}=4G232=4G 個扇區,若一個扇區512B,則最多可識別2TB磁盤空間

MBR分區類型

分區表所在的區塊僅有64Bytes,因此最多僅能記錄4個分區的信息,這四組分區稱為主要(Primary)分區或延伸(Extended)分區

假設硬盤有400個柱面,共分為4個分區,第四個分區的柱面號為301~400

  • 當操作系統為Linux時,分區編號為 /dev/sda1,/dev/sda2,/dev/sda3,/dev/sda4
  • 當操作系統為Windows時,分區為C,D,E,F

將數據寫入第四個分區時,相當于寫入到磁盤的301~400號柱面

延伸分區

延伸分區:將柱面相應的分區表項標記為延伸分區,對延伸分區指向的區塊繼續分區,可得到多個邏輯分區

在這里插入圖片描述

  • 延伸分區使用額外的扇區來記錄分區信息,延伸分區本身不能被格式化并寫入數據

    每個邏輯分區的前幾個扇區用來記錄分區信息——分區表項

  • 延展分區最多只有一個

  • 延展分區不能被格式化存取數據,主要分區與邏輯分區可被格式化,并進行數據存取

  • 邏輯分區數量隨操作系統而不同

上述邏輯分區,在LInux中的文件名為:

  • P1:/dev/sda1
  • P2:/dev/sda2
    • L1:/dev/sda5
    • L2:/dev/sda6
    • L3:/dev/sda7
    • L4:/dev/sda8
    • L5:/dev/sda9
MBR分區遷移

在這里插入圖片描述

圖一,同屬于延伸分區的邏輯分區可合并:,只需要將兩個邏輯分區刪除,然后將兩個舊邏輯分區的磁盤空間重新建立一個新的分區即可,并不影響其他邏輯分區

圖二,主分區與邏輯分區不可合并:需要將延伸分區內所有的邏輯分區全部破壞,再重新劃分延伸分區與邏輯分區

MBR分區的缺陷
  • 一個邏輯分區或主分區,最多記錄2TB的磁盤容量
    • 每個分區的容量很小,當總磁盤容量很大,則需要很多分區數
  • MBR僅有一個扇區塊,若被破壞,很難恢復
  • MBR分區的開機管理程序僅446Bytes,無法容納較多的程度代碼
GPT分區格式

扇區有512B和4KB,為兼容所有的磁盤,因此在定義扇區時,大多會使用邏輯區塊地址(Logical Block Address,LBA)

GPT將所有區塊以LBA規劃(512B),使用34個LBA區塊來記錄分區信息,整個磁盤的最后34個LBA也拿來作為備份

  • LBA0:同MBR的0扇區,446B記錄開機管理程序,在分區表記錄區內,放入特殊標志的分區,表示此磁盤采用GPT格式的分區

  • LBA1(GPT表頭記錄)

    記錄分區表本身的位置與大小,記錄備份用的GPT分區放置的位置,分區表的檢驗碼(CRC32)

  • LBA2-LBA33(記錄分區信息)

    每個LBA都可以記錄4筆分區記錄,默認情況下,32個LBA可容納128筆分區記錄

    每個LBA有512B,即每筆分區紀錄用到128B的空間,共64bit記錄開始/結束扇區號,因此,每個分區的最大容量限制為 264?512B=8ZB2^{64}*512B=8ZB264?512B=8ZB

配合操作系統內核的udev等方式,現在Linux對邏輯分區數量沒有限制

GPT分區沒有邏輯分區與延展分區的概念,每個分區都可用于格式化


并不是每個內核都支持GPT格式的磁盤分區

  • 磁盤管理工具,fdisk并不識別GPT,需要gdisk或parted指令
  • 開機管理程序,grub第一版不識別GPT,grub2之后才識別

總之,是否能夠讀寫GPT格式的分區與開機檢測程序有關

1.1.3 開機管理程序

開機管理程序是寫在主板上的固件(寫入到ROM的軟件程序),第一個被自動執行的程序

主機在加載硬件驅動方面的程序,主要有早期的BIOS與新的UEFI兩種機制

BIOS+MBR/GPT
  1. 在開機時,BIOS會被自動執行

  2. BIOS會分析計算機的存儲設備,訪問設定的系統盤(能夠開機的硬盤),系統盤的第一個扇區為MBR分區,放置開機管理程序(Boot loader)

    開機管理程序在操作系統安裝時便提供

    開機管理程序提供的功能:

    • 提供開機選項:對應多重引導功能,可以選擇不同的開機項

    • 載入核心文件:直接指向可開機的程序區段,將控制權轉交給操作系統

    若使用類似grub的開機管理程序,則需要額外分區除一個BIOS boot分區,在該分區內,放置引導過程所需的其他程序代碼

    • 轉交其他開機管理程序:若選擇多重引導,可能會將開機管理功能轉交給其他開機管理程序
多重引導

開機管理程序除安裝在MBR外,還可以安裝在每個分區的啟動扇區(boot sector)。

每個分區都有啟動分區,啟動分區中的開機管理程序 只能識別當前分區內的開機核心文件其他開機管理程序

開機管理程序 可直接指向或間接將管理權交給另一個管理程序

在這里插入圖片描述

如上圖,有兩個系統分區,因此,MBR的開機管理程序提供兩個選項

  • M1:直接加載Windows的核心程序
  • M2:將開機管理工作交給第二個分區的開機管理程序

當選擇M2選項時,整個開機管理工作就交給第二個分區的開機管理程序,由于該開機管理程序僅有一個開機選項,所以使用Linux的核心文件開機

最好先安裝Windows再安裝Linux

  • Windows安裝時,安裝程序會主動覆蓋掉MBR以及系統分區的啟動分區
  • Linux在安裝時,可以選擇將開機管理程序安裝在MBR或其他分區的啟動分區,LInux可以手動設置選項
UEFI BIOS+GPT

BIOS僅有16bit,難與現階段新的操作系統接軌

UEFI(Unified Extensible Firmware Interface)同一可擴展固件接口

加載所有的UEFI驅動程序后,系統會開啟類似操作系統的Shell環境

  • UEFI用于啟動操作系統之前的,硬件檢測、開機管理、軟件設定等目的
  • 加載完操作系統后,UEFI會將控制權移交給操作系統
  • 此外,UEFI為防止黑客在BIOS階段破壞系統,加入安全啟動機制(即將開機的操作系統必須要被UEFI驗證)
BIOSUEFI
語言匯編C
硬件資源控制中斷管理
不可變的內存存取
不可變的IO存取
使用驅動程序和協議
CPU運行環境16bitCPU保護模式
設備擴充方式通過IRQ連接直接加載驅動程序
第三方廠商支持可支持多平臺
圖形化支持
內建簡化操作系統前環境不支持支持

UEFI只需要加載驅動程序即可控制系統硬件,但并不能代替操作系統

  • 硬件資源的管理使用輪詢方式來管理,效率比較低

  • UEFI并不提供完整的快取功能,不能保證效率

\boot目錄的分區

基于GRUB引導程序的系統安裝中,BIOS boot分區用于存放GRUB(引導過程)第二階段的引導文件

第一階段:BIOS加載MBR分區(/dev/sda1)中的開機管理程序,該程序的主要目的是找到并加載第二階段的開機管理程序

  • ESP分區,FAT32格式的分區(被不同操作系統和UEFI固件兼容),存儲UEFI開機程序
  • 在ESP分區中,有grubx64.efi 文件,第一階段會從ESP分區被加載到內存執行

第二階段:BIOS boot分區,為引導過程提供更多的空間,來存放必要的引導文件,使引導程序能正確地找到并加載操作系統內核

為與Windows兼容,并提供其他第三方廠商所使用的UEFI應用程序的存儲空間,還必須格式化一個vfat的文件系統,作為UEFI分區(/dev/sda2

因此,鑒于上述兩個分區(BIOS boot分區與UEFI 分區),/boot目錄基本從 /dev/sda3 之后的分區開始

  • /boot 目錄通常用于存放與內核相關的文件,這些文件用于開機管理程序將控制權移交給內核后,用于操作系統內核的加載與初始化階段

1.1.4 分區與掛載

Linux內,數據與設備都是以文件形態呈現。

目錄樹結構以根目錄為主,然后向下呈分支狀的一種文件結構

在這里插入圖片描述

Linux系統通過目錄掛載,將文件系統與目錄樹結構結合

在這里插入圖片描述

掛載 :利用一個目錄當做進入點,當磁盤分區的數據放置在該目錄下——進入該目錄即可讀取該分區

  • 根目錄一定要掛載到分區下
  • 其他目錄可按用戶需求掛載到不同的分區

掛載點 :被掛載的目錄

根據用途區分析需要較大容量的目錄,以及讀寫較為頻繁的目錄,將這些重要的目錄分別獨立出來,不于根目錄放在一起

1.2 安裝

1.2.1 單Linux

規劃
  • 用途:練習

  • 虛擬機硬件配置:

    • CPU:X86還是ARM
    • 內存
    • 硬盤:/dev/vda 40GB
  • distribution:CentOS

    • 刻錄鏡像載體
  • 網卡:設置橋接

    • 確定IP與掩碼
  • 磁盤分區的規劃

    在Linux環境下,如果分配的磁盤未超過2TB,則默認采用MBR分區,所以為強制使用GPT分區,需要指定安裝參數

    在這里插入圖片描述

    • CentOS預設使用LVM方式管理文件系統
  • 開機管理程序:CentOS7.X使用grub2,需要安裝在MBR分區

安裝步驟
  1. 虛擬機硬件配置
  2. 鏡像制作
  3. 調整開機介質
  4. 選擇安裝模式、加入核心參數
  5. 安裝引導與軟件選擇
  6. 自定義系統盤分區
  7. 核心管理與網絡設定
  8. 安裝完成后的設置

0. 虛擬機硬件配置

在分配硬盤時,現在虛擬機的磁盤驅動器,大多采用qcow2這種虛擬磁盤格式,用多少記錄多少,與實際使用量有關

1. 鏡像制作

拷貝到DVD太慢,可通過dd或其他刻錄軟件,將ISO刻錄到USB設備上

# 假設你的 USB 裝置為 /dev/sdc ,而 ISO 檔名為 centos7.iso 的話:
# if=輸入文件 of=輸出路徑
[root@study ~]# dd if=centos7.iso of=/dev/sdc

2. 調整開機介質

  • 進入BIOS(DEL或F2),調整開機順序
  • 若是虛擬機,在Boot Option中調整開機順序

3. 選擇安裝模式、加入核心參數

  • 安裝模式

    在這里插入圖片描述

    • 正常安裝CentOS7的流程

    • 測試此光盤,在安裝CentOS7

    • 進入排錯模式,

      • 以基本圖形窗口安裝CentOS7(使用標準顯卡設定安裝流程)

      • 救援CentOS

      • 執行內存測試

        在這里插入圖片描述

        直至 esc 停止

      • 使用本機磁盤開機,不由移動介質開機

  • 加入核心參數,修改安裝程序

    強制使用GPT分區時,需要輸入安裝參數

    安裝模式為 Install CentOS 7

    Tab 鍵,讓光標跑到畫面最下方等到輸入額外的安裝參數

    在這里插入圖片描述

    在出現的畫面中,輸入 GPT分區的參數

4. 安裝引導與軟件選擇

  • 安裝引導略

  • 軟件選擇

    • 最小型安裝:只安裝內核與Shell

    • 含GUI的服務器:預打在GNOME

    • GNOME桌面環境:Linux常見的圖形接口

    • KDE Plasma Workspaces:另一套常見的圖形接口

5. 自定義系統盤分區

  1. 刪除殘留分區

    在這里插入圖片描述

  2. 第一個分區為 BIOS boot 分區

    在這里插入圖片描述

    分區類型:

    • 標準分區:/dev/sda1 類似的分區
    • LVM:傳統LVM直接給分區分配固定的容量,但可以彈性地增加/削減分區容量
    • LVM緊張供應:實際使用多少容量,才會從磁盤分配多少容量

    文件系統類型:

    • ext2/ext3/ext4:Linux早期使用的文件系統類型

      ext3/ext4多了日志記錄,便于復原。

      但磁盤容量越來越大,ext格式不太使用

    • swap:磁盤仿真內存,swap分區不會直接掛載到目錄樹

    • BIOS boot:GPT分區才會用到

    • xfs:適用于大容量的磁盤管理,目前常用

    • vfat:同時被Linux與Windows所支持的文件系統類型。

  3. /boot 分區

  4. //home/swap 分區

    使用LVM的管理方式

    在這里插入圖片描述

    在這里插入圖片描述

    在這里插入圖片描述

    /swap 內存置換區,當有數據被存放在內存,但不常被CPU取用,這些數據會被放入*/swap* 分區

6. 核心管理與網絡設定

核心管理:系統 下的 KDUMP ,當Linux系統因為核心問題導致宕機時,會將該宕機事件的內存內數據存儲

在這里插入圖片描述

網絡設定:設置靜態IP

7. 安裝完成后的設置

最好設置一個普通用戶為管理員,不要直接使用root用戶


筆記本加入了非常多的省電機制或其他硬件的管理機制,

當使用適用于一般桌面計算機的鏡像安裝Linux時,不一定適用于筆記本電腦

nofb apm=off acpi=off pci=noacpi

apm是早期的電源管理模塊,acpi是近期的電源管理模塊,這兩者都需要特定的硬件支持,但筆記本電腦可能不適用這些機制

nofb:取消顯卡的緩存偵測,筆記本的顯卡通常是核顯,Linux安裝程序可能不會偵測該顯卡

1.2.2 Linux與Windows多重引導

規劃

BIOS+MBR分區,CentOS 7與Windows 7,同時掛載一個共享的數據盤

Windows 8.1之前的版本,UEFI BIOS+GPT分區才能開機

在沒有UEFI環境下,無法使用GPT分區安裝Windows

  • 只需要保證系統盤含UEFI分區

先安裝Linux再安裝Windows,再通過修改系統配置文件達成多重引導

在這里插入圖片描述

為強制各系統的BIOS位于指定分區,在Linux安裝前,就需要先將分區劃分

安裝步驟
  1. 分區與安裝Linux
  2. 安裝Windows
  3. 救援MBR內的開機管理程序
  4. 設定多重引導選項

  • Windows環境最好隔離Linux的系統盤(根目錄與swap分區)
  • Linux不可刪除,因為grub開機管理程序會讀取 /boot目錄下的內容,如果Linux移除,則無法識別到Windows的開機管理程序

1. 安裝Linux

開機后,在開始安裝前

在這里插入圖片描述

按鍵 CTRL+alt+F2 進入安裝過程的shell環境

[anaconda root@localhost /]# parted /dev/vda mklabel msdos # 建立 MBR 分區
[anaconda root@localhost /]# parted /dev/vda mkpart primary 1M 2G # 建立 /boot
[anaconda root@localhost /]# parted /dev/vda mkpart primary 2G 52G # 建立 /
[anaconda root@localhost /]# parted /dev/vda mkpart primary 52G 152G # 建立 C
[anaconda root@localhost /]# parted /dev/vda mkpart extended 152G 100%# 建立延伸分區
[anaconda root@localhost /]# parted /dev/vda mkpart logical 152G 100% # 建立邏輯分區
[anaconda root@localhost /]# parted /dev/vda print # 顯示分區結果

在這里插入圖片描述

按鍵 CTRL+alt+F2 回到原本的安裝流程,再一步步到分區掛載,再重新格式化

在這里插入圖片描述

2. 安裝Windows

重啟機器,進入Windows的安裝過程,注意選擇規劃的系統分區

在這里插入圖片描述

3. 救援Linux的開機管理程序

后安裝的Windows會將MBR分區占用,因此,需要救援回Linux的開機管理程序

救援Linux的開機管理程序

放入安裝介質,開機后,選擇救援模式 Troubleshooting -> Rescue a CentOS system,等待開機后,選擇 Continue

在這里插入圖片描述

如果有Linux,則會告訴你,原本的系統放置與 /mnt/sysimage

在這里插入圖片描述

輸入指令,將Linux的開機管理程序重新裝回MBR分區

sh-4.2# chroot /mnt/sysimage
sh-4.2# grub2-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.
sh-4.2# exit
sh-4.2# reboot

4. 修改開機選項

開機進入Linux后,切換到root用戶

[root@study ~]# vim /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 7" {
set root='(hd0,3)'
chainloader +1
}
[root@study ~]# vim /etc/default/grub
GRUB_TIMEOUT=30 # 將 5 秒改成 30 秒長一些
...
[root@study ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

在這里插入圖片描述

2. 簡單使用

2.1 登入與關鍵字注解

2.1.1 交互界面

圖形化窗口

在這里插入圖片描述

  • 3:連接目錄
  • 4:沒有權限進入的目錄

重啟圖形化界面

在圖形化界面,重啟快捷鍵 Alt+Ctrl+Backspace

圖形化窗口與文本模式切換

文本模式:終端,terminal,console

快捷鍵 Ctrl+Alt+[F1]~[F6]

  • 根據 [F1]~[F6] ,依次命名為 tty1~tty6
  • 開機完成后,默認系統只會提供 tty環境,首選的開機窗口為tty1
  • 當切換時,才會產生額外的ttyx環境

終端啟動圖形化窗口

指令:startx

  • 僅能啟動一個X Window
  • 已安裝 X Window System,并且X server已啟動
  • 有窗口管理程序,如 GNOME/KDE等

將圖形化窗口設為啟動默認:將 graphical.target 服務設為默認

CentOS 7開始使用systemd這種服務管理方式,之前是SystemV

終端登錄與注銷
CentOS Linux 7 (Core)
Kernel 3.10.0-229.el7.x86_64 on an x86_64
study login: dmtsai
Password: <==這里輸入你的密碼
Last login: Fri May 29 11:55:05 on tty1 <==上次登入的情況
[dmtsai@study ~]$ _ <==光標閃爍,等待你的指令輸入
  • CentOS Linux 7 (Core)

    Linux distribution名稱與版本

  • Kernel 3.10.0-229.el7.x86_64 on an x86_64

    內核版本

  • study login: dmtsai

    [主機名] login: [用戶名]

    study.centos.vbird 主機名只顯示第一個小數點之前的字母

  • [dmtsai@study ~]$

    [當前用戶名]@[主機名] [當前目錄] $

root用戶的提示符為 #,一般用戶的提示符為 $

注銷 exit

2.1.2 指令與指令執行

指令格式
command 		[-options]/[--options] parameter1 parameter2 ...
指令/可執行文件	選項 					參數(1) 		參數(2)

指令:理解為可執行的腳本名

只有在環境變量里的,可以在任何地方調用

其余指令需要在特定的目錄下才可執行

  • 若指令過程,使用反斜杠(\)換行

  • 語系支持:默認情況下,不支持以中文編碼輸出,需要將語系改為英文,

    [dmtsai@study ~]$ date
    鈭? 5??29 14:24:36 CST 2015 # 純文本界面下,無法顯示中文字,所以前面是亂碼1. 顯示目前所支持的語系
    [dmtsai@study ~]$ locale
    LANG=zh_TW.utf8 # 語言語系的輸出
    LC_CTYPE="zh_TW.utf8" # 底下為許多信息的輸出使用的特別語系
    LC_NUMERIC=zh_TW.UTF-8
    LC_TIME=zh_TW.UTF-8 # 時間方面的語系數據
    LC_COLLATE="zh_TW.utf8"2. 修改語系成為英文語系
    [dmtsai@study ~]$ LANG=en_US.utf8
    [dmtsai@study ~]$ export LC_ALL=en_US.utf8
    # LANG 只與輸出訊息有關,若需要更改其他不同的信息,要同步更新 LC_ALL 才行![dmtsai@study ~]$ locale
    LANG=en_US.utf8
    LC_CTYPE="en_US.utf8"
    LC_NUMERIC="en_US.utf8"
    ....中間省略....
    LC_ALL=en_US.utf8
    # 再次確認一下,結果出現,確實是en_US.utf8 這個英文語系!
    
常見指令
  • 日期:date
  • 日歷:cal
  • 計算器:bc

date

date #顯示系統時間
date +%Y/%m/%d
[]/[]/[]
date +%H:%M
[]:[]

cal

[dmtsai@study ~]$ cal [month] [year]
cal [] # 顯示整年月歷
cal # 顯示本月日歷

bc

輸入bc,會打印版本信息,然后進入bc工作環境(類似python)

[dmtsai@study ~]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.scale=3 # bc預設只輸出整數部分,指定小數點位數
1/3
.333
+ 加法
- 減法
* 乘法
/ 除法
^ 指數
% 取余
指令執行模式
  • 該指令會直接顯示結果,然后回到命令提示字符等待下一個指令的輸入;
  • 進入到該指令的工作環境,直到結束該指令 quit ,才回到命令提示字符的環境。
常用快捷鍵

Tab

  • 在一串指令的第一個字的后面,則為 命令補全
  • 在一串指令的第二個字以后時,則為『文件補齊』
  • 若安裝 bash-completion 軟件,則在某些指令后面使用[tab] 按鍵時,可以進行『選項/參數的補齊』

Ctrl+C

  • 指令中斷

Ctrl+d

  • 表示鍵盤輸入結束—— EOF
  • 相當于輸入 exit

shift+Page Upshift+Page Down

  • 上下翻頁

2.1.3 指令注釋

理解在什么情況下,應該使用哪方面的指令

help選項
[指令] -h/--help

局限:

  • 必須已知 [指令]
  • 不適用于查詢文件 格式
man page
man [關鍵字]

更為詳細的[關鍵字]注解

這些man page的輸出數據通常放在 /usr/share/man 這個目錄下

也可以修改 /etc/man_db.conf 來重定向該目錄(一些distribution中為 man.confmanpath.confman.config

man的輸出
輸出項說明
NAME簡短的指令、數據名稱說明
SYNOPSIS簡短的指令下達語法(syntax)簡介
DESCRIPTION較為完整的說明
OPTIONS針對 SYNOPSIS部分,有列舉的所有可用的選項說明
COMMANDS當此程序(軟件)在執行時,此程序(軟件)可識別指令
FILES此程序或數據,使用或參考或連結的某些文件
SEE ALSO與該指令相關的其他指令或說明
EXAMPLE示例
  • 翻頁:

    • 空格鍵Page Down 向下翻頁
    • Page Up 向上翻頁
    • Home 首頁
    • End 末頁
  • 關鍵字搜尋:

    • /[關鍵字] 向后搜索[關鍵字]
    • ?[關鍵字] 向前搜索 [關鍵字]
    • n/N :n表示下一個搜索結果,N表示上一個搜索結果
  • q 離開man環境

關鍵字的精確匹配

man -f [關鍵字] :會搜索與[關鍵字]完全匹配的指令名稱

相當于 whatis [關鍵字]

如:

[dmtsai@study ~]$ man -f man
man (1) - an interface to the on-line reference manuals
man (1p) - display system documentation
man (7) - macros to format man pages
左邊部分右邊部分
指令(文件)以及該指令的指令類型該指令的簡短說明
  • 顯示順序

    man -f [關鍵字] 有多個輸出,但 man [關鍵字] 會輸出在 /etc/man_db.conf 配置文件中,最先搜索到的輸出

關鍵字的模糊搜索

man -k [關鍵字]:只要man page中含 [關鍵字] 就會輸出

相當于 apropos [關鍵字]

在使用 whatisapropos 時,需要建立 whatis 數據庫,需要再root的身份下執行 mandb 指令

關鍵字類型

man [關鍵字] 可以輸出關鍵字類型

man date 會輸出 date(1) 括號中的 1 即表示指令類型

關鍵字編號關鍵字類型
1用戶在Shell環境中可操作的指令或可執行文件
2系統內核可調用的函數或工具
3一些常用的額函數與函數庫,大多為C式函數庫(libc)
4設備文件的說明,在 /dev 下的文件
5配置文件或某些文件的格式刷
6游戲
7管理或協議等,如Linux文件系統,網絡協議,ASCII code等號
8系統管理員可用的管理指令
9跟Kernel有關的文件
info page

info page將輸出拆分為片段 ,每個片段編為一個 page,page間有類似超鏈接的跳轉。每個獨立的頁面被稱為一個節點(node)

支持info page的指令/數據/關鍵字,其輸出數據放置在 /usr/share/info/

[dmtsai@study ~]$ info info
File: info.info, Node: Top, Next: Getting Started, Up: (dir)
  • File:當前輸出的page來源文件——info.info
  • Node:當前頁面屬于Top節點
  • Next:下一節點,名為 Getting Started
  • Up:返回上一層
  • Prev:前一個節點
省略
* Menu:
* Getting Started:: Getting started using an Info reader.
* Advanced:: Advanced Info commands.
* Expert Info:: Info commands for experts.
* Index:: An index of topics, commands, and variables.
--zz-Info: (info.info.gz)Top, 52 lines --Bot------------------------------------------

在這里插入圖片描述

  • 在Menu中,可見有4個節點

    通過將光標移動到對應行,再 Enter ,便可跳轉到相應Page

  • Tab 鍵,在各超鏈接間移動

info page中的快捷鍵

Page切換快捷鍵:N(下一節點),P(上一結點),U(上一層節點)

info page 中,按 h 能提供一些基本按鍵功能的介紹

在這里插入圖片描述

doc

/usr/share/doc/ 目錄下,會存放一些軟件的說明文檔

這些軟件如何使用,原理說明,未來規劃等

2.2 文本編輯器nano

nano [文件名].txt

快捷鍵

^+[按鍵] 表示 CTRL,M+[按鍵] 表示 ALT

  • CTRL+G:幫助信息
  • [ctrl]-X:離開naon 軟件,若有修改過文件會提示是否需要儲存喔!
  • [ctrl]-O:儲存文件,若你有權限的話就能夠儲存文件了;
  • [ctrl]-R:從其他文件讀入資料,可以將某個文件的內容貼在本文件中;
  • [ctrl]-W:搜尋字符串,這個也是很有幫助的指令喔!
  • [ctrl]-C:說明目前光標所在處的行數與列數等信息;
  • [ctrl]-_:可以直接輸入行號,讓光標快速移動到該行;
  • [alt]-Y:校正語法功能開啟或關閉(單擊開、再單擊關)
  • [alt]-M:可以支持鼠標來移動光標的功能

2.3 關機

  1. 確定無其他在線用戶

    who 指令可查看本機在線的用戶

    netstat -a 查看網絡的聯機狀態

    ps -aux 查看啟動的進程

  2. 數據同步到硬盤

    切換到root用戶,一般用戶僅能更新當前硬盤的數據,root用戶可以更新整個系統的數據

    su -

    sync

  3. 關機/重啟

    關機:

    • shutdown
    • halt(系統停止,屏幕可能會保留系統已經停止的訊息!)
    • poweroff (系統關機,所以沒有提供額外的電力,屏幕空白)

    重啟:reboot

shutdown

[root@study ~]# /sbin/shutdown [-krhc] [時間] [警告訊息]
選項與參數:
-k : 不要真的關機,只是發送警告訊息出去!
-r : 在將系統的服務停掉之后就重新啟動(常用)
-h : 將系統的服務停掉后,立即關機。 (常用)
-c : 取消已經在進行的 shutdown 指令內容。
時間 : 指定系統關機的時間!時間的范例底下會說明。若沒有這個項目,則默認 1 分鐘后自動進行。
范例:
[root@study ~]# /sbin/shutdown -h 10 'I will shutdown after 10 mins'
Broadcast message from root@study.centos.vbird (Tue 2015-06-02 10:51:34 CST):
I will shutdown after 10 mins
The system is going down for power-off at Tue 2015-06-02 11:01:34 CST![root@study ~]# shutdown -h now
立刻關機,其中 now 相當于時間為 0 的狀態
[root@study ~]# shutdown -h 20:25
系統在今天的 20:25 分會關機,若在21:25 才下達此指令,則隔天才關機
[root@study ~]# shutdown -h +10
系統再過十分鐘后自動關機
[root@study ~]# shutdown -r now
系統立刻重新啟動
  • shutdown -c 取消關機計劃

實際上,調用管理工具systemctl關機

[root@study ~]# systemctl [指令]
指令項目包括如下:
halt 進入系統停止的模式,屏幕可能會保留一些訊息,這與你的電源管理模式有關
poweroff 進入系統關機模式,直接關機沒有提供電力喔!
reboot 直接重新啟動
suspend 進入休眠模式
[root@study ~]# systemctl reboot # 系統重新啟動
[root@study ~]# systemctl poweroff # 系統關機

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88263.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88263.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從視頻數據到數字孿生:如何構建虛擬與現實的橋梁?

概述 視頻數據與三維場景融合渲染技術通過將動態視頻與靜態三維模型結合&#xff0c;利用GPU加速、WebGL渲染、數字孿生等技術&#xff0c;實現虛擬與現實的交互式融合。該技術廣泛應用于智慧城市、工業監控、虛擬現實、游戲特效等領域&#xff0c;能夠提升場景的直觀性和用戶沉…

【筆記】開源 AI Agent 項目 V1 版本 [新版] 部署 日志

kortix-ai/suna at v1 一、最新版本號 V1 二、部署截圖 本地開發環境仍然依賴于 Poetry 環境&#xff1a; &#xff08;Python>3.11,<3.13&#xff09; 創建本地 Poetry 虛擬環境 Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自…

NumPy-梯度與導數計算詳解

NumPy-梯度與導數計算詳解一、梯度與導數的基本概念1. 導數的定義2. 梯度的定義二、NumPy中的梯度計算函數&#xff1a;np.gradient()1. 函數語法2. 一維數組的梯度計算3. 多維數組的梯度計算三、基于梯度的導數近似方法1. 前向差分2. 中心差分四、實際應用場景1. 函數優化2. 數…

Redis架構安全

先學習&#xff1a;Redis架構簡介-CSDN博客 Redis壓測 Redis一般應用于高并發的場景&#xff0c;所以一定要對Redis的性能做壓測。 Redis提供了壓測腳本redis-benchmark&#xff0c;可以對Redis進行快速的基準測試。 # 20個線程&#xff0c;100W個請求&#xff0c;測試redi…

自動化Trae Apollo參數解釋的批量獲取

自動化Trae Apollo參數解釋的批量獲取一、背景介紹二、設計思路三、操作步驟1. 環境準備2. 獲取界面坐標3. 定位關鍵元素4. 執行自動化查詢5. 獲取結果四、完整代碼五、擴展應用一、背景介紹 在自動駕駛開發中&#xff0c;百度Apollo平臺提供了大量參數用于調整系統行為。Trae…

數學模型:十大距離

十大距離 文章目錄十大距離定義1. 歐氏距離&#xff08;Euclidean Distance&#xff09;2. 曼哈頓距離&#xff08;Manhattan Distance&#xff09;3. 切比雪夫距離&#xff08;Chebyshev Distance&#xff09;4. 閔可夫斯基距離&#xff08;Minkowski Distance&#xff09;5. …

流水線(Jenkins)打包拉取依賴的時候提示無法拉取,需要登錄私倉的解決辦法

在日常工作中&#xff0c;遇到了Jenkins拉取部門內部組件庫失敗的情況&#xff0c;原因是組件庫后面放到了阿里云私倉&#xff0c;并且是沒有公開的&#xff0c;所以就會有如下提示的&#xff0c;一開始我實在.npmrc文件寫死阿里云提供的接入token&#xff0c;后面發現可能是因…

操作系統王道考研習題

1.1.4本節習題精選 一、單項選擇題 01&#xff0e;操作系統是對(&#xff09;進行管理的軟件。 A.軟件 B.硬件 C.計算機資源 D.應用程序 01.c 操作系統管理計算機的硬件和軟件資源&#xff0c;這些資源統稱為計算機資源。注意&#xff0c;操作系統不僅管理處理機、存儲器等硬件…

C語言extern的用法(非常詳細,通俗易懂)

以往我們都是將所有的代碼寫到一個源文件里面&#xff0c;對于小程序&#xff0c;代碼不過幾百行&#xff0c;這或許無可厚非&#xff0c;但當程序膨脹代碼到幾千行甚至上萬行后&#xff0c;就應該考慮將代碼分散到多個文件中&#xff0c;否則代碼的閱讀和維護將成為一件痛苦的…

Git【開源分布式版本控制工具】安裝-配置-常用指令-Git遠程倉庫-IDEA使用Git

參考博客&#xff1a;Git&#xff08;分布式版本控制工具&#xff09;_為什么嗶哩嗶哩有些視頻沒有字幕-CSDN博客 Git就是一個類似于百度云盤的倉庫&#xff1b;重點是要掌握使用idea操作Git&#xff0c;企業用的最多&#xff0c;一般不會去使用命令 Git通過不斷階段保存文件…

JavaScript數組鍵值去重方法

使用 filter 和 Map 根據鍵值去重我來詳細解釋方法2&#xff0c;這是一種高效且簡潔的數組去重方法&#xff0c;特別適合根據對象中的某個鍵值進行去重操作。完整代碼function uniqueByKey(arr, key) {return [...new Map(arr.map(item > [item[key], item])).values()]; }分…

【機器學習筆記Ⅰ】9 特征縮放

特征縮放&#xff08;Feature Scaling&#xff09;詳解 特征縮放是機器學習數據預處理的關鍵步驟&#xff0c;旨在將不同特征的數值范圍統一到相近的尺度&#xff0c;從而加速模型訓練、提升性能并避免某些特征主導模型。1. 為什么需要特征縮放&#xff1f; (1) 問題背景 量綱不…

10.9 大模型訓練數據優化實戰:3步讓準確率從68%飆升至79%

大模型訓練過程分析與數據優化 一、訓練過程關鍵指標分析 (插入mermaid流程圖:訓練過程監控與優化閉環) #mermaid-svg-Gni031LkHA93fQYM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Gni031LkHA93fQYM .erro…

深度學習模型在C++平臺的部署

一、概述深度學習模型能夠在各種生產場景中發揮重要的作用&#xff0c;而深度學習模型往往在Python環境下完成訓練&#xff0c;因而訓練好的模型如何在生產環境下實現穩定可靠的部署&#xff0c;便是一個重要內容。C開發平臺廣泛存在于各種復雜的生產環境&#xff0c;隨著業務效…

若以部署在linux,nginx反向代理,登錄404,刷新404問題

history模式在router下面的index.js文件的最下面history: createWebHistory(import.meta.env.VITE_APP_CONTEXT_PATH),這兩個配置文件都加上然后nginx里面的配置是這個位置按照實際情況&#xff0c;我的是用docker掛載的&#xff0c;所以在/usr/share/nginx/html/lw-clothing為…

SQL Server通過存儲過程實現HTML頁面生成

引言在現代企業應用中&#xff0c;數據可視化是提升決策效率的關鍵。SQL Server作為核心數據庫管理系統&#xff0c;不僅處理數據存儲和查詢&#xff0c;還具備強大的擴展能力。通過存儲過程直接生成HTML頁面&#xff0c;企業能減少對中間層&#xff08;如Web服務器或應用程序&…

qt繪制餅狀圖并實現點擊即放大點擊部分

做得比較low #ifndef TEST_POWER_H #define TEST_POWER_H#include <QWidget> #include <QtMath> #include <QPainter> #include <QPushButton> #include <QVector> #include <cmath>namespace Ui { class test_power; } struct PieData {Q…

HashMap的put、get方法詳解(附源碼)

put方法 HashMap 只提供了 put 用于添加元素&#xff0c;putVal 方法只是給 put 方法調用的一個方法&#xff0c;并沒有提供給用戶使用。 對 putVal 方法添加元素的分析如下&#xff1a;如果定位到的數組位置沒有元素 就直接插入。如果定位到的數組位置有元素就和要插入的 key …

雙立柱式帶鋸床cad【1張總圖】+設計說明書+絳重

雙立柱式帶鋸床 摘 要 隨著機械制造技術的進步&#xff0c;制造業對于切割設備的精度、效率和穩定性要求越來越高。雙立柱式帶鋸床作為一種重要的切割設備&#xff0c;必須能夠滿足工業生產對于高精度、高效率的需求。 雙立柱式帶鋸床是一種重要的工業切割設備&#xff0c;其結…

在線JS解密加密配合ECC保護

在線JS解密加密配合ECC保護 1. ECC加密簡介 定義 ECC&#xff08;Elliptic Curve Cryptography&#xff09;是一種基于橢圓曲線數學的公鑰加密技術&#xff0c;利用橢圓曲線離散對數問題&#xff08;ECDLP&#xff09;實現高安全性。 背景 1985年&#xff1a;Koblitz&#xff0…