• Linux笔记


    一。基础思想

    1. 一切皆文件。

    2. 两条权限原则:

      • 权限分组原则
      • 权限最小原则
    3. su是切换用户,而sudo则是用root权限执行某操作( 普通用户+sudo=安全)

    4. Linux目录

      • 系统只存在一颗文件树、从==/==开始,所有的文件都挂载在这个节点上。 ( 树型目录
      • Windows系统存在多颗文件树,以盘开始。如==C:\==D:\
      • 注意:两者斜杆不一样,正反斜杆。Linix正斜杆,Windows反斜杠。
    5. 没有返回值就是成功:执行Linux命令,无返回值即成功,有反回值有可能成功也有可能失败。

    6. 关机前需要先同步数据

      • 虽然如今Linux系统已默认执行sync。但是为了避免数据丢失,实现手动sync是好习惯。
      sync						#同步数据 
      shutdown -h now #立即关机
      shutdown -h 1		#1分钟之后关闭计算机 
      reboot					#立即重启
      
      • 1
      • 2
      • 3
      • 4
    7. 在众多Shell中,Linux系统中的文件系统因为不同的类别,颜色都是不一样的。

      d:目录 -:文件 l:链接image-20220314194812036

    8. r4、w2、x1:读写执行分别对应二进制111

    9. 记住、用户目录 /etc/passwd

    10. 只有当要修改文件时才需要vim,其余时cat即可、或者headless

    11. 可执行文件是绿色的。
    12. ping百度检查设备是否联网

      ping baidu.com
      
      • 1
    13. tab提示很好用,单机或者双击的规则我已领悟。

    14. -h在Linux中是非常重要的一个参数,其在绝大多数情况下都表示显示计量单位,即可以以人可以读懂的方式去显示。如:

      ls -lh
      df -h		#查看磁盘使用情况
      du -h		#查看指定的目录(默认是当前目录)下的文件占用空间情况
      
      • 1
      • 2
      • 3
    15. 清空或者截断文件

      > a.txt
      
      或者
      
      echo "" > a.txt
      
      • 1
      • 2
      • 3
      • 4
      • 5
    16. 日常使用which来查询指令出处。

    17. 第三方软件安装应所在位置:/opt


    二。基础操作

    1. ls指令

      ls -alh		#隐藏文件、长列表、方便阅读
      ls -R 	#递归子目录
      ls -r		#反序显示
      ls -S		#Size,以文件大小顺序输出
      ls -t		#按修改时间
      
      '注意
      -r:reverse
      -R:Recursive,常用于连续递归子目录
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      image-20220317114208779

      • 第2列:硬链接数或者子目录数
      • 3/4:文件属主与属组
      • 5:文件大小(单位:字节),如果是文件夹则显示4096字节,文件则显示其内容的实际大小。
      • 6/7/8:最后修改日期
      • 9:文件名
    2. mkdir递归创建目录

      mkdir -p demo/{1..100}
      
      • 1
    3. rmdir:仅能删除非空的目录。

    4. rm详解

      '技巧'
      rm -rf /tmp			#删除这个目录
      rm -rf /tmp/*		#删除这个目录下的所有文件,但不包括这个文件本身
      
      • 1
      • 2
      • 3
    5. 文件查看汇总

      	cat		#	第一行开始查看文件
        tac		#	倒序
        nl		#	显示行号(相当cat -n)
        more	#
        less	#一页一页的显示,比more更好
        head	-5	#头
        tail	-10	#尾
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    6. cat、tac详解

      • 优势:不会修改文件内容,安全。
      cat -n txt						'显示行号'
      cat a1 a2 a3 ...			'拼接文本'
      cat > a.txt						'等待输入,并且重定向至新文本'
      
      tac #反序cat
      
      • 1
      • 2
      • 3
      • 4
      • 5
    7. head与tail

      head -5 txt
      tail -5 txt
      tail -f txt		'实时查看文件末尾'
      
      • 1
      • 2
      • 3
    8. less指令

      • 优势:**动态加载。**more的升级版,less在显示文件内容时并不会整个加载,而是会根据显示需要加载动态加载,在打开大文件时具备无可比拟的优势。
      'less中查找文本'
      /abd		"向下查找
      ?abc		"向上查找
      n	下一条		N 上一条
      
      • 1
      • 2
      • 3
      • 4
    9. sort与uniq

      • uniq只能作用于连续且重复的行。
      ls -l | sort
      ls -l | sort -r 	#倒序
      
      sort a.txt | uniq -c				'-c为--count,统计重复行数
      
      uniq -d		#只输出重复行
      uniq -i		#忽略大小写
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    10. cut详解

    "参数:-f输出字段,-c输出范围字符"
    ls -lh | cut -d " " -f 1 | cut -c 2-10
    
    • 1
    • 2
    1. awk详解
    • 代替cut(cut功能受限),但是远没有cut来的方便。
    • awk实际上是三位创始人的名字首字母。
    • awk只能使用单引号,支持C/C++的写法
    'awk分割:以空格为分隔符( 连续空格都能算作一个 ),然后写awk表达式(支持C语言)
    
    ls -lh | awk -F ' ' '{print $5,$9}'
    #或者
    ls -lh | awk -F ' ' '{printf("%s\t%s\n",$5,$9)}'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. dfdu磁盘查看

      df -h				'df查看整个系统'
      df -hl			'-l,将列表限制为本地文件系统
      
      du -a -h		'du查看当前文件夹、局部'
      du -h /home	'指定目录'
      
      • 1
      • 2
      • 3
      • 4
      • 5
    2. free内存使用情况查看

      free -h			'-h人性化
      
      • 1
    3. tree文件树显示

      yum -y istall tree
      tree /tmp
      
      • 1
      • 2
    4. ==\==指令

      • 允许命令换行,人性化操作。
      ls -l \
      -a
      
      • 1
      • 2
    5. cp复制

      • -u只更新、不复制重复的且同时间的项目,加快大文件复制
      cp 1.txt 2.txt
      -i		#交互,防止直接覆盖掉原有文件夹
      -u		#只更新,不复制重复的且同时间的项目--->加快大文件复制
      -r		#递归
      
      • 1
      • 2
      • 3
      • 4
    6. ln软、硬链接

      ln a b
      ln -s a b
      
      • 1
      • 2
    7. history

      history				#显示全部历史记录
      history 10		#只显示10条
      !2022					#执行第2022条记录
      !!						#执行上一条指令
      
      • 1
      • 2
      • 3
      • 4
    8. datecal

      date														#显示当前时间
      date "+%Y-%m-%d-%H-%M%-%S"			#显示指定时间
      date -s "9999-10-20"						#修改系统时间
      
      cal					#正常显示日历
      cal 2022		#显示年日历
      cal 10 2000	#月份在前
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    9. which指令

      which ls
      
      • 1
    10. findlocate(获取路径)

      • 区别:

        • find:基于硬盘查找,会从指定的目录向下递归遍历所有子目录,速度慢。

        • locate:基于数据库索引查找,需要事先执行数据库建立索引语句,速度较快。

      • 简单使用:

        find /home -name hello.txt		#正常查找
        find /home -name *.txt				#递归查找
        find /home -user thinkstu			#查找用户
        find /home -size +100M				#小于100MB
        find /home -size -100M				#大于100MB
        
        • 1
        • 2
        • 3
        • 4
        • 5
        yum -y install mlocate
        updatedb
        locate xxx
        
        • 1
        • 2
        • 3
      • 范例:

        find /etc -type d  	# 文件
        find /etc -type f 	# 文件夹
        find /etc -type l 	"但是其实grep确实也能实现这一点,方法多样"
        
        find / -type f -name "*.jpg" -size +1M |wc -l
        
        'find指令扩展:直接删除搜索出来的文件
        find find / -type f -name "*.jpg" -delete
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
      
      
      • 1
    11. grep

      • 前景说明:常用来和cat进行管道的组合使用

      • 参数含义:

        -n		'结果显示行号
        -i		'忽略大小写
        -R 		'递归的在目录中查找
        -v		'只匹配不相符合的行
        
        • 1
        • 2
        • 3
        • 4
      • 范例:

        cat /tmp/1.txt | grep -in "yes"
        grep -in "yes" /tmp/1.txt
        
        • 1
        • 2
    12. alias别名、unalias取消别名

      alias								 #显示系统所有的别名
      alias custom='ls -l'
      
      • 1
      • 2
      • 持久化: /etc/profile
      • 常与type一起使用,查看具体的命令别名而不是全部的
    13. 立即关机

      sudo shutdown -h now
      
      • 1
    14. wc统计

      • 输出文件中的行数、单词数、字节数
      cat 1.txt | sort | uniq | wc -l
      -l	#行数
      -w	#单词数
      -c	#字节数
      
      • 1
      • 2
      • 3
      • 4
    15. file确定文件类型

      file 具体文件			#事实上怕记也可以使用ls -l查看
      
      • 1
    16. type显示指令类别

      • 如:shell内置的、还是alias别名定制的
      type ls
      
      [t@VM-4-3-centos man-pages-zh-CN-1.5.2]$ type ls
      ls is aliased to `ls --color=auto'
      
      [t@VM-4-3-centos man-pages-zh-CN-1.5.2]$ type man
      man is hashed (/bin/man)
      
      [t@VM-4-3-centos man-pages-zh-CN-1.5.2]$ type type
      type is a shell builtin
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    17. uname显示系统信息

      uname -a		# 显示所有信息
      uname -r		# 显示系统内核版本
      
      [root@VM-4-3-centos]~# uname -r
      3.10.0-1160.59.1.el7.x86_64
      
      • 1
      • 2
      • 3
      • 4
      • 5
    18. stat指令

      • 显示当前文件的所有信息和属性
      [root@VM-4-3-centos ~]$ stat index.html 
        File: ‘index.html’
        Size: 730             Blocks: 8          IO Block: 4096   regular file
      Device: fd01h/64769d    Inode: 397149      Links: 1
      Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
      Access: 2022-03-29 11:58:49.895527049 +0800
      Modify: 2022-03-29 11:58:49.062502555 +0800
      Change: 2022-03-29 11:58:49.062502555 +0800
       Birth: -
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    19. netstat指令在网络配置中详解

    20. mount挂载、unmount卸载

    mount 		#不加任何参数
    '显示所有的挂载情况,包括硬盘、网卡、音箱等设备
    '格式:device    on    mount_point    type   filesystem_type
    
    • 1
    • 2
    • 3
    1. lsblk查看系统挂载情况
    [root@004 ~]$ lsblk			'lsblk即:list block
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sr0     11:0    1 159.1M  0 rom  
    vda    253:0    0    80G  0 disk 
    └─vda1 253:1    0    80G  0 part /
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. fstab文件查看存储设备情况

      cat /etc/fstab
      
      • 1
    2. top网络配置章节详细介绍。

    3. iotop查看io读写情况

      • 说明:io读写也是瓶颈,观察哪些用户正在疯狂的io,从而禁掉。

      • 动态显示( 默认未安装,故yum )

        yum -y install iotop
        
        iotop
        
        • 1
        • 2
        • 3

        image-20220322214653886


    三。基础概念

    1. 配置信息全部在/etc里

      • /etc/passwd 用户信息,密码用X代替;
      • /etc/shadow 用户密码所在地(加密了,可以破解,root用户才有权限访问)
      • /etc/group 用户组信息
    2. /boot与**/root**:注意区分这两个目录,它们不一样!

    3. Bash说明

      • GNU项目的产物,Shell程序。
      • 几乎所有的Linux发行版本均存在bash。
      • bash表示其是sh的加强版,而sh是最初编写的UNIX Shell程序。
    4. wildcard通配符

    1. *:几乎全部,只不能匹配隐藏文件。
    2. ?:单个字符
    3. '匹配隐藏文件:.[!.]*
    
    • 1
    • 2
    • 3
    1. 单引号、双引号规则:在单引号中,所有的转义字符会失效。

    2. /dev/null垃圾桶

      • 可以将不需要的输出全部重定向至这个文件中,神秘消失~
      • 俗称:bit bucket 位桶,Unix古老概念
      ls / &> /dev/null 
      
      • 1
    3. Linux自带英文字典

      • locate:/usr/share/dict/words文件
      • 大小:4.8MB。
      "里面有47万个单词,一行一个。可用grep搜索"
      [root@VM-4-3-centos dict]$ cat words | wc -l
      479828
      
      "填字游戏"
      [root@VM-4-3-centos dict]$ cat words | grep '^..j.r$'
      Major
      major
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    4. 系统字符集查看

      "查看字符集的两种方法"
      1. locale
      2. echo $LANG
      
      • 1
      • 2
      • 3
      • locale的字面意思就是语言环境:字符集。
    5. 重定向标准错误

      • 前置知识:Linux的Shell中有三个文件描述符
      • 0、1、2:标准输入、输出、错误输出。
      #仅标准输出,两种写法
      ls /aaa > a.txt		
      ls /aaa 1> a.txt
      
      #仅重定向错误
      ls sasa 2> a.txt
      
      #同时输出,两种写法
      ls sasa > a.txt 2>&1
      ls sasa &> a.txt
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    6. 系统版本信息查看

    [root@VM-4-3-centos]~# cat /etc/os-release
    
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    四。安装软件

    1. centOS:三种方式

      • 解压缩( 模式:解压即安装 )
      • rpm手动安装
      • yum在线安装
    2. 前景说明:

      • yum是高层工具,rpm是低层工具。
      • yum与rpm都可以删除已安装的软件,效果一样
      • yum的帮助文档,直接yum --help或者yum -h
    3. rpm详解

      • 全称:redhat package management,行业标准而不只是redhat的专用;

        • 基本格式:bt-mysql56-5.6.50-1.el7.x86_64
          • 名称:bt-mysql56
          • 版本:5.6.50
          • 适用操作系统:1.el7.x86_64( 表示支持centos7.x的Intel—X86架构64位操作系统 ),如果是i386表示32位系统,noarch表示通用。
        • 安装说明:不会帮你自动下载并配置默认环境。

        • 参数说明:

          rpm -qa						"查询所有已安装软件
          rpm -q  gcc				'查询本地是否安装gcc。不比grep好用、容易导致误解、出错'
          #比 yum -info gcc 详细,更好
          rpm -qi	gcc				'查询软件包的具体信息,包括安装时间等
          rpm -ql	gcc				'查询软件包中的文件
          rpm -qf 文件路径		'查询该份文件隶属于哪一个软件
          
          #-e普通卸载,可能会被Linux阻止。卸载失败
          #--nodeps强制卸载
          rpm -e --nodeps gcc
          
          #-i_install安装,-v_verbose显示信息,-h_hash进度条
          rpm -ivh	rpm包
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
        • 范例:

          #安装JDK1.8
          1. '检查系统中是否存在jdk1.8,两种方式'
          rpm -qa | grep jdk
          
          1-1.	'存在即强制卸载'
          rpm -e --nodeps jdk名称		#强制卸载
          
          2. '前提:已经拿到jdk的rpm包、并且存储在系统里'
          rpm -ivh rpm包
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
      1. yum详解

        • 全称:Yellow dog Updater, Modified

        • 安装说明:会帮你自动下载并配置好所有的默认环境,省心安装。

        • 参数说明:

          yum makecache fast	'生成目录缓存,方便日后检索。每日系统自动更新一次'
          
          yum -y install gcc	'安装
          yum list | grep jdk	'列出所有可以安装的软件'
          yum check-update		'检查是否有'
          yum remove gcc			'卸载'
          yum update					'更新所有软件'
          yum update gcc			'更新gcc'
          # 不如 rpm -qi gcc 详细,没有安装日期等等
          yum info gcc				'查看具体信息'
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
        • 范例:

          yum -y install java-1.8.0-openjdk.x86_64
          
          • 1

    五。解压缩文件

    1. 常用tar,记住即可

      tar -zxvf file		#解压
      tar -zcvf	file		#压缩
      
      • 1
      • 2
    2. 其他指令

      1. gzip压缩、gunzip解压

        gzip 1.txt
        gunzip 1.txt.gz
        
        • 1
        • 2
      2. zip与unzip

        • 注意看其表达形式,不可改变!易错。
        • Linux有时没有为我们安装此,自行安装即可
        #安装unzip
        yum install -y unzip
        
        #压缩
        zip -r a.zip /home/think 
        压缩	递归压缩目录	压缩后的文件名	将要压缩的目录
        
        #解压
        unzip -d ./usr a.zip
        解压 指定解压到的文件目录 压缩包文件
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
      3. tar详解

        • tape archive,原本功能:磁带存档。

        • 前景说明:只提供打包、解包,没有解压缩功能。

        • 通过调用gzip实现解压缩功能。

        • 后缀:.tar.gz见名思意,先借助tar打包、然后利用gzip进行压缩。

        • 打包和压缩区分:

          • 打包是指将一大堆文件或目录变成一个总的文件;
          • 压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
        • 与其他指令的区别:其他指令只能针对某一文件进行解压缩,而不能同时针对不同地方的多份文件进行压缩。

        • 参数说明:

          tar -zxvf a.tar.gz
          
          -x		'解压文件,extract
          -c		'压缩文件,compress
          
          -z		#支持gzip解压文件
          -v		#显示操作过程,verbose
          -f		#指定压缩文件(理解:指定要解压的压缩文件名)
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8

    六。用户与用户组

    1. 查看用户信息

      id
      id 用户名
      
      • 1
      • 2
    2. 创建用户、删除用户

      useradd -m	-G 设置用户组				#-m自动创建用户的家目录
      
      userdel -r					#删除用户并且删除家文件  
      
      • 1
      • 2
      • 3
    3. 修改用户密码

      passwd							#回车设置密码(普通用户权限)
      passwd 用户名				#回车设置用户密码(root权限)
      passwd -l 用户名			#lock,冻结某用户、暂时无法登陆。应用:离职期间
      
      • 1
      • 2
      • 3
    4. 用户切换

      su 用户名
      
      • 1
    5. 退出登录

      '退出账号'
      exit
      
      '退出Shell端'
      logout
      
      • 1
      • 2
      • 3
      • 4
      • 5
    6. 创建、删除用户组(group的操作与useradd这系列的操作类似一样

      groupadd thinkstu
      groupdel thinkstu
      
      • 1
      • 2
    7. 修改用户所在组

      usermod -g 组 用户名		#修改用户所在组
      
      • 1
    8. 直接修改文件或者目录属组

      chgrp think组 1.txt
      
      • 1
    9. 为用户赋予新的家目录

      '只能用root用户设置,因为在设置的时候该用户不能登录
      usermod -d 目录名 用户名
      
      • 1
      • 2
    10. 思想:

    • Linux中,所有的用户都必须存在于一个组中,用户不能独立于组而存在。
    • 某文件在创建时所归属于的组—>取决于创建者所在的组
    1. 修改文件所有者

      chown thinkstu 1.txt
      
      • 1
    2. rwx权限详解

      1. 权限排序:文件所有者、文件所在组、其他人。

      2. 作用在文件

        • r :可读取该文件

        • w :可修改该文件,但是并不能删除该文件。

             删除该文件的前提是对该文件所在的目录拥有w写的权限。
          
          • 1
        • x :可执行该程序

      3. 作用在目录

        • r : 可读,可以使用ls查看该目录结构
        • w :可以对目录里的内容进行修改。—>如:创建、删除、重命名该目录或其他目录内的文件
        • x :可执行,表示可以进入该目录。
      4. Summary

        • 如果想要对目录内的文件进行操作,那么首先要有针对目录的相应权限才行!
        • 目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。
        • 只有执行权限只能进入目录,不能 ls 看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。
        • 一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外
        • 目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件

    七。环境配置

    1. 检查环境配置

      1. set:显示Shell变量+环境变量

      2. printenv:只显示环境变量

      3. alias:别名( 以上两者均无法查看别名,只有它可以

        set					#全部
        printenv		#全部
        alias				#全部
        
        • 1
        • 2
        • 3
    2. 常见变量

      echo $PATH
      echo $PS1
      echo $LANG		'输出服务器字符集'
      
      • 1
      • 2
      • 3
    3. 前提说明:Shell程序在启动时会自动加载并读取一系列配置文件(用户登录操作并不会)。

    4. 配置文件读取规则

      • **登录Shell会话:**非图形界面登录。

        "全局变量"
        /etc/profile
        as
        "用户变量"
        123 为只要前面一个存在,则后面的就不会被读取;
        ~/.bash_profile		1
        ~/.bash_login			2
        ~/.profile				3
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
      • **非登录Shell会话:**利用图形界面进行登录。

        "全局变量"
        /etc/bash.bashrc
        
        "用户变量"
        ~/.bashrc
        
        • 1
        • 2
        • 3
        • 4
        • 5
      • 特例:~/.bashrc文件,无论启动方式如何,总会被执行( 但其只是用户自定义变量 )。

    5. export命令含义:告诉Shell,该环境变量的内容可用于Shell的子进程。

      export PATH=$PATH:~/bin
      
      • 1
    6. 二月指示:以前我总是修改/etc/profile文件,直到我进去该文件中注意到这句话:

       System wide environment and startup programs, for login setup
       Functions and aliases go in /etc/bashrc
      
       It's NOT a good idea to change this file unless you know what you
       are doing. It's much better to create a custom.sh shell script in
       /etc/profile.d/ to make custom changes to your environment, as this
       will prevent the need for merging in future updates.
       
      ---------------------------'代码部分'---------------------------------
       i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
          if [ -r "$i" ]; then
              if [ "${-#*i}" != "$-" ]; then
                  . "$i"
              else
                  . "$i" >/dev/null
              fi
          fi
      done
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 意思即:官方更加推荐在==/etc/profile.d/目录下新建.sh==脚本。
      • 步骤:在/etc/profile.d/下新建shell脚本,然后刷新==/etc/profile==文件( 无需给定脚本执行权限 )
    7. 总结( 修改全局变量与用户变量 ):

      全局变量:

      • 优先:往/etc/profild.d目录下添加脚本文件.sh, 方便日后管理 。

      • 其次:修改/etc/profile文件本身。

      用户变量:

      • 优先:~/.bashrc文件,因为修改这不会导致一系列的文件优先权问题(但在mac下可能每次都需要 source手动更新,所以 mac推荐/.bash_profile)。
      • 其次:/.bash_profile(想要一定会生效的话),但这可能会导致/.bash_login、/.profile失效(如果存在的话)

      最后记得,都要刷新配置文件~


    八。网络

    1. ip指令详解

      "过时:已不再维护"
      ifconfig
      
      "现代"
      1   ip a
      2		ip addr
      3		ip -c a
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • ip指令取代ifconfig。

      • ip指令的正确使用方式

      "全部在《man ip》手册里,具体要配什么怎么配注意查看即可,真就还不如学会如何看手册,比这方便"
      
      ip a	#a是addr的缩写,所以可以直接用a
      -------------------------------------
      SYNOPSIS
             ip [ OPTIONS ] OBJECT { COMMAND | help }
             OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | mad‐dress | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token | macsec }
             OPTIONS := { -V[ersion] | -h[uman-readable] | -s[tatistics] | -d[etails] | -r[esolve] | -iec |-f[amily] { inet | inet6 | ipx | dnet | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] {maximum-addr-flush-attempts } | -o[neline] | -rc[vbuf] [size] | -t[imestamp] | -ts[hort] |-n[etns] name | -a[ll] | -c[olor] }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2. ping指令详解

      • 作用:

        • ping百度:检查网络连通性

        • 检测双方网络的通畅性。

      • 使用说明:

        • 默认1秒发送一次包,Linux平台默认持续 ping,win平台一般 ping 4次即结束。

        • 在按下ctrl+c快捷键中断继续发送的请求之后,命令行会返回本次网络请求的统计信息。

        [root@VM-4-3-centos test]]$ping thinkstu.com
        PING thinkstu.com (39.107.99.33) 56(84) bytes of data.
        64 bytes from 39.107.99.33 : icmp_seq=3 ttl=51 time=37.6 ms
        64 bytes from 39.107.99.33 : icmp_seq=4 ttl=51 time=37.7 ms
        ^C
        
        --- thinkstu.com ping statistics ---
        2 packets transmitted, 2 received, 0% packet loss, time 3001ms
        rtt min/avg/max/mdev = 37.679/37.793/38.090/0.219 ms
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • ttl(Time To Live)的含义:该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。当 ttl = 0 时,该数据包就会被路由器丢弃,这样就防止了幽灵数据在网络中一直循环(浪费互联网资源)的情况。

          1. 查看初始值:ping本身 ip地址,一般 Linux是64,win是128。
          ping localhost
          
          64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.082 ms
          
          • 1
          • 2
          • 3
          1. 查看其他网站
          ping thinkstu.com
          64 bytes from 39.107.99.33: icmp_seq=0 ttl=48 time=64.576 ms
          
          # 此处表明经过了 64 - 48 =16 层网关。
          
          • 1
          • 2
          • 3
          • 4
    3. traceroutetracepath追逐网络请求链条( 抓包 )

      #范例,两者差不多
      traceroute baidu.com
      tracepath baidu.com
      
      • 1
      • 2
      • 3
    4. netstat指令详解

      • 全称:network statistic网络统计,检查网络设置和统计网络信息。用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

      • 应用:

        '输出有点长'
        netstat	| less
        netstat -an		#按照一定顺序输出
        netstat -p		#附加显示进程号
        netstat -pan
        
        • 1
        • 2
        • 3
        • 4
        • 5
      • 案例

        #查找80端口
        netstat -pan | grep :80
        
        #我之前使用过另外一种方法
        lsof -i :80
        
        • 1
        • 2
        • 3
        • 4
        • 5
      • 额外说明:Linux以上两种方案均可,但是Mac中 isof 或许是最佳方案!

    5. ftp指令

      • 经典但过时。
      • 历史理解:起初的FTP服务器并不安全,因为它是以明文的形式在互联网中传输信息的(包括账号和密码)。所以几乎网络上所有的FTP服务器都是匿名的,这意味着它允许任何人使用任何账号、密码实现登录,没有验证。
    6. wget指令详解

      • 可以从网页或者FTP下载文件,甚至是下载整个网站源码。

      • 但是!但是!这货给我的感觉是慢的离谱、慢到无法理喻!

        yum -y install wget
        
        wget thinkstu.com
        "会自动的把这个页面以它应有的方式保存到当前文件夹"
        "更多的使用方式我应该使用 《 man wget 》"
        
        • 1
        • 2
        • 3
        • 4
        • 5
    7. SSH远程连接

      • Secure Shell:安全的Shell连接
      • 存在应用:sftp,我的服务器上也有这个命令:意即“安全的FTP)”
    8. DHCP

      • 利:动态地址,避免IP地址冲突。
      • 弊:不适用于服务器,服务器永远不需要动态的IP地址变换。
    9. 主机名:hostname变量

      • 查看

        hostname
        
        • 1
      • 修改

        '方式1:重启生效、永久
        "source刷新无效。因为其里面的内容又不是指令,只是一行普通字符串而已)
        vim /etc/hostname
        
        '方式2:本次生效、暂时'
        hostname	xxxx		#修改主机名,重启生效。(这只能重启生效)
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
    10. hosts映射文件

    • /etc/hosts

    • 作用:通过ping主机名找到实际的ip地址,类似DNS域名映射。

    • 启示:hosts文件其实就是一个定义了网络映射规则的文件,有则按照其定义来,无则自由发挥

    • **注意:**是检索后面的那个,从而导向前面的那个值。

      '模板'
      192.168.200.101 hostname名(或者域名,其实就是String类型的数据)
      
      '实例'
      192.168.200.101 thinkstu
      #当我在Shell中ping thinkstu这个字符型的时候就会导向192.168.200.101。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    1. 更加高级的知识

      • Hosts是什么❓

        一个文本文件,用来记录IP和Hostname(主机名)之间的映射关系

      • DNS是什么❓

        • Domain Name System的缩写,域名系统

        • 定义:互联网上作为域名和IP地址相互映射的一个分布式数据库。

        • DNS流程(四步)

        • 一:首先浏览器会先检查自身的缓存中有无该域名的DNS缓存

          • 二:检查电脑自身的DNS缓存
          • 三:检查hosts文件
          • 四:向远程的DNS服务器发送解析请求
          • 如果以上均无返回值,则断定该域名所对应的关系不存在
      • 域名劫持修改的就是DNS所对应的关系,所以~浏览器商是关口的第一步,完全可以任意的劫持访问操作。

    2. 自我启示:

      image-20220319150356854

      • 1:平常时,我输入localhost之所以会映射到127.0.0.1,原来是hosts里面早就写好了相应的映射规则
      • 2:Mac破解软件
      • 3:我自己设置的新映射规则,当ping — thinkstu时,系统会先去检测这个文件,如果存在即使用相应的规则,即阿里云服务器的地址47.94.55.73。

      效果:

      image-20220319150753195


    九。进程

    1. 简单概念:image-20220330150318682

      • PID:process id进程号
      • PPID:父进程,parent process id;当杀掉父进程时,子进程也会消失。
      • daemon:守护进程
      • 程序 —> 进程 —> 线程
      • 程序只是一串代码(静态),而进程则是动态的。
      • 在Linux中,每个执行的程序都被称为一个进程,每个进程会被分配相应的ID即PID号。
    2. 进程分为两种类型:

      • 前台进程:时刻霸占着主屏幕
      • 后台进程:也称为守护进程Daemon或者服务Service。
    3. Linux下查看进程:通过grep查找

      • -ef与-aux其实是一样的方式,不一样的风格。
      • -auxBSD风格-efSystem V风格
      ps -aux | grep 80
      ps -ef 	| grep 80
      
      • 1
      • 2
    4. ps指令详解( 具体请man )

      ps				#单纯输入ps能查看到的消息特别少,与我想的结果完全不一样
      
      ps -aux		#熟悉的参数指令,Mac中无-u参数。
      ps  aux		#-aux也可以写成aux的形式,没有差别
      ps -a			# 显示当前终端的所有进程信息
      ps -u			# 附加显示进程的发起用户
      ps -x			# 附加显示后台进程运行的参数
      
      ps -ef		#熟悉的参数指令
      ps -e			#同A,显示所有进程
      ps -f			#全格式
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      System V展示风格
      USER :		用户名称
      PID:			进程号
      %CPU,			进程占用CPU的百分比
      %MEM:			进程占用物疆肉拿的首分比
      VSz:			进程占用的虚极内存大小(单位:KB)
      RSS:			进程占用的物理内存大小(单位:KB)
      TTY:				终端名称,缩写。
      
      STAT:			进程状态,其中S-睡眠,S-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低
      的优先级,R-正在运行,D-短期等待,乙-僵死进程,丁-被跟踪或者被停止等等
      
      STARTED:	进程的启动时间
      TIME:			 CPU时间,即进程使用CPU的总时间
      COMMAND:	启动进程所用的命令和参数,如果过长会被截断显示
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    5. pstree指令:树型结构显示进程

      pstree -pu
      #-p显示进程号,-u显示进程所属用户
      
      • 1
      • 2
    6. killkillall

      • 区别

        • kill 进程号
        • killall 进程名(支持通配符,支持批量查杀程序)
      • 实例

        image-20220320085325511

        1.'强制用户退出,思路:杀死该用户登录用的sshd守护进程'
        kill -9 PID			#-9:强制停止
        kill -9 13070
        
        
        2.'终止某应用的所有服务(已知应用名字)'
        killall tomcat
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
    7. top:动态监控

      top
      top -6		#指定top命令每隔几秒更新一次,默认3秒
      top -i		#ignore,忽略闲置或者僵死zombie进程
      top -p		#指定要监控的进程ID,独家定制监控
      
      • 1
      • 2
      • 3
      • 4

      image-20220320143636577

      illustrate

      1. 当前系统时间 本次系统已经持续运行时间(超过6天53分钟) 当前1位用户登录 负载均衡( 三位数字相加除以3,大于0.7则说明当前负载较大 )
      2. 当前系统总任务数 1运行,106睡眠,0停止,1僵死zombie
      3. cpu使用情况:us、sy—用户、系统分别占用了百分之几,id—idle空闲CPU百分比
      4. 内存使用情况:总共2G,现在1.19G左右被使用
      5. Swap使用情况:swap是可以临时充当内存的存储,暂时未被使用,但是存在。

      发现存在僵死进程:

      • 僵死进程zombie:程序已经死亡,但还在持续的占用着系统内存。

      • 找到并杀死zombie进程

        • 思路:top查看系统是否存在僵尸进程。
        • 进程搜索+kill
        ps -aux | grep "^[Zz]"		#此处查找Zombie或者zombie
        kill -9 xxx
        
        • 1
        • 2

      top指令下的交互

      P		'默认选项,以CPU使用率排序
      M		#内存使用率排序
      N		#PID,process identity排序
      q		#离开
      
      #加餐
      1. '查看指定用户的程序:输入U回车,再输入用户名
      2. 'top环境下杀死指定进程:输入k回车,再输入进程号PID
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    十。服务

    1. 介绍:

      • 服务( Service )本质就是进程,其被定义为在后台运行的进程,故称为服务。
      • 它们通常都会在后台监听着某个端口,等待其他程序的请求,比如Tomacat、MySQL等。
    2. Service指令

      • 使用:service start | stop | restart | reload | status

      • 查看系统服务:

        ls /etc/init.d
        
        • 1

        image-20220320092709916

    3. 每一个服务的自启动是根据不同的运行级别进行设置的,比如只设置mysql在 init-3 级别(shell面板)时自启动,所以它在 init-5 级别(图形界面)就不会自启动。

    4. chkconfig指令

      • Check Config

      • 可以通过该指令给服务的各个运行级别 设置是否自启动

      • 如何查看能够管理的服务的范围?—> ls /etc/init.d 或者chkconfig 直接查看。

        image-20220320094718135

      • 设置运行级别

        chkconfig --level 3 bt on/off
        
        • 1
      • 提示:需要 reboot 重启机器才能生效

    • systemctl

      1. 很多服务开始不再使用service,而是systemctl

        • 与service指令相近,不过更高级。

        • 服务后面都有一个d,含义是daemon守护进程,也就是后台进程

          例如:mysqld,firewalld等等

      2. centos8 之后运行级别简化为只有两个级别3和5( 原先有7个 ):命令行与图形化界面。

      3. **要充分理解 systemctl 的结构与含义:**服务的启动与暂停、自启动管理。

      4. 基本使用:

        #启动与暂停(单次有效、临时,重启系统失效)
        systemctl start | stop | restart | status		服务名称
        
        #查看管理的所有服务
        1
        systemctl list-unit-files | grep xxx服务
        2	
        systemctl | grep xxx服务
        3
        ls /usr/lib/systemd/system
        
        #设置自启动管理( 重启生效,永久 )
        systemctl enable 服务名
        systemctl disable 服务名
        systemctl is-enabled 服务名		#查询某个服务是否自启动,方法多样
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 使用注意:所有的服务后面都带一个后缀 .service 或者其他的后缀。在正式使用的时候,我们可以只写前面的服务名而忽略后面的后缀名。

          例如:firewalld.service 我们在使用时就可以只使用 firewalld 。

        • 示例:防火墙firewalld正在启动image-20220320103718285

          systemctl stop firewalld		#暂停
          systemctl start firewalld		#启动
          
          • 1
          • 2
          '设置自启动
          systemctl enable firewalld
          
          '关闭自启动
          systemctl disable firewalld
          
          '查看是否自启动
          1.	systemctl is-enabled firewalld
          2.	systemctl list-unit-files|grep firewall
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9

          image-20220320104011026


    十一。常用操作

    1. 启动SpringBoot程序
    • 前台

      java -jar xxx包
      
      • 1
    • 后台( 两种方式 )

      1. cmd & : 后台运行,关掉终端会停止运行

        cmd & 实现让命令在后台运行。但不要将有用户交互的命令放到后台,这样命令会在后台等待用户输入。后台运行的命令也会将结果输出到控制台上,如果不需要的话,可以将其重定向到某个文件中。使用下面的命令可以将标准输出和错误输出都将被重定向到一个叫做cmd.out的文件中。

        cmd  >  cmd.out  2>&1  &
        
        • 1
      2. nohup cmd & : 后台运行,关掉终端不会停止运行.

        默认情况下,该命令的所有输出都被重定向到nohup.out文件中。

        nohup java -jar Bilibili-0.0.1-SNAPSHOT.jar &
        
        • 1
    • 端口二月指示:80http的端口;443https的端口。

    2. 防火墙firewall
    • 用法:查看服务器开启了哪一些端口。但是云服务器好像根本用不到,端口组规则直接在顶层拦截。

      firewall-cmd --list-ports
      
      • 1
    3. 手工安装、配置 jdk
    1. 采用rpm的方式而不是yum

    2. 原因:yum只有openjdk。

    3. 思路:先把jdk文件上传至==/opt==,然后tar -zxvf解压文件,将解压后的文件移动至==/usr/local/java==目录(Java目录需要自建),安装过程即结束。(解压即安装

    4. 环境配置

      • 实际上配置的是可执行文件(即可执行文件的目录),/bin 。不过Java这里还需要配置一个JAVA_HOME给其他软件使用。
        vim /etc/profile
      
      • 1
        #末尾添加这两句话
        export JAVA_HOME=/usr/local/java/jdk1.8.0_261
        export PATH=$PATH:$JAVA_HOME/bin
      
      • 1
      • 2
      • 3
    4. 宝塔安装原理
    1. 先看完整指令

      yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
      
      • 1
      • 先安装wget
      • 然后利用wget远程下载shell脚本:http://download.bt.cn/install/install_6.0.sh
      • 执行该shell脚本。
    2. install_6.0.sh 文件一览( 完整版本:29KB )

      image-20220321132239331

    3. 当你忘记宝塔面板账号时

      bt
      
      • 1

      image-20220321134226383

    5. 花括号扩展
    1. 使用前小技巧:输出花括号扩展之后的内容

      echo {1..10}.txt
      
      • 1
    2. 简单范例:

      echo {001..100}		'范围数字'
      echo {A..Z}				'范围字母'
      echo {2,4,8}			'截断式数字'
      
      • 1
      • 2
      • 3
    3. 复杂范例:嵌套填充

      echo {1..5}{a..e}
      '1a 1b 1c 1d 1e 2a 2b 2c 2d 2e 3a 3b 3c 3d 3e 4a 4b 4c 4d 4e 5a 5b 5c 5d 5e
      
      echo {1,2,3}{a{1..3},b{1..3}}
      '1a1 1a2 1a3 1b1 1b2 1b3 2a1 2a2 2a3 2b1 2b2 2b3 3a1 3a2 3a3 3b1 3b2 3b3
      
      • 1
      • 2
      • 3
      • 4
      • 5
    4. 实例:

      '1. 创建列表空文件'
      touch {2000..2022}---{01..12}
      
      '2. 创建1个父文件夹和100个子文件夹,另外再创建26*100份文件'
      mkdir -p demo/{1..100}
      touch demo/{1..100}/{1..26}.txt
      rm -rf demo
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    6. man中文手册

    前提说明:yum存在着man的多语言包,但是版本有点老。

    安装

    yum list | grep man.*zh
    yum -y install man-pages-zh-CN.noarch
    
    • 1
    • 2
    vim /etc/profile		#全局变量
    或者
    vim ~/.bashrc				#用户变量
    
    • 1
    • 2
    • 3
    alias cman='man -M /usr/share/man/zh_CN'
    
    • 1
     ```sh
     source /etc/profile
     ```
    
    • 1
    • 2
    • 3
    7. PS1详解
    1. 初始状态

      [root@VM-4-3-centos ~]$ echo $PS1
      [\u@\h \W]\$
      
      • 1
      • 2
    2. 文本参数

      字符描述
      \a铃声字符
      \d格式为“日 月 年”的日期
      !该命令的 bash shell 历史数
      \h本地主机名
      \H完全合格的限定域主机名
      \jshell 当前管理的作业数
      \1shell 终端设备名的基本名称
      \nASCII 换行字符
      \rASCII 回车
      \sshell 的名称
      \t格式为“小时:分钟:秒”的24小时制的当前时间
      \T格式为“小时:分钟:秒”的12小时制的当前时间
      @格式为 am/pm 的12小时制的当前时间
      \u当前用户的用户名
      \w当前工作目录
      \W当前工作目录的基本名称
      #该命令的命令数量
      $普通用户,美元符号$;超级用户,井号#。
    3. 颜色参数

      • 原理:利用ANSI转义代码来控制。以八进制数033开头,后面接颜色代码。

      • 注意:颜色代码前后要加 \[\] ,否则会出现命令行不换行的BUG

      • 颜色代码

        [\033[0;31m] 红 [\033[0;37m] 白 [\033[0;30m] 黑

        [\033[0;32m] 绿 等等

      • 范例:

      "原先"[\u@\h \W]\$
      
      "仅目录显示红色 ---> 思想:三段式,白红白"[\u@\h \[\033[0;31m\]\W\[\033[0;37m]\]\\$
      
      • 1
      • 2
      • 3
      • 4
    4. 持久化PS1

      • 思想:类似配置环境变量$PATH。

      • 范例:/etc/profile

        export PS1="[\u@\h \[\033[0;31m\]\W\[\033[0;37m]\]\\$ "
        
        • 1
    8. xargs详解
    • 简介:xargs命令从标准输入接受输入,将其转换为指定命令的参数列表
    • 使用:
    find -type f -name "*.txt" | axargs cat
    
    • 1
    • 但是注意当文件名中含有空格时上式会发生错误,需要用一些参数去避免。
    "发生错误的情况"
    [root@VM-4-3-centos ~]$find -name "oo*"
    ./oo asa .txt
    [root@VM-4-3-centos ~]$find -name "oo*"|xargs cat
    cat: ./oo: No such file or directory
    cat: asa: No such file or directory
    cat: .txt: No such file or directory
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    "解决方案,同时利用前后两参数(暂时见识即可)"
    find -name "oo*" -print0|xargs --null rm
    
    • 1
    • 2
    9. vim详解
    • 一般模式快捷键
    G		#跳转到最后
    g		#跳转到开头
    A		#调到末尾并且进入编辑模式
    0		#调到开头
    u		#撤回
    ---------
    dd	#删除当前行
    ---------
    20 shift+g		#跳转到第20行
    :q!		#强制退出 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 在vim中,最后保存文件时有个重命名的小技巧,如此一来则会另外创建一文件而不会删除原来文件。也等于是直接又创建了一个文件并且重命名。

      :wq xxx其他名称
      
      • 1
    • 高清键盘图

      img

    10. 指定运行级别
    • init 指定运行级别

      init 0		#关机
      init 1		#单用户【找回丢失密码】
      init 2		#多用户,无网络
      init 3		#多用户,有网络
      init 4		#系统未使用保留给用户(无用)
      init 5		#图形界面
      init 6		#重启
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 常用的级别是3、5,新版在观念上去除了这笼统的7种区分,改而只区分常用的两种级别并采用英文单词表示。

      • multi-user.target 相当于运行级别3
      • graphical-target 相当于运行级别5
    • 查看并修改默认的运行级别

      systemctl get-default
      systemctl set-default graphical-target
      
      • 1
      • 2
    • 阿里云图形界面入口

      image-20220326112153685

      image-20220326112208218

    • 一般选择VNC登录桌面

      image-20220919200603702

    11. 查找空文件
    find . -type f -empty
    find -size 0
    ls -l|awk '{print 9,"\t",9,"\t",5}'
    
    • 1
    • 2
    • 3
    12. 文件、目录统计
    1. 统计目录下的文件或者子目录个数

      • 正则表达式

      • 文件:-==,目录:==d

      ls -l | grep "^-" | wc -l
      
      • 1
    2. 递归统计某目录下的所有文件个数

      说明:在通常情况下,当我们使用ls时,显示的只是一层目录下的情况,如果需要统计该目录 下的所有文件个数(包括其子目录),则要用到一个我之前好像从来都没有用到过的参数: -R

      ls -lR
      
      ls -lR | grep "^-"|wc -l
      
      '附加,ls下-r与-R的区别
      -r:reverse
      -R:Recursive
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    13. 磁盘分区、挂载、树型结构图查看

    img

    14. Ubuntu 设置密码
    • 系统默认登录时都是普通用户,整个系统中不存在root用户。

    • 我们要手动创建root用户,并且赋予它密码

      sudo passwd
      ---输入普通用户的密码
      ---输入root用户的新密码
      ---再次输入
      
      su -		#切换即可
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    15. 制作Minix
    1. 制作属于自己的一个小型Linux——Minix

      • 前提:利用grub2完成系统的制作。

      • 效果:一个什么都没有的Linux系统,完全依靠你导入相应的命令去定制。

      • 提示:思路简单,但是过程繁琐,故实操及具体说明跳过。

      • 思路: 在一个正常的Linux上新建一块纯净硬盘( 设置新硬盘名字并且记住 ),在新硬盘上创建两个分区a和b(例:a为1GB,b为19GB),在新硬盘上新建目录/boot挂载到a上、新建目录/sysroot挂载到b上。

        然后,将旧系统中的目录/boot复制到新系统的/boot中(启动引导程序),打开旧系统/boot目录中,对其grub2.cnf配置文件进行一些修改( 8处修改。主要是把旧硬盘标识的UUID修改成新硬盘的6处,还有2处是在两个地方写两句相同的话,表示再次开机时刷新一下,使用新的配置操作以免和旧系统本身的配置发送冲突 )。

        打开新系统的/sysroot目录,在里面模仿新系统的 / 目录下的文件目录系统新建一大堆目录,例如:lib64、lib、etc、tmp、usr、var等。

        将旧系统上的/lib64( 存放最基本的指令,没有则无法成功建立新系统 )复制到新系统的/sysroot/lib64目录中。另外复制/bin/bash指令也复制过去,不复制的话则会连开机shell都没有,那么怎么操作呢??哈哈。

        新系统盘基本建立完成。

        关闭旧系统,在VMWare中新建虚拟机—>删除现有硬盘,选择并查找、使用刚才建立的新硬盘—>开机—>简陋的bash界面,结束。

    2. Linux 0.0.1 C语言编写,代码结构层次还是比较清晰;

    16. 内核升级
    1. 在Linux系统中,内核可以升级。

    2. 内核升级

      • 检查可以升级的兼容版本( 如果最新版本不兼容此版本,则内核不可升级。可理 )

        yum info kernel -q
        
        • 1
      • 升级

        yum update kernel
        
        • 1

        image-20220322105441241

    17. Crond 定时循环任务
    1. crontab指令

      • 理解:Crond + table 周期性定时任务
      • 后台任务模式。
      • **注意:**以下只是在Linux中的规则而已,在Java等其他平台可能会有不同。比如Linux最高精确到分钟,而Java则已经精确到了秒,自推。
    2. 操作指南

      #首先在命令行中输入
      crontab -e
      
      #然后会进入一个类似于vim的界面,在此输入两值
      		1. craond时间表,一共5个选项
      		2. 要执行的相应指令
      		
      #每隔1分钟执行一次
      */1 * * * * ls /tmp >> /tmp/a.txt
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      #crontab参数
      -e		# edit,编辑crontab定时任务
      -l		# list,查询当前所有的crontab任务
      -r		# removeAll,删除当前用户的所有crontab任务
      
      • 1
      • 2
      • 3
      • 4
      • ==*==占位符的说明

        项目含义范围
        ***** * * * *一小时当中的第几分钟0-59
        * ***** * * *一天当中的第几小时0-23
        * * ***** * *一月当中的第几天1-31
        * * * ***** *一年当中的第几月1-12
        * * * * *****一周当中的星期几0-7
        0和7均表示星期日
      • 特殊符号的说明

        符号含义
        *代表任何时间
        ,代表不连续的时间片段,比如0 6,8,10 * * *表示每天6点整,8点整,10点整都会执行一次
        -代表连续的时间,比如0 6-8 * * *表示每天6/7/8点整均会执行
        */n首先左边的字符代表0-59分钟均会执行,右边的数字代表每隔1分钟执行一次。比如:*/10每隔十分钟,*/20每隔20分钟。(*/1相当于*****,这点需要注意)
      • 一些案列

        image-20220317162538682

      • 定时任务:利用可执行的sh文件

        1. 首先创建一shlle脚本,.sh后缀

        2. 然后赋予shell脚本可执行的权限x( 或者使用sh而无需赋权限 )

        3. 在crontab里执行任务的地方直接填入shell脚本的全路径。

          因为正常的shell脚本也是如此调用执行的

        4. 如此一来,主要工作变成了编写Shell脚本;

      • 番外话:

        在命令行里同时执行两句不同的指令

        cal && date
        
        • 1

        使用了==&&==

    18. atd 定时单次任务
    1. 说明:

      • 有时我们并不需要Crontab循环执行任务,我们只需要执行一次任务

      • at-deamon,at的守护进程atd会以后台模式运行,检测作业队列来运行。每隔60秒回检查一次作业队列,如果作业的运行时间与当前时间相匹配则会执行该作业。

      • 在使用at命令的时候,一定要保证atd进程的启动,否则便无法启动;可以使用相关指令来查看

        ps -ef|grep atd
        
        • 1
    2. 指令是at: 参数。

      image-20220317192905241

    3. 简单使用

      • 最后需要按两次Ctrl+D键结束
      • 2天后的下午5点执行一次任务

      理解:在 下午五点 + 两天后 执行任务)

      image-20220319084903346


      • atq查看at任务队列queue

        [root@think tmp]# atq
        2       Mon Mar 21 17:00:00 2022 a root
        
        • 1
        • 2

      • atrm 加编号删除某定时任务

        image-20220319085853262


      • 从现在开始30分钟以后执行任务( now 加上时间 )

        image-20220319090016042

    19. 锁定重要文件
    1. chattr指令

      • chattr:change attribute 改变属性

      • 作用:root用户用来 锁定🔐 一些重要文件的操作。

      • 小提示:chattr是/bin目录下的二进制文件。

      • 常用:使用此操作锁住某些文件。如/etc/passwd,然后root( 包括拥有root权限的非root用户 )便无法再使用useradd添加用户,所有用户均不能再修改密码passwd,因为文件已加锁,权限特别高、无法操作。

      • 参数:

        chattr +i /etc/passwd		#加锁
        chattr -i /etc/passwd		#减锁
        
        chattr -V		#显示操作过程
        chattr -R		#递归操作
        
        • 1
        • 2
        • 3
        • 4
        • 5

        image-20220322202458942

        image-20220322202603063

      • 然后可以在系统中通过修改chattr命名,移动到其他目录来防范其他人的恶意操作。

      • 这个指令还有众多参数。

        image-20220322203925521

      • 注意别把系统都给自己锁了。。。

        —> 我还真的把**根目录/**给锁了,然后操作指令——例如ls、man都能正常使用。

        因为==+i==只是加了吧只读锁,并没有能阻止指令的运行。当然所有的文件都已经不能增删改。

    20. 检测系统安全

    chkrootkit检测系统是否存在入侵的工具(需wget自行下载解压安装)

    • 文件很小+C语言编写,wget够用

      wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
      
      • 1
    • 解压、进入、执行命令

      tar -zxvf chkrootkit.tar.gz
      cd chkrootkit-0.55
      ./chkrootkit
      
      • 1
      • 2
      • 3
    • nothing found、not infected则表示正常,出现红色则表示检测到入侵

    21. 查看用户最后登录时间
    • 查看系统中所有的用户最后的登录时间

      **思想:**因为在日志文件中存在着一文件—lastlog。里面存放的就是系统中所有的用户最后的登录时间,但是因为文件本身为二进制文件不能直接打开,Linux为此还为我们定义了相应的命令,就是同名的lastlog,执行该命令则会去调用查看/var/log/lastlog文件。

    image-20220321150829458

    22. 面试题

    如何优化Linux系统 ,说出你的方法

    1. 不用root,使用sudo提示权限
    2. 定时的自动更新服务时间,使用nptdate npt1.aliyun.com, 让croud 定时更新
    3. 配置yum源,指向国内镜像(清华,163)
    4. 配置合理的防火墙策略,打开必要的端口,关闭不必要的端口
    5. 打开最大文件数(调整文件的描述的数量) vim /etc/profile ulimit -SHn 65535
    6. 配置合理的监控策略
    7. 配置合理的系统重要文件的备份策略
    8. 对安装的软件进行优化,比如nginx,apache
    9. 内核参数进行优化 /etc/sysctl.conf
    10. 锁定一些重要的系统文件 chattr /etc/passwd /ect/ shadow /etc/inittab
    11. 禁用不必要的服务

    十二。Shell编程

    1. 前景提要:

      • 后缀:.sh

      • 单行注释:#

      • Shell脚本不只一种,常用的为bash。( 号开头 )

      '含义:前缀 + 可执行目录下程序/bin/bash
      #!/bin/bash		
      
      • 1
      • 2
    2. 两种启动方式

      '1. 赋予可执行权限
      chmod 777 xxx
      ./xxx
      
      '2.不赋予权限,sh执行
      sh xxx
      
      '特例:后台运行脚本
      ./1.sh &
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    3. 全局变量

      #临时
      export d='lalala'
      
      #持久化:写进profile文件里
      vim /etc/profile
      export d='lalala'
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      'Shell中预留的三个变量'
      $$		#代表当前进程的进程号,即当前整个脚本的进程号
      $!		#后台运行的最后一个进程的进程号
      $?		#返回上一个命令执行结果。为0成功,其他值失败。
      
      echo "当前脚本进程号: $$"
      ./1.sh &
      echo "后台运行的最后一个进程的进程号: $!"
      echo "上条语句的执行结果(0位成功): $?"
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      image-20220323102723877

    4. 局部变量

      #用户自定义变量
      a='sssss'					'等号两边不能有空格!
      echo $a						'习惯变量名全部大写!
      -----------------------------------
      echo $PATH		#系统变量
      unset a				#取消设置
      readonly b=1	#静态变量,无法修改和删除
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    5. 将命令的返回值赋给变量(两种方式)

      1. "反引号"
      c=`date`
      
      2. "美元符号$、小括号"
      c=$(date)
      
      • 1
      • 2
      • 3
      • 4
      • 5
    6. 位置参数

      • 介绍: 当我们在执行Shell脚本的时候,有时想获得命令行参数,此时就可以使用位置参数。
      ./2.sh 100 200 300
      
      • 1
      • 基本语法:
      $n					#n为数字,表示位置参数具体编号
      $0					#表示命令本身
      $1/${23}		#10及以上参数需要用大括号{}括起来。
      
      $*	#通配符,表示所有变量
      $@	#通配符,也表示所有变量,不过$@把每个参数区分对待
      $#	#表示命令行中的参数个数
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 使用
       sh 2.sh 100 200 300 400
      
      #!/bin/bash
      echo "$0 $1 $2 $3"
      echo "* -- $*"
      echo "@ -- $@"
      echo "个数---$#"
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      image-20220323101412905

    7. 简单运算符

      • 三种方式( 效果一模一样 )
      1. '$((    )) 	  ----推荐
      echo $(($1+$2))
      
      2. '$[    ] 		  ----推荐
      echo $[$1-$2]
      
      3. 'expr m - n    ----超级不推荐,但要会看(语法转义麻烦)
      echo `expr $1 \* $2`
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      image-20220323105449097

    8. 暂时跳过后续内容。


    十三。函数式编程(略)

    暂定


    十四。正则表达式

    1. 说明:主要谈其在Linux操作系统中与各指令之中的联合调用

    2. grep:global regular expression print

      "以下两种式子是等价的"
      ls -l | grep -c ^d		#-c即--count统计
      ls -l | grep ^d | wc -l
      
      • 1
      • 2
      • 3
    3. ls 中可以使用

      ls -R / *.txt
      
      • 1
    4. **^&**符正确叫法:锚点anchor

      ls | grep '^zip&'
      
      "特例 ^& 表示中间什么都没有,可匹配空行"
      cat a.txt | grep ^&
      
      • 1
      • 2
      • 3
      • 4
    5. 脱字符作用:排除

      [^ab]cd
      "以上并不会匹配cd两位数,脱字符必须存在一个字符、但不能是a和b"
      
      "Discover:^符号在 [ ] 外表锚点、在内表脱字符"
      
      • 1
      • 2
      • 3
      • 4
    6. 连续范围

      [a-z0-9A-Z]		"直接这样写即可"
      
      • 1
    7. 有时会因为语言环境( 即字符编码集 )的不同而产生一些奇怪的匹配结果。

      1."一般字符集"
      abcdefg......ABCDEFG...
      2."个别字符集"
      aAbBcCdDeEfF
      
      "所以此时[a-z]就会处于:大小写均会被匹配到的状态、但是大写少个Z"
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    8. 扩展正则表达式基本正则表达式

      • BRE:Basic regular expression
      • ERE:Extended regular expression
      • 扩展思想:扩展更多的表达次数而不是具体的匹配规则,这点需注意。下面第12点也谈及了此。
      "基本正则表达式:"
      ^ & . [ ] *
      "扩展正则表达式在此基础上,又添加了几种规则"
      ( ) { } ? + |
      
      • 1
      • 2
      • 3
      • 4
      • 传统上,扩展的正则表达式要借助egrep。但是现在不用了。

      • 新办法:grep -E

        "传统" egrep xxx
        "正解" grep -E xxx
        
        • 1
        • 2
    9. 扩展正则表达式详解

      "多选扩展"
      grep -E "*.jpg | *.png"
      grep -E "(*.jpg | *.png).taz"		#多选与其它的组合使用需用小括号( ) 把它括起来
      
      "?:匹配前面的模式,0次或1次"
      "\([0-9][0-9]\) ? [0-9][0-9]"		#匹配两位数或者四位数
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    10. 次数匹配

      {3}				 #匹配3次
      {0,3}		 #匹配0-3次
      {,3}				 #最多三次
      {2,}				 #最少两次
      
      • 1
      • 2
      • 3
      • 4
    11. ==+==匹配1次或者多次

    12. 重磅操作

      .*
      ".*中 . 表示的是任意字符,* 表示的是0次到任意多次"
      #所以他两其实是表达的含义不同罢了,本质上表达的意思也不是同一个东西的嘛!
      "所以我们会经常的看到如下表达形式"
      .*1[0-9]{10}.*
      
      • 1
      • 2
      • 3
      • 4
      • 5
    13. 结语:正则表达式充满了奥妙。


    十五。修改MySQL密码

    1. 前提:系统管理员权限拥有者或者mysql数据库软件的安装者。

    2. 思路:

      • 在MySQL配置文件my.cnf中授权跳过密码验证环节
      • 直接进入数据库
      • 找到管理用户文件,并修改密码,
      • 恢复配置文件
    3. 说明:实际上有两种方法,这里只展示一种方法;具体自行百度或者查看mysql手册。

    4. 步骤( 版本不同会有些许差别 ):

      1. 找到服务器上的mysql配置文件==/etc/my.cnf==

      image-20220322145107161

      1. 插入一段代码:表示跳过授权检查。
      skip-grant-tables
      
      • 1

    十六。找回root密码

    1. 本地虚拟机版本(不同版本可能有所不同):
      • 重启系统
      • 在开机的那一瞬间疯狂点击e键(选中第一条)
      • 然后界面上的字符----UTF-8后面输入指令,然后进去—单用户模式
      • 在单用户模式下,进行root用户密码的强制修改。
      • 最后刷新文件,使其生效,系统自动重启(需要等待较长时间)
    2. 阿里云平台
      • 阿里云控制台—云服务器ESC/实例—选择相应的主机—重置实例密码
      • image-20220316112014727

    十七。日志

    1. 简介

      • 我们需要检查系统日志,获知系统运行状态。

      • 系统日志文件存放的位置:/var/log。( 首要记住存放日志的目录 )

    2. 该目录下的文件

      image-20220321150510747

    3. 系统常用日志( 标红的重点掌握 )

      image-20220321151342572

      • /var/log/secure文件:存放着一些与登录安全相关的信息,主要为—>比如有人想要登录我们的Linux操作系统,结果失败了等,都会在这里留下痕迹。

        image-20220321173616721

    4. 日志管理 服务

      • CentOS7.0——rsyslogd;centos6.0——syslogd

      • 单词理解:Redhat System Log Daemon 红帽系统日志守护进程

      • 用途指明:用来管理Linux系统上的所有日志,比如生成等,全靠它来管理。

      • 重要的rsyslogd配置文件:/etc/rsyslog.conf

        通过修改此配置文件,我们也可以自定义系统内存储的日志系统。

    5. 存在日志轮替 :每隔一段时间自动删除老旧日志文件。

    6. 底层基于crontab定时轮换任务

    7. 内存日志journalctl

      基于内存,重启即消失。——tomcat、mysql等的日志文件可能会“隐藏”于此。

      image-20220321194824076

      journalctl -n 10
      journalctl -p err
      journalctl | grep error
      journalctl -o verbose
      
      • 1
      • 2
      • 3
      • 4

    附录。名词解释

    1. ifconifg:network interfaces configuring

    2. tty:teletype 电报交换机

    3. su :Switch User

    4. sudo:super user do

    5. GUI:Graphical User Interface

    6. CLI:Command Line Interface 命令行界面( cli原来是这个意思,redis里面启动命令就是此! )

    7. bash:Bourne Again Shell

    8. sbin:带s开头的目录范式,system binary

    9. wildcard:通配符

    10. PS1:prompt string 1( 提示字符1

    11. fstab:( file system table )文件系统表,/etc/fatab存储了该系统存储设备的挂载情况

    12. ext4:( Fourth Extended File System )第四代扩展文件系统

    13. synopsis:“ 简要、概述 ”

  • 相关阅读:
    6.12ctf练习
    904. Fruit Into Baskets
    计算机毕业设计Java贺卡商城设计与实现(源码+系统+mysql数据库+lw文档)
    数值分析复习:Richardson外推和Romberg算法
    CCF大会腾源会专场即将召开,聚焦基础软件与开发语言未来发展
    Vue_Bug VUE-ELEMENT-ADMIN默认是英文模式
    基于 Istio 的灰度发布架构方案实践之路
    SpringMVC使用(二)
    中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线,可以进入轻松学编程
    K8s bridge、ip分配原理
  • 原文地址:https://blog.csdn.net/pipidog008/article/details/128005729