day5——文件管理命令

文件管理

1、联网下载文件(互联网上下载)wget|curl

wget:联网下载文件 (初始系统都没有wget命令需要后面自己安装)
wget -O:指定下载文件的路径

(1)CentOS7 系统最小化安装默认没有wget命令,需要进行安装
 [root@oldboyedu ~]# yum install wget -y
(2)找到我们需要下载的资源 复制资源的链接地址---->

阿里云、网易、搜狐等都有镜像开源网站

(3)在linux上使用wget命令进行下载(默认下载到当前目录来)
[root@oldboyedu ~]# wget  http://fj.xuliangwei.com/public/weixin.py
(4)使用wget下载资源时,指定保存的位置,并重新命名,-O
[root@oldboyedu ~]# wget -O /opt/wzh.png  http://fj.xuliangwei.com/public/ks.jpeg
(5)下载资源时,如果不想重新命名只想修改保存的路径,请带上原有的名称
[root@oldboyedu ~]# wget -O /opt/ks.jpeg  http://fj.xuliangwei.com/public/ks.jpeg
(6)由于我们下载的是文件,所有我们可以使用cat less more 查看文件
[root@oldboyedu ~]# cat weixin.py

curl:联网下载文件,在线浏览源代码
curl -o:指定下载文件的路径

(1)在线浏览网站资源内容(源代码)
 [root@oldboyedu ~]# curl http://fj.xuliangwei.com/public/weixin.py
(2)使用curl -o将内容保存至本地,并重命名(如果没有指定路径,则存放当前目录)
 [root@oldboyedu ~]# curl -o wei.txt http://fj.xuliangwei.com/public/weixin.py
(3)将资源保存至指定的路径
[root@oldboyedu ~]# curl -o /opt/weixin.py http://fj.xuliangwei.com/public/weixin.py 

PS:通常情况下我们推荐使用wget下载,但由于系统很多时候默认没有安装wget,会偶尔使用一下curl

练习: 使用两种方式下载如下的两个文件
1.wget保存至本地 /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@oldboyedu ~]# wget -O /etc/yum.repos.d/CentOSBase.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.curl保存至本地 /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@oldboyedu ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
3.最后执行一条命令检查 yum makecache


2、本地上传/下载文件

rz:上传文件至Linux服务器
sz:从Linux服务器上下载文件至Windows本地

(1)如果无法将文件直接拖拽进Linux服务器

1.要么没有安装lrzsz ,建议安装 yum install lrzsz -y
2.你上传的是一个空文件

rz :只能上传文件,不支持上传文件夹,不支持大于4G的文件,也不支持断点续传
sz:只能下载文件 (任意单个文件包括压缩包),不支持下载文件夹

3、命令查找

which:查找命令的绝对路径和命令别名
whereis:查找命令的绝对路径和该命令的帮助手册路径

whereis -b:只显示命令的绝对路径
type:显示命令的别名
type -a:显示命令别名和所在路径

(1)查找一个命令的绝对路径 which
当我们想执行一个命令的绝对路径时,先使用which command  查询绝对路径  
[root@oldboy ~]# which ls     #查找ls命令的绝对路径
(2)whereis也使用来查询命令的绝对路径
查找命令的路径、帮助手册
[root@oldboy ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
     # whereis -b ls     //仅显示命令所在的路径
(3)对于内核相关的一些命令,使用which whereis是无法查询到,需要使用type命令查询
查看命令的绝对路径(包括别名)
[root@oldboy ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls

4、文件内容排序

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

在有些情况下,需要对应一个无序的文本文件进行数据的排序,这时 就需要使用sort进行排序了。

(1)首先创建一个文件,写入一些无序的内容
[root@xuliangwei ~]# cat >> file.txt <b:3 
>c:2 
>a:4 
>e:5 
>d:1 
>f:11 
>EOF
(2)使用sort下面对输出的内容进行排序
[root@xuliangwei ~]# sort file.txt 
a:4 
b:3 
c:2 
d:1 
e:5 
f:11
#结果并不是按照数字排序,而是按字母排序
(3)可以使用-t指定分隔符, 使用-k指定需要排序的列
[root@xuliangwei ~]# sort -t ":" -k2 sort.txt             #指定:为分隔符,指定第二列
d:1 
f:11        #第二行为什么是11?不应该按照顺序排列?
c:2
b:3 
a:4 
e:5         
#按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小
(4)如果想要按照数字的方式进行排序, 需要使用 -n参数
[root@xuliangwei ~]# sort -t ":" -n -k2 p.txt 
d:1 
c:2 
b:3 
a:4 
e:5 
f:11

5、文件内容去重

uniq [OPTION]... [INPUT [OUTPUT]]
选项:-c 计算重复的行

如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同 时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq命 令解决这个问题(但是必须配合sort使用)。

(1)创建一个file1.txt文件:
[root@xuliangwei ~]# cat >>file1.txt <abc 
>123 
>abc 
>123 
>EOF 
(2)uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起
[root@xuliangwei ~]# sort file1.txt 
123 
123 
abc 
abc
(3)使用uniq去除相邻重复的行
[root@xuliangwei ~]# sort file.txt |uniq 
123 
abc
(4)uniq -c参数能统计出文件中每行内容重复的次数
[root@xuliangwei ~]# sort file.txt |uniq -c      
2 123      
2 abc
面试题: 请统计分析如下日志,打印出访问最高前10的IP

6、截取字段

cut OPTION... [FILE]...
选项: cut -d 指定分隔符 -f 数字,取第几列 -f3,6三列和6列 -c 按字符取(空格也算)
awk OPTION... [FILE]...
指定格式:awk '{print $2,$5}' :截取第二列和第五列

选项:-F 指定分隔符(awk默认分隔符是空格)

(S2是$2格式不对只能这样)

(1)创建一个file2.txt文件:
[root@oldboyedu ~]# cat >>file2.txt <Im xlw, is QQ 552408925 
>EOF
(2)实现: 筛选出文件里 xlw以及552408925
第一种
[root@oldboyedu ~]# awk '{print $2,$5}' file2.txt | awk -F "," '{print $1,$2}' 
xlw  552408925
第二种
[root@oldboyedu ~]# cut -d " " -f 2,5 file2.txt | awk -F "," '{print $1,$2}' 
xlw  552408925
第三种
[root@oldboyedu ~]# cut -d " " -f 2,5 file2.txt  | sed 's#,##g' 
xlw 552408925      #sed默认格式's###g'    's#,##g' :将,替换成空值
第四种
[root@oldboyedu ~]# sed 's#,##g' file2.txt | awk '{print $2,$5}' 
xlw 552408925
(2)ifconfig|awk '/127/'取ifconfig里面的127关键字
[root@oldboy ~]# ifconfig|awk '/127/'
        inet 127.0.0.1  netmask 255.0.0.0 
(3)用awk获取文件中第三行的倒数第二列字段

NR==3:去到第三行
$(NF-1):NF表示总共有几列,$NF表示一行的倒数最后一列,NF-1:倒数最后一列的前一列

[root@oldboy ~]# awk 'NR==3 {print \$(NF-1)}'

sed替换内容

sed:替换内容 sed默认格式:'s###g'
's#,##g' :将,替换成空值
sed这里的g代表全局替换 不加g仅替换每行第一个出现的字符
sed -i:修改源文件(不加-i只是修改输出结果)
sed -n:静默输出 sed -n 2,5p取2到5行的内容
sed -r:正则,以字段的形式修改
(1)查看该文件全部内容,将匹配到的每一行的第一个"bin"替换成"test".
[root@oldboy ~]# grep -w "bin" passwd |sed 's@bin@test@'  
sed这里的g代表全局替换 不加g仅替换每行第一个出现的字符

PS: 实际生产使用过程中,很少使用到cut,通常都是使用awk,因为awk是取列专业户
习题: 分析如下日志,统计每个域名被访问的次数。


7、统计行号

wc [OPTION]... [FILE]...
选项:-l显示文件行数 -c显示文件单词

wc -l /etc/fstab         统计/etc/fstab文件有多少行 
wc -l /etc/services     统计/etc/services 文件行号
练习题: 过滤出/etc/passwd以nologin结尾的内容,并统计有多少行
1.先筛选出目标的行 2.然后进行统计 
[root@oldboyedu ~]# grep "nologin$" /etc/passwd | wc -l 
18
扩展统计文件行号的方法
[root@oldboyedu ~]# cat -n /etc/services | tail -1
[root@oldboyedu ~]# grep -n ".*" /etc/services  | tail -1

习题: 使用awk取出系统的IP地址,思路如下:
1.我要取的值在哪里 ifconfig ens32
2.如何缩小取值范围(行)
3.如何精确具体内容(列)

[root@student tmp]# cat >> web.log <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
[root@oldboyedu ~]#  cut -d "/" -f 3 web.log | sort | uniq -c | sort -nr 
[root@oldboyedu ~]# awk -F "/" '{print $3}' web.log |sort |uniq -c |sort -nr

先拿到结果,然后提取有关键字那一行,最后使用awk取出那一列

[root@oldboyedu ~]# ifconfig ens32|grep "netmask" | awk '{print $2}' 10.0.0.200
[root@oldboyedu ~]# ifconfig ens32 | awk '/netmask/' | awk '{print $2}' 10.0.0.200
[root@oldboyedu ~]# ifconfig ens32 | awk '/netmask/ {print $2}' 10.0.0.200

习题:分析如下日志,请提取出访问次数É高的TOP10IP地址
习题: 将/etc/passwd文件中的第一行中的第一列和É后一列位置进行 交换。
习题: 将/etc/sysconfig/selinux 文件中的SELINUX=enforcing替换成 SELINUX=disabled

你可能感兴趣的:(day5——文件管理命令)