top,job,user,file,alias
阿新 • • 發佈:2017-09-25
log 內存交換 使用 附加 總數 shared bean 行程 lin 1、系統進程
2、系統資源管理
3、作業管理
4、用戶管理
5、文件權限
6、別名定義
一、系統進程
1、進程的定義
進程是操作系統的概念,每當我們執行一個程序時,對於操作系統來講就創建了一個進程,在這個過程中,伴隨著資源的分配和釋放。可以認為進程是一個程序的一次執行過程。
實際上,當計算機開機的時候,內核(kernel)只建立了一個init進程。Linux內核並不提供直接建立新進程的系統調用。剩下的所有進程都是init進程通過fork機制建立的。新的進程要通過老的進程復制自身得到,這就是fork。fork是一個系統調用。進程存活於內存中。每個進程都在內存中分配有屬於自己的一片空間 (address space)。當進程fork的時候,Linux在內存中開辟出一片新的內存空間給新的進程,並將老的進程空間中的內容復制到新的空間中,此後兩個進程同時運行。
老進程成為新進程的父進程(parent process),而相應的,新進程就是老的進程的子進程(child process)。一個進程除了有一個PID之外,還會有一個PPID(parent PID)來存儲的父進程PID。如果我們循著PPID不斷向上追溯的話,總會發現其源頭是init進程。所以說,所有的進程也構成一個以init為根的樹狀結構。
2、查詢進程——ps
# ps -eo pid,ppid,nice --列出子進程與父進程,進程優先級,還可自己加要列出的項
# ps -aux | head --查看前十行進程,顯示信息詳情如下:
USER: 執行者 PID: 進程號 %CPU: CPU資源百分比 %MEM: 物理內存百分比
VSZ: 使用虛擬內存 RSS: 占用的固定內存量 TTY: 在哪個終端機上運作
START: 該進程被觸發的時間 TIME: 該進程實際使用CPU的時間
COMMAND: 創建該進程的程序的實際指令 STAT: 狀態,主要狀態有:
R 正在運行,或在隊列中的進程 S 處於休眠狀態,可被 signal 喚醒
T 停止或被追蹤 Z 僵屍進程(該程序應該已經終止,但是其父程序卻無法正常的終止他)
X 死掉的進程 < 高優先級 n 低優先級 L 分頁在內存中鎖定(對於實時和自定義IO)
s 包含子進程 l 多線程(使用CLONE_THREAD,類似NPTL線程) + 位於後臺的進程組
3、性能分析工具——top
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。
top顯示系統當前的進程和其他狀況,是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態;
如果在前臺執行該命令,它將獨占前臺,直到用戶終止該程序為止;
比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表;
該命令可以按CPU使用.內存使用和執行時間對任務進行排序;
而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定.
# top --詳解如下:
@@第一行是任務隊列信息,等同於單獨命令 uptime:
11:14:54 (當前時間) up 1:42, (系統運行時間) 1 user, (當前登錄用戶數) load average: 0.00, 0.00, 0.00 (系統負載,即任務隊列的平均長度。三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。)
@@第二行為進程的信息。
153 total, (進程總數) 1 running, (正在運行數) 152 sleeping, (睡眠的進程數) 0 stopped, (停止的進程數) 0 zombie (僵屍進程數)
@@第三行為CPU的信息。當有多個CPU時,這些內容可能會有甚至超過兩行。
0.7%us, (用戶空間占用CPU百分比) 0.3%sy, (內核空間占用CPU百分比) 0.0%ni, (用戶進程空間內改變過優先級的進程占用CPU百分比)
99.3%id, (空閑CPU百分比) 0.0%wa, (等待輸入輸出的CPU時間百分比) 0.0%hi, (硬件CPU中斷占用百分比)
0.0%si, (軟中斷占用百分比) 0.0%st (虛擬機占用百分比)
@@最後兩行為內存信息,類似於 free -m
Mem: 1012348k total, (物理內存總量) 380664k used, (使用的物理內存總量) 631684k free, (空閑內存總量) 62524k buffers (用作內核緩存的內存量)
Swap: 2047992k total, (交換區總量) 0k used, (使用的交換區總量) 2047992k free, (空閑交換區總量) 123636k cached (緩沖的交換區總量,內存中的內容被換出到交換區,而後又被換入到內存,但使用過的交換區尚未被覆蓋,該數值即為這些內容已存在於內存中的交換區的大小,相應的內存再次被換出時可不必再對交換區寫入。)
@@進程信息區統計信息區域的下方顯示了各個進程的詳細信息。首先,認識下各列含義
a PID 進程id
b PPID 父進程id
c RUSER Real user name
d UID 進程所有者的用戶id
e USER 進程所有者的用戶名
f GROUP 進程所有者的組名
g TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
h PR 優先級
i NI nice值。負值表示高優先級,正值表示低優先級
j P 最後使用的CPU,僅在多CPU環境下有意義
k %CPU 上次更新到現在的CPU時間占用百分比
l TIME 進程使用的CPU時間總計,單位秒
m TIME+ 進程使用的CPU時間總計,單位1/100秒
n %MEM 進程使用的物理內存百分比
o VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
p SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。
q RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
r CODE 可執行代碼占用的物理內存大小,單位kb
s DATA 可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb
t SHR 共享內存大小,單位kb
u nFLT 頁面錯誤次數
v nDRT 最後一次寫入到現在,被修改過的頁面數。
w S 進程狀態(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵屍進程)
x COMMAND 命令名/命令行
y WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
z Flags 任務標誌,參考 sched.h
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列;
更改顯示內容通過 f 鍵可以選擇顯示的內容;
按 o 鍵可以改變列的顯示順序。
按大寫的 F 或 O 鍵,然後按 a-z 可以將進程按照相應的列進行排序。而大寫的 R 鍵可以將當前的排序倒轉。
按 < > 翻頁
# top -d 1 --1秒刷新一次 (默認是3秒)
# top -n 10 --刷新10次就退出
# top -b -d 1 | grep -E ‘root.*top‘ --持續監視 top 進程的信息變化
4、進程優先級控制——nice
進程優先級用nice 來表示,的範圍是-20 至 19,數值越小,優先級越大
普通用戶可以指定0-19這個範圍之內的優先級來運行程序,如果普通用戶要調整運行中的程序的話,只能把數值調大,不能調小。小於零的優先級只有root權限才能使用。
優先級對進程的執行有什麽影響?優先級高的進程可以獲得更多的系統資源,這個在系統處於高負荷的狀態時比較明顯。
# nice -n 19 gedit --以指定優先級(19)運行程序gedit
# renice -n 19 1234 --把pid為1234的進程的優先級調為19
# ps -eo pid,nice | grep pid --可以通過相關進程號查看優先級是否為我們所設置
3.1、假設CPU有2個核心,可以用以下方法來測試優先級對程序執行的影響:
# time nice -n 0 cat /dev/urandom > /dev/null --使用0優先級,占用第一個核心
# time nice -n 0 cat /dev/urandom > /dev/null --使用0優先級,占用第二個核心
# time nice -n 19 head -c 1m /dev/urandom > /dev/null
# time nice -n 19 head -c 1m /dev/urandom > /dev/null
5、結束進程——kill/pkill
kill命令用來終止指定的進程(terminate a process)的運行。一般,終止前臺進程可以使用Ctrl+C鍵,但是,後臺進程就須用kill命令來終止,我們需要先使用 ps/pidof/pstree/top/lsof 等工具獲取進程PID,然後使用kill來殺掉進程。kill命令是通過向進程發送指定的信號來結束相應進程的。在默認情況下,kill會發出終止信號(15),這個信號可以被進程捕獲,使得進程在退出之前可以清理並釋放資源。也可以發送其他的信號。並且只有第9種信號(SIGKILL)才可以無條件終止進程,其他信號進程都有權利忽略。
# kill -l --列出全部的信號名稱。如下為常用的信號:
HUP 1 終端斷線 INT 2 中斷(同 Ctrl + C) QUIT 3 退出(同 Ctrl + \) TERM 15 終止
KILL 9 強制終止 CONT 18 繼續(與STOP相反, fg/bg命令) STOP 19 暫停(同 Ctrl + Z)
# pkill tail --根據正在運行的進程名殺死進程
6、進程拓展
# lsof /etc/passwd --查看一個文件被那個進程打開
# lsof -p pid --查看一個進程打開了哪些文件
# lsof -c tail --查看一個程序打開了哪些文件,這個與上面的進程號相對應
# lsof +d /etc --顯示該目錄下被進程打開的文件
# lsof +D /usr/local/ --顯示該目錄下被進程打開的文件;並且遞歸
# lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --IPv4 or IPv6
protocol --TCP or UDP
hostname --Internet host name
hostaddr --IPv4地址
service -- /etc/service中的 service name (可以不止一個)
port --端口號 (可以不止一個)
6.1、恢復刪除的文件
當系統中的某個文件被意外地刪除了,只要這個時候系統中還有進程正在訪問該文件,那麽我們就可以通過lsof從/proc目錄下恢復該文件的內容。 假如由於誤操作將/var/log/messages文件刪除掉了,那麽這時要將/var/log/messages文件恢復的方法如下:
# lsof /var/log/messages --我們看到該文件是正被進程打開著。pid: 1733 FD: 1w
# rm -f /var/log/messages
# lsof | grep /var/log/messages --會發現該文件已經被標記刪除了,並且由該服務/進程打開
# head -n 20 /proc/1733/fd/1 --我們即可到相關的進程目錄查看這個文件,記錄了文件 /var/log/messages 的內容
# /etc/init.d/rsyslog restart --重啟該服務/進程。重新讓其打開我們的文件
二、系統資源管理
# free -m
total used free shared buffers cached
Mem: 988 381 606 0 61 123
-/+ buffers/cache: 196 792
Swap: 1999 0 1999
第一行 Mem。 total 內存總數;used 已使用內存數;free 空閑內存數;buffers buffers緩存內存數;cached Page緩存內存數。
第二行-/+ buffers/cache。used 真實使用的內存數(=Men.(used - buffers - cached))
free 真實空閑的內存數(=Men.(free + buffers + cached))
第三行,指交換分區
# iostat -k 2 5 --每兩秒刷新一次,輸出5次;主要用於監控系統設備的IO負載情況
# vmstat 2 5 --服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況
三、作業管理
Linux的進程有前臺後臺的概念,前臺進程會占用終端,一個終端只能有一個(一組)前臺進程,可以有多個後臺進程,在一個終端下只能管理該終端下的作業。
# gedit & --運行命令gedit 並把它放到後臺執行
# jobs -l --列出當前終端裏所有的後臺進程
# bg 1 --把某個作業號為 1 並處於停止的後臺進程改為運行狀態
# fg 2 --把作業號為 2 的後臺進程放到前臺執行
四、用戶管理
早期的操作系統比如DOS, Windows 98,同時只能允許一個用戶使用操作系統,被稱為單用戶系統。Linux 是多用戶系統,同時可以有多個用戶使用系統。後面課程中的權限、進程、服務常常和用戶這個實體之間存在關系。
1、用戶管理常用操作
useradd, usermod , userdel,groupadd ,groupmod ,groupdel,passwd,gpasswd,id ,finger,chage
1.1、添加用戶
# useradd frank --添加一個用戶
# useradd -u 505 -d /home/frank -G george -s /bin/bash frank --使用參數添加一個用戶
-u(指定用戶uid) -g(如果不指定,系統默認會創建一個與用戶名同名的組,並且加入該組,若指定,盡量不要指定已經存在的目錄)
-G(附加組) -d(家目錄) -s(默認shell)
# vim /etc/passwd --再一種創建用戶的方法
bean:x:506:506::/home/bean:/bin/bash
# vim /etc/shadow
bean:!!:15564:2:14:5:2::
# vim /etc/group
bean:x:506:
# vim /etc/gshadow
bean:!::
# passwd bean
# touch /var/spool/mail/bean
# chown bean:mail /var/spool/mail/bean
# mkdir /home/bean
# cp /etc/skel/.bash* /home/bean/
# chown bean:bean /home/bean -R -R 對文件和目錄遞歸地進行操作
# chmod 700 /home/bean
# id frank --輸出的: gid,影響文件的創建; groups,影響文件的存取
註意: shell 概念,一個提供可以讓用戶輸入指令的界面的程序。在命令界面模式下(文本終端模式),用戶登錄後第一個運行的程序就是shell
# cat /etc/shells --常見的shell
/bin/sh
/bin/bash --開源的,Linux默認的shell
/sbin/nologin -- 非交互式shell,不允許用戶登錄
/bin/tcsh
/bin/csh
1.2、刪除用戶
# userdel frank -r --徹底刪除一個用戶。-r 參數是刪除該用戶的家目錄與郵件文件。
# userdel frank --這三條其實就相當於上面一條
# rm -rf /home/frank/
# rm -rf /var/mail/frank
1.3、修改用戶信息
# passwd frank --如果用戶需要登錄,首次建立必須給予密碼
# echo ‘123‘ | passwd --stdin frank --這也是一種修改密碼的方法
# passwd -e frank
# chage -d 0 frank --用戶下次登錄之後,必須強制修改密碼
# usermod -L frank --鎖定用戶密碼,用戶無法通過密碼來登錄,但是可以通過別的方式登錄,比如ssh證書
# usermod -U frank --解鎖用戶密碼
# usermod -e ‘2016-11-11‘ frank --設定賬戶過期日期。
# usermod -e ‘‘ frank --清除賬戶過期日期
# usermod -g george frank --修改用戶初始組
# usermod -a -G g1,g2,g3 frank --將用戶添加進某幾個組
# usermod -l fran frank --將用戶改名
1.4、組的管理
groupadd <group name> --添加組
groupdel <group name> --刪除組
gpasswd -a <user name> <group name> --將用戶添加進組
gpasswd -d <user name> <group name> --將用戶從組刪除
gpasswd -A u1,u2,u3 <group name> --設置組的管理員列表
gpasswd <group name> --設置組的密碼
組的管理員的權限有: 修改組的密碼; 往組裏面添加用戶;刪除組裏面的用戶
2、Linux 中,系統用戶的信息存放在如下幾個文件中: /etc/passwd;/etc/shadow;/etc/group;/etc/gshadow
2.1、/etc/passwd 用戶基本信息文件
# cat /etc/passwd
fran:x:502:502::/home/frank:/bin/bash
第一列: 名字
第二列: 密碼,為空的話,登錄該用戶不需要密碼
第三列: uid, linux系統根據用戶的uid來進行權限分配, 用uid來區分不同的用戶
第四列: gid, gid的改變也會影響權限
第五列: 註釋,可以根據需要修改
第六列: 家目錄
第七列: 登錄Shell, 登錄shell只是一個程序
note: vim 的語法高亮和filetype有關, 如果我們直接打開/etc/passwd,語法高亮能正常顯示,如果把/etc/passwd 復制到/tmp下面, 再打開/tmp/passwd, 則沒有語法高亮顯示,這個時候,需要運行一個vi的設置命令:set filetype=passwd,即可正常顯示高亮的語法
2.2、/etc/shadow 用戶的密碼信息
# cat /etc/shadow
fran:$6$tCVtLoJW$51V49x8CkvghMUJtdb1zoREFejppbi4bPbsdy0868wWENKNN6Y8EFUq8bkQYXwlG5PmT2Q0oQPi1rsCeFffd3.:0:0:99999:7:::
第一列: 名字
第二列: 加密後的密碼,為空的話,登錄該用戶不需要密碼
第三列: 最後一次密碼修改時間 (距離1970-01-01的天數)
第四列: 密碼的最小有效期(兩次修改密碼相隔的時間不能少於N天,0沒有限制,任何時都能修改)。passwd -n
第五列: 密碼的最大有效期,過了最大有效期,系統會強制用戶修改密碼,改完之後可以登錄。passwd -x || chage -d 0 username
第六列: 密碼過期之前,提前警告的天數。passwd -w 7 || chage -W 7
第七列: 密碼過期後的寬限期,代表密碼過期後是否還能修改密碼後正常登錄.為空,代表什麽時候都可以修改密碼然後正常登錄. 如果密碼過期了,寬限期也到了,用戶就無法修改密碼登錄了,只能聯系系統管理員。passwd -i 3 username || chage -I 3 username
第八列: 賬戶過期日期(距離1970-01-01的天數),如果賬戶過期了,就無法再登錄系統. 不可設成0。usermod -e || chage -E 2015-07-19 bean
第九列: 保留字段,目前不使用.
以上屬性,一般可以通過命令passwd修改,部分屬性還能使用usermod修改。
note: 鎖定用戶密碼,密碼過期,賬戶過期三者的聯系與區別
1. 鎖定用戶密碼,本質上是在/etc/shadow裏,用戶密碼那一欄加上一個感嘆號,相當於改了一個密碼
2. 密碼過期就是密碼失效了,分兩種情況:如果寬限期字段為空的話,系統仍然允許用戶先更新密碼,再登錄,如果寬限期字段設定了一個日期,那麽當寬限期過後,賬戶就變為過期了。
3. 賬戶過期,賬戶一旦過期,就無法再登錄了,需要管理員幫助恢復賬戶。密碼過期+寬限期過期=賬戶過期
在紅帽6.3中,鎖定用戶密碼後,用戶可以通過ssh的證書驗證方式登錄,賬戶過期後用ssh的證書驗證才無法登錄。然而,需要註意的是,賬戶過期之後是否還能登錄是由系統上管理登錄的程序決定的,不同的配置可能會有不同的結果,比如,同樣是在紅帽6.3中,如果配置sshd不使用PAM,那麽就算賬戶過期來,仍然能夠通過證書登錄登錄。
2.3、/etc/group 組的基本信息
# cat /etc/group
frank:x:502:
第一列:組名
第二列:密碼
第三列:組ID
第四列:組用戶列表,當把用戶添加進某個組後,就能在這個列看到該用戶
2.4、/etc/gshadow 組的密碼信息
# cat /etc/gshadow
frank:!::
第一列:組名
第二列:加密後的組密碼
第三列:組管理員列表,管理員可以修改組的密碼,往裏面添加用戶,或刪除裏面的用戶
第四列:組用戶列表(如果是直接修改配置文件的話,這裏的內容應該設成與/etc/group第四列相同),在這裏的用戶可以不用輸入密碼而把有效組切換成該組,不在這裏的用戶則必須輸入組的密碼才能進行切換。
五、用戶對文件權限
Linux 一切皆為文件。普通文件是文件。目錄也是文件,目錄裏的文件列表以及相關信息就是目錄這個特殊文件的內容。
# ls -l /var/ --接下來顯示的信息就是 /var/ 這個目錄文件的內容
1、九字符與八進制權限
# ls -l /etc/passwd
-rw-r--r-- 1 root root 1922 Oct 24 22:48 /etc/passwd
@@用戶對文件的權限就體現在第一列的九個字符中。前面一個字符 ‘-‘ 是指文件類型,權限是接下來的九個字符,分為三組,每組三個字符。從左至右:
第一組的三個字符字符表示擁有者u(user)對該文件的權限。這裏是 rw- 110 6
第二組的三個字符字符表示擁有組g(group)對該文件的權限。這裏是 r-- 100 4
第三組的三個字符字符表示其他人o(other)對該文件的權限。這裏是 r-- 100 4
@@固該文件相關權限可表示為: rw-r--r-- 644
@@每組的三個字符嚴格按順序為: rwx 。若對應位置上為 - 。則沒有相應權限。三字符詳解:
r 讀(read)
針對常規文件: 是否允許可以查看文件的內容
針對目錄: 是否允許可以查看目錄裏的列表
w 寫(write)
針對常規文件: 能夠修改文件的內容
針對目錄: 是否能夠刪除目錄下的文件,重命名文件、修改文件屬性等
x 執行(execute)
針對常規文件: 是否可以執行該文件,一般為可執行文件(命令,程序,腳本等)
針對目錄: 是否可以進入到該目錄
總結: 正常操作一個目錄,至少應該保證r-x
@@文件的歸屬則體現在第二列與第三列。第二列為擁有者,第三列為擁有組。
2、權限設置——chmod
# mkdir /tmp/test
# touch /tmp/test/george
# chmod 760 /tmp/test/george --改變權限
# useradd -G root u1
# useradd u2 --分別使用該兩個用戶去向 george 文件寫入一個腳本,然後在使用 u1,u2,root 三個用戶的身份執行腳本,驗證權限的真正意義
# chmod u=rw,g-w,g+x,o+r george --然後根據這個文件的權限,我們使用三個用戶一一驗證。
註意:超級用戶root,不管他對文件有什麽權限,都不算數,他對文件絕對控制。
3、修改文件的所有者和屬組——chown
# chown u1:u2 george --修改文件的擁有者為u1;擁有組為u2。分隔符還可為字符 ‘.‘
# chown u2 george --修改文件擁有者
# chown .u1 george --修改文件擁有組
# chgrp u2 george --同上
# chown u1:u1 -R /tmp/test/ --遞歸修改,目錄以及目錄裏的所有文件都更改。符號 -R
4、特權為、黏貼位——setuid/setgid/sticky
4.1、setuid特權
在默認情況下,系統運行的所有程序,其運行的過程,稱它為進程。哪個用戶執行該程序,那麽該程序對應的進程的運行身份就是該用戶。
setuid位能夠使程序運行起來後,進程的euid 等於程序文件的uid,而不管是哪個用戶運行了這個程序。
u1$ cat -當 u1 執行 cat 命令,我們可查看進程的運行身份為 u1
# chmod u+s /bin/cat
# chmod 4755 /bin/cat --給 cat 命令加上 setuid。再使用用戶 u1 執行 cat 命令
# ps -aux | grep cat --我們查看 cat 命令對應的進程由誰來執行
# ls -l /usr/bin/passwd --為什麽命令 /usr/bin/passwd 設有setuid位
1. 用passwd 來修改密碼,實質上就是修改/etc/shadow文件
2. 除了root用戶,任何人都無法修改/etc/shadow文件
3. 根據上面兩點,除了root用戶,任何人都無法修改自己的密碼
4. 但是實際工作中,普通用戶應該具有修改密碼的權限
5. setuid位能夠使程序運行起來後,進程的euid 等於程序文件的uid,而不管是哪個用戶運行了這個程序。
6. 因此我們可以利用setuid 這個技術
4.2、setgid特權位
如果針對可執行文件,改變的是命令運行過程中進程的組身份,使用的組身份命令文件的所屬組
如果針對目錄設定,那麽任何人在該目錄下創建子對象,這些對象的所屬組身份都會繼承該目錄的所屬組身份
# chown u1.u1 /tmp/test/ --先將實驗目錄的擁有者與所屬組改為u1
# chmod g+s /tmp/test
# chmod 2777 /tmp/test --給該目錄加上組特權位。然後使用u2到該目錄下創建文件
# ls -l /tmp/test/u2 --可見其所屬組已經變為 u1
4.2、sticky粘貼位
當一個目錄設了sticky位,那麽在其下的文件,只有以下三個用戶能刪除:root、目錄所有者、文件所有者。
# chown u1.u1 /tmp/test/ --先將實驗目錄的擁有者與所屬組改為u1
# chmod 1777 /tmp/test/
# chmod o+t /tmp/test/ --給該目錄設置粘貼位
然後使用不同身份做相關實驗。
5、特殊文件屬性——lsattr/chattr
# lsattr george --查看文件的特殊屬性
# chattr +a george --任何用戶包括root,用戶只能對添加a屬性的文件進行內容追加(>>),並且文件不能被刪除,修改。
# chattr +i george --任何用戶包括root,都不能被刪除添加i屬性的文件,內容也不能修改。
6、目錄與文件的默認權限——umask
# umask --查看當前 umask;root 為 0022;普通用戶為 0002
# usermod -g u1 u2 --當普通用戶的默認組不同於用戶名。則其 umask 為 0022
# umask 0077 --自己設置 umask。普通用戶也可以自己設置
6.1、umask 的永久修改:
# vim ~/.bashrc --只針對某個用戶永久修改umask
umask 0002
# vim /etc/bashrc --針對所有所用戶修改
umaks 0022
6.2、創建文件
# touch test --權限為:0666 - umask = 0666 - 0022 = 0644
6.3、創建目錄
# touch dir --權限為:0777 - umask = 0777 - 0022 = 0755
7、系統做讀寫權限檢查的流程:
1. 檢查進程的euid 是否為0,是則放行,否則檢查下一步
2. 檢查進程的euid 是否等於文件的uid,如果相等,則檢查該文件權限位的左邊三位是否有相應的權限,有則放行,否則拒絕
3. 檢查進程的egid或者其中一個supplementary group id 是否等於文件的gid,如果相等,則檢查該文件權限位的中間三位是否有相應的權限,有則放行,否則拒絕
4.檢查該文件權限位的右邊三位是否有相應的權限,有則放行,否則拒絕
六、別名定義
# alias --查看別名
# alias george=‘ls -l‘ --臨時定義別名;只在當前終端生效
# unalias george --取消指定別名
# vim ~/.bashrc --為某個用戶永久定義別名
alias grep=‘grep --color‘
# vim /etc/bashrc --為所有用戶永久定義別名
alias grep=‘grep --color‘
top,job,user,file,alias