Linux許可權管理(使用者、組、檔案管理)
一、 Linux上的檔案管理類命令都有哪些,其常用的使用方法及其相關示例演示。
1、 檔案檢視類命令cat,tac, head, tail, more, less, ls ,file:
-ls : list,列出指定目錄下的內容
使用語法:ls [option]… [file]…
引數:-a 顯示所有檔案,包括隱藏檔案;
-A 顯示除.和..之外的所有檔案;
-l –long,長葛市列表,即顯示檔案的詳細屬性資訊;
例:-rw-r--r--. 1 root root 8957 10月 14 19:34 boot.log
l:檔案型別,-:常規檔案;即f;
d: directory,目錄檔案;
b: block device,塊裝置檔案,支援以“block”為單位進行隨機訪問
c:character device,字元裝置檔案,支援以“character”為單位進行線性訪問
major number:主裝置號,用於標識裝置型別,進而確定要載入的驅動程式
minor number:次裝置號,用於標識同一型別中的不同的裝置;
8位二進位制:0-255
l:symbolic link,符號連結檔案;
p: pipe,命名管道;
s: socket,套接字檔案;
rw-r--r--
rw-:檔案屬主的許可權;
r--:檔案屬組的許可權;
r--:其它使用者(非屬主、屬組)的許可權;
1:數字表示檔案被硬連結的次數;
root:檔案的屬主;
root:檔案的屬組;
8957:數字表示檔案的大小,單位是位元組;
10月 14 19:34 :檔案最近一次被修改的時間;
boot.log:檔名
-h, --human-readable:對檔案大小單位換算;換算後結構可能會非精確值。
-d 檢視目錄自身而非其內部的檔案列表;
-r reverse,逆序顯示;
-R recursive,遞迴顯示;
-cat: 正向檢視檔案內容
使用語法:cat [option]… [file]…
引數:-n 給顯示的文字行編號;
-E 顯示行結束符$;
例:cat -n /etc/passwd
cat –E /etc/shadow
-tac:逆向檢視檔案內容
使用語法:tac [OPTION]... [FILE]...
引數:-n 給顯示的文字行編號;
-E 顯示行結束符$;
例:tac -n /etc/passwd
tac –E /etc/shadow
-file:檢視檔案內容型別
使用語法:file [file]…
例:
[[email protected] ~]# file /etc/passwd
/etc/passwd: ASCII text
分屏檢視檔案內容命令:more , less
-more命令:分屏顯示文字內容,每次顯示一屏顯示完停止;
語法:more [option] file
Space鍵:顯示文字下一屏內容;
Enter鍵:顯示文字下一行內容;
b鍵:顯示文字上一屏內容;
q鍵:退出;
特點:翻屏至檔案尾部自動退出
-less命令:分屏顯示文字內容,不主動退出
語法:less [option] file
Space鍵:顯示文字下一屏內容;
Enter鍵:顯示文字下一行內容;
b鍵:顯示文字上一屏內容;
q鍵:退出;
-head命令:檢視檔案的前n行;(預設顯示前10行)
語法:head [option] file
引數:-n 檢視檔案的前n行
-tail命令:檢視檔案的後n行:(預設顯示後10行)
語法:tail [option] file
引數:-n檢視檔案的後n行
-f 檢視檔案尾部內容結束後不退出,跟隨顯示新增的行。
2、 建立目錄、檔案:
-mkdir :建立目錄;
語法:mkdir [option]… directory…
引數:-p 自動按需建立父目錄;
-m 建立目錄是給定許可權;
-v verbose,顯示詳細過程;
注意:路徑基名方為命令的作用物件;基名之前的路徑必須得存在;
例:[[email protected] ~]# mkdir -p -m 755 /tmp/mktest/test1/test
-touch : 一、用於把已存在檔案的時間標籤更新為系統當前的時間(預設方式),它們的資料將原封不動地保留下來;
二、是用來建立新的空檔案。
語法:touch [option]… [file]
引數:-c 制定的檔案路徑不存在時不予建立
-a 僅修改access time
-m:僅修改modify time;
-t:使用指定的日期時間,格式[[CC]YY]MMDDhhmm[.ss](access time和modify time為指定時間,change time為當前系統時間)
-rmdir :刪除空目錄
語法:rmdir [option]… [directory]
引數:-p 刪除目錄後,如果其父目錄為空,則一併刪除;
-v 顯示過程
例1:如何建立/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
[[email protected] ~]# mkdir -pv /tmp/x/{y1/{a,b},y2}/
mkdir: created directory ‘/tmp/x’
mkdir: created directory ‘/tmp/x/y1’
mkdir: created directory ‘/tmp/x/y1/a/’
mkdir: created directory ‘/tmp/x/y1/b/’
mkdir: created directory ‘/tmp/x/y2/’
例2:如何建立a_c, a_d, b_c, b_d;
[[email protected] ~]# mkdir -v /tmp/{a,b}_{c,d}
mkdir: created directory ‘/tmp/a_c’
mkdir: created directory ‘/tmp/a_d’
mkdir: created directory ‘/tmp/b_c’
mkdir: created directory ‘/tmp/b_d’
例3:如何刪除例2中建立的目錄;
[[email protected] ~]# cd /tmp
[[email protected] tmp]# rmdir -pv {a,b}_{c,d}
rmdir: removing directory, ‘a_c’
rmdir: removing directory, ‘a_d’
rmdir: removing directory, ‘b_c’
rmdir: removing directory, ‘b_d’
3、 檔案管理工具:cp 、mv 、rm
-cp 命令:複製copy
語法:單源複製:cp [OPTION]... [-T] SOURCE DEST
多源複製:cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
單源複製:cp [OPTION]... [-T] SOURCE DEST
如果DEST不存在:則事先建立此檔案,並複製原始檔的資料流至DEST中;
如果DEST存在:
如果DEST是非目錄檔案:則覆蓋目標檔案;
如果DEST是目錄檔案:則先在DEST目錄下建立一個與原始檔同名的檔案,並複製其資料流;
多源複製:cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
如果DEST不存在:錯誤;
如果DEST存在:
如果DEST是非目錄檔案:錯誤;
如果DEST是目錄檔案:分別複製每個檔案至目標目錄中,並保持原名;
常用選項:
-i:互動式複製,即覆蓋之前提醒使用者確認;
-f:強制覆蓋目標檔案;
-r, -R:遞迴複製目錄;
-d:複製符號連結檔案本身,而非其指向的原始檔;
-a:-dR --preserve=all, archive,用於實現歸檔;
--preserv=
mode:許可權
ownership:屬主和屬組
timestamps: 時間戳
context:安全標籤
xattr:擴充套件屬性
links:符號連結
all:上述所有屬性
-mv 命令:移動或重新命名
語法:單源複製:mv [OPTION]... [-T] SOURCE DEST(如果DEST不存在則建立,存在則覆蓋)
多源複製:mv [OPTION]... SOURCE... DIRECTORY(DEST必須為directory)
引數:-i:互動式複製,即覆蓋前提醒使用者確認
-f:強制覆蓋目標檔案
例:mv -i /data/[1-3].txt /practice #把/data目錄下三個txt檔案剪下到/practice下
-rm 命令:刪除
語法:rm [option]… [file]…
引數:-i互動式刪除,即刪除前提醒使用者確認
-f 強制刪除目標檔案
-r -R:遞迴處理,將制定目錄下的所有檔案包括目錄一併刪除
例:rm -rf /PATH/TO/DIR
危險操作:rm -rf /*
2、使用命令列展開功能,建立/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目錄下建立目錄:x_y, x_z, q_y, q_z
[[email protected] tmp]# mkdir -vp /tmp/{a1/{a,b},a2}
mkdir: created directory ‘/tmp/a1’
mkdir: created directory ‘/tmp/a1/a’
mkdir: created directory ‘/tmp/a1/b’
[[email protected] tmp]# mkdir -vp /tmp/{x,y}_{q,z}
mkdir: created directory ‘/tmp/x_q’
mkdir: created directory ‘/tmp/x_z’
mkdir: created directory ‘/tmp/y_q’
mkdir: created directory ‘/tmp/y_z’
二、檔案的元資料資訊有哪些,分別表示什麼含義,如何檢視?如何修改檔案的時間戳資訊。
1、Linux檔案的資料分為兩類,一類為資料,即檔案的實際內容(資料);一類為元資料,用來描述檔案的特徵(描述資料的屬性);
2、檢視檔案的元資料命令:stat,如下圖例:
[[email protected] tmp]# stat /etc/shadow
File: ‘/etc/shadow’
Size: 1341 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 1195163 Links: 1
Access: (0000/----------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:shadow_t:s0
Access: 2018-11-26 00:11:03.342000329 +0800
Modify: 2018-11-19 00:21:57.403464776 +0800
Change: 2018-11-19 00:21:57.406464776 +0800
Birth: -
解釋:檔案的元資料包括:檔名(File)、大小(Size)、資料塊(Blocks)、IO塊(IO Block)、裝置(Device)、節點號(Inode)、硬連結(Links)、許可權(Access)、檔案所屬主(Uid)、檔案所屬組(Gid)、最近訪問時間(Access Time)、最近檔案修改時間(Modify Time)、最近檔案屬性更改時間(Change Time);
3、 修改檔案的時間戳可使用-touch 命令
-touch : 一、用於把已存在檔案的時間標籤更新為系統當前的時間(預設方式),它們的資料將原封不動地保留下來;
二、是用來建立新的空檔案。
語法:touch [option]… [file]
引數:-c 指定的檔案路徑不存在時不予建立
-a 僅修改access time
-m:僅修改modify time;
-t:使用指定的日期時間,格式[[CC]YY]MMDDhhmm[.ss](access time和modify time為指定時間,change time為當前系統時間)
例1、通過新增使用者,系統自動修改了passwd的Access Time、Modify Time、Change Time
[[email protected] tmp]# stat /etc/passwd
File: ‘/etc/passwd’
Size: 2333 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 1195160 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-11-25 11:06:28.278012816 +0800
Modify: 2018-11-19 00:21:57.399464775 +0800
Change: 2018-11-19 00:21:57.402464776 +0800
Birth: -
[[email protected] tmp]# useradd magedu
[[email protected] tmp]# stat /etc/passwd
File: ‘/etc/passwd’
Size: 2376 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 1195159 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_file_t:s0
Access: 2018-11-26 03:47:33.715883162 +0800
Modify: 2018-11-26 03:47:33.128883122 +0800
Change: 2018-11-26 03:47:33.131883123 +0800
Birth: -
例2、使用touch命令修改檔案時間戳
[[email protected] tmp]# stat /tmp/x #修改前檢視檔案時間戳
File: ‘/tmp/x’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 786463 Links: 4
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-11-26 01:04:55.450219985 +0800
Modify: 2018-11-26 01:04:55.451219985 +0800
Change: 2018-11-26 01:04:55.451219985 +0800
Birth: -
[[email protected] tmp]# touch -a -c /tmp/x #修改檔案的的最近一次訪問時間、修改時間戳
[[email protected] tmp]# stat /tmp/x #檢視修改檔案後的時間戳
File: ‘/tmp/x’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 786463 Links: 4
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-11-26 03:57:39.565924336 +0800
Modify: 2018-11-26 01:04:55.451219985 +0800
Change: 2018-11-26 03:57:39.565924336 +0800
Birth: -
[[email protected] tmp]# touch -t 1811250333.00 /tmp/x #修改檔案的的最近一次修改檔案屬性的時間戳
[[email protected] tmp]# stat /tmp/x #檢視修改檔案後的時間戳
File: ‘/tmp/x’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 802h/2050d Inode: 786463 Links: 4
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-11-25 03:33:00.000000000 +0800
Modify: 2018-11-25 03:33:00.000000000 +0800
Change: 2018-11-26 04:01:37.965940538 +0800
Birth: -
例、在/tmp目錄下建立以tfile開頭,後跟當前日期和時間的檔案,檔名形如:tfile-2016-05-27-09-32-22。
[[email protected] tmp]# touch /tmp/tfile-$(date '+%Y-%m-%d-%H-%M-%S')
例、 複製/etc目錄下所有以p開頭,以非數字結尾的檔案或目錄到/tmp/mytest1目錄中。
[[email protected] tmp]# mkdir /tmp/mytest1
[[email protected] tmp]# cp -r /etc/p*[^[:digit:]] /tmp/mytest1
例、 建立使用者tom,指定UID為5001,指定家目錄為/tmp/tom, 指定shell為/bin/zsh, 指定基本組為tom,附加組為jack
[[email protected] tmp]# groupadd tom
[[email protected] tmp]# groupadd jack
[[email protected] tmp]# useradd -u 5001 -d /tmp/tom -s /bin/zsh -g tom -G jack tom
注意:當建立使用者時,指定家目錄時報“useradd: cannot set SELinux context for home directory /tmp/test”錯,可使用以下方案解決:
如何關閉linux裡的selinux
[[email protected] ~]# setenforce 0
[[email protected] ~]# useradd -d /tmp/moonne moonne
setenforce是Linux的selinux防火牆配置命令 執行setenforce 0 表示關閉selinux防火牆。
setenforce命令是單詞set(設定)和enforce(執行)連寫,另一個命令getenforce可檢視selinux的狀態。
三、 常用的使用者以及檔案管理命令有哪些,並演示命令以及用法。
使用者管理:
Linux中的使用者分為兩類:管理員和普通使用者,普通使用者又分為系統使用者和登入使用者
每個使用者都有唯一的使用者識別符號UserID即UID,由16bits二進位制的數字組成:0-65535
管理員的UID為:0
普通使用者的UID為:1-65535
系統使用者的UID:1-499(CentOS6),1-999(CentOS7)
登入使用者的UID:500-60000(CentOS6),1000-60000(CentOS7)
使用者名稱userName與UID一一對應
使用者的相關資訊可在/etc/passwd檔案中檢視
/etc/passwd :使用者的資訊庫
[[email protected] /]# tail -3 /etc/passwd
hadoop:x:4006:4006::/home/hadoop:/bin/bash
magedu:x:4007:4007::/home/magedu:/bin/bash
tom:x:5001:5007::/tmp/tom:/bin/zsh
解釋:
name:password:UID:GID:GECOS:directory:shell
name: 使用者名稱
password:可以是加密的密碼,也可是佔位符x;
UID:
GID:使用者所屬的主組的ID號;
GECOS:註釋資訊
directory:使用者的家目錄;
shell:使用者的預設shell,登入時預設shell程式;
/etc/shadow:使用者密碼
[[email protected] /]# tail -3 /etc/shadow
hadoop:!!:17853:0:99999:7:::
magedu:!!:17860:0:99999:7:::
tom:!!:17860:0:99999:7:::
使用者名稱:加密的密碼:最近一次修改密碼的時間:最短使用期限:最長使用期限:警告期段:過期期限:保留欄位
組管理:
組:在linux 中的每個使用者都必須有一個組,不能獨立與組外。在Linux中每個檔案有所有者、所在組、其他組的概念。
檔案所在組:當某個用建立了檔案後,這個檔案的所在組就是該使用者的所在組
檢視檔案所在組命令:ls –ahl file_Name
修改檔案所有組命令:chgrp group_Name file_Name
其他組:除檔案的所有者和所在組的使用者外,系統的其他使用者都是檔案的其他組;
組的類別1:
管理員組和普通使用者組
普通使用者組又分為系統組和登入組。
組的類別2:
使用者的基本組、使用者的附加組
租的類別3:
私有組:組名同用戶名,且只包含一個使用者
共有組:組內包含了多個使用者
每個組都有唯一的組識別符號GroupID即GID,由16bits二進位制的數字組成:0-65635
管理員組的GID為:0
普通使用者組的ID為:1-65535
系統組的GID:1-499(CentOS6),1-999(CentOS7)
登入組的GID:500-60000(CentOS6),1000-60000(CentOS7)
組名groupName與GID一一對應;
組的相關資訊可在/etc/group檔案中檢視
/etc/group:組的資訊庫
[[email protected] /]# tail -3 /etc/group
magedu:x:4007:
tom:x:5007:
jack:x:5008:tom
group_name:password:GID:user_list
user_list:該組的使用者成員;以此組為附加組的使用者的使用者列表;
Linux使用者和組管理命令:
組管理命令:
-groupadd 命令:新增組
語法:groupadd [option]… group_Name
選項:-g GID :指定GID;預設是上一個組的GID+1;
-r :建立系統組;
-groupmod 命令:修改組屬性
語法:groupmod [option] group_Name
選項:-g GID:修改GID
-n new_name:修改組名;groupmod –n new_name old_name
-groupdel 命令:刪除組
語法:groupdel [option] group
使用者管理命令:
-useradd 命令:建立命令
語法:useradd [option] userName
選項:-u, --uid UID:指定UID;
-g, --gid GROUP:指定基本組ID,此組得事先存在;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明使用者所屬的附加組,多個組之間用逗號分隔;
-c, --comment COMMENT:指明註釋資訊;
-d, --home HOME_DIR:以指定的路徑為使用者的家目錄;通過複製/etc/skel此目錄並重命名實現;指定的家目錄路徑如果事先存在,則不會為使用者複製環境配置檔案;
-s, --shell SHELL:指定使用者的預設shell,可用的所有shell列表儲存在/etc/shells檔案中;
-r, --system:建立系統使用者;
l useradd -s /sbin/nologin:該使用者不能登入,還記得我們上面說到的系統使用者不能登入吧?我們可以看到系統使用者的 shell 欄位也是 /sbin/nologin
l echo $SHELL :檢視當前使用者的 shell 型別
l useradd -M USERNAME:建立使用者但不建立家目錄
l useradd -mk USERNAME:建立使用者的同時建立家目錄,並複製 /etc/skel 中的內容到家目錄中。關於 /etc/skel 目錄會在下一篇 Linux 許可權管理中再次講解。
l 如果使用者沒有家目錄,那麼不能切換到該使用者
注意:建立使用者時的諸多預設設定配置檔案為 etc/longin.defs
Useradd –D:顯示建立使用者的預設配置
Useradd –D 選項:修改預設選項的值;
修改的結果保存於/etc/default/useradd 檔案中;
-usermod 命令:修改使用者屬性
語法:usermod [option]… userName
選項:-u, --uid UID:修改使用者的ID為此處指定的新UID;
-g, --gid GROUP:修改使用者所屬的基本組;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改使用者所屬的附加組;原來的附加組會被覆蓋;
-a, --append:與-G一同使用,用於為使用者追加新的附加組;
-c, --comment COMMENT:修改註釋資訊;
-d, --home HOME_DIR:修改使用者的家目錄;使用者原有的檔案不會被轉移至新位置;
-m, --move-home:只能與-d選項一同使用,用於將原來的家目錄移動為新的家目錄;
例:Usermod –d /tmp/newhome –m user_name
-l, --login NEW_LOGIN:修改使用者名稱;
-s, --shell SHELL:修改使用者的預設shell;
-L, --lock:鎖定使用者密碼;即在使用者原來的密碼字串之前新增一個"!";
-U, --unlock:解鎖使用者的密碼;
l usermod -G -a GROUPS USERNAME:在原有附加組的基礎上追加附加組
l usermod -d PATH USERNAME:修改家目錄。修改後原先家目錄中的檔案不能訪問了,因為在當前的家目錄中並不存在這些檔案。
-userdel命令:刪除使用者
語法:userdel [option] userName
選項:-r:刪除使用者時一併刪除其家目錄;
例1:建立使用者gentoo,UID為4001,基本組為gentoo,附加組為distro(GID為5000)和peguin(GID為5001);
[[email protected] ~]# useradd -u 4001 -g 1001 -G distro,peguin gentoo
[[email protected] ~]# id gentoo
uid=4001(gentoo) gid=1001(gentoo) groups=1001(gentoo),5002(distro),5001(peguin)
例2:建立使用者fedora,其註釋資訊為"Fedora Core",預設shell為/bin/tcsh;
[[email protected] ~]# useradd -c "Fedora Core" -s /bin/tcsh fedora
[[email protected] ~]# id fedora
uid=4002(fedora) gid=4002(fedora) groups=4002(fedora)
例3:修改gentoo使用者的家目錄為/var/tmp/gentoo;要求其原有檔案仍能被使用者訪問;
[[email protected] ~]# usermod -d /var/tmp/gentoo Gentoo
例4:為gentoo新增附加組netadmin;
[[email protected] ~]# usermod -aG netadmin gentoo
使用者密碼管理:
-passwd 命令:修改使用者的密碼
語法:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1)、passwd :修改使用者自己的密碼
(2)、passwd USERNAME :修改指定使用者的密碼,但僅root由此許可權
選項:-l, -u:鎖定和解鎖使用者;
-d:清除使用者密碼串;
-e DATE: 過期期限,日期;
-i DAYS:非活動期限;
-n DAYS:密碼的最短使用期限;
-x DAYS:密碼的最長使用期限;
-w DAYS:警告期限;
--stdin:設定使用者密碼為使用者名稱
echo "PASSWORD" | passwd --stdin USERNAME
組密碼管理:
-gpasswd 命令:修改組密碼:
組密碼檔案為:/etc/gpasswd
語法:gpasswd [option] groupName
選項:-a USERNAME:向組中新增使用者
-d USERNAME:從組中移除使用者
其他命令newgrp、chage、id、su:
-newgrp 命令:臨時切換指定的組為基本組
語法:newgrp [-] [groupName]
-:會模擬使用者重新登入以實現重新初始化其環境
-chage 命令:更改使用者密碼過期資訊
語法:chage [option] userName
選項:-d:上一次更改日期
-E:賬號到期的日期,過了這天,此賬號將不可用
-W:使用者密碼到期前,提前收到警告資訊的天數
-m:密碼可更改的最小天數,為0代表任何時間都可以修改密碼
-M: 密碼保持有效的最大天數
-id命令:顯示使用者的真和有效ID;
語法:id [OPTION]... [USER]
選項:-u: 僅顯示有效的UID;
-g: 僅顯示使用者的基本組ID;
-G:僅顯示使用者所屬的所有組的ID;
-n: 顯示名字而非ID;
-su命令:登入式切換使用者:會通過讀取目標使用者的配置檔案來重新初始化
語法:su - USERNAME
su -l USERNAME
非登入式切換:不會讀取目標使用者的配置檔案進行初始化
su USERNAME
注意:管理員可無密碼切換至其它任何使用者;
-c 'COMMAND':僅以指定使用者的身份執行此處指定的命令;
檔案許可權管理命令
-chmod用來變更檔案或目錄的許可權。在UNIX系統家族裡,檔案或目錄許可權的控制分別以讀取、寫入、執行3種一般許可權來區分,另有3種特殊許可權可供運用。使用者可以使用chmod指令去變更檔案與目錄的許可權,設定方式採用文字或數字代號皆可。符號連線的許可權無法變更,如果使用者對符號連線修改許可權,其改變會作用在被連線的原始檔案
語法:chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
檔案的三類使用者:u :屬主
g :屬組
o :其他
a :所有
(1) chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
賦權表示法:直接操作一類使用者的所有許可權位rwx;
u= chmod u=rwx,g=rw,o=r f01
g=
o=
a=
授權表示法:直接操作一類使用者的一個許可權位r,w,x;
u+, u- chmod u+x,g+w f01
g+, g-
o+, o-
a+, a-
(2) chmod [OPTION]... OCTAL-MODE FILE..
chmod 764 f01.
(3) chmod [OPTION]... --reference=RFILE FILE...
選項:-R, --recursive:遞迴修改
注意:使用者僅能修改屬主為自己的那些檔案的許可權;
從屬關係管理命令:chown,chgrp
-chown 命令: 改變某個檔案或目錄的所有者和所屬的組,該命令可以向某個使用者授權,使該使用者變成指定檔案的所有者或者改變檔案所屬的組。使用者可以是使用者或者是使用者D,使用者組可以是組名或組id。檔名可以使由空格分開的檔案列表,在檔名中可以包含萬用字元。
語法:chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
選項:-R:遞迴修改
例:chown -R liu /usr/meng #將/usr/meng下的目錄及其子目錄、檔案的所有者改為liu
chown user:market f01 #把檔案f01給user,新增到market組
chown :market f01 #把檔案f01給user,新增到market組
-chgrp 命令:用來改變檔案或目錄所屬的使用者組。該命令用來改變指定檔案所屬的使用者組。其中,組名可以是使用者組的id,也可以是使用者組的組名。檔名可以 是由空格分開的要改變屬組的檔案列表,也可以是由萬用字元描述的檔案集合。如果使用者不是該檔案的檔案主或超級使用者(root),則不能改變該檔案的組。
語法:chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
注意:僅管理員可修改檔案的屬主和屬組
引數:-R或——recursive:遞迴處理,將指令目錄下的所有檔案及子目錄一併處理;
-v或——verbose:顯示指令執行過程;
--reference=<參考檔案或目錄>:把指定檔案或目錄的所屬群組全部設成和參考檔案或目錄的所屬群組相同;
例:chgrp –R market /usr/meng #將/usr/meng及其子目錄下的檔案的組修改為market
思考:使用者對目錄有寫許可權,但對目錄下的檔案沒有寫許可權時,能否修改此檔案內容?能否刪除此檔案?
回答:不能修改此檔案,但能刪除此檔案
反向掩碼:
-umask 命令:檔案的許可權反向掩碼,遮罩碼;
檔案的許可權反向掩碼預設為:666-umask
目錄的許可權反向掩碼預設為:777-umask
注意:之所以檔案用666去減,表示檔案預設不能擁有執行許可權;如果減得的結果中有執行許可權,則需要將其加1;
例:若反向掩碼umask為: 023
則建立的檔案的許可權預設為:666-023=644
建立的目錄的許可權預設為:777-023=754
umask:檢視當前umask
[[email protected] /]# umask
0022
umask MASK: 設定umask
[email protected] /]# umask 0020
[[email protected] /]# touch f01
[[email protected] /]# ls –l
-rw-r--rw-. 1 root root 0 Nov 26 06:05 f01
注意:此類設定僅對當前shell程序有效;
練習示例:
1、新建系統組mariadb, 新建系統使用者mariadb, 屬於mariadb組,要求其沒有家目錄,且shell為/sbin/nologin;嘗試root切換至使用者,檢視其命令提示符;
[[email protected] /]# groupadd -g 5004 mariadb
[[email protected] /]# useradd -g 5004 -s /sbin/nologin -M mariadb
2、新建GID為5005的組mageedu,新建使用者gentoo,要求其家目錄為/users/gentoo,密碼同用戶名;
[[email protected] /]# useradd user3
[[email protected] /]# echo “user3” | passwd --stdin user3
3、新建使用者fedora,其家目錄為/users/fedora,密碼同用戶名;
[[email protected] /]# useradd –d /users/fedora fedora
[[email protected] /]# echo “fedora” | passwd --stdin fedora
4、新建使用者www, 其家目錄為/users/www;刪除www使用者,但保留其家目錄;
[[email protected] /]# useradd -d /users/www www
[[email protected] /]# userdel -r www
5、為使用者gentoo和fedora新增附加組mageedu;
[[email protected] home]# usermod -G mageedu gentoo
[[email protected] home]# usermod -G mageedu fedora
6、複製目錄/var/log至/tmp/目錄,修改/tmp/log及其內部的所有檔案的屬組為mageedu,並讓屬組對目錄本身擁有寫許可權;
[[email protected] home]# chgrp -R mageedu /tmp/log
[[email protected] home]# chmod g+x /tmp/log