Linux 个人笔记整理

参考:

  • bilibili – 【小白入门 通俗易懂】2021韩顺平 一周学会Linux
  • bilibili – 史上最牛的Linux视频教程—兄弟连

Linux发展史

第零章 前言

实际上内存是把 8 个 bit 排成 1 组, 每 1 组称为 1 个单位, 大小是 1 byte(字节), cpu 每一次只能访问 1 个 byte, 而不能单独去访问具体的 1 个小格子(bit)。1 个 byte 字节就是内存的最小的 IO 单位。

CPU 的寻址能力以字节为单位,则 32 位寻址的 CPU 可以寻址 2 的 32 次方大小的地址也就是 4GB。

因为 32 位系统说的是寻址范围(查找内存地址的范围)是 32 位,如果是 8 位系统,它的寻址范围就是 2 的 8 次方,他的寻址范围是 256,也就是说有 256 个内存地址,每个地址里又有 8 位空间,因此 256 个地址X8位空间=2048bit(位)=2048bit/8=256Byte。

16 位系统寻址范围就是 2 的 16 次方,有 65536 个内存地址,65536个地址X8位空间=524228bit(位)=65536Byte/1024=64M。

32 位系统寻址范围就是 2 的 32 次方,有 4294967296 个内存地址,4294967296个地址X8位空间=34359738368bit(位)/8=4294967296Byte/1024=4194304KB/1024=4096MB/1024=4G。

这样就得出了 32 位系统最高支持 4GB 内存。

第一章 基础知识

  • UNIX 诞生于 20 世纪 60 年代末(1969年),Windows 诞生于 20 世纪 80 年代中期(1985年),Linux 诞生于 20 世纪 90 年代初(1991年)。
  • UNIX 操作系统由肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)发明。
  • 1971—1972 年,肯·汤普森的同事丹尼斯·里奇发明了传说中的 C 语言(1983 年 C++ 诞生)。到了 1973 年,UNIX 系统的绝大部分源代码都用 C 语言进行了重写,这为提高 UNIX 系统的可移植性打下了基础(之前操作系统多采用汇编语言,对硬件依赖性强),也为提高系统软件的开发效率创造了条件。
  • Linux 内核最初是由李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学读书时出于个人爱好而编写的,当时他觉得教学用的迷你版 UNIX 操作系统 Minix 太难用了,于是决定自己开发一个操作系统。第一个版本于 1991 年 9 月发布,当时仅有 10000 行代码。
  • UNIX 是 Linux 的父亲。
  • 底层是 UNIX/Linux 操作系统,一般称之为系统内核(Kernel);中间层是 Shell 层,即命令解释层;高层则是应用层。
  • 内核指的是一个提供设备驱动、文件系统、进程管理、网络通信等功能的系统软件,但一个内核并不是一套完整的操作系统,它只是操作系统的核心。
  • Linux 一切内容皆文件,包括硬件、用户等,与 win 不同。文件格式用文件权限区分,与后缀没关系。
  • 硬盘可以分为机械硬盘(Hard Disk Drive, HDD)和固态硬盘(Solid State Disk, SSD),机械硬盘采用磁性碟片来存储数据,而固态硬盘是通过闪存颗粒来存储数据的。
  • VMware 提供的网络连接有 5 种,分别是“桥接模式”、“NAT 模式”、“仅主机模式”、“自定义”和“LAN 区段”。
    • 桥接模式下,虚拟机和宿主机相当于一个网络中的两台计算机,虚拟机会占用主机 IP 段地址,能与主机通信,也能与局域网电脑通信,能上网;(双向通信)
    • NAT 模式下(网络地址转换 Network Address Transform),使用虚拟网卡 VMnet8 虚拟出其他网段的 IP,虚拟机能上网,能与主机通信,不能与局域网电脑通信; RFC 1918 为私有网络预留出了三个 IP 地址块,如下:
      A 类:10.0.0.0~10.255.255.255
      B 类:172.16.0.0~172.31.255.255
      C 类:192.168.0.0~192.168.255.255
    • Host-only 模式下,使用虚拟网卡 VMnet1,虚拟机不能上网 不能连接局域网,能与主机通信。(与主机共享的专用网络)
网络模式主机通信上网局域网通信
桥接
NAT不能
Host-only不能不能

在这里插入图片描述

第二章 Linux 常用命令

  • 命令基本格式: 命令 [选项] [参数]
  • ls — list
ls -t # 以时间排序
ls -S # 以文件大小排序
ls -R # 列出所有子目录下文件
ls -d # 显示目录信息,而不是目录下的文件
  • tree 应用于文件的查找, -f 打印全路径。 tree /opt/robot_install/share/ -f | grep local_costmap

  • date linux 系统日期时间指令

    date -s @1571027918.545778284 # date -r 1571027918 # mac
    date -d "2018-11-14 14:30:30" +%s # date -j -f %Y-%m-%d:%H:%M:%S 2019-10-14:12:38:38 +%s # mac
    
    -d <字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
    -s <字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
    -u:显示GMT;
    
    %s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
    %d 日期(以01-31来表示)。
    ------------ # mac date option
    -j:使用-j才能使用-f
    -r:秒转换时间
    -f:根据格式调整时间
    
  • stat 显示文件或文件系统的详细信息。 可以看到文件的访问时间、数据修改时间、状态修改时间。

    $ stat lyz.md
      File: 'lyz.md'
      Size: 2521      	Blocks: 8          IO Block: 4096   regular file
    Device: 805h/2053d	Inode: 30334879    Links: 1
    Access: (0664/-rw-rw-r--)  Uid: ( 1000/     lyz)   Gid: ( 1000/     lyz)
    Access: 2022-03-07 09:27:54.174829230 +0800
    Modify: 2020-03-03 20:39:13.908614804 +0800
    Change: 2020-03-03 20:39:14.100616933 +0800
     Birth: -
    
  • ln 命令用来为文件创建链接,链接类型分为硬链接和软链接(符号链接)两种。

    -b  删除,覆盖以前建立的链接
    -d  创建指向目录的硬链接(只适用于超级用户)
    -f  强制执行,操作前不询问
    -i  交互模式,文件存在则提示用户是否覆盖
    -n  把符号链接视为一般目录
    **-s  软链接(符号链接)**
    -v  显示详细的处理过程
    
    • 硬链接特征 ln [原文件] [目标文件]
      硬链接与原文件拥有相同的 i 节点。
      无法建立跨分区链接。
      通过 i 节点识别链接文件,与文件名无关。
      无法链接目录,只能链接文件。
      不建议创建硬链接文件,文件太过隐蔽,除了 i 节点标识之外,很难区分硬链接。
      当删除原文件或硬链接文件的任何一文件,不影响文件索引操作。
      硬链接创建后,引用计数 +1。

      -rw-r--r--  2 lyz  staff   119B  2 13 20:39 h
      -rw-r--r--  2 lyz  staff   119B  2 13 20:39 h.hard
      lrwxr-xr-x  1 lyz  staff     1B  3 11 09:21 h.soft -> h
      
    • 软链接特征 ln -s [原文件] [目标文件]

      # soft link
      ln -s h h.soft  # 创建软链接,如果原文件不用绝对路径的话,必须软链接与原文件在同一目录
      ln -s h ver/h.soft # 错误创建方式,软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求)
      ln -s /Users/lyz/h ver/h.soft # 正确创建方式
      
      # hard link
      ln h h.hard # 硬链接没有绝对路径一说
      

      类似于 Windows 快捷方式
      软链接拥有自己的 i 节点和 block 块,但是数据块中只保存原文件的文件名和 i节点号,并没有实际的文件数据。(拥有自己的分区表中索引数据,通过索引找到分区表中文件的目标索引数据,再通过目标索引数据,查找数据)
      lrwxrwxrwx l软链接, 软链接文件权限都为 rwxrwxrwx,虽然权限显示为 777,但实际权限需要看原文件权限。
      修改任意文件,另一个都改变。
      删除原文件,软链接不能使用。
      创建软链接,原文件一定要写绝对路径。否则,软链接会到它所在的同一目录去找原文件。

    • 删除文件名不影响硬链接与文件的使用,但软链接却无法继续使用。无论是修改软链接源文件还是链接文件、硬链接源文件还是链接文件,两边文件均会同步修改。

  • clear 清除屏幕信息 ctrl+l

  • uname 显示操作系统的相关信息

    **-a # 显示操作系统全部信息**
    -m # 显示系统硬件架构 CPU类型,是32位还是64位系统
    -n # 显示操作系统主机名
    -s # 显示操作系统类型
    **-r # 显示操作系统内核版本**
    
  • hostname 显示或设置系统的主机名。许多网络程序均用主机名来标识主机,若没有设置好主机名,则可能会导致网络服务不正常。

    hostname
    hostname -I # **显示主机的所有IP地址,不依赖DNS解析,速度较快** IP地址 192.168.10.10 172.16.179.121
    hostname AAA # 临时修改主机名为AAA,重启失效
    vim /etc/hostname # 永久修改主机名
    
  • dmesg 开机时内核检测信息 (查询 usb 或者串口号 dmesg | grep ttyUSB

  • cat /proc/cpuinfo 查看 cpu 信息, proc 是内存信息目录 cat /proc/version

  • uptime 系统启动时间和平均负载,也就是 top 命令第一行, w 命令也可以看到这个数据。

  • who -b 查看系统启动时间

  • last 列出目前与过去登入系统的用户相关信息。 last reboot 最后重启时间 last | head
    last -x reboot 查看重启时间
    last -x shutdown 查看关机时间

  • chkconfig --list查看服务自启动状态

  • free 显示系统内存状态。 free -m 以 MB 为单位显示内存使用情况

  • ps 显示系统进程在瞬间的运行状态。常用 ps auxps -ef。ef 方式不如 aux 显示的多

  • top 提供了对系统处理器状态的实时监控。 htop

  • more 读取文本文件。按 Enter 键,会接着再显示文本的一行;按空格键,会继续显示文本文件的另一屏信息。

  • diff 比较文件差异 diff file1 file2 -c 显示全部内容,并标出不同之处

  • split 分割文档; split -b 10M test.log # 将 log 分割为多个 10M 的文件

  • df 检查 Linux 系统的磁盘空间占用情况

    **-h 以容易理解的格式输出文件系统分区占用情况 KB MB GB**
    -k 以KB大小为单位显示
    -m 以MB
    -i 输出文件系统的inode信息
    -T 显示磁盘分区的文件系统类型
    
  • du 用来显示文件和所占用的磁盘空间情况 du -sh ~/ttt

  • 帮助命令 man
    查看命令拥有哪个级别的帮助 man -f 命令 相当于 whatis 命令

    man -f passwd  有两个级别:1和5
    man 1 passwd  查看1级别的passwd帮助
    man 5 passwd  查看5级别的passwd帮助
    whereis passwd 配置文件
    

    在这里插入图片描述

  • 搜索命令

    • 文件搜索 locate
      在后台数据库中搜索,搜索速度快。
      搜索后台数据库 /var/lib/mlocate
      数据库正常一天更新一次,sudo updatedb 强制更新数据库。
      /etc/updatedb.conf 设置指定的不搜索路径是否生效。

    • 文件搜索 find
      find / -name hh 文件名搜索 文件名区分大小写, find / -iname hh 文件名不区分大小写
      find / -mtime 2 查找 2 天内修改的文件
      find / -mtime -2 查找 2 天前修改的文件
      find / -size +20M 查找大于 20M 的文件
      find /etc -size +20k -a -size -50k 查找 /etc 目录下,大于 20KB 并且小于 50KB 的文件, -a and 逻辑与,两个条件都满足; -o or 逻辑或,两个条件满足一个即可
      find /etc -size +20k -a -size -50k -exec ls -lh {} \; 查找 /etc 目录下,大于 20KB 小于 50KB 的文件,并显示详细信息; -exec/-ok 命令 {} \; 对搜索结果执行操作。

    • 命令搜索 whereis which
      whereis 只能搜索系统命令,不能搜索普通文件。可显示帮助文件。 whereis -b ls whatis ls whoami
      which 搜索系统命令,系统设置的别名。 which ls
      whereis 命令可以在查找到二进制命令的同时,查找到帮助文档的位置;而 which 命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令。
      shell 自带的命令 whereis 和 which 是无法搜索到的。 whereis cd which cd
      系统搜索命令的路径 echo $PATH

    • 字符串搜索 grep grep [选项] 字符串 文件名 在文件中匹配符合条件的字符串 -i 忽略大小写 -v 排除指定字符串。

    • find 与 grep 区别
      find 命令在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配;
      grep 命令在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式是包含匹配。

    • 一般我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻!因为 whereis 只找系统中某些特定目录底下的文件而已,locate 则是利用数据库来搜寻文件名,当然两者就相当的快速, 并且没有实际的搜寻硬盘内的文件系统状态,比较省时间啦!

    • whereis 主要是针对 /bin /sbin 底下的执行档, 以及 /usr/share/man 底下的 man page 文件,跟几个比较特定的目录来处理而已。所以速度当然快的多!

    • locate 这个东西还是有使用上的限制呦!为什么呢?你会发现使用 locate 来寻找数据的时候特别的快, 这是因为 locate 寻找的数据是由『已建立的数据库 /var/lib/mlocate/』 里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据。更新数据库 sudo updatedb

  • 配置临时 IP 地址: ifconfig eth0 192.168.XX.101
    ifdown/ifup eth0

  • ping 3 次 ping -c 3 192.168.10.10

第三章 Vim 实用技巧

  • VI: Visual Interface 可视化接口

  • normal 模式下 n<Enter>将光标从当前位置向下移动 n 行

    . : 执行上一次操作(dd .    x .)
    **块操作 + >/< : 执行左右缩进**
    = : 自动缩进
    **>> : 缩进当前行**
    > + G :增加从当前行到文档末尾的缩进层级
    每行行尾添加符号: A;<Esc> 然后每行行内进行 j.
    按 db 命令删除从光标起始位置到单词开头的内容
    **<C-n> + <C-p> 前后调整自动补全列表的匹配项**
    <C-y> + <C-e> 确认 与 退出
    
  • C 用于删除光标右边的文字(直到行尾),然后进入插入模式。 等同于 d$i
    cc 或 S 用于删除当前行的内容,然后进入插入模式,但会保留缩进。 ddi
    s 用于删除单个字符(如果前面加了数字,则会删除多个字符),然后进入插入模式。 xi

  • 如果之前已经打开过 Vim,则可以用如下命令加载一个文件可以使用 edit 保存 write(别忘了命令后面要按Enter键) :e lyz.py 另存为 :w hello.py退出当前缓冲区 :bd ,关闭除当前窗口之外的所有窗口 :on

  • ci" : 删除 内文本; ci> 删除 <>中文本

  • vimrc 文件位置 — 打开 vim,:echo MYVIMRC

  • 在段落间向前移动的命令是结束大括号 } ,向后移动的命令是开始大括号 {;命令前加数字,跳过多个段落 3>

  • Shift+(Shift+) 分别将光标移动到句子的开头和结尾。

  • c 修改命令,执行完后进入 insert 模式。 cc 删除整行,并带缩进的进入 insert 模式。
    在这里插入图片描述

  • 通过组合 :split:vsplit ,可以生成任意多个窗口;
    在不同窗口间移动, ctrl+w,hjkl 方向键切换窗口;
    窗口向下: ctrl+w,j
    窗口向上: ctrl+w,k

  • 代码折叠打开

    • zo--zc 打开/关闭当前折叠
    • za 切换折叠状态
    • zR--zM 用于同时打开和关闭所有折叠
      在这里插入图片描述

第四章 Linux 的文件权限和目录配置

  • ls -l

    -rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc 
    0-9 位说明
    第 0 位确定文件类型(d, - , l , c , b)
    	**l 是链接,相当于 windows 的快捷方式**
    	**d 是目录,相当于 windows 的文件夹**
    	**c 是字符设备文件,鼠标,键盘**
    	**b 是块设备,比如硬盘**
    第 1-3 位确定**所有者**(该文件的所有者)拥有该文件的权限。---User
    第 4-6 位确定**所属组**(同用户组的)拥有该文件的权限,---Group
    第 7-9 位确定**其他用户**拥有该文件的权限 ---Other
    
  • rwx 作用到文件

    • [ r ]代表可读(read):可以读取,查看
    • [ w ]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
    • [ x ]代表可执行(execute):可以被执行
  • rwx 作用到目录

    • [ r ]代表可读(read):可以读取,ls 查看目录内容
    • [ w ]代表可写(write):可以修改,对目录内创建+删除+重命名目录
    • [ x ]代表可执行(execute):可以进入该目录

在这里插入图片描述
在这里插入图片描述
r=4 w=2 x=1,可理解为二进制 111 对应 rwx

第五章 用户和用户组管理

  • 添加用户 useradd jt
  • 设置用户密码 passwd jt
  • 添加用户组 groupadd user
  • 删除用户组 groupdel user
  • 添加用户到组里 gpasswd -a jt user groupadd wudang useradd -g {groupname} {username}:指定组
  • 修改用户组(从 wudang 修改到 mojiao) groupadd mojiao usermod -g mojiao zwj usermod -g 用户组 用户名
  • chgrp 组名 文件名 修改文件所在的组 或者同时修改 用户名和用户组 chown user_name:group_name file 递归修改添加 -R 选项
   passwd # 修改当前用户密码
   useradd lyz # 添加lyz用户
   passwd lyz # 为lyz添加密码
   su lyz1 # 切换用户 不切换目录  su -- switch user
   su - lyz1 # 切换用户并切换目录到home下
   w # 显示已登录用户信息
   who # 显示已登录用户信息以及系统的启动时间
   users # 显示已登录用户
   whoami # 显示当前登录的用户名
   who am i # 显示当前登录的用户名、时间、IP;lyz      pts/2        2023-02-28 15:35 (172.16.176.214)
   userdel lyz # 仅删除用户 保留家目录
   userdel -r lyz # 删除用户的同时删除家目录
   id lyz # 查询用户信息
  • Linux 中用户登陆查看命令
    • w 查看登陆用户信息
      在这里插入图片描述
    • who
      在这里插入图片描述
    • last 查询当前登录和过去登录的用户信息
      在这里插入图片描述
  • lastlog 查看所有用户的最后一次登录时间,默认读取 /var/log/lastlog 文件内容

第六章 Linux 磁盘与文件系统管理命令

  • 分区类型。添加扩展分区、逻辑分区是为了突破主分区最多只有 4 个的限制。

    • 主分区。由于 MBR 的限制,最多只能分配 4 个主分区。 主分区+扩展分区 ≤ 4
    • 扩展分区在一块硬盘上只能有 1 个,而且扩展分区和主分区是平级的,也就是说,主分区加扩展分区最多只能有 4 个。扩展分区不能直接写入数据,也不能格式化,需要在扩展分区中再划分出逻辑分区才能使用。扩展分区唯一的作用是包含逻辑分区。
    • 逻辑分区。逻辑分区是在扩展分区中再划分出来的。在 Linux 系统中,IDE 硬盘最多有 59 个逻辑分区(加 4 个主分区最多能识别 63 个分区),SCSI 硬盘最多有 11 个逻辑分区(加 4 个主分区最多能识别 15 个分区)
      在这里插入图片描述
    • 分区 1、2、3 是主分区,分区 4 是扩展分区,而分区 5 和 6 是逻辑分区。
    • 使用 “sd” 代表 SCSI 或 SATA 硬盘,使用 “hd” 代表 IDE 硬盘。使用 “1~4” 代表主分区或者扩展分区,使用 “5~59” 代表逻辑分区
      在这里插入图片描述
  • 对柜子来讲,格式化就是打入隔断;对硬盘来讲,格式化的目的是写入文件系统。很多人认为格式化是为了清空数据,这个概念是错误的。把硬盘当成柜子,格式化就是按照文件系统的要求,把分区分成等大小的数据块(默认是 4KB)。硬盘有了这样的隔断,才可以真正地保存数据。不过在写入文件系统的时候,会顺带清空分区中的数据,就像给柜子打隔断,当然要先取出柜子内的所有文件一样。

  • 推荐的 swap 分区设置如下:

    • 4GB 或 4GB 以下内存的系统,最少需要 2GB swap 分区。
    • 大于 4GB 而小于 16GB 内存的系统,最少需要 4GB swap 分区。
    • 大于 16GB 而小于 64GB 内存的系统,最少需要 8GB swap 分区。
    • 大于 64GB 而小于 256GB 内存的系统,最少需要 16GB swap 分区。
      在这里插入图片描述
  • 磁盘挂载

    • 首先创建挂载点 mkdir -p /mnt/imooc ,然后挂载 mount /dev/sdb1 /mnt/imooc

    • 卸载挂载点 umount /mnt/imooc

    • 电脑重启,挂载消失。如果需要永久挂载,需要修改 vim + /etc/fstab 末尾添加挂载

      设备名 挂载点 文件系统类型 defaults 0 0

  • lsblk 或者 lsblk -f 查看 所有挂载情况

  • mount 挂载文件系统
    在这里插入图片描述

第七章 文本处理三剑客

正则表达式就是为处理大量的字符串及文本而定义的一套规则和方法。

7.1 grep 文本过滤工具

  • 其功能是从文本文件或管道数据流中筛选匹配的行及数据。

  • 正则表达式

    ^   #匹配字符串开始 # grep ^he 1.txt # 匹配以 he 开头的行
    $   #匹配字符串结束 # grep he$ 1.txt # 匹配以 he 结尾的行
    .   #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
    []  #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 # grep 'h[ea]' 1.txt # 匹配 he 和 ha
    ()  #小括号的功能之一是分组过滤被括起来的内容,括号内的内容表示一个整体 # egrep 'g(oo|la)d' 1.txt # 匹配good 和 glad
    
  • 命令选项

    -c # 打印匹配的文本行的行数
    **-v # 不包括,反向查找
    -i # 忽略字母大小写**
    -n # 列出所有匹配的文本行,并显示行号
    **-w # 匹配整个单词**
    **-E # 表示过滤 多个参数
    -a # 可将二进制视为文本文件搜寻,相当于--binary-files=text这个参数。**
    
    **# grep -A  -B -C(大写)    后面都跟阿拉伯数字 
    -A # 是显示匹配后和它后面的n行。after 
    -B # 是显示匹配行和它前面的n行。 before
    -C # 是匹配行和它前后各n行。 context**
    
    cat test.txt | grep -A1 ‘hello’ # 输出 hello 匹配行,以及之后一行 after 1
    cat test.txt | grep -B1 ‘hello’ # 输出 hello 匹配行,以及之前一行 before 1
    cat test.txt | grep -1 ‘hello’ # 输出hello 匹配行,以及之前、之后各一行内容
    
  • grep -E 选项可以用来扩展选项为正则表达式。 如果使用了 grep 命令的选项 -E,则应该使用 | 来分割多个 pattern,以此实现 OR 操作。

    cat 1.txt | grep -E 'SSID|Signal' 等同于 cat 1.txt | grep 'SSID\|Signal'   # 注意空格
    
  • grep -e 只能传递一个检索内容

    cat 1.txt | grep -e 'SSID' -e 'Signal'  # 等同于上式
    
  • 使用 grep -v 可以实现 NOT 操作。 -v 选项用来实现反选匹配的(invert match)。如,可匹配得到除指定 pattern 外的所有 lines。

7.2 sed 字符流编辑器

  • sed 是 Stream Editor 字符流编辑器的缩写,简称流编辑器。
  • sed 是操作、过滤和转换文本内容的强大工具。常用功能包括对文件实现快速增删改查(增加、删除、修改、查询),其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。
  • sed 以及后面的选项、命令和输入文件,每个元素之间都至少要有一个空格。
    在这里插入图片描述
sed '2a 111' test.txt # 在test.txt 文件第二行后添加 111
sed '2i 111' test.txt # 在test.txt 文件第二行前插入 111
sed 's#111#aaa#g' test.txt # 全局替换test.txt中的111为aaa
sed -n '2p' test.txt # 类似查询功能,打印test.txt第二行内容,-n 取消默认输出,只输出匹配行文本
sed -n '2,3p' test.txt 

sed 's/444/123/' a.txt      # 替换a.txt中的444为123
sed -n 's/444/123/' a.txt   # 安静模式替换a.txt中的444为123,不打印
sed -n 's/111/444/p' a.txt  # 加参数p进行打印
sed '2d' a.txt              # 删除第二行
sed '2,5d' a.txt            # 删除2-5行打印,文件内容不变的
sed '1i\111' a.txt          # 第一行前插入111打印,文件内容不变的
sed '1a\111' a.txt          # 第一行后插入111打印,文件内容不变的
sed 's/444/666 &/' a.txt    # 444前拼接666
sed '/hello/d' a.txt        # 删除a.txt 中包含hello的行

在这里插入图片描述

  • sed -rn '/^[ \t]*$/!s#^[ \t]*##gp' tt2.txt 删除开头的空格和 TAB 键

  • 动作选项

    a # 新增
    c # 取代
    d # 删除  sed '/特定字符串/d' file.txt
    i # 插入  sed '行号i\要插入的文本' file.txt
    p # 打印
    s # 替换  sed 's/源字符串/目标字符串/g' file.txt
    
  • 命令选项

    -n # 安静模式
    -e # 直接应用 sed 命令
    -r # 扩展正则表达式
    -i # 直接修改读取行内容
    -f # 输出到指定文件中
    

7.3 awk

  • awk 不仅仅是 Linux 系统中的一个命令,而且其还是一种编程语言,可以用来处理数据和生成报告(Excel)。处理的数据可以是一个或多个文件,它是 Linux 系统最强大的文本处理工具,没有之一。

  • 首先 NR 在 awk 中表示行号(记录号),NR==5 表示行号等于 5 的行。这里需要注意必须使用两个等号,在 awk 中两个等号表示“等于”,一个等号表示赋值,即向一个变量里面放置内容。注意:awk 后面所接的内容要用单引号。 $0 表示一整行内容, $1 表示第一列内容, $NF 表示最后一列。print 关键字表示显示的内容,相当于是 awk 内部的一个命令,需要放在花括号中。

    awk '条件1{动作1}条件2{动作2}' 文件名
    awk 'NR==2,NR==4' test.txt # 打印2行到4行内容
    awk 'NR==2,NR==5 {print NR,$0}' test.txt # 打印2-5行行号以及内容
    awk 'NR==2,NR==5 {print NR,$0}' scan.sh
    awk -F "," 'NR==2,NR==5 {print NR,$1,$3,$NF}' test.txt # 以逗号分隔,打印行号、第一列、第三列、最后一列内容。 -F后可用单双引号或者不加引号,但是建议加双引号。
    awk '{print $列号}' file.txt # 打印第n列
    awk '/特定字符串/ {print}' file.txt # 显示匹配行
    awk 'BEGIN{sum=0} {sum += $1} END{print sum}' file.txt # 数值计算
    awk '{printf "%s\t%6s\t%s\n",$1,$2,$3}' file.txt # 格式化打印
    
  • grep 字符

    ls -rth | grep -E '^._2023-03-15-20-(3|4).*.bag' | wc -l  # 匹配单字符开头包名的bag包,匹配包名中2023-03-15-20-3.*.bag 或者 2023-03-15-20-4.*.bag,并计算行数 即符合条件的包数
    

在这里插入图片描述

- `.*`表示匹配**后面任意字符串**(零个或多个字符);表示匹配任意数量的任意字符,包括零个字符。这个表达式通常用于匹配文件名、路径名或 HTML 标记等文本中的任意字符串。例如,正则表达式`<p>.*</p>`可以匹配任何以`<p>`开头、`</p>`结尾的段落标记,并且标记中间的任何内容都会被匹配到。
- `*`表示匹配**前面一个字符**出现零次或多次;例如,正则表达式`ab*c`可以匹配字符串`ac`、`abc`、`abbc`、`abbbc`等。
  • shell 中 ? 表示一个字符, 表示多个字符。*

7.4 相关面试题

  • cat t.log | cut -d '/' -f 3 | sort | uniq -c | sort -nr

在这里插入图片描述

  • netstat -an | grep ESTABLISHED | awk -F ' ' '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c | sort -nr cut 不能分割空格,所以第一次分割使用awk,第二次分割通用,一般简单的用 cut; netstat -an | grep ESTABLISHED | awk -F ' ' '{print $5}' | cut -d ':' -f 1 | sort | uniq -c | sort -nr。 uniq 前要用 sort,因为 uniq 统计的是相邻行的重复情况。
    在这里插入图片描述
    在这里插入图片描述

  • sudo tcpdump -i ens33 host 192.168.200.1 and port 22 >> tcpdump.log

在这里插入图片描述

  • linux 系统权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

目录 rls
目录 wtouch rm cp mv
目录 xcd

文件是否可读,与文件 r 权限有关(前提文件夹有 x 可执行权限)

文件是否可写,与文件 w 权限有关(前提文件夹有 x 可执行权限)

文件是否可删除,与文件夹 w 权限有关(前提文件夹有 x 可执行权限)

  • cat t2.txt | awk -F " " '{sum+=$2} END {print sum}'

在这里插入图片描述
在这里插入图片描述

第八章 文件备份与压缩命令

  • tar 打包备份
    在这里插入图片描述

    tar zcvf 1.tar.gz 1
    tar ztvf 1.tar.gz # 不解压查看压缩包内容
    tar zxvf 1.tar.gz -C /Users/lyz # 解压到/Users/lyz
    **tar -zcvf 1.tar.gz --exclude hello /Users/lyz # 打包/Users/lyz文件夹下除了hello之外的所有文件**
    
  • gzip 命令不能直接压缩目录,因此目录需要先用 tar 打包成一个文件,然后 tar 再调用 gzip 进行压缩。

  • zcat、zgrep、zless、zdiff 等实用程序的作用分别与 cat、grep、less 和 diff 相同,但是它们操作的是压缩的文件。

  • root 用户可以修改任何用户的密码,普通用户只能修改自身的密码。

  • zip/unzip 用于压缩/解压缩文件, zip -r xxx.zip /home/ 递归压缩 home 目录; unzip -d /opt/tmp home.zip 解压 home 压缩文件到 /opt/tmp;

第九章 Linux 进程管理命令

  • 程序和进程的区别:程序可认为是静态的代码,每个执行中的程序都可成为一个进程。

  • ps 查看进程
    在这里插入图片描述

  • 输出信息中各列的说明如下。

        # ps aux # 查看系统中所有进程
    	1USER 该进程属于的用户
    	2、PID 该进程的进程号 
    	3、CPU 该进程使用掉的CPU资源百分比 
    	4、MEM 该进程所占用的物理内存百分比 
    	5、VSZ 该进程使用掉的虚拟内存量(单位为Kbytes)
    	6、RSS 该进程占用的固定的内存量(单位为Kbytes)
    	7、TTY: 进程是在哪个终端机上面运作的,若与终端机无关,则显示“?”,另外,tty1-tty6是本机上面的登入者进程,若为pts/0等,则表示为由网络连接进主机的进程 
    	**8、STAT 进程当前的状态
    	   ("S":中断 sleeping,进程处在睡眠状态,表明这些进程在等待某些事件发生--可能是用户输入或者系统资源的可用性;
    	    "D":不可中断 uninterruptible sleep; "R":运行 runnable; "T":停止 traced or stopped; "Z":僵死 a defunct zombie process)** 
    	9、START 该进程被触发启动的时间
    	10、TIME 该进程实际使用CPU运作的时间 
    	11、COMMAND 该进程的实际命令
    
    # ps -ef
    	1UID 用户号 
    	2、PID 进程ID 
    	3PPID 父进程号 
    	4、C CPU占用率 
    	5、TTY 终端的次要装置号码 (minor device number of tty) 
    	6、TIME 进程执行起到现在总的CPU暂用时间 
    	7、COMMAND 启动这个进程的命令
    
  • ps -le 查看系统中所有进程

  • top [选项]:查看系统健康状态

    -d:秒数,指定top命令每隔几秒更新,默认是3秒
    -b:使用批处理模式输出。一般和"-n"选项合用
    -n次数:指定top命令执行的次数,一般和"-b"选项合用
    -i:是top不显示任何闲置或者僵死的进程。
    -p:通过指定监控进程ID来仅仅监控某个进程的状态
    

    在 top 命令的交互模式当中可以执行的命令:

    • ? 或 h:显示交互模式的帮助
    • P:以 CPU 使用率进行排序默认就是此项
    • M:以内存使用率进行排序
    • N:以 PID 排序
    • q:退出 top
  • iotop # io 读写

  • vmstat 命令监控系统资源 vmstat [刷新延时 刷新次数]

    vmstat 1 3 每隔 1s 刷新一次,总共刷新三次

  • pstree 查看进程树

    -p  显示进程的 PID
    -u  显示进程的所属用户
    
  • lsof 查看进程打开的文件

    • lsof 全名为 list open files,也就是列举系统中已经被打开的文件。

在这里插入图片描述

    ```bash
    lsof /var/log/messages # 显示使用文件的进程
    lsof -c rsyslog # 显示指定进程所打开的文件
    lsof -p 1277 # 显示指定进程号所打开的文件
    lsof -u <username> # 显示指定用户名的进程列表。
    lsof -i # 查看所有进程
    **lsof -i :9001 # 查看端口9001信息
    lsof -i tcp:<port> # 显示所有使用指定 TCP 端口号的进程列表
    lsof -i udp:<port> # 显示所有使用指定 UDP 端口号的进程列表**
    ```
  • strace 跟踪进程的系统调用。strace 会追踪程序运行时的整个生命周期,输出每一个系统调用的名字、参数、返回值和执行所消耗的时间等,是高级运维和开发人员排查问题的杀手锏。

    strace 有两种运行模式。一种是通过它启动要跟踪的进程。直接在原本的命令前加上 strace 即可。 strace ls -lh /var/log/sys.log 另一种运行模式,是跟踪已经在运行的进程,在不中断进程执行的情况下,理解它在干嘛。 strace -p pid 进程号

    strace 常用的选项 *strace* -tt -T -v -f -e trace=file -o /data/log/strace.log -s 1024 -p 23489

    -tt:在每行输出的前面,显示毫秒级别的时间
    -T:显示每次系统调用所花费的时间
    -v:对于某些相关调用,把完整的环境变量,文件 stat 结构等打出来。
    -f:跟踪目标进程,以及目标进程创建的所有子进程
    -e:控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称
    -o:把 strace 的输出单独写到指定的文件
    -s:当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是 32 个字节
    -p:指定要跟踪的进程 pid,要同时跟踪多个 pid,重复多次 -p 选项即可。
    
  • service 管理系统服务

    service --status-all # 显示所有服务状态
    service xxx restart/start/status/stop/reload
    

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第十章 Linux 网络管理命令

10.1 ifconfig(interface configure)

  • interface 为网络接口名,Linux 下的网络接口名类似于 eth0、eth1 和 lo (loopback)等,分别表示第 1 块网卡、第 2 块网卡和回环接口。lo:“回环”网络接口,它不代表真正的网络接口,而是一个虚拟的网络接口, 其 IP 地址默认是”127.0.0.1“回环地址通常仅用于对本机的网络测试。

  • 使用 ifconfig 命令配置网卡信息仅会临时生效,重启网络或服务器配置就会失效。

    ifconfig eth0 # 显示指定网卡信息
    **ifconfig eth0 192.168.120.56 # 为网卡配置ip地址**
    **ifconfig eth0 192.168.xxx.xxx network 255.255.255.0**
    ifconfig eth0 192.168.xxx.xxx network 255.255.255.0 broadcast 192.168.xxx.xxx
    sudo route add default 192.168.1.1 # 设置默认网关
    ifconfig up/down
    ifup/ifdown eth0 # 激活/禁用网络接口
    # 设置最大传输单元    设置能通过的最大数据包大小为 xxx  bytes
    ifconfig ens33 mtu 1500
    
    # ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    	ens33      :网卡名称
    	UP         :表示“接口已启用”
    	BROADCAST  :表示“主机支持广播”
    	RUNNING    :表示“接口在工作中”
    	MULTICAST  :表示“主机支持多播”
    	MTU 1500   :(最大传输单元):1500字节
    # inet 192.168.xxx.xxx  netmask 255.255.255.0  broadcast 192.168.xxx.xxx
    	inet      :IP地址
    	netmask   :子网掩码
    	broadcast :广播地址
    # ether 00:50:56:28:2c:xx  txqueuelen 1000  (Ethernet)
    	ether(Ethernet)           :表示 连接类型(以太网)
    	00:50:56:28:2c:xx(Hwaddr) :表示 硬件Mac 地址
    	txqueuelen 1000            :表示 网卡传送队列长度
    # RX packets 341798  bytes 286602735 (273.3 MiB)
    # RX errors 0  dropped 0  overruns 0  frame 0
    	RX packets         :接受到的总包数
    	RX bytes           :接受到的总字节数
    	RX errors          :接收时,产生错误的数据包数
    	RX dropped         :接收时,丢弃的数据包数
    	RX overruns        :接收时,由于速度过快而丢失的数据包数
    	RX frame(框架)    :接收时,发生frame错误而丢失的数据包数
    # TX packets 50732  bytes 7640759 (7.2 MiB)
    # TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    	TX packets         :发送的总包数
    	TX bytes           :发送的总字节数
    	TX errors          :发送时,产生错误的数据包数
    	TX dropped         :发送时,丢弃的数据包数
    	TX overruns        :发送时,由于速度过快而丢失的数据包数
    	TX carrier         :发送时, 发生carrier错误而丢失的数据包数(运输工具)
    	TX collisions      :发送时, 冲突信息包的数目
    
    # br0 网桥接口
    	网桥是一种在链路层实现中继,对帧进行转发的技术,根据 MAC 分区块,可隔离碰撞,将网络的多个网段在数据链路层连接起来的网络设备。
    	**br0 可以将两个接口进行连接,如将两个以太网接口 eth0 进行连接,对帧进行转发。**
    	robot@ROBOT:~$ brctl show
    	bridge name	 bridge id		      STP enabled	   interfaces
    	br0		       8000.020000041001	no		         eth0
    																								 eth1
    																								 wlan1
    
  • ip 是一款多用途网络配置工具,它取代了早起的 ifconfig 程序。

    ip addr
    **ip link show # 查看全部设备
    ip link show eth1 # 查看指定设备**
    ip addr show eth1 # 查看网络接口信息
    **sudo ip addr add 192.168.1.2/24 dev en0 # 设置IP地址和子网掩码**
    sudo ip link set en0 up/down # 启用或禁用网络接口
    sudo ip route add default via 192.168.1.1 # 设置默认网关
    ip route # 查看路由表
    ip route show # 查看路由表
    $ sudo ip route add 192.168.2.0/24 via 192.168.1.1 # 添加路由规则
    $ sudo ip route del 192.168.2.0/24 # 删除路由规则
    $ sudo ip route change 192.168.2.0/24 via 192.168.1.2 # 修改路由规则
    $ sudo ip link set dev en0 mtu 1500 # 用于配置网络接口的高级参数
    
  • 修改有线/无线网络优先级

    1. 打开终端。你可以按下 `Ctrl + Alt + T` 组合键来打开终端。
    2. 运行以下命令来查看当前网络接口的列表和优先级:
       ```
       ip route
       ```
       在输出中,你会看到类似以下的行:
       ```
       default via <gateway_ip> dev <interface_name> proto dhcp metric <metric_value>
       ```
       `<interface_name>` 是网络接口的名称,`<metric_value>` 是当前的优先级。较小的 `<metric_value>` 表示较高的优先级。
    3. 编辑网络接口的优先级。运行以下命令来编辑网络接口的配置文件:
       ```
       sudo nano /etc/network/interfaces
       ```
    4. 在打开的文件中,你会看到类似以下的内容:
       ```
       auto <eth_interface_name>
       iface <eth_interface_name> inet dhcp
    
       auto <wlan_interface_name>
       iface <wlan_interface_name> inet dhcp
       ```
       `<eth_interface_name>` 是有线网络接口的名称,`<wlan_interface_name>` 是无线网络接口的名称。
    5. 在 `<eth_interface_name>` 的配置块中添加 `metric` 选项,并为其指定较高的值。这将使有线网络接口的优先级较低。例如:
       ```
       auto <eth_interface_name>
       iface <eth_interface_name> inet dhcp
         metric 100
    
       auto <wlan_interface_name>
       iface <wlan_interface_name> inet dhcp
       ```
       注意:确保 `<eth_interface_name>``<wlan_interface_name>` 的名称与步骤 2 中的实际网络接口名称相匹配。
    6. 保存并关闭文件。按下 `Ctrl + X` 组合键,然后按下 `Y` 键确认保存,最后按下回车键确认文件名。
    7. 重新启动网络服务。运行以下命令以重新启动网络服务:
       ```
       sudo service networking restart
       ```
    

10.2 tcpdump 监听网络流量

  • tcpdump 是一个基于命令行的网络数据包捕获工具,可以在 Unix、Linux、macOS 等操作系统上使用。它可以抓取网络数据包并进行分析,帮助管理员进行网络故障排除、网络安全监控等工作。常用参数: -i -tttt -n -r -w -c src/dst。一般如下几种类型的关键字:
    • 关于数据类型的关键字:

      包括 host、port、net,例如 host 192.168.1.1 表示这是一台主机,net 192.168.0.0 表示这是一个网络地址,port 22 指明端口号是 22,如果没有指明类型,则默认的类型是 host。

    • 数据传输方向的关键字:

      包括 src、dst、dst or src、dst and src,这些关键字指明了传输的方向,比如 src 192.168.1.1 说明数据包源地址是 192.168.1.1,dst net 192.168.0.0 指明目的网络地址是 192.168.0.0,默认是监控主机对主机的 src 和 dst,即默认监听本机和目标主机的所有数据。

    • 协议关键字:包括 ip、arp、rarp、tcp、udp 等,

    • 其他关键字:运算类型的:or、and、not、!

    • 辅助功能型的:gateway、less、broadcast、greater

# 监听指定网卡收到的数据包 -i
tcpdump -i eth0
# 抓取指定协议的网络数据包 -i udp/tcp/icmp/arp
tcpdump -i eth1 udp
tcpdump -i eth1 tcp
tcpdump -i eth1 icmp
# 抓取指定端口的网络数据包 port
tcpdump -i eth1 port 22
# 抓取指定 IP 地址的网络数据包 host
tcpdump -i eth1 host 192.168.1.1
# 抓取指定协议、端口和IP地址的网络数据包 
$ sudo tcpdump -i en0 tcp port 80 and host 192.168.1.1
# 抓取网络数据包并保存到文件 -w
$ sudo tcpdump -i en0 -w tcpdump.pcap
# 从文件中读取网络数据包并进行分析 -r
$ sudo tcpdump -r tcpdump.pcap
# 过滤出源IP地址为192.168.1.1的网络数据包 src
$ sudo tcpdump -i en0 src host 192.168.1.1
# 过滤出目标IP地址为192.168.1.1的网络数据包
$ sudo tcpdump -i en0 dst host 192.168.1.1
# 过滤出源端口为80的网络数据包
$ sudo tcpdump -i en0 src port 80
# 过滤出目标端口为80的网络数据包
$ sudo tcpdump -i en0 dst port 80

tcpdump -tttt # 增加抓包时间戳
tcpdump -n arp # 监听指定协议数据包 -n: 不解析主机名和端口号,只显示IP地址和端口号
tcpdump -i eth0 host 192.168.10.7 and port 2105 -c 10
tcpdump -i any arp -nn # 过滤arp

sudo tcpdump -i enp2s0 -c 10 -n -tttt src net 192.168.10.7 and dst 192.168.10.10 -nn
tcpdump -D # 打印所有可工作的接口
tcpdump -c 10 -w tcpdump_test.log # -w选项指定记录文件;-c 10 # 抓取10个数据包
tcpdump -r tcpdump_test.log # -r选项 读取文件
tcpdump udp # 只抓udp协议数据包,支持指定以下协议 ip ip6 arp tcp udp wlan等
tcpdump tcp port 80 # 过滤指定协议的端口号
tcpdump src port 8080 # 过滤指定源端口/源主机  src/dst host 192.168.1.113
tcpdump dst port 80 # 过滤指定目标端口
tcpdump tcp and host 192.168.1.112 # 逻辑与/或/非 and/or/not

net还可以过滤网段
src net 192.168.10.0/24
-v #输出稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv#输出相信的保报文信息

10.3 netstat 查看系统网络情况

  • netstat 命令功能是显示网络连接和网络接口信息,可以得到服务器有哪些网络连接正在运作。可以用于诊断网络问题、监视网络连接和流量等。

    -a # 列出所有网络状态,包括监听端口、已建立连接和等待关闭的连接。 all
    -c 秒数 # 指定每隔几秒刷新一次网络状态 continuous
    -n # 使用IP地址和端口显示,不使用域名与服务名 numeric
    -p # 显示PID和程序名 programs
    -t # 显示使用tcp协议端口连接的状态 tcp 
    -u # 显示使用udp协议端口连接的状态 udp
    -l # 仅显示监听状态的连接  listening
    -r # 显示路由表 route
    -s # 显示网络接口的统计信息 statistice
    
    -an # 按照一定顺序排列输出
    
    netstat -anp  |  more # 查看本机所有的网络连接
    netstat -tunlp # 查看端口占用
    netstat -rn # 查看本机路由表
    
    tunl 和 an 选项的最大区别:tunl 只能查看监听 LISTEN,而 an 可以查看监听和正在连接 ESTABLISHED 的状态.
    
  • netstat 格式解析 Proto Recv-Q Send-Q Local Address Foreign Address State

    • Proto: 协议名(tcp协议还是udp协议);

    • recv-Q: 网络接收队列。表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv() 如果接收队列 Recv-Q 一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击;

    • send-Q: 网路发送队列。对方没有收到的数据或者说没有 Ack 的,还是本地缓冲区。如果发送队列 Send-Q 不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快;这两个值通常应该为 0,如果不为 0 可能是有问题的。packets 在两个队列里都不应该有堆积状态。可接受短暂的非 0 情况。

    • Local Address 部分的 0.0.0.0:873 表示监听服务器上所有 ip 地址的所有(0.0.0.0 表示本地所有 ip);

    • Foreign Address 解释。 与本机端口通信的外部 socket。显示规则与 Local Address 相同。

    • State 解释。 链路状态,共有 11 种。state 列共有 12 种可能的状态,前面 11 种是按照 TCP 连接建立的三次握手和 TCP 连接断开的四次挥手过程来描述的。

      **1. LISTEN :首先服务端需要打开一个socket进行监听,状态为LISTEN。/*The socket is listening for incoming  connections. 侦听来自远方TCP端口的连接请求 */**
      2. SYN_SENT:客户端通过应用程序调用connect进行activeopen。于是客户端tcp发送一个SYN以请求建立一个连接。之后状态SYN_SENT。/*The socket is actively attempting to establish aconnection. 在发送连接请求后等待匹配的连接请求 */
      3. SYN_RECV:服务端应发出ACK确认客户端的SYN,同时自己向客户端发送一个SYN。之后状态置为SYN_RECV/* A connection request has been received from the network. 在收到和发送一个连接请求后等待对连接请求的确认 */
      **4. ESTABLISHED:代表一个打开的连接,双方可以进行或已经在数据交互了。/* The socket has an established connection. 代表一个打开的连接,数据可以传送给用户 */**
      5. FIN_WAIT1:主动关闭(activeclose)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态。/* The socket is closed, and the connection is shutting down. 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 */
      6. CLOSE_WAIT:被动关闭(passiveclose)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT。/* The remote end has shut down, waiting for the socketto close. 等待从本地用户发来的连接中断请求 */
      7. FIN_WAIT2:主动关闭端接到ACK后,就进入了FIN-WAIT-2。/* Connection is closed, and the socket is waiting for a shutdownfrom the remote end. 从远程TCP等待连接中断请求 */
      8. LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程 序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK。就进入了LAST-ACK。/* The remote end has shut down, and the socket is closed. Waiting foracknowledgement. 等待原来发向远程TCP的连接中断请求的确认 */
      **9. TIME_WAIT:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态。/* Thesocket is waiting after close to handle packets still in the network.等待足够的时间以确保远程TCP接收到连接中断请求的确认*/**
      10. CLOSING:比较少见。/* Bothsockets are shut down but we still don’t have all our datasent. 等待远程TCP对连接中断的确认 */
      11. CLOSED:被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束。/*The socket is not being used. 没有任何连接状态 */
      12. UNKNOWN:未知的Socket状态。/* Thestate of the socket is unknown. */
      

10.4 ethtool

# ethtool 工具
sudo ethtool eth0 # 显示eth0网卡的状态和属性信息
sudo ethtool eth0 | grep Link  # 连接状态
ethtool -i eth0 # 查看指定网卡的驱动程序信息
ethtool -s eth0 speed 1000 duplex full # 将eth0网卡的速度设置为100

cat /sys/class/net/ethX/carrier # 1 连接 0 未连接
cat /sys/class/net/ethX/operate # up down

10.5 nmcli Network Manager Client

nmcli general status # 显示NetworkManager的状态。
**nmcli device status # 显示所有设备状态**
nmcli connection # nmcli con show # nmcli con # 查看所有的网络连接 connection
**nmcli connection show --active # 显示所有活动连接**
nmcli connection show eth0
nmcli connection up/down eth0 # 启用/停用指定网络连接
nmcli connection delete eth0 # 删除一个网卡连接
nmcli connection reload
nmcli connection add type ethernet ifname eth0 # 添加一个以太网连接。
nmcli connection modify eth0 ipv4.addresses 192.168.0.58 # 给eth0添加一个IP(IPADDR)

**nmcli device wifi list  # nmcli d w l # 搜索可用 wifi 网络**
# 首次连接Wifi
**nmcli device wifi connect  SSID  password PASSWORD # nmcli dev wifi connect  SSID  password PASSWORD**
nmcli device disconnect # 断开wifi
**nmcli connect del SSID** # 删除连接
nmcli c del UUID # 删除连接

nmcli device set wlan0 managed no

# 修改配置文件执行生效
systemctl restart network
systemctl status NetworkManager # 查看状态

# 创建网桥
nmcli connection add type bridge con-name br0 ifname br0 autoconnect yes
#查卡br0的状态
nmcli device status
 
DEVICE             TYPE           STATE           CONNECTION     
br0               bridge   连接中(正在获取 IP 配置)    br0
# 将我们本地的有线网卡enp8s0连接到br0
nmcli connection add type bridge-slave ifname enp8s0  master br0
# 启动br0
nmcli connection up br0

2、nmcli device
设备,是网络设备的接口,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)。可以简写为nmcli d

在NM里,有2个维度:连接(connection)和设备(device),这是多对一的关系。想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即 nmcli d可以看到的),就是NM纳管的。接着,可以为一个设备配置多个连接(即 nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件。同一时刻,一个设备只能有一个连接活跃。可以通过 nmcli c up切换连接。

3、connection有2种状态:
▷ 活跃(带颜色字体):表示当前该connection生效
▷ 非活跃(正常字体):表示当前该connection不生效

4、device有4种常见状态:
▷ connected:已被NM纳管,并且当前有活跃的connection
▷ disconnected:已被NM纳管,但是当前没有活跃的connection
▷ unmanaged:未被NM纳管
▷ unavailable:不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set ethX down)

10.6 brctl 以太网网桥管理

addbr  # 创建网桥
delbr  # 删除网桥
addif  # 将网卡接口接入网桥
delif  # 删除网桥接入的网卡接口
show   # 查询网桥信息

brctl addbr br0
brctl delbr br0
brctl show

10.7 nc netcat / telnet / nmap / traceroute

  • nc 是一个简单、可靠、强大的网络工具,它可以建立 TCP 连接,发送 UDP 数据包,监听任意的 TCP 和 UDP 端口,进行端口扫描,处理 IPv4 和 IPv6 数据包。 -vz -w 2

    nc -vz 10.0.0.12 20-30 # 扫描20-30端口
    
    nc -l PORT # 监听指定的端口号。
    nc HOST PORT # 连接到指定的主机和端口号。
    nc -v HOST PORT # 显示连接的详细信息。
    nc -u HOST PORT # 使用UDP协议连接。
    nc -z HOST PORT # 进行端口扫描,检查指定的端口是否开放。 zero,扫描时不发送任何数据
    **nc -w TIMEOUT HOST PORT # 设置连接超时时间。**
    
  • 使用 nc 启动一个 tcp 监听,比如 9999 端口 nc -l 9999 ,客户端可以通过 telnet 访问server telnet 10.0.1.161 9999,或者使用 nmap 扫描端口 nmap 10.0.1.161 -p9999

  • nc 驱动一个 udp 监听, nc -ul 9998 nc -vuz 10.0.1.161 9998 nmap -sU 10.0.1.161 -p 9998 -Pn -sU :表示 udp 端口的扫描,

  • telnet 就是查看某个端口是否可访问。Telnet 协议是 TCP/IP 协议家族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用 telnet 程序,用它连接到服务器。终端使用者可以在 telnet 程序中输入命令,这些命令会在服务器上运行。可简单理解为基于 Telnet 协议的远程登录。

    telnet 退出 ctrl+] quit

  • nmap 是 Network Mapper 的简称,网络探测工具和安全/端口扫描器,是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。

  • traceroute 显示数据包与主机之间的路径

    traceroute www.sina.com.con

  • hosts 文件用来记录 IP 和 hostname 之间的映射关系。 /etc/hosts

  • DNS,Domain Name System 的缩写,翻译过来就是域名系统,是互联网上作为域名和 IP 地址相互映射的一个分布式数据库。

  • arp(Address Resolution Protocol)地址解析协议,是一种用于将 IP 地址映射到 MAC 地址的协议。当计算机需要发送数据包到目标主机时,需要知道目标主机的 MAC 地址,而 ARP 协议就是用于解决这个问题的。

    ARP 协议工作原理如下:

    • 当计算机需要发送数据包到目标主机时,首先检查本地的 ARP 缓存,查找目标主机的 MAC 地址是否已经缓存。
    • 如果目标主机的 MAC 地址没有缓存,则计算机会广播一个 ARP 请求包,请求目标主机的 MAC 地址。
    • 当目标主机收到 ARP 请求包时,会向发送方回复一个 ARP 响应包,包含自己的 MAC 地址。
    • 发送方收到 ARP 响应包后,将目标主机的 MAC 地址保存到本地 ARP 缓存中,以便下次快速访问。

    ARP 协议是一个重要的网络协议,用于解决 IP 地址和 MAC 地址之间的映射关系,是网络通信的基础之一。在实际应用中,ARP 协议也可能会被恶意攻击,例如 ARP 欺骗攻击,因此网络安全专家需要对ARP协议进行保护和防御。

  • 十六进制读取串口数据

    stty -F /dev/ttyS0 115200 raw && cat /dev/ttyS0 | hexdump

    sudo cat /dev/ttyS4 | hexdump

    stty -F /dev/ttyS0 115200 raw
    od -t x1 /dev/ttyS0
    其中,stty命令用于设置串口的参数,-F选项指定串口设备文件,115200表示波特率,raw表示禁用输入输出处理。od命令用于将输入的数据以指定格式输出,-t x1选项表示以十六进制格式输出每个字节的值,/dev/ttyS0表示从串口ttyS0读取数据。
    

第十一章 定时任务+日志+系统

  • 在 Linux 系统中,Cron 是定时任务的软件名,Crond 是服务进程名,而 crontab 命令则是用来设置定时任务规则的配置命令。

  • crontab 循环定时任务

    • service crond restart
    • chkconfig crond on 开启服务
  • 格式 * * * * * 执行的任务

    10 * * * * /root/sh/apache_check.sh 每小时的第 10 分钟执行一次
    在这里插入图片描述
    */10 * * * * /root/sh/apache_check.sh 每隔 10 分钟执行一次
    在这里插入图片描述
    在这里插入图片描述

  • crontab -l # 查看 root 用户的 crontab 任务

  • crontab -r # 删除 root 用户所有的定时任务

  • crontab -e # 编辑用户的定时任务

  • at 定时任务
    在这里插入图片描述

  • 日志服务管理

    • 日志轮替。就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。
    • 使用 logrotate 进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中的 dateext 参数;
      在这里插入图片描述
      在这里插入图片描述
  • 内存日志查看
    在这里插入图片描述
    在这里插入图片描述

  • Linux 内核 https://www.kernel.org/

    • 阅读源码前,应知道 Linux 内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱 动程序和网络等组成。
    • 在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。
      在这里插入图片描述
  • init 运行级别
    在这里插入图片描述

  • apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,我们可以使用 apt 命令进行软件包的安装、删除、清理等。

    sudo apt-get update # 更新源  源文件 /etc/apt/sources.list
    sudo apt-get install package # 安装包
    sudo apt-get remove package # 删除包
    sudo apt-cache show package # 获取包的相关信息,如说明、大小、版本等
    sudo apt-get source package  # 下载该包的源代码
    
    sudo apt-get -f install # 修复安装
    sudo apt-get upgrade # 更新已安装的包
    sudo apt-get remove package --purge # 删除包,包括配置文件等
    sudo apt-cache depends package # 了解使用该包依赖哪些包
    sudo apt-cache rdepends package # 查看该包被哪些包依赖
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值