• linux(2)


    一、软硬件的体系结构:
      1、硬件体系: IPO
        Input Process 处理 Output
        输入设备 ----- 主机 ----- 输出设备
        (键盘、鼠标等) (显示器、打印机等)
        (CPU、内存、硬盘)

      2、软件体系:主流的B/S、C/S架构为例 三层架构
        如何搭建一个测试环境?
          根据需求,具体问题具体分析

          被测系统 SUT
          ___________________________________
          Client -网络- Application Server -网络- DB Server
          客户端 应用服务器 数据库服务器
        1)硬件
          PC、移动设备 服务器、工作站、 服务器、工作站、
          小型机 小型机
        2)操作系统(系统软件)
          PC:Windows/Linux/Mac Linux/Unix Linux/Unix
          移动:Android/IOS/WP
        3)中间件(提供特殊的公共服务的软件)
          无 Web/应用服务器软件 DBMS数据库管理系统
          Tomcat/Weblogic容器 Mysql/Oracle/DB2
        4)应用程序
          B/S: 浏览器 部署Web App 搭建数据库
          C/S: 各种App 企业级应用 维护表、数据等
            请求Request ---> 处理 ------> 增删查改
            响应Response <--- <------

          提示:多和开发方沟通,共同搭建整个测试环境;
            包括系统架构、需求方、产品经理、项目经理、测试经理、SA、DBA等,搭建环境是整个团队的任务。
            系统管理员 数据库管理员

    二、Linux/Unix系统基本层次结构
      从外到内:
      应用程序(用户)<-> Linux操作系统 <-> 硬件
        (Shell <-> Kernel 内核)


      1、shell (直译:外壳) 命令解释器(翻译、解释命令)
        介于用户和内核之间,提供与系统的命令交互;
        shell本身也是一个进程,具有启动的命令
        表现形式:终端、命令行窗口
        常见的shell: bash csh sh ksh ... (都是命令 可执行文件)
        类似于Windows: cmd 命令行窗口
          C:windowssystem32cmd.exe 可执行文件
        查看当前是什么shell,使用查看进程的命令:ps
          不加选项 -ef 只能查看部分进程:
        进程id 伪终端号 启动该进程的命令名
          PID TTY TIME CMD
          2487 pts/0 00:00:00 bash 当前默认shell进程
          2523 pts/0 00:00:00 ps
        可以切换shell:
          csh
          sh
          bash

        PID TTY TIME CMD
        2487 pts/0 00:00:00 bash
        2526 pts/0 00:00:00 csh
        2547 pts/0 00:00:00 sh
        2549 pts/0 00:00:00 bash
        2570 pts/0 00:00:00 ps

        不同shell,区别在于使用方式有差别,支持的命令基本一致
        shell的切换的本质就是在当前shell进程中启动子进程;
        exit可以结束当前进程,返回父进程;
        最后一次exit表示退出登录;
        刚登录成功后,系统会默认启动一个shell进程,当前是bash
        bash是目前常用的shell,符合大众习惯。
        shell环境下可以写脚本:shell编程 -- shell脚本
          目的:对系统进行自动化管理、对测试进行辅助管理
          将一些命令联合编写为代码,有逻辑的运行。
          对命令的自动化的编程。

      2、Kernel 内核:和硬件交互,比较底层,将硬件管理起来,将硬件屏蔽掉。比如:swap space 交换区(虚拟内存)、文件系统File System等。
        Linux内核的五大功能:
          1)进程/处理器管理
          2)内存管理
          3)接口管理
          4)文件管理
          5)设备管理
        查看当前内核版本号:uname -r 2.4.20-8
          格式:主版本号.次版本号.修订次数
            2.4
            2.5
            2.6 偶数相对稳定

      3、File System 文件系统:对Linux中的文件进行管理
        文件:包括文件、目录、外部设备等都被系统当做文件来管理。 1.txt dir1 /dev/sda1
        好处:一视同仁,便于管理
          文件具有大量属性
        文件的内容:保存的数据
        目录的内容:管理子文件、子目录的指向关系
          (关系表)

    三、Linux的通用特性
      1、支持多用户


      2、支持多任务


      3、支持用户界面


      4、硬件的支持


      5、网络连接


      6、可安装网络服务


      7、应用程序的支持

    四、Linux/Unix常用命令
      1、执行命令的原理:
        执行命令,就会执行一个可执行文件,会启动一个进程;
        比如:ps pwd ls date ...
          sleep 5 启动sleep进程,等待5秒 单位:秒
        结束当前进程:ctrl + c 立刻交回终端
        # sleep 3000
        挂起当前进程:ctrl + z 也会交回终端
        查看后台任务:jobs
        [1]+ Stopped sleep 3000
        # sleep 5000
        # ctrl + z
        # jobs
        [1]- Stopped sleep 3000
        [2]+ Stopped sleep 5000
        将后台任务前置继续运行:fg 任务号
        # fg 1
        # ctrl + c
        # fg 2
        # ctrl + c

      2、命令的帮助手册:man 命令名
        Linux/Unix中提供命令的帮助手册 manual
        提示:手册中都是英文、专业术语较多,涉及系统知识
          建议选择的查看,比如关心某选项,重点查看。
          daemon 精灵、精力充沛的人
            系统为精灵进程、守护进程,系统启动后默默一直提供基础服务。
        比如:查看ls命令的用法
        # man ls
        控制方法: 空格 -- 翻页
          回车 -- 跳行
          q -- 退出 quit

        ls - list directory contents 显示目录内容
          -l use a long listing format 使用长格式列表
            显示文件/目录的详细属性列表
        练习:查看man手册,找出如何查看所有进程 ps命令
          ps -ef
          -e select all processes
          -f does full listing 全格式

      3、查看目录下内容:ls 查看目录下的内容
        1)ls -l 以长格式显示文件/目录的详细属性
          当前Linux中简写为ll,不推荐使用,ls -l 更通用
          文件类型 权限 属主 属组 文件大小 最后一次修改时间
          -rw-r--r-- 1 root root 967 4月 25 19:19 1.txt
            硬链接数 文件/目录名

          文件类型:- 文件 d 目录
          权限:rw-r--r--
          属主:该文件属于哪个用户
          属组:该用户属于哪个组
          文件大小:单位 Byte

        2)ls -a a就是all 所有的
          显示目录下使有内容,包括隐藏的文件和目录;
          规律:凡是以 . 开头命名的文件或目录,具有隐藏属性
            比如:. .. 任何目录下都有的隐藏目录
              .bash_profile bash环境下的配置文件

        3)ls -al 或 -la 选项可以组合搭配使用(功能的叠加)
          既能查看所有内容,还能查看内容的详细属性

        4)ls -R 将目录层次展开
        5)ls -t 按照时间先后排序(最后一次修改时间)
          经常关注最近修改过的文件,比如日志文件
        6)ls -lt 组合使用
        7)ls -F 查看文件类型
          普通文件 无后缀显示
          目录 /结尾
          可执行文件 *结尾
          分别到不同目录下,查看文件类型:
            cd /root
            cd /
            cd /bin

        8)ls -ld 查看当前目录的属性
          查看/root目录属性,目前就在/root下
          之前做法:先回到上一层目录,再查看 ls -l
            cd ..
            ls -l
          drwxr-x--- 4 root root 4096 2月 28 11:45 root

          目前做法:在当前目录中直接查看
            ls -ld
          drwxr-x--- 4 root root 4096 2月 28 11:45 .

      4、清屏:clear
        Windows: cls Sqlplus: clear screen

        Linux/Unix的发展和产品介绍:
        Unix: 1969
          厂商: 产品:
          IBM AIX
          SUN Solaris
          HP UX

        Linux: 1991 1994 Linux之父:Linus 规范、标准
          (Linux is not Unix) 吉祥物:企鹅
          厂商:Red Hat 红帽
            Red Flag 红旗
            SUSE
            Ubuntu

        IOE架构:IBM服务器、AIX + Oracle DB + EMC磁盘阵列
          (主机)(Unix)中间件 数据库 数据存储
          优点:服务好、功能强大、全面 缺点:成本高
        BAT推崇“去IOE”:
          比如LAMP: 普通PC的集群作为服务器主机 + Linux
            + Apache 服务器软件 + Mysql DB + PHP 开发语言
            优点:成本低、开源(二次开发)、可定制、灵活
            缺点:技术成本高

      5、磁盘分区
        /dev/sda 硬盘分为三个区:
        分区设备名 挂载点 类型 大小
        /dev/sda1 /boot ext3 100M
        /dev/sda2 无 swap 2G 系统内核管理
        /dev/sda3 / ext3 6G

        分区设备名规律: /dev是设备目录,下面有设备文件
          device
          Linux系统将所有设备,比如硬盘分区当做文件来管理
        /dev/hda1
          1) hd -- IDE硬盘,性能一般
          2) a -- 第一块硬盘
          3) 1 -- 第1个分区
        /dev/sdb3
          1) sd -- SCSI硬盘,性能高
          2) b -- 第二块硬盘
          3) 3 -- 第3个分区

        请分析以下名称的含义
        /dev/sda1
        /dev/sda2
        /dev/sda3
        /dev/sdb1
        /dev/sdb2
        以上都是Linux系统中的设备文件,表示硬盘中的不同分区:
          a b sd 1 2 3 1 2
        一共有2块SCSI硬盘,其中第一块有3个分区,第二块2个分区。

      6、查看磁盘空间情况:fdisk -l
        应用场合:当系统出现运行突然变慢等性能问题时,可以查看Linux服务器的磁盘空间,确定是否出现空间不足导致的性能瓶颈。比如:日志文件、数据库数据、文件上传不断占据磁盘空间。
        练习:查看磁盘空间的情况
        Disk /dev/sda: 8589 MB, 8589934592 bytes
        255 heads, 63 sectors/track, 1044 cylinders
        Units = cylinders of 16065 * 512 = 8225280 bytes

        Device Boot Start End Blocks Id System
        /dev/sda1 * 1 13 104391 83 Linux
        /dev/sda2 14 268 2048287+ 82 Linux swap
        /dev/sda3 269 1044 6233220 83 Linux

        Blocks:块 数据块 是为了系统更好分配存储范围
        Id:idle 空闲的磁盘空间 83%

        补充:df -k -k表示 以KB为单位
        文件系统 1K-块 已用 可用 已用% 挂载点
        /dev/sda3 6135236 1064864 4758712 19% /
        /dev/sda1 101089 9425 86445 10% /boot
        none 515444 0 515444 0% /dev/shm

        补充:mount 挂载、查看挂载情况
          mount 设备名 挂载点
          mount /dev/sda1 /boot
        执行mount:查看挂载情况
        /dev/sda3 on / type ext3 (rw)
        none on /proc type proc (rw)
        usbdevfs on /proc/bus/usb type usbdevfs (rw)
        /dev/sda1 on /boot type ext3 (rw)
        none on /dev/pts type devpts (rw,gid=5,mode=620)
        none on /dev/shm type tmpfs (rw)

        查看文件详细属性:ls -l 文件名

      7、查看文件的内容:cat 文件路径名 ...
        适合看小文件,因为不能翻页
        # cd /root 技巧:cd /r Tab 自动补全 /root
        # ls
        # cat install.log cat ins Tab
        # date
        # cal
        # cal 5 2018
        平时命令执行的结果默认向 终端 输出。(标准输出)
        技巧:> 输出重定向 (Windows/Linux/Unix中通用)
          将命令输出的结果改变输出到文件中,而不是终端
        # date > 1.txt
          自动新建一个文件1.txt,将date的结果写入1.txt文件中
          便于保存执行结果
        # ls -l 1.txt 查看1.txt文件的属性
        -rw-r--r-- 1 root root 29 7月 11 14:30 1.txt
        # cat 1.txt 查看1.txt文件的内容
        二 7月 11 14:30:04 CST 2017
        规律:OS认为,文件有结束符 EOF 占1个Byte
          End Of File
          文件底层存在文件指针,在读取文件数据时可以偏移位置;
          文件存在开始指针、结束符
        # cal > 1.txt 覆盖
        # cat 1.txt

          > 输出重定向,新的会覆盖旧的
          >> 输出追加重定向,向原有文件结尾追加内容
        # date >> 1.txt
        # cal 10 2017 >> 1.txt
        # cat 1.txt

        用途:在Windows/Linux系统中,我们可以将某些命令输出的结果写入到文件中保存,作为后续分析的依据,比如日志、测试结果等。
          比如:adb shell monkey ... > 文件名

      8、目录路径的常见概念
        1)绝对路径:从/开始表示的具体的路径名
          /root 目录名
          /etc
          /root/1.txt 文件名
          /etc/passwd

          查看/etc/passwd文件 的详细属性
          # ls -l /etc/passwd
          -rw-r--r-- 1 root root 1283 7月 10 19:42 /etc/passwd

        2)当前路径:当前所在目录的路径名 pwd可查看
          比如目前在 /root
        3)相对路径:相当于当前路径表示的新路径
          1.txt
          ../etc/passwd ..回到/目录下,进入ect中找到passwd

          比如目前在/etc下 (当前路径),需要表示/root/1.txt
            1) 绝对路径:/root/1.txt
            2) 相对路径:../root/1.txt

        4)主目录:用户登录系统后,默认所在的目录
          Home Directory(家目录)
          普通用户在其主目录下拥有大量权限,出了此目录,将会处处受挫;
          在创建新用户时,会在/home目录下新建该用户的主目录,其目录名就是用户名;
          root用户的主目录很特殊,就是/root;
          查看用户账户文件:/etc/passwd
          每一行对应每个系统账户的记录信息
          每一列表示每个账户的属性
          # cat /etc/passwd
          用户名:口令占位符:uid:gid:描述:用户主目录:登录shell
          root:x:0:0:root:/root:/bin/bash

          uid: 用户id 用户身份的唯一标识 root都是0
          gid: 组id
          登录shell: bash 用户刚登录后默认使用的是bash

          技巧:快速回到主目录
            cd 回车 或 cd ~ 回车
          说明:~ 代替用户的主目录 /root
          技巧:查看~的值 echo 名称
          # echo ~ echo 本意:回声
          # ehco Hello 原样返回
          # echo $PATH echo $系统环境变量名
          查看系统环境变量PATH的值
          /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/usr/bin/jdk1.6/bin
          PATH的作用:命令的搜索路径
            我们可以将常用的命令所在的路径名添加到PATH的值中(Windows通过分号分隔,Linux/Unix通过冒号分隔),越靠前的越优先找到,就可以在命令行中使用相对路径简化对命令的表达,否则会提示命令找不到。
            比如 ls 在 /bin下 /bin/ls

        5)当前目录: .
          cd . 意义不大,还在当前目录
          1.txt 相对路径
          ./1.txt 代替绝对路径 /root/1.txt

        6)上一层目录: ..
          cd .. 回上一层目录
          cd ../.. 连退两层目录

      9、创建目录:mkdir 目录路径名
        # cd 回到root的主目录 /root
        # pwd
        # mkdir test 创建一个test目录
        # ls -l
        drwxr-xr-x 2 root root 4096 4月 26 15:44 test
        # cd test
        # ls 什么都没有
        # ls -la 只有 . 和 ..

        练习:在test目录中继续创建其它目录层次
        # pwd 在/root/test下
        # mkdir dir1/dir2
        mkdir: 无法创建目录‘dir1/dir2’: 没有那个文件或目录
        注意:Linux/Unix中,需要加-p选项,才能一气呵成
        # mkdir -p dir1/dir2
        # ls -R 查看目录下层次
        # ls -aR 包括隐藏资源
        # cd dir1 ls -al
          cd dir2 ls -al
        # pwd 在/root/test/dir1/dir2下
        回到test下:
        # cd ../..
          或 cd ~/test ~就是/root /root/test
        # mkdir dir3 dir4 dir5 依次创建多个目录
        在主目录下新建一个game目录:
        # mkdir ~/game
        # cd
        # ls
        结论:操作的关键在于--如何表达路径名

        技巧:通过startx 切换到图形界面
        # startx
        在服务器中启动图形界面:
          桌面: root主目录
            右键 -> 新建终端 shell 执行命令
            放大: ctrl shift +
            缩小: ctr -
        返回字符界面:小红帽 -> 注销

      10、新建文件:touch 文件路径名
        说明:如果文件不存在,创建一个新的、空的文件(0字节); 如果文件存在,只会修改文件的最后一次修改时间。
        # cd ~/test
        # date > 1.txt 通过重定向生成一个1.txt文件
        # ls -l 1.txt 查看文件属性
        # cat 1.txt 查看文件内容
        # touch 2.txt 创建一个空文件
        # ls -l *.txt 查看所有.txt文件的属性
        # cat 2.txt
        # touch 1.txt
        # ls -l *.txt 1.txt最后一次修改时间 更新了
        # cat 1.txt 文件内容不变

      11、Linux中命名规则、规范
        1)区分大小写 F1 f1
        2)不能使用特殊字符: / * % " $ # 空格 ...
        3)以.开头的,具有隐藏属性
        4)如果无特殊要求,后缀没有要求,后缀起到见名知意的作用:
          特殊要求的: plus
            .java .c .cpp .html .css .js .php .xml
            .class .pdf .zip .jar ...
          没有特殊要求的:普通文本
            1.txt f1 f1.abc f1.abc.hello
          建议:比如shell脚本,建议使用.sh结尾 见名知意
            Tomcat6/bin目录下:管理命令、启动项
              startup.sh 启动服务器的脚本
              shutdown.sh 关闭服务器的脚本

      12、拷贝文件:cp 源文件路径 新路径
        (copy)目的:备份
        # cp 1.txt 11.txt 将1.txt备份为11.txt
        # ls -l 1*.txt 查看1开头 .txt结尾文件属性
        # cat 1.txt 11.txt 依次显示多个文件内容

      13、移动文件:mv 源文件路径 新路径
        (move)本质:改变文件的绝对路径名
        # mv 11.txt 22.txt 重命名
          源文件路径:/root/test/11.txt
          新路径: /root/test/22.txt

        综合练习:在~/test下,新建d1和d2目录;
          d1目录下新建1.txt文件,文本内容Hello;
          对文件进行备份、重命名操作。
        1)在~/test下,新建d1和d2目录
          # cd ~/test
          # mkdir d1
          # mkdir d2 或 mkdir d1 d2

        2)d1目录下新建1.txt文件,文本内容Hello
          # cd d1
          # pwd 在/root/test/d1下
          # touch 1.txt
          # ls -l 1.txt
          # echo Hello >> 1.txt

        3)将d1下的1.txt备份为11.txt
          # cp 1.txt 11.txt

        4)将d1下的1.txt备份到d2下,也叫1.txt
          # cp 1.txt ../d2
          # cd ../d2
          # pwd 在/root/test/d2下
          # ls -l
          # cat 1.txt

        5)将d1下的11.txt备份到d2中,还叫11.txt
          # cp ../d1/11.txt .

        6)将d1下的1.txt备份到d2中,叫111.txt
          # cp ../d1/1.txt ./111.txt

        7)将d1下的11.txt移动到d2中,叫22.txt
          # mv ../d1/11.txt ./22.txt
          # ls -l
          # cd ../d1
          # ls -l

      14、删除文件和目录
        1)删除文件:rm 文件路径名
          (remove) rm -f 文件路径名 关闭交互
          # rm 22.txt 有交互 y 删除 n 不删除
          # rm *.txt 删除所有.txt文件 多次交互
          # rm -f *.txt 关闭交互,删除所有.txt文件
          如何强制删除一些文件?
            思路:rm 文件名
              强制就是关闭交互,不用多问

        2)删除空目录:rmdir 目录名
          # cd ~/test
          # rmdir d2 非空,不能删除
          # rmdir d1 为空,可以删除

        3)删除非空目录: rm -r 目录名 存在交互
          rm -rf 目录名 关闭交互
          # rm -r d2 y n
          # rm -rf d2

          用户登录:
            Username: jojo
            Password: bean
            Login
          安全测试:也称为渗透测试
            通过各种攻击方式,对SUT进行安全方面的攻击,测试SUT是否安全。
            常见的攻击方式:xxx注入
            比如SQL注入攻击 SQL Injection
              用户(攻击者)填写的信息很可能成为业务逻辑的一部分,从而改变原有的逻辑。

          用户登录:
            Username: jojo hello
            Password: bean 123' or '1'='1
              Login
          后台SQL: 只要能查到结果 >0 说明存在,登录成功
            select count(id) from user
            where username='jojo' and password='bean';
                    真     真
                    结果:针对

            select count(id) from user 结果>0
            where username='hello' and password='123' or '1'='1';
                    假     假
                      假      永真式
                        真

  • 相关阅读:
    深度学习面试题27:非对称卷积(Asymmetric Convolutions)
    深度学习面试题26:GoogLeNet(Inception V2)
    深度学习面试题25:分离卷积(separable卷积)
    深度学习面试题24:在每个深度上分别卷积(depthwise卷积)
    深度学习面试题23:批次张量和卷积核的简易定义方式
    深度学习面试题22:批量归一化在实践中的应用
    深度学习面试题21:批量归一化(Batch Normalization,BN)
    Docker安装ElasticSearch 版本7.1.1
    Go语言入门——hello world
    eclipse下配置GO语言的开发环境
  • 原文地址:https://www.cnblogs.com/KalosOwen/p/8987401.html
Copyright © 2020-2023  润新知