Linux學習筆記03

来源:https://www.cnblogs.com/RiwellAckerman/archive/2019/07/22/11228923.html
-Advertisement-
Play Games

一、Linux常見命令 file:查看文件類型(windows用擴展名識別文件類型) 語法:file [options] [args] -b:顯示結果時,不顯示文件名 -c:顯示執行file命令的執行過程(file是如何判斷文件類型),便於排錯或分析命令執行過程 -i:輸出MIME類型的字元串 -L ...


一、Linux常見命令

file:查看文件類型(windows用擴展名識別文件類型)

語法:file [options] [args]

  • -b:顯示結果時,不顯示文件名
  • -c:顯示執行file命令的執行過程(file是如何判斷文件類型),便於排錯或分析命令執行過程
  • -i:輸出MIME類型的字元串
  • -L:查看軟連接對應文件類型
  • -f:查看文件中文件名的類型

cat:一次性查看整個文件

語法:cat [option] [args]

從鍵盤輸入創建一個新文件:

# cat >test.txt << EOF
> ajsncj//鍵盤輸入
> ajsbja
> ajsbj
> EOF//鍵盤輸入結束

向現有文件中追加數據:

# cat >>file_name <<EOF
> sdfsdf
> sdfsd
> EOF

把等多個文件內容合併到一個文件輸出:

cat file1 file2 >file3

-n:顯示文件內容是時顯示行號(包括空行)

-b:顯示文件內容是時顯示行號(不包含空行)

-s:當文件中有多個空行時合併為一個空行

-E:每個結尾加$

 

cp:複製文件或目錄

語法:cp [options] 

-f:強制複製

-r:遞歸複製目錄

-s:為某個文件創造符號連接(軟連接),而不是複製文件

-l:硬連接

-b:覆蓋已有文件前,對目標文件進行備份

-p:複製文件時保留文件原有屬性

-d:當複製軟鏈接文件時,把目標文件或目錄也會創建為軟鏈接,並指向最原始的文件

-i 覆蓋前詢問

 

mv:move,西東或從命令文件和目錄(目標和源文件同一目錄是重命名)

-b:移動前先備份

-f:強制移動

-i:移動前詢問

-t:將多個文件移動到同一個目錄(目錄在前,後面跟文件)

 

rm:remove刪除

-i:刪除前詢問

-d:刪除可能存在數據的目錄

-f:強制刪除

-v:顯示命令執行過程

-r:遞歸刪除整個目錄

 

mkdir:創建空目錄

-m:創建目錄時同時設置許可權

-p:遞歸創建目錄

-v:顯示創建目錄的過程

 

touch:創建新文件或者修改時間戳

-a:只改變訪問時間

-c:不創建文件

-d:使用指定時間戳創建文件,而不使用系統時間

-t:使用指定格式時間戳創建文件,而不使用系統時間

-f:解決與BSD系列UNIX系統相容性問題

-m:只改變動時間

 

tree:查看目錄樹(=ls -R)

which:查看命令所在的路徑

whereis:查看命令所在的路徑,源代碼文件,幫助信息所在的文件

-b:只查看文件所在的位置(等同於which命令)

-m:只查看幫助信息所在的位置

-s:支持看源代碼所在的位置

 

二、用戶管理

新建用戶命令:useradd uername

  • /etc/default/useradd
# useradd defaults file
GROUP=100//
HOME=/home//
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
  • /etc/skel/
  • /etc/login.defs

創建用戶時,可以設置新用戶可登陸系統的實踐範圍

 

rm -f /var/run/yum.pid

passwd:設置密碼

man 5 shadow

 

三、進程管理

進程的概念: 

    可以定義為:可併發執行的程式在一個數據集合上的運行過程。進程可以申請和擁有系統資源。傳統操作系統中,進程是一個可以獨立調度的基本單位(現代操作系統中為線程)。進程是一個動態的概念,它是“活的”,它有產生、運行、消亡的過程。進程與程式不是等同概念,程式是一個靜態的概念,是指令和數據的集合,作為一種文件可長期存放在存儲介質中。

 

進程的相關概念:父子關係 進程狀態 優先順序

    1、進程狀態:

                task_uninterruptible:不可中斷睡眠 mkdir:系統調用,硬體:I/O 1ms

                task_interruptible:可中斷睡眠

                stopped:停止狀態(不能被調入CPU運行)

                zombie:僵屍狀態(結束父進程才能夠退出當前進程的僵屍狀態):進程運行完成後沒有釋放CPU和記憶體資源

    2、進程優先順序:

                0-139數字,共140個優先順序,數字越小,優先順序越高

                0-99:系統分配優先順序(用戶不可控優先順序)

                100-139:nice值 (用戶可控優先順序);-20到19;root用戶可以任意調整nice值;普通用戶只能調整0-19


高優先順序進程:獲取更多的CPU運行時長,更優先的讓CPU執行

 

進程的特性:

    動態性

    併發性

    獨立性

    非同步性

 

CPU分環運行:

    0環:特權環,運行內核

    1-2環:庫文件

    3環:進程環

 

task struct:進程的數據結構(存放在記憶體的內核空間中),相當於進程式控制制塊

task struct結構:狀態 進程信息和內核棧 運行列表(指令等) MM(記憶體管理):memory mangement PID:進程ID號 群組信息 用戶信息 文件系統 文件描述符等,同時也維護頁表寄存器

 

進程記憶體結構:

    forbidden:內核空間

    program text:指令

    data+bss:全局變數

    heap:堆空間,進程運行時調用的數據等

    shared library:共用庫

    stack:棧空間,局部變數

  

線程的概念:

    現代操作系統中,將傳統的進程分離,即將資源申請和調度分開,進程作為資源的申請和擁有的單位,而進程作為調度的基本單位。thread:線程,輕量級進程

 

線程與進程的比較:

    調度

    併發性

    擁有資源

    系統開銷

 

lock:死鎖 自旋鎖等

    由於臨界區的存在導致了該概念的產生,臨界區使用原則:忙則等待、有限等待、空閑讓進、讓權等待

 

進程管理命令:ps top pstree pgrep pidof kill killall bg fg jobs

    ps:process status:進程狀態查看,運行ps那個時刻系統進程狀態;BSD風格(不使用連字元),sys V風格(使用連字元),GNU長選項(使用兩個連字元)

          a:顯示和終端有關的進程

          u:顯示進程用戶的信息

          x:顯示和終端無關的進程

          -e:顯示所有進程信息

          -l:顯示進程長格式

          -F:顯示進程的完整信息

 

    ps aux:結果解析

              USER:該進程是有哪個用戶發起的

              PPID:父進程號

              PID:進程號 /proc目錄存放著進程相關的信息 在CentOS7:PID為1的進程是systemd 在CentOS6                 中PID為1的進程是init進程,PID為1的進程是系統中所有進程的父進程

              %CPU:該進程占用的CPU百分比

              %MEM:該進程占用記憶體的百分比

              VSZ:虛擬記憶體集(計算進程所占物理記憶體時,物理記憶體包括共用庫的空間)

              RSS:常駐記憶體集(進程中不能被交換出去的數據)

              TTY:運行在哪個終端

              STAT:進程狀態

                      D:不可中斷睡眠狀態

                      S:可中斷睡眠狀態

                      R:運行狀態

                      T:停止狀態

                      Z:僵屍狀態

                      s:session leader:會話的領導者

                      <:優先順序較高的進程(用戶不可控)

                      N:優先順序較低的進程(用戶可控進程)

                      l:多線程進程

                      L:在記憶體中鎖定分頁

                      +:前臺進程組中的進程

              START:進程啟動時間

              TIME:該進程在CPU中實際運行的時長

              COMMAND:該進程命令名稱

 

    ps -elF:結果解析

              PRI:系統分配的優先順序(用戶不可更改)

              NI:nice值,nice值的修改會影響pri的值,他們的總和不變

 

   調整進程的nice值:調整正在運行進程的nice

            renice [nice_num] PID

  指定進程運行的nice值(讓某個命令以指定nice運行)

            nice -n [nice_num] COMMAND

 

    top:動態查看進程狀態,每隔3秒刷新一次進程狀態信息

           top結果解析:

                   第一行:當前系統時間 系統運行時長 登錄系統的用戶個數 過去1分鐘,5分鐘,15分鐘平均負載

                   第二行:進程總數 正在運行的進程數 睡眠的進程數 停止狀態進程數 僵屍狀態進程數

                   第三行(按1鍵可以查看每個CPU的信息):CPU相關信息: us:用戶進程所占CPU百分比 sy:系統進程所占CPU百分比 ni:nice所占CPU百分比 id:空閑進程所占CPU百分比 hi:硬體中斷所占CPU百分比 si:軟體中斷所占CPU百分比 st:被hypervisor偷走的CPU的百分比

                   第四行:物理記憶體相關信息

                   第五行:交換分區相關信息

 

            top互動式命令:

                   M:按所占記憶體百分比進行排序

                   P:按所占CPU備份比進行排序

                   T:按進程運行時長進行排序

                   c:是否顯示COMMAND列完整路徑

                   l:是否顯示top第一行

                   t:是否顯示top中第二行和第三行

                   m:是否顯示記憶體的相關信息

                   k:殺死某個進程

                   q:退出top進程

 

pstree:查看進程樹(查看父子進程關係)

 

pgrep:查看某個進程PID號 pgrep process_name

 

pidof:查看某個進程PID號 pidof process_name

 

kill:殺死某個進程(向進程傳遞某個信號)

   -l:查看信號列表:

           1:SIGHUP:不停止服務的情況下,重新讀取配置文件,並且應用配置文件中的設置

           2:SIGINT:Ctrl+c 中斷某個進程

           9:SIGKILL:強制殺死某個進程

           15:SIGTERM:終止某個進程(預設信號),相當於會有預警

    kill語法:

            kill -sig_num PID

            kill -sig_name PID

            kill %num:殺死後臺的某個作業,%不能省略,num為使用jobs命令查看時的序號

 

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

            記憶體共用等

 

killall:殺死整個進程樹,用法同kill

  

bg:把進程調入後臺繼續運行

fg:把後臺的進程調入前臺運行

    fg num:將後臺序號為num的進程調入前臺

jobs:查看後臺運行的作業

   +:下一次將要運行的後臺作業

 

前臺-->後臺:

   ctrl+z:把正在運行的進程調入後臺,並停止運行

   &:啟動時直接調入後臺運行,末尾加上該符號

 

四、任務計劃

任務計劃:調度性的任務

        分為:

                一次性任務計劃:at、batch

                周期性任務計劃:cron、anacron

 

一次性任務計劃:

(一)at命令

          1、at:設置系統在某一個時間點執行的任務,執行結果以郵件的方式發送給任務發起者

              依賴atd服務,所以需要:

              # systemctl start atd

              # systemctl enable atd

              # systemctl status atd

 

          2、語法:

                  # at data_time

                  at>at_command1   //輸入需要執行的命令

                  at>at_command2

                  at>ctrl+d 保存退出

 

                  data_time:時間日期寫法

                            絕對時間:

                                  HH:MM:具體時間點

                                  DD.MM.YY:天.月.年

                                  YY-MM-DD:年-月-日

                                  MM/DD/YY:月/日/年

                                  HH:MM YY-MM-DD:

                            相對時間:

                                  at now+3minutes:從任務計劃創建開始計時,3分鐘以後執行

  

         3、與at命令相關的文件:

                 Linux中設置at任務後,會在/var/spool/at/目錄生成at任務計劃的文件,按照文件名的排序順序執行

                許可權:

                /etc/at.allow:at任務計劃的白名單,僅允許此文件中的用戶執行at

                /etc/at.deny:at任務計劃的黑名單,僅拒絕次文件中的用戶執行at

                系統先查找/etc/at.allow,再去查找/etc/at.deny,如果兩個文件都沒有,可以執行

 

         4、at命令:設置at任務計劃

              -l:查看系統中at任務列表,相當於atq

              -r:刪除系統中的at任務列表,相當於atrm

              -d:刪除系統中的at任務列表,相當於atrm

              -c:列出後續at任務的具體指令內容

 

 

(二)batch

         1、batch:用法和at相同,不過batch任務計劃是在CPU空閑時執行(當CPU的平均負載小於0.8時,uptime:查看CPU的平均負載)

                依賴batchd服務,所以需要:

              # systemctl start batchd

              # systemctl enable batchd

              # systemctl status batchd

 

          2、語法:

            # batch data_time

             batch>batch_command1

             batch>batch_command2

             batch>ctrl+d 保存退出

  

              data_time:時間日期寫法:

                絕對時間:

                      HH:MM:具體時間點

                      DD.MM.YY:天.月.年

                      YY-MM-DD:年-月-日

                      MM/DD/YY:月/日/年

                      HH:MM YY-MM-DD:

                相對時間:

                      at now+3minutes:從任務計劃創建開始計時,3分鐘以後執行

  

周期性任務計劃:

  系統周期性任務:

        日誌輪換:logrotate

        登錄文件分析:logwatch任務

        創建locate資料庫:updatedb

        創建man幫助信息資料庫:CentOS6:makewathis  CentOS7:mandb

        RPM軟體登錄文件的創建

        與網路相關的分析行為:

  

  用戶周期性任務:

      cron:設置周期任務計劃

      anacron:當cron周期性任務由於某種原因沒有執行,anacron重新執行cron任務

 

(一)cron

    1、cron:

             依賴crond服務,所以需要:

              # systemctl startcrond

              # systemctl enablecrond

              # systemctl statuscrond

 

    2、相關文件:

            許可權控制文件:

                /etc/cron.allow和/etc/cron.deny

                /etc/cron.allow:白名單

                /etc/cron.deny:黑名單,預設情況下系統只保留/etc/cron.deny

 

           cron相關的配置文件:

              /etc/crontab:cron配置文件

              /etc/cron.d/:cron輔助配置文件目錄

              /var/spool/cron/:cron任務計劃的配置文件目錄,用戶設置完cron任務後,會生成以用戶名名稱的cron文件

 

            /etc/crontab文件解析:

                   SHELL=/bin/bash:cron任務計劃執行使用的shell程式

                   PATH=/sbin:/bin:/usr/sbin:/usr/bin:cron任務計劃命令搜索地址

                   MAILTO=root:cron任務計劃執行結果發送給哪個用戶

 

            /etc/daily/   /etc/hourly/   /etc/monthly/   /etc/weekly/,這些目錄下存放了固定的周期性任務

            cron.hourly:cron工具去執行

            cron.daily,cron.weekly cron.monthly是由anacron工具去執行

 

    3、操作:

        crontab:設置/查看/刪除等cron任務計劃,執行結果以郵件方式發送給任務發起者

              -e:會通過文本格式建立,在文本中編輯cron任務內容,語法見下文

              -u:為指定用戶設置cron任務計劃(只有root用戶能夠使用)

              -l:查看cron任務列表

              -r:刪除所有的cron列表

 

        設置任務語法:

          系統設置:

              分 時 日 月 周 用戶 命令

          用戶設置:

              分 時 日 月 周 命令

 

        時間取值範圍:

              分鐘:0-59

              小時:0-23

              日期:1-31

              月份:1-12或jan,feb,mar,apr ...

              周:0-7或sun,mon,tue,wed,thu,fri,sat,其中0和7都代表周日

        時間的特殊寫法:

              通配:*代表任意時間  10 17 * * * cat /etc/fstab

              離散時間段:,(逗號)  5,15,30,45,56 17 * * * cat /etc/fstab

              連續時間段:-(中橫線) 00 23 * * 1-5 cat /etc/fstab

              間隔時間段:*/n    */5 * * * * cat /etc/fstab    00 10 */5 * * cat /etc/fstab(分不能通配)

 

    4、cron設置任務計劃時註意事項:

         CPU和記憶體資源集中使用時的問題:  

            # vim /etc/crontab

                  1,6,11,16,21,26,31,36,41,46,51,56 * * * * root COMMAND1

            取消一些不必要的輸出:設置命令時可以重定向輸出

            時間的檢驗:設置時間時,周與日月不可並存

            安全的檢驗:通過/var/log/cron的內容查看cron任務計劃中是否有非法任務

            環境變數:系統命令查找和cron任務命令位置由$PATH變數決定,設置cron任務時,使用命令的絕對路徑

  

(二)anacron

    1、anacron:當cron周期性任務由於某種原因(如關機)沒有執行,anacron重新執行cron任務

 

    2、語法:

          anacron [options] [job]

               -s:依據時間記錄文件去判斷是否執行

               -f:強制執行

               -n:立刻運行未執行的任務,不需要延時

 

    3、anacron執行流程:

        1:由/etc/anacrontab分析到cron.daily天數為1天

        2:由/var/spool/anacron/cron.daily取出最近一次執行anacron時間戳

        3:由2步驟分析出的時間戳和cron任務進行比較,查看哪些cron任務超過1天時間沒有執行

        4:準備執行指令,根據/etc/anacrontab的設置,將延時執行

        5:延時時間過後,執行指令


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

-Advertisement-
Play Games
更多相關文章
  • int, float, string整數,浮點數,字元串 字元串(string)用引號括起來的文本 >>> Chinese = '鏡像世界'>>> English = "mirror world">>> number = "666">>> symbol = '''科A!@'''>>> mixture ...
  • 1. 將Message.java拷貝到 /Users/sunny/test目錄下(和NVIDIAClassLoader類MESSAGE_CLASS_PATH指定的路徑一致),並編譯生成位元組碼文件(.class)。 2.編寫自定義ClassLoader類。 3.測試類。 運行結果: ...
  • ORM框架(持久化流程) session是事務 (transaction) 的工廠,處理session後,所有更改將自動刷新到資料庫中。或者,如果要處理何時將更改刷新到資料庫,即transaction將在session處理完後非同步提交。session也可以取消事務。 新建兩個項目,Data 與 Da ...
  • .NET Core CSharp 初級篇 1 5 本節內容類的介面、枚舉、抽象 簡介 問題 如果你需要表示星期或者是某些狀態,使用字元串或者數字是否不直觀? 你是否發現,無論何種電腦,它的USB口的設計都是遵循一定規範的? 枚舉 枚舉(enum)是一個非常好用的一個特殊值類型,他可以讓你指定一系列字 ...
  • 微軟和社區已經做了大量艱苦的工作,使.Net Core成為市場上具有競爭力的框架,幫助開發人員快速開發具有最佳性能和可擴展性的強大應用程式。做的最棒的事情是.Net Framework開發人員不需要任何新知識來處理.Net Core。這也是開發人員在很短的時間內採用.Net Core的原因之一。對於 ...
  • 1. "HttpResponseMessage" 2. "IHttpActionResult" 3. "void" 4. "某些其他類型" 5. "總結歸納" 原文地址:https://www.cnblogs.com/xgzh/p/11208611.html HttpResponseMessage ...
  • 轉自:Window系統命令行調用控制面板程式 ...
  • 常用命令 一、命令的基本格式 1、命令的提示符 : 這是提示符的分隔符號,沒有特殊含義 : 顯示的是當前的登錄用戶 : 分隔符號,沒有特殊含義 : 當前系統的簡寫主機名(完整主機名是 localhost.localdomain), 查看 : 代表當前所在的目錄的最後一層目錄, : 命令提示符。超級用 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...