linux学习第三周总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习第三周总结相关的知识,希望对你有一定的参考价值。

linux学习第三周总结

学习linux的第三周,也是惊喜最多的一周,让我看到学linux并不是很枯燥,相反非常有趣,可玩性很多,但越深入越觉得可学习的地方有很多,也有非常多的不足,所以革命尚未成功,同志更需努力

同样来简单终结一下本周的重点,内容比较多,说要简单提一下,不做详解

一、shell脚本编程基础

内容:1. 编程基础 2. 脚本基本格式3. 变量4.运算5.条件测试6.条件判断if 7.条件判断case 8.配置用户环境

shell脚本:包含一些命令或声明,并符合一定格式的文本文件  
格式要求:首行shebang机制  
    #!/bin/bash
    #!/usr/bin/python
    #!/usr/bin/perl  
shell脚本的用途有:
    自动化常用命令
    执行系统管理和故障排除
    创建简单的应用程序
    处理文本或文件
bash中变量的种类 
    局部变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
    环境变量:生效范围为当前shell进程及其子进程
    本地变量:生效范围为当前shell进程中某代码片断,通常指函数
    位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
    特殊变量:$?, $0, $*, [email protected], $#,$$
算术运算和逻辑运算
    算术运算:help let
        +, -, *, /, %取模(取余), **(乘方)  
    逻辑运算true (0), false(1)
条件测试
    断某需求是否满足,需要由测试机制来实现专用的测试表达式需要由测试命令辅助完成测试过程  
    test EXPRESSION  
    [ EXPRESSION ]  
    [[ EXPRESSION ]]
    COMMAND1 && COMMAND2 并且,短路与,代表条件性的AND THEN
    COMMAND1 || COMMAND2 或者,短路或,代表条件性的OR ELSE
    ! COMMAND 非
    如:[ -f “$FILE” ] && [[ “$FILE”=~ .*.sh$ ]]
使用read来把输入值分配给一个或多个shell变量
条件选择if语句
    单分支
        if 判断条件;then
            条件为真的分支代码
        fi
    双分支
        if 判断条件; then
            条件为真的分支代码
        else
            条件为假的分支代码
        fi
case语句

二、文件查找和压缩

文件查找
在文件系统上查找符合条件的文件
文件查找:locate, find
    非实时查找(数据库查找):locate
    实时查找:find
locate查询系统上预建的文件索引数据库 
    locate KEYWORD
find实时查找工具,通过遍历指定路径完成文件查找
    find [OPTION]... [查找路径] [查找条件] [处理动作]
压缩、解压缩及归档工具 
    tar zcvf file.tar.gz  /etc/   file.tgz
    tar jcvf file.tar.bz2 /etc/
    tar Jcvf file.tar.xz  /etc 
    tar Jxvf file.tar.xz -C /data/
    tar xvf file.tar.xz  

三、处理文本的工具sed

Stream EDitor, 行编辑器
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。  

功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
用法:sed [option]... ‘script‘ inputfile..
常用选项:
    -n 不输出模式空间内容到屏幕,即不自动打印
    -e 多点编辑
    -f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
    -r 支持使用扩展正则表达式
    -i.bak 备份文件并原处编辑
编辑命令:
    d 删除模式空间匹配的行,并立即启用下一轮循环
    p 打印当前模式空间内容,追加到默认输出之后
    a []text 在指定行后面追加文本,支持使用
实现多行追加
    i []text 在行前面插入文本
    c []text 替换行为单行或多行文本
    w /path/file 保存模式匹配的行至指定文件
    r /path/file 读取指定文件的文本至模式空间中匹配到的行后
    = 为模式空间中的行打印行号
    ! 模式空间中匹配行取反处理
sed工具
   s/// 查找替换,支持使用其它分隔符,[email protected]@@;s### 
    替换标记:
        g   行内全局替换
        p 显示替换成功的行
        w /PATH/FILE 将替换成功的行保存至文件中

四、软件包管理

包和包管理器
最初只有.tar.gz的打包的源码文件,用户必须编译每个他想在GNU/Linux上运行的软件。用户们急需系统提供一种方法来管理这些安装在机器上的软件,当Debian诞生时,这样一个管理工具也就应运而生,它被命名为dpkg。从而著名的“package”概念第一次出现在GNU/Linux系统中,稍后Red Hat才开发自己的“rpm”包管理系统
包的组成:
    二进制文件、库文件、配置文件、帮助文件
程序包管理器:
    debian: deb文件, dpkg包管理器
    redhat: rpm文件, rpm包管理器
    rpm:Redhat Package Manager
        RPM Package Manager
包之间:可能存在依赖关系,甚至循环依赖
解决依赖包管理工具:
    yum:rpm包管理器的前端工具
    apt:deb包管理器前端工具
    zypper:suse上的rpm前端管理工具
    dnf:Fedora 18+ rpm包管理器前端管理工具
库文件
映射关系
    配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
    缓存文件:/etc/ld.so.cache
程序包管理器:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
包文件组成 (每个包独有)
    RPM包内的文件
    RPM的元数据,如名称,版本,依赖性,描述等
    安装或卸载时运行的脚本
数据库(公共):/var/lib/rpm
    程序包名称及版本
    依赖关系
    功能说明
    包安装后生成的各文件路径及校验码信息
获取程序包的途径
    系统发版的光盘或官方的服务器
    CentOS镜像:
        https://www.centos.org/download/
        http://mirrors.aliyun.com
        http://mirrors.sohu.com
        http://mirrors.163.com
        项目官方站点
包查询
    rpm {-q|--query} [select-options] [query-options]
        -a:所有包
        -f:查看指定的文件由哪个程序包安装生成
        -p rpmfile:针对尚未安装的程序包文件做查询操作
        --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
        --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖
        -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
包卸载:
    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_
    当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
yum客户端配置文件:    
    /etc/yum.conf:为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo:为仓库的指向提供配置
    [cdrom]
    name=cdromrepo
    baseurl=file:///mnt/
    gpgkey=file:///mnt/RPM-GPG-KEY-CentOS-

    [epel]
    name=epel
    baseurl=http://mirrors.sohu.com/fedora-epel/7/x86_64/
    gpgkey=http://mirrors.sohu.com/fedora-epel/RPM-GPG-KEY-EPEL-7
yum源   
阿里云repo文件
    http://mirrors.aliyun.com/repo/
CentOS系统的yum源
?阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
EPEL的yum源
阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
阿里巴巴开源软件
https://opsx.alibaba.com/
DNF (DaNdiFied)
DNF 介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管理器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等
安装所需软件包,依赖epel源
    wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm 
    wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm 
    wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm 
    yuminstallpython-dnf-0.6.4-2.sdl7.noarch.rpmdnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm
配置文件:/etc/dnf/dnf.conf 
仓库文件:/etc/yum.repos.d/ *.repo
日志: /var/log/dnf.rpm.log 
DNF 使用与yum一致 
程序包编译
    源代码-->预处理-->编译-->汇编-->链接-->执行
    源代码组织格式:
        多文件:文件中的代码之间,很可能存在跨文件依赖关系
        C、C++:make 项目管理器
            configure脚本--Makefile.in--> Makefile
        java: maven
C语言源代码编译安装三步骤:
1、./configure
    (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile
    (2) 检查依赖到的外部环境,如依赖的软件包
2、make 根据Makefile文件,构建应用程序
3、make install 复制文件到相应路径

以上是关于linux学习第三周总结的主要内容,如果未能解决你的问题,请参考以下文章

linux及安全第三周总结——20135227黄晓妍

20165315 第三周学习总结

《数据结构与面向对象程序设计》第三周学习总结

20172306第三周学习总结

信息安全系统设计基础第三周学习总结

20165225《Java程序设计》第三周学习总结