一塊兒學shell之(八-1)文件處理

 

#----------------------------------------------------------#html

# ====> 紅色字體 -特指煮酒我的所見。加粗則爲須要重點注意。 #linux

# ====>  藍色加粗 -特指與本文相關人員,包括參與修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com          #
#----------------------------------------------------------#

 

 

煮酒品茶:鬱悶的緊,發佈文章說使用什麼沉餘格式。分兩章寫,方可解決。nginx

 一塊兒學shell之文件處理之二(八)shell

http://cwtea.blog.51cto.com/4500217/876617安全

 

序:7個小結,列出文件、使用touch更新修改時間、臨時性文件的創建與使用、尋找文件、執行命令:xargs、文件系統的空間信息、比較文件。 bash

Ls dom

語法:ls [ options ] [ file(s) ] socket

用途:列出文件目錄的內容。 ide

主要選項:百度結果,能夠man ls查看。 字體

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

-a 列出目錄下的全部文件,包括以 開頭的隱含文件。 
-b 把文件名中不可輸出的字符用反斜槓加字符編號(就象在C語言裏同樣)的形式列出。 
-c 輸出文件的 節點的修改時間,並以此排序。 
-d 將目錄象文件同樣顯示,而不是顯示其下的文件。 
-e 輸出時間的所有信息,而不是輸出簡略信息。 
-f -U 對輸出的文件不排序。 
-g 無用。 
-i 輸出文件的 節點的索引信息。 
-k 以 字節的形式表示文件的大小。 
-l 列出文件的詳細信息。 
-m 橫向輸出文件名,並以做分格符。 
-n 用數字的 UID,GID 代替名稱。 
-o 顯示文件的除組信息外的詳細信息。 
-p -F 在每一個文件名後附上一個字符以說明該文件的類型,「*」表示可執行的普通 
文件;「/」表示目錄;「@」表示符號連接;「|」表示FIFOs「=」表示套 
接字(sockets)。 
-q ?代替不可輸出的字符。 
-r 對目錄反向排序。 
-s 在每一個文件名後輸出該文件的大小。 
-t 以時間排序。 
-u 以文件上次被訪問的時間排序。 
-x 按列輸出,橫向排序。 
-A 顯示除 「.」「..」外的全部文件。 
-B 不輸出以 「~」結尾的備份文件。 
-C 按列輸出,縱向排序。 
-G 輸出文件的組的信息。 
-L 列出連接文件名而不是連接到的文件。 
-N 不限制文件長度。 
-Q 把輸出的文件名用雙引號括起來。 
-R 列出全部子目錄下的文件。 
-S 以文件大小排序。 
-X 以文件的擴展名(最後一個 後的字符)排序。 
-1 一行只輸出一個文件。 
--color=no 不顯示彩色文件名 
--help 在標準輸出上顯示幫助信息。 
--version 在標準輸出上輸出版本信息並退出。 

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

注:Ls結果自適應shell窗口大小。

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

[root@bogon 9wjcl]# echo \a

a

[root@bogon 9wjcl]# echo \\a

\a

[root@bogon 9wjcl]# echo \\\a

\a

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

隱藏文件

[root@bogon 9wjcl]# touch .1 .2 .3

[root@bogon 9wjcl]# ls

one  three  two

[root@bogon 9wjcl]# ls .*

.1  .2  .3

.:

one  three  two

..:

51ctodown  8csjb  9wjcl  down  nginx

[root@bogon 9wjcl]# echo *

one three two

[root@bogon 9wjcl]# echo .*

. .. .1 .2 .3

[root@bogon 9wjcl]# echo \.*

. .. .1 .2 .3

[root@bogon 9wjcl]# echo \\.*

\.*

[root@bogon 9wjcl]# ls -d .*

.  ..  .1  .2  .3

[root@bogon 9wjcl]# ls -a

.  ..  .1  .2  .3  one  three  two

[root@bogon 9wjcl]# ls -l

總計 0

-rw-r--r-- 1 root root 0 05-21 17:48 one

-rw-r--r-- 1 root root 0 05-21 17:48 three

-rw-r--r-- 1 root root 0 05-21 17:48 two

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

-l 每行上的首字符描述爲文件類型:-爲通常文件,d爲目錄,l爲符號鏈接,接下來9個爲文件權限,wx執行r爲讀。

第五欄以字節爲單位的文件大小,六七八欄爲最後修改時間、月、日、年。表示

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

顯示完整的時間精準度:

[root@localhost ~]# ls -l --full-time /bin/kill 

-rwxr-xr-x 1 root root 14864 2009-09-04 03:52:31.000000000 +0800 /bin/kill

使用touch更新修改時間:百度參數

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

http://www.linuxso.com/command/touch.html 

touch   -   修改文件的時間戳記.         
總覽   
touch   [-acm][-r   ref_file(參照文件)|-t   time(時間值)]   file(文件名)...     
被廢棄的版本:     
touch   [-acm][ugly_time]   file(文件)...     
    
GNU版本:     
touch   [-acfm]   [-r   file(參照文件)]   [-t   decimtime(時間值)]   [-d   time(時間值)]   [--time={atime,access,use,mtime,modify}]   [--date=time]   [--reference=file]   [--no-create]   [--help]   [--version]   [--]   file(文件)...   

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

[root@localhost ~]# touch -t 195002030000.00 a

[root@localhost ~]# ls -l --full-time a 

-rw-r--r-- 1 root root 0 1950-02-03 00:00:00.000000000 +0800 a

-r複製時間

[root@localhost ~]# touch -r a b

[root@localhost ~]# ls -l --full-time b

-rw-r--r-- 1 root root 0 1950-02-03 00:00:00.000000000 +0800 b

 

臨時性文件的創建與使用:

/tmp/var/tmp

介紹:/tmp會在系統開機時清空,而/var/tmp仍然存在,由於有些文字編輯程序,會將它們的備份文件存放在這裏,從而系統毀損後能夠用來恢復數據。大部分系統會將/tmp放在常人存型的文件系統裏,以便快速訪問。安全問題應該設置/tmp的權限。

$$變量:

Trap

Mktemp:創建安全文件名。

/dev/random/dev/urandom特殊文件

尋找文件:

快速尋找文件:

Locate

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

查看gcc所在地

[root@localhost ~]# locate gcc

/lib/libgcc_s-4.1.2-20080825.so.1

/lib/libgcc_s.so.1

/lib64/libgcc_s-4.1.2-20080825.so.1

/lib64/libgcc_s.so.1

/root/nginx/nginx-0.8.46/auto/cc/gcc

................................................

尋找命令存儲位置type

調味用一個沒有路徑的命令時,它在文件系統的位置。

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

[root@localhost ~]# type gcc

gcc is /usr/bin/gcc

[root@localhost ~]# type type

type is a shell builtin

[root@localhost ~]# type newgcc

-bash: type: newgcc: not found

[root@localhost ~]# type gcc

gcc is /usr/bin/gcc

[root@localhost ~]# type mypwd

-bash: type: mypwd: not found

[root@localhost ~]# type pwd

pwd is a shell builtin

[root@localhost ~]# type foobar

-bash: type: foobar: not found

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

Find查找

Find與其餘UNIX命令最大的不一樣處在於:要查找的文件與目錄,要放在參數列表的第一位,且目錄幾乎是遞歸地向下深刻(尋找),最終要顯示而選定名稱的選項或操做放在命令行的最後。

1find命令的通常形式爲;

find pathname -options [-print -exec -ok ...]


2find命令的參數;

pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。
-print: find命令將匹配的文件輸出到標準輸出。
-exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式爲'command' { } \;,注意{   }\;之間的空格。
-ok: 和-exec的做用相同,只不過以一種更爲安全的模式來執行該參數所給出的shell命令,在執行每個命令以前,都會給出提示,讓用戶來肯定是否執行。


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

-name 

按照文件名查找文件。

-perm 
按照文件權限來查找文件。

-prune 
使用這一選項可使find命令不在當前指定的目錄中查找,若是同時使用-depth選項,那麼-prune將被find命令忽略。

-user 
按照文件屬主來查找文件。

-group 
按照文件所屬的組來查找文件。

-mtime -n +n 
按照文件的更改時間來查找文件, - n表示文件更改時間距如今n天之內,+ n表示文件更改時間距如今n天之前。find命令還有-atime-ctime 選項,但它們都和-m time選項。

-nogroup 
查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在。

-nouser 
查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。
-newer file1 ! file2 

查找更改時間比文件file1新但比文件file2舊的文件。
-type 

查找某一類型的文件,諸如:

b - 塊設備文件。
d - 目錄。
c - 字符設備文件。
p - 管道文件。
l - 符號連接文件。
f - 普通文件。

-size n[c] 查找文件長度爲n塊的文件,帶有c時表示文件長度以字節計。
-depth:在查找文件時,首先查找當前目錄中的文件,而後再在其子目錄中查找。
-fstype:查找位於某一類型文件系統中的文件,這些文件系統類型一般能夠在配置文件/etc/fstab中找到,該配置文件中包含了本系統中有關文件系統的信息。

-mount:在查找文件時不跨越文件系統mount點。
-follow:若是find命令遇到符號連接文件,就跟蹤至連接所指向的文件。
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。

另外,下面三個的區別:

   -amin n
  查找系統中最後N分鐘訪問的文件

  -atime n
  查找系統中最後n*24小時訪問的文件

  -cmin n
  查找系統中最後N分鐘被改變文件狀態的文件

  -ctime n
  查找系統中最後n*24小時被改變文件狀態的文件

    -mmin n
  查找系統中最後N分鐘被改變文件數據的文件

  -mtime n
  查找系統中最後n*24小時被改變文件數據的文件

取自:http://hi.baidu.com/minebin/blog/item/94671a361bffb8d7a3cc2bae.html 

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

Findlsshell不一樣的地方:它沒有隱藏文件的概念,點開頭的文件名,find也能找到。另find不排序文件名。它以它讀到目錄的順序依次顯示。隨機排序的。最後find處理目錄時,它會自動弟宴深刻目錄結構,尋找在那之下的任何東西,除非你使用-prune選項要求不要這麼作。

:當使用find進行破壞性目的的shell腳本時必須完全執行調試,例如在命令前插入echo

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

查找s開頭的文件名和文件

[root@localhost test]# find s*

sub

sub/5

不要在此目錄查找文件

[root@localhost test]# find -prune

.

[root@localhost test]# find . -prune

.

 

 

注:

-size選項必須接上一個數字參數,默認值以512字節爲單位的大小 。

-type選項必須接上一個單詞母參數,以標明文件類型。

-follow選項要求find接上符號鏈接,你能夠用此來找出斷掉的鏈接:

-links選項要求接上一個整數,如未指定正負號,它會只選擇具備指定數量的直接鏈接的文件,若是爲負號、則只尋找鏈接數小於該數字(絕對值)的文件,若是是正號,則權選擇鏈接數大於該數的文件。 Find . -links +1

-atime\-ctime\-mtime選項必須接上一個以天爲單位的整數,若是未指定正負號,即指確實的幾天前,若是爲負,則指少於該天數(絕對值)。爲正,則大於該天數。通常用find . -mtime -7 查改一週前修改過的文件。

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

尋找文件大小塊小於105120字節)的非空文件

[root@localhost test]# find . -size +0 -a -size -10

.

./sub

./sub/sub3

尋找空文件,或過去一年都未讀取過的文件

[root@localhost test]# find . -size 0 -o -atime +365

./.4

./2

./.3

./sub/5

./sub/sub3/6

./1

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

尋找問題文件:-print0

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

將問題字符轉換爲可見的SN

[root@localhost test]# find -print0 | tr ' \n\0' 'SN\n'|sort

.

./1

./2

./.3

./.4

./sub

./sub/5

./sub/sub3

./sub/sub3/6

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

煮酒品茶:好像沒看出有問題,不知道是沒有找到問題文件仍是出錯了。

相關文章
相關標籤/搜索