1. 程式人生 > >檔案和目錄管理(四)

檔案和目錄管理(四)

4檔案和目錄管理

4.1檔案的基本操作

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

4.1.1 絕對路徑和相對路徑

舉個例子,把系統中的一個檔案比喻成人來說吧。我是一個美團送貨員。客戶住在凱華麗景,一棟,三單元,11樓,4號。這個凱華麗景一棟三單元十一樓四號就是一個絕對路徑,客戶把這個地址給我我就能找到她。

當我走進凱華麗景一棟一單元后我搞忘客戶在哪層樓了,於是我打電話問她,我在一棟三單元,搞忘你在幾層了?這時候她一定會告訴你,十一樓4號,絕對不會告訴你我在凱華麗景一棟三單元十一樓四號,因為我本身就在一棟三單元了,她不用告訴我他的絕對路徑,只需要告訴我相對路徑即可,相對路徑是相對我所在的位置。

絕對路徑:從更目錄開始寫起的,/etc/sysconfig/network-scripts/ifcfg-ens33

相對路徑:不是由根目錄寫起的,例如我本身就在/etc/sysconfig/network-scripts/目錄下,我只需要寫ifcfg-enss33就可以找到這個檔案了

4.1.2 變更使用者所在的目錄

#cd /etc              進入到/etc目錄中

#cd                    進入到使用者的家目錄中

#cd ..                返回上一級目錄

#cd .                進入當前目錄

#pwd                檢視當前使用者所在的目錄

4.1.3 建立目錄

mkdir [-p] /a/b/c

如果建立單個目錄就不用加-p引數,如果建立批量的層級目錄就要加上-p

4.1.4 刪除目錄或檔案

rm [-rf] 檔案

-r 代表刪除目錄,

-f 表示強制刪除,他不會給你提示資訊,因此用此命令刪除一定不要帶/,否則會把系統檔案全部刪掉。這是非常危險的。

4.2環境變數PATH

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

什麼是環境變數呢?環境變數和我們使用的指令和程式是息息相關的。首先我們來看下我們平時候使用的指令的位置:

#which rm                    檢視指令所在的絕對路徑


我們看到這個rm的路徑,跟當前使用者所在的路徑不是一個路徑,為啥我寫rm就能找到rm呢?

這是環境變數的作用。

#echo $PATH


echo使用來輸出$PATH的值的,PATH前面的$是變數的字首符號。

rm是在/usr/bin中定義的,而這個路徑又在PATH中聲明瞭,當我們寫rm的時候系統回去環境變數所在目錄中去找

那麼我把rm移動到/root不就可以使用rm了嗎?實際不行,因為你所在的目錄不在$PATH中定義,除非你寫絕對路徑,/root/rm,或者除非rm移動到你當前使用者所在的同級目錄裡。

我們一般不這樣做。就使用系統預設的位置

4.2.1 拷貝檔案

cp [選項] [來原始檔] [目的檔案]

-r 如果是一個目錄就必須加-r 

-i是一個安全選項,如果遇到一個已經存在的檔案會詢問是否覆蓋

在紅帽系列中,cp其實就是cp -i

#which cp


4.2.2 移動檔案(剪下)

mv [選項] [原始檔或目錄] [目標檔案或目錄]

4.3 文件相關命令

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

cat 或 tac: 一個是正序顯示,一個是倒敘顯示

more  空格看下一頁

less 導航鍵上下看,空格翻頁

head 顯示檔案前十行

tail顯示檔案後十行,加上引數-f可以動態看檔案

4.4 檔案的所有者和所有組

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


檔案或者目錄都有所有者和所有組,即這個檔案屬於哪個使用者,這個檔案屬於哪個使用者組

4.5 Linux檔案屬性

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

drwxr-x---.  3 root root     24 6月  17 07:32 dhcp

-rw-r--r--.  1 root root   5.0K 11月  5 2016 DIR_COLORS

“drwxr-x---”這個東西就是檔案的屬性,

第一個代表檔案型別:

        d是目錄,

        -表示普通檔案,

        b表示塊裝置檔案,

        c表示串列埠裝置檔案(又稱字元裝置檔案),

            如鍵盤,滑鼠,印表機,tty終端都是這樣的而檔案,

        s表示套接字檔案(socket),

後面每三個為一組,r代表此檔案可讀,w表示可寫,x表示可執行

    第一組代表所有者的許可權

    第二組代表所有組的許可權

    第三組代表其他人的許可權


紅框內代表檔案的所有者和所有組,

4.6 更改檔案的許可權

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

4.6.1 更改檔案所有組

change group 

chgrp [引數選項] [組名] [檔名]

案例:

# groupadd sosGroup  //新建一個組
# mkdir test                    //建立一個資料夾
# cd test                            
# touch a.txt                //建立一個檔案
# ls -l                            //檢視檔案屬性,使用者組是屬於root組
總用量 0
-rw-r--r--. 1 root root 0 6月  17 16:49 a.txt
# chgrp sosGroup a.txt            //修改使用者組
# ls -l                                        //檢視檔案屬性,使用者組變成了sosGroup
總用量 0

-rw-r--r--. 1 root sosGroup 0 6月  17 16:49 a.txt

上面我修改的是檔案,如果我修改的是目錄,是不能修改到目錄裡的檔案的,如果要修改一個目錄以及它肚子裡的仔那麼要加上級聯修改的引數

    #chgrp -R sosGroup 目錄

4.6.2 更改檔案所有者

change owner

chown [-R級聯引數] 賬戶名 檔名

或者

chown [-R]  賬戶名:組名 檔名

示例命令:

# mkdir d3                        //建立目錄d3
# useradd user1                //建立使用者user1
# touch d3/a.txt                //建立d3下的檔案a.txt
# chown user1 d3            //修改目錄的所有者
# ls -l
總用量 0
drwxr-xr-x. 2 user1 root 19 6月  17 17:07 d3
[[email protected] linux測試]# cd d3        
[[email protected] d3]# ls -l              //d3肚子裡的孩子並沒有被修改所有者
總用量 0

-rw-r--r--. 1 root root 0 6月  17 17:07 a.txt

如果要目錄中的檔案隨著目錄一同被修改就是用引數-R

4.6.3 更改檔案的許可權

change mode

linux使用數字代表檔案的許可權:

        r=4

        w=2

        x=1

        -=0

        rwxrwx---算下來就等於770

        rwx=4+2+1,rwx=4+2+1,---=0+0+0

chmod [-R] xyz 檔名

這裡的xyz代表的是數字

例如:

chmod -R 750 檔名

就像檔案賦予了 rwx r-x ---

4.6.4 檔案的預設許可權

我們建立一個檔案,看看預設的許可權是多少?

目錄時755


檔案是644:


這是為什麼???是誰規定的?這就要學習一個指令umask了

#umask


umask會列印一個值0022給我們看。這個值和檔案的預設許可權有啥關聯呢?

因為普通檔案沒有可執行許可權,只有rw兩個,因此最大值為666,666-0022=644

因為目錄有可執行許可權,有rwx三個,因此最大值為777,777-0022=755,

所以目錄的預設許可權是755,檔案的預設許可權是644

所以我們可以通過修改umask的值來達到修改檔案預設許可權的目的。

#umask 0002

那麼檔案就是666-0002=664,目錄就是777-0002=775了

但是預設請最好使用系統預設的。

0022中最前面多了個0是什麼意思?沒什麼意思,代表這個數是八進位制的

4.6.5 修改檔案的特殊屬性

change attribute

chattr [+-=] [Asaci] [檔案或者目錄名]

+-=分別代表增加減少和設定

A    增加該屬性後,檔案和目錄的atime將不可被修改

s    增加該屬性後,會將資料同步寫入磁碟中

a    增加該屬性後,表示只能追加,不能刪除,只有root使用者可以使用該引數

c   增加該屬性後,表示自動壓縮檔案,讀取時會自動解壓

i    增加該屬性後,表示檔案不能刪除,重新命名,設定連結,寫入以及新增資料

list attribute

lsattr [-aR] [檔案/目錄名]        該命令用來讀取檔案和目錄的特殊許可權

-a    類似於ls的-a選項,即連同隱藏檔案一同列出

-R    連同子目錄的資料一同列出

set uid,set gid和sticky bit

之前我們介紹許可權的時候都是755 644等,其實在他們最前面還有一個許可權,完整的應該是:?755,?644

set uid,該許可權針對二進位制可執行檔案。使檔案在執行階段具有檔案所有者的許可權。比如passwd這個命令就具有該許可權,當普通使用者使用passwd的時候就可以臨時獲得root的許可權,從而更改密碼

set gid,該許可權可以作用在檔案上(二進位制可執行檔案),也可以作用在目錄上。作用在檔案上的時候,其功能和set uid一樣,當用戶在執行檔案階段將具有檔案所有組的許可權。如果作用在目錄上,那麼任何使用者在此目錄下建立的檔案都具有和該目錄所屬的組相同的組

sticky bit 可以理解為防刪除位,檔案是否可以被某使用者刪除,主要取決於該檔案所在的目錄是否對該使用者具有寫許可權。如果沒有寫許可權,那麼則這個目錄下的所有檔案都不能刪除,同時也不能新增新的檔案。

如果希望使用者能能夠新增檔案但是不能刪除該目錄下的其他使用者的檔案,則可以對父目錄新增該許可權。新增該許可權後就算使用者對目錄具有寫許可權,也不能刪除此目錄下其他使用者的檔案。

例如:passwd設定了uid許可權,而/tmp設定了sticky bit許可權 我們就去看看即可:



可以看到,passwd的所有者許可權顯示的是rws r-x r-x   =  (s--),用數字表示是:4755

而tmp的其他人擁有的許可權是rwx rwx rwt   = (--t),用數字表示是1777,

這是怎麼計算的呢?

當有特殊許可權的時候:第一位數字可以是:

0,

1(--t),

2(-s-),

3(-st),

4(s--),

5(s-t),

6(ss-),

7(sst)

就是說s設定在所有者的許可權的x位上就是set uid 

如果說s設定在所有組的許可權的x位上就是set gid,

t設定在其他人許可權的的x上就是sticky bit,

他們都只能設定在可執行位上,即x上。

說了這麼多如何給他新增呢?

set uid: 

    #chmod u+s 檔名

set gid:

    #chmod g+s 檔名

sticky bit: 

    #chmod o+t 檔名

4.7 在Linux下搜尋檔案

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

4.7.1 檢視可執行檔案的絕對路徑

#which vim

4.7.2用whereis查詢檔案

whereis  [-bms] [檔名稱]

-b    只檢視二進位制檔案 

-m    只檢視幫助檔案

-s    只檢視原始碼檔案

這個命令類似於模糊查詢


4.7.3 用locate命令查詢檔案

此命令類似於whereis,而且還要安裝mlocate軟體包才能使用命令。所以不常用,不推薦使用

4.7.4 使用find搜尋檔案

find [路徑] [引數]

-atime +n/-n 表示訪問或執行時間大於或小於n天的檔案

     access time 是讀取檔案或者執行檔案時更改的時間

-ctime +n/-n 表示寫入更改inode屬性(如更改所有者,許可權或者連結)的時間大於或小於n天的檔案

    change time 是寫入檔案,更改所有者,許可權或連結設定時隨inode的內容的更改而更改的

-mtime +n/-n 表示寫入時間大於或小於n天的檔案,

    modify time 是寫入檔案是隨檔案內容的更改而更改的

-name 檔名

    表示直接找這個檔名的檔案

-type 檔案型別(f,b,c,d,l,s)

    表示找指定型別的檔案

4.8 Linux檔案系統簡介

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

Linux使用的檔案系統有

etx2:早期的系統使用此版本

etx3:Centos5使用此版本

ext4:Centos6使用此版本

xfs:Centos7使用此版本

4.9 Linux的檔案型別

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

l    連結檔案

-    普通檔案

d    目錄

s    套接字檔案

c    串列埠檔案

b    塊裝置檔案

4.9.1 linux的連結檔案

Linux系統要讀取一個檔案的時候首先是讀取他的iNode資訊,然後根據iNode資訊到塊區域中將資料取出來。

ls -li 就能看到檔案的inode


那什麼是連結呢?

連結檔案是一種檔案,分為硬連結和軟連結

硬連結

        硬連結就是建立一個inode連線到檔案放置的塊區域

        不能跨檔案系統,不能連結目錄

軟連結

        軟連結檔案的行為會傳播給原始檔上,例如有一個檔案a,我們建立一個軟連結b指向了a,當對b做操作的時候b會把動作轉發到a上,這樣就相當於簡介的讀取了a檔案。

ln [-s] [來原始檔] [目的檔案]

-s  軟連結

不加就是硬連結

感性趣的可以試著建立軟硬連結,然後刪除,看看他們的變化