天天看點

Linux系統管理之檔案管理指令

cat 是一個所有使用者可以使用,把檔案輸出或者定向到另一個file中的指令;

參數:

    -n  由1開始對所有輸出标上行号,包括空白行和重複行;

    -b  由1開始對輸出标上行号,過濾空白行;

    -s  當輸出中有多個連續的空白行,代換為1個空白行;

    >定向到另一個檔案中

範例:

首先取出install.log的前20行,然後編輯添加空白行,定向到tmp下的install.log中,并添加空行5個;

[root@server ~]# touch /tmp/install.log

[root@server ~]# cat  install.log | head -n 10 >/tmp/install.log

[root@server ~]# vi /tmp/install.log

安裝 xkeyboard-config-2.11-1.el6.noarch

安裝 fontpackages-filesystem-1.41-1.1.el6.noarch

warning: fontpackages-filesystem-1.41-1.1.el6.noarch:Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY

安裝 m17n-db-1.5.5-1.1.el6.noarch

安裝 liberation-fonts-common-1.05.1.20090721-5.el6.noarch

安裝 setup-2.8.14-20.el6_4.1.noarch

安裝 xml-common-0.6.3-33.el6.noarch

安裝 iso-codes-3.16-2.el6.noarch

安裝 filesystem-2.4.30-3.el6.i686

安裝 dejavu-fonts-common-2.30-2.el6.noarch~

~

輸出install.log,加上行号

[root@server ~]# cat -n /tmp/install.log

    1  安裝fontpackages-filesystem-1.41-1.1.el6.noarch

    2  warning:fontpackages-filesystem-1.41-1.1.el6.noarch: Header V3 RSA/SHA256 Signature,key ID c105b9de: NOKEY

    3  安裝m17n-db-1.5.5-1.1.el6.noarch

    4  安裝liberation-fonts-common-1.05.1.20090721-5.el6.noarch

    5

    6

    7

    8

    9

   10  安裝setup-2.8.14-20.el6_4.1.noarch

   11  安裝xkeyboard-config-2.11-1.el6.noarch

   12  安裝xml-common-0.6.3-33.el6.noarch

   13  安裝iso-codes-3.16-2.el6.noarch

   14  安裝filesystem-2.4.30-3.el6.i686

15  安裝dejavu-fonts-common-2.30-2.el6.noarch

過濾掉install.log中的空白行,并标上行号

[root@server ~]# cat -b /tmp/install.log

    3  安裝 m17n-db-1.5.5-1.1.el6.noarch

    5  安裝setup-2.8.14-20.el6_4.1.noarch

    6  安裝xkeyboard-config-2.11-1.el6.noarch

    7  安裝xml-common-0.6.3-33.el6.noarch

    8  安裝iso-codes-3.16-2.el6.noarch

    9  安裝filesystem-2.4.30-3.el6.i686

   10  安裝dejavu-fonts-common-2.30-2.el6.noarch

将多個連續的空白行代換為一個,加上行号,空白行不加行号

[root@server ~]# cat -sb /tmp/install.log

10  安裝dejavu-fonts-common-2.30-2.el6.noarch

more

類似cat但是對于有N多行的檔案,具有翻頁的功能,空格鍵向下翻,b回翻;

-num        設定單頁每次輸出多少行;

-s       連續多個空白行代換為1個

+num    從第num行開始顯示

範例

單頁輸出10行;

[root@server ~]#more -10 install.log

安裝fontpackages-filesystem-1.41-1.1.el6.noarch

warning:fontpackages-filesystem-1.41-1.1.el6.noarch: Header V3 RSA/SHA256 Signa

ture, key IDc105b9de: NOKEY

安裝liberation-fonts-common-1.05.1.20090721-5.el6.noarch

安裝setup-2.8.14-20.el6_4.1.noarch

安裝xkeyboard-config-2.11-1.el6.noarch

安裝xml-common-0.6.3-33.el6.noarch

安裝iso-codes-3.16-2.el6.noarch

安裝filesystem-2.4.30-3.el6.i686

--More--(1%)

從第11行開始,到20行結束;

[root@server ~]#more +10 install.log |head -n 10

安裝dejavu-fonts-common-2.30-2.el6.noarch

安裝mozilla-filesystem-1.9-5.1.el6.i686

安裝control-center-filesystem-2.28.1-39.el6.i686

安裝paktype-fonts-common-2.0-8.el6.noarch

安裝mesa-dri-filesystem-10.1.2-2.el6.i686

安裝autocorr-zh-4.0.4.2-14.el6.noarch

安裝autocorr-en-4.0.4.2-14.el6.noarch

安裝tzdata-2014g-1.el6.noarch

安裝tzdata-java-2014g-1.el6.noarch

安裝foomatic-db-filesystem-4.0-7.20091126.el6.noarch

chgrp

change group 顯而易見,變更檔案或目錄的所屬組;

     -c 顯示指令執行回報的結果

     -v 顯示指令執行過程

     -h 隻對連結檔案做修改;

     -R 遞歸處理,針對目錄;

建立/tmp/install.log的連結檔案install;更改install.log的所屬組為woon;

[root@server ~]#ln -s /tmp/install.log /tmp/install

[root@server ~]#

[root@server ~]#chgrp -c woon /tmp/install.log

"/tmp/install.log"的所屬組已更改為woon

[root@server ~]#chgrp -v woon /tmp/install.log

更改/tmp目錄下連結檔案的所屬組為woon;

[root@server ~]#chgrp -h woon /tmp/install

[root@server ~]#ll /tmp/

總用量 24

lrwxrwxrwx. 1 root woon  16 1月  24 22:24 install -> /tmp/install.log

-rw-r--r--. 1root woon  495 1月  24 21:58 install.log

drwx------. 2gdm  gdm 4096 1月  24 21:38 orbit-gdm

drwx------. 2gdm  gdm 4096 1月  24 21:38 pulse-0ts1VFVI1yGH

drwx------. 2root root 4096 1月  24 16:43 pulse-lM4QFZX7jWbv

drwx------. 2root root 4096 1月  22 11:22 virtual-root.G7TKY9

drwx------. 2root root 4096 1月  24 16:06 virtual-root.yb3tU4

chown

Change owner

使用權限為root,Linux/Unix 是多人多工作業系統,所有的檔案皆有擁有者。利用 chown 可以将檔案的擁有者加以改變。一般來說,這個指令隻有是由系統管理者(root)所使用,一般使用者沒有權限可以改變别人的檔案擁有者,也沒有權限可以自己的檔案擁有者改設為别人。隻有系統管理者(root)才有這樣的權限。

-c     若該檔案擁有者确實已經更改,那麼顯示更改動作

-h  隻對于連結(link)進行變更

-v  顯示擁有者變更的詳細資料

-R  對目前目錄下的所有檔案與子目錄進行相同的擁有者變更

更改/tmp/install.log的擁有者為woon,并顯示更改動作和詳細資訊

[root@server ~]#chown -v woon install.log

"install.log"的所有者已更改為woon

Chmod

使用權限為root,檔案和目錄的權限管理,包括u、g、o、a三級權限和特殊權限;

Mode 權限設定串,u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬于同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。

r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示隻有當該檔案是個子目錄或者該檔案已經被設定過為可執行。

# r=4 w=2 x=1

+  表示增權重限

  • 表示取消權限

=  表示設定唯一權限

-c 權限确實更改顯示動作過程

-v 與-c類似,顯示更改的詳細資訊

-f 若該檔案無法更改也不顯示錯誤資訊

-R 遞歸修改

将~/.bashrc 複制到/tmp/woon下,命名為bashrc、.bashrc、bash.rc

對上述三個檔案進行權限操作

[root@server ~]# mkdir /tmp/woon

[root@server ~]#  cp ~/.bashrc /tmp/woon/bashrc

[root@server ~]#  cp ~/.bashrc /tmp/woon/.bashrc

[root@server ~]#  cp ~/.bashrc /tmp/woon/bash.rc

檢視權限

[root@server ~]# ls -al /tmp/woon/

總用量 20

drwxr-xr-x. 2 root root 4096 1月  25 15:06 .

drwxrwxrwt. 11 root root 4096 1月  25 15:04 ..

-rw-r--r--. 1 root root  176 1月  25 15:06 bashrc

-rw-r--r--.  1 root root 176 1月  25 15:06 .bashrc

-rw-r--r--. 1 root root  176 1月  25 15:06 bash.rc

Bashrc目前的權限是644,将其修改為所有具有所有權限

[root@server ~]# chmod 777  /tmp/woon/bashrc

[root@server ~]# chmod a+rwx/tmp/woon/bashrc

檔案預設權限

umask

可用來設定[權限掩碼]。[權限掩碼]是由3個八進制的數字所組成,将現有的存取權限減掉權限掩碼後,即可産生建立檔案時預設的權限。

如某目錄umask=0022那麼在該目錄下目錄屬性為755 檔案為644

[root@server woon]# umask 066

[root@server woon]# touch umask

[root@server woon]# mkdir umaskdir

[root@server woon]# ll

總用量 8

-rwxrwxrwx. 1 root root 176 1月  25 15:06 bashrc

-rw-r--r--. 1 root root 176 1月  25 15:06 bash.rc

-rw-------. 1 root root   0 1月  25 15:22 umask

drwx--x--x. 2 root root 4096 1月  25 15:24 umaskdir

檔案特殊權限

Suidsgid sbit

SUID

SUID僅對二進制檔案有效;

執行者對改程式需有執行x權限;

本權限僅在執行過程中有效;

執行者将具有改程式的所有者權限;

SUID對目錄無效

Sgid類似suid使用者群組;

SBID針對目錄

在/tmp下履歷目錄woon,woon屬于群組woon,使用者woon和woonli屬于woon組,要求woon和woonli可以對woon目錄内檔案具有所有權限;且不允許其他人查閱;

準備:

[root@server tmp]# groupadd woon

[root@server tmp]# useradd -g woon woon

[root@server tmp]# useradd -g woon woonli

[root@server tmp]# useradd  user1

[root@server tmp]# echo "xlwoon"|passwd --stdin woon

更改使用者 woon 的密碼。

passwd:所有的身份驗證令牌已經成功更新。

[root@server tmp]# echo "xlwoon"|passwd --stdin woonli

更改使用者 woonli 的密碼。

[root@server tmp]# echo "xlwoon"|passwd --stdin user1

更改使用者 user1 的密碼。

[root@server tmp]# id woon

uid=500(woon) gid=500(woon) 組=500(woon)

[root@server tmp]# id user1

uid=502(user1) gid=502(user1) 組=502(user1)

[root@server tmp]# mkdir woon

[root@server tmp]# chgrp woon woon

[root@server tmp]# chmod 775 woon

[root@server tmp]# ll

總用量 28

lrwxrwxrwx. 1 root woon   16 1月  24 22:24 install -> /tmp/install.log

-rw-r--r--. 1 root woon  495 1月  24 21:58 install.log

drwx------. 2 gdm  gdm 4096 1月  25 17:33 orbit-gdm

drwx------. 2 gdm  gdm 4096 1月  25 17:33 pulse-0ts1VFVI1yGH

drwx------. 2 root root 4096 1月  24 16:43 pulse-lM4QFZX7jWbv

drwx------. 2 root root 4096 1月  22 11:22 virtual-root.G7TKY9

drwx------. 2 root root 4096 1月  24 16:06 virtual-root.yb3tU4

drwxrwxr-x. 2 rootwoon 4096 1月  25 17:59 woon

此時woon和woonli是否可以檢視woon目錄先得所有檔案?

分别用woon、woonli、user1在woon在建立檔案;

[root@server woon]# echo "這是root建立的檔案">rotfile

[woon@server woon]$ echo 這是woon建立的檔案">woonfile

[woonli@server woon]$ echo "這是woonli建立的檔案">woonlifil

[user1@server woon]$ echo "這是user1建立檔案"> user1file

bash: user1file: 權限不夠

總用量 12

-rw-r--r--. 1 root   root 26 1月  25 18:21 rotfile

-rw-rw-r--. 1 woon   woon 26 1月  25 18:18 woonfile

-rw-r--r--. 1 woonli woon 28 1月  25 18:19 woonlifile

[woon@server woon]$ vi woonfile

這是woon建立的檔案

可以修改嗎?

"woonfile" 2L, 45C 已寫入   

可以修改的

[woon@server woon]$ vi woonlifile

這是woonli建立的檔案

keyi xiugai ?

E45: 已設定選項 'readonly' (請加 ! 強制執行)

不能修改;

為什麼?woon目錄已經是woon群組的,且woon群組具有rwx權限,此時就不能滿足woon和woonli對woon目錄下的所有檔案進行修改和編輯,項目也就不能很好配合;

這是就需要用到SGID

[root@server tmp]# chmod g+s woon

然後用woon建立woon1檔案,woonli建立woonli1檔案,再看看

[woonli@server woon]$ ll

-rw-rw-r--. 1 woon   woon 0 1月  25 18:30 woon1

-rw-rw-r--. 1 woon   woon 45 1月  25 18:24 woonfile

-rw-r--r--. 1 woonli woon  0 1月  25 18:30 woonli1

此時woon就可以對woonli1進行修改和寫入等操作;

檔案的隐藏屬性

Chattr  lsattr

Chattr設定檔案的隐藏屬性,

+ 增加某個特殊參數,其他本身參數保持不變

  • 删除某一參數,其他參數保持不變;

=  設定參數

A 添加設個屬性時,不會修改atime,可在I/O較慢的機器上進行;

S 一般檔案時異步寫入磁盤,該參數可以同步寫入;

a 設定之後隻能添加資料,不能更改和删除資料;當然root可以取消這個屬性

I 添加該屬性後,檔案不能修改,不能删除,改名等;

s徹底删除

對/tmp/woon下的woonfile添加屬性,使其隻能添加資料

[root@server woon]# chattr +a woonfile

[root@server woon]# rm -rf woonfile

rm: 無法删除"woonfile":不允許的操作

此時對woonfile進行删除一個字元都是不行的,也無法删除;可以用chattr  -a woonfile取消設個權限;

cmp

cmp指令可以比較兩個檔案的差異

-l 标示處所有有差異的地方

-c或--print-chars  除了标明差異處的十進制字碼之外,一并顯示該字元所對應字元

[root@server tmp]# cmp -c bashrc bashrcroot

bashrc bashrcroot differ: byte 14, line 3is 123 S 125 U

diff

diff比較兩個檔案的差異,逐行比較

    -b 不比較空格字元的不同

    -B 不比較空白行

    -c 顯示全部内容,标示不同之處

file

file辨識檔案的類型;

參  數:

-b  列出辨識結果時,不顯示檔案名稱。

-c  詳細顯示指令執行過程,便于排錯或分析程式執行的情形。

-f<名稱檔案>  指定名稱檔案,其内容有一個或多個檔案名稱呢感,讓file依序辨識這些檔案,格式為每列一個檔案名稱。 

-L  直接顯示符号連接配接所指向的檔案的類别。

-m<魔法數字檔案>  指定魔法數字檔案。

-v  顯示版本資訊。

-z  嘗試去解讀壓縮檔案的内容。

[root@server tmp]# file woon/ bashrc

woon/: setgid directory

bashrc: UTF-8 Unicode text

find

将檔案系統内符合 expression 的檔案列出來。你可以指要檔案的名稱、類别、時間、大小、權限等不同資訊的組合,隻有完全相符的才會被列出來。

參數:

    -amin n : 在過去 n 分鐘内被讀取過

    -anewer file : 比檔案 file 更晚被讀取過的檔案

        -atime n : 在過去 n 天過讀取過的檔案

        -cmin n : 在過去 n 分鐘内被修改過

-cnewerfile :比檔案 file 更新的檔案

-ctime n: 在過去 n 天過修改過的檔案

-name name檔案名稱符合 name 的檔案。iname 會忽略大小寫

-size n :檔案大小是 n 機關,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。-type c : 檔案類型是 c 的檔案。

d: 目錄

c: 字型裝置檔案

b: 區塊裝置檔案

p: 具名貯列

f: 一般檔案

l: 符号連結

s: socket

find .-name "*" -exec grep xxx {} ; -print |morexxx為你想要找的字元串

cut

使用權限:所有使用者

  用法:cut -cnum1-num2 filename

  說明:顯示每行從開頭算起 num1 到 num2 的文字。 cut由1開始計數

[root@server woon]# cut -c1-10 /etc/passwd |head -n 5

root:x:0:0

bin:x:1:1:

daemon:x:2

adm:x:3:4:

lp:x:4:7:l

ln   

使用權限 : 所有使用者

  參數 :

-f : 鍊結時先将與 dist 同檔名的檔案删除-d : 允許系統管理者硬鍊結自己的目錄-i : 在删除與 dist 同檔名的檔案時先進行詢問-n : 在進行軟連結時,将 dist 視為一般的檔案-s : 進行軟鍊結(symbolic link)-v : 在連結之前顯示其檔名-b : 将在鍊結時會被覆寫或删除的檔案進行備份-S SUFFIX : 将備份的檔案都加上 SUFFIX 的字尾-V METHOD : 指定備份的方式--help : 顯示輔助說明--version : 顯示版本

  範例 :

建立硬連結

[root@serverwoon]# ln woonlifile woonlifiles

[root@serverwoon]# ls –al

-rw-r--r--.  2 woonli woon   28 1月  2518:19 woonlifile

-rw-r--r--.  2 woonli woon   28 1月  2518:19 woonlifiles

建立軟連接配接

[root@serverwoon]# ls -al

lrwxrwxrwx.  1 root  woon   10 1月 26 21:30 woonlifilesoft -> woonlifile

 将檔案 yy 産生一個 symbolic link : zz

less    

less[Option] filename

說明:  

less 的作用與 more 十分相似,都可以用來浏覽文字檔案的内容,不同的是 less 允許使用者往回卷動以浏覽已經看過的部份,同時因為 less 并未在一開始就讀入整個檔案,是以在遇上大型檔案的開啟時,會比一般的文書編輯器(如 vi)來的快速。

locate

說明: locate 讓使用者可以很快速的搜尋檔案系統内是否有指定的檔案。其方法是先建立一個包括系統内所有檔案名稱及路徑的資料庫,之後當尋找時就隻需查詢這個資料庫,而不必實際深入檔案系統之中了.

在一般的 distribution 之中,資料庫的建立都被放在 contab 中自動執行。一般使用者在使用時隻要用

# locate your_file_name

rmdir

删除空目錄

-p 遞歸删除空目錄

mktemp

建立一個緩存檔案。可以提供給shellscripts使用

-q  執行時若發生錯誤,不會顯示任何資訊。

-u  暫存檔案會在mktemp結束前先行删除。

move

說明:将一個檔案移至另一檔案,或将數個檔案移至另一目錄。或者更名

參數:-i 若目的地已有同名檔案,則先詢問是否覆寫舊檔。

rm

删除目錄或檔案

     -i删除前詢問是否删除

     -f強制删除

     -r遞歸删除

split

将一個檔案分割成數個。而從 INPUT 分割輸出成固定大小的檔案

tee

雙重定向

讀取stdin的資料,并将其内容輸出成檔案。

參數

-a 附件到指定檔案的後面而非是覆寫

touch

touch可以建立新的檔案。touch 指令改變檔案的時間記錄。 ls -l 可以顯示檔案的時間記錄。

cp

說明:将一個檔案拷貝至另一檔案,或将數個檔案拷貝至另一目錄。

-a 盡可能将檔案狀态、權限等資料都照原狀予以複制。

-r 若 source 中含有目錄名,則将目錄下之檔案亦皆依序拷貝至目的地。

-f 若目的地已經有相同檔名的檔案存在,則在複制前先予以删除再行複制。

whereis

查找檔案

-b  隻查找二進制檔案。 

-B<目錄>  隻在設定的目錄下查找二進制檔案。 

-f  不顯示檔案名前的路徑名稱。 

-m  隻查找說明檔案。 

-M<目錄>  隻在設定的目錄下查找說明檔案。 

-s  隻查找原始代碼檔案。 

-S<目錄>  隻在設定的目錄下查找原始代碼檔案。 

-u  查找不包含指定類型的檔案。

繼續閱讀