Linux筆記-1

概述

簡介

  1. Linux是現在服務器上最常用的操作系統(OS - Operating system) - 所謂的操作系統本質上也是一個軟件,是一個可以運行其他軟件的容器
  2. 如果一臺服務器,沒有安裝操作系統,此時稱之為裸機。裸機可以使用,在使用的時候需要使用機器語言或者匯編語言;為了提高可讀性,采用了操作系統,可以才能使用通用的編程語言操作
  3. 經常使用的操作系統:Windows、Linux、Unix、Harmony、Mac、Android、IOS等
  4. Linux官網:www.linux.org
  5. Linux之父:Linus(林納斯),還開發了Git - 名言:Talk is cheap, show me your code!

發展歷程

  1. 1970年左右,貝爾實驗室(曾經是全球最頂級的實驗室之一,曾經也是在通信領域最頂級的實驗室)在肯.湯普森(Unix之父)的主導和帶領下,試圖開發一套分時操作系統Unix,Unix是利用B語言開發的 - Unix也是眾多分時操作系統的鼻祖
  2. 由于B語言無法直接解釋為機器碼,所以導致Unix的效率一直不高。后來,肯.湯普森和丹尼斯.里奇改進了B語言 - new B語言,改名為了C語言,利用新的語言重新設計了Unix系統,大大的提升了操作系統的執行效率。到此,Unix正式面世
  3. 各大公司,紛紛針對Unix系統進行了改進和適配,都產生了各自公司的Unix系統(Unix和硬件的耦合度非常高):IBM-AIX、HP-UX等
  4. 荷蘭阿姆斯特丹大學的教授xxx(《計算機網絡》的一書的作者)為了教學安排,仿照Unix設計了一個擁有教學的操作系統MINIX(mini unix)。由于MINIX系統是用于教學操作,本身存在非常多的問題
  5. Linus在上大學期間,學習MINIX系統的時候,產生了非常濃厚的興趣,試圖解決MINIX系統存在的問題(打補丁),打補丁的過程中,發現代碼量已經超過了一萬行,到此,Linus決定放棄MINIX,試圖開發獨立的操作系統 - 1991年6月份
  6. 同年9月份,Linux系統面世 - Linux0.01版本
  7. 1991年底,Linus將Linux系統公布并開源,此后各個機構和組織都針對Linux進行了不同程度的開發,也因此Linux系統是20世紀最偉大的發明之一

發行版

  1. Red Hat系列(紅帽系列 - 紅帽認證)
    1. RHEL(Red Hat Enterprise Linux):Red Hat公司(2018年被IBM收購)推出的開源的收費版的Linux系統,也是目前最穩定的Linux系統,收費不菲,不面向個人用戶
    2. Fedora:Fedora社區維持,紅帽公司贊助的免費版本。紅帽公司將最新版的系統發布到Fedora上,免費公開給用戶使用,每6個月進行一次強制更新
    3. CentOS:Centos社區維持,將RHEL中的付費部分去掉,剩余的部分開源,就是Centos系統。Centos已經被紅帽收購,也因此Centos前后發生了較大的變化:Centos8作為分水嶺,CentOS8及以前的版本更新穩定,Centos8以后的版本更名為Centos Steam,也是每6個月已更新,可以認為Centos Stream是另一個版本的Fedora
    4. Rockey Linux(巖石系列):其實就是原來的Centos,開源、免費、穩定
  2. Debian系列
    1. Debian:Debian社區維護,開源、免費。分為穩定版、不穩定版和測試版
    2. Ubuntu:以桌面應用為主的Linux系統,相對其他的Linux系統,Ubuntu提供了更友好的界面操作
  3. 國產Linux
    1. Deepin(深度):基于Debian開發,提供個人版和企業版,提供了較多的應用,并且兼容安卓應用
    2. KylinOS(麒麟):國防科技大學基于Ubuntu研發,更多的應用于軍工領域
    3. UOS(統信):以Deepin系統為基礎做的二次開發,跟為個人版、家庭版、企業版和專業版,更多的應用于政府領域
  4. SUSE系統
    1. SLES:德國SUSE公司開發的商用版Linux系統,也號稱是最華麗的Linux系統,銀行領域偏多
    2. Open SUSE:類似于RHEL和Centos的關系

目錄結構

  1. 在Linux中,一切皆文件

  2. 在Linux中,根路徑是/。路徑分為絕對路徑和相對路徑

    1. 絕對路徑:以根路徑為起始路徑,例如:/var/lib/log
    2. 相對路徑:不以根路徑為起始路徑,例如tmplib/log
      1. .:當前路徑。lib/log./lib/log表示當前路徑下的lib目錄下有一個log
      2. ..:上一層路徑。../lib表示返回上一層目錄,然后在上一層中尋找lib。
    3. 實際開發中,相對路徑使用偏多
  3. 目錄結構

    外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    1. bin:binary的縮寫,存放的是Linux常用的指令
    2. boot:Linux用于存放系統引導文件
    3. dev:device的縮寫,用于管理Linux的設備文件
    4. etc:存放系統環境配置和環境變量,不同于Windows,Linux中環境變量也是在文件中配置
    5. home:其他用戶的家路徑。Linux本身是一個多用戶操作系統,允許創建多個用戶,其中超級用戶是root,除此之外的其他用戶的根路徑都是在home下。例如創建了一個tom用戶,那么此時就會產生一個/home/tom用于存放tom用戶的數據
    6. lib和lib64:library的縮寫,存放的是Linux的系統文件
    7. media:臨時掛在外在媒介
    8. root:root用戶的數據目錄
    9. tmp:臨時目錄,系統運行產生的緩存和日志都是在tmp目錄下,當系統磁盤空間不足時,會自動清理tmp目錄下的文件,所以自己的文件一定不能放在tmp下!
    10. var:軟件運行產生的日志數據會存在這個路徑下
    11. opt:operation的縮寫,Linux系統提供的,希望用戶在此進行操作的目錄

vi和vim

  1. vi是Linux提供的用于編輯文件的命令,但是沒有格式和高亮顯示

  2. vim的功能和vi一致,只是提供了高亮顯示

  3. 需要注意:Linux中默認內置了vi命令,vim需要安裝

  4. 安裝vim

    yum -y install vim
    
  5. 存在三種模式:一般模式、編輯模式和指令模式

  6. vi或者vim一個文件的時候,默認進入一般模式,在這種模式下,無法對數據進行修改或者插入

  7. 如果需要對數據進行修改或者插入,那么進入編輯模式

  8. 案例

    1. 編輯文件

      # 切換到opt下
      cd /opt
      # 創建空文件
      # 命令格式:touch 文件名
      touch a
      # 編輯文件
      # 命令格式:vim 文件名
      # 或者:vi 文件名
      vim a
      
    2. 進入編輯模式:按i, I, o, O, a, A, r, R, Insert

    3. 退出編輯模式:按esc,默認進入的是一般模式

    4. 進入命令模式:輸入:

      參數解釋
      wwrite的縮寫,表示寫入/保存
      qquit的縮寫,表示退出
      !表示強制執行
  9. 一般模式操作

    操作解釋
    yy復制當前一行數據
    p粘貼數據
    y數字y例如y3y,表示復制3行
    dd刪除一行
    d數字d例如d3d,表示刪除3行
    u撤銷上一步
    x向后刪除一個字母,等價于del
    X向前刪除一個字母,等價于Backspace
    yw復制一個單詞
    dw刪除一個單詞
    shift+$挪到行尾
    shift+^挪到行首
    shift+g挪到頁尾
    數字+shift+g挪到指定行,例如3+shift+g。如果需要挪到頁頭,那么就是1+shift+g
  10. 命令模式操作

    參數解釋
    :set nu顯示行號
    :set nonu關閉行號
    /單詞 或者 ?單詞查找單詞 1. n向下尋找 2. N向上尋找
    :noh關閉高亮

常用命令

幫助命令

  1. man:獲取幫助信息

    # 命令格式
    man 命令/配置文件
    # 獲取cd命令的幫助信息
    man cd
    
    字段解釋
    NAME命令的名稱和單行描述
    BASH BUILTID COMMANDS命令之后可以添加的參數
  2. help:獲得shell內置命令的幫助信息

    # 命令
    help 命令
    # 獲得cd命令的幫助信息
    help cd
    
  3. whatis:確定這個命令是干什么的

    # 命令格式
    whatis 命令
    

目錄文件類

  1. pwd:print working directory,查看當前所在的絕對路徑

  2. ls:list(列出)的縮寫

    ls [參數] [路徑]
    
    1. 案例

      # 查看當前路徑下所有的文件和目錄
      ls
      # ls 路徑
      # 表示查看指定路徑下所有的子文件和子目錄,不包含隱藏文件
      # 在Linux中,.開頭的文件是隱藏文件,默認不被ls發現
      ls /var
      # ls -a [路徑]
      # -a是all的縮寫,表示所有,因此這個命令表示查看指定路徑下的所有子文件和子目錄,包含隱藏文件
      ls -a
      ls -a /root
      # ls -l [路徑]
      # -l是list的縮寫,ls -l表示列出指定路徑下所有子文件和子目錄的詳細信息
      ls -l /var
      # drwxr-xr-x.  2      root   root             19                Feb 27 00:28   account
      # 文件類型和權限  鏈接數  所有者  所有者所在的用戶組   文件大小,單位是字節 文件的修改日期    文件名
      # -開頭表示這是個文件,d開頭表示這是個目錄,l開頭表示這是個軟鏈接(可以理解為Windows中的快捷方式)
      # ls -l可以縮寫為ll
      
    2. 權限解釋

      文件目錄
      r - read可以被讀取可以查看這個目錄下的子文件和子目錄
      w - write可以被修改對這個目錄下的子目錄和子文件進行創建、刪除、重命名、復制操作
      x可執行,只要這個文件能被打開、能被修改等,就算是可以被執行這個目錄可以被打開
    3. 在Linux中,一個文件能否被看到,由它的父目錄的權限決定

    4. 權限每三位一組,決定用戶、用戶組和其他用戶的權限

  3. cd:change directory,切換目錄

    cd [參數] 路徑
    #  回到上一層目錄
    cd ..
    # 回到上一次所在的路徑
    cd -
    # 回到當前用戶所在的用戶數據目錄
    # 如果當前是tom用戶,對應的數據目錄就是/home/tom
    # 如果當前是root用戶,對應的數據目錄就是/root
    cd ~
    
  4. mkdir:make directory,創建目錄

    # 創建空目錄
    mkdir test
    # -p:表示創建多層目錄
    mkdir -p bigdata/a2312
    
  5. rmdir:remove directory,只能刪除空目錄

    rmdir bigdata/a2312/
    
  6. rm:remove,移除文件/目錄

    # 刪除a文件
    rm a
    # -r,recursive(遞歸)的縮寫,遞歸刪除
    mkdir a
    rm -r a
    # -f,force(強制)的縮寫
    mkdir -p test/bigdata/a2312
    rm -rf test/bigdata/a2312
    # -v,verbose,顯示刪除的詳細過程
    mkdir -p test/bigdata/a2312
    rm -rfv test/bigdata/a2312
    

    溫馨提示:在Linux中慎重刪除文件/目錄,因為Linux沒有回收站!!!刪除就無法恢復!!!

  7. touch:創建空文件

  8. cp:copy的縮寫,復制文件或者目錄

    # 格式
    cp [參數] 原文件 目的地
    # 復制文件
    cp /root/original-ks.cfg /opt
    # 在復制文件的時候,如果發現目的地中有同名文件,會詢問是否覆蓋
    # 復制的時候修改文件名
    cp /root/original-ks.cfg /opt/test.cfg
    # 復制的時候,如果有同名文件,就強制覆蓋
    \cp /root/original-ks.cfg /opt
    # cp如果要復制目錄,要求是空目錄
    # -r,表示遞歸復制。如果目錄非空,需要使用-r
    cp -r /var/log ./ 
    
  9. mv:move的縮寫,剪切或者重命名文件/目錄

    # 重命名
    mv test.cfg a.cfg
    # 剪切
    mv a.cfg /root
    # 剪切并重命名
    mv /root/a.cfg /opt/b.cfg
    
  10. head:查看文件頭部的內容,默認是10行數據

    # 查看頭部數據,默認10行
    head test
    # 查看指定行數
    head -n 3 test
    
  11. tail:查看文件尾部的內容,默認是10行數據

    # 查看尾部數據,默認10行
    tail test
    # 查看指定行數
    tail -n 3 test
    
  12. cat:查看文件的所有的數據

    # 查看文件所有的數據
    cat test
    # 查看數據的時候顯示行號
    cat -n test
    
  13. more:分屏查看

    # 分屏查看
    more /var/log/boot.log
    # 回車表示查看下一行
    # 空格或者Ctrl+F表示查看下一頁
    # Ctrl+B表示回滾一頁
    # =表示查看當前是第幾行
    # :f表示查看的是哪一個文件,查看的是第幾行
    # q表示退出
    
  14. less:分屏查看

    # 分屏查看
    less /var/log/boot.log
    # 空格或者pagedown表示查看下一頁
    # pageup表示查看上一頁
    # /單詞   或者  ?單詞 要搜索這個單詞,n表示查找下一個,N表示查找上一個
    # q表示退出
    
  15. more和less的區別:

    1. less的功能會更加強大:less支持搜索,more不支持
    2. more是先將整個文件讀取出來,然后再進行分屏,因此會占用更大的內存空間;less根據屏幕來進行分屏讀取,也就意味著如果結束查看,未查看到部分數據不讀取。也就意味著,讀取大文件更適合于用less
  16. ln:建立軟鏈接

    # 命令格式
    ln -s [源文件] [目的地]
    # 建立軟鏈接
    # 將/var/log目錄鏈接到/opt下
    ln -s /var/log /opt
    cd log # 進入的/opt/log
    # 刪除軟鏈接
    mkdir test
    ln -s test a
    rm -rf a # 刪除軟鏈接,但是不刪除源目錄/文件
    rm -rf a/ # 命令無效
    # 進入軟鏈接對應的實際路徑
    cd -P log # 此時進入的是/var/log
    

echo

  1. echo是Linux提供的用于輸出的命令,類似于Java中的print

    echo a
    echo 'a'
    echo "a"
    
  2. 在Linux中,數據默認就是字符串!

    echo 2+3
    # 輸出就是2+3
    
  3. 需要使用轉義字符

    echo "hello\tworld" # 打印hello\tworld
    echo -e "hello\tworld" # 打印hello   world
    

>和>>

  1. >表示覆蓋寫入;>>表示追加寫入

  2. 案例

    # 將打印結果覆蓋到a.txt中
    echo "abc" > a.txt
    # 將打印結果追加到a.txt中
    echo "def" >> a.txt
    
  3. 監控指定文件(a.txt),如果文件中追加了新數據,能自動發現并打印這個數據

    tail -f a.txt
    
  4. 合并兩個文件

    cat a.txt >> b.cfg
    

復習:轉義字符、編碼

  1. 轉義字符:鍵盤上部分鍵的效果無法直接體現,所以才采用轉義字符來表示

    字符解釋
    \ttable的縮寫,制表符,補齊字節,用于對齊!!!默認Windows中是4個字節,Linux是8個字節
    \rreturn的縮寫,回車符,現在使用的較少,Linux不支持
    \nnewLine的縮寫,換行符
    \f分頁符
  2. 編碼:將字符按照指定規則映射成數字,這個過程就叫編碼,記錄映射過程的表格稱之為編碼表

    1. ASCII(阿斯克碼表):不完全碼表,1個字符占用1個字節
    2. ISO-8859-1(西歐碼表):一共有256個字符,1個字符占用1個字節
    3. GB2312(國標碼,后來擴展成了GBK):1個字符占用2個字節,收錄的是大部分的簡體漢字和少部分的繁體漢字,GBK在大陸內范圍通用,港澳臺不適用
    4. Unicode編碼體系:規定了一系列碼表,UTF-8,UTF-16,UTF-32等。常用的是UTF-8,規定1個字符占用3個字節。UTF-8中收錄的是常見語言的基本字符
      | newLine的縮寫,換行符 |
      | \f | 分頁符 |
  3. 編碼:將字符按照指定規則映射成數字,這個過程就叫編碼,記錄映射過程的表格稱之為編碼表

    1. ASCII(阿斯克碼表):不完全碼表,1個字符占用1個字節
    2. ISO-8859-1(西歐碼表):一共有256個字符,1個字符占用1個字節
    3. GB2312(國標碼,后來擴展成了GBK):1個字符占用2個字節,收錄的是大部分的簡體漢字和少部分的繁體漢字,GBK在大陸內范圍通用,港澳臺不適用
    4. Unicode編碼體系:規定了一系列碼表,UTF-8,UTF-16,UTF-32等。常用的是UTF-8,規定1個字符占用3個字節。UTF-8中收錄的是常見語言的基本字符
    5. 所有碼表的前256位一模一樣 - 英文在所有字符集/碼表中都只占用1個字節!

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

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

相關文章

【MQ06】延時隊列與優先級隊列

延時隊列與優先級隊列 在消息隊列的最后一篇文章中,我們再來學習兩個非常常見的隊列功能。一個是延時隊列,一個是優先級隊列。它們的應用場景非常多,也非常有意思,不同的消息隊列工具都提供了不同的實現,同樣的&#x…

40. 組合總和 II(力扣LeetCode)

文章目錄 40. 組合總和 II題目描述回溯算法 40. 組合總和 II 題目描述 給定一個候選人編號的集合 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。 candidates 中的每個數字在每個組合中只能使用 一次 。 注意&#xff…

istio pod不啟動及訪問報RBAC錯誤問題解決

istio pod不啟動問題解決 在kubernetes集群中安裝istio之后,在創建的depoyment中已經使用了注入注解sidecar.istio.io/inject: true’配置,但是istio pod不創建,代碼示例如下 kind: Deployment apiVersion: apps/v1 metadata:name: name-an…

力扣SQL50 大的國家 查詢

Problem: 595. 大的國家 Code select name,population,area from World where area > 3000000 or population > 25000000;

Sora引發安全新挑戰

文章目錄 前言一、如何看待Sora二、Sora加劇“深度偽造”憂慮三、Sora無法區分對錯四、濫用導致的安全危機五、Sora面臨的安全挑戰總結前言 今年2月,美國人工智能巨頭企業OpenAI再推行業爆款Sora,將之前ChatGPT以圖文為主的生成式內容全面擴大到視頻領域,引發了全球熱議,這…

【Leetcode每日一題】二分查找 - LCR 173. 點名(難度?)(24)

1. 題目解析 Leetcode題目鏈接:LCR 173. 點名 這個問題的理解其實相當簡單,只需看一下示例,基本就能明白其含義了。 核心在于找到題目所給的連續數組中缺失的數字即可。 2.算法原理 在這個升序的數組中,我們發現: …

LeetCode # 1207. 獨一無二的出現次數

1207. 獨一無二的出現次數 題目 給你一個整數數組 arr,請你幫忙統計數組中每個數的出現次數。 如果每個數的出現次數都是獨一無二的,就返回 true;否則返回 false。 示例 1: 輸入:arr [1,2,2,1,1,3] 輸出&#xff1…

Java中Jenkins的應用簡介

目錄 Java中Jenkins的應用什么是Jenkins?Jenkins在Java開發中的應用示例代碼和解決方案 Java中Jenkins的應用 Jenkins是一個流行的開源自動化服務器,可用于持續集成和持續交付。在Java開發中,Jenkins扮演著重要的角色,可以幫助團…

Fastadmin下拉選擇菜單

下拉菜單效果圖如下所示 對應的表字段為 cid int(11) unsigned NOT NULL DEFAULT ‘1’ COMMENT ‘分類ID 1 新手 2VIP 3基金產品’ 步驟如下: 一、lang/zh-cn 中找到對應的文件,添加 配置 二、Model 中添加方法 三、控制器中添加 四、add.html中 …

機器學習高手之路:發現TensorFlow學習網站的無限可能!

介紹:TensorFlow是一個由Google團隊開發的端到端開源機器學習平臺,專為數值計算和機器學習而設計。以下是對TensorFlow的詳細介紹: 開發背景與歷史:TensorFlow起源于谷歌的神經網絡算法庫DistBelief。它被設計成一個靈活的深度學習…

代碼隨想錄Day20 | Leetcode77 組合

題目 給定兩個整數 n 和 k,返回范圍 [1, n] 中所有可能的 k 個數的組合。你可以按 任何順序 返回答案。示例 1: 輸入:n 4, k 2 輸出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]示例 2: 輸入:n 1, k 1 …

go并發模式之----工作池/協程池模式

常見模式之四:工作池/協程池模式 定義 顧名思義,就是有固定數量的工人(協程),去執行批量的任務 使用場景 適用于需要限制并發執行任務數量的情況 創建一個固定大小的 goroutine 池,將任務分發給池中的 g…

順序表基礎

?錄 1. 課前準備 2. 順序表概念及結構 3. 順序表分類 4. 實現動態順序表 正?開始 課前預備 1. 課程?標 C語?語法基礎到數據結構與算法,前?已經掌握并具備了扎實的C語?基礎,為什么要學習數據結構 課程??通訊錄項? 2. 需要…

小程序分賬方案:實現商戶分賬的簡便與靈活

隨著移動支付的普及和小程序的快速發展,越來越多的商家選擇在微信小程序上開展業務。然而,對于一些有多個分賬方的商戶而言,如何實現快速、準確和靈活的資金分賬成為了一個挑戰。本文將介紹一種高效的小程序分賬方案,幫助商戶輕松…

C++ STL 優先隊列(priority_queue)

1.優先隊列是一種極其特殊的隊列,他與標準的隊列使用線性結構進行計算不同,優先隊列的底層是以散列的狀態(非線性)表現的,他與標準的隊列有如下的區別,標準的隊列遵從嚴格的先進先出,優先隊列并…

負載均衡Ribbon和LoadBalancer

Ribbon和LoadBalancer都是用于實現負載均衡的工具,但它們在應用場景和實現方式上有所不同。 Ribbon 是一個客戶端負載均衡器,它是一個Java庫,可以在客戶端應用程序中使用。通過在客戶端應用程序中維護服務實例列表,并使用負載均衡…

修改docker默認存儲位置【高版本的docker】

一、修改docker默認存儲位置 1、停服務 systemctl stop docker 2、修改/etc/docker/daemon.json添加新的dcoker路徑 如"data-root": "/mnt/hdd1/docker" 3、保存后重啟服務:systemctl restart docker 二、其他服務的命令 systemctl disab…

AcWing 787. 歸并排序 解題思路及代碼

先貼個題目&#xff1a; 以及原題鏈接&#xff1a;787. 歸并排序 - AcWing題庫https://www.acwing.com/problem/content/789/純板子題&#xff0c;先貼代碼吧&#xff0c;根據代碼講思路&#xff1a; #include <iostream> using namespace std;const int N 1e5 10; in…

【Maven】Maven 基礎教程(三):build、profile

《Maven 基礎教程》系列&#xff0c;包含以下 3 篇文章&#xff1a; Maven 基礎教程&#xff08;一&#xff09;&#xff1a;基礎介紹、開發環境配置Maven 基礎教程&#xff08;二&#xff09;&#xff1a;Maven 的使用Maven 基礎教程&#xff08;三&#xff09;&#xff1a;b…

修飾符【C#】

分為四部分&#xff1a;屬性修飾符&#xff0c;存取修飾符&#xff0c;類修飾符和成員修飾符。 屬性修飾符&#xff1a; [Serializable]&#xff1a;按值將對象封送到遠程服務器。在按值封送對象時&#xff0c;就會創建一個該對象的副本&#xff0c;并將其序列化傳送到服務器…