Linux-6 三剑客命令

Linux-6 三剑客命令

  • awk(取列)

    将系统的IP地址打印出来

    [root@destiny ~]# yum install net-tools -y
    #分析:
    	#1.肯定是需要拿到IP地址,仅看某一个特定的网卡;ifconfig
    	#2.先想办法过滤出数据的那一行; ###行
    	#3.然后掐头去尾,取中间;	###列
    
    image-20221223181440622
    [root@destiny ~]# ifconfig ens32 | grep "inet"
            inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
            inet6 fe80::b511:c46f:6799:880  prefixlen 64  scopeid 0x20<link>
    [root@destiny ~]# ifconfig ens32 | grep "inet "
            inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
    [root@destiny ~]# ifconfig ens32 | grep "inet " | awk '{print $2}'
    10.0.0.100
    
    #纯awk方法:
    [root@destiny ~]# ifconfig ens32 | awk 'NR==2'
            inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
    [root@destiny ~]# ifconfig ens32 | awk 'NR==2' | awk '{print $2}'
    10.0.0.100
    [root@destiny ~]# ifconfig ens32 | awk 'NR==2 {print $2}'
    10.0.0.100
    
    #grep 过滤行级别;
    #awk 过滤列级别;
    
    #练习:打印 /etc/passwd 中 用户名称,以及用户的UID;第一列和第三列,需要以:为分隔符;
    	#默认awk是以空格作为分隔符
    	#如何自行指定字段分隔符	-F ':'
    [root@destiny ~]# awk -F ':' '{print $1,$3}' /etc/passwd
    
  • grep命令

    • #————grep 过滤文件内容
      [root@destiny ~]# grep "root" /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      operator:x:11:0:operator:/root:/sbin/nologin
      
      #过滤以root开头的
      [root@destiny ~]# grep "^root" /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      
      #过滤以/bin/bash结尾的
      [root@destiny ~]# grep "/bin/bash$" /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      
      # -i 不区分大小写
      [root@destiny ~]# grep -i "root" /etc/passwd
      # -v 除了包含关键字的不要,别的都要;取反
      [root@destiny ~]# grep -v "root" /etc/passwd
      
      #包含多个关键字
      [root@destiny ~]# egrep "root|sshd" /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      operator:x:11:0:operator:/root:/sbin/nologin
      sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
      [root@destiny ~]# grep -E "root|sshd" /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      operator:x:11:0:operator:/root:/sbin/nologin
      sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
      
      #匹配文件中包含/bin/bash结尾或root字符串的
      [root@destiny ~]# grep -Ei "/bin/bash$|root" /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      operator:x:11:0:operator:/root:/sbin/nologin
      # -n 取行号
      [root@destiny ~]# grep -n "." /etc/passwd
      # .在grep中表示任意单个字符;即所有
      
      # grep -n -A 2 "Failed" /var/log/secure  #匹配/var/log/secure文件中Failed字符串,并打印它的下2行
      [root@destiny ~]# grep -n -A 2 "/bin/bash$" /etc/passwd
      1:root:x:0:0:root:/root:/bin/bash
      2-bin:x:1:1:bin:/bin:/sbin/nologin
      3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
      # grep -n -B 2 "Failed" /var/log/secure  #匹配/var/log/secure文件中Failed字符串,并打印它的上2行
      [root@destiny ~]# grep -n -B 2 "adm" /etc/passwd
      2-bin:x:1:1:bin:/bin:/sbin/nologin
      3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
      4:adm:x:3:4:adm:/var/adm:/sbin/nologin
      # grep -n -C 2 "Failed" /var/log/secure  #匹配/var/log/secure文件中Failed字符串,并打印它的上下2行
      [root@destiny ~]# grep -n -C 2 "adm" /etc/passwd
      2-bin:x:1:1:bin:/bin:/sbin/nologin
      3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
      4:adm:x:3:4:adm:/var/adm:/sbin/nologin
      5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
      6-sync:x:5:0:sync:/sbin:/bin/sync
      
  • sed替换

    • # 把/etc/selinux/config里的enforcing替换成disabled
      [root@destiny ~]# sed 's#enforcing#disabled#g' /etc/selinux/config
      # s表示开始,g代表全局
      #默认情况下,sed的替换不会修改文件的本身;
      #只有在添加 -i 的情况下,才会真的替换
      [root@destiny ~]# sed -i 's#enforcing#disabled#g' /etc/selinux/config
      
      #明确替换某一行的内容,例如第8行
      [root@destiny ~]# sed '8s#enforcing#disabled#g' /etc/selinux/config
      #指明替换某一行就替换某一行,不指明就是全局
      
      #高级一点
      	#-n 指的是取消默认的输出
      [root@destiny ~]# ifconfig ens32
      ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
              inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
              inet6 fe80::b511:c46f:6799:880  prefixlen 64  scopeid 0x20<link>
              ether 00:0c:29:81:8e:7b  txqueuelen 1000  (Ethernet)
              RX packets 1970  bytes 148837 (145.3 KiB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 803  bytes 99898 (97.5 KiB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      [root@destiny ~]# ifconfig ens32 | sed '2p'
      ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
              inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
              inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
              inet6 fe80::b511:c46f:6799:880  prefixlen 64  scopeid 0x20<link>
              ether 00:0c:29:81:8e:7b  txqueuelen 1000  (Ethernet)
              RX packets 2014  bytes 152549 (148.9 KiB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 827  bytes 103682 (101.2 KiB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      [root@destiny ~]# ifconfig ens32 | sed -n '2p'
              inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
      
      #纯sed方法实现获取ens32中的ip地址
      [root@destiny ~]# ifconfig ens32
      ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
              inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
              inet6 fe80::b511:c46f:6799:880  prefixlen 64  scopeid 0x20<link>
              ether 00:0c:29:81:8e:7b  txqueuelen 1000  (Ethernet)
              RX packets 2232  bytes 168202 (164.2 KiB)
              RX errors 0  dropped 0  overruns 0  frame 0
              TX packets 868  bytes 108030 (105.4 KiB)
              TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      #分析:
      	#1.先拿到关键字的行;(缩小范围)
      	[root@destiny ~]# ifconfig ens32 | sed -n '2p'
              inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
      	#2.掐头去尾留中间
      	[root@destiny ~]# ifconfig ens32 | sed -n '2p' | sed -r 's#(^.*et) (.*) (net.*$)# \2 #g'
       10.0.0.100  
      #第一个括号匹配到前面的所有内容
       	#.表示任意单个字符  *表示重复前面字符0次或多次 
       	# ^.*et 表示以任意单个字符开始,重复一次或多次,然后当碰到et后终止匹配
      #第二个括号要匹配到需要的内容
      	#.表示任意单个字符  *表示重复前面字符0次或多次 
      #第三个括号匹配到结尾
      	# net.*$表示net后的字符直到结尾
      #三个括号间的空格加不加都可以
      # \2 表示引用第2个括号的内容
      

      image-20221230174521290

      #使用grep结合awk方法实现获取ens32中的ip地址
      [root@destiny ~]# ifconfig ens32 | grep "netmask" | awk '{print $2}'
      10.0.0.100
      #使用grep结合sed方法实现获取ens32中的ip地址
      [root@destiny ~]# ifconfig ens32 | grep "netmask" | sed -r 's#(^.*et) (.*) (net.*$)# \2 #g'
       10.0.0.100  
      #使用纯awk方法实现获取ens32中的ip地址
      [root@destiny ~]# ifconfig ens32 | awk 'NR==2 {print $2}'
      10.0.0.100
      
  • 文件类型

    • Linux一切皆文件;文件是否需要区分类型?

    • [root@destiny ~]# ll -d /etc/hosts /tmp /bin/ls /dev/sda /dev/ttyl /etc/grub2.cfg /dev/log /run/dmeventd-client
      -rwxr-xr-x.  1 root root 117608 Aug 20  2019 /bin/ls
      srw-rw-rw-.  1 root root      0 Dec 31 08:11 /dev/log
      brw-rw----.  1 root disk   8, 0 Dec 31 08:11 /dev/sda
      crw--w----.	 1 root tty    4, 1 Dec 31 08:11 /dev/ttyl
      lrwxrwxrwx.  1 root root     22 Dec  6 16:55 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
      -rw-r--r--.  1 root root    158 Jun  7  2013 /etc/hosts
      prw-------.  1 root root      0 Dec 31 08:11 /run/dmeventd-client
      drwxrwxrwt. 52 root root   4096 Dec 31 08:12 /tmp
      
      #说明
      -	#普通文件(文本,二进制,压缩,图片,日志等)
      	#实际情况,大家都会遵循一定的规范来进行文件的命名
      	#比如:视频文件:xx.mp4
      	#脚本文件:xx.sh   xx.pu
      	#如果不遵循命名的后缀规范,可以使用file查询这个文件究竟是什么类型;
      [root@destiny ~]# file file.txt
      file.txt: ASCII text
      
      d	#目录文件
      b	#设备文件(块设备)存储设备 硬盘,U盘,SD卡 /dev/sda,
      c	#设备文件(字符设备) 键盘,终端 /dev/ttyl
      s	#套接字文件,进程与进程之间的一种通信方式(socket)
      	#同一台服务器,两个不同的进程,需要相互调用时,可以走socket协议;不同服务器中,要走网络协议,例如TCP,不能走socket协议;
      l	#链接文件;通常是软链接;在Windows系统中叫做快捷方式;
      
  • 文件属性

    [root@destiny ~]# ll
    total 86820
    -rw-r--r--. 1 root root 16955 Mar  6 16:58 access_log
    
    #总共九列:
    -rw-r--r--	# 第一列:权限(权限管理)
    1			# 第二列:硬链接数
    root		# 第三列:文件的拥有人;(用户管理)
    root		# 第四列:文件的拥有组;(用户管理)
    16955		# 第五列:文件的大小
    Mar  6 16:58# 第六七八列:文件的时间;修改时间;
    access_log	# 第九列:文件名称;
    
    #
    
  • 文件链接

    • 文件存储

      • 文件有文件名和数据,在Linux上被分成两个部分:数据(data)与文件元数据(metadata)。

        1. 数据(data block),也叫Block,数据块是用来记录文件真实内容的地方,我们也将其称为Block;
        2. 元数据(metadata),也叫inode,用来记录文件大小,创建时间,所有者等信息。需要注意:inode并不包含文件名称;
      • inode包含文件的元信息,具体来说有以下内容:

        • 文件的字节数
        • 文件的User ID Group ID
        • 文件的读,写,执行权限
        • 文件的时间戳
        • 链接数,即有多少文件名指向这个inode
        • 文件数据block的位置
      • 每个inode都有一个编号,我们的Linux系统是通过inode来识别文件的。对于系统来说,文件名指示inode编号的一个别名,或者绰号,(便于我们人识别)。表面上,用户是通过文件名打开的文件;实际上,系统用内部这个过程分为三步:

        1. 首先,系统找到这个文件名对应的inodde编号
        2. 其次,通过inode编号,获取inode信息
        3. 最后,根据inode信息,找到文件数据所在的block,读出数据
      • 真正存储文件时,会将文件名称——映射到对应的Inode值——保存文件的权限,创建时间,属性等信息——文件存储的内容在磁盘的哪个block上;

      • 读取时,文件名称——inode编号——获取block存储的位置——从磁盘中拿到数据

      • 为什么cd.是当前目录,而cd…是上级目录?

        • [root@destiny ~]# ll -a -i
          33574977 dr-xr-x---.  2 root root  189 Dec 23 17:09 .
                64 dr-xr-xr-x. 19 root root  250 Dec 22 16:02 ..
          [root@destiny ~]# ll -d /root -i
          33574977 dr-xr-x---. 2 root root 189 Dec 23 17:09 /root
          #.和/root使用的是同一个inode,而.和/root只是别名
          
          [root@destiny ~]# cd /usr/local/
          [root@destiny local]# ll -d -i /usr/
          33630947 drwxr-xr-x. 13 root root 155 Dec  6 16:54 /usr/
          [root@destiny local]# ll -a -i
          total 0
          50332074 drwxr-xr-x. 12 root root 131 Dec  6 16:54 .
          33630947 drwxr-xr-x. 13 root root 155 Dec  6 16:54 ..
          
          #.和当前目录的Inode是一样的
          #..和上一级目录的Inode是一样的
          #.和..在你创建一个文件的时候,系统默认就有了
          
    • 软链接(soft link)

      • 软链接相当于Windows系统的快捷方式,软连接文件会将inode指向源文件block,当我们访问这个软链接文件时,其实访问的是源文件本身。

      • image-20221231093357006

      • [root@destiny ~]# ln -s file2.txt file3.txt
        [root@destiny ~]# ll
        total 16
        -rw-r--r--. 1 root root   20 Dec 23 17:09 file2.txt
        lrwxrwxrwx. 1 root root    9 Dec 31 09:43 file3.txt -> file2.txt
        -rw-r--r--. 1 root root   25 Dec 23 16:31 file.txt
        [root@destiny ~]# ll -i file2.txt file3.txt
        33579966 -rw-r--r--. 1 root root 20 Dec 23 17:09 file2.txt
        34281383 lrwxrwxrwx. 1 root root  9 Dec 31 09:43 file3.txt -> file2.txt
        [root@destiny ~]# cat file2.txt
        abc
        123
        abc
        123
        456
        [root@destiny ~]# cat file3.txt
        abc
        123
        abc
        123
        456
        [root@destiny ~]# rm -f file2.txt
        [root@destiny ~]# cat file3.txt
        cat: file3.txt: No such file or directory
        
      • 软链接其实就是建立一个快捷方式

        • 源文件本身——Inode——Block
        • 软链接——Inode与源文件不一样,但是指向的Block是同一个
        • 创建软链接的方式:ln -s 源文件 链接文件;
      • 软链接的使用场景:

        1. 代码发布时;
        2. 版本升级时
        • /data/qq
          • /data/qq-v1.1
          • /data/qq-v1.2
      • 软链接实战

        #1.准备网站1.1版本代码
        [root@destiny ~]# mkdir /data/rainbow-v1.1 -p
        [root@destiny ~]# echo "123" > /data/rainbow-v1.1/index.html
        #2.创建软链接
        [root@destiny ~]# ln -s /data/rainbow-v1.1/ /data/raionbow
        [root@destiny ~]# ll /data/
        #3.检查网站程序
        [root@destiny ~]# cat /data/rainbow/index.html
        123
        #4.新更新一个网站的程序代码
        [root@destiny ~]# mkdir /data/rainbow-v1.2
        [root@destiny ~]# echo "456" > /data/rainbow-v1.2/index.html
        #5.升级
        [root@destiny ~]# rm -f /data/rainbow &&ln -s /data/rainbow-v1.2/ /data/rainbow
        [root@destiny ~]# cat /data/rainbow/index.html
        456
        #6.退回
        [root@destiny ~]# rm -f /data/rainbow &&ln -s /data/rainbow-v1.1/ /data/rainbow
        [root@destiny ~]# cat /data/rainbow/index.html
        123
        
    • 硬链接(hard link)

      • 硬链接类似于超市有多个门,无论从哪个门进入,看到的内容都是一样的。如果关掉一扇门,那影响进入超市?回到系统中,我们对硬链接的解释,不同的文件名指向同一个inode,简单地说,就是指向同一个真实的数据。
      • image-20221231102503071
      • 硬链接与软链接的区别:
        1. ln命令创建硬链接, ln -s创建软链接
        2. 目录不能创建硬链接,并且硬链接不可以跨越分区系统
        3. 目录软链接特别常用,并且软链接支持跨域分区系统
        4. 硬链接文件与源文件inode相同,软链接文件与源文件inode不相同
        5. 删除软链接文件,对源文件及硬链接文件无任何影响
        6. 删除文件的硬链接文件,对源文件及链接文件无任何影响
        7. 删除链接文件的源文件,对硬链接无影响,会导致软链接失效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游子无寒衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值