Linux笔记

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一。基础思想

  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					#立即重启
    
  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
    
  13. tab提示很好用单机或者双击的规则我已领悟。

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

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

    > a.txt
    
    或者
    
    echo "" > a.txt
    
  16. 日常使用which来查询指令出处。

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


二。基础操作

  1. ls指令

    ls -alh		#隐藏文件、长列表、方便阅读
    ls -R 	#递归子目录
    ls -r		#反序显示
    ls -S		#Size,以文件大小顺序输出
    ls -t		#按修改时间
    
    '注意
    -rreverse
    -RRecursive常用于连续递归子目录
    

    image-20220317114208779

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

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

  4. rm详解

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

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

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

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

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

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

"参数-f输出字段-c输出范围字符"
ls -lh | cut -d " " -f 1 | cut -c 2-10
  1. awk详解
  • 代替cutcut功能受限但是远没有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. dfdu磁盘查看

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

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

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

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

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

    ln a b
    ln -s a b
    
  7. history

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

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

    which ls
    
  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
      
      yum -y install mlocate
      updatedb
      locate xxx
      
    • 范例

      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
      
      
    
    
  11. grep

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

    • 参数含义

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

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

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

    sudo shutdown -h now
    
  14. wc统计

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

    file 具体文件			#事实上怕记也可以使用ls -l查看
    
  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
    
  17. uname显示系统信息

    uname -a		# 显示所有信息
    uname -r		# 显示系统内核版本
    
    [root@VM-4-3-centos]~# uname -r
    3.10.0-1160.59.1.el7.x86_64
    
  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: -
    
  19. netstat指令在网络配置中详解

  20. mount挂载、unmount卸载

mount 		#不加任何参数
'显示所有的挂载情况包括硬盘、网卡、音箱等设备
'格式device    on    mount_point    type   filesystem_type
  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. fstab文件查看存储设备情况

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

  3. iotop查看io读写情况

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

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

      yum -y install iotop
      
      iotop
      

      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. /dev/null垃圾桶

    • 可以将不需要的输出全部重定向至这个文件中神秘消失~
    • 俗称bit bucket 位桶Unix古老概念
    ls / &> /dev/null 
    
  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
    
  4. 系统字符集查看

    "查看字符集的两种方法"
    1. locale
    2. echo $LANG
    
    • 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
    
  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. 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包
        
      • 范例

        #安装JDK1.8
        1. '检查系统中是否存在jdk1.8两种方式'
        rpm -qa | grep jdk
        
        1-1.	'存在即强制卸载'
        rpm -e --nodeps jdk名称		#强制卸载
        
        2. '前提已经拿到jdk的rpm包、并且存储在系统里'
        rpm -ivh rpm包
        
    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				'查看具体信息'
        
      • 范例

        yum -y install java-1.8.0-openjdk.x86_64
        

五。解压缩文件

  1. 常用tar记住即可

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

    1. gzip压缩、gunzip解压

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

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

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

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

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

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

      • 打包和压缩区分

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

      • 参数说明

        tar -zxvf a.tar.gz
        
        -x		'解压文件,extract
        -c		'压缩文件,compress
        
        -z		#支持gzip解压文件
        -v		#显示操作过程verbose
        -f		#指定压缩文件理解指定要解压的压缩文件名
        

六。用户与用户组

  1. 查看用户信息

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

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

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

    su 用户名
    
  5. 退出登录

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

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

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

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

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

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

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

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

    2. 作用在文件

      • r 可读取该文件

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

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

    3. 作用在目录

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

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

七。环境配置

  1. 检查环境配置

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

    2. printenv只显示环境变量

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

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

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

  4. 配置文件读取规则

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

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

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

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

    export PATH=$PATH:~/bin
    
  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
    
    • 意思即官方更加推荐在==/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
    
    • 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] }
    
  2. ping指令详解

    • 作用

      • ping百度检查网络连通性

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

    • 使用说明

      • 默认1秒发送一次包Linux平台默认持续 pingwin平台一般 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
      
      • ttlTime To Live的含义该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。当 ttl = 0 时该数据包就会被路由器丢弃这样就防止了幽灵数据在网络中一直循环浪费互联网资源的情况。

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

    #范例两者差不多
    traceroute baidu.com
    tracepath baidu.com
    
  4. netstat指令详解

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

    • 应用

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

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

  5. ftp指令

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

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

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

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

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

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

    • 查看

      hostname
      
    • 修改

      '方式1重启生效、永久
      "source刷新无效。因为其里面的内容又不是指令只是一行普通字符串而已
      vim /etc/hostname
      
      '方式2本次生效、暂时'
      hostname	xxxx		#修改主机名重启生效。(这只能重启生效)
      
  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. 更加高级的知识

    • Hosts是什么❓

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

    • DNS是什么❓

      • Domain Name System的缩写域名系统

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

      • DNS流程四步

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

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

  2. 自我启示

    image-20220319150356854

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

    效果

    image-20220319150753195


九。进程

  1. 简单概念image-20220330150318682

    • PIDprocess 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
    
  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			#全格式
    
    System V展示风格
    USER 		用户名称
    PID			进程号
    %CPU			进程占用CPU的百分比
    %MEM			进程占用物疆肉拿的首分比
    VSz			进程占用的虚极内存大小单位KB
    RSS			进程占用的物理内存大小单位KB
    TTY				终端名称,缩写。
    
    STAT			进程状态其中S-睡眠S-表示该进程是会话的先导进程N-表示进程拥有比普通优先级更低
    的优先级R-正在运行D-短期等待乙-僵死进程丁-被跟踪或者被停止等等
    
    STARTED	进程的启动时间
    TIME:			 CPU时间即进程使用CPU的总时间
    COMMAND	启动进程所用的命令和参数如果过长会被截断显示
    
  5. pstree指令树型结构显示进程

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

    • 区别

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

      image-20220320085325511

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

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

    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
      

    top指令下的交互

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

十。服务

  1. 介绍

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

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

    • 查看系统服务

      ls /etc/init.d
      

      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
      
    • 提示需要 reboot 重启机器才能生效

  • systemctl

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

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

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

        例如mysqldfirewalld等等

    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 服务名		#查询某个服务是否自启动方法多样
      
      • 使用注意所有的服务后面都带一个后缀 .service 或者其他的后缀。在正式使用的时候我们可以只写前面的服务名而忽略后面的后缀名。

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

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

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

        image-20220320104011026


十一。常用操作

1. 启动SpringBoot程序

  • 前台

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

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

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

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

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

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

2. 防火墙firewall

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

    firewall-cmd --list-ports
    

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
    
      #末尾添加这两句话
      export JAVA_HOME=/usr/local/java/jdk1.8.0_261
      export PATH=$PATH:$JAVA_HOME/bin
    

4. 宝塔安装原理

  1. 先看完整指令

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

    image-20220321132239331

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

    bt
    

    image-20220321134226383

5. 花括号扩展

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

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

    echo {001..100}		'范围数字'
    echo {A..Z}				'范围字母'
    echo {2,4,8}			'截断式数字'
    
  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
    
  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
    

6. man中文手册

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

安装

yum list | grep man.*zh
yum -y install man-pages-zh-CN.noarch
vim /etc/profile		#全局变量
或者
vim ~/.bashrc				#用户变量
alias cman='man -M /usr/share/man/zh_CN'
 ```sh
 source /etc/profile
 ```

7. PS1详解

  1. 初始状态

    [root@VM-4-3-centos ~]$ echo $PS1
    [\u@\h \W]\$
    
  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]\]\\$
    
  4. 持久化PS1

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

    • 范例/etc/profile

      export PS1="[\u@\h \[\033[0;31m\]\W\[\033[0;37m]\]\\$ "
      

8. xargs详解

  • 简介xargs命令从标准输入接受输入将其转换为指定命令的参数列表
  • 使用
find -type f -name "*.txt" | axargs cat
  • 但是注意当文件名中含有空格时上式会发生错误需要用一些参数去避免。
"发生错误的情况"
[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
"解决方案同时利用前后两参数暂时见识即可"
find -name "oo*" -print0|xargs --null rm

9. vim详解

  • 一般模式快捷键
G		#跳转到最后
g		#跳转到开头
A		#调到末尾并且进入编辑模式
0		#调到开头
u		#撤回
---------
dd	#删除当前行
---------
20 shift+g		#跳转到第20行
:q!		#强制退出 
  • 在vim中最后保存文件时有个重命名的小技巧如此一来则会另外创建一文件而不会删除原来文件。也等于是直接又创建了一个文件并且重命名。

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

    img

10. 指定运行级别

  • init 指定运行级别

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

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

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

    image-20220326112153685

    image-20220326112208218

  • 一般选择VNC登录桌面

    image-20220919200603702

11. 查找空文件

find . -type f -empty
find -size 0
ls -l|awk '{print 9,"\t",9,"\t",5}'

12. 文件、目录统计

  1. 统计目录下的文件或者子目录个数

    • 正则表达式

    • 文件-==目录==d

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

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

    ls -lR
    
    ls -lR | grep "^-"|wc -l
    
    '附加ls下-r与-R的区别
    -rreverse
    -RRecursive
    

13. 磁盘分区、挂载、树型结构图查看

img

14. Ubuntu 设置密码

  • 系统默认登录时都是普通用户整个系统中不存在root用户。

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

    sudo passwd
    ---输入普通用户的密码
    ---输入root用户的新密码
    ---再次输入
    
    su -		#切换即可
    

15. 制作Minix

  1. 制作属于自己的一个小型Linux——Minix

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

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

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

    • 思路 在一个正常的Linux上新建一块纯净硬盘 设置新硬盘名字并且记住 在新硬盘上创建两个分区a和b例a为1GBb为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
      
    • 升级

      yum update kernel
      

      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
    
    #crontab参数
    -e		# edit编辑crontab定时任务
    -l		# list查询当前所有的crontab任务
    -r		# removeAll删除当前用户的所有crontab任务
    
    • ==*==占位符的说明

      项目含义范围
      ***** * * * *一小时当中的第几分钟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
      

      使用了==&&==

18. atd 定时单次任务

  1. 说明

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

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

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

      ps -ef|grep atd
      
  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
      

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

      image-20220319085853262


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

      image-20220319090016042

19. 锁定重要文件

  1. chattr指令

    • chattrchange attribute 改变属性

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

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

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

    • 参数

      chattr +i /etc/passwd		#加锁
      chattr -i /etc/passwd		#减锁
      
      chattr -V		#显示操作过程
      chattr -R		#递归操作
      

      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
    
  • 解压、进入、执行命令

    tar -zxvf chkrootkit.tar.gz
    cd chkrootkit-0.55
    ./chkrootkit
    
  • 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		
    
  2. 两种启动方式

    '1. 赋予可执行权限
    chmod 777 xxx
    ./xxx
    
    '2.不赋予权限,sh执行
    sh xxx
    
    '特例后台运行脚本
    ./1.sh &
    
  3. 全局变量

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

    image-20220323102723877

  4. 局部变量

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

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

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

    image-20220323101412905

  7. 简单运算符

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

    image-20220323105449097

  8. 暂时跳过后续内容。


十三。函数式编程略

暂定


十四。正则表达式

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

  2. grepglobal regular expression print

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

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

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

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

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

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

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

    • 新办法grep -E

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

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

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

  12. 重磅操作

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


十五。修改MySQL密码

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

  2. 思路

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

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

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

    image-20220322145107161

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

十六。找回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——rsyslogdcentos6.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. ifconifgnetwork interfaces configuring

  2. ttyteletype 电报交换机

  3. su Switch User

  4. sudosuper user do

  5. GUIGraphical User Interface

  6. CLICommand Line Interface 命令行界面 cli原来是这个意思redis里面启动命令就是此

  7. bashBourne Again Shell

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

  9. wildcard通配符

  10. PS1prompt string 1 提示字符1

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

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

  13. synopsis“ 简要、概述 ”

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux