文件管理的相关命令


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
1、cat f1.txt,查看f1.txt文件的内容。
2、cat -n f1.txt,查看f1.txt文件的内容,并且由1开始对所有输出行进行编号。
3、cat -b f1.txt,查看f1.txt文件的内容,用法与-n相似,只不过对于空白行不编号。
4、cat -s f1.txt,当遇到有连续两行或两行以上的空白行,就代换为一行的空白行。
5、cat -e f1.txt,在输出内容的每一行后面加一个$符号。
6、cat f1.txt f2.txt,同时显示f1.txt和f2.txt文件内容,注意文件名之间以空格分隔,而不是逗号。
7、cat -n f1.txt>f2.txt,对f1.txt文件中每一行加上行号后然后写入到f2.txt中,会覆盖原来的内容,文件不存在则创建它。
8、cat -n f1.txt>>f2.txt,对f1.txt文件中每一行加上行号后然后追加到f2.txt中去,不会覆盖原来的内容,文件不存在则创建它。

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

*注意:创建文件的时候要设置文件结束标志,也就是<<EOF,可以把EOF换成别的字符,注意是大小写敏感的,
当文件内容写完之后要输入结束标志EOF,这时命令会正确结束,表示成功创建文件并且写进内容。
追加文件内容的用法:
注意:与创建文件内容不同的是符号单边号>变成了双边号>>。
-----------------------------------------------------
#wc 命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。
       - c 统计字节数。
  - l 统计行数。
  - w 统计字数。
        这些选项可以组合使用。一般统计字数用wc -l
  输出列的顺序和数目不受选项的顺序和数目的影响。
----------------------------------------------tac 倒序查看文件
# tac pass

----------------------------------------------less 查看大文件
# less /etc/services #使用光标按行上下翻动,空格进行翻页,q退出

----------------------------------------------more 查看大文件(显示查看百分比)
# more /etc/services #回车按上下翻动,空格进行翻页,q退出


----------------------------------------------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行


3.文件管理之:联网下载文件(wget、curl)、文件上传与下载(rz、sz)
----------------------------------------wget、curl联网下载文件----------------------------------------
CentOS 7
yum install wget -y #默认系统最小化安装则没有该命令


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.repo

# 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)#321#g'                    #取行和换顺序
# sed -n '2p' /etc/passwd|sed -r 's#(^.*1:)(.*)(/.*:)(/.*)(/.*)#14325#g'    #取行和后向引用

 

---------------------------------------------------------练习题-------------------------------------------------------

习题:使用ifconfig获取当前的IP地址,使用sedawkgrep取当前服务器的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



原文地址:https://www.cnblogs.com/longren/p/10726063.html