5.文檔管理

一秸应、文件管理

Linux 系統(tǒng)中有 一切皆文件 的說法摹蘑。
文件是文件
硬件設(shè)備也是文件
就是在 Linux 中管理計算機的任何資源都是使用文件的。
這些資源可以是:
具體的文件和目錄
鍵盤、鼠標、網(wǎng)卡渐逃、主板、CPU民褂、硬盤等茄菊。

1. 關(guān)于對文件的操作命令

touch 創(chuàng)建一個空的普通文件

touch   file    # 創(chuàng)建一個名為  file 的空文件

cp 復制文件或目錄

cp [選項] 文件1 文件2 ... 目標路徑
若源文件有兩個以上,則最后一個目標文件一定是目錄赊堪。

 選項
-a   :  相當于-pdr的意思面殖。可將文件的所有屬性一起復制哭廉,可對目錄遞歸操作脊僚。

-p   : 與文件的屬性一起復制,而非使用默認屬性群叶。
-d   : 若源文件為鏈接文件吃挑,則復制連接文件而非文件本身。
-r   :  遞歸復制街立,用于目錄的復制操作舶衬。

-f   :  若目標目錄中含有和源文件同名的文件,強制(force)復制赎离,不提示確認逛犹。
-i   :   若目標文件已存在,則提示梁剔。

-l   :  建立硬鏈接(hard link)的連接文件虽画,而非復制文件本身。

-u   : 若目標文件比源文件舊荣病,更新目標文件码撰。

示例

  1. 復制 a.txt 文件, 到 /tmp 目錄中
cp      a.txt     /tmp/

  1. 復制 b.txt 文件个盆, 到 /tmp 目錄下脖岛,并起名為 b.txt.bak
cp      b.txt    /tmp/b.txt.bak

  1. 復制 /opt 目錄到 /tmp 目錄下
cp    -a  /opt    /tmp/

最佳實戰(zhàn):

當目標是一個目錄時,建議目錄名后面加上路徑分隔符 /颊亮, 這樣比較易讀柴梆,可以明確的看出來復制后的文件名。

假如復制的是一個目錄终惑,建議都加上 -a 選項

rm 刪除文件或目錄

選項

-f  :  就是force 的意思绍在,強制刪除。
-i  :  交互式刪除雹有。
-r  :  對目錄進行遞歸刪除偿渡。

mv 移動文件與目錄,或重命名

選項
-f  : 強制移動而不詢問 
-i   :交互式   
-u  :若目標文件已經(jīng)存在件舵,且源文件比較新卸察,才會更新  

擴展:
其實Linux中還有一個專門進行大量文件重命名的命令 rename,可以man rename查看一下铅祸。

獲取一個路徑的坑质,文件名部分與目錄部分

basename 獲取文件名部分
dirname 獲取目錄部分

例如:

[root@linux~]#basename   /etc/sysconfig/network
network          文件名
[root@linux~]#dirname    /etc/sysconfig/network
/etc/sysconfig   目錄名

查看文件內(nèi)容

head 查看文件的前幾行

默認顯示前 10 行

選項:
-n :后面接數(shù)字,表示顯示前幾行的意思

tail 顯示文件的后幾行

選項:
-n  :  后面接數(shù)字
默認后10行

cat (concatenate)連續(xù)的簡寫临梗,查看文件的全部內(nèi)容

主要功能是將一個文件的內(nèi)容連續(xù)的顯示 在屏幕上涡扼。
當文件內(nèi)容行數(shù)超過40行以上時,不適合用此命令盟庞。

注意

由于 cat 命令會把文件的所有內(nèi)容都顯示到屏幕上吃沪,換句話說,就是會把文件的內(nèi)容一次性的讀到內(nèi)存中什猖。
這樣的話票彪,大的文件會把內(nèi)存占滿红淡,從而導致整個系統(tǒng)崩潰。

選項
-n  :顯示行號

-A  :相當于-vET的整合參數(shù)降铸,可列出一些特殊字符
-E  :將結(jié)尾的換行符$顯示出來
-T  :  將[Tab]按鍵以^I顯示出來
-v  : 列出一些看不出來的特殊字符

tac 倒序的顯示文件的內(nèi)容在旱, 和 cat 相反

cat     /etc/issue

less 一頁一頁翻動,可以上下翻動

[PageUP]向上推掸,[PageDown]向下
Less運行過程中
 空格鍵:     向下翻動一頁
 [PageUP]: 向下翻動一頁
 [pageDn]:向上翻動一頁

 /字符串:  向下搜索字符串的功能
 桶蝎?字符串:想上搜索字符串的功能
 n:  重復前一個搜索(與/或?有關(guān))
 N: 反向重復前一個搜索(與/或谅畅?有關(guān))
 q:   離開less

more 一頁一頁翻動

   當more運行過程中登渣,可以操作的按鍵有:
  空格鍵:表示向下翻一頁
  Enter:  表示向下翻一行
  /字符串:表示在這個顯示的內(nèi)容中,向下搜索字符串毡泻,之后按n,可重復向下搜索胜茧。
  :f :    立刻顯示文件名以及當前 顯示的行數(shù)
  q  :    表示立刻離開more

touch [-acdmt] 文件

選項:
-a :僅修改access time
-c :就是文件不存在不建立,存在則修改所以時間為當前時間戳
-d :后面可以接日期牙捉,修改的是 atime 和 mtime
-m:僅修改 mtime
-t :后面可以接時間竹揍,格式為 [[CC]YY]MMDDhhmm[.ss]

關(guān)于 Linu 系統(tǒng)中的 3 個時間

atime 就是 access time 最近訪問內(nèi)容的時間
mtime 就是 modify time 最近修改內(nèi)容的時間
ctime 就是 change time 最近更改文件的時間,包括文件名邪铲、大小芬位、內(nèi)容、權(quán)限带到、屬主昧碉、屬組等。

stat 命令可以查看一個文檔的這三個時間戳:

stat anaconda-ks.cfg

?  ~ stat anaconda-ks.cfg
  File: ‘a(chǎn)naconda-ks.cfg’
  Size: 3415        Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 268680      Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-03-05 17:36:56.000000000 +0000
Modify: 2019-03-05 17:36:56.000000000 +0000
Change: 2019-03-19 10:04:45.376427000 +0000
 Birth: -
?  ~ touch -a anaconda-ks.cfg
?  ~ stat anaconda-ks.cfg
  File: ‘a(chǎn)naconda-ks.cfg’
  Size: 3415        Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 3564617     Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-07-24 15:18:31.298567000 +0000
Modify: 2019-03-05 17:36:56.000000000 +0000
Change: 2019-07-24 15:18:31.298567000 +0000
 Birth: -
?  ~ touch -c anaconda-ks.cfg
?  ~ stat anaconda-ks.cfg
  File: ‘a(chǎn)naconda-ks.cfg’
  Size: 3415        Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 3564617     Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-07-24 15:19:33.401400000 +0000
Modify: 2019-07-24 15:19:33.401400000 +0000
Change: 2019-07-24 15:19:33.401400000 +0000
 Birth: -

修改更精確的時間

2018 年 8 月 7 日 18 點 18 分
?  ~ touch -t 1808071818 anaconda-ks.cfg

1918 年 8 月 7 日 18 點 18 分
?  ~ touch -t 191808071818 anaconda-ks.cfg

搜索文件

which 尋找可執(zhí)行文件

參數(shù):
-a     :將所有可找到的同名命令都列出來揽惹。默認是只列出第一個找到的命令名稱

一文件查找

grep: 文件內(nèi)容過濾

find: 文件查找被饿,針對文件名

1.1 命令文件

which ls
//從PATH環(huán)境變量 (echo $PATH)

二 find詳解

find [options][path...] [expression][action】

2.1按文件名:

find /etc -name "ifcfg-eth0"  
-name   文件名, 后面-print 動作時默認的,已省略

find /etc -iname "ifcfg-eth0"           
-i忽略大小寫

find /etc -iname "ifcfg-eth*"

2.2按文件大刑虏:

find /etc -size +5M           //大于5M
find /etc -size 5M
find /etc -size -5M
find /etc -size +5M -ls      //-ls找到的處理動作, 不是平時用的ls
ll - h   查看大小

2.3指定查找的目錄深度:

-maxdepth levels
-mindepth levels
find / -maxdepth 3 -a  -name "ifcfg-eth0"           maxdepth 3   最大3層    
a要滿足2個條件 
并且按時間找(atime,mtime,ctime):
[root@tianyun ~]# find /etc -mtime +5       //修改時間超過5天
[root@tianyun ~]# find /etc -mtime 5        //修改時間等于5天
[root@tianyun ~]# find /etc -mtime -5       //修改時間5天以內(nèi)

2.4按文件類型:

find /dev -type f                          //f普通
find /dev -type d                          //d目錄
find /dev -type l                          //l鏈接
find /dev -type b                          //b塊設(shè)備
find /dev -type c                          //c字符設(shè)備
find /dev -type s                          //s套接字
find /dev -type p                          //p管道文件  

2.5按文件權(quán)限:

find . -perm 644 -ls            

. 是當前目錄    精確查找  644    一般都是進行精確查找

find . -perm -644 -ls    
-是包含的意思 
帶不帶- 自己對比一下查看狭握。       
帶-表示只要6就可以
find . -perm -600 -ls
find . -perm -222 -ls              //全局可寫
find /usr/bin /usr/sbin -perm -4000 -ls       //包含set uid
find /usr/bin /usr/sbin -perm -2000 -ls       //包含set gid
find /usr/bin /usr/sbin -perm -1000 -ls       //包含sticky    

找到后處理的動作 ACTIONS:

-print  默認
-ls    列出結(jié)果文件的屬性,就像 ls  -l 的效果

-exec  繼續(xù)執(zhí)行其他命令
|xargs  支持更多參數(shù)

find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \; 

exec為執(zhí)行一條shell命令 {}為前面的東西; 格式

exec 命令用于調(diào)用并執(zhí)行指令的命令 查找?guī)?root 帶文件 復制到 tmp

find /etc -name “root*”  -exec cp -rf {} /tmp \;  

find /etc -name "ifcfg*" -exec rm -rf {} \;  

find . -name "a*" -delete 

擴展知識:find結(jié)合xargs*

 find . -name "yang*.txt" |xargs rm -rf     

重點:

找到之后刪除處理

xargs 把找到的文件名作為參數(shù)傳遞個要處理的程序

案例1: 分別找出file5 和除了file5的文件

[root@tianyun ~]# mkdir dir1
[root@tianyun ~]# touch dir1/file{1..20}

[root@tianyun ~]# find /root/dir1 -name "file5"
[root@tianyun ~]# find /root/dir1 ! -name "file5" 
疯溺!為取反
[root@tianyun ~]# find /root/dir1 -name "file5" -o -name "file9"         
即是file5又是file9

/root/dir1/file5
/root/dir1/file9

三 -exec 和 xargs 的區(qū)別

find . -name 'core' -type f -exec rm {} /; 時论颅,

find -exec 命令會對每個匹配的文件執(zhí)行一個單獨的 rm 操作(execute a separate rm for each one), 正如你手動敲入下面命令:

rm ./bin/core

rm ./source/shopping_cart/core

rm ./backups/core

但是使用這種方式,如果有100個文件匹配了囱嫩,那么就需要啟100個進程恃疯,一個進程處理一個rm命令。一般來說墨闲,其越多進程今妄,意味著越耗性能。我們可以換個思路,我們將要刪除文件當作參數(shù)傳遞給rm不就可以了嗎盾鳞?也就是說

rm ./bin/core

rm ./source/shopping_cart/core 

rm ./backups/core

改成:

 rm ./bin/core ./source/shopping_cart/core ./backups/core

但是前提是后面的命令必須支持多參數(shù)犬性。

像有些命令,比如unzip腾仅,就不支持輸入多個jar包仔夺,所以必須用-exec。

xargs攒砖,顧名思義,是對參數(shù)進行處理的命令日裙。它的任務(wù)就是將輸入行轉(zhuǎn)換成下一個命令的參數(shù)列表吹艇。因此上面的

find -exec命令可以改寫成:

find . -name 'core' -type f -print | xargs rm

相比之下,也不難看出各自的缺點

1昂拂、exec 每處理一個文件或者目錄受神,它都需要啟動一次命令,效率不好;

2格侯、exec 格式麻煩鼻听,必須用 {} 做文件的代位符,必須用 \;作為命令的結(jié)束符联四,書寫不便撑碴。

3、xargs 不能操作文件名有空格的文件朝墩; 綜上醉拓,如果要使用的命令支持一次處理多個文件,并且也知道這些文件里沒有帶空格的文件收苏, 那么使用 xargs比較方便; 否則亿卤,就要用 exec了。

語法:

xargs [-epn] command

選項

-e 后面跟字符串鹿霸,當xargs分析到字符串時就停止,格式為 -e'test' 中間沒有空格,這里的字符串必須和參數(shù)完全匹配
-p 執(zhí)行時詢問
-n 后面接數(shù)字排吴,定義command執(zhí)行時,要使用幾個參數(shù)

  1. 找出 /sbin 目錄下的文檔懦鼠,并使用 ls -l 列出詳細數(shù)據(jù)
find /sbin -perm +0700 |ls -l $(xargs) 

  1. 把找到的文件復制到 /test 目錄下
find /sbin -perm +0700 | cp $(xargs) /test

關(guān)于減號 - 的用途

可以作為 stdout 和 stdin

tar  -cvf   -   /home | tar -xvf  - 

二讨阻、目錄管理

1. 系統(tǒng)的目錄樹機構(gòu)詳解

image

/ 根目錄
├── bin 存放用戶二進制文件
├── boot 存放內(nèi)核引導配置文件
├── dev 存放設(shè)備文件
├── etc 存放系統(tǒng)配置文件
├── home 用戶主目錄
├── lib 動態(tài)共享庫
├── lost+found 文件系統(tǒng)恢復時的恢復文件
├── media 可卸載存儲介質(zhì)掛載點
├── mnt 文件系統(tǒng)臨時掛載點
├── opt 附加的應(yīng)用程序包
├── proc 系統(tǒng)內(nèi)存的映射目錄,提供內(nèi)核與進程信息
├── root root 用戶主目錄
├── sbin 存放系統(tǒng)二進制文件
├── srv 存放服務(wù)相關(guān)數(shù)據(jù)
├── sys sys 虛擬文件系統(tǒng)掛載點
├── tmp 存放臨時文件
├── usr 存放用戶應(yīng)用程序
└── var 存放郵件夺鲜、系統(tǒng)日志等變化文件

2. 符號和目錄的關(guān)系

.   英文的點和蚪,表示當前目錄

..   英文的點點, 表示上層目錄

-   英文的短橫線淑趾, 表示上次離開的目錄

~  英文的波浪號阳仔,表示 當前 用戶的家目錄

~shark   表示 shark 用戶的家目錄


3. 操作目錄的命令

pwd (print working directory) 顯示當前所在目錄的路徑

參數(shù):
-P 顯示出實際路徑,而非使用的軟連接(link)路徑

cd (change directory) 你想去哪里

例如:

cd  ~               到自己的家目錄
cd  ~shark        到  shark 用戶的家目錄
cd  -              到上次離開的工作目錄

mkdir (make directory) 建立新目錄

參數(shù):
-m 創(chuàng)建新目錄的同時,設(shè)置該目錄的權(quán)限近范。直接設(shè)置嘶摊,會忽略默認權(quán)限。
-p 直接建立所需的目錄遞歸评矩。

例如:

mkdir   -p   /a/b/c

rmdir (rmove directory) 刪除空目錄

參數(shù):
-p 遞歸刪除空目錄

tree 遞歸查看目錄結(jié)構(gòu)

參數(shù):
-L n 表示查看到第 n 層的目錄

三叶堆、文件內(nèi)容操作

cut 字段分隔

image
image
image

grep 關(guān)鍵字搜索

grep [-acinv] [--color=auto] '搜尋字符串' filename
選項:
-a //將binary 文件以text文件的方式搜索數(shù)據(jù)
-c //計算找到的字符串的次數(shù)
-i //忽略大小寫
-n //輸出行號
-v //反向選擇

排序、統(tǒng)計命令: sort wc uniq

sort 排序

可以依據(jù)不同的數(shù)據(jù)型態(tài)來排序

sort [-fbMnrtuk] [file or stdin]
選項不參數(shù):
-f :忽略大小寫
-b :忽略最前面的空格符部分斥杜;
-n : 使用『純數(shù)字』進行排序(默認是以文字型態(tài)來排序的)虱颗;
-r :反向排序;
-u :就是 uniq 蔗喂,相同的數(shù)據(jù)中忘渔,僅出現(xiàn)一行代表;
-t :分隔符缰儿,預設(shè)是用 [tab] 鍵來分隔畦粮;
-k :以那個區(qū)間 (field) 來進行排序的意思

示例文件內(nèi)容

4349 shark
264 shark
924 xiguatian
924 tian
734 yangge
823 shark
734 yangge

sortt     sort.txt

sort    -n  sort.txt

uniq 去重+統(tǒng)計數(shù)量

可以將重復的數(shù)據(jù)僅列出一個來顯示,且可以進行統(tǒng)計

uniq [-ic]
選項:
-i   //忽略大小寫
-c   //進行統(tǒng)計

例如:我想要知道每個人登入服務(wù)器的總次數(shù)乖阵,可以這樣:

[root@testhost ~]# last  | cut   -d   ' '  -f1  |sort|uniq   -c

wc 字符宣赔、行統(tǒng)計

image

tr 字符替換

cat /etc/passwd | tr -d ':' //將冒號刪除

last | tr '[a-z]' '[A-Z]' //所有小寫變成大寫

tee 雙向輸出

image
cat   anaconda-ks.cfg   | tee  an.bak  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞪浸,隨后出現(xiàn)的幾起案子儒将,更是在濱河造成了極大的恐慌,老刑警劉巖对蒲,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椅棺,死亡現(xiàn)場離奇詭異,居然都是意外死亡齐蔽,警方通過查閱死者的電腦和手機两疚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來含滴,“玉大人诱渤,你說我怎么就攤上這事√缚觯” “怎么了勺美?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碑韵。 經(jīng)常有香客問我赡茸,道長,這世上最難降的妖魔是什么祝闻? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任占卧,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘华蜒。我一直安慰自己辙纬,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布叭喜。 她就那樣靜靜地躺著贺拣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捂蕴。 梳的紋絲不亂的頭發(fā)上譬涡,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音啥辨,去河邊找鬼昂儒。 笑死,一個胖子當著我的面吹牛委可,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腊嗡,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼着倾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了燕少?” 一聲冷哼從身側(cè)響起卡者,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎客们,沒想到半個月后崇决,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡底挫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年恒傻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片建邓。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡盈厘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出官边,到底是詐尸還是另有隱情沸手,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布注簿,位于F島的核電站契吉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诡渴。R本人自食惡果不足惜捐晶,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧租悄,春花似錦谨究、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至潭辈,卻和暖如春鸯屿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背把敢。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工寄摆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人修赞。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓婶恼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柏副。 傳聞我的和親對象是個殘疾皇子勾邦,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容