天天看點

Linux 檔案操作指令彙總

作者:寒笛過霜天

1 檔案分類

在Linux/Unix下, block, char, dir, fifo, file, link, unknown等七種類型

block :塊裝置檔案, 磁盤分區, 軟驅, cd-rom等 b

char: 字元裝置, I/O 以字元為機關, 鍵盤, 列印機等 c

dir: 目錄也是檔案的一種 d

fifo:命名管道 f

file:普通檔案類型 -

link:符号連結, 是指向檔案指針的指針, 類似windows中的快捷方式 l

unknown:未知檔案

drwxr-xr-x. 5 root root 100 8月 10 22:19 disk

第1列:包含該檔案的類型

d 檔案夾(dir)

- 普通檔案(file)

l 連結檔案(link)

b 塊裝置檔案(block)

p 管道檔案(fifo)

c 字元裝置檔案(char)

s 套接口檔案(socket)

檔案類型後面的9位, 每3個為一組, "r"代表可讀, "w"代表可寫, "x"代表可執行

前3位為所屬主(user)的權限, 中間3位為所屬組(group)的權限, 最後3位為其他非本群組使用者(others)的權限

第2列: 表示連結占用的節點(innode), 如果是目錄, 那這個數值與該目錄下是子目錄數量有關。

第3列:表示該檔案的所屬主。

第4列:表示該檔案的所屬組。

第5列:表示該檔案的大小。

第6列、第7列和第8列:表示該檔案最後一次被修改的時間(mtime), 依次為月份、日期以及時間。

第9列:表示檔案名

2、檔案權限

r權限:(可讀權限), 權重值4

w權限:(可寫權限), 權重值2

x權限:(可執行權限), 權重值1

常用的權限代碼:777、755、644, 這些數字都是由(4、2、1拼接而來的), 采用八進制

① 7 = 4 + 2 + 1 = r + w + x = 可讀可寫可執行

② 5 = 4 + 1 = r + x = 可讀可執行

③ 4 = 4 = r = 可讀權限

1 可執行

2 可寫

3 可執行可寫

4 可讀

5 可讀可執行

6 可讀可寫

7 可讀可寫可執行

3、目錄操作(建立目錄與删除目錄)

mkdir指令 建立目錄

選項:

-p:parent的縮寫, 若所要建立目錄的上層目錄目前尚未建立, 則會一并建立上層目錄。

> mkdir -p Application/Admin/Controller

-m:mode的縮寫, 建立目錄時指定目錄權限

> cd Application

> mkdir -m 777 Runtime

rmdir指令:删除目錄

選項:

-p: parent的縮寫, 删除指定目錄後, 若該目錄的上層目錄已變成空目錄, 則将其一并删除。

注意:在Linux中使用rmdir指令删除檔案夾時必須保證其内部沒有子檔案或子檔案夾, 否則無法删除, 即使用rmdir -p也不能删除,

因為rmdir指令隻能删除目錄, 不能删除檔案, 如果要删除有子檔案的目錄可以使用rm -r指令删除含有子檔案的目錄(謹慎操作)

5、檔案操作(建立檔案與删除檔案)

建立檔案

方法一:使用vim指令(vim代表建立并打開), 如果檔案未儲存, 則該檔案不存在。

方法二:使用touch指令(touch代表隻建立檔案但不打開)

删除檔案(強烈推薦)

rm指令 删除檔案

-r:recursive的縮寫 遞歸處理, 将指定目錄下的所有檔案及子目錄一并處理。

> rm -r Applicatin

輸入y(或yes)或n(no)來确定或取消

注意:執行rm指令可删除檔案, 如欲删除目錄必須加上參數"-r", 否則預設僅會删除檔案。

-f:force的縮寫 删除時不彈出确認提示

> rm -rf Application

6、複制與剪切(重命名)操作

cp指令

cp [參數] <源檔案路徑> <目标檔案路徑>:複制檔案到目标路徑

-r(或-R):recursive的縮寫, 遞歸處理, 将指定目錄下的所有檔案與子目錄一并處理。

-p(小寫):preserve的縮寫, 複制時保持檔案的原有權限

-v:顯示複制進度(進度條)

> cp file1 dir1

mv指令

mv [參數] [源檔案或目錄] <目标檔案或目錄>:剪切檔案到目标路徑

-v:顯示剪切進度(進度條)

> mv dir1/dir2 dir3/dir4 //dir2移動到dir4目錄下, 并改名字為原名

> mv dir1/dir2 dir3/dir4 //dir2移動到dir4目錄下, 并改名字為原名

mv除了可以剪切還可以重命名檔案, 基本文法:

> mv oldFileName newFileName

如何判斷是重命名還是移動檔案

隻在目前目錄下操作, 則是重命名;

在不同的目錄下操作, 則是移動檔案;

7、檔案統計

wc [參數] <檔案清單>

-c:character縮寫, 統計檔案中一共有多少個字元

-l:line縮寫, 統計檔案中一共有多少行

-w:word縮寫, 統計檔案中一共有多少個單詞

> wc filename //檢視檔案行數

7 8 70 test.txt

行數 單詞數 位元組數 檔案名

8、grep搜尋比對行

grep [參數] <'字元串'> <源檔案>

-n:顯示所有比對到的關鍵詞所在行号

> grep -n mysql install.log

-c:統計一共有多少個比對的行

> grep -c mysql install.log

-i:ignore縮寫, 比對關鍵詞時忽略大小寫

> grep -ci mysql install.log

9、顯示檔案内容

cat正序顯示檔案所有内容

-n 由1開始對所有輸出的行數編号

> cat user.txt

> cat -n 2 user.txt

tac倒序顯示檔案的所有内容

-n 由1開始對所有輸出的行數編号

> tac user.txt

> tac -n 2 user.txt

10、更改檔案權限

chmod:更改檔案權限

chmod 使用者名 檔案名

-R :遞歸(隻能是大寫的) recursive縮寫

> chmod -R 777 oa

u 表示檔案擁有者

g 表示檔案所屬的使用者組

o 表示其他使用者

a a = u+g+o

+ 增權重限

- 減少權限

= 設定權限

r 可讀取

w 可寫入

x 可執行

-R 遞歸修改

chmod u+r a.txt # 所屬使用者增加可讀權限

chmod u-r a.txt # 所屬使用者減少可讀權限

chmod u=r a.txt # 所屬使用者設定可讀權限

chmod a+r a.txt # 給所有人增加可讀權限

chmod u+x,g+w a.txt # 同時修改多個權限

chmod ug+x a.txt # 同時修改多個權限

chmod 777 a.txt # 給所有人增加讀、寫、執行權限

chmod -R 777 目錄 # 修改目錄及目錄下所有檔案的權限

chown:更改檔案的擁有者

-R :遞歸(隻能是大寫的)

> chmod -R xutao oa

chgrp:更改檔案的所屬組

-R :遞歸(隻能是大寫的)

> chmod -R xutao oa

11、建立軟連結(快捷方式)

基本文法:

ln -s <源檔案或目錄> <目标檔案或目錄>

特别注意:軟連結的建立器源檔案與目标檔案的路徑必須是全路徑(從根路徑開始), 如果為目前路徑下的檔案指定軟連接配接, 則不必寫全路徑。

> cd /home

> ln -s data.txt /home/data.txt

指令: umask

上邊也提到了預設情況下, 目錄權限值為755, 普通檔案權限值為644, 那麼這個值是由誰規定呢? 追究其原因就涉及到了 'umask'.

umask文法: umask xxx (這裡的xxx代表三個數字)

檢視umask值隻要輸入 ‘umask’ 然後回車。

> # umask

0022

umask預設是0022, 其代表什麼含義? 先看一下下面的規則:

1) 若使用者建立為普通檔案, 則預設 '沒有可執行權限', 隻有'rw'兩個權限。最大為666 ('-rw-rw-rw-').

2) 若使用者建立為目錄, 則預設所有權限均開放, 即777 ('drwxrwxrwx').

umask數值代表的含義為, 上邊兩條規則中的預設值(檔案為666,目錄為777)需要減掉的權限。是以目錄的權限為 'rwxrwxrwx' - '----w--w-' = 'rwxr-xr-x',

普通檔案的權限為 'rw-rw-rw-' - '----w--w-' = 'rw-r--r--'.

umask的值是可以自定義的, 比如設定umask 為 002, 你再建立目錄或者檔案時,

預設權限分别為 'rwxrwxrwx' - '-------w-' = 'rwxrwxr-x' 和 'rw-rw-rw-' - '-------w-' = 'rw-rw-r--'.

[root@localhost ~]# umask 002

[root@localhost ~]# mkdir test2

[root@localhost ~]# ls -ld test2

drwxrwxr-x 2 root root 4096 5月 10 09:44 test2

[root@localhost ~]# touch test3

[root@localhost ~]# ls -l test3

-rw-rw-r-- 1 root root 0 5月 10 09:45 test3

可以看到建立的目錄權限預設變為775, 而檔案預設權限變為664. 然後再把umask改回來。

[root@localhost ~]# umask 022

[root@localhost ~]# touch test4

[root@localhost ~]# ls -l test4

-rw-r--r-- 1 root root 0 5月 10 09:45 test4

umask 可以在 /etc/bashrc 裡面更改, 預設情況下, root的umask為022, 而一般使用者則為002, 因為可寫的權限非常重要, 是以預設會去掉寫權限。

遞歸修改目錄權限為755, 檔案權限為644

1.修改所有者:

> # chown -R root.root path(遞歸修改指定路徑的所有檔案為root使用者組所有)

2.修改目錄權限:

> # find path -type d -exec chmod 755 {} \;

3.修改檔案權限:

> # find path -type f -exec chmod 644 {} \;

繼續閱讀