歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux權限360度赤裸裸華麗麗大曝光連載之一:從ls開始

Linux權限360度赤裸裸華麗麗大曝光連載之一:從ls開始

日期:2017/2/28 16:14:30   编辑:Linux教程

從ls命令開始

Linux學習的第一步就是掌握常用命令,Linux命令眾多,以筆者使用的Red Hat Enterprise Linux 5.4來說,有大概兩千多個命令,假設每個命令有二十個選項,如此多的命令和選項全部敲一遍,簡直是在浪費生命浪費鍵盤浪費手指頭,更加沒有必要買一本大部頭的什麼命令大全之類的東西狂看,真正在管理應用中使用到的命令大概也就只有一二百個,所以要把握學習的原則,掌握最常使用的命令和最常使用的選項即可。在入門悟道之後,碰到未知的命令或選項,只要自己掌握獲得幫助的方法,即可一通百通,如同已有九陽神功護體再學習乾坤大挪移或葵花寶典就小case了。

Linux權限360度赤裸裸華麗麗大曝光連載之一:從ls開始 http://www.linuxidc.com/Linux/2011-05/36487.htm

Linux權限360度赤裸裸華麗麗大曝光連載之二:深入理解SetUID http://www.linuxidc.com/Linux/2011-05/36488.htm

Linux權限360度赤裸裸華麗麗大曝光連載之三:查缺補漏 http://www.linuxidc.com/Linux/2011-05/36489.htm

學習命令的竅門之一是掌握方法,把每個命令的英文全稱和每個選項的英文單詞找到,籍此記憶強於死記硬背,方可事半功倍;學習命令的竅門之二是不斷的練習和實驗,記住,練習是掌握命令的最好方法,毛主席教導我們說“實踐是驗證真理的唯一標准”;學習命令的竅門之三是學習和練習每個命令或選項時不要形而上學,要多想一想什麼時候會用到如何去用,才能讓你的知識系統化和有目的性。

Linux中使用頻率最高的命令唯ls莫屬,而ls使用最多的選項自然是-l 。本講即以ls -l命令為例做一示例講解,全做拋磚引玉。

ls意為“list directory contents”,列出目錄內容之意,可理解為ls即為list的縮寫;-l意為“use a long listing format”,長格式顯示,通俗點說就是顯示文件的詳細信息,可理解為l即為long的縮寫。通過man、info等幫助命令可獲得此信息,英文不好的兄弟還可籍此學習(每天背上二三十個英文單詞,不出三個月所有Linux英文幫助文檔相信應該都差不多可以看懂),通過這種方法記憶會容易得多。

在Linux中使用ls -l命令查看文件的詳細信息:

-rw-r--r-- 1 root root 27974 Oct 27 2009 install.log

“-rw-r--r--”第一個字符表示文件類型,常見的文件類型包括:-表示二進制文件,d表示目錄,l表示軟鏈接文件,使用ls查看會發現有顏色標記不同的文件類型,如目錄是藍色、二進制文件是白色、軟鏈接是青色……默認ls查看目錄內容是沒有顏色標記的,之所以會顯示這樣的信息,因為在Linux中默認有一個別名定義:

# which ls

alias ls=`ls --color=tty`

/bin/ls

甚至顏色還可以更改,比如你喜歡黃色想把目錄改成黃色,只需編輯配置文件/etc/DIR_COLORS即可,把這個文件復制改名並保存用戶宿主目錄中(cp /etc/DIR_COLORS ~/.dir_colors),就可以產生一個用戶獨立的配置,具體顏色如何更改只要看此文件的注釋說明即可。筆者並不推薦用顏色的方式識別文件類型,一來大多UNIX默認無此設置;二來很多遠程登錄管理工具默認不支持顏色標記。

尤其要說明的是軟鏈接文件,在Linux中,有兩種鏈接文件,一種是軟鏈接,類似Windows的桌面快捷方式;一種是硬鏈接,相當於復制+同步更新。

# ln -s install.log install.log.soft # 生成install.log文件的軟鏈接文件install.log.soft

# ln install.log install.log.hard # 生成install.log文件的硬鏈接文件install.log.hard

# ls -l install.log install.log.soft install.log.hard

-rw-rw-r-- 2 root admgroup 27941 May 20 07:42 install.log

-rw-rw-r-- 2 root admgroup 27941 May 20 07:42 install.log.hard

lrwxrwxrwx 1 root root 11 May 29 01:14 install.log.soft -> install.log

可以觀察到軟鏈接文件用l標記,權限皆為“lrwxrwxrwx”,會有->指向源文件,它很小,同Windows快捷方式一樣,只是一個符號鏈接。而硬連接所有屬性與原文件相同,且與原文件可以同步更新,最牛X的是原文件即便被干掉了,硬連接依然有效,而軟鏈接當然就死翹翹了。知其然還要知其所以然,為什麼硬鏈接可以這麼牛XX ,在此要先講一個Linux法則,這個法則說的通俗一點就是Linux內核這家伙不認識字母,所以它在管理文件時文件要用一個數字標記,就是i節點;同樣,用戶要有一個UID 、用戶組要有一個GID 、進程要有一個PID …… ls -i可以查看到文件的i節點:

# ls -i install.log install.log.soft install.log.hard

679394 install.log 679394 install.log.hard 679477 install.log.soft

在Linux中每個文件必須有一個i節點,反之,一個i節點是不是必須對應一個文件,一般來說是的,但是硬鏈接就是個特例,大家會看到原文件和硬鏈接對映一個i節點,所以它們會同步更新,因為內核不管文件名是什麼它只識別i節點,這就是硬鏈接和原文件可以同步更新的原因。

其他九個字符,每三個字符對應一種用戶類型,簡單來說,Linux中基本的權限管理,是每個文件把用戶分成了三類:

第一類是所有者(u),也就是文件的創建者或擁有者

一般來說文件的創建者就是所有者,但有時會變更文件所有者,比如筆者原本在寫一個防火牆腳本,因出差,工作要轉交給另一個同事,索性把文件所有者改為他,他即可擁有對文件的全部操作權限,此時可以理解為他是文件的擁有者也就是所有者。文件的所有者只能有一個。

第二類是所屬組(g),可以定義一組具有相同權限的用戶對文件的操作權限

文件所屬組默認就是創建文件的所有者所在的缺省組,一個用戶可以屬於多個組,但是只有一個缺省組,就像不管你是多麼大個的花心大蘿卜,你只能有一個媳婦,這就是缺省的,缺省的只能有一個,而且在Linux中規定,沒媳婦的蘿卜是不允許存在的!每個用戶必須有個缺省組,添加用戶時如果沒有指定所屬組系統會自動為你分配。理論上來說,一個管理做的很好的系統,應該每個用戶都隸屬於至少一個組,不可能添加一個用戶到系統是什麼都不讓他做的或者他不屬於任何公司部門的,這是管理員要規劃好的事情。

第三類是其他人(o),如果不是所有者也不是所屬組中的成員,那麼就屬於其他人

Linux中的用戶分類比較簡單,權限也簡單的分為r可讀、w可寫、x可執行三種,ls-l的第三個部分“root root”分別對應著文件的所有者和所屬組,所以此文件的權限為:所有者root對文件有讀寫權限,而所屬組root用戶組和其他人只有讀權限。

案例一:深入理解rwx

做一個小實驗,用root用戶登錄系統,然後執行:

# mkdir /test # 創建目錄/test

# chmod 777 /test # 目錄權限修改為777即rwxrwxrwx

# touch /test/newfile # 在/test目錄下新建文件newfile

# ls -ld /test # 查看/test目錄詳細信息

drwxrwxrwx 2 root root 4096 May 20 07:46 /test

# ls -l /test/newfile # 查看/test/newfile文件詳細信息

-rw-r--r-- 1 root root 0 May 20 07:46 /test/newfile

# su - zhangsan # 切換用戶身份為用戶zhangsan

$ rm /test/newfile # 刪除/test/newfile文件

問題:普通用戶zhangsan是否可以刪除管理員root創建的newfile文件?

答案是:可以。很多朋友覺得不可以,因為newfile文件是root創建且其他用戶沒有寫權限,這其實是搞錯了一個概念:認為刪除一個文件的前提條件是對文件有寫權限。要注意的是,rwx對於文件和目錄的意義是截然不同的,這往往是新手容易忽視的地方,我們通過表格比較一下。

代表字符

權限

對文件的含義

對目錄的含義

r

可讀

可以查看文件內容

可以列出目錄中的內容

w

可寫

可以修改文件內容

可以在目錄中創建、刪除文件

x

可執行

可以執行文件

可以進入目錄

1、對於文件來說

可讀是指可以使用catmore等命令查看文件內容;

可寫是指可以使用vi等編輯器修改文件內容;

可執行指的是這個文件可能是命令或者Shell腳本等,可以執行。

2、對於目錄來說

可讀是指能使用ls命令顯示目錄下的內容;

可寫指的是能夠在此目錄下使用mkdirtouchrm等命令創建或刪除文件;

可執行指的是能夠使用cd進入目錄。

所以,在Linux中,一個文件能否被刪除,是取決於命令執行者對文件所在目錄是否有寫權限,而與文件本身權限無關,文件本身權限只是限定文件內容查看或修改權限及是否可執行。

案例二:用戶授權

授權用戶zhangsan和lisi對/backup目錄具有讀寫權限,是Linux中最基本的用戶與權限管理,一般的做法是:把zhangsan和lisi用戶加入到一個用戶組中,然後改變/backup目錄的所屬組為此用戶組,再將所屬組權限設置為rw即可。

# groupadd admgroup # 添加用戶組admgroup

# gpasswd -a zhangsan admgroup # 將用戶zhangsan加入用戶組admgroup

# gpasswd -a lisi admgroup # 將用戶lisi加入用戶組admgroup

# grep admgroup /etc/group # 查看admgroup用戶組的信息

admgroup:x:502:zhangsan,lisi

# chgrp admgroup /backup # 改變/backup目錄的所屬組為admgroup

# chmod g+w /backup # 給所屬組添加w可寫權限

# ls -ld /backup # 查看/backup目錄詳細信息

drwxrwxr-x 2 root admgroup 4096 May 20 08:19 /backup

以上是授權用戶對目錄的訪問權限,若授權用戶對文件的控制權限,則要更復雜一點,除了對文件本身授權外,還要授權用戶對文件所在目錄具有可讀可執行權限,如root用戶創建的腳本/script/userinfo.sh如果授權某個普通用戶可以執行,那麼除了授權用戶對/script/userinfo.sh要有rx權限,還要對/script目錄也具有rx權限。類似的例子,Linux系統在安裝後會在/root下生成安裝日志文件,設置用戶zhangsan和lisi對/root/install.log文件有讀寫權限,還要考慮用戶對文件所在目錄/root要具有可讀和可執行權限,否則依然無法獲得文件的操作權限。

如果想授權一個文件或目錄讓某個用戶有全部的操作權限,還有一種最簡單的方法,只要修改文件或目錄的所有者為此用戶即可(chown 用戶名 目錄名/文件名)。

做為權限管理的補充,要記住一點,在Linux系統中任何時候新建的文件不能具有可執行權限(x),默認用戶創建的文件權限umask掩碼值為022 ,也就是說默認權限為777-022=755 ,但是��際上新建目錄權限真的為755 ,而二進制文件都取消了x權限,實際權限為644 。

但是若是有一個文件或目錄,要設置用戶張三有rwx權限,用戶李四有rw權限,用戶王五有r權限,用戶趙六有rx權限,怎麼辦呢?各位兄弟莫急,這個,且待下回分解,請繼續關注Linux權限360度赤裸裸華麗麗大曝光連載文章,精彩即將呈現!

下面接著把ls -l其他部分內容看完吧——

ls -l的第二部分“1”表示硬連接數,默認文件本身起始硬鏈接數就是1 ,如果新建了一個硬鏈接文件,會更新為2 ,此項意義不大,不做過多討論。

ls -l的第五部分“27974”表示文件大小,在筆者使用的系統中是以字節為單位,但是很多Linux或UNIX系統單位以數據塊為單位,一個數據塊為512字節。

ls -l的第六部分“Oct 27 2009”表示文件的創建時間或最後更改時間(如果文件在創建後被更改過的話)。

最後一部分“install.log”自然就是文件名了,在Linux中與Windows不同,第一,文件不必一定有後綴名;第二,文件名可以使用除“/”以外的任意字符;第三,以“.”開頭的文件在Linux中表示隱藏文件。

至此,筆者對ls -l命令做了一個簡單的介紹,更多的ls使用方法和選項可以通過man ls獲得,記住,沒有任何出版的圖書或網上的資料會比官方的文檔寫的更正確,授之以魚不如授之以漁,誠如一個程序員不會追女孩,給他安眠藥讓他犯罪,還不如讓他認識陳冠希,貌似扯遠了……

(連載第一篇,字數多點,敲的累死了,各位有錢的捧個錢場,沒錢的捧個人場吧……)

Copyright © Linux教程網 All Rights Reserved