Linux笔记-3

软件安装

概述

  1. 在Linux中,软件安装分为3种方式:绿色安装(压缩包解压之后就能直接使用),rpm安装(类似于Windows中的exe或者msi文件),yum安装

  2. RPM(Red Hat Package Manager):红帽提供的软件包的管理工具。可以通过rpm命令来安装软件

    1. rpm包的命名格式:软件名称-版本号-能够运行的平台.rpm

    2. 基本命令

      1. 已经安装了哪些rpm

        rpm -qa
        # -q,query,查询
        # -a,all,所有
        
      2. 确定是否安装了具体的软件,例如MySQL

        rpm -qa | grep -i mysql
        
      3. 卸载软件

        # 查询这个软件
        rpm -qa | grep -i nmap
        # 卸载软件
        # -e,establish,卸载
        # -v,verbose,详细信息
        # --nodeps,忽略依赖
        rpm -ev --nodeps nmap-ncat-6.40-16.el7.x86_64
        
      4. 安装rpm包

        # -i,install,安装
        # -v,verbose,详细过程
        # -h,hash,校验哈希码
        rpm -ivh nc-1.84-22.el6.x86_64.rpm
        

YUM

  1. YUM(yellow dog updater Modifier):Red Hat提供的一款软件管理工具,基于rpm来进行的安装

  2. 在进行rpm安装的时候,有时候会碰到非常多的依赖,所以红帽公司就提供了YUM用于解决依赖问题。在进行yum安装的时候,自动将需要的依赖按照规定顺序来下载和安装

  3. 基本命令

    1. 查看已经安装所有的软件

      # -y,yes,确认
      yum -y list
      
    2. 查看是否已经安装了具体的软件

      yum -y list | grep -i mysql
      
    3. 卸载软件

      yum -y remove firefox
      
    4. 安装软件

      yum -y install firefox
      
    5. 清理缓存

      yum -y clean
      
  4. yum源:默认情况下,YUM源是国外Apache的源,也因此下载效率相对较低。当国外源无法连接的时候,自动的切换到国内的yum源。本机yum源由/etc/yum.repos.d/CentOS-Base.repo决定

  5. 实际过程中,一般会将yun源替换为国内的yum源,比较常用的是阿里、华为、网易、腾讯等

补充

上传/下载

  1. 安装工具

    yum -y install lrzsz
    
  2. 下载命令

    sz 文件名
    
  3. 上传

    rz
    

Shell

概述

  1. Shell是一个命令解释器,接收用户/程序的操作/指令,然后将指令解析之后交给操作系统的内核来执行

  2. Shell本身也可以看作是一门编程语言,相对易于书写,灵活性很强

  3. Linux中提供了Shell解析器

    sh是bash的软链接,所以执行sh和使用bash的效果是相同的

  4. Centos中默认使用的是/bin/bash

入门脚本

  1. 默认情况下,脚本是以.sh作为结尾

  2. 规定:所有的Shell脚本的第一行必须是#!/bin/bash,指定这个Shell脚本的解析器

  3. 步骤

    1. 创建空文件

      cd /opt
      mkdir shelldemo
      cd shelldemo
      touch demo.sh
      
    2. 编辑脚本

      vim demo.sh
      
    3. 定义脚本

      #!/bin/bashecho 'Hello world!
      
    4. 赋权

      chmod u+x demo.sh
      
  4. 执行脚本

    # 方式一:bash/sh 相对路径
    sh demo.sh
    bash demo.sh
    sh ./demo.sh
    bash ./demo.sh
    # 方式二:bash/sh 绝对路径
    sh /opt/shelldemo/demo.sh
    # 方式三:. 相对路径
    . demo.sh
    . ./demo.sh
    
  5. 案例

    1. 定义脚本

      touch demo2.sh
      
    2. 编辑脚本

      vim demo2.sh
      
    3. 添加内容

      #!/bin/basha=2
      echo $a
      
    4. 执行脚本

    5. sh和.的区别:

      1. sh在当前系统解析器中开启了一个新的子解析器来执行这个脚本,当脚本执行完成之后,这个子解析器会一起关闭
      2. .表示直接在当前的解析器中解析这个脚本

变量

  1. 定义变量:

    变量名=变量值
    # 注意:在Linux中,空格表示隔断,所以定义变量的时候不要写空格!!!
    a=2
    # a = 2是错误的
    
  2. 如果要引用变量,是通过$变量名来使用

  3. 在Linux中,所有的数据默认都是字符串。如果数据中有空格,那么需要使用单引号或者双引号来标记

    # echo hello world 是错误的
    echo 'hello world'
    echo "hello world"
    
  4. 销毁变量

    # unset 变量名
    unset a
    
  5. 在Linux中,预定义了大量的变量,例如PATHUSER

  6. 只读变量

    readonly 变量名=变量值
    # 定义好只能读不能改,类似于Java中的常量
    # readonly定义的变量不能被销毁
    
  7. export:提升变量,将变量提升为全局变量,在整个系统中可用。一般环境变量都会使用export

  8. 运算

    # 方式一:$[ 运算 ]
    echo $[ 2+3 ]
    # 方式二: $(( 运算 ))
    echo $(( 2+3 ))
    # 案例
    a=4
    b=5
    echo $[ $a+$b ]
    echo $(( $a+$b ))
    
  9. $n:n是一个数字。n=0,表示获取当前脚本文件的名字;n=1~9表示获取第1-9个参数,如果n≥10,表示第10个及以上的参数,此时需要写成${n},例如${10}${11}

    vim vardemo1.sh
    # 在文件中添加
    #!/bin/bashecho '文件名:'$0
    echo '参数1:'$1
    echo '参数2:'$2
    echo '和:'$[ $1+$2 ]
    # 保存退出,执行脚本
    sh vardemo1.sh 3 6
    
  10. 其他

    vim vardemo2.sh
    # 添加内容
    #!/bin/bashecho '参数个数:'$#
    echo '所有参数:'$*
    echo '所有参数:'$@
    # 保存退出,执行脚本
    sh vardemo2.sh 2 8 5 8 1 2 5 1 26 748
    

条件判断

  1. 格式

    # 格式一:test 条件
    test 4 -gt 3
    # 格式二:[ 条件 ]
    [ 4 -gt 3 ]
    # []中如果不是条件,那么只要不是空的就成立
    [ fesco ] # 成立
    [ ] # 不成立
    
  2. 如果需要获取判断结果,需要通过$?。如果上一条命令正确执行,那么返回0

  3. 条件符号(数字)

    符号解释
    -gtgreater than,大于
    -gegreater than or equal,大于等于
    -eqequal,等于
    -leless than or equal,小于等于
    -ltless than,小于
    -nenot equal,不等
  4. 如果是字符,可以通过=或者!=来判断

  5. 文件

    # -r 判断文件是否可读
    [ -r demo.sh ]
    # -w 判断文件是否可写
    [ -w demo.sh ]
    # -x 判断文件是否可执行
    [ -x demo.sh ]
    # -f 判断是否是一个文件
    [ -f demo.sh ]
    # -d 判断是否是一个目录
    [ -d demo.sh ]
    # -e 判断文件是否存在
    [ -e demo.sh ]
    

流程控制

if结构

  1. 基本格式

    # 格式一
    if [ 条件 ];then逻辑
    fi
    或者
    if [ 条件 ]
    then逻辑
    fi
    # 格式二
    if [ 条件 ]
    then逻辑1
    else逻辑2
    fi
    # 格式三
    if [ 条件 ]
    then逻辑1
    elif [ 条件 ]
    then逻辑2
    ...
    else逻辑
    fi
    
  2. 案例

    vim ifdemo.sh
    # 添加内容
    #!/bin/bashif [ $(( $1 % 2)) -eq 1 ]
    thenecho $1'是一个奇数'
    elseecho $1'是一个偶数'
    fi
    # 保存退出,执行脚本
    sh ifdemo.sh 5
    

case结构

  1. case结构类似于Java中的switch-case

    case 变量 in 
    "值1")逻辑
    ;;
    "值2")逻辑
    ;;
    ...
    *)逻辑
    ;;
    esac
    
  2. case结构实际过程中经常用于脚本的集群命令

    vim casedemo.sh
    # 在文件中添加
    #!/bin/bashcase $1 in
    "start")echo '启动xxx'
    ;;
    "stop")echo '停止xxx'
    ;;
    "restart")echo '重启xxx'
    ;;
    *)echo '未知的操作'
    ;;
    esac
    # 保存退出,执行脚本
    sh casedemo.sh start
    

for结构

  1. 基本结构

    # 方式一
    for (( 初始值;条件;变化 ))
    do逻辑
    done
    # 方式二
    for 变量 in 值1, 值2, 值3, ...
    do逻辑
    done
    
  2. 案例一:求1-100的和

    vim fordemo.sh
    # 在文件中添加
    #!/bin/bashsum=0
    for (( i=1;i<=100;i++ ))
    dosum=$[ $sum+$i ]
    doneecho $sum
    # 保存退出,执行脚本
    sh fordemo.sh
    
  3. 案例二:求输入的所有参数的和

    vim fordemo2.sh
    # 添加
    #!/bin/bashsum=0
    for i in $*
    dosum=$[ $sum+$i ]
    done
    echo $sum
    # 保存并执行
    sh fordemo2.sh 5 6 4 1 7 9 2
    

while结构

  1. 基本格式

    while [ 条件 ]
    do逻辑
    done
    
  2. 案例:求1-100的和

    vim whiledemo.sh
    # 添加内容
    #!/bin/bashsum=0
    i=1
    while [ $i -le 100 ]
    dosum=$[ $sum+$i ]i=$[ $i+1 ]
    done
    echo $sum
    # 保存并执行
    sh whiledemo.sh
    

函数

  1. 在Shell中,统一通过function来定义函数

  2. 格式

    function 函数名()
    {逻辑[return 返回值]
    }
    
  3. Shell是一门解释型语言,也就意味着,Shell是逐行解释执行,也就是说,函数必须先定义后使用

  4. 不同于Java的地方在于,Shell中的函数的返回值只能是整数(0~255)。如果不写return语句,那么默认函数的最后一行代码的执行结果就是返回值

  5. 案例:求两个整数的和

    vim functiondemo.sh
    # 添加
    #!/bin/bashfunction sum()
    {# 在函数中,$n的形式表示第几个参数sum=$[ $1+$2 ]echo $sum
    }sum 3 5;
    
  6. 系统自带函数:

    1. basename:截取路径中的文件名
    2. dirname:截取路径中的目录

常用工具

  1. wc:word count的缩写,可以统计文件中字节个数、字符数量、列数等

    # -l,line,行数
    # -w,word,单词数
    # -m,字符数
    # -c,字节数
    wc -l -w -m -c b.cfg
    
  2. cut:针对数据进行处理,可以从一行数据中剪切出指定的部分

    # -d,descriptor,间隔符号,默认是制表符
    # -f,剪切之后要获取第几列
    echo $PATH | cut -d ':' -f 4
    echo $PATH | cut -d ':' -f 3-5
    
  3. sed:是一个流式编辑器,一次处理一行内容,可以对文件进行复杂的操作

    1. 命令格式

      sed [参数] command 文件
      
    2. 追加操作

      # a:在指定行之后追加
      # 在a.txt第二行后追加一行hello
      sed '2ahello' a.txt
      # 在指定内容之后追加一行hi
      sed '/tom/ahi' a.txt
      # i-在指定行之前追加一行
      # 在第4行之前追加一行big
      sed '4ibig' a.txt
      # 在指定数据之前追加一行big
      sed '/bruce/ibig' a.txt
      # 在最后一行追加
      sed '$abig' a.txt
      
    3. 修改/替换操作

      # c:修改指定的内容
      # 将第三行修改为aaa
      sed '3caaa' a.txt
      

将b开头的行修改为alex

  sed '/^b/calex' a.txt# 将最后一行替换为hellosed '$chello' a.txt```
  1. 删除操作

    # d:删除
    # 删除第四行
    sed '4d' a.txt
    # 删除最后一行
    sed '$d' a.txt
    # 删除第3~5行
    sed '3,5d' a.txt
    # 删除奇数行 n~md从第n行开始,每m行删除一次
    sed '1~2d' a.txt
    # 删除除了3~5行以外的其他行
    sed '3,5!d' a.txt
    # 删除包含指定内容的行,例如删除包含m的行
    sed '/m/d' a.txt
    # 从找到含有y的行开始,删除到最后
    sed '/y/,$d' a.txt
    # 从找到含有y的行开始,继续往下删除2行
    sed '/y/,+2d' a.txt
    # 删除含有m或者含有y的行
    sed '/m\|y/d' a.txt
    # 删除第3行~第7行之间含有m的行
    sed '3,7{/m/d}' a.txt
    # 删除空行
    sed '/^$/d' a.txt
    
  2. 替换操作

    # s:替换数据,而不是整行
    # 将m替换为a
    sed 's/m/a/' a.txt
    # 等价于 -- g代表全部
    sed 's/m/a/g' a.txt
    # i-忽略大小写
    sed 's/m/a/i' a.txt
    # w-保存,将产生了修改的数据放到指定的文件中
    sed 's/m/a/w c.txt' a.txt
    # -n表示保留被操作过的数据
    # p表示打印匹配的内容
    sed -n 's/m/a/p' a.txt
    
  3. 打印操作

    # p:打印匹配的内容,一般结合-n使用
    # 打印文件的所有行
    sed -n 'p' a.txt
    # 只显示第5行
    sed -n '5p' a.txt
    # 每隔2行打印一次
    sed -n '1~3p' a.txt
    # 打印1~3行
    sed -n '1,3p' a.txt
    # 打印最后一行
    sed -n '$p' a.txt
    
  4. 读取操作

    # r-从一个文件中读取写入另一个文件
    # 从a.txt的第5行开始插入c.txt的内容,然后继续读取a.txt
    sed '5r c.txt' a.txt
    # 从b开头的行开始,插入c.txt的内容
    sed '/^b/r c.txt' a.txt
    # 需要在a.txt的最后一行插入
    sed '$r c.txt' a.txt
    
  5. 写入操作

    # w-写入另一个文件
    # 将a.txt的数据覆盖到c.txt中
    sed 'w c.txt' a.txt
    # 将a.txt的第2行数据覆盖到c.txt中
    sed '2w c.txt' a.txt
    # 将a.txt的含有m的数据覆盖到c.txt中
    sed '/m/w c.txt' a.txt
    
  6. awk:对数据进行逐行处理,可以对数据进行切分

    # -F 指定间隔符
    # 搜索passwd文件中,以root开头的所有的行,并且打印该行的第3个字段
    awk -F: '/^root/{print $3}' /etc/passwd
    # 第三列和第五列
    awk -F: '/^root/{print $3,$5}' /etc/passwd
    # 获取第一列(用户)和第六列(数据目录列),并且在第一行打印"user,data_home",在末尾打印一个"end"
    awk -F: 'BEGIN{print "user,data_home"} {print $1,$6} END{print "end"}' /etc/passwd
    # awk中内置了其他命令:FILENAME-文件名,NR-已读取的行数,NF-切分完之后产生了多少列
    awk -F: '{print "filename:"FILENAME",line:"NR",columns:"NF}' /etc/passwd
    # 查询文件中空行对应的行号
    awk '/^$/{print NR}' a.txt
    
  7. sort:对文件中的数据排序,默认是按照字典序

    # -n:按照大小排序
    sort -n a.txt
    # -r:逆序排序
    sort -r a.txt
    # -k:指定排序列
    # -u:不重复,unique
    

t
```

  1. awk:对数据进行逐行处理,可以对数据进行切分

    # -F 指定间隔符
    # 搜索passwd文件中,以root开头的所有的行,并且打印该行的第3个字段
    awk -F: '/^root/{print $3}' /etc/passwd
    # 第三列和第五列
    awk -F: '/^root/{print $3,$5}' /etc/passwd
    # 获取第一列(用户)和第六列(数据目录列),并且在第一行打印"user,data_home",在末尾打印一个"end"
    awk -F: 'BEGIN{print "user,data_home"} {print $1,$6} END{print "end"}' /etc/passwd
    # awk中内置了其他命令:FILENAME-文件名,NR-已读取的行数,NF-切分完之后产生了多少列
    awk -F: '{print "filename:"FILENAME",line:"NR",columns:"NF}' /etc/passwd
    # 查询文件中空行对应的行号
    awk '/^$/{print NR}' a.txt
    
  2. sort:对文件中的数据排序,默认是按照字典序

    # -n:按照大小排序
    sort -n a.txt
    # -r:逆序排序
    sort -r a.txt
    # -k:指定排序列
    # -u:不重复,unique
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/269019.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Github项目推荐-LightMirrors

项目地址 https://github.com/NoCLin/LightMirrors 项目简述 “LightMirrors是一个开源的缓存镜像站服务&#xff0c;用于加速软件包下载和镜像拉取。目前支持DockerHub、PyPI、PyTorch、NPM等镜像缓存服务。 当前项目仍处于早期阶段。”–来自项目说明。 也就是说&#xff…

vue中使用prettier

前言&#xff1a;prettier是一款有态度的代码格式化工具&#xff0c;它可以集成在IDE中&#xff0c;如VS Code、Web Storm等&#xff0c;也可以安装到我们开发的项目里面。本文主要讲解在Vue中集成prettier的过程&#xff0c;可以便于代码检测和格式化。 prettier官网 从官网的…

ardupilot 及PX4姿态误差计算算法对比分析

目录 文章目录 目录摘要1.APM姿态误差计算算法2.PX4姿态误差计算算法3.结论摘要 本节主要记录ardupilot 及PX4姿态误差计算算法差异对比过程,欢迎批评指正。 备注: 1.创作不易,有问题急时反馈 2.需要理解四元物理含义、叉乘及点乘含义、方向余弦矩阵含义、四元数乘法物理含…

vue+element ui上传图片到七牛云服务器

本来打算做一个全部都是前端完成的资源上传到七牛云的demo&#xff0c;但是需要获取token&#xff0c;经历了九九八十一难&#xff0c;最终还是选择放弃&#xff0c;token从后端获取&#xff08;springboot&#xff09;。如果你们有前端直接能解决的麻烦记得私我哦&#xff01;…

【最新】如何将idea上的项目推送到gitee

1.打开Gitee&#xff0c;在首页&#xff0c;点击“”&#xff0c;创建一个仓库 2.填写仓库基本信息 3.下拉&#xff0c;点击“创建”&#xff0c;出现下方页面&#xff0c;证明仓库创建成功。 4.打开idea&#xff0c;下载gitee的插件&#xff08;此处默认已经下载git&#xff0…

布隆过滤器实战

一、背景 本篇文章以解决实际需求的问题的角度进行切入&#xff0c;探讨了如果使用布隆过滤器快速丢弃无效请求&#xff0c;降低了系统的负载以及不必要的流量。 我们都知道布隆过滤器是以占用内存小&#xff0c;同时也能够实现快速的过滤从而满足我们的需求&#xff0c;本篇…

termux上安装Python

Termux是一款Android平台下的终端模拟器和Linux环境应用&#xff0c;它允许用户在移动设备上访问Linux命令行界面&#xff0c;以便使用命令行工具、脚本、开发环境等功能。 要在Termux上安装Python&#xff0c;请按照以下步骤进行操作&#xff1a; 一&#xff0c;下载termux …

温湿度传感器SHT21

SHT21是一款基于IIC的温湿度传感器&#xff0c;它的引脚及定义如下&#xff1a; 标准的IIC器件&#xff0c;没有其他多余的引脚&#xff0c;应用框图如下&#xff1a; 温度的测量范围是-40到125℃&#xff0c;湿度测量范围0-100%RH&#xff0c;具体参数及采样精度见下图&#x…

如何限制一个账号只在一处登陆

大家好&#xff0c;我是广漂程序员DevinRock&#xff01; 1. 需求分析 前阵子&#xff0c;和问答群里一个前端朋友&#xff0c;随便唠了唠。期间他问了我一个问题&#xff0c;让我印象深刻。 他问的是&#xff0c;限制同一账号只能在一处设备上登录&#xff0c;是如何实现的…

C语言操作符详解(一)

一、操作符的分类 • 算术操作符&#xff1a; 、- 、* 、/ 、% • 移位操作符:<< >> • 位操作符: & | ^ • 赋值操作符: 、 、 - 、 * 、 / 、% 、<< 、>> 、& 、| 、^ • 单⽬操作符&#xff1a; &#xff01;、、--、&、*、、…

嵌入式基础知识-信号量,PV原语与前趋图

本篇来介绍信号量与PV原语的一些知识&#xff0c;并介绍其在前趋图上的应用分析。本篇的知识属于操作系统部分的通用知识&#xff0c;在嵌入式软件开发中&#xff0c;同样会用到这些知识。 1 信号量 信号量是最早出现的用来解决进程同步与互斥问题的机制&#xff08;可以把信…

深入了解 Android 中的 FrameLayout 布局

FrameLayout 是 Android 中常用的布局之一&#xff0c;它允许子视图堆叠在一起&#xff0c;可以在不同位置放置子视图。在这篇博客中&#xff0c;我们将详细介绍 FrameLayout 的属性及其作用。 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/androi…

计算机组成原理(超详解!!) 第一节 导论

1.计算机的性能指标 1.字长 一般大型计算机字长为32位或64位&#xff1b; 小型计算机字长为16位或32位&#xff1b;微型计算机字长有1位、4位、8位、16位&#xff1b; 高档微型计算机字长为32位和64位。对于字长短的计算机&#xff0c;为了提高计算精度&#xff0c;采用多字…

基于SSM的农业电商服务系统(农产品销售管理系统)(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的农业电商服务系统&#xff08;农产品销售管理系统&#xff09;&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#…

可视化大屏实现屏幕自适应和自动全屏的实现

前言 在可视化大屏项目中&#xff0c;屏幕适配是绕不过去的一个问题&#xff08;ps&#xff1a;如果知道大屏展示的屏幕是固定的&#xff0c;当我没说&#xff09;。这里简单介绍通过 css的transform属性 里面的 scal() 实现常规屏幕适配。 常规屏幕&#xff1a; 1366 * 768…

【蓝桥备赛】双指针

日志统计 双指针在算法中也是经常会用到的&#xff0c;比如原地交换数组中的元素就可以用双指针来做&#xff0c;但是有的时候可能看不出来是双指针的思想。 对于一对数字可以用pair类型&#xff0c;cnt表示类型的次数&#xff0c;bool数组表示当前是否符合大于等于k的条件。 …

Vue.js+SpringBoot开发高校实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

Unity游戏输入系统(新版+旧版)

使用新版还是旧版 旧版 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c5 : MonoBehaviour {void Start(){}void Update(){// 注意要在游戏中 点鼠标键盘进行测试// 鼠标// 0左键 1右键 2滚轮if (Input.GetMouseButtonDown(0)…

【千字总结】爬虫学习指南-2024最新版

介绍 如何自学爬虫&#xff1f;今天有一个兄弟这样问我&#xff0c;可以看到打了很多字&#xff0c;诚意肯定是很足的&#xff0c;也是对我的内容给予了肯定&#xff0c;让我非常的开心。既然难得有人问我&#xff0c;那我一定要好好做一个回答。 我下面将要说的内容没有任何话…

【Maven】Maven 基础教程(四):搭建 Maven 私服 Nexus

《Maven 基础教程》系列&#xff0c;包含以下 4 篇文章&#xff1a; Maven 基础教程&#xff08;一&#xff09;&#xff1a;基础介绍、开发环境配置Maven 基础教程&#xff08;二&#xff09;&#xff1a;Maven 的使用Maven 基础教程&#xff08;三&#xff09;&#xff1a;b…