一、文件管理
Linux 系統(tǒng)中有 一切皆文件 的說法。
文件是文件
硬件設(shè)備也是文件
就是在 Linux 中管理計算機的任何資源都是使用文件的斧蜕。
這些資源可以是:
具體的文件和目錄
鍵盤号显、鼠標跨细、網(wǎng)卡、主板河质、CPU冀惭、硬盤等。
1. 關(guān)于對文件的操作命令
touch 創(chuàng)建一個空的普通文件
touch file # 創(chuàng)建一個名為 file 的空文件
cp 復(fù)制文件或目錄
cp [選項] 文件1 文件2 ... 目標路徑
若源文件有兩個以上掀鹅,則最后一個目標文件一定是目錄散休。
選項
-a : 相當于-pdr的意思±肿穑可將文件的所有屬性一起復(fù)制戚丸,可對目錄遞歸操作。
-p : 與文件的屬性一起復(fù)制扔嵌,而非使用默認屬性限府。
-d : 若源文件為鏈接文件,則復(fù)制連接文件而非文件本身痢缎。
-r : 遞歸復(fù)制胁勺,用于目錄的復(fù)制操作。
示例
- 復(fù)制 a.txt 文件独旷, 到 /tmp 目錄中
cp a.txt /tmp/
- 復(fù)制 b.txt 文件署穗, 到 /tmp 目錄下寥裂,并起名為 b.txt.bak
cp b.txt /tmp/b.txt.bak
- 復(fù)制 /opt 目錄到 /tmp 目錄下
cp -a /opt /tmp/
建議
當目標是一個目錄時,建議目錄名后面加上路徑分隔符 /案疲, 這樣比較易讀封恰,可以明確的看出來復(fù)制后的文件名。
假如復(fù)制的是一個目錄褐啡,建議都加上 -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)存占滿,從而導(dǎo)致整個系統(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: 重復(fù)前一個搜索(與/或苍碟?有關(guān))
N: 反向重復(fù)前一個搜索(與/或酒觅?有關(guān))
q: 離開less
more 一頁一頁翻動
空格鍵:表示向下翻一頁
Enter: 表示向下翻一行
/字符串:表示在這個顯示的內(nèi)容中微峰,向下搜索字符串阐滩,之后按n,可重復(fù)向下搜索。
:f : 立刻顯示文件名以及當前 顯示的行數(shù)
q : 表示立刻離開more
touch [-acdmt] 文件
選項:
-a :僅修改access time
-c :僅修改時間县忌,而不建立文件
-d :后面可以接日期掂榔,也可以使用 date=日期或時間
-m:僅修改mtime
-t :后面可以接時間继效,格式為 [YYMMDDhhmm]
例如:將范例的bashrc日期改為2010/5/11 19:53
[root@www tmp]# touch -t 1005111953 bashrc
Touch 命令最常用的情況是:
建立一個空文件
將某個文件日期修改問當前日期(mtime與atime)
關(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
搜索文件
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
帶文件 復(fù)制到 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ù)
- 找出 /sbin 目錄下的文檔,并使用 ls -l 列出詳細數(shù)據(jù)
find /sbin -perm +0700 |ls -l $(xargs)
- 把找到的文件復(fù)制到 /test 目錄下
find /sbin -perm +0700 | cp $(xargs) /test
關(guān)于減號 - 的用途
可以作為 stdout 和 stdin
tar -cvf - /home | tar -xvf -
二足淆、目錄管理
1. 系統(tǒng)的目錄樹機構(gòu)詳解
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 字段分隔
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 :分隔符护锤,預(yù)設(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ù)量
可以將重復(fù)的數(shù)據(jù)僅列出一個來顯示酿傍,且可以進行統(tǒng)計
uniq [-ic]
選項:
-i //忽略大小寫
-c //進行統(tǒng)計
例如:我想要知道每個人登入服務(wù)器的總次數(shù)烙懦,可以這樣:
[root@testhost ~]# last | cut -d ' ' -f1 |sort|uniq -c
wc 字符、行統(tǒng)計
tr 字符替換
cat /etc/passwd | tr -d ':' //將冒號刪除
last | tr '[a-z]' '[A-Z]' //所以小寫變成大寫
tee 雙向輸出
cat anaconda-ks.cfg | tee an.bak