linux用戶管理命令

用戶管理----用戶信息與密碼的配置文件                                                                                                      mysql

      

     用戶管理要學的內容不少,固然了,不會簡單的放兩個建立用戶的命令,這樣的文章太多了。咱們來看兩個用戶管理中很是重要的配置文件吧!
     咱們來看看用戶的相關配置文件都存放在什麼地方。
用戶信息文件:      /etc/passwd
密碼文件:            /etc/shadow
用戶組文件:        /etc/group
用戶組密碼文件: /etc/gshadow
用戶配置文件:
   /etc/login.defs
   /etc/default/useradd
新用戶信息文件:/etc/skel
登陸信息:          /etc/motd
 
======================== 用戶信息文件詳解============================================
咱們先看一下用戶信息文件裏都放的什麼
 
[root@localhost ~]#   vi   /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:/sbin/nologin
........
每一行內容存放一個用戶的信息,每一個用戶信息有7部分組成
root:x:0:0:root:/root:/bin/bash
root        用戶名         用戶登陸系統時使用的用戶名
x             密碼            密碼位
2             UID            用戶標識號
2             GID            缺省組標識
root     註釋性描述      例如存放用戶全名等信息
/root         宿主目錄       用戶登陸系統後的缺省目錄
/bin/bash   命令解釋器    用戶使用的Shell ,默認爲bash
 
UID ?
     關於上面的UID這裏細說一下,其實決定用戶是什麼權限,是由UID號決定的。
     linux用戶分爲三種:
超級用戶:(root   UID=0)
普通用戶: (UID 500~60000)
僞用戶:  (UID  1~499)
    因此,咱們能夠修改用戶的UID號來修改用戶的類型,若是把root的UID號爲500,那麼root就變成了普通用戶,若是把fnngj用戶的UID改成0,那麼它就擁有了root用戶的超能力。
[root@localhost ~]#  vi   /etc/passwd   進入以後修改,完了保存退出就OK了。
 
僞用戶?
     說到用戶種類,又牽扯到一個僞用戶,那麼僞用戶是幹什麼用的?
1.僞用戶與系統和程序服務相關
    bin、daemon、shutdown、halt等,任何Linux系統默認都有這些僞用戶。
    mail、news、games、apache、ftp、mysql及sshd等,與linux系統的進程相關。
2. 僞用戶一般不須要或沒法登陸系統
3. 能夠沒有宿主目錄
 
========================== 密碼文件詳解========================================
       用戶密碼文件,用戶信息文件中留有密碼位,爲何沒密碼了呢? 其實,最先的linux這個位置真的是放密碼的,由於不全安,因此,就將密碼單獨存放了,如今只是用x表示這裏有存放密碼的位置。
    爲何要把密碼放在/etc/shadow中
 
[root@bogon /]#  ls -l /etc/shadow    
-r--------  1 root root 1021  2月 27 21:31 /etc/shadow          我能夠看到這個文件只有管理員root有權限查看修改
 
如今咱們來看密碼文件都放了什麼?
[root@bogon /]#  more /etc/shadow
root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:15391:0:99999:7:::
bin:*:15391:0:99999:7:::
daemon:*:15391:0:99999:7:::
adm:*:15391:0:99999:7:::
lp:*:15391:0:99999:7:::
sync:*:15391:0:99999:7:::
shutdown:*:15391:0:99999:7:::
halt:*:15391:0:99999:7:::
mail:*:15391:0:99999:7:::
news:*:15391:0:99999:7:::
uucp:*:15391:0:99999:7:::
operator:*:15391:0:99999:7:::
games:*:15391:0:99999:7:::
..........................
 
咱們還以第一行爲例進行分解。
root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:15391:0:99999:7:::
root              用戶名       用戶登陸系統時使用的用戶名
$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.    密碼     加密密碼   MD5
15391     最後一次修改時間    linux這裏以 197011日做爲 1197111日就是 366,依次類推到我修改密碼的日期表示爲 15391了。
0         最小時間間隔           這個字段表明要通過多久才能夠更改密碼。若是是「 0」表密碼能夠隨時更改。
99999         最大時間間隔           於懼怕密碼被人盜取而危害到整個系統的安全,因此安排了這個字段,你必須在這個時間內從新修改密碼,不然這個賬號將暫時失效。上面的 99999,表示密碼不須要從新輸入,最好設定一段時間修改密碼。確保系統安全
7         密碼變動期期限快到前的警告期:當賬號的密碼失效期限快到時,系統依據這個字段的設定發出警告,提醒用戶「再過 n天您的密碼將過時,請儘快從新設定密碼。默認的是七天。
賬號失效期:     若是用戶過了警告期沒有從新輸入密碼,使得密碼失效,而該用戶在這個字段限定的時間內又沒有向管理員反映,讓賬號從新啓用,那麼這個賬號將暫時失效。
賬號取消日期:  這個日期跟第三個字段同樣,都是使用 1970年以來的日期設定方法。這個字段表示:這個賬號在此字段規定的日期以後將沒法再使用。這個字段一般用於收費服務系統中,能夠規定一個日期讓該賬號不能再使用。
保留:     最後一個字段是保留的,看之後有沒有新功能加入。
 
疑問既然shadow文件保存了密碼,而passwd文件中沒有保存密碼,爲何不把passwd文件中的密碼位取消掉呢?
 
   其實,密碼在存放以前,是先放在passwd文件中的,而後再轉換到shadow文件中的。下面來驗證下
[root@bogon /]#  grep root /etc/passwd  /etc/shadow
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:15391:0:99999:7:::
 
[root@bogon /]#  pwunconv      將密碼回寫
[root@bogon /]#  grep root /etc/passwd  /etc/shadow
/etc/passwd:root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:0:0:root:/root:/bin/bash
/etc/passwd:operator:*:11:0:operator:/root:/sbin/nologin
grep: /etc/shadow: 沒有那個文件或目錄
 
[root@bogon /]#  pwconv     轉換到shdow文件中,只不過平時這個動做平時由linux自動完成。
[root@bogon /]#  grep root /etc/passwd  /etc/shadow
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:root:$1$5DlBd7m8$tF.az6hWi27oaaFw7OpFs.:15456:0:99999:7:::
 
       linux對用戶登陸的驗證就是通passwod文件來驗證用戶名是否存在,而後經過shadow文件來驗證用戶名對應的密碼是否正確,那麼理解了底層東西頗有必要,咱們能夠不須要去學習建立用戶命令,真接經過vim命令在兩個文件中添加用戶。這就是linux的魅力噢。不像windows同樣,咱們不但知其然,還知其因此然。
 
 
「會靈魂附體的」命令權限                                                          
 
             繼續用戶管理的學習,上一小節咱們知道,只有root能夠修改密碼文件,那麼普通用戶爲何能夠修改本身的密碼,這是由於咱們所操做有命令「靈魂附體」般的擁有了root權限。這個小節自我感受不教難理解,而個人內容也是順着思路寫,按着順序看,最好去試驗一下。^_^
 
小節重點:
===============================
setUID=4   全部人
setGID=2   所屬組
粘着位=1    其它人
===============================
 
建立用戶:
[root@localhost ~]# useradd lisi      添加建立了一用戶lisi
[root@localhost ~]# passwd lisi       設置lisi的密碼
Changing password for user wangwu.
New UNIX password:                    這裏輸入密碼
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:         再次確認密碼
passwd: all authentication tokens updated successfully.
  上面這種是不被推薦的一種建立用戶的方式,任何的用戶都應該屬於某個組。建立這樣的「散人」實際中沒有太大意義。
 
[root@localhost ~]# grep lisi /etc/passwd
lisi:x:502:502::/home/lisi:/bin/bash
   從上面信息中看到,系統默認爲咱們建立了一個lisi的組,組ID爲504 
 
用戶切換:
[root@localhost ~]# su -- lisi        root切換到lisi用戶
[lisi@localhost root]$ su -- root     lisi用戶切換到root
Password:                                    普通用戶切換root用戶是要密碼的喲!親!
普通用戶切換到其它普通用戶也是要密碼的喲!
 
用戶修改密碼:
[lisi@localhost root]$ passwd
Changing password for user lisi.
Changing password for wangwu
(current) UNIX password:        先輸入原始密碼
New UNIX password:               輸入新有密碼
Retype new UNIX password:    再次確認新密碼
passwd: all authentication tokens updated successfully.
 
 
上面是鋪墊,下面纔是重點。。  
思考:在上一節中,咱們提到,存放用戶密碼的文件shadow只有root用戶纔可操做。那麼普通用戶爲何能夠修改密碼呢?
 
=========================setUID===============================                
 
這裏引出一個東東----setUID
       定義:當一個可執行程序具備setUID權限,用戶執行這個程序時,將以這個程序全部者的身份執行。
       哈哈!小狼不能和小羊談朋友,小羊能夠與小羊談朋友,因而,小狼披上了羊的外衣,而後以羊的身份和小羊一塊兒幸福的生活。吼吼。
       其實,用戶執行的這個程序就是命令,passwd命令受權了SetUID權限。因此普通用戶也能夠經過passwd命令改密碼。
 
下面來作個試驗!!頗有意思的噢,要不要也來試試噢?
 
切換到lisi用戶下面。
[lisi@localhost ~]$ touch file01   touch建立一個file01的文件
[lisi@localhost ~]$ ls -l file01
-rw-rw-r--  1 lisi lisi 0  5月  5 22:14 file01
  咱們看到,這個時候用touch命令建立的文件,全部者是lisi,所屬於組是lisi組
 
切換到root下面
[root@localhost ~]# ls -l /bin/touch   
-rwxr-xr-x  1 root root 38056 2009-07-03  /bin/touch
細心朋友會發現權限前面還多一位。沒錯!setUID就屬於這一位。
 
setUID=4
 
如今咱們給touch命令授予個setUID授予setUID權限有兩種方式。
[root@localhost ~]# chmod  u+s /bin/touch  
[root@localhost ~]# chmod  4755  /bin/touch
關於用戶權限不理解的看我以前的相關文章。
 
再次切換到lisi目錄下
[lisi@localhost ~]$ touch file02   建立文件file02
[lisi@localhost ~]$ ls -l file02
-rw-rw-r--  1 root lisi 0  5月  5 22:35 file02
    此次咱們發現,一樣的一個命令touch ,此次建立出來的文件全部者變成的root
 
 
去掉setUID權限的兩種方式:
[root@localhost ~]# chmod  u-s /bin/touch  
[root@localhost ~]# chmod  755  /bin/touch
 
 
========================setGID=================================         
 
setGID的用法與setUID的用法一塊兒,它是添加組權限的。
setGID=2
添加setGID的方式以下:
[root@localhost ~]# chmod  g+s /bin/touch  
[root@localhost ~]# chmod  2755  /bin/touch
 
通常的命令咱們不能隨便授予setUID權限 假如給vi命令授予setUID命令,無疑於給linux留了個後面,那樣咱們 就能夠經過vi命令修改用戶與密碼信息文件了。
那麼到底有哪些命令設置有setUID呢?咱們能夠查找一下。
 
[root@localhost ~]# find / -perm -4000 -o -perm -2000
在當前目錄下(/)查找具備setUID(-perm -4000)或者(-o)具備
 
setGID(-perm -2000)權限的命令
 
 
 
=======================粘着位==================================  
 
粘着位有什麼做用,咱們來看一個例子,這樣更容易理解。。
 
[root@localhost test]# mkdir abc                   建立一個目錄abc
[root@localhost test]# touch abc/newfile      在這個目錄下建立一個 文件newfile
[root@localhost test]# chmod 777 abc          對這個目錄設置權限爲所 有人都有全部權限
[root@localhost test]# ls -ld abc
drwxrwxrwx  2 root root 4096  5月  5 23:44 abc  
[root@localhost test]# ls -l abc/newfile          newfile文件的權限是 其它人沒有刪改的權限。
-rw-r--r--  1 root root 0  5月  5 23:44 abc/newfile
 
切換到lisi用戶
[lisi@localhost test]$ rm -rf abc 
       具然把abc目錄下面的newfile幹掉了,lisi用戶雖然有對abc目錄的全部權限,但對newfile文件沒有刪除權限呀。這就 是linux對文件的權限規定。
       假如張三和李四對一個文件夾都有全部權,這個文件夾下放的有張三的文件,也有李四的文件,若是張三看李四的文件不爽,那麼他就直接幹掉了,李四上去一看哭了。爲何辦法讓李四不哭呢?這裏就用到粘着位了。
 
粘着位
粘着位=1
t,若是一個權限爲777目錄有粘着位,每一個用戶均可以在這個目錄下創 建文件,但只能刪除本身是全部者的文件。
 
粘着位的受權方式:
[root@localhost test]# chmod  o+t abc  
[root@localhost test]# chmod  1755  abc
 
咱們再來刪除試試:
[lisi@localhost abc]$ rm newfile
rm:是否刪除有寫保護的通常空文件‘newfile’? y
rm: 沒法刪除‘newfile’: 權限不夠
 
本身建立的文件就能夠刪除噢!
[root@localhost test]# touch newfile2
[root@localhost test]# rm newfile2 
rm:是否刪除通常空文件‘newfile2’? y
 

用戶組權限實例                                                                                                                                                     linux

先直接拋一個需求出來吧!先步驟完成了,後面再分析。web

受權用戶 chongshi 和 bugmaster 對目錄/cnblogs有寫權限面試

建立目錄
[root@localhost hzh]# mkdir /cnblogs      建立目錄
[root@bogon hzh]# ls -ld /cnblogs     查看目錄
drwxr-xr-x 2 root root 4096 5月 10 23:20 /cnblogssql


添加兩個用戶並設置密碼
[root@bogon hzh]# useradd chongshi     建立用戶
[root@bogon hzh]# passwd chongshi      設置密碼
Changing password for user chongshi.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.shell

[root@bogon hzh]# useradd bugmaster
[root@bogon hzh]# passwd bugmaster
Changing password for user bugmaster.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.apache

 

添加一個組vim

[root@bogon hzh]# groupadd testing                    建立組
[root@bogon hzh]# grep testing /etc/group         查看組信息
testing:x:506:windows

 

將用戶添加到組中api

[root@bogon hzh]# usermod -G testing chongshi        用戶chongshi添加到組testing
[root@bogon hzh]# gpasswd -a bugmaster testing     用戶bugmaster添加到組testing
Adding user bugmaster to group testing
注意:上面兩種方式不一樣,但做用是同樣的,都是將用戶添加到組中。
[root@bogon hzh]# grep testing  /etc/group         查看組中成員
testing:x:506:chongshi,bugmaster

 

咱們知道,組有什麼樣的權限,組中成員也有什麼樣的權限。

設置cnblogs目錄的所屬組爲testing

[root@bogon hzh]# chgrp testing  /cnblogs            將/cnblogs目錄的所屬組改成testing

[root@bogon hzh]# ls -ld /cnblogs         查看目錄所屬組
drwxr-xr-x 2 root testing 4096 5月 10 23:20 /cnblogs

 

對組加寫權限

[root@bogon hzh]# chmod g+w /cnblogs                 對組加寫權限
[root@bogon hzh]# ls -ld /cnblogs                            查看組對目錄的權限
drwxrwxr-x 2 root testing 4096 5月 10 23:20 /cnblogs

如今用戶chongshi和bugmaster已經對/cnbogs已經有寫權限
[root@bogon hzh]# su -- chongshi                    切換用戶
[chongshi@bogon hzh]$ touch /cnblogs/abc     建立文件,(能夠成功在目錄下建立文件,說明對本目錄具備寫權限)

 

 

用戶經常使用操做命令                                                                          

 

添加一個用戶
添加用戶稍微複雜一些,咱們先來看一下,添加用戶都有那些選項
root@fnngj-virtual-machine:/# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no


參數詳解:
-u:UID
-g:缺省所屬用戶組GID
-G:指定所屬多個組
-d:宿目錄
-s:命令解釋器Shell
-c:描述信息
-e:指定用戶失效時間
例子:
root@fnngj-virtual-machine:/# useradd -u 1888  -g webadmin -G sys,root -s /bin/bash  -c "market lisi"  -e 2012-12-12  jack

 

添加用戶到組

usermod -G [組名]  [用戶名]
root@fnngj-virtual-machine:/# usermod -G webadmin tom
root@fnngj-virtual-machine:/# grep webadmin /etc/group
webadmin:x:1001:tom

 

修改用戶名

 usermod -l  [新用戶名]  [舊用戶名]
修改用戶與添加用戶時的內容基本相同,但多了一個修改用戶的選項。

root@fnngj-virtual-machine:/# usermod -l tom jack                   把jack改成tom

 

刪除用戶
userdel -r [用戶名]
-r:刪除用戶組

手工刪除:
使用find命令查找屬於某個用戶或用戶組的文件
find選項 -user、-uid、-group、-gid、
一、對須要保留的文件進行移動和備份
二、對不須要的文件進行刪除
三、清除用戶文件中的相關表項
四、清除用戶宿主目錄
[root@bogon /]# find /home -user fnngj
/home/fnngj
/home/fnngj/.bashrc
/home/fnngj/.bash_profile
/home/fnngj/.gtkrc
/home/fnngj/.bash_history
/home/fnngj/.bash_logout
能夠對查找出來的用戶信息判斷須要幹掉哪些。

 

用戶信息查看命令                                                           

 

pwck   檢測/etc/passwd文件
檢測用戶的設置文件是否正常。直接輸入命令,後面不用帶參數

vipw    編輯/etc/passwd文件
這個命令與vi最大的區別就是編輯的時候鎖定文件。若是多人對passwd文件 
都有編輯權限,那麼多人同時編輯就會形成混亂。使用vipw編輯passwd文件時,別 
人就沒法打開passwd文件。

id        查看用戶ID和組信息,直接輸入命令,後面不用帶參數
[root@bogon fnngj]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6 
(disk),10(wheel) context=root:system_r:unconfined_t


finger      查看當前用戶的登陸信息
finger [用戶名]    查看某個用戶的詳細信息。
[root@bogon fnngj]# finger
Login Name Tty Idle Login Time Office Office Phone
root root pts/1 May 13 14:57 (192.168.203.1)
[root@bogon fnngj]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since 日 5月 13 14:57 (CST) on pts/1 from 192.168.203.1
New mail received 日 5月 6 11:00 2012 (CST)
Unread since 三 2月 22 20:40 2012 (CST)
No Plan.


su [用戶名]      切換用戶(su- 環境變量切換)
su - [用戶名]    切換的時候也會把環境的時候也會切換環境變量
[root@bogon /]# su fnngj
[fnngj@bogon /]$ echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/fnngj/bin
[fnngj@bogon /]$ su root
Password:
[root@bogon /]# su - fnngj
[fnngj@bogon ~]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/fnngj/bin


passwd -S [用戶名]    查看用戶密碼狀態
[root@bogon fnngj]# passwd -S fnngj
Password set, MD5 crypt.


who、w    查看當前登陸用戶信息
[fnngj@bogon ~]$ who
root pts/1 May 13 14:57 (192.168.203.1)
[fnngj@bogon ~]$ w
15:11:29 up 54 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.203.1 14:57 0.00s 0.84s 0.01s w

 

用戶禁用與恢復                                                                

 

禁用和恢復用戶
當一個用戶在操做的時候常常有違規操做或近期一段時間不用,咱們能夠對這 
個用戶進行鎖定。就像你的遊戲帳號發生異常被禁用同樣。

-----------------------------------

禁用
#usermod -L username
#passwd -l username
恢復
#usermod -U username
#passwd -u username

------------------------------------

[root@bogon /]# passwd -l fnngj     禁用fnngj用戶
Locking password for user fnngj.
passwd: Success
[root@bogon /]# passwd -S fnngj
Password locked.                   提示被禁用

[root@bogon /]# passwd -u fnngj    密碼解鎖
Unlocking password for user fnngj.
passwd: Success.
[root@bogon /]# passwd -S fnngj
Password set, MD5 crypt.


禁用原理:
[root@bogon /]# grep fnngj /etc/shadow
fnngj:$1$EudBseaZ$kw1S8ZS2dsvnJ83phhvQF0:15456:0:99999:7:::
[root@bogon /]# passwd -l fnngj
Locking password for user fnngj.
passwd: Success
[root@bogon /]# grep fnngj /etc/shadow
fnngj:!!$1$EudBseaZ$kw1S8ZS2dsvnJ83phhvQF0:15456:0:99999:7:::

  看到上面的操做,相信你已經明白了,當我禁用你的密碼後,密碼在shadwo文件中依然存在,只是前面多了兩個歎號(!!),這樣你確定登陸不了了,由於驗證端改變了密碼。固然,解鎖以後,密碼前面的兩個歎號會去掉。

  其實,咱們知道了原理之後,徹底能夠不用經過命令,經過vi編輯文件,同樣能夠禁用用戶。

 

用戶組經常使用操做命令                                                                        

 

  先看一下組配置文件裏都存放了哪些內容

[root@bogon /]# more /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
man:x:15:
games:x:20:
gopher:x:30:

.................

dialout:x:20:fnngj
dialout    組名            用戶登陸時所在的組
           組密碼         通常不用
20          GID        組標識號  
fnngj       組內用戶列表   屬於該組的全部用戶列表

 

添加用戶組 

groupadd  [用戶組名]
root@fnngj-virtual-machine:/# groupadd webadmin                添加一個組webadmin
root@fnngj-virtual-machine:/# grep webadmin  /etc/group   查看組信息
webadmin:x:1001:

咱們在添加組的時候也能夠指定好組的id
root@fnngj-virtual-machine:/# groupadd  -g 8888 webadmin
root@fnngj-virtual-machine:/# grep webadmin  /etc/group  
webadmin:x:8888:

 

刪除用戶組
groupdel [用戶組名]
[root@bogon /]# groupdel webadmin               刪除組webadmin

 

修改用戶組信息

groupmod -n  [新組名] [舊組名]
[root@bogon /]# groupmod -n apache webadmin        修改組名webadmin爲apache

 

用戶組信息查看命令                                                                  

 

groups     查看用戶隸屬於哪些用戶組

[root@bogon /]# groups fnngj
fnngj : fnngj

newgrp    切換用戶組
[root@bogon /]# newgrp fnngj 不是組成員,知道組密碼(若是有密碼)同樣可 
以切換。

grpck       用戶組配置文件檢測

chgrp       修改文件所屬組

vigr          編輯/etc/group文件(鎖定文件)
與vipw用法同樣,在編輯group文件時,禁止其餘人編輯。防止多人寫操做,形成寫混亂。

 

用戶組管理命令                                                                                

 

gpasswd命令
這個事全部linux都有的一個命令。先看一下都有哪些參數。
root@fnngj-virtual-machine:/# gpasswd
Usage: gpasswd [option] GROUP
Options:
  -a, --add USER                add USER to GROUP
  -d, --delete USER             remove USER from GROUP
  -h, --help                    display this help message and exit
  -r, --remove-password         remove the GROUP's password
  -R, --restrict                restrict access to GROUP to its members
  -M, --members USER,...        set the list of members of GROUP
  -A, --administrators ADMIN,...
                                set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.
上面的參數信息雖然事英文的,不解釋了,相信你懂的。
用法很是簡單:
root@fnngj-virtual-machine:/# gpasswd -a tom webadmin     添加用戶到組
root@fnngj-virtual-machine:/# gpasswd -d tom webadmin     把用戶從組中刪除
root@fnngj-virtual-machine:/# gpasswd webadmin                給用戶組設置密碼
root@fnngj-virtual-machine:/# gpasswd -A tom webadmin    將tom提高爲組管理員
root@fnngj-virtual-machine:/# gpasswd -r webadmin        刪除組密碼
root@fnngj-virtual-machine:/# gpasswd -R webadmin       禁止其餘用戶切換到該組

 

 

目錄:(內容較多,加個目錄)

|-進程管理 

進程經常使用命令

  |- w查看當前系統信息

  |- ps進程查看命令

  |- kill終止進程

  |- 一個存放內存中的特殊目錄/proc

  |- 進程的優先級

  |- 進程的掛起與恢復

  |- 經過top命令查看進程

計劃任務

  |- 計劃任務的重要性

  |- 一次性計劃at和batch

  |- 週期性計劃crontab

進程管理的概念                                                                                      


進程和程序區別

1.程序是靜態概念,自己做爲一種軟件資源長期保存;而進程是程序的執行過程,它是動態概念,有必定的生命期,是動態產生和消亡的。
2.程序和進程無一一對應關係。一個程序能夠由多個時程公用;另外一一方面,一個進程在活動中有可順序地執行若干個程序


父子進程的關係

1.子進程是由一個進程所產生的進程,產生這個子進程的進程稱爲父進程
2.在linux系統中,使用系統調用fork建立進程。fork複製的內容包括父進程的數據和堆棧段以及父進程的進程環境。
3.父進程終止子進程天然終止。


前臺進程和後臺進程

前臺進程

在shell提示處理打入命令後,建立一個子進程,運行命令,Shell等待命令退出,而後返回到對用戶給出提示符。這條命令與Shell異步運行,即在前臺運行,用戶在它完成以前不能執行別一個命令

很簡單,咱們在執行這個查找命令時,沒法進行其它操做,這個查找就屬於前臺進程


後臺進程

在Shell提示處打入命令,若後隨一個&,Shell建立子進程運行此命令,但不等待命令退出,而直接返回到對用戶給出提示。這條命令與Shell同步運行,即在後臺運行。「後臺進程必須是非交互式的」

再來看這個命令就變成了後臺進程,咱們用一樣的條件進行查找,把查找記過放到hzh/test/init.find這個文件中。不影響咱們前臺其它的操做。

 

進程的狀態


學過操做系統原理的同窗應該能夠看得懂,不懂再去翻翻書,不知道你有沒有想起當時教這門課的老師呢?呵呵 

 


經常使用進程命令

 

w 查看當前系統信息                                                                                


w命令,我在以前的章節用曾用過,當時是查看當前用戶信息,固然也能夠查看到系統相關的信息。

做用:查看當前系統活動摘要。

[root@bogon cron]# w
14:48:39 up 2:46, 1 user,     load average: 0.00,   0.01,   0.00
USER     TTY       FROM             LOGIN@     IDLE   JCPU   PCPU WHAT  
root       pts/1    192.168.203.1 12:27      0.00s   0.17s   0.02s w

w顯示信息的含義:

JCPU:     以終端代號來區分,該終端全部相關的進程的進程執行時,所消耗的CPU時間會顯示在這裏
PCPU:   cpu執行程序消耗的時間
WHAT:    用戶下在執行的操做
load average :分別顯示系統在過去一、五、15分鐘內的平均負載程度。
FROM:  顯示用戶從何處登陸系統,「:0」的顯示錶明該用戶時人X Windows下,打開文本模式窗口登陸的
IDLE:   用戶閒置的時間,這是一個計時器,一旦用戶執行任何操做,該計時器便會被重置

 

查看個別用戶信息:w [用戶名]

[root@localhost ~]# w root
23:32:01 up 52 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.203.1 22:53 0.00s 0.10s 0.01s w root

 

ps進程查看命令                                                                                      

  ps應該是查看進程用得最廣泛的命令,我在以前的面試中都被屢次問到過。由於linux不是面試個人重點,因此,我後來特地去查了一下。ps我之前的理解就是photoshop的縮寫。哈哈!由於之前本專門跑去學過平面設計。吼吼,扯遠了!

進程查看命令:ps

經常使用選項
-a:顯示全部用戶的進程
-u:顯示用戶名和啓動時間
-x:顯示 沒有控制終端的進程
-e:顯示全部進程,包括沒有控制終端的進程
-l:長格式顯示
-w:寬行顯示,可使用多個w進行加寬顯示

應用實例:

ps 查看隸屬本身的進程

root@fnngj-virtual-machine:~# ps
PID TTY TIME CMD
1370 pts/0 00:00:00 bash
3185 pts/0 00:00:00 ps

root@root:~# ps -l
F S    UID  PID     PPID    C   PRI   NI   ADDR   SZ     WCHAN     TTY      TIME      CMD
4 S    0     5941   5801   4   80    0   -       1882   wait      pts/2    00:00:00     bash
4 R    0     6000   5941   0   80    0   -       1121    -         pts/2    00:00:00     ps

看一下上面的選項都指的什麼。。
PID :      進程號
PPLD   父進程的進程號
TTY :    進程啓動的終端
STAT :  進程當前狀態(S休眠狀態,D不可中斷的休眠狀態,R運行狀態,Z僵死狀態,T中止
NI         進程優先級
TIME:     進程自從啓動之後啓用CPU的總時間
COMMAND/CMD:進程的命令名
USER    用戶名
%CPU   佔用CPU時間和總時間的百分比
%MEM  佔用內存與系統內存總量的百分比

實列

ps -u or -l 查看隸屬於本身進程詳細信息

root@root:~# ps -u or -l

ps -le or -aux 查看全部用戶執行的進程的詳細信息

root@root:~# ps le or -aux

ps -aux --sort pid 可按進程執行的時間、PID、UID等對進程進行排序

root@root:~# ps -aux --sort pid

ps -uU fnngj 查看某個用記啓動的進程

root@root:~# ps -uU fnngj 

ps -le | grep init 查看指定進程信息

root@root:~# ps -le | grep init 

 

kill終止進程                                                                                               

     在winddow下面,咱們要結束一個進程,最簡單的方式就是關閉這個程序,相應的進程也會隨之結束,遇到不能關閉的狀況。會打開任務管理器結果掉。那麼在linux下若是作呢?咱們可使用kill命令來終止進程。

爲何要殺死進程?

* 該進程點用了過多的CPU時間
* 該進程縮住了一個終端,使其餘前臺進程沒法運行
* 運行時間過長,但沒有預期效果
* 產生了過多到屏幕或磁盤文件的輸出
* 沒法正常退出

kill用法:

關閉進程:kill  [進程號]

root@root:~# kill -l
1) SIGHUP    2) SIGINT    3) SIGQUIT    4) SIGILL    5) SIGTRAP
6) SIGABRT    7) SIGBUS    8) SIGFPE    9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10   45) SIGRTMIN+11   46) SIGRTMIN+12   47) SIGRTMIN+13
48) SIGRTMIN+14   49) SIGRTMIN+15   50) SIGRTMAX-14   51) SIGRTMAX-13   52) SIGRTMAX- 12
53) SIGRTMAX-11   54) SIGRTMAX-10   55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX

    咱們看到每一個編號對應一個含義,如 9) SIGKILL ;9標註的是SIGKILL ,那麼咱們可用9來終止進程。

關閉進程:

kill -s 9 [進程號]  (強行關閉)

kill -9   [進程號]  (強行關閉)
    上面的兩種形式均可以強行關閉進程。

重啓進程:

   有時候咱們須要把進程從新啓動一下,能夠下面的命令完成。   

kill -1  [進程號]  (重啓進程)

root@root:~# kill -1 3567    重啓PID爲3567的進程

 

關閉圖形程序:

關閉圖形程序: xkill
當你在終端下輸入這個命令時,你的鼠標會變成一個小叉子,你只去點你想要關閉的窗口就能夠關閉了

 

其它:

結束全部進程:    killall
查找服務進程號: pgrep  [服務名稱]
關閉進程:          pkill    [進程名稱]

 

一個存放內存中的特殊目錄/proc                                                                

  

  這個目錄比較特殊,他並不在咱們磁盤上,而在咱們的內存當中;當前系統運行的全部進程都動態的存放在這個目錄中。

root@root:~# ls /proc
1 14 15 187 287 820 dma net
10 1401 1524 19 3 827 driver pagetypeinfo
1037 1403 1525 1906 32 830 execdomains partitions
1043 1413 1527 1919 34 832 fb sched_debug
1047 1414 1531 2 35 834 filesystems schedstat
11 1415 1536 20 36 840 fs scsi
1172 1418 1544 2024 454 842 interrupts self
12 1423 1555 2025 459 843 iomem slabinfo
.....................
上面每一個編號就是以咱們當前進程PID所命令的目錄名。

固然,當前目錄下也存放了一些咱們系統的信息

查看咱們當前cpu的信息
root@root:~# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Pentium(R) Dual-Core CPU T4500 @ 2.30GHz
stepping : 10
cpu MHz : 2294.000
cache size : 1024 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov 
pat 
pse36 clflush dts acpi mmx fxsr sse sse2 ss nx constant_tsc up arch_perfmon 
pebs 
bts xtopology tsc_reliable aperfmperf pni ssse3 hypervisor dts
bogomips : 4588.00
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:

查看內存信息

root@root:~# cat /proc/meminfo
MemTotal: 508344 kB
MemFree: 10668 kB
Buffers: 10700 kB
Cached: 96056 kB
SwapCached: 34124 kB
Active: 231384 kB
Inactive: 231576 kB
Active(anon): 178524 kB
Inactive(anon): 178316 kB
Active(file): 52860 kB
Inactive(file): 53260 kB
........................

查看當前分區的信息
root@root:~# cat /proc/partitions
major minor #blocks name

8 0 20971520 sda
8 1 20446208 sda1
8 2 1 sda2
8 5 522240 sda5

 

進程的優先級                                                                                            

     

  咱們學過操做系統原理的同窗都知道,咱們系統在執行程序時有會前後順序的,但爲何咱們的電腦能夠邊聽音樂,邊聊QQ,邊上網,甚至還能夠同時掛幾個遊戲。由於咱們CPU運行超快。他能夠把每一個程序的進程排好隊,這個執行一下,那個執行一下。因此,咱們會以爲各類程序是並行運行的。

      固然,進程也會分個快慢緩急的,因此要對進程分個優先級。同窗們在食堂排隊打飯,總理來了,這優先級多高啊。同窗們紛紛讓開,先給總理打。

* 優先級取值範圍爲(-20,19)

  linux給咱們提供的優先級的範圍爲-20到19,咱們啓動一個進程時,默認的優先級爲0 ,-20的優先級爲最大,或者說最高。固然,咱們在設置的時候能夠寫-30,但系統默認爲-20。

nice命令 

指定程序的運行優先級
格式:nice -n command
例如:nice --5 command

renice 命令
改變一個正在運行的進程的優先級
格式: renice n pid
例如:renice -5 777

例子:

[root@bogon cron]# ps -le

[root@bogon cron]# renice -20  [PID]


nohup命令能夠在用戶退出時繼續執行某一進程

  通常的命令在用戶退登陸後就中止執行了,nohup命令可使進程在用戶退出登陸後仍舊繼續執行,nohup命令將執行後的數據信息和錯誤信息默認存儲到文件nohup.out中

格式:
nohup program &
例子:
[root@bogon cron]# nohup find / -name init* > /hzh/test/find.init.20120520 &
若是咱們沒指定/hzh/test/find.init.20120520這個保存位置的話,系統默認會把查詢的結果放到nohup.out的文件中。咱們通常不會去使用默認方式保存。

 

進程的掛起與恢復                                                                                      


  當咱們執行一條命令時,發現太慢或輸出內容太多,最經常使用到的作法就是終止(ctrl+c),那麼掛起呢?通俗一點就是暫停唄!^_^!!

進程停止(掛起)和終止
掛起(ctrl+z)
終止(ctrl+c)
[root@bogon ~]# find / -name init* > /hzh/test/find.init.20120520

[1]+ Stopped find / -name init* >/hzh/test/find.init.20120520
被暫停的進程會提示咱們Stopped

小知識:系統中有兩種運行的進程,咱們在前臺是看不到的。一種是後臺執行的命令,一種就是被暫停的。那咱們經過什麼方式查看被暫停和後臺執行的進程呢?

查看被掛起的進程(jobs)
進程的恢復
恢復到前臺繼續運行(fg)
恢復到後臺繼續運行(bg)

[root@bogon ~]# jobs     經過jobs命令能夠查看後被暫停的進程
[1]+ Stopped find / -name init* >/hzh/test/find.init.20120520

[root@bogon ~]# fg        fg會將暫停的進程恢復到前臺繼續執行。
find / -name init* >/hzh/test/find.init.20120520

[root@bogon ~]# bg      bg會將暫停的進程恢復到後臺繼續執行
[1]+ find / -name init* >/hzh/test/find.init.20120520 &


經過top命令查看進程                                                                                

 

  top命令與前面介紹的ps命令類似,已經介紹了ps,爲何還要top?top有它本身的優勢呢。它比ps顯示的信息更詳細。並且是動態的噢,信息是在不斷變化的噢!

[root@bogon ~]# top
top - 12:45:16 up 43 min, 1 user, load average: 0.00, 0.04, 0.06
Tasks: 57 total, 1 running, 56 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 0.3% sy, 0.0% ni, 99.3% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 1034536k total, 232864k used, 801672k free, 60188k buffers
Swap: 1052248k total, 0k used, 1052248k free, 118692k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6848 root 15 0 28948 8444 2524 S 0.3 0.8 0:05.44 X
7181 root 16 0 7036 2436 1968 S 0.3 0.2 0:00.26 sshd
7244 root 16 0 1964 976 772 R 0.3 0.1 0:00.45 top
1 root 16 0 3116 544 464 S 0.0 0.1 0:00.97 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root 5 -10 0 0 0 S 0.0 0.0 0:00.03 events/0
5 root 5 -10 0 0 0 S 0.0 0.0 0:00.01 khelper
6 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kthread
7 root 15 -10 0 0 0 S 0.0 0.0 0:00.00 kacpid
88 root 5 -10 0 0 0 S 0.0 0.0 0:00.01 kblockd/0
89 root 15 0 0 0 0 S 0.0 0.0 0:00.00 khubd
106 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pdflush
107 root 15 0 0 0 0 S 0.0 0.0 0:00.18 pdflush
108 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
109 root 6 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0
255 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kseriod


經常使用選項:
d :   指定刷新的時間間隔
c :     顯示整個命令而不只僅顯示命令名

在命令運行的時候按鍵盤d,會出現以下提示要求你輸入刷新的間隔時間
Change delay from 3.0 to: 10(秒)

經常使用命令
u :   查看指定用戶的進程
k :   終止執行中的進程
h or ?   得到幫助
r:      從新設定進程優先級
s:    改變刷新的時間間隔
W:  將當前設置寫入~/.toprc文件中

      這裏不細講了,感興趣的能夠用  man top  命令查看top的詳細幫助。


爲何要計劃任務                                                                                      

 

爲何要設置計劃任務
  咱們在系統的管理中,不少時候不是及時的去操做,好比對某一網站數據的備份,備份的過程須要佔用大量的系統資源,凌晨三四點的時候系統訪問用戶最少,系統最空閒。但咱們的系統的系統管理員總不能老那個時間爬起來操做吧。若是在家遠程操做的話,老婆不肯意了。哈哈!

計劃任務的命令

  計劃命令分一次性計劃和週期性計劃。好比我要在今年10月1結婚,這是一次性的計劃。不能每一年的10月1結婚吧,真有女女願意結,咱經濟上也吃不消呀。睡覺就是週期性的計劃。好比,我給本身規定天天晚上的11點半睡覺。那麼到時間我就上牀睡覺。
at    安排做業在某一時刻執行一次
batch  安排做業在系統負載不重時執行一次
cron    安排週期性運行的做業

 

一次性計劃at和batch                                                                                

 

at命令指定時間的方式

絕對計時方法
midnight noon teatime
hh:mm [today]
hh:mm tomorrow
hh:mm 星期
hh:mm MM/DD/YY

相對計時方法

now+n minutes
mow+n hours
now+n days

用法
指定在今天下午17:30執行某命令(假設如今時間是下午14:30,2012年1月11日)
命令格式:
at 5:30pm
at 17:30
at 17:20 today
at now+3 hours
at now+180 minutes
at 17:30 12.1.11
at 17:30 1.11.12

好!現格式知道了,玩個實例吧!

[root@bogon ~]# at now+5 minutes
at>
  咱們定的時間是5分鐘以後,如今能夠在at下面輸入各類任務,保存!5分鐘以後執行;不過,咱們須要注意,在用命令時最好寫命令的絕對路徑,爲了安全。

[root@bogon ~]# at now+5 minutes
at> /usr/bin/wall < /etc/motd    作一個廣播,把etc/motd 文件廣播出去
at>                   能夠繼續寫其它的計劃
at> <EOT>
job 2 at 2012-05-20 13:43      ctrl+d保存計劃並退出

是否還擔憂咱們的計劃是否啓動,經過下面兩個命令查看at進程是否正常啓動
[root@bogon test]# at -l
3 2012-05-20 13:57 a root
[root@bogon test]# atq
3 2012-05-20 13:57 a root

若是真的沒有啓動的話,能夠經過手工方式從新啓動一下
[root@bogon ~]# /etc/rc.d/init.d/atd start

刪除at計劃任務
[root@bogon test]# at -d

查看at計劃任務
[root@bogon test]# ls /var/spool/at/

 

batch命令

做用:
  安排一個或多個命令在系統負載較輕進運行一次(通常狀況下負載較輕指平均負載降到0.8如下)

使用方法同at

 

週期性計劃命令crontab                                                                           

 

  做用:用於生成cron進程所須要的crontab文件
crontab的命令格式
crontab {-l|-r|-e}
-l   顯示當前的crontab
-r   刪除當前的crontab
-e   使用編輯器編輯當前crontab文件

好多人都以爲週期計劃任務設置起來比較麻煩,其實咱們只要掌握規律就很好設置。

crontab -e

規則:  把知道的具體的時間添上,不知道的都添加上*

分鐘    小時   天    月    星期   命令/腳本

 

假如,咱們天天早上4點要作一下操做,如下面方式表示:

分鐘    小時   天   月   星期    命令/腳本
*         4      *    *    *    [具體的操做]

 

假如,咱們每週一和三下午的6點要作一下操做,如下面方式表示:

分鐘    小時    天    月  星期    命令/腳本
*         18     *     *   1,3      [具體的操做]

 

 

  案例:在上學的時候都有上機課,週一到週五,下午5點30上課結果。咱們須要在5點30發一個通知,5點45自動關機。設定計劃任務須要分兩步完成,第一步提醒,第二步關機
分鐘   小時    天   月    星期    命令/腳本
30     17      *    *    1-5    /usr/bin/wall < /hzh/test/guanji.wall
45     17      *    *    1-5    /usr/bin/shudown -h now

操做方法:
[root@bogon test]#  crontab -e    回車會進入一個vi文本中
  根據我上面介紹格式編寫內容,而後保存退出
crontab: installing new crontab 表示建立計劃成功

 

經過下面方式進行查看計劃:[root@bogon test]# cd /var/spool/cron[root@bogon cron]# lsroot[root@bogon cron]# cat root30 17 * * 1-5 /usr/bin/shudown -h now

相關文章
相關標籤/搜索