文件管理的相關命令


2.文件管理之:查看文件內容(cat tac less more head tail tailf grep ...)
----------------------------------------------cat #查看文件內容
# cp /etc/passwd ./pass
# cat pass
# cat -n pass #-n顯示行號
# cat -A pass #查看文件的特殊符號,好比文件中存在tab鍵


#cat >> longjiping.txt <<EOF #追加數據(擴展瞭解)
test
EOF
一、cat f1.txt,查看f1.txt文件的內容。
二、cat -n f1.txt,查看f1.txt文件的內容,而且由1開始對全部輸出行進行編號。
三、cat -b f1.txt,查看f1.txt文件的內容,用法與-n類似,只不過對於空白行不編號。
四、cat -s f1.txt,當遇到有連續兩行或兩行以上的空白行,就代換爲一行的空白行。
五、cat -e f1.txt,在輸出內容的每一行後面加一個$符號。
六、cat f1.txt f2.txt,同時顯示f1.txt和f2.txt文件內容,注意文件名之間以空格分隔,而不是逗號。
七、cat -n f1.txt>f2.txt,對f1.txt文件中每一行加上行號後而後寫入到f2.txt中,會覆蓋原來的內容,文件不存在則建立它。
八、cat -n f1.txt>>f2.txt,對f1.txt文件中每一行加上行號後而後追加到f2.txt中去,不會覆蓋原來的內容,文件不存在則建立它。html

建立文件以及寫入文件內容的用法:
[root@beua ~]# cat >1.txt<<EOF
> hello,my name is longjiping
> EOFlinux

*注意:建立文件的時候要設置文件結束標誌,也就是<<EOF,能夠把EOF換成別的字符,注意是大小寫敏感的,
當文件內容寫完以後要輸入結束標誌EOF,這時命令會正確結束,表示成功建立文件而且寫進內容。
追加文件內容的用法:
注意:與建立文件內容不一樣的是符號單邊號>變成了雙邊號>>。
-----------------------------------------------------
#wc 命令的功能爲統計指定文件中的字節數、字數、行數, 並將統計結果顯示輸出。
       - c 統計字節數。
  - l 統計行數。
  - w 統計字數。
        這些選項能夠組合使用。通常統計字數用wc -l
  輸出列的順序和數目不受選項的順序和數目的影響。
----------------------------------------------tac 倒序查看文件
# tac passweb

----------------------------------------------less 查看大文件
# less /etc/services #使用光標按行上下翻動,空格進行翻頁,q退出centos

----------------------------------------------more 查看大文件(顯示查看百分比)
# more /etc/services #回車按上下翻動,空格進行翻頁,q退出bash


----------------------------------------------head 查看文件頭部內容,默認前十行
# head /etc/passwd          #查看文件頭部10行內容內容 
# head -n5 /etc/passwd         #指定查看頭部第幾行服務器

----------------------------------------------tail 查看文件尾部內容,默認最後十行
# tail /etc/passwd            #查看文件尾部10行內容 
# tail -f /var/log/messages      #-f查看文件尾部的變化
# tailf /var/log/messages        #查看文件尾部的變化
----------------------------------------------grep過濾文件內容
# grep "^root" pass          #查找pass文件中以root開頭的行
# grep "bash$" pass           #查找pass文件中以bash結尾的行
# grep "failure" /var/log/secure             #過濾含有failure的行
# grep -i "ftp" pass         #過濾含有ftp的行,不分大小寫
# grep -Ei "sync$|ftp" pass       #過濾多個內容用-E
# grep -n -A 2 "Failed" /var/log/secure  #查找/var/log/secure文件中Failed字符串,並同時打印它的下2行
# grep -n -B 2 "Failed" /var/log/secure  #查找/var/log/secure文件中Failed字符串,並同時打印它的上2行
# grep -n -C 2 "Failed" /var/log/secure  #查找/var/log/secure文件中Failed字符串,並同時打印它的上下2行less


3.文件管理之:聯網下載文件(wget、curl)、文件上傳與下載(rz、sz)
----------------------------------------wget、curl聯網下載文件----------------------------------------
CentOS 7
yum install wget -y #默認系統最小化安裝則沒有該命令curl


wget http://mirrors.aliyun.com/repo/Centos-7.repo #下載互聯網上的文件至本地
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#將阿里雲的centos-7.repo下載到/etc/yum.repos.d/並更名爲CentOS-Base.repo -O參數指定編輯器


curl http://mirrors.aliyun.com/repo/Centos-7.repo #僅查看這個url地址的文件的內容
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repopost

# curl www.baidu.com > 1.html #將curl到的內容從新的寫入到一個文件中.
# curl -o 2.html www.baidu.com #使用-o參數將文件保存到指定的位置


請下載一個圖片至於/opt目錄下(不要修更名稱),最少使用2中方式, URl地址爲: http://fj.xuliangwei.com/public/ks.jpeg

1.最建議的方法是wget
[root@www ~]# cd /opt
[root@www opt]# wget http://fj.xuliangwei.com/public/ks.jpeg

[root@www ~]# wget -O /opt/ks.jpeg http://fj.xuliangwei.com/public/ks.jpeg

2.curl
[root@www ~]# curl -o /opt/ks2.jpeg http://fj.xuliangwei.com/public/ks.jpeg

 

-----------------------rzsz上傳下載文件(Windows->Linux)----------------------------------------
# yum install lrzsz -y #不安裝軟件則沒有該命令
# rz #只能上傳文件文件上傳,不支持上傳大於4個G文件,同時也不支持上傳目錄,不支持斷點續傳
# sz filename #只能下載文件(不能下載目錄)


------------------------------------------------------------------------------
wget curl #上互聯網下載文件
rz sz #Windows上傳文件和下載文件至Linux服務器上

 

4文件管理之:文件或命令查找(locate、which、whereis、find)

----------------------------------------文件查找----------------------------------------
# locate /etc/sh #搜索etc目錄下全部以sh開頭的文件,所有列出來
# locate -i /etc/sh #搜索etc目錄下,全部以sh開頭的文件,忽略大小寫


----------------------------------------命令查找----------------------------------------
1.# which ls #查找ls命令的絕對路徑
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 上這些路徑中查找命令
# whereis ls #查找命令的路徑、幫助手冊、等
2.# whereis -b ls #僅顯示命令所在的路徑
3.# type -a ls #查看命令的絕對路徑(包括別名)
三種方法查詢cd命令所在的絕對路徑
which cd
whereis -b cd
type -a cd

 

5.文件管理之:字符處理命令(sort、uniq、cut、sed、grep、awk、wc、)
----------------------------------------sort排序----------------------------------------
在有些狀況下,須要對應一個無序的文本文件進行數據的排序,這時就須要使用sort進行排序了。

sort [OPTION]... [FILE]...
# -r:倒序 -n:按數字排序 -t:指定分隔符(默認空格) -k:指定第幾列, 指定幾列幾字符(指定1,1 3.1,3.3)

#1.首先建立一個文件,寫入一寫無序的內容
[root@beua ~]# cat >> file.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF

#2.使用sort下面對輸出的內容進行排序
[root@beua ~]# sort file.txt
a:4
b:3
c:2
d:1
e:5
f:11

#結果並非按照數字排序,而是按字母排序。
#可使用-t指定分隔符, 使用-k指定須要排序的列。
[root@beua ~]# sort -t ":" -k2 sort.txt
d:1
f:11 #第二行爲何是11?不該該按照順序排列?
c:2
b:3
a:4
e:5

#按照排序的方式, 只會看到第一個字符,11的第一個字符是1, 按照字符來排序確實比2小。
#若是想要按照數字的方式進行排序, 須要使用 -n參數。
[root@beua ~]# sort -t ":" -n -k2 p.txt
d:1
c:2
b:3
a:4
e:5
f:11

#測試案例,下載文件http://fj.xuliangwei.com/public/ip.txt,對該文件進行排序
[root@beua ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt
----------------------------------------uniq去重----------------------------------------
若是文件中有多行徹底相同的內容,當前是但願能刪除重複的行,同時還能夠統計出徹底相同的行出現的總次數, 那麼就可使用uniq命令解決這個問題(可是必須配合sort使用)。

uniq [OPTION]... [INPUT [OUTPUT]]
#選項:-c 計算重複的行

#1.建立一個file.txt文件:
[root@xuliangwei ~]# cat >> file1.txt <<EOF
abc
123
abc
123
EOF
#2.uniq須要和sort一塊兒使用, 先使用sort排序, 讓重複內容連續在一塊兒
[root@beua ~]# sort file.txt
123
123
abc
abc
#3.使用uniq去除相鄰重複的行
[root@beua ~]# cat file.txt |sort|uniq
123
abc
#4.-c參數能統計出文件中每行內容重複的次數
[root@beua ~]# cat file.txt |sort|uniq -c
2 123
2 abc


請統計分析以下日誌,統計訪問量最高的IP,打印前top10的IP.
[root@beua ~]# awk '{print $1}' docs.xuliangwei.log |sort |uniq -c|sort -n|tail -5
101 139.226.172.91
159 139.226.173.216
347 139.226.173.12
446 123.207.173.97
495 114.92.159.100


----------------------------------------cut截取字段----------------------------------------
cut OPTION... [FILE]...
#選項:-d 指定分隔符 -f 數字,取第幾列 –f3,6三列和6列 -c 按字符取(空格也算)

echo "Im xlw, is QQ 552408925" >file.txt #過濾出文件裏 xlw以及552408925


[root@beua ~]# cut -d " " -f 2,5 file.txt |awk -F "," '{print $1,$2}'
[root@beua ~]# awk '{print $2,$5}' file.txt |awk -F "," '{print $1,$2}'
[root@beua~]# awk -F '[, ]' '{print $2,$6}' file.txt
[root@beua ~]# awk -F '[, ]+' '{print $2,$5}' file.txt #參考
[root@beua ~]# cut -d " " -f 2,5 file.txt|sed 's#,##g'

 

取列:cut awk(推薦)
替換:sed
取行:grep awk
#實現上述題目幾種思路
# cut -d " " -f2,5 file.txt
# cut -d " " -f2,5 file.txt |sed 's#,##g'
# sed 's#,# #g' file.txt | awk -F " " '{print $2 " " $5}'
# awk '{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}'
# awk -F "[, ]" '{print $2,$6}' file.txt
# awk -F '[, ]+' '{print $2,$5}' file.txt

過濾,取行
# awk '/root/' /etc/passwd
# awk '/^root/' /etc/passwd


----------------------------------------wc統計行號----------------------------------------
wc [OPTION]... [FILE]...
#選項:-l顯示文件行數 -c顯示文件字節 -w顯示文件單詞

# wc -l /etc/fstab #統計/etc/fstab文件有多少行
# wc -l /etc/services #統計/etc/services 文件行號

#擴展方法
# grep -n "." /etc/services | tail -1
# cat -n /etc/services | tail -1

 

習題:過濾出/etc/passwd以nologin結尾的.並統計有多少行
# grep "nologin$" /etc/passwd | wc -l

----------------------------------------------------------sed流編輯器------------------------------

sed                #流編輯器
-n                  #取消文件默認輸出
-i                   #講sed的操做寫入至文件中
-r                  #支持小括號的匹配方式
s###g           #g貪婪匹配
sed -n '2p'    #打印文件的第二行,並取消默認輸出
sed 's###g'  #替換的語法格式(在中能夠寫一些通配符.*$^)
sed -n '2s#root#test#gp'    #打印文件的第二行,並將root替換爲test(模擬執行)
sed -r 's#(root)(bin)(test)#\1 \2 \3#g'     #後向引用

# sed -n '1p' /etc/passwd
# sed -n '1p' /etc/passwd|sed -r 's#(root)(.*)(/bin/bash)#\3\2\1#g'                    #取行和換順序
# sed -n '2p' /etc/passwd|sed -r 's#(^.*1:)(.*)(/.*:)(/.*)(/.*)#\1\4\3\2\5#g'    #取行和後向引用

 

---------------------------------------------------------練習題-------------------------------------------------------

習題:使用ifconfig獲取當前的IP地址,使用sed\awk\grep取當前服務器的ens32的IP地址
yum install net-tools -y #沒有ifconfig請安裝這個軟件包
1.我要取的值在哪
2.如何去縮小範圍,縮小到行,精確到列(想要的值)
# ifconfig ens32|grep "inet "|cut -d " " -f 10
# ifconfig ens32|grep "inet "|awk '{print $2}'
# ifconfig ens32|awk '/inet /'|awk '{print $2}'
# ifconfig ens32|awk '/inet /'|sed -r 's#^.*et (.*) net.*$#\1#g' (擴展)
awk取行
# ifconfig ens32|awk 'NR==2 {print $2}' #NR表明的是行號,NR==2 表明要取輸出結果的第二行
sed取行
# ifconfig ens32|sed -n '2p'|awk '{print $2}'
# ifconfig ens32|sed -rn '2s#^.*et (.*) net.*$#\1#gp' (擴展學習)


習題: 分析以下日誌,統計每一個域名被訪問的次數。
[root@student tmp]# cat >> web.log <<EOF
http://www.xuliangwei.com/index.html
http://www.xuliangwei.com/1.html
http://post.xuliangwei.com/index.html
http://mp3.xuliangwei.com/index.html
http://www.xuliangwei.com/3.html
http://post.xuliangwei.com/2.html
EOF

1.提取域名
2.對域名進行排序
3.對域名進行去重,而後統計
# awk -F "/" '{print $3}' web.log |sort |uniq -c
# cat web.log |cut -d "/" -f3|sort|uniq -c
# sed -r 's#^.*//(.*)/.*$#\1#g' web.log #擴展


習題:將該/etc/sysconfig/selinux文件中的SELINUX=enforcing替換爲SELINUX=disabled

1.提取須要替換的內容
2.模擬演練
3.真的修改
[root@beua ~]# sed 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux
[root@beua ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux


習題:將以下文件的內容root和/bin/bash位置交換
[root@beua ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash

# awk '/^root/' /etc/passwd|awk -F ":" '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}'# awk -F ":" '/^root/ {print $7":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd

相關文章
相關標籤/搜索