一、系統管理類指令 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 表示上一次運行級別為 5, 3 表示當前系統運行級別為 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, 其中 0 和 7 均表示星期天)。 時間可以用特殊符號組合: 逗號 , 表示不連續的時間,比如 "1, 3, 7 * * * * 命令",表示每小時的 1, 3, 7 分鐘執行一次。 減號 - 表示連續時間,比如 "1-3 * * * * 命令",表示每小時的 1 到 3 分鐘執行一次命令。 除號 / 表示每隔多久執行一次,比如 "*/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)】 whoami 【who 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 = 4, w = 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 不屬於文件所屬