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. 053.Python前端Django框架模板层

    模板层 一 模板语法之变量 在 Django 模板中遍历复杂数据结构的关键是句点字符, 语法: {{ var_name }} [root@node10 mysite]# cat app01/urls. ...

  2. SPI总线 通俗易懂讲解——(转载)

    SPI总线 MOTOROLA公司的SPI总线的基本信号线为3根传输线,即SI.SO.SCK.传输的速率由时钟信号SCK决定,SI为数据输入.SO为数据输出.采用SPI总线的系统如图8-27所示,它包含 ...

  3. Pandas之:Pandas简洁教程

    Pandas之:Pandas简洁教程 目录 简介 对象创建 查看数据 选择数据 loc和iloc 布尔索引 处理缺失数据 合并 分组 简介 pandas是建立在Python编程语言之上的一种快速,强大 ...

  4. PyTorch 图像分类

    PyTorch 图像分类 如何定义神经网络,计算损失值和网络里权重的更新. 应该怎么处理数据? 通常来说,处理图像,文本,语音或者视频数据时,可以使用标准 python 包将数据加载成 numpy 数 ...

  5. Nucleus SE RTOS初始化和启动

    Nucleus SE RTOS初始化和启动 Nucleus SE RTOS initialization and start-up 对于任何类型的操作系统,都有某种类型的启动机制.具体的工作方式因系统 ...

  6. 7, java数据结构和算法: 八皇后问题分析和实现 , 递归回溯

    什么是八皇后问题: 指的是,在一个8 * 8的棋盘中, 放置8个棋子, 保证这8个棋子相互之间, 不在同一行,同一列,同一斜线, 共有多少种摆法? 游戏连接: http://www.4399.com/ ...

  7. 数据结构-几种Tree

    1.二叉查找树 或 二叉排序树 (BST) 性质:左子树的键值小于根的键值,右子树的键值大于根的键值. 2.平衡二叉树(AVL Tree) 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且 ...

  8. oracle审计表迁移

    ============ oracle审计表迁移到新的表空间 ============ 前言 oracle数据库开启审计功能后会占用大量的SYSTEM系统表空间,要么定时对审计表进行清理,要么对系统表 ...

  9. 重新整理 .net core 实践篇—————路由和终结点[二十三]

    前言 简单整理一下路由和终节点. 正文 路由方式主要有两种: 1.路由模板方式 2.RouteAttribute 方式 路由约束: 1.类型约束 2.范围约束 3.正则表达式 4.是否必选 5.自定义 ...

  10. 【NX二次开发】大开眼界,DLL还可以这么调!

    NX二次开发应用程序有交互式.批处理和远程3中模式.交互模式的应用程序(.dll)在NX界面环境下运行.dll以动态链接库的方式被加载到NX的进程空间中.dll可以通过下列几种方式执行. 1.直接激活 ...