Linux文件與目錄管理

1、目錄與路徑

一、相對路徑與絕對路徑

         絕對路徑:路徑的寫法必定由根目錄/寫起node

         相對路徑:路徑的寫法不是由\寫起,指相對於目前工做目錄的路徑正則表達式

         對於文件名的正確性來講,絕對路徑的正確度要好。若是是在寫程序(shell scripts)來管理系統的條件下,務必使用絕對路徑的寫法。若是使用相對路徑在程序中,則可能因爲執行的工做環境不一樣,致使一些問題的發生。shell

二、目錄的相關操做

         一些特殊目錄符號以下:數據庫

         .                 表明此層目錄安全

         ..                表明上一層目錄bash

         -                 表明前一個工做目錄數據結構

         ~                表明「目前用戶身份」所在的主文件夾less

         ~account 表明account這個用戶的主文件夾socket

         一些經常使用的目錄處理命令以下:編輯器

         cd              切換目錄

         pwd           顯式當前目錄

         mkdir        新建一個新的目錄

         rmdir        刪除一個空的目錄

         cd(切換目錄)

         cd [相對路徑或絕對路徑]

         cd是Change Directory的縮寫,是用來切換工做目錄的命令。用戶剛登陸時,會進入本身的主文件夾(~),若是僅輸入cd時,表明的就是「cd ~」的意思。

         Linux的默認命令行模式(bash shell)具備文件補齊功能,能夠利用[Tab]按鍵快速完整地輸入目錄,能夠避免按錯鍵盤輸入錯字。

         pwd(顯示目前所在的目錄)

         pwd [-P]

         -P:顯示出當前的路徑,而非使用鏈接(link)路徑

         pwd是Print Working Directory的縮寫,也就是顯示目前所在目錄的命令。對於link文件,-P參數可讓咱們取得正確的目錄名稱,而不是以鏈接文件的路徑來顯示的。

         mkdir(新建新目錄)

         mkdir [-mp] 目錄名稱

         -m:配置文件案權限,直接設置,不須要看默認權限(umask)

         -p:幫助直接將所需的目錄(包含上層目錄)遞歸建立起來

         rmdir(刪除空的目錄)

         rmdir [-p] 目錄名稱

         -p:連同上層空的目錄一塊兒刪除

三、關於執行文件路徑的變量:$PATH

         當咱們執行一個命令的時候,系統會依照PATH的設置去每一個PATH定義的目錄下查詢文件名爲此命令的可執行文件,若是在PATH定義的目錄中含有多個文件名爲此命令的可執行文件,那麼先查詢到的同名命令先被執行。

PATH(必定是大寫)這個變量的內容是由一堆目錄所組成的,每一個目錄中間用冒號(:)來隔開,每一個目錄是有「順序」之分的。能夠經過「echo $PATH」來查看當前系統中包含的PATH列表。通常用戶的PATH中,並不包含任何sbin目錄存在。若是想讓某個目錄加入PATH環境變量,能夠執行「$PATH=」$PATH」:/dir」。

四、注意

         ① 不一樣用戶身份默認的PATH不一樣,默認可以隨意執行的命令也不相同;

         ② PATH是能夠修改的,因此通常用戶仍是能夠經過修改PATH來執行某些位於/sbin或/usr/sbin下的命令來查詢的;

         ③ 使用絕對路徑或相對路徑直接指定某個命令的文件名執行,會比查詢PATH來得準確;

         ④ 命令應該要放置到正確的目錄下,執行纔會比較方便;

         ⑤ 本目錄(.)最好不要放到PATH當中。

 

2、文件與目錄管理

一、查看文件與目錄:ls

         ls [-aAdfFhilnrRSt] 目錄名稱

         ls [--color={never, auto, always}] 目錄名稱

         ls [--full-time] 目錄名稱

         參數:

         -a:所有的文件,連同隱藏文件一塊兒列出來

         -A:列出全部的文件(連同隱藏文件,但不包括.與..這兩個目錄)

         -d:僅列出目錄自己,而不是列出目錄內的數據文件

         -f:直接列出結果,而不進行排序(ls默認會以文件名排序)

         -F:根據文件、目錄等信息給予附加數據結構,例如*表明可執行文件、/表明目錄、=表明socket文件、|表明FIFO文件

         -h:將文件容量以人類較易讀的方式(例如GB,KB等)列出來

         -i:列出inode號碼

         -l:列出長數據串,包含文件的屬性與權限等數據

         -n:列出UID與GID,而非用戶與用戶組的名稱

         -r:將排序結果反向輸出,例如文件名有小到大,反向則爲由大到小

         -R:連同子目錄內容一塊兒列出來,等於該目錄下的全部文件都會顯示出來

         -S:以文件容量大小排序,而不是用文件名排序

         -t:依時間排序,而不是文件名

         --color=never:不要根據文件特性給予顏色顯示

         --color=auto:讓系統自行依據設置來判斷是否給予顏色

         --color=always:顯示顏色

         --full-time:以完整時間模式(年月日時分)輸出

         --time={atime, ctime}:輸出訪問時間或改變權限屬性時間(ctime)而非內容更改時間

二、複製、刪除與移動:cp,rm,mv

         cp(複製文件或目錄)

         cp [-adfilprsu] source destination

         cp [options] source1 source2 source3 … directory

         參數:

         -a:至關於-pdr的意思

         -d:若源文件爲鏈接文件的屬性(link file),則複製鏈接文件屬性而非文件自己

         -f:爲強制(force)的意思,若目標文件已經存在且沒法開啓,則刪除後再嘗試一次

         -i:若目標文件(destination)已經存在時,在覆蓋時會先詢問操做的進行

         -l:進行硬鏈接(hard link)的鏈接文件建立,而非複製文件自己

         -p:連同文件的屬性一塊兒複製過去,而非使用默認屬性

         -r:遞歸持續複製,用於目錄的複製行爲;

         -s:複製成爲符號連接文件(symbolic link),即「快捷方式」文件

         -u:若destination比source舊才更新destination

         若是源文件有兩個以上,則最後一個目的文件必定要是目錄才行。

         在默認的條件中,cp的源文件與目的文件的權限是不一樣的,目的文件的全部者一般會是命令操做者自己。所以當咱們在進行備份的時候,某些須要特別注意的特殊權限文件,例如密碼文件以及一些配置文件,就不能直接以cp來複制,而必需要加上-a或者是-p等能夠完整複製文件權限的參數才行。

         對於無修改文件全部者與用戶組的普通用戶來講,雖然可以複製源文件的相關權限與時間等屬性,可是與全部者、用戶組相關的,本來普通用戶沒法進行的操做,即便加上-a參數,也是沒法達成完整複製權限的。

         rm(移除文件或目錄)

         rm [-fir] 文件或目錄

         參數:

         -f:force,忽略不存在的文件,不會出現警告信息

         -i:互動模式,在刪除前會詢問用戶是否操做

         -r:遞歸刪除(很是危險的參數!!!)

         mv(移動文件與目錄,或改名)

         mv [-fiu] source destination

         mv [options] source1 source2 source3 … directory

         若是有多個源文件或目錄,則最後一個目標文件必定要是目錄

三、取得路徑的文件名與目錄名稱

         basename /etc/sysconfig/network ==> network 取得文件名

         dirname /etc/sysconfig/network ==> /etc/sysconfig 取得目錄名

 

3、文件內容查閱

         若是要查閱一個文件的內容時,能夠用到如下命令:

         cat:由第一行開始顯示文件內容

         tac:從最後一行開始顯示

         nl:顯示的時候,順便輸出行號

         more:一頁一頁地顯示文件內容

         less:與more相似,可是比more更好的是,它能夠往前翻頁

         head:只看頭幾行

         tail:只看結尾幾行

         od:以二進制的方式讀取文件內容

一、直接查看文件內容

         直接查看文件內容能夠用cat、tac、nl這幾個命令。

         cat(concatenate)

         格式:cat [-AbEnTv] 文件

         參數:

         -A:至關於-vET的整合參數,可列出如下特殊字符,而不是空白而已;

         -b:列出行號,僅針對非空白作行號顯示,空白行不標行號;

         -E:將結尾的斷行字符$顯示出來(斷行字符在Windows、Linux中不太相同,Windows中的斷行字符是^MS);

         -n:打印出行號,連同空白行也會有行號,與-b的參數不一樣;

         -T:將[Tab]按鍵以^I顯示出來;

         -v:列出一些看不出來的特殊字符。

         tac(反向列示)

         格式:tac 文件

         tac恰好是將cat反寫過來,因此它的功效就跟cat相反。

         nl(添加行號打印)

         格式:nl [-bnw] 文件

         參數:

         -b:指定行號指定的方式,主要有兩種:

                   -b a:表示不管是否爲空行,也一樣列出行號(相似cat -n);

                   -b t:若是有空行,空的那一行不要列出行號(默認值);

         -n:列出行號表示的方法,主要有三種:

                   -n nl:行號在屏幕的最左方顯示;

                   -n rn:行號在本身字段的最右方顯示,且不加0;

                   -n rz:行號在本身字段的最右方顯示,且加0;

         -w:行號字段佔用的位數。

         nl能夠將輸出的文件內容自動加上行號,其默認的結果與cat –n有點不太同樣,nl能夠將行號作比較多的顯示設計,包括位數與是否自動補0等的功能。

二、可翻頁查看

         more(一頁一頁翻動)

         在more這個程序運行的過程中,有以下按鍵能夠選擇:

         空格鍵(Space):表明向下翻一頁;

         Enter:表明向下滾動一行;

         /字符串:表明在這個顯示的內容當中,向下查詢「字符串」這個關鍵字;

         :f:馬上顯示出文件名以及目前顯示的行數;

         q:表明馬上離開more,再也不顯示該文件內容;

         b或[ctrl]-b:表明往回翻頁,不過這操做只對文件有用,對管道無用。

         less(一頁一頁翻動)

         less的用法比起more又更有彈性,在使用more的時候,咱們並無辦法向前面翻,只能日後面看,但若使用了less時,就可使用上下等按鍵的功能來往前日後翻看文件。能夠輸入的命令有:

         空格鍵(Space):向下翻動一頁;

         [PageDown]:向下翻動一頁;

         [PageUp]:向上翻動一頁;

         /字符串:向下查詢「字符串」的功能;

         ?字符串:向上查詢「字符串」的功能;

         n:重複前一個查詢(與/或?有關);

         N:反向重複前一個查詢(與/或?有關);

         q:離開less這個程序。

三、數據選取

         head與tail都是以「行」爲單位進行數據選取的。

         head(取出前面幾行)

         格式:head [-n number] 文件

         參數:

         -n:後面接數字,表明顯示幾行的意思

         若number爲-a,表明列出前面的全部行數,但不包括後面的a行。

         tail(取出後面幾行)

         格式:tail [-n number] 文件

         參數:

         -n:後面接數字,表明顯示幾行的意思

         -f:表示持續檢測後面所接的文件名,要等到按下[ctrl]-c纔會結束tail的檢測

         若number爲+a,表明該文件從a行之後都會被列出來,包括第a行。

四、非純文本文件:od

         格式:od [-t TYPE] 文件

         參數:

         -t:後面能夠接各類「類型」的輸出,例如:

                   a:利用默認的字符來輸出;

                   c:使用ASCII字符來輸出;

                   d[size]:利用十進制(decimal)來輸出數據,每一個整數佔用size bytes;

                   f[size]:利用浮點數(floating)來輸出數據,每一個數佔用size bytes;

                   o[size]:利用八進制(octal)來輸出數據,每一個整數佔用size bytes;

                   o[size]:利用十六進制(hexadecimal)來輸出數據,每一個整數佔用size bytes。

五、修改文件時間或建立新文件:touch

         每一個文件在Linux下面都會記錄許多的時間參數,有三個主要的變更時間,其意義分別爲:

         modification time(mtime):當該文件的「內容數據」更改時,就會更新這個時間。

         status time(ctime):當該文件的「狀態」改變時,就會更新這個時間。

         access time(atime):當「該文件的內容被取用」時,就會更新這個讀取時間。

         在默認的狀況下,ls顯示出來的是該文件的mtime,也就是這個文件的內容上次被更改的時間。

         有時系統時間會出現錯誤的狀況,若是要修改錯誤時間,可使用touch命令。

         格式:touch [-acdmt] 文件

         參數:

         -a:僅修改訪問時間;

         -c:僅修改文件的時間,若該文件不存在則不建立新文件;

         -d:後面能夠接欲修改的日期而不用目前的時間,也可使用--date=」日期或時間」;

         -m:僅修改mtime;

         -t:後面能夠接欲修改的日期而不用目前的時間,格式爲[YYMMDDhhmm]。

         touch命令最經常使用的狀況是建立一個空的文件、將某個文件日期改成目前時間(mtime與atime)。

 

4、文件與目錄的默認權限與隱藏權限

一、文件默認權限:umask

         umask就是指定目前用戶在新建文件或目錄時候的權限默認值。

         查看的方式有兩種,一種能夠直接輸入umask,就能夠看到數字形態的權限設置分數,一種是加入-S(Symbolic)這個參數,就會以符號類型的方式顯示出權限了。umask第一組是特殊權限用的。

         默認狀況下,若用戶建立「文件」,則默認沒有可執行(x)權限,即只有rw這兩個選項,即爲-rw-rw-rw-(666);若用戶建立「目錄」,則因爲x與是否能夠進入此目錄有關,所以默認爲全部權限均開放,即爲drwxrwxrwx(777)。

         umask的分數指的是「該默認值須要減掉的權限」。例如0022,表示user沒有拿掉任何權限,group與others的權限被拿掉了2(也就是w這個權限)。那麼當用戶新建文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--;新建目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x。

         在默認的狀況中,root的umask會拿掉比較多的屬性,root的umask默認是022,這是基於安全的考慮,至於通常身份用戶,一般他們的umask默認是002,即保留同用戶組的寫入權利。

二、文件隱藏屬性chattr,lsattr

         chattr(設置文件的隱藏屬性)

         格式:chattr [+-=] [ASacdistu] 文件或目錄名稱

         參數:

         +:增長一個特殊參數,其餘本來存在參數則不動。

         -:刪除一個特殊參數,其餘本來存在參數則不動。

         =:僅有後面接的參數。

         A:當設置了A屬性時,若訪問文件/目錄時,訪問時間atime將不會被修改,可避免I/O較慢的機器過分訪問磁盤。

         S:加上S屬性時,當進行任何文件的修改,該改動會「同步」寫入磁盤中。

         a:當設置a以後,文件只能增長數據,而不能刪除也不能修改數據,只有root才能設置這個屬性。

         c:設置c屬性後,將會自動將此文件壓縮,在讀取的時候將會自動解壓縮,可是在存儲的時候,將會先進行壓縮後再存儲。

         d:當dump程序被執行時,設置d屬性將可以使該文件/目錄不會被備份。

         i:可讓文件「不能被刪除、更名,設置鏈接也沒法寫入或添加數據」。對於系統安全性有很大幫助,只有root能設置此屬性。

         s:當文件設置了s屬性時,若是這個文件被刪除,它將會被徹底從這個磁盤空間中刪除。

         u:與s相反,當使用u來配置文件時,若是這個文件被刪除,則數據內容還存在磁盤中,可使用來找回該文件。

         lsattr(顯示文件隱藏屬性)

         lsattr [-adR] 文件或目錄

         參數:

         -a:將隱藏文件的屬性也顯示出來;

         -d:若是是目錄,僅列出目錄自己的屬性而非目錄內的文件名;

         -R:連同子目錄的數據也一併列出來。

三、文件特殊權限:SUID,SGID,SBIT

    l  Set UID

         當s這個標誌出如今文件全部者的x權限上時,此時就被稱爲Set UID,簡稱爲SUID的特殊權限。SUID有這樣的限制與功能:

         1) SUID權限僅對二進制程序(binary program)有效;

         2) 執行者對於該程序須要具備x的可執行權限;

         3) 本權限僅在執行該程序的過程當中(run-time)有效;

         4) 執行者將具備改程序全部者(owner)的權限。

         SUID僅可用在二進制程序上,不可以用在shell script上面。這是由於shell script只是將不少的二進制執行文件調度來執行而已。因此SUID的權限部分,仍是要看shell script調用進來的程序的設置,而不是shell script自己。SUID對於目錄也是無效的。

    l  Set GID

         s在用戶組的x時則稱爲Set GID,SGID。

         與SUID不一樣的是,SGID能夠針對文件或目錄來設置。若是是對文件來講,SGID有以下功能:

         1) SGID對二進制程序有用;

         2) 程序執行者對於該程序來講,需具有x的權限;

         3) 執行者在執行的過程當中將會得到該程序用戶組的支持。

         當一個目錄設置了SGID的權限後,它將具備以下的功能:

         1) 用戶若對於此目錄具備r與x的權限時,該用戶可以進入此目錄;

         2) 用戶在此目錄下的有效用戶組(effective group)將會變成該目錄的用戶組;

         3) 若用戶在此目錄下具備w的權限(能夠新建文件),則用戶所建立的新文件的用戶組與此目錄的用戶組相同。

    l  Sticky Bit

    Sticky Bit(SBIT)目前只針對目錄有效。SBIT對於目錄的做用是:

         1) 當用戶對於此目錄具備w、x權限,即具備寫入的權限時;

         2) 當用戶在該目錄下建立文件或目錄時,僅有本身與root纔有權利刪除該文件。

         例如,當甲這個用戶於A目錄是具備用戶組或其餘人的身份,而且擁有該目錄w的權限,這表示甲用戶對該目錄內任何人新建的目錄或文件都可進行刪除、重命名、移動等操做。不過,若是將A目錄加上了SBIT的權限項目時,則甲只可以針對本身建立的文件或目錄進行刪除、重命名、移動等操做,而沒法刪除他人的文件。

    l  SUID/SGID/SBIT權限設置

         數字形態更改權限的方式爲三個數字的組合,若是在這三個數字以前再加上一個數字的話,最前面的那個數字就表明這幾個權限了:4爲SUID,2爲SGID,1爲SBIT。

         若是user、group以及others都沒有x這個可執行的標誌,當分配相對應權限時,會顯示S、T,表示權限爲空。

         除了數字法以外,也能夠經過符號法來處理。其中SUID爲u+s,而SGID爲g+s,SBIT爲o+t。

四、查看文件類型:file

         能夠經過file命令查看某個文件的基本數據,且其中有沒有使用到動態函數庫(share library)。

 

5、命令與文件的查詢

一、腳本文件名的查詢

         which(尋找「執行文件」)

         格式:which [-a] command

         參數:

         -a:將全部由PATH目錄中能夠找到的命令均列出,而不僅第一個被找到的命令名稱

         這個命令是根據PATH這個環境變量所規範的路徑去查詢「執行文件」的文件名。因此,重點是找出執行文件而已,且which後面接的是完整文件名。若加上-a參數,則能夠列出全部的能夠找到的同名執行文件,而非僅顯示第一個而已。

二、文件名的查找

         一般find不很經常使用的,由於速度慢!一般咱們咱們都是先使用whereis或者是locate來檢查,若是真的找不到了,才以find來查找。由於whereis和locate是利用數據庫來查找數據,因此至關快,並且沒有實際查詢硬盤,比較節省時間。

         whereis(尋找特定文件)

         格式:whereis [-bmus] 文件或目錄名

         參數:

         -b:只找二進制格式的文件

         -m:只找在說明文件manual路徑下的文件

         -s:只找source源文件

         -u:查找不在上述三個選項當中的其餘特殊文件

         Linux系統會將系統內的全部文件都記錄在一個數據庫文件裏面,而當使用whereis或者是下面要說的locate時,會找到已經被刪除掉的文件!並且也找不到最新的剛纔建立的文件。

         locate

         格式:locate [-ir] keyword

         參數:

    -i:忽略大小寫的差別;

    -r:後面可接正則表達式的顯示方式。

    locate尋找的數據是由已建立的數據庫/var/lib/mlocate/裏面的數據所查找到的,因此不用直接再去硬盤當中訪問數據。數據庫的建立默認是天天執行一次(每一個distribution都不一樣),因此當你新建文件後查找該文件,那麼locate會告訴你「找不到」,由於必需要更新數據庫。

    updated命令會去讀取/etc/updated.conf這個配置文件的設置,而後再去硬盤裏進行查找文件名的操做,最後就更新整個數據庫文件了。

    find

    格式:find [PATH] [option] [action]

    參數:

    1)、與時間有關的參數:共有-atime、-ctime與-mtime,下面以-mtime說明。

         -mtime n:n爲數字,意義爲在n天以前的「一天以內」被更改過的文件;

         -mtime +n:列出在n天以前(不含n天自己)被更改過的文件名;

         -mtime -n:列出在n天以內(含n天自己)被更改過的文件名;

         -newer file:file爲一個存在的文件,列出比file還要新的文件名。

    2)、與用戶或用戶組有關的參數:

         -uid n:n爲UID,是記錄在/etc/passwd裏面與帳號名稱對應的數字;

         -gid n:n爲GID,記錄在/etc/group中;

         -user name:name爲用戶帳號名稱;

         -group name:name爲用戶組名;

         -nouser:尋找文件的全部者不存在/etc/passwd中的文件;

         -nogroup:尋找文件的全部用戶組不存在/etc/group中的文件。

    3)、與文件權限及名稱有關的參數:

         -name filename:查找文件名爲filename的文件;

         -size [+-] SIZE:查找比SIZE還好大(+)或小(-)的文件;

         -type TYPE:查找文件的類型爲TYPE的;

         -perm mode:查找文件權限「恰好等於」mode的文件;

         -perm -mode:查找文件權限「必需要所有包括mode的權限」的文件;

         -perm +mode:查找文件權限「包含任一mode的權限」的文件。

    4)、其餘可進行的操做:

         -exec command:command爲其餘命令,-exec後面可再接其餘的命令來處理查找到的結果;

         -print:將結果打印到屏幕上,這個操做是默認操做。

         例如:find / -perm +7000 -exec ls -l {} \;

         1) {}表明的是「由find找到的內容,find的結果會被放置在{}位置中」;

         2) -exec一直到「\;」是關鍵字,表明find額外命令的開始(-exec)到結束(\;),在這中間的就是find命令內的額外命令,在本例中就是「ls -l {}」;

         3) 由於「;」在bash環境下是有特殊意義的,所以利用反斜槓來轉義。

 

6、權限與命令間的關係

         1) 讓用戶能進入某目錄成爲「可工做目錄」的基本權限是什麼

         可以使用的命令:例如cd等切換工做目錄的命令

         目錄所需權限:用戶對這個目錄至少須要具備x的權限

         額外需求:若是用戶想要在這個目錄內利用ls查閱文件名,則用戶對此目錄還須要r的權限

         2) 用戶在某個目錄內讀取一個文件的基本權限是什麼

         可以使用的命令:例如cat、more、less等

         目錄所需權限:用戶對這個目錄至少須要具備x權限

         文件所需權限:用戶對文件至少須要具備r的權限

         3) 讓用戶能夠修改一個文件的基本權限是什麼

         可以使用的命令:例如nano或vi編輯器等

         目錄所需權限:用戶在該文件所在的目錄至少要有x權限

         文件所需權限:用戶對該文件至少要有r,w權限

         4) 讓一個用戶能夠建立一個文件的基本權限是什麼

         目錄所需權限:用戶在該目錄要具備w,x的權限,重點在w

         5) 讓用戶進入某目錄並執行該目錄下的某個命令的基本權限是什麼

         目錄所需權限:用戶在該目錄至少要有x的權限

         文件所需權限:用戶在該文件至少須要有x的權限

相關文章
相關標籤/搜索