2.2.3 head-tail 命令

#------head
#head pass #查看头部内容,默认前10行
#head -n5 pass #查看头部前5行,使用-n指定 #-------tail
#tail pass
# tail -20 /var/log/secure
#tail -f /var/log/messages #-f查看文件尾部的变化
# tailf /var/log/messages # 查看文件尾部的变化

2.2.4 grep 过滤数据

#----------grep过滤文件内容
# grep "^root" pass #匹配以root开头的行
# grep "bash$" pass #匹配以bash结尾的行
# grep -v "ftp" pass #匹配除了包含ftp的内容,其他全部打印
# grep -i "ftp" pass #忽略大小写匹配
# grep -Ei "sync$|ftp" pass #匹配文件中包含sync结尾或ftp字符串 有-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

2.3 文件下载类命令

2.3.1 wget 命令

#CentOS7 系统最小化安装默认没有wget命令,需要进行安装
# yum install wget -y #下载互联网上的文件至本地
#wget http://mirrors.aliyun.com/repo/Centos-7.repo #将阿里云的centos-7.repo下载到/etc/yum.repos.d/并改名为centos-base.repo -O参数指定
#wget -O /etc/yum.repos.d/Centos-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo

2.3.2 curl命令

#仅查看这个url地址的文件内容
#curl http://mirrors.aliyun.com/repo/Centos-
7.repo #将阿里云的centos-7.repo下载到/etc/yum.repos.d/并改
名为CentOS-Base.repo -o参数指定
# curl -o /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo #练习:请下载一个图片至于/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

2.3.3 rz-sz命令

# yum install lrzsz -y #不安装软件则无法执行该命令

# rz	#只能上传文件,不支持上传文件夹,不支持大于4个G上传,也不支持断电续传
#sz /path/file #只能下载文件,不支持下载文件夹

2.4 文件查找类命令

2.4.1 which命令

# which ls		#查找ls命令的绝对路径
# type -a ls #查看命令的绝对路径(包括别名)

2.4.2 whereis 命令

# whereis ls		#查找命令的路径,帮助手册,等
# whereis -b ls #仅显示命令虽在的路径

2.5 字符处理类命令

2.5.1 sort 命令

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

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

2.5.2 uniq命令

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

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

2.5.3 cut命令

cut OPTION... [FILE]...
#选项: -d 指定分隔符 -f 数字,取第几列 -f3,6三列和6列
# -c 按字符取(空格也算)
#echo "Im xlw, is QQ 552408925" >file.txt  #过
滤出文件里 xlw以及552408925
#实现上述题目几种思路
# 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

.2.5.4 wc命令

wc [OPTION]... [FILE]...
# 选项: -l显示文件行数 -c 显示文件字节 -w显示文件单词
# wc -l /etc/fstab   #统计/etc/fstab文件有多少行
# wc -l /etc/services  #统计/etc/services 文件行号 #练习题: 过滤出/etc/passwd以nologin结尾的内容,并统计有多少行 # 扩展统计文件行号的方法
# grep -n ".*" /etc/services | tail -1
# cat -n /etc/services | tail -1
# awk '{print NR $0}' /etc/services | tail -1

2.6 课堂练习题

2.6.1 练习1

  • 分析如下日志,统计每个域名被访问的次数.*
[root@student tmp]# cat web.log
http://www.example.com/index.html
http://www.example.com/1.html
http://post.example.com/index.html
http://mp3.example.com/index.html
http://www.example.com/3.html
http://post.example.com/2.html
# awk -F '/' '{print $3}' web.log|sort -rn|uniq –c
# cut -d / -f3 web.log|sort -rn|uniq –c

2.6.2 练习2

  • 使用awk取出系统ip地址,使用多种方法实现

    • 1.我要取的值在哪里
    • 2.如何缩小取值范围(行)
    • 3.如何精确具体内容(列)

2.6.4练习3

  • 将/etc/sysconfig/selinux文件中的SELINUX=enforcing替换成SELINUX=disabled

2.6.3练习4

  • 将/etc/passwd文件中的第一行中的第一列和最后一列位置进行交换

2.6.4练习5

  • 现在1-100个文件,需要保留75,76,78三个文件,其余全部删除(grep,awk,sed)

03.文件扩展知识

3.1 文件属性

  • 当我们使用 ls -l 列目录下所有文件时,通常会以长格式

    的方式显示,其实长格式显示就是我们 Windows 下看到的

    文件详细信息,我们将其称为文件属性,那整个文件的属

    性分为十列。
[root@oldxu ~]# ls -l ks.cfg
-rw-------. 1 root root 4434 May 30 13:58
ks.cfg -rw-------. ①:第一个字符是文件类型,其他则是权限
1      ②:硬链接次数
root    ③:文件属于哪个用户
root    ④:文件属于哪个组
4434    ⑤:文件大小
May30 13:58 ⑥⑦⑧:最新修改的时间与日期
ks.cfg   ⑨:文件或目录名称

3.2 文件类型

  • 通常我们使用颜色或者后缀名称来区分文件类型,但很多

    时候不是很准确; 后缀只是给人看的
  • 所以我们可以通过 ls -l 以长格式显示一个文件的属性,

    通过第一列的第一个字符来近一步的判断文件具体的类

    型。
[root@oldxu ~]# ll -d /etc/hosts /tmp /bin/ls
/dev/sda /dev/tty1 /etc/grub2.cfg /dev/log
/run/dmeventd-client
-rwxr-xr-x.  1 root root 117656 Jun 30  2016
/bin/ls
srw-rw-rw-.  1 root root    0 Jan 20 10:35
/dev/log
brw-rw----.  1 root disk  8, 0 Jan 20 10:36
/dev/sda
crw--w----.  1 root tty   4, 1 Jan 20 10:36
/dev/tty1
lrwxrwxrwx.  1 root root   22 Jan 13 11:31
/etc/grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--.  1 root root   199 Jan 20 11:03
/etc/hosts
drwxrwxrwt. 61 root root  8192 Jan 21 13:01
/tmp
  • 文件类型说明

    • - 普通文件(文本,二进制压缩,图片,日志等)
    • d 目录文件
    • b 设备文件(块设备)存储设备硬盘/dev/sda,/dev/sr0
    • c 设备文件(字符设备),终端/dev/tty1
    • s 套接字文件,进程与进程间的一种通信方式(socket插座)
    • l 链接文件
  • 但有些情况下,我们无法通过ls -l文件的类型,比如: 一个

    文件,它可能是普通文件、也可能是压缩文件、或者是命

    令文件等,那么此时就需要使用file来更加精准的判断这个

    文件的类型
[root@oldxu ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@oldxu ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64,
version 1 (SYSV), dynamically linked (uses
shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3
c982e06, stripped
[root@oldxu ~]# file /dev/sda
/dev/sda: block special
[root@oldxu ~]# file /dev/tty1
/dev/tty1: character special
[root@oldxu ~]# file /etc/grub2.cfg
/etc/grub2.cfg: broken symbolic link to
`../boot/grub2/grub.cfg
[root@oldxu ~]# file /home
/home: directory
  • linux文件扩展名不代表任何含义,仅为了我们人能更好的识别该文件的类型

3.3 链接文件

3.3.1 Inode与Block

  • 文件有文件名与数据,在Linux上被分成两个部分:数据

    data 与文件元数据 metadata

    • 1.数据 data block ,数据块是用来记录文件真实内容

      的地方,我们将其称为 Block

    • 2.元数据 metadata ,用来记录文件大小、创建时间、

      所有者等信息,我们将其称为 Inode

    • 3.需要注意: Inode 不包含文件名称, inode 仅包含文

      件的元数据信息,具体来说有以下内容:

      • 文件的字节数
      • 文件的 User ID Group ID
      • 文件的读、写、执行权限
      • 文件的时间戳
      • 链接数,即有多少文件名指向这个 inode
      • 文件数据 block 的位置
    • 每个 inode 都是一个编号,操作系统是通过 Inode 来识

      别不同的文件。

      • 对于系统来说,文件名只是 inode 便于识别的别名,或者绰号。(便于我们人识别。)

      • 表面上,用户是通过文件名打开的文件,实际上系统内部这个过程分为如下三步:

        • 首先,系统找到这个文件名对应的 inode 编号
        • 其次,通过 inode 编号,获取 inode 信息
        • 最后,根据 inode 信息,找到文件数据所在的

          block ,读出数据。

3.1.2 软连接

  • 什么是软连接:软链接相当于 Windows 的快捷方式;

  • 软链接实现原理:

    • 1、软链接文件会将 inode 指向源文件的 block
    • 2、当我们访问这个软链接文件时,其实访问的是源文

      件本身;

  • 软连接使用场景

    • 软件升级
    • 代码发布

  • 软链接场景实践
#1.准备网站1.1版本代码
[root@oldxu ~]# mkdir /data/rainbow-v1.1 -p
[root@oldxu ~]# echo "123" > /data/rainbow-
v1.1/index.html #2.创建软链接
[root@oldxu ~]# ln -s /data/rainbow-v1.1/
/data/rainbow
[root@oldxu ~]# ll /data/
drwxr-xr-x. 2 root root  6 3月  5 12:23 dir
lrwxrwxrwx. 1 root root 19 3月  10 12:09 rainbow
-> /data/rainbow-v1.1/
drwxr-xr-x. 2 root root 24 3月  10 12:09
rainbow-v1.1 #3.检查网站程序
[root@oldxu ~]# cat /data/rainbow/index.html
123 #4.新更新一个网站的程序代码
[root@oldxu ~]# mkdir /data/rainbow-v1.2
[root@oldxu ~]# echo "456" > /data/rainbow-
v1.2/index.html #5.升级
[root@oldxu ~]# rm -f /data/rainbow && ln -s
/data/rainbow-v1.2/ /data/rainbow
[root@oldxu ~]# cat /data/rainbow/index.html
456 #6.回退
[root@oldxu ~]# rm -f /data/rainbow && ln -s
/data/rainbow-v1.1/ /data/rainbow
[root@oldxu ~]# cat /data/rainbow/index.html
123

3.1.3 硬链接

  • 硬链接类似于超时有多个门,无论丛哪个门进入,看到的

    内容都是一样的。不会影响进入超市

  • 回到系统中,我们对硬链接的解释: 不同的文件名指向同一

    个 inode ,简单的说就是指向同一个真实的数据源。

  • 硬链接与软链接区别

    • 1)ln命令创建硬链接,ln -s命令创建软链接
    • 2)目录不能创建硬链接,并且硬链接不可以跨越分区

      系统;
    • 3)软链接支持对目录创建,同时也支持跨越分区系

      统;
    • 4)硬链接文件与源文件的inode相同,软链接文件与源

      文件inode不同
    • 5)删除软链接文件,对源文件及硬链接文件无任何影

      响;
    • 6)删除文件的硬链接文件,对源文件及链接文件无任

      何影响;
    • 7)删除链接文件的源文件,对硬链接无影响,会导致

      软链接失效;
    • 8)删除源文件及其硬链接文件,整个文件会被真正的

      删除;

    3.4 文件时间[扩展]

    • linux 下文件有3个时间的,分别是 atime,mtime,ctime
  • 硬链接与软链接区别

    • 1)ln命令创建硬链接,ln -s命令创建软链接
    • 2)目录不能创建硬链接,并且硬链接不可以跨越分区

      系统;
    • 3)软链接支持对目录创建,同时也支持跨越分区系

      统;
    • 4)硬链接文件与源文件的inode相同,软链接文件与源

      文件inode不同
    • 5)删除软链接文件,对源文件及硬链接文件无任何影

      响;
    • 6)删除文件的硬链接文件,对源文件及链接文件无任

      何影响;
    • 7)删除链接文件的源文件,对硬链接无影响,会导致

      软链接失效;
    • 8)删除源文件及其硬链接文件,整个文件会被真正的

      删除;

    3.4 文件时间[扩展]

    • linux 下文件有3个时间的,分别是 atime,mtime,ctime
  • 硬链接与软链接区别

    • 1)ln命令创建硬链接,ln -s命令创建软链接
    • 2)目录不能创建硬链接,并且硬链接不可以跨越分区

      系统;
    • 3)软链接支持对目录创建,同时也支持跨越分区系

      统;
    • 4)硬链接文件与源文件的inode相同,软链接文件与源

      文件inode不同
    • 5)删除软链接文件,对源文件及硬链接文件无任何影

      响;
    • 6)删除文件的硬链接文件,对源文件及链接文件无任

      何影响;
    • 7)删除链接文件的源文件,对硬链接无影响,会导致

      软链接失效;
    • 8)删除源文件及其硬链接文件,整个文件会被真正的

      删除;

    3.4 文件时间[扩展]

    • linux 下文件有3个时间的,分别是 atime,mtime,ctime

      • atime 访问时间 文件中的数据最后被访问的时间
      • mtime 修改时间 文件内容被修改的最后时间
      • ctime 变化时间 文件的元数据发生变化。比如权限,所有者等

3.4.1 环境准备

  • 通过 stat 来查看时间
[root@oldxu ~]# mount -o remount,strictatime /
[root@oldxu ~]# echo "hello boy" >> new_file
[root@oldxu ~]# stat new_file
File: 'new_file'
Size: 10    Blocks: 8     IO
Block: 4096  regular file
Device: fd00h/64768d Inode: 34724341
Links: 1
Access: (0644/-rw-r--r--) Uid: (   0/
root)  Gid: (   0/  root)
Access: 2021-07-07 16:24:02.320233640 +0800
Modify: 2021-07-07 16:24:02.320233640 +0800
Change: 2021-07-07 16:24:02.320233640 +0800
Birth: -

3.4.2 atime

[root@oldxu ~]# cat new_file
hello boy
[root@oldxu ~]# stat new_file
File: 'new_file'
Size: 10    Blocks: 8     IO
Block: 4096  regular file
Device: fd00h/64768d Inode: 34724341
Links: 1
Access: (0644/-rw-r--r--) Uid: (   0/
root)  Gid: (   0/  root)
Access: 2021-07-07 16:24:56.362408139 +0800  
# 访问时间发生变化
Modify: 2021-07-07 16:24:02.320233640 +0800
Change: 2021-07-07 16:24:02.320233640 +0800
Birth: -

3.4.2 mtime

# 写入数据
[root@oldxu ~]# echo "Hello" >> new_file
[root@oldxu ~]# stat new_file
File: 'new_file'
Size: 16    Blocks: 8     IO
Block: 4096  regular file
Device: fd00h/64768d Inode: 34724341
Links: 1
Access: (0644/-rw-r--r--) Uid: (   0/
root)  Gid: (   0/  root)
Access: 2021-07-07 16:28:35.520036828 +0800
Modify: 2021-07-07 16:32:36.806358744 +0800 # 内
容被修改后,mtime会变化
Change: 2021-07-07 16:32:36.806358744 +0800 # 变

Birth: -
# ctime时间发生变化的原因是,内容变化了,innode所记录的
大小也需要变化,所以时间发生了变化

3.4.3 ctime

# 修改文件属性
[root@oldxu ~]# chown adm new_file
[root@oldxu ~]# stat new_file
File: 'new_file'
Size: 16    Blocks: 8     IO
Block: 4096  regular file
Device: fd00h/64768d Inode: 34724341
Links: 1
Access: (0644/-rw-r--r--) Uid: (   3/  
adm)  Gid: (   0/  root)
Access: 2021-07-07 16:28:35.520036828 +0800
Modify: 2021-07-07 16:32:36.806358744 +0800
Change: 2021-07-07 16:36:03.441728857 +0800 # 只
有ctime变化

Linux基础 -03的更多相关文章

  1. Linux基础03

    ** Linux基本操作常用命令(三) ** Linux的软件包 Linux的软件把分为“源码包”和“二进制包” 源码包:免费,开源 二进制包:系统默认包,即RPM包(上一节我们通过rpm卸载过ope ...

  2. Linux基础(03)gdb调试

    1. 安装GDB增强工具 (gef) * GDB的版本大于7.7 * wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.s ...

  3. 还是不想改报告,伊阿忆啊哟-Linux基础继续

    hi 虽然今天是最最美好的周六(前不着工作日后不着工作日),但老子还要来改报告,但额就是不想改,你拿我有啥办法啊... 争取完结Linux基础 一.Linux常用命令(三) 4.帮助命令 4.1 帮助 ...

  4. 原来今天是感恩节-Linux基础继续&MySQL和PHP

    hi 原来今天是感恩节.虽然一直没有过这个节日的习惯,但仅仅是听到感恩的消息,都能想到一幅幅画面.愿大家安好! 下午开题会议还是有所收获,悄悄的,就变向那个不喜欢自己的人了. 一.Linux基础(二) ...

  5. 买错的电影票,含着泪也得看-LAMP搭建&Linux基础

    hi 没说过,上周五室友过生请客,在龙湖里吃嗨了喝爽了,回去的路上侃侃而谈.说好的这周一起去看年内最后的大片,火星救援的,谁知道老子眼神不好,买错了电影的时间...把周六的约定提前到了今儿个下午,ma ...

  6. Linux基础 - 系统优化及常用命令

    目录 Linux基础系统优化及常用命令 Linux基础系统优化 网卡配置文件详解 ifup,ifdown命令 ifconfig命令 ifup,ifdown命令 ip命令 用户管理与文件权限篇 创建普通 ...

  7. Linux基础系统优化及常用命令

    # Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ...

  8. 大数据学习之Linux基础01

    大数据学习之Linux基础 01:Linux简介 linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹 在1991年10月5日首次发布.,在加上用户空间的应用程序之后 ...

  9. Linux基础知识第八讲,系统相关操作命令

    目录 Linux基础知识第八讲,系统相关操作命令 一丶简介命令 2.磁盘信息查看. 3.系统进程 Linux基础知识第八讲,系统相关操作命令 一丶简介命令 时间和日期 date cal 磁盘和目录空间 ...

随机推荐

  1. Docker Swarm(四)Volume 数据(挂载)持久化

    前言 为了获得最佳的性能和可移植性,应该避免将重要数据直接写入容器的可写层,而应使用数据卷或绑定挂载. 可以为集群中的服务创建两种类型的挂载,数据卷挂载(volume mounts)或绑定挂载(bin ...

  2. IT菜鸟之OSI七层模型

    OSI七层模型从下到上分别是: 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 第一层物理层: 物理层是传输媒介(网线.无线.光纤) 在线路中起到的作用:是将0/1转换成电信号或光信号 物 ...

  3. 052.Python前端Django框架路由层和视图层

    一.路由层(URLconf) 1.1 路由层简单配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Dj ...

  4. 搭建 Linux 集群环境

    什么是集群 集群是一组通过网络互联的计算机,集群里的每一台计算机称作一个节点. 搭建集群环境规划 集群主机节点数:4 台安装 CentOS7 的虚拟机 主机名(Hostname) IP 地址 node ...

  5. 5.1-5 uname、hostname、dmesg、stat、du

    5.1 uname:显示系统信息     uname命令用于显示系统相关信息,比如内核版本号.硬件架构等. -a    显示系统所有相关信息 -v    显示内核版本 -m    显示计算机硬件架构 ...

  6. ms5611-01ba03 气压传感器 中英文 数据手册

    中文: https://wenku.baidu.com/view/6f8a861fff00bed5b9f31d53.html 英文: https://wenku.baidu.com/view/fe93 ...

  7. spark算子优化

    一.在聚合前在map端先预聚合 使用reduceByKey/aggregateByKey代替groupByKey 二.一次处理一个分区的数据,不过要注意一个分区里的数据不要太大,不然会报oom * 使 ...

  8. 使用 Flux+Flagger+Istio+Kubernetes 实战 GitOps 云原生渐进式(金丝雀)交付

    在这篇指南中,你将获得使用 Kubernetes 和 Istio 使用 GitOps 进行渐进式交付(Progressive Delivery)的实际经验. 介绍 gitops-istio GitOp ...

  9. Javascript和Typescript语言类型

    静态语言(强类型语言) 静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型. 例如:C++.Java.Delphi.C#等. 动态语言(弱类型语言) 动 ...

  10. Tensor基础实践

    Tensor基础实践 飞桨(PaddlePaddle,以下简称Paddle)和其他深度学习框架一样,使用Tensor来表示数据,在神经网络中传递的数据均为Tensor. Tensor可以将其理解为多维 ...