Linux 常用命令總結(二)

来源:https://www.cnblogs.com/l-y-h/archive/2020/03/27/12584563.html
-Advertisement-
Play Games

一、系統管理類指令 1、uname(顯示系統消息) 用於顯示系統信息,比如系統類型、主機型號等。 【格式:】 uname [選項] 註: 選項: -a 或者 --all 顯示全部信息 -m 或者 --machine 顯示電腦型號 -n 或者 --nodename 顯示主機名稱 -r 或者 --rel ...


一、系統管理類指令

1、uname(顯示系統消息)

  用於顯示系統信息,比如系統類型、主機型號等。

【格式:】
    uname [選項]
註:
    選項:
        -a 或者 --all         顯示全部信息
        -m 或者 --machine     顯示電腦型號
        -n 或者 --nodename    顯示主機名稱
        -r 或者 --release     顯示操作系統發行編號
        -s 或者 --sysname     顯示系統名稱
        --version            顯示版本信息

【舉例:】
    [root@localhost test]# uname --all

 

 

 

2、firewall(操作防火牆)

  CentOS 7 使用 firewall 管理防火牆,不使用 iptables 管理。
  使用 firewall-config 可以打開 GUI 圖形界面進行操作。
  使用 firewall-cmd 直接操作命令行。
  使用 man firewall-cmd 可以查看幫助信息。

【格式:】
    firewall-cmd [選項]
註:
    選項:
        --state                      用於查看 firewall 的狀態
        --reload                     用於重新載入防火牆,不中斷服務
        --permanent                  永久操作
        --add-port                  用於添加埠
        --list-ports                用於查看已開放的埠
        --remove-port               用於移除埠
        --add-service               用於添加服務
        --remove-service            用於移除服務
        --query-service             用於查看服務是否支持
        --get-services               用於查看支持的服務
        --get-active-zones           用於查看已被激活的分區
        
【常見操作:開啟、關閉防火牆】
    [root@localhost firewalld]# firewall-cmd --state     用於查看防火牆的狀態,一般都為 running。
    或者
    [root@localhost firewalld]# service firewalld status    用於查看防火牆的狀態。
    
    [root@localhost firewalld]# service firewalld start     開啟防火牆
    [root@localhost firewalld]# service firewalld stop      關閉防火牆
    [root@localhost firewalld]# service firewalld restart   重啟防火牆

【常見操作:(開放、關閉 8080 埠,在防火牆開啟時進行)】
    firewall-cmd --state
    firewall-cmd --add-port=8080/tcp
    firewall-cmd --reload
    firewall-cmd --list-port
    firewall-cmd --remove-port=8080/tcp
    
註:
    firewall-cmd --add-port=8080/tcp --permanent 表示永久操作

 

 

 

3、runlevel、systemctl、init(查看、設置系統運行級別)

(1)運行級別分類
  運行級別0:系統關機狀態,預設級別不能設為 0,否則不能正常啟動(一啟動就關機)。
  運行級別1:單用戶工作狀態,用於系統維護、找回 root 密碼等,禁止遠程登錄,只能在當前電腦上操作。
  運行級別2:多用戶狀態(無網路服務)。
  運行級別3:多用戶狀態(有網路服務)。
  運行級別4:作為保留級別,未使用。
  運行級別5:圖形界面狀態。
  運行級別6:系統重啟狀態,預設級別不能設為 6,否則不能正常啟動(一啟動就重啟)。

(2)一般運行級別配置文件所在位置(/etc/inittab)
  查看可知 CentOS7 不使用 inittab,即使對該文件修改,也不會有影響。  
  使用 systemctl 去獲取、設置運行級別。

 

 

 

(3)查看當前運行級別

【方式一:runlevel】
    runlevel
輸出 上一個系統運行級別以及當前系統運行級別。
形如: 
    N 5     N 表示系統未更換過運行級別,5 表示當前系統運行級別為 5
    5 3     5 表示上一次運行級別為 53 表示當前系統運行級別為 3
    
【方式二:】
    who -r
    
【方式三:】
    systemctl get-default
註:
    運行級別對應:
        0          /usr/lib/systemd/system/runlevel0.target -> poweroff.target
        1          /usr/lib/systemd/system/runlevel1.target -> rescue.target
        2          /usr/lib/systemd/system/runlevel2.target -> multi-user.target
        3          /usr/lib/systemd/system/runlevel3.target -> multi-user.target
        4          /usr/lib/systemd/system/runlevel4.target -> multi-user.target
        5          /usr/lib/systemd/system/runlevel5.target -> graphical.target
        6           /usr/lib/systemd/system/runlevel6.target -> reboot.target

 

 

 

 

 

 

(4)修改運行級別(init、systemctl)

【方式一:(切換運行級別,但是不修改預設設置)】
    init 數字
註:
    數字為 0 - 6
    
【方式二:(修改預設運行級別)】
    systemctl set-default xxx.target       設置預設級別為 xxx.target,重啟系統生效
    systemctl isolate xxx.target           不重啟系統,將運行級別切到 xxx.target,等價於 init 

【舉例:】
    [root@localhost system]# systemctl get-default
    [root@localhost system]# systemctl set-default runlevel3.target
    [root@localhost ~]# systemctl isolate runlevel5.target

 

 

 

4、CentOS7 找回丟失的 root 密碼

(1)解決方案:
  開機進入 單用戶 模式(無需密碼登陸),此時設置密碼即可。

(2)安全性:
  由於單用戶模式必須在伺服器上直接操作,不能通過遠程操作,既然都能接觸伺服器了,說明是內部人操作的,安全性也就可以得到保證。

(3)操作步驟:
  Step1:開機,在引導界面使用 上下箭頭切換,阻止預設引導功能。

 

 

 

  Step2:按下 e 鍵,進入編輯界面。如下圖,在行末尾 添加 init=/bin/sh,然後Ctrl + x 進入單用戶模式。

 

 

 

  Step3:切換根目錄,修改 root 用戶的密碼,並重啟虛擬機。
  若出現亂碼,使用 LANG=en_US,修改

chroot /sysroot/          切換根目錄
ll
LANG=en_US                出現亂碼,設置語言
passwd root               修改 root 密碼
touch /.autorelabel       用來使selinux的所有的關聯標簽發生改變,以接受新的ROOT密碼
exit                      離開 /sysroot 目錄
reboot                    重啟 虛擬機

 

 

 

5、進程管理

(1)進程:
  可以理解為 某個正在執行的程式(命令)。程式執行時,相關的代碼、屬性載入到記憶體,操作系統給其分配一個 ID,即進程 ID(PID)。

(2)進程管理:
  即對系統內正在運行的進程進行管理。
  可以查看當前系統所有正在運行的進程,並以此判斷哪些服務被啟動,哪些非法服務被啟動。
  可以用來殺死進程,停止不正常運行的進程。

(3)一般進程、孤兒進程、僵屍進程:
  一般進程:指正常情況下,子進程由父進程創建,當子進程執行完畢,父進程取得子進程的終止狀態,並回收子進程的資源。

  孤兒進程:指父進程退出了,但其子進程仍在運行,此時這些子進程即為孤兒進程,被進程號 為 1的進程(即 PID = 1,一般為 init 或者 systemd)收養、並執行,執行完畢由 init 回收資源。

  僵屍進程:指的是子進程結束,但父進程沒有回收子進程的資源,從而子進程一致存在於記憶體中,此時子進程即為 僵屍進程。

(4)進程的啟動:
  可以分為 手動啟動、任務調度啟動。

【手動啟動:】
    所謂手動啟動,即用戶通過命令行輸入命令,並執行。
    手動啟動又可分為: 前臺啟動、後臺啟動。
    前臺啟動:通常用於執行耗時較短的命令,此時需等待當前命令執行完畢才可繼續執行下個命令(可以使用快捷鍵 Ctrl + Z 將命令掛起),比如 ls、cd 等命令。
    後臺啟動:通常用於執行耗時較長的命令,此時若用前臺啟動執行,耗時較長,可以將其轉為後臺執行,然後繼續執行其他操作。(格式:命令 &,&前有空格)。

【任務調度啟動:】
    所謂任務調度啟動,指的是任務可以在指定時間、指定情況下自動啟動。
    比如:資料庫備份等。

 

6、ps(顯示所有運行進程的信息)

  用於顯示運行進程的信息。

【格式:】
    ps [選項]
註:
    選項:
        aux     查看系統的所有進程
        -le     查看系統的所有進程,以及進程的優先順序、父進程ID
        -l      查看當前 shell 產生的進程,以長格式顯示
    
    aux 輸出格式:
        USER  PID %CPU %MEM  VSZ  RSS TTY  STAT START   TIME COMMAND
       其中:
           USER           指該進程由哪個用戶產生的。
           PID            指該進程的 ID。
           %CPU           指該進程占用 CPU 資源的百分比,占用越高越耗費資源。
           %MEM           指該進程占用 物理記憶體 的百分比,占用越高越耗費資源。
           VSZ            指該進程占用 虛擬記憶體 的大小,單位為 KB。
           RSS            指該進程占用 實際物理記憶體 的大小,單位為 KB。
           TTY            指該進程在哪個終端上運行。 tty1 ~ tty7 表示本地終端。 pts/0 ~ pts/255 表示虛擬終端(遠程終端)。
           STAT           指的是該進程狀態。
                           D       睡眠狀態,不可被喚醒。
                           S       睡眠狀態,可被喚醒。
                           R       線程正在運行狀態。
                           T       線程停止狀態。
                           X       線程死亡狀態。
                           Z       僵屍進程,進程已終止,但仍有部分程式在記憶體。
                               N       低優先順序
                               <       高優先順序
                               s       包含子進程
                               +       後臺進程
                               l       指多線程
           START          指的是該進程的啟動時間。
           TIME           指的是該進程占用 CPU 的時間(即運行時間)。
           COMMAND        指的是該進程的名字。
    
    -le 輸出格式:
        F S  UID  PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY  TIME CMD
        其中:
            F          指的是進程的許可權。
                        1 表示進程可以被覆制,但是不能被執行。
                        4 表示進程使用管理員許可權。
            S          指的是該進程狀態。
                           D       睡眠狀態,不可被喚醒。
                           S       睡眠狀態,可被喚醒。
                           R       線程正在運行狀態。
                           T       線程停止狀態。
                           X       線程死亡狀態。
                           Z       僵屍進程,進程已終止,但仍有部分程式在記憶體。
            UID         指的是運行該進程的用戶的 ID
            PID         指進程的 ID
            PPID        指進程的父進程 ID
            C           指該進程占用 CPU 資源的百分比,占用越高越耗費資源。 
            PRI         priority,指該進程的動態優先順序,數值越小,優先順序越高。由內核動態調整, PRI(最終值) = PRI(原始值) + NI。
            NI          nice,指該進程的靜態優先順序,可手動修改,範圍 -20 ~ 19,數值越小,優先順序越高。普通用戶只能調整自己的進程且只能調高 NI, 範圍為 0 ~ 19。
            ADDR        指該進程在記憶體的地址。
            SZ          指該進程占用的記憶體空間。
            WCHAN       指該進程是否運行, - 表示運行。
            TTY         指該進程在哪個終端上運行
            TIME        指的是該進程占用 CPU 的時間(即運行時間)。
            CMD         指的是該進程的名字。
            
    
【舉例:】
    [root@localhost test]# ps aux | grep pts/*
    [root@localhost test]# ps -le | grep pts/*
    [root@localhost test]# ps -l

 

 

 

7、pstree(以樹形結構顯示進程間的關係)

【格式:】
    pstree [選項] PID/用戶名
註:
    選項:
        -p         樹的節點上顯示 PID

【舉例:】
    [root@localhost test]# pstree -p

 

 

 

8、top(動態查看進程的運行狀態)

  提供一個交互界面,可以方便查看進程的運行狀態。

【格式:】
    top [選項]
註:
    選項:
        -d 秒數          指定每個幾秒 更新一次 top,預設 3-n 次數          指定 top 執行的次數
        -b              批處理輸出,一般與 -n 連用,將 top 內容重定向到文件
        -p PID          查看指定 PID 的進程
        -u 用戶名        查看指定 用戶 的進程

【舉例:】
    [root@localhost test]# top -p 1,2 -b -n 2 > test.txt &

 

 

 

  top 輸出分析:

 

 

 

【top 輸出第一行:(顯示系統信息)】
    top - 14:41:14 up 1 day, 23:00,  1 user,  load average: 0.00, 0.01, 0.05
註:
    14:41:14                          表示當前系統時間
    up 1 day, 23:00                   表示當前系統運行時間
    1 user                            表示當前登錄系統的用戶總數為 1
    load average: 0.00, 0.01, 0.05    表示系統在前 1 分鐘、5 分鐘、15分鐘的平均負載。
    
【top 輸出第二行:(顯示進程信息)】
    Tasks:   2 total,   0 running,   2 sleeping,   0 stopped,   0 zombie
註:
    2 total                 表示當前查詢到的進程總數為 2
    0 running               表示正在運行的進程數為 0
    2 sleeping              表示正在睡眠的進程數為 2
    0 stopped               表示正在停止的進程數為 0
    0 zombie                表示僵屍進程數為 0
    
【top 輸出第三行:(顯示 CPU 信息,網上白嫖的,不太明白具體含義,混個眼熟)】
    %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
註:
    0.0 us               表示用戶模式占用 0%
    0.0 sy               表示系統模式占用 0%
    0.0 ni               表示改變過優先順序的進程占用 0%
    100.0 id             表示空閑 CPU 占用 100.0%
    0.0 wa               表示等待輸入、輸出進程占用 0%
    0.0 hi               表示硬中斷請求服務占用 0%
    0.0 si               表示軟中斷請求服務占用 0%
    0.0 st               表示虛擬時間百分比
    
【top 輸出第四行:(顯示物理記憶體信息)】
    KiB Mem :  3861364 total,  2133256 free,   935192 used,   792916 buff/cache
註:
    3861364 total              物理記憶體總量  
    2133256 free               空閑記憶體量
    935192 used                已使用記憶體量
    792916 buff/cache          緩衝、緩存記憶體量
註:
    buff      緩衝,向硬碟寫數據時,將數據先放置在緩衝區,再一次寫入,提高數據寫入的性能。
    cache     緩存,從記憶體中讀數據時,將數據先放置在緩存區,再一次讀入,挺高數據讀取的性能。

【top 輸出第五行:(顯示交換分區信息)】
    KiB Swap:  2097148 total,  2097148 free,        0 used.  2622372 avail Mem
註:
    2097148 total              交換分區總量  
    2097148 free               空閑交換分區量
    0 used                     已使用交換分區量
    2622372 avail Mem          可用分區量

【top 輸出第七行:】
        PID USER  PR  NI  VIRT  RES  SHR S  %CPU %MEM   TIME+ COMMAND
        其中
            PID        指進程 ID
            USER       指進程所屬的用戶
            PR         指進程動態優秀級
            NI         指進程靜態優先順序
            VIRT       指進程占用的虛擬記憶體大小
            RES        指進程占用的物理記憶體大小
            SHR        指進程占用的共用記憶體大小
            S          指進程狀態(stat%CPU       指進程占用 CPU 百分比
            %MEM       指進程占用 記憶體 百分比
            TIME+      指進程占用 CPU 的時間
            COMMAND    指進程名

    交互界面常用按鍵:
        Q           退出 top 。(Ctrl + C 也行)
        P           按照 CPU 占用率降序排序(預設, %CPU)。
        M           按照 記憶體 使用率降序排序(%MEM)。
        N           按照 PID 降序排序(PID)。
        T           按照 占用 CPU 時間排序(TIME+)。

 

9、lsof(顯示進程打開的文件)

【格式:】
    lsof [選項]
註:
    -c 字元串       列出以字元串開頭的進程打開的文件
    -u 用戶名       列出某用戶的進程打開的文件
    -p PID         列出某進程打開的文件
    +d 文件路徑     列出某個目錄下打開的文件
        
【舉例:】
    [root@localhost test]# lsof +d  /usr/bin

 

 

 

10、kill、killall、pkill(終止進程)

  kill 向操作系統發送一個信號和進程PID,操作系統根據該信號類型對進程處理。
  kill 指令不一定能終止進程,只有系統接收終止信號併成功處理才會終止進程。
  kill 只能根據 PID 去終止進程。
  killall 通過進程名去終止一系列進程。
  pkill 通過進程名去終止一系列進程,可以用於踢出登陸的用戶。

kill 格式:】
    kill [信號] PID
註:
    常用信號:
        -1       重啟進程
        -2       結束進程,並不強制,比如 Ctrl + C
        -9        強制終止進程
        -15       預設信號,正常結束進程         

【killall 格式:】
    killall [選項] [信號] 進程名
註:
    選項:
        -i         提示信息
        -l         忽略進程名大小寫

【pkill 格式:】
    pkill [信號]  進程名         
    pkill [-t 終端號(TTY)]
     

【舉例:】
    [root@localhost ~]# kill -9 7777
    [root@localhost ~]# killall -9 sshd
    [root@localhost ~]# pkill -9 sshd
    [root@localhost ~]# kill -9 -t pts/1

 

11、jobs、fg、bg(後臺命令管理)

  對於一些執行時間較長的命令,如果使用前臺交互的方式,則需要等待很長時間,一般將其放到後臺處理,這樣前臺可以操作其他命令,提高工作效率。
  在命令後添加" &",&前有空格,則該命令將轉為後臺執行,並返回一個進程 PID,但是如果命令有輸出,仍會輸出到屏幕。一般可以將輸出重定向到某個文件。
  使用快捷鍵 Ctrl + Z 可以掛起進程,後臺可見。
  使用快捷鍵 Ctrl + C 可以終止進程。
  使用命令 jobs 可以查看當前終端放入後臺的進程。
  使用命令 bg 可以將後臺進程在後臺執行。
  使用命令 fg 可以將後臺進程轉為前臺執行。

【後臺命令格式:】
    命令 &

【jobs 格式:】
    jobs [選項]
註:
    選項:
        -l              列出所有進程併列出進程的 PID
        -p              只列出進程的 PID
        -r             只列出運行中的進程
        -s             只列出停止的進程

【bg 格式:】
    bg %N
註:
        使用命令 bg %N 可以使掛起的第 N 個線程在後臺運行,若沒有 %N,則表示執行最後一個進程。

【fg 格式:】
    fg %N           
註:    
    使用命令 fg %N 可以使掛起的第 N 個線程在前臺運行,若沒有 %N,則表示執行最後一個進程。
  
  註:
      對於後臺運行的進程,仍會將結果輸出到控制台,干擾工作,
      所以如果後臺執行的進程有大量輸出,可以將其重定向到某個文件。
      比如:
          想要後臺執行 find / -name "*" ,
          可以寫成  find / -name "*" > test.txt &  
          文件名可以任意取,但是最好不要與目錄下的文件重名。
 
【舉例:】
    [root@localhost test]#  find / -name "*" > test.txt &

 

 

 

12、crontab(設置定時任務調度)

  任務調度指的是系統在某個時間執行特定的命令或程式。
  可以查看配置文件 /etc/crontab.

 

 

 

【格式:】
    crontab [選項]
註:
    選項:
        -e       編輯定時任務,會打開一個空文件,與 vim 操作一致。
        -l       查詢定時任務
        -r       刪除當前用戶所有定時任務

    編輯格式說明:
        * * * * * 命令
        其中:
            第一個 * 號表示 分鐘(0 - 59)。
            第二個 * 號表示 小時(0 - 13)。
            第三個 * 號表示 月中的天數(1 - 31)。
            第四個 * 號表示 月(1 - 12)。
            第五個 * 號表示 星期(0 - 7, 其中 07 均表示星期天)。
         
         時間可以用特殊符號組合:
             逗號 , 表示不連續的時間,比如 "1, 3, 7 * * * * 命令",表示每小時的 137 分鐘執行一次。
             減號 - 表示連續時間,比如 "1-3 * * * * 命令",表示每小時的 13 分鐘執行一次命令。
             除號 / 表示每隔多久執行一次,比如 "*/3 * * * * 命令",表示每隔 3 分鐘執行一次命令。
         
         註意事項:
             最小有效時間為 分鐘,最大有效時間為 月,即不能指定秒、年去執行。
             5個時間以及命令不可省,不確定時間可以使用 * 表示任意時間。
             日期與星期儘量不要同時設置,容易出錯。

【舉例:】
    [root@localhost ~]# crontab -e
    [root@localhost ~]# crontab -l
    * * * * * /usr/bin/ll >> /root/test/hello.txt

 

 

 

  若出現無法執行 crontab 任務的情況,排查錯誤。
  Step1:查看語法是否正確,是否添加任務成功。
    使用 crontab -e 編輯後,一般存放於 /var/spool/cron/用戶名 下。

* * * * * ll >> /root/test/hello2.txt

 

 

 

  Step2:查看 crond 任務是否正常啟動。(一般開機自啟動,可選操作)
    crond 服務是 crontab 的守護線程。

service crond status               查看 crond 的狀態
service crond start/stop/restart   啟動/停止/重啟 crond 服務 

 

 

 

  Step3:查看任務日誌是否正確執行。(出現錯誤會發送郵件 Mail)

【查看任務執行日誌】
    tail -f /var/log/cron          可以不停的監聽文件的變化
    
【查看郵箱:】
    tail -f /var/spool/mail/root 

 

 

 

  Step4:修改錯誤即可。

[root@localhost test]# crontab -e
* * * * * /usr/bin/ls >> /root/test/hello2.txt
[root@localhost test]# crontab -l

 

 

 

  Step5:如果執行沒效果,也沒有收到郵件,可以查看郵件是否配置有問題,找到 /etc/postfix/main.cf,修改裡面的內容。

【編輯文件:】
    vim /etc/postfix/main.cf

【修改內容:】
    inet_interfaces = all
    inet_protocols = all

 

 

 

  Step6:重啟 postfix 服務

service postfix restart

service postfix status      

 

  Step7: 可能存在重啟 postfix 失敗的情況(視情況分析)
    我遇到的情況是 缺少 libmysqlclient.so.18 依賴。查找 find / -name "*libmysqlclient.so.18*" , 確實不存在該文件。
    裝 mysql 的時候漏了,mysql-community-libs-compat-8.0.11-1.el7.x86_64.rpm,下載安裝後,成功解決。

 

二、用戶、用戶組管理

  用於管理用戶,對於伺服器而言,是由一個團隊進行維護,而不同的用戶所對應的許可權應該是不同的,這樣可以提高安全性。

1、用戶、用戶組

(1)用戶
  Linux 是多用戶多任務的操作系統,即 Linux 支持多個用戶同一時間登陸。
  不同的用戶具備不同的操作許可權,在許可權內完成相應的任務,從而達到多用戶多任務的性能。
  想要登陸 Linux,需要向系統管理員申請一個用戶名,這個用戶名是唯一的(UID號唯一),每個用戶分別對應自己的家目錄(家目錄一般為 /home/用戶名)。

(2)用戶組
  用戶組是具有相同特征的用戶的集合,可以簡化用戶的管理。
舉例:
  對於某個文件,某些用戶只有讀的許可權,現在需要給用戶添加寫的許可權,如何做?
  方式一:可以一個用戶一個用戶的添加許可權,但是如果用戶過於龐大,這樣效率太低。
  方式二:可以增加一個用戶組,這個組對該文件有寫的許可權,將用戶歸於這個組,則用戶就擁有了寫的許可權。之後通過操作用戶組,可以很方便的修改多個用戶的許可權。

(3)用戶、用戶組之間的關係
  一對一:即一個用戶對應一個用戶組,該用戶具備該組的許可權。
  一對多:即一個用戶對應多個用戶組,該用戶具備多個組的許可權。
  多對一:即多個用戶對應一個用戶組,這些用戶具備同一個組的許可權。
  多對多:即一個用戶可以存在多個用戶組中。一個用戶組可以存在多個用戶。

(4)UID、GID
  UID 指的是用戶 ID,即 User ID,用於指明用戶。
  GID 指的是組 ID,即 Group ID,用於指明用戶所屬的組。

2、配置文件

(1)/etc/passwd
  是系統用戶的配置文件,存儲了系統中所有用戶的基本信息,且所有用戶對其都有讀的許可權。

【格式:】
    用戶名:密碼:UID:GID:描述信息:主目錄:預設shell
    
註:
    :   
        表示分隔符,沒有實際意義。
    
    用戶名:
        指代表用戶身份的字元串。
    
    密碼:
        x  表示用戶設有密碼,密碼存放在 /etc/shadow。
      
    UID:
        即用戶 ID,範圍 0 ~ 65535.
        0 表示系統管理員。
        1 ~ 499 系統用戶。
        500 ~ 65535 普通用戶。
        
    GID:
        即初始組 ID。用於標識當前用戶存在於哪個組。
        初始組:用戶創建的同時創建的組。
        附加組:用戶切換的組(非初始組)。
        比如:
            root 用戶創建時產生一個 root 組,手動增加一個 user 組,並將 root 用戶添加到 user 組中,
            那麼 root 組即為初始組,user 組為附加組。
        
    描述信息:(可選)
        描述用戶。
        
    主目錄:
        即用戶的家目錄,比如 root 的家目錄為 /root,普通用戶的家目錄為 /home/用戶名。
        
    預設 shell :
        shell 是 Linux 的命令解釋器(預設 bash),即將命令轉換成機器語言,從而被電腦執行。
        /bin/bash       相當於正常用戶,可以使用命令行敲命令。
        /sbin/nologin   不能正常登陸系統,不可以使用命令行。
        
【舉例:】
    [root@localhost ~]# cat /etc/passwd | grep root
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin

 

 

(2)/etc/shadow
  用戶保存用戶的密碼,只有 root 用戶擁有讀許可權,其餘用戶不行。
  若忘記 root 密碼,可以通過單用戶模式,利用 passwd 去修改密碼。

【格式:】
    用戶名:加密的密碼:最後一次修改的時間:最小修改時間間隔:密碼有效期:密碼變更前的警告天數:密碼過期的寬限時間:賬號失效時間:保留欄位
註:
    :   
        表示分隔符,沒有實際意義。
    
    用戶名:
        指代表用戶身份的字元串。
        
   加密的密碼:
       採用 SHA512 散列加密,* 或者 !! 表示需要密碼登陸。
       
   最後一次修改的時間:
       指的是從 1970年1月1日開始計算的天數。
       
   最小修改時間間隔:
       指的是密碼修改時間間隔,若為 0 表示隨時可以修改,若為 10 表示 10 天後才可修改。
   
   密碼有效期:
       預設為 99999 天,相當於長期有效。
   
   密碼變更前的警告天數:
       距離密碼過期的前 n 天,發送變更密碼的消息。
   
   密碼過期的寬限時間:
       即密碼失效後,在 n 天內仍可以登陸,但之後就不能登陸了。
       
   賬號失效時間:
       從 1970年1月1日,開始計算,超過時間則賬號不能使用。
   
   保留欄位:
       保留。     
    
【舉例:】
    [root@localhost ~]# cat /etc/shadow | grep root
    root:$6$6GJnWVfg$Nu15dt6dcFscJ.HOPeHeh50aUiKjzqqQgSiTHwequ7AIWEidI5UyFvPXymyMXfLolT.czNsSEHnLYcABVnhes1:18346:0:99999:7:::

 

 

(3)/etc/group
  用於存放組的信息。

【格式:】
    組名:密碼:GID:用戶列表(附加組)
註:
    :   
        表示分隔符,沒有實際意義。
    
    組名:
        用戶組名稱。
        
    密碼:
        x 表示密碼,存放於 /etc/gshadow 中。
        
    GID:
        用戶組 ID。
        
    用戶列表:
        列出每個組包含的用戶。若為初始組,則不顯示。

【舉例:】
    [root@localhost ~]# cat /etc/group | grep root
    root:x:0:

 

 

(4)/etc/gshadow
  用於存放組的密碼。

 

【格式:】
    組名:加密密碼:組管理員:組用戶列表

註:
    :   
        表示分隔符,沒有實際意義。
        
    組名:
        用戶組名稱。
        
    加密密碼:
        為 空 表示沒有密碼(通常沒有密碼)。
        
    組管理員:
        用於管理組(基本不用)。
        
    組用戶列表:
        顯示用戶。

【舉例:】
    [root@localhost ~]# cat /etc/gshadow | grep root
    root:::

 

 

3、useradd(添加用戶)

  用戶添加用戶。

【格式:】
    useradd [選項] 用戶名
註:
    預設情況下, useradd 使用了很多選項內容,不用專門指定。
    選項:
        -g 組名   指定初始組。
        -G 組名   指定附加組。
        -u UID    指定用戶 ID。
        -d /目錄   指定用戶家目錄(指明絕對路徑)。
        -s shell  指定預設的shell(預設 /bin/bash)。
        
【舉例:】
    [root@localhost ~]# useradd jack
    [root@localhost ~]# cat /etc/passwd | grep jack
    [root@localhost ~]# cat /etc/shadow | grep jack
    [root@localhost ~]# cat /etc/group | grep jack
    [root@localhost ~]# cat /etc/gshadow | grep jack

 

 

4、passwd(修改用戶密碼)

  用於指定用戶密碼、修改用戶密碼。

【格式:】
    passwd [選項] 用戶名
 註:
     選項:
         -S   用於查看用戶密碼狀態,僅 root 用戶可用。
         -l   用於鎖定用戶(即密碼失效),不准用戶登錄,僅 root 用戶可用。
         -u   用於解鎖用戶(與 -l 對應),僅 root 用戶可用。

【舉例:】
    [root@localhost ~]# passwd jack
    [root@localhost ~]# passwd -S jack

 

 

5、id、whoami、who am i(查詢用戶信息)

  id 用於顯示當前用戶、用戶組、以及組信息。
  whoami 用於顯示當前操作的用戶的名稱。
  who am i 用於顯示當前登錄用戶的名稱。

id 格式:】
    id [選項] 用戶名
註:
    選項:
        -un    顯示用戶名
        -g     顯示用戶組 ID

【whoami 格式:(等價於 id -un)】
    whoamiwho am i 格式:】
    who am i

【舉例:】
    [root@localhost ~]# id root
    [root@localhost ~]# whoami
    [root@localhost ~]# who am i

 

 

6、userdel(刪除用戶)

  用於刪除用戶、用戶家目錄。
  刪除 /etc/passwd 等配置文件中相關信息。

【格式:】
    userdel [選項] 用戶名
註:
    選項:
        -r         表示刪除用戶的同時刪除用戶家目錄。

【舉例:】
    [root@localhost ~]# find / -user jack
    [root@localhost ~]# userdel jack

 

 

7、su(切換用戶)

  用於實現多個用戶間來回切換。許可權高的用戶切換到許可權低的用戶,不需要密碼,反之需要。
  使用 exit 退出切換的用戶。

【格式:】
    su [選項] 用戶名
註:
    選項:
        -   切換用戶,且同時切換工作環境(環境變數改變)。

【舉例:】
    [root@localhost ~]# su - lyh
    [lyh@localhost ~]$ exit

 

 

8、usermod(修改用戶信息)

  用於修改用戶、用戶組的相關信息。
  基本與 useradd 類似,是對 useradd 的一個補充。

【格式:】
    usermod [選項] 用戶名
註:
    選項:
        -c     修改用戶描述信息,修改 /etc/passwd 文件。
        -d     修改用戶的主目錄,修改 /etc/passwd 文件。
        -u     修改用戶的用戶ID,修改 /etc/passwd 文件。
        -g 組名    修改用戶的初始組,修改 /etc/passwd 文件。
        -G 組名    修改用戶的附加組,即相當於將用戶加入其他組,修改 /etc/group 文件。每次修改會覆蓋掉之前的修改。
        -s    修改用戶的預設shell。
    
【舉例:】
    [root@localhost ~]# usermod -G root lyh

 

 

9、groupadd(添加用戶組)

【格式:】
    groupadd [選項] 組名
註:
    選項:
        -g GID   指定用戶組 GID
        -r       創建系統用戶組

【舉例:】
    [root@localhost ~]# groupadd testGroup1
    [root@localhost ~]# groupadd -g 1010  testGroup2
    [root@localhost ~]# groupadd -r testGroup3
    [root@localhost ~]# cat /etc/group | grep testGroup*

 

 

10、groupdel(刪除用戶組)

  慎用,隨意刪除用戶組可能導致系統不能正常運行。

【格式:】
    groupdel 用戶組名
    
【舉例:】
    [root@localhost ~]# groupdel testGroup1

 

 

11、groupmod(修改用戶組)

【格式:】
    groupmod [選項] 組名
註:
    -g GID            修改組 ID
    -n 新組名          修改組名
    
【舉例:】
    [root@localhost ~]# groupmod -g 1010 testGroup1
    [root@localhost ~]# groupmod -n testGroup2 testGroup1

 

 

12、gpasswd(管理用戶組)

  gpasswd 可以管理用戶組,交換控制許可權、移除添加用戶等。
  usermod 可以修改用戶的附加組,但每次修改都會移除上一次的修改記錄,但是使用 gpasswd 不會。

【格式:】
    gpasswd [選項] 組名
註:
    選項:
        -A user1,user2...       將組控制許可權給 user1...等用戶,僅 root 操作
        -M user1,,user2...      將 user1,user2... 加入組中
        -a user                 將用戶加入組
        -d user                 將用戶從組中移除

【舉例:】
    [root@localhost /]# gpasswd -M jack1,jack2 testGroup2

 

 

三、文件許可權管理

  所謂文件許可權管理,即針對不同的用戶設置不同的文件訪問許可權(讀、寫、執行)。
比如:
  一臺伺服器由一個團隊在維護,如果每個人都用 root 許可權,那麼刪庫跑路等亂搞系統的事情難免發生。應該對不同的用戶,設置不同的文件訪問許可權,這樣才可以防止進行一些誤操作。

1、文件許可權分析

(1)可以使用 ls - l 查看文件許可權。

【格式:】
    文件類型、許可權   目錄個數或者硬鏈接個數  用戶名  組名   文件、目錄大小  最後修改日期   文件、目錄名
     
【舉例:】
    drwxr-xr-x. 2 root root   53 3月  24 17:38 test
分析:
    drwxr-xr-x    指的是文件類型、許可權。由 10 個字元組成。
    其中
       第一個字元:  d 指的是  文件類型(d 為目錄, - 為文件, l 為鏈接,還有 b ,c, s等)
      第二 ~ 四字元:  rwx 指的是文件擁有者的許可權,即 User 的許可權。r 表示可讀、w 表示可寫、x 表示可執行。
      第五 ~ 七字元:  r-x 指的是文件所在組的許可權,即 Group 的許可權。
      第八 ~ 十字元:  r-x 指的是組外其他用戶對該文件的許可權,即 Other 的許可權。         

 

 

(2)文件許可權詳細分析:

文件許可權分三個部分,每個部分分別由三個字元組成(r, w, x)。
    rwx    r-x     r-x
        
    rwx 對於目錄來說
        r 表示可查看目錄(ls)。
        w 表示可創建、刪除、重命名目錄。
        x 表示可以進入該目錄。
        - 表示沒有該許可權。
        
   rwx 對於文件來說
        r 表示可查看、讀取文件。
        w 表示可修改文件,但不一定能刪除(只有目錄有 w 許可權後才能刪除)。
        x 表示可以執行該文件。
        - 表示沒有該許可權。
        
    可以通過數字表示文件許可權。
        r = 4w = 2, x = 1.
       rwx    r-x     r-x   可以表示為  7 5 5。
       
文件許可權三部分分別為 : 
    文件所屬用戶的許可權   
    文件所屬組的許可權(也即組內其他用戶的許可權)  
    組外其他用戶對該文件的許可權
    
【舉例:】
    現有一個文件夾 java,三個用戶 jack1, jack2, jack3,兩個組 testGroup1, testGroup2.
    其中 jack1,jack2 屬於 testGroup1 組。jack3 屬於testGroup2 組。
    
    修改 java 文件夾用戶、用戶組,使文件夾所屬用戶為 jack1,所屬用戶組為 testGroup1。
    修改 java 文件夾許可權為 750,即 rwx r-x ---
    則 jack1 擁有 rwx 許可權。因為jack1 屬於文件所屬用戶。
    jack2 擁有 r-x 許可權。因為 jack2 不屬於文件所屬

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

-Advertisement-
Play Games
更多相關文章
  • 點點這個鏈接免費獲取:本人免費整理了Java高級資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分散式等教程,一共30G,需要自己領取。傳送門:https://mp.weixin.qq.com/s/osB-BOl6W-ZLT ...
  • (來自《電腦網路:自頂向下方法》) 程式實現將小寫字母變為大寫 伺服器端: from socket import * serverPort = 12000 #創建一個伺服器埠 serverSocket = socket(AF_INET, SOCK_STREAM) #創建一個TCP套接字 serv ...
  • 1. 前言 什麼是故障藝術(Glitch Art 風)?我們熟知的抖音的 LOGO 正是故障藝術其中一種表現形式。它有一種魔幻的感覺,看起來具有閃爍、震動的效果,很吸引人眼球。故障藝術它模擬了畫面信號出現故障導致成像錯誤的感覺。青色色塊與紅色色塊無法重合就是這種故障的體現。從膠片時代開始到今天的數位 ...
  • wpf 程式集中 類命名空間名稱和類名不能相同,否則在 xaml生成 i.g.cs時,會導致 自動生成代碼無法推到處是類型還是命名空間的問題。 觸發這個錯誤的條件是類命名空間 與 類名相同 並 在usercontrol中 使用usercontrol 並給 第二個usercontrol 設置x:nam ...
  • MongoDB多條件查詢的寫法著實費了些功夫, 撰文記錄一下 ...
  • 昨晚對項目程式進行重構,發現一些數據冗餘非常嚴重,一些貨幣,單位等靜態數據N個頁面均有從資料庫獲取。 因此,Insus.NET想到了,把它們寫成一個通用的方法。在頁面中,直接去執行此通用的方法即可。 代碼示例大約如下: 公共函數: function httpRequestEvent(type, ur ...
  • 用.net Core 編寫的T4模板類, 在T4里引用運行時,會有 錯誤 正在運行轉換: System.IO.FileNotFoundException: 未能載入文件或程式集“System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyTo ...
  • wget是在linux下最常用的下載的工具,支持多種條件的下載。 普通下載 wget http://example.com/file.iso 指定保存文件名 wget ‐‐output-document=myname.iso http://example.com/file.iso 保存到指定目錄 w ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...