Linux系列教程——Linux基本权限、Linux特殊权限、LinuxACL控制、Linux输入输出
文章目錄
- 1 Linux基本權限
- 1.權限基本概述
- 1.什么是權限?
- 2.為什么要有權限?
- 3.權限與用戶之間的關系?
- 4.權限中的rwx分別代表什么含義?
- 2.權限設置示例
- 1.為什么要設定權限,我們又如何修改一個文件的權限?
- 2.使用chmod設定權限示例
- 3.權限設置案例
- 3.權限設置案例
- 4.屬主屬組設置
- 2 Linux特殊權限
- 1.特殊權限概述
- 2.特殊權限SUID
- 1.問題拋出
- 2.解決方案
- 3.示例演示
- 4.例子解釋
- 3.特殊權限SGID
- 2.sgid授權方法: 2000權限字符s(S),取決于屬組位置上的x
- 3.sgid作用
- 4.特殊權限SBIT
- 2.sticky授權方法,1000 權限字符t(T),其他用戶位的x位上設置。
- 3.sticky作用
- 5.權限屬性chattr
- 6.進程掩碼umask
- 1.umask是什么?
- 2.umask是如何改變創建新文件的權限
- 3.umask涉及哪些配置文件
- 4.umask演示示例
- 3 LinuxACL控制
- 1.ACL訪問控制概述
- 1.設定acl權限案例如下
- 2.查看acl權限
- 3.移除acl權限
- 4.查看acl幫助
- 2.ACL高級特性MASK
- 3.ACL高級特性Default
- 4.ACL訪問控制實踐案例
- 4 Linux輸入輸出
- 1.重定向概述
- 1.什么是重定向
- 2.為何要使用重定向
- 3.學習重定向的預備知識,標準輸入與輸出
- 2.輸出重定向
- 3.輸入重定向
- 4.進程管道技術
- 1.什么是管道
- 2.管道流程示意圖
- 3.管道使用案例
- 4.管道中的tee技術
1 Linux基本權限
1.權限基本概述
1.什么是權限?
我們可以把它理解為操作系統對用戶能夠執行的功能所設立的限制,主要用于約束用戶能對系統所做的操作,以及內容訪問的范圍,或者說,權限是指某個特定的用戶具有特定的系統資源使用權力。
2.為什么要有權限?
因為系統中不可能只存在一個root用戶,一定會存在多個用戶,為了保護每個登陸用戶的隱私和工作環境,所以就有了權限。(比如三個租客合租同一個房子,a租客要使用b租客的肥皂,那這個事情??)
3.權限與用戶之間的關系?
在Linux系統中,針對文件定義了三種身份,分別是屬主(owner)、屬組(group)、其他人(others),每一種身份又對應三種權限,分別是可讀(readable)、可寫(writable)、可執行(excutable)。
用戶對文件資源,有三種角色ugo,當一個用戶訪問文件流程如下
4.權限中的rwx分別代表什么含義?
當我們使用ls -l查看一個文件的詳細屬性時,能看到每個文件都有一個9位基本權限位,比如: rwxr-xr-x其中每三位字符為一組,分別表示屬主權限位,屬組權限位,匿名權限位。linux中基本權限位則是使用這9位字符來表示,主要控制文件屬主(User)、屬組(Group)、其他用戶(Other)
字母
含義
對應權限
r(read)
讀取權限
4
w(write)
寫入權限
2
x(execute)
執行權限
1
-(沒有權限)
沒有權限
0
PS: 如果權限位不可讀、不可寫、不可執行,則全部使用-作為占位符表示。
2.權限設置示例
文件示例: rwxrw-r– alice hr file1.txtQ1: alice對file1文件擁有什么權限?Q2: jack 對 file1.txt 文件有什么權限? 前提:jack 屬于 hr 組Q3: tom 對 file1.txt 文件有什么權限?
1.為什么要設定權限,我們又如何修改一個文件的權限?
Q1: 為什么要設定權限,可以賦于某個用戶或組 – 能夠以何種方式 – 訪問某個文件Q2: Linux下使用chmod命令來變更權限,root用戶可以變更所有文件的權限,而普通用戶僅能變更屬于自己的文件。
2.使用chmod設定權限示例
方式一: user group other
[root@bgx ~]# touch file #創建文件 [root@bgx ~]# chmod a=rwx file #給所有人添加讀寫執行權限 [root@bgx ~]# chmod a=-rwx file #取消所有的權限 [root@bgx ~]# chmod u=rwx,g=rw,o=- file #屬主讀寫執行,屬組讀寫,其他人無權限 [root@bgx ~]# chmod ug=rwx,o=r file #屬主屬組讀寫執行,其他人讀權限 [root@bgx ~]# ll file -rwxrw-r-- 1 root root 0 Apr 13 03:29 file方式二、number
#選項: -R遞歸修改 [root@bgx ~]# touch file [root@bgx ~]# chmod 644 file [root@bgx ~]# chmod 600 file [root@bgx ~]# ll file -rw------- 1 root root 0 Apr 13 03:29 file#針對目錄設定權限 [root@bgx ~]# mkdir dir [root@bgx ~]# chmod 777 dir/ #修改目錄允許所有人訪問 [root@bgx ~]# chmod -R 755 dir/ #修改目錄及子目錄權限 [root@bgx ~]# ll -d dir/ drwxr-xr-x 2 root root 6 Apr 13 03:34 dir/3.權限設置案例
針對 hr 部門的訪問目錄/home/hr 設置權限,要求如下:1.root 用戶和 hr 組的員工可以讀、寫、執行2.其他用戶沒有任何權限
[root@bgx ~]# groupadd hr [root@bgx ~]# useradd hr01 -G hr [root@bgx ~]# useradd hr02 -G hr [root@bgx ~]# mkdir /home/hr [root@bgx ~]# chgrp hr /home/hr [root@bgx ~]# chmod 770 /home/hr [root@bgx ~]# ll -d /home/hr drwxrwx--- 2 root hr 6 Apr 13 03:26 /home/hr3.權限設置案例
在Linux中權限對文件和對目錄的影響是有不同區別的。
權限
對文件的影響
對目錄的影響
讀取權限(r)
具有讀取閱讀文件內容權限
具有瀏覽目錄及子目錄
寫入權限(w)
具有新增、修改文件內容的權限
具有增加和刪除目錄內文件
執行權限(x)
具有執行文件的權限
具有訪問目錄的內容(取決于目錄中文件權限)
文件權限實驗案例:
#1.新建文件,并添加內容至文件中,默認文件匿名用戶僅有讀權限 [root@lqz ~]# echo "date" > filename [root@lqz ~]# ll filename -rw-r--r-- 1 root root 5 Jan 24 08:24 filename#2.切換bgx普通用戶 [root@lqz ~]# su - bgx#3.對文件擁有讀取的權限,但bgx用戶對文件沒有執行和刪除的權限 [bgx@lqz ~]$ cat /root/filename date#4.使用root增加x執行權限 [root@lqz ~]# chmod o+x /root/filename [root@lqz ~]# ll /root/filename -rw-r--r-x 1 root root 5 Jan 24 08:24 /root/filename#5.測試x權限是否真的能執行該文件 [bgx@lqz ~]$ /root/filename Wed Jan 24 08:28:34 EST 2018#6.增加w執行權限 [root@lqz ~]# chmod o+w /root/filename [root@lqz ~]# ll /root/filename -rw-r--rwx 1 root root 5 Jan 24 08:24 /root/filename#7.測試執行權限 [bgx@lqz ~]$ vim /root/filenamePS: 總結rwx對文件的影響讀取權限(r)具有讀取閱讀文件內容權限1.只能使用查看類命令cat、head、tail、less、more
寫入權限(w)具有新增、修改文件內容的權限1.使用vim編輯會提示權限拒絕, 但可強制保存,會覆蓋文件的所有內容2.使用echo命令重定向的方式可以往文件內寫入數據,>>可以進行追加3.不能刪除文件,因為刪除文件看的不是文件的屬性,需要看上級目錄是否有w的權限
執行權限(x)具有執行文件的權限1.執行權限什么用都沒有2.如果普通用戶需要執行文件,需要配合r權限
目錄權限實驗案例:
PS: 總結rwx對目錄的影響讀取權限(r),如果目錄只有r權限: 具有瀏覽目錄及子目錄權限1.可以使用ls命令瀏覽目錄及子目錄, 但同時也會提示權限拒絕2.使用ls -l命令瀏覽目錄及子目錄,文件屬性會帶問號,并且只能看到文件名總結: 目錄只有r權限,僅僅只能瀏覽內的文件名,無其他操作權限
寫入權限(w),如果目錄只有w權限: 具有增加、刪除或修改目錄內文件名權限(需要x權限配合)PS: 如果目錄有w權限, 可以在目錄內創建文件, 刪除文件(跟文件本身權限無關)不能進入目錄、不能復制目錄、不能刪除目錄、不能移動目錄
執行權限(x),如果目錄只有x權限1.只能進入目錄2.不能瀏覽、復制、移動、刪除
Linux權限總結與注意事項文件r權限, 只給用戶查看,無其他操作文件rw權限, 可以查看和編輯文件內容文件rx權限, 允許查看和執行文件、但不能修改文件—–>PASS文件rwx權限, 能讀,能寫,能執行,但不能刪除,因為刪除需要看上級目錄的權限有沒有w—–>PASS目錄rx權限, 允許瀏覽目錄內文件以及子目錄、并允許在目錄內新建文件, 不允許創建、刪除文件和目錄目錄wx權限, 能進入目錄,能刪除內容,能寫入內容,但就是無法使用ls cat這樣的命令—–>PASS目錄rw權限, 能看,能寫,但無法進入目錄—–>PASSPS: 文件的 x權限小心給予,目錄的 w權限小心給予。PS: 文件通常設定的權限是644,目錄設定的權限是755PS: 控制目錄權限755, 如果有普通用戶需要操作目錄里面的文件,在來看文件的權限
4.屬主屬組設置
變更文件屬主和屬組的意義?比如: 我現在手里有多套房,希望出售其中的A房進行變現,那么我會考慮將A房過戶給金主,過戶成功后A房就屬于金主了,那么此時A房的擁有者就屬于金主而不再屬于我。
在Linux中如何變更一個文件或者一個資源的屬主和屬組呢,可以使用chown、chgrp命令實現。chown能設置屬主和屬組,chgrp僅能設置屬組。(所以用哪個你懂的)
2 Linux特殊權限
1.特殊權限概述
前面我們已經學習過 r(讀)、w(寫)、 x(執行)這三種普通權限,但是我們在査詢系統文件權限時會發現出現了一些其他權限字母,比如:
[root@bgx ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd在屬主本來應該是 x(執行)權限的位置出現了一個小寫s,這是什么權限?我們把這種權限稱作 SetUID 權限,也叫作 SUID 的特殊權限。這種權限有什么作用呢?或者說能干啥?別急,先往下看……
2.特殊權限SUID
1.問題拋出
在 Linux 系統中,每個普通用戶都可以更改自己的密碼,這是合理的設置。問題是,普通用戶的信息保存在 /etc/passwd 文件中,用戶的密碼在 /etc/shadow 文件中,也就是說,普通用戶在更改自己的密碼時修改了 /etc/shadow 文件中的加密密碼,但是文件權限顯示,普通用戶對這兩個文件其實都是沒有寫權限的,那為什么普通用戶可以修改自己的權限呢?……(難道學了個假的權限)
[root@bgx ~]# ll /etc/passwd -rw-r--r-- 1 root root 6209 Apr 13 03:26 /etc/passwd [root@bgx ~]# ll /etc/shadow ---------- 1 root root 11409 Apr 13 03:26 /etc/shadow2.解決方案
其實,普通用戶可以修改自己的密碼在于 passwd 命令。該命令擁有特殊權限 SetUID,也就是在屬主的權限位的執行權限上是 s。可以這樣來理解它:當一個具有執行權限的文件設置 SetUID 權限后,用戶在執行這個文件時將以文件所有者的身份來執行。
PS: 當普通用戶使用 passwd 命令更改自己的密碼時,實際上是在用 passwd 命令所有者 root 的身份在執行 passwd 命令,root 當然可以將密碼寫入 /etc/shadow 文件,所以普通用戶也可以修改 /etc/shadow 文件,命令執行完成后,該身份也隨之消失。
3.示例演示
舉個例子,有一個用戶 lamp,她可以修改自己的權限,因為 passwd 命令擁有 SetUID 權限;但是她不能査看 /etc/shadow 文件的內容,因為査看文件的命令(如 cat)沒有 SetUID 權限。命令如下:
#自己可以修改自己的密碼,從而改變/etc/shadow中的數據 [lamp@bgx ~]$ passwd#但無法使用cat命令查看/etc/shadow [lamp@bgx ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied我們畫一張示意圖來理解上述過程
4.例子解釋
passwd 是系統命令,可以執行,所以可以賦予 SetUID 權限。lamp 用戶對 passwd 命令擁有 x(執行)權限。lamp 用戶在執行 passwd 命令的過程中,會暫時切換為 root 身份,所以可以修改 /etc/shadow 文件。命令結束,lamp 用戶切換回自己的身份。PS: cat命令沒有 SetUID權限,所以使用 lamp 用戶身份去訪問 /etc/shadow 文件,當然沒有相應權限了。F: 但如果將passwd命令的suid去掉會發生什么???
2.suid授權方法4000 權限字符s(S),用戶位置上的x位上設置
3.suid的作用1.讓普通用戶對可執行的二進制文件,臨時擁有二進制文件的所屬主權限。2.如果設置的二進制文件沒有執行權限,那么suid的權限顯示就是大S。3.特殊權限suid僅對二進制可執行程序有效,其他文件或目錄則無效。注意: suid極度危險,不信可以嘗試對vim或rm進行設定SetUID。
3.特殊權限SGID
將目錄設置為sgid后,如果在該目錄下創建文件,都將與該目錄的所屬組保持一致,演示如下
#1.建立測試目錄 [root@bgx ~]# cd /tmp/ && mkdir dtest#2.給測試目錄賦予SetGID權限,檢查SetGID是否生效 [root@bgx tmp]# chmod g+s dtest/ && ll -d dtest/ drwxr-sr-x 2 root root 6 Apr 13 05:21 dtest/#3.給測試目錄賦予777權限,讓普通用戶可以寫 [root@bgx tmp]# chmod 777 dtest/#4.切換成普通用戶lamp,并進入該目錄 [root@bgx tmp]# su - lamp [lamp@bgx ~]$ cd /tmp/dtest/#5.普通用戶創建測試文件,檢查文件的信息 [lamp@bgx dtest]$ touch lamp_test [lamp@bgx dtest]$ ll -rw-rw-r-- 1 lamp root 0 Apr 13 05:21 lamp_test2.sgid授權方法: 2000權限字符s(S),取決于屬組位置上的x
# chmod 2755 directory # chmod g+s directory3.sgid作用
1.針對用戶組權限位修改,用戶創建的目錄或文件所屬組和該目錄的所屬組一致。2.當某個目錄設置了sgid后,在該目錄中新建的文件不在是創建該文件的默認所屬組3.使用sgid可以使得多個用戶之間共享一個目錄的所有文件變得簡單。
4.特殊權限SBIT
Sticky(SI TI KI)粘滯位目前只對目錄有效,作用如下:普通用戶對該目錄擁有 w 和 x 權限,即普通用戶可以在此目錄中擁有寫入權限。如果沒有粘滯位,那么普通用戶擁有 w 權限,就可以刪除此目錄下的所有文件,包括其他用戶建立的文件。但是一旦被賦予了粘滯位,除了 root 可以刪除所有文件,普通用戶就算擁有 w 權限,也只能刪除自己建立的文件,而不能刪除其他用戶建立的文件。
[root@bgx tmp]# ll -d /tmp/ drwxrwxrwt. 12 root root 4096 Apr 13 05:32 /tmp/2.sticky授權方法,1000 權限字符t(T),其他用戶位的x位上設置。
# chmod 1755 /tmp # chmod o+t /tmp3.sticky作用
1.讓多個用戶都具有寫權限的目錄,并讓每個用戶只能刪自己的文件。2.特殊sticky目錄表現在others的x位,用小t表示,如果沒有執行權限是T3.一個目錄即使它的權限為”777”如果是設置了粘滯位,除了目錄的屬主和”root”用戶有權限刪除,除此之外其他用戶都不允許刪除該目錄。
5.權限屬性chattr
chatrr 只有 root 用戶可以使用,用來修改文件系統的權限屬性,建立凌駕于 rwx 基礎權限之上的授權。chatrr 命令格式:[root@bgx ~]# chattr [±=] [選項] 文件或目錄名
#選項: + 增加權限 -減少權限 =等于某個權限 # a:讓文件或目錄僅可追加內容 # i:不得任意更動文件或目錄#1.創建文件并設置屬性 [root@lqz ~]# touch file_a file_i [root@lqz ~]# lsattr file_a file_i ---------------- file_a ---------------- file_i#2.使用chattr設置屬性,lsattr查看權限限制 [root@lqz ~]# chattr +a file_a [root@lqz ~]# chattr +i file_i [root@lqz ~]# lsattr file_a file_i -----a---------- file_a ----i----------- file_i#3.a權限,無法寫入和刪除文件,但可以追加數據,適合/etc/passwd這樣的文件 [root@lqz ~]# echo "aa" > file_a bash: file_a: Operation not permitted [root@lqz ~]# rm -f file_a rm: cannot remove ‘file_a’: Operation not permitted [root@lqz ~]# echo "aa" >> file_a#5.i權限, 無法寫入,無法刪除,適合不需要更改的重要文件加鎖 [root@lqz ~]# echo "i" > file_i bash: file_i: Permission denied [root@lqz ~]# echo "i" >> file_i bash: file_i: Permission denied [root@lqz ~]# rm -f file_i rm: cannot remove ‘file_i’: Operation not permitted#6.解除限制 [root@tianyun ~]# chattr -a file100 [root@tianyun ~]# chattr -i file2006.進程掩碼umask
1.umask是什么?
當我們登錄系統之后創建一個文件總是有一個默認權限的,比如: 目錄755、文件644、那么這個權限是怎么來的呢?這就是umask干的事情。umask設置了用戶創建文件的默認權限。
2.umask是如何改變創建新文件的權限
系統默認umask為022,那么當我們創建一個目錄時,正常情況下目錄的權限應該是777,但umask表示要減去的值,所以新目錄文件的權限應該是777 - 022 =755。至于文件的權限也依次類推666 - 022 =644。
3.umask涉及哪些配置文件
umask涉及到的相關文件/etc/bashrc /etc/profile ~/.bashrc ~/.bash_profileshell (vim,touch) –umask–> 會影響創建的新文件或目錄權限vsftpd服務如果修改–umask–> 會影響ftp服務中新創建文件或創建目錄權限useradd如果修改umask–> 會影響用戶HOME家目錄權限
4.umask演示示例
#1.假設umask值為:022(所有位為偶數) #文件的起始權限值 6 6 6 - 0 2 2 = 6 4 4 #2.假設umask值為:045(其他用戶組位為奇數) #計算出來的權限。由于umask的最后一位數字是5,所以,在其他用戶組位再加1。 6 6 6 - 0 4 5 = 6 2 1#3.默認目錄權限計算方法 7 7 7 - 0 2 2 = 7 5 5#umask所有位全為偶數時 # umask 044 # mkdir d044 目錄權限為733 # touch f044 文件權限為622#umask部分位為奇數時 # umask 023 # mkdir d023 目錄權限為754 # touch f023 文件權限為644#umask值的所有位為奇數時 # umask 035 # mkdir d035 目錄權限為742 # touch f035 文件權限為642示例1: 在 shell 進程中創建文件
#查看當前用戶的umask權限 [root@lqz ~]# umask 0022 [root@lqz ~]# touch file0022 [root@lqz ~]# mkdir dir0022 [root@lqz ~]# ll -d file0022 dir0022/ drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/ -rw-r--r-- 1 root root 0 Jan 24 09:02 file0022示例2: 修改 shell umask 值(臨時生效)
[root@lqz ~]# umask 000 [root@lqz ~]# mkdir dir000 [root@lqz ~]# touch file000 [root@lqz ~]# ll -d dir000 file000 drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000 -rw-rw-rw- 1 root root 0 Jan 24 09:04 file000示例3: 通過 umask 決定新建用戶 HOME 目錄的權限
[root@lqz ~]# vim /etc/login.defs UMASK 077 [root@lqz ~]# useradd dba [root@lqz ~]# ll -d /home/dba/ drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/[root@tianyun ~]# vim /etc/login.defs UMASK 000 [root@lqz ~]# useradd sa [root@lqz ~]# ll -d /home/sa/ drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/3 LinuxACL控制
1.ACL訪問控制概述
上一章節我們學習了基礎權限UGO、特殊權限,但所有的權限是針對某一類用戶設置的, 如果希望對文件進行自定義權限控制,就需要用到文件的訪問控制列表ACL
UGO設置基本權限: 只能一個用戶,一個組和其他人 ACL設置基本權限: r、w、x 設定acl只能是root管理員用戶. 相關命令: getfacl , setfacl
acl基本使用方式
//環境準備 [root@lqz ~]# cp /etc/passwd /root/passwd //文件在沒有設定acl, 看到的和傳統權限是一樣 [root@lqz ~]# ll passwd -rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt//使用getacl查看權限 [root@lqz ~]# getfacl passwd # file: passwd # owner: root # group: root user::rw- //文件owner權限 group::r-- //文件擁有組權限 other::r-- //其他人權限1.設定acl權限案例如下
-rw-r--r-- 1 root root 1380 Feb 27 11:25 passwdalice 擁有讀寫權限 rw bgx 沒有任何權限 - jack 組擁有讀權限 r 匿名用戶擁有讀寫權限 rw//建立相關用戶 [root@lqz ~]# useradd alice [root@lqz ~]# useradd bgx [root@lqz ~]# useradd jack//增加用戶 alice 權限 [root@lqz ~]# setfacl -m u:alice:rw passwd//增加用戶 bgx 權限 [root@lqz ~]# setfacl -m u:bgx:- passwd//增加匿名用戶權限 [root@lqz ~]# setfacl -m o::rw passwd//增加組權限 [root@lqz ~]# setfacl -m g:jack:r passwd注意: 如果用戶同時屬于不同的兩個組,并且兩個組設定了acl訪問控制1.根據acl訪問控制優先級進行匹配規則2.如有用戶擁有多個組的權限不同的權限,優先使用最高權限(模糊匹配)2.查看acl權限
[root@lqz ~]# ll passwd -rw-rw-rw-+ 1 root root 1531 Jan 26 07:52 passwd[root@lqz ~]# getfacl passwd # file: passwd # owner: root # group: root user::rw- user:bgx:--- user:alice:rw- group::r-- group:jack:r-- mask::rw- other::rw-3.移除acl權限
//移除jack組的acl權限 [root@lqz ~]# setfacl -x g:jack passwd//移除bgx用戶的acl權限 [root@lqz ~]# setfacl -x u:bgx passwd//移除文件和目錄所有acl權限 [root@lqz ~]# setfacl -b passwd//移除默認的acl [root@lqz ~]# setfacl -k dir4.查看acl幫助
//EXAMPLES 示例文檔 [root@lqz ~]# man setfacl//復制 file1 的 ACL 權限給 file2 [root@lqz ~]# setfacl -m u:alice:rw,u:bgx:r,g:jack:rw file1 [root@lqz ~]# getfacl file1 |setfacl --set-file=- file22.ACL高級特性MASK
mask用于臨時降低用戶或組的權限,但不包括文件的所有者和其他人。mask最主要的作用是用來決定用戶的最高權限。
mask默認不會對匿名用戶降低權限,所以為了便于管理文件的訪問控制,建議匿名用戶的權限置為空
//臨時降低用戶或組權限 [root@lqz ~]# setfacl -m mask::rw filename小結 1.mask會影響哪些用戶,除了所有者和其他人。 2.mask權限決定了用戶訪問文件時的最高權限。(如何影響) 3.mask用于臨時降低用戶訪問文件的權限。(mask做什么) 4.任何重新設置acl訪問控制會清理mask所設定的權限。
3.ACL高級特性Default
default: 繼承(默認)
alice能夠對/opt目錄以及以后在/opt目錄下新建的文件有讀、寫、執行權限
4.ACL訪問控制實踐案例
案例1: 將新建文件的屬性修改tom:admin, 權限默認為644要求: tom對該文件有所有的權限, mary可以讀寫該文件, admin組可以讀寫執行該文件, jack只讀該文件, 其他人一律不能訪問該文件
//實驗前, 建立幾個普通用戶 [root@lqz ~]# useradd tom [root@lqz ~]# useradd bean [root@lqz ~]# useradd mary [root@lqz ~]# useradd jack [root@lqz ~]# useradd sutdent [root@lqz ~]# groupadd admin [root@lqz ~]# gpasswd -a mary admin [root@lqz ~]# gpasswd -a bean admin//檢查用戶屬性 [root@linux-node1 ~]# id tom uid=1004(tom) gid=1004(tom) groups=1004(tom) [root@linux-node1 ~]# id mary uid=1006(mary) gid=1006(mary) groups=1006(mary),1007(admin) [root@linux-node1 ~]# id bean uid=1005(bean) gid=1005(bean) groups=1005(bean),1007(admin) [root@linux-node1 ~]# id jack uid=1002(jack) gid=1002(jack) groups=1002(jack) [root@linux-node1 ~]# id sutdent uid=1007(sutdent) gid=1008(sutdent) groups=1008(sutdent)//準備相關文件 [root@linux-node1 ~]# cp /etc/passwd /root/ [root@linux-node1 ~]# chown tom:admin passwd [root@linux-node1 ~]# chmod 644 passwd//檢查設定前的acl列表 [root@linux-node1 ~]# getfacl passwd # file: passwd # owner: tom # group: admin user::rw- group::r-- other::r--//設定acl權限 [root@linux-node1 ~]# setfacl -m u::rwx,u:mary:rw,u:jack:r,g:admin:rwx,o::- passwd//檢查acl權限 [root@linux-node1 ~]# getfacl passwd # file: passwd # owner: tom # group: admin user::rwx user:jack:r-- user:mary:rw- group::r-- group:admin:rwx mask::rwx other::---acl的控制規則是從上往下匹配 1.tom由于是文件的擁有者,所以直接按照user::rwx指定的權限去操作 2.mary用戶從上往下尋找匹配規則,發現user:mary:rw-能夠精確匹配mary用戶,盡管mary屬于admin組,同時admin組有rwx的權限,但是由于mary用戶的規則在前面,所有優先生效。 3.bean由于找不到精確匹配的規則,而bean是屬于admin組,根據文件的定義,該文件是屬于admin組,所以bean的權限是按照group:admin:rwx的權限去操作。 4.jack用戶從上往下尋找匹配規則,發現user:jack:r--能夠精確匹配jack用戶。 5.student用戶找不到精確匹配的user定義規則, 也找不到相關組的定義規則,最后屬于other。
案例2: lab acl setup
controller組成員有:student sodor組成員有:thomas,james目錄: /shares/steamies 文件: /shares/steamies/file 腳本: /shares/steamies/test.shcontroller屬于該目錄的所屬組, 新建文件必須屬于controller組 sodor組的成員對該目錄擁有rwx權限 sodor組成員james對該目錄及子目錄(包括以后新建立的文件)沒有任何權限實際操作
//準備用戶 [root@linux-node1 ~]# groupadd controller [root@linux-node1 ~]# groupadd sodor [root@linux-node1 ~]# useradd student -G controller [root@linux-node1 ~]# useradd thomas -G sodor [root@linux-node1 ~]# useradd james -G sodor//準備目錄 [root@linux-node1 ~]# mkdir /shares/steamies -p [root@linux-node1 ~]# echo "file" >> /shares/steamies/file [root@linux-node1 ~]# echo "echo 123" >> /shares/steamies/test.sh [root@linux-node1 ~]# chmod 755 /shares/steamies/test.sh [root@linux-node1 ~]# chown -R :controller /shares/steamies/ [root@linux-node1 ~]# chmod g+s /shares/steamies///設定權限(X表示,如果原本有執行權限就保留,如果沒有則不添加) [root@linux-node1 ~]# setfacl -R -m g:sodor:rwX,u:james:- /shares/steamies///設定繼承規則 [root@linux-node1 ~]# setfacl -R -m d:g:sodor:rwX,d:u:james:- /shares/steamies/[root@linux-node1 steamies]# getfacl /shares/steamies/ getfacl: Removing leading '/' from absolute path names # file: shares/steamies/ # owner: root # group: controller # flags: -s- user::rwx user:james:--- group::r-x group:sodor:rwx mask::rwx other::r-x default:user::rwx default:group::r-x default:group:sodor:rwx default:mask::rwx default:other::r-x4 Linux輸入輸出
1.重定向概述
1.什么是重定向
將原本要輸出到屏幕的數據信息,重新定向到某個指定的文件中。比如:每天凌晨定時備份數據,希望將備份數據的結果保存到某個文件中。這樣第二天通過查看文件的內容就知道昨天備份的數據是成功還是失敗。
2.為何要使用重定向
1.當屏幕輸出的信息很重要,而且希望保存重要的信息時;2.后臺執行中的程序,不希望他干擾屏幕正常的輸出結果時;3.系統的例行命令, 例如定時任務的執行結果,希望可以存下來時;4.一些執行命令,我們已經知道他可能出現錯誤信息, 想將他直接丟棄時;5.錯誤日志與正確日志需要分別輸出至不同的文件保存時;
3.學習重定向的預備知識,標準輸入與輸出
當運行一個程序時通常會自動打開三個標準文件,分別是標準輸入、標準輸出、錯誤輸出
| 標準輸入(STDIN) | 0 | 默認是鍵盤,也可以是文件或其他命令的輸出。 |
| 標準輸出(STDOUT) | 1 | 默認輸出到屏幕。 |
| 錯誤輸出(STDERR) | 2 | 默認輸出到屏幕。 |
文件名稱(filename)
3+
進程將從標準輸入中得到數據,將正常輸出打印至屏幕終端,將錯誤的輸出信息也打印至屏幕終端。PS: 進程是使用文件描述符(file descriptors)來管理打開的文件
以 cat 命令為例, cat 命令的功能是從命令行給出的文件中讀取數據,并將這些數據直接送到標準輸出。若使用如下命令:
但如果 使用 cat 命令沒有跟上輸入的文件名,那么cat命令則會通過命令行標準輸入中讀取數據, 并將其送到標準輸出。
[root@lqz ~]# cat hello #標準輸入 hello #標準輸出 ^C #用戶輸入的每一行都立刻被cat命令輸出到屏幕上。下面了解一下標準輸入輸出過程
#持續追蹤查看文件內容 [root@lqz ~]# tail -f /etc/passwd ctrl+z 將進程轉到后臺#查看運行的進程 [root@lqz ~]# ps PID TTY TIME CMD 5848 pts/1 00:00:00 bash 6885 pts/1 00:00:00 tail 6888 pts/1 00:00:00 ps#查看tail命令的pid,6885進程下的文件描述符 [root@lqz ~]# ls -l /proc/6885/fd total 0 lrwx------ 1 root root 64 Dec 3 06:57 0 -> /dev/pts/1 lrwx------ 1 root root 64 Dec 3 06:57 1 -> /dev/pts/1 lrwx------ 1 root root 64 Dec 3 06:56 2 -> /dev/pts/1 lr-x------ 1 root root 64 Dec 3 06:57 3 -> /etc/passwd lr-x------ 1 root root 64 Dec 3 06:57 4 -> inotify#Linux查看標準輸入輸出設備 [root@lqz ~]# ls -l /dev/std lrwxrwxrwx 1 root root 15 Dec 2 22:30 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 Dec 2 22:30 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 Dec 2 22:30 /dev/stdout -> /proc/self/fd/12.輸出重定向
輸出重定向,改變輸出內容的位置。輸出重定向有如下幾種方式,如表格所示
| 標準覆蓋輸出重定向 | > | 將程序輸出的正確結果輸出到指定的文件中,會覆蓋文件原有的內容 |
| 標準追加輸出重定向 | >> | 將程序輸出的正確結果以追加的方式輸出到指定文件,不會覆蓋原有文件 |
| 錯誤覆蓋輸出重定向 | 2> | 將程序的錯誤結果輸出到執行的文件中,會覆蓋文件原有的內容 |
| 錯誤追加輸出重定向 | 2>> | 將程序輸出的錯誤結果以追加的方式輸出到指定文件,不會覆蓋原有文件 |
| 標準輸入重定向 | << | 將命令中接收輸入的途徑由默認的鍵盤更改為指定的文件或命令 |
案例1: 標準輸出重定向(每次都會覆蓋文件)
案例2: 標準輸出重定向(會往文件的尾部在添加內容)
案例3: 錯誤輸出重定向
案例4: 正確和錯誤都輸入到相同位置
#將標準輸出和標準錯誤輸出重定向到同一個文件, 混合輸出 [lqz@lqz ~]$ find /etc -name ".conf" &>ab#合并兩個文件內容至一個文件 [lqz@lqz ~]$ cat a b > c案例5: 正確和錯誤都輸入到相同位置
#重定向到相同的位置 [root@lqz ~]# ls /root /error >ab 2>&1案例6: 重定向到空設備/dev/null
案例7: 腳本中使用重定向 (了解即可)
[root@lqz ~]# vim ping.sh ping -c1 10.0.0.1 if [ $? -eq 0 ];thenecho "10.0.0.1 is up." elseecho "10.0.0.1 is down." fi [root@lqz ~]# chmod +x ping.sh [root@lqz ~]# ./ping.sh#改進后版 [root@lqz ~]# vim ping.sh ping -c1 10.0.0.1 &>/dev/null if [ $? -eq 0 ];thenecho "10.0.0.1 is up." elseecho "10.0.0.1 is down." fi案例8: 腳本中使用重定向 (了解即可)
[root@lqz ~]# vim ping2.sh ping -c1 10.0.0.1 &>/dev/null if [ $? -eq 0 ];thenecho "10.0.0.1 is up." >>up.txt elseecho "10.0.0.1 is down." >>down.txt fi [root@lqz ~]# chmod +x ping2.sh [root@lqz ~]# ./ping2.sh3.輸入重定向
輸入重定向,即原本從鍵盤等上獲得的輸入信息,重定向由命令的輸出作為輸入。< 等價 0<
案例1: 從文件中讀入輸入的操作
案例2: 無法形容案例,請看實際操作
#沒有改變輸入的方向,默認鍵盤,此時等待輸入 [root@lqz ~]# grep 'root' xxx xxx[root@lqz ~]# grep 'root' < /etc/passwd root:x:0:0:root:/root:/bin/bash案例3: 無法形容案例,請看實際操作
[root@lqz ~]# dd if=/dev/zero of=/file1.txt bs=1M count=20 [root@lqz ~]# dd </dev/zero >/file2.txt bs=1M count=20案例4: mysql如何恢復備份,了解即可,不用關注。
[root@lqz ~]# mysql -uroot -p123 < bbs.sql案例5: 利用重定向建立多行數據的文件
#手動執行 shell 命令 [root@lqz ~]# echo "111" > file1.txt [root@lqz ~]# cat file1.txt 111 [root@lqz ~]# cat >file2.txt 111 222 333 ^D[root@lqz ~]# cat >>file3.txt aaa bbb ccc ^D案例6: 腳本中打印菜單的一種使用方法。
[root@lqz ~]# vim vm.sh cat <<-EOF +------------------- --- ---- --- ---- --- --- ---- --- --+ || | ====================== | | 虛擬機基本管理 v5.0 | | by lqz | | ====================== | | 1. 安裝 KVM | | 2. 安裝或重置 CentOS-6.9 | | 3. 安裝或重置 CentOS-7.4 | | 5. 安裝或重置 Windows-7 | | 6. 刪除所有虛擬機 | | q. 退出管理程序 | +------------------- --- ---- --- ---- --- --- ---- --- --+ EOF案例7: 兩條命令同時重定向
[root@lqz ~]# ls; date &>/dev/null [root@lqz ~]# ls &>/dev/null; date &>/dev/null [root@lqz ~]# (ls; date) &>/dev/null#后臺執行 [root@lqz ~]# (while :; do date; sleep 2; done) & [1] 6378 [root@lqz ~]# (while :; do date; sleep 2; done) &>date.txt & [root@lqz ~]# jobs [1]+ 運行中 ( while :; do date; sleep 2; done ) &>/date.txt &擴展點: subshell 了解即可
[root@lqz ~]# cd /boot; ls//subshell 中執行 [root@lqz ~]# (cd /boot; ls)#如果不希望某些命令的執行對當前 shell 環境產生影響,請在subshell中執行4.進程管道技術
1.什么是管道
管道操作符號 “|” ,主要用來連接左右兩個命令, 將左側的命令的標準輸出, 交給右側命令的標準輸入PS: 無法傳遞標準錯誤輸出至后者命令
2.管道流程示意圖
格式: cmd1 | cmd2 [...|cmdn]
3.管道使用案例
案例1: 將/etc/passwd 中的用戶按 UID 大小排序
[root@lqz ~]# sort -t":" -k3 -n /etc/passwd [root@lqz ~]# sort -t":" -k3 -n /etc/passwd -r [root@lqz ~]# sort -t":" -k3 -n /etc/passwd |head案例2: 統計當前/etc/passwd 中用戶使用的 shell 類型
#思路:取出第七列(shell) | 排序(把相同歸類)| 去重 [root@lqz ~]# awk -F: '{print $7}' /etc/passwd [root@lqz ~]# awk -F: '{print $7}' /etc/passwd |sort [root@lqz ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq [root@lqz ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c案例4: 統計網站的訪問情況 top 20
#思路: 打印所有訪問的連接 | 過濾訪問網站的連接 | 打印用戶的 IP | 排序 | 去重[root@lqz ~]# yum -y install httpd [root@lqz ~]# systemctl start httpd [root@lqz ~]# systemctl stop firewalld[root@lqz ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c [root@lqz ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c |sort -k1 -rn |head -n 20案例5: 打印當前所有 IP
[root@lqz ~]# ip addr |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}' 127.0.0.1 192.168.69.112案例6: 打印根分區已用空間的百分比(僅打印數字)
[root@lqz ~]# df |grep '/$' |awk '{print $5}' |awk -F"%" '{print $1}'PS: 管道命令符能讓大家能進一步掌握命令之間的搭配使用方法,進一步提高命令輸出值的處理效率。
4.管道中的tee技術
#選項: -a追加 [root@lqz ~]# ip addr |grep 'inet ' |tee ip.txt |awk -F"/" '{print $1}' |awk '{print $2}' 127.0.0.1 10.0.0.100[root@lqz ~]# cat ip.txt inet 127.0.0.1/8 scope host lo inet 10.0.0.100/24 brd 192.168.69.255 scope global ens32重定向與 tee 有他們在使用過程中有什么區別
[root@lqz ~]# date > date.txt #直接將內容寫入date.txt文件中 [root@lqz ~]# date |tee date.txt #命令執行會輸出至屏幕,但會同時保存一份至date.txt文件中5.xargs參數傳遞,主要讓一些不支持管道的命令可以使用管道技術
# which cat|xargs ls- l # ls |xargs rm -fv # ls |xargs cp -rvt /tmp/ -或-> ls | xargs -I {} cp -rv {} /tmp/ # ls |xargs mv -t /tmp/ -或-> ls | xargs -I {} mv {} /tmp總結
以上是生活随笔為你收集整理的Linux系列教程——Linux基本权限、Linux特殊权限、LinuxACL控制、Linux输入输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用Python优雅的登录校园网?
- 下一篇: 湖大校园网可以使用,但是进不去校内网站