精华内容
下载资源
问答
  • Linux学习

    千次阅读 多人点赞 2020-05-19 22:21:01
    Linux操作系统具有一定层次结构,由若干目录和子目录组成,不同于windows操作系统,Linux只有一个根目录,用“/”表示,它采用的是级层式的树形结构。 ----在Linux世界里,一切皆文件。 具体的目录结构 /bin[重点]...
    展开全文
  • Linux 学习之创建、删除文件和文件夹命令

    万次阅读 多人点赞 2017-09-05 18:26:38
    今天学习了几个命令,是创建、删除文件和文件夹的,在linux里,文件夹是目录,下面说下我学习的命令。 创建文件夹【mkdir】 一、mkdir命令使用权限 所有用户都可以在终端使用 mkdir 命令在拥有权限的文件夹...

    今天学习了几个命令,是创建、删除文件和文件夹的,在linux里,文件夹是目录,下面说下我学习的命令。


    创建文件夹【mkdir】

      一、mkdir命令使用权限

        所有用户都可以在终端使用 mkdir 命令在拥有权限的文件夹创建文件夹或目录。

        二、mkdir命令使用格式

        格式:mkdir [选项] DirName

        三、mkdir命令功能

        通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录。要创建文件夹或目录的用户必须对所创建的文件夹的父文件夹具有写权限(了解Linux文件-文件夹权限请点击这里)。并且,所创建的文件夹(目录)不能与其父目录(即父文件夹)中的文件名重名,即同一个目录下不能有同名的(区分大小写)。

        四、mkdir命令选项说明

        命令中的[选项]一般有以下两种:

        -m    用于对新建目录设置存取权限,也可以用 chmod 命令进行设置。

        -p     需要时创建上层文件夹(或目录),如果文件夹(或目录)已经存在,则不视为错误。

        五、mkdir命令使用举例

        例一:在桌面下面创建以“demo”命名的文件夹。

        使用以下命令即可。

        mkdir 桌面/demo

      例二:在桌面下面创建以“demo”命名的文件夹,并且给文件夹赋权限,权限为123。

        mkdir  123  桌面/demo


    删除文件夹【rm】

      一、rm命令使用权限

        所有用户都可以在终端使用 rm命令删除目录。

        二、rm命令使用格式

        格式:rm [选项] DirName

        三、rm命令功能

        删除档案及目录。

        四、rm命令选项说明

        命令中的[选项]一般有以下几种:

        -i 删除前逐一询问确认。

      -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。

      -r 将目录及以下之档案亦逐一删除,递归所有的子目录,逐一询问。

        五、rm命令使用举例

        例一:删除所有C语言程序文档;删除前逐一询问确认。

        rm -i *.c

      例二:将 Finished 子目录及子目录中所有档案删除。

        rm -r Finished

     

     

         rm -f abc.txt的意思是说强制删除文件。如果文件不存在,也不要提示。这是因为如果直接使用rm abc.txt那么如果文件不存在,rm 会提示你。这在某些情况下,比如我们写一些小脚本,可能不需要他这样做。
    rm -r abc 的意思是说递归所有的子目录。其中要求abc是一个目录名。这条rm运行后,abc目录下的所有子目录里的东西也会一同被删除。通常我们在删除一个目录时会使用rm -rf abc这样的形式,这就是说明删除目录abc,同时要求命令不要产生任何提示。

     

     

     

      注:在linux没有回收站,在试用rm命令的时候,一定要小心些,删除之后就无法再恢复了。

    创建文件【vi】

      一、进入vi的命令

         vi filename :打开或新建文件,并将光标置于第一行首

         vi +n filename :打开文件,并将光标置于第n行首

        vi + filename :打开文件,并将光标置于最后一行首

        vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处

        vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename

        vi filename....filename :打开多个文件,依次进行编辑

      二、移动光标类命令

      h :光标左移一个字符

      l :光标右移一个字符

      space:光标右移一个字符

      Backspace:光标左移一个字符

      k或Ctrl+p:光标上移一行

      j或Ctrl+n :光标下移一行

      Enter :光标下移一行

      w或W :光标右移一个字至字首

      b或B :光标左移一个字至字首

      e或E :光标右移一个字至字尾

      ) :光标移至句尾

      ( :光标移至句首

      }:光标移至段落开头

      {:光标移至段落结尾

      nG:光标移至第n行首

      n+:光标下移n行

      n-:光标上移n行

      n$:光标移至第n行尾

      H :光标移至屏幕顶行

      M :光标移至屏幕中间行

      L :光标移至屏幕最后行

      0:(注意是数字零)光标移至当前行首

      $:光标移至当前行尾

     三、屏幕翻滚类命令

      Ctrl+u:向文件首翻半屏

      Ctrl+d:向文件尾翻半屏

      Ctrl+f:向文件尾翻一屏

      Ctrl+b;向文件首翻一屏

      nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

     四、插入文本类命令

      i :在光标前

      I :在当前行首

      a:光标后

      A:在当前行尾

      o:在当前行之下新开一行

      O:在当前行之上新开一行

      r:替换当前字符

      R:替换当前字符及其后的字符,直至按ESC键

      s:从当前光标位置处开始,以输入的文本替代指定数目的字符

      S:删除指定数目的行,并以所输入文本代替之

      ncw或nCW:修改指定数目的字

      nCC:修改指定数目的行

     五、删除命令

      ndw或ndW:删除光标处开始及其后的n-1个字

      do:删至行首

      d$:删至行尾

      ndd:删除当前行及其后n-1行

      x或X:删除一个字符,x删除光标后的,而X删除光标前的

      Ctrl+u:删除输入方式下所输入的文本

     六、搜索及替换命令

      /pattern:从光标开始处向文件尾搜索pattern

      ?pattern:从光标开始处向文件首搜索pattern

      n:在同一方向重复上一次搜索命令

      N:在反方向上重复上一次搜索命令

      :s/p1/p2/g:将当前行中所有p1均用p2替代

      :n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代

      :g/p1/s//p2/g:将文件中所有p1均用p2替换

     七、vi命令使用举例

      例一:创建文件a.txt。

      vi a.txt

      Hello everyone!

      :wq //在退出时,直接输入:wq会发现退不出去,退出方法是:编辑完成后按ESC,然后输入:q就是退出;还有:wq是保存后退出,加感叹号是表示强制

      

      

      

    修改档案时间【touch】

       一、touch命令使用权限

        所有用户都可以在终端使用 touch命令。

        二、touch命令使用格式

        格式:touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间>][--help] [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时间][文件或目录...]

        (touch [-acfm][-r reference-file] [--file=reference-file][-t MMDDhhmm[[CC]YY][.ss]][-d time] [--date=time][--time={atime,access,use,mtime,modify}][--no-create][--help] [--version]file1 [file2 ...])

        三、touch命令功能

      touch fileA,如果fileA存在,使用touch命令可更改这个文件或目录的日期时间,包括存取时间和更改时间;如果fileA不存在,touch命令会在当前目录下新建一个空白文件fileA。

      注:使用touch指令可更改文件或目录的日期和时间,包括存取时间和更改时间。文件的时间属性包括文件的最后访问时间,最后修改时间以及最后在磁盘上修改的时间,命令stat显示结果显示了三个时间属性。

        四、touch命令选项说明

        a 改变档案的读取时间记录。

      m 改变档案的修改时间记录。

      c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。

      f 不使用,是为了与其他 unix 系统的相容性而保留。

      r 使用参考档的时间记录,与 --file 的效果一样。

      d 设定时间与日期,可以使用各种不同的格式。

      t 设定档案的时间记录,格式与 date 指令相同。[[CC]YY]MMDDhhmm[.SS],CC为年数中的前两位,即”世纪数”;YY为年数的后两位,即某世纪中的年数.如果不给出CC的值,则linux中touch命令参数将把年数CCYY限定在1969--2068之内.MM为月数,DD为天将把年数CCYY限定在1969--2068之内.MM为月数,DD为天数,hh 为小时数(几点),mm为分钟数,SS为秒数.此处秒的设定范围是0--61,这样可以处理闰秒.这些数字组成的时间是环境变量TZ指定的时区中的一个时间.由于系统的限制,早于1970年1月1日的时间是错误的.

      --no-create 不会建立新档案。

      --help 列出指令格式。

      --version 列出版本讯息。

        五、touch命令使用举例

        例一:更新file1.txt的存取和修改时间。

      touch file1.txt

      例二:如果file1.txt不存在,不创建文件

      touch -c file1.txt

      例三:更新file1.txt的时间戳和ref+file相同

      touch -r ref+file file1.txt

      例四:设置文件的时间戳为2011年5月18日9点45分10秒

      ls -l file1.txt

      touch -t 1105190945.10 file1.txt


    在新建文件时用touch命令可以建立一个空文件,而vi命令则可以直接编辑文件的内容并保存。touch命令在linux中很少用到,我个人还是比较喜欢vi命令,可以直接对文档进行编辑。

    展开全文
  • Linux 学习路线图

    千次阅读 多人点赞 2019-11-04 11:27:09
    1.应用场景 ... 初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所以学linux也是需要有一定的路线。 初级入门: Linux基础知识、基本命令(起源、组成、常用命令如cp、ls、fi...

    1.应用场景

    更加高效地学习并达到运用Linux.

    2.学习/操作

    linux运维学习需要分为四个阶段:初级入门、中级进阶、高级提升、资深方向细化。

    第一阶段:初级入门

    初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所以学linux也是需要有一定的路线。

    初级入门:

    1. Linux基础知识、基本命令(起源、组成、常用命令如cp、ls、file、mkdir等常见操作命令)
    2. Linux用户及权限基础
    3. Linux系统进程管理进阶
    4. Linux高效文本、文件处理命令(vim、grep、sed、awk、find等命令)
    5. shell脚本入门(可边练习边学习)

    第二阶段:中级进阶

    中级进阶需要在充分了解linux原理和基础知识之后,对上层的应用和服务进行深入学习,其中说到服务肯定涉及到网络的相关知识,是需要花时间学习的。

    1. TCP/IP网络基础(差不多CCNA、NP的知识就够用)
    2. Linux企业常用服务(如dns、http、ftp、mail、nfs等)
    3. Linux企业级安全原理和防范技巧(系统性能/安全、安全威胁模型和保护方法
    4. 加密/解密原理及数据安全、系统服务访问控制及服务安全基础
    5. iptables安全策略构建
    6. shell脚本进阶(主要是结合一些应用,写一些案例)
    7. MySQL应用原理及管理入门(能管理和搭建一个个人博客站点)

    学到这里,掌握的基本技能,已经够用了,已经能做一些基础的运维工作和简单维护了。

    第三阶段:高级提升

    1. http服务代理缓存加速(其中主要学习varnish、nginx缓存系统,要对CDN的知识有所了解。)
    2. 企业级负载集群(其中主要学习nginx、haproxy、lvs要对主要知识熟练掌握,对负载均衡算法有清晰认识,)
    3. 企业级高可用集群 (其中需要对keepalived,heartbeat等进行深入讲解)
    4. 运维监控zabbix详解(主要是zabbix、cacti、nagios等监控系统,现在用的比较多的是zabbix)
    5. 运维自动化学习(需要学一些开源运维自动化工具的使用如ansible、puppet、cobbler等运维自动化工具)

    能掌握到这里,基本能处理搞定很多工作了,可以去面试高级运维工程师,差不多薪资能达到12-18K左右

    第四阶段:资深方向进阶

    1. 大数据方向(需要对hadoop、storm等常见开源大数据系统需要深入了解)
    2. 云计算方向(主要是openstack这套东西,当然像一些kvm等虚拟化技术,也是需要掌握的,现在docker也比较流行)
    3. 运维开发(主要是python运维开发)
    4. 自动化运维(在之前自动化基础上做深入)
    5. 运维架构师(主要需要广度,差不多5年左右以上经验,可以担当此职位)

    小编找到一个网站,上面有很多关于linux和python的课程资料,大部分都是免费的如果需要可以搜索

    ”门徒计划 - 学技术当然要跟大咖学!“

    拿走,不谢。

     

     

    书籍视频资源推荐:

    <<鸟哥的Linux私房菜>>

    <<一个64位操作系统的设计与实现>>

    <<从实模式到保护模式>

    https://github.com/chyyuu/os_kernel_lab  // 清华大学 操作系统 - 实验课

     

    汇编语言:

    <<汇编从零开始到C语言>> --- 网易云课堂

     

    更多资料推荐:

    https://blog.csdn.net/william_n/article/details/102892833  // 如何学习 Linux

    3.问题/补充

    TBD

    4.参考

    https://cloud.tencent.com/developer/article/1450836  //linux学习路线图

    后续补充

    ...

    这里写图片描述

    展开全文
  • Linux学习总结

    万次阅读 多人点赞 2017-10-29 22:12:59
    Linux学习目标: Linux操作系统介绍与安装。 Linux常用命令。 Linux常用软件安装。 Linux网络。 防火墙。  Shell编程等。 ******************************************************************************LinuxOS...
    Linux学习目标:
    Linux操作系统介绍与安装。
    Linux常用命令。
    Linux常用软件安装。
    Linux网络。
    防火墙。 
    Shell编程等。
    *******************************LinuxOS介绍与安装************************************
    Linux OS介绍与安装
    Linux是什么? Linux是一套作业系统,不是应用程序。

    Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。

    Linux版本:
    主、次版本为奇数:发展中版本(development)、主、次版本为偶数:稳定版本(stable) EXP:3.10.0-123.el7.x86_64 主版本.次版本.释出版本-修改版本
    不过,这种奇数、偶数的编号格式在 3.0 推出之后就失效了。从 3.0 版开始,核心主要依据主线版本 (MainLine) 來开发,开发完后会往下一個主线版本进行。 
    可以使用『 uname -r 』來查阅核心版本,然后对照下列链接來了解其对应值喔!
    https://www.kernel.org/releases.html
    Android其实就是Linux核心的一支,只是专门用来针对手机/平板这类的 ARM 机器所设计的。

    GNU:GNU's Not Unix 自由软件工程项目
    Shell:命令行解释器,遵循一定的语法将输入的命令加以解释并传给系统。默认bash

    Linux中,每个硬件设备都被当成一个文件!EXP:IDE硬盘文件名称/dev/da[a-d];硬盘分区名称/dev/hda1,/dev/hda2...数字表示硬盘内的某个分区。
    IDE硬盘 /dec/hd[a-d] SCSI硬盘与串口硬盘、U盘 /dev/sd[a-p] 光驱/dev/cdrom 软驱/dev/fd[0-1] 打印机 /dev/lp[0-2] 鼠标/dev/mouse 磁带机/dev/ht0(IDE) /dev/st0(SCSI)

    硬盘分区的特点:
    最多可以有4个primary分区!
    只能有一个extended分区!
    extended存在的目的是为了创建logical!
    创建logical的目的是能有多于4个分区,logical最多可以有64个!
    primary(主分区)+extended(扩展分区)最多有四个。
    Logical(逻辑分区)的数字代号必从5开始 Primary=P;Extended=E;Logical=L  P+E+L+L:/dev/hda1,/dev/hda2,/dev/hda5,/dev/hda6

    Linux的硬盘分区需求:
    Linux可以安装在硬盘分区里面任意一个或对各可以写数据的硬盘分区。最少有两个分区
    /:根分区,linux操作系统的文件夹,相当于windows系统的windows目录
    /boot:启动分区,里面装在linux内核及开机引导程序grub,用于开机引导,100~200M
    /usr:相当于windows的应用程序目录programe files
    /home:linux各个用户的家目录:用户登录后进入的目录,自己的目录
    /var:可变目录,放日志等经常会发生变化的文件
    Swap:交换分区,相当于windows的虚拟内存文件,内存大小的2倍
    bash 是一个为GNU计划编写的Unix shell。

    Vmware 是一种虚拟机,可以用来安装windows,也可以安装linux ,ubuntu是Linux的发行版之一,另外的Linux发行版有红帽,Linux mint 等等,linux秉承开源性,在嵌入式领域和服务器领域有很多使用实例,包括目前流行的安卓,也使用到了Linux.

    如果是初学Linux,可以安装虚拟机VM。然后再VM上安装Ubuntu或者自己要学的Linux的版本。Linux安装 记得分配硬盘内存

    ************************************Linux基本命令******************************************

    Linux基本命令:
    Linux控制台版本不同数量可能不一样 Ctrl+Alt+F1~Ctrl+Alt+F8     1~6为不同的控制台,7可以从控制台切换回图形界面。如果Linux版本是无法手动切换回来的话。

    针对所有系统用户的命令和设置:/etc/bashrc

    $字符 shell在等待用户输入
    rich@user-desktop:~$ rich(shell用户名) user-desktop(虚拟控制台编号) ~主目录的缩略资源

            man命令用来访问存储在Linux系统上的手册页面:$ man bash ->看完用q退出

    Linux将文件存储在单个目录结构中,这个目录我们称之为虚拟目录。
    Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点。文件和目录在挂载点中,但实际存储在其他位置。

    Linux目录名称
    /虚拟目录的根目录,不放文件。  /bin位进制目录,存放许多GNU用户级的工具
    /boot启动目录,存放启动文件    /dev设备目录,Linux在这里创建节点
    /etc 系统配置文件目录          /home主目录,Linux在这里创建用户目录
    /lib 库目录,存放系统和应用程序的库文件
    /media /mnt挂载目录 /opt 可选目录 /root 根主目录 /var 可变目录 /sbin 系统二进制目录 /tmp临时目录 /usr 用户安装软件目录

    Linux常用命令
    要想从命令行界面下在Linux的虚拟目录之间切换,需要使用cd命令。
    ls 显示系统上有哪些文件 $ls 显示当前目录下的文件和目录
    $ ls -F 区分文件 $ ls -a 显示隐藏文件

    touch命令创建文件: touch 文件名
    cp命令复制文件: cp 源对象 目标对象
    mv 重命名 :mv 源 目的
    硬链接:创建新文件 软链接:创建符号链接
    rm 删除文件: rm -i 文件 删除前提示 rm -f 文件 强制删除 不提示
    mkdir ***创建目录 rmdir(只能删除空目录) *** rm dir1 rm -rf dir2 暴力删除
    stat *** 查看某文件所有状态 file ***查看文件类型
    ps 显示在运行进程 -e 所有进程 -f 详细信息  -ef组合 -H显示层级关系
    top 实时监测进程 i 是否切换到空闲进程 u显示某个用户的进程 W把当前设置写到配置文件 q退出
    kill num结束进程 killall http*
    mount 输出挂载程序信息 umount 移除一个可移动设备
    df 显示磁盘剩余空间 du特定目录的磁盘使用情况

    sort *** 排序

    ****************************************Linux软件安装****************************************
    一、 解析Linux应用软件安装包
        通常Linux应用软件的安装包有三种:
        1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。
        2) rpm包,如software-1.2.3-1.i386.rpm。它是Redhat Linux提供的一种包封装格式。
        3) dpkg包,如software-1.2.3-1.deb。它是Debain Linux提供的一种包封装格式。
             而且,大多数Linux应用软件包的命名也有一定的规律,它遵循:名称-版本-修正版-类型
    二、 了解包里的内容:
        一个Linux应用程序的软件包中可以包含两种不同的内容:
        1) 一种就是可执行文件,也就是解开包后就可以直接运行的。在Windows中所 有的软件包都是这种类型。安装完这个程序后,你就可以使用,但你看不到源程序。而且下载时要注意这个软件是否是你所使用的平台,否则将无法正常安装。
        2) 另一种则是源程序,也就解开包后,你还需要使用编译器将其编译成为可执行文件。这在Windows系统中是几乎没有的,因为Windows的思想是不开放源程序的。
          通常,用tar打包的,都是源程序;而用rpm、dpkg打包的则常是可执行程序。一般来说,自己动手编译源程序能够更具灵活性,但也容易遇到各 种问题和困难。而相对来说,下载那些可执行程序包,反而是更容易完成软件的安装,当然那样灵活性就差多了。所以一般一个软件总会提供多种打包格式的安装程 序的。你可以根据自己的情况来选择。
    三、 搞定使用tar打包的应用软件
       1. 安装:
        整个安装过程可以分为以下几步:
        1) 取得应用软件:通过下载、购买光盘的方法获得;
        2)解压缩文件:一般tar包,都会再做一次压缩,如gzip、bz2等,所以你需要先解压。如果是最常见的gz格式,则可以执行:“tar –xvzf 软件包名”,就可以一步完成解    压与解包工作。如果不是,则先用解压软件,再执行“tar –xvf 解压后的tar包”进行解包;
        3) 阅读附带的INSTALL文件、README文件;
        4) 执行“./configure”命令为编译做好准备;
        5) 执行“make”命令进行软件编译;
        6) 执行“make install”完成安装;
        7) 执行“make clean”删除安装时产生的临时文件。
               好了,到此大功告成。我们就可以运行应用程序了。但这时,有的读者就会问,我怎么执行呢?这也是一个Linux特色的问题。其实,一般来说, Linux的应用软件                       的可执行文件会存放在/usr/local/bin目录下!不过这并不是“放四海皆准”的真理,最可靠的还是看这个软件的 INSTALL和README文件,一般都会有说明。
       2. 卸载:
        通常软件的开发者很少考虑到如何卸载自己的软件,而tar又仅是完成打包的工作,所以并没有提供良好的卸载方法。
        那么是不是说就不能够卸载呢!其实也不是,有两个软件能够解决这个问题,那就是Kinstall和Kife,它们是tar包安装、卸载的黄金搭档。
    四、 搞定使用rpm打包的应用软件
      rpm可谓是Redhat公司的一大贡献,它使Linux的软件安装工作变得更加简单容易。
      1. 安装:
        我只需简单的一句话,就可以说完。执行:rpm –ivh rpm软件包名
        更高级的,请见下表:
             rpm参数 参数说明
              -i    安装软件
             -t     测试安装,不是真的安装
             -p   显示安装进度
             -f     忽略任何错误
             -U   升级安装
             -v    检测套件是否正确安装
        这些参数可以同时采用。更多的内容可以参考RPM的命令帮助。
      2. 卸载:
        我同样只需简单的一句话,就可以说完。执行:
                 rpm –e 软件名
        不过要注意的是,后面使用的是软件名,而不是软件包名。例如,要安装software-1.2.3-1.i386.rpm这个包时,应执行:
                 rpm –ivh software-1.2.3-1.i386.rpm
        而当卸载时,则应执行: rpm –e software。
      
        另外,在Linux中还提供了象GnoRPM、kpackage等图形化的RPM工具,使得整个过程会更加简单。这些软件的具体应用,笔者会另行文介绍。
    五、 搞定使用deb打包的应用程序
      这是Debian Linux提供的一个包管理器,它与RPM十分类似。但由于RPM出现得更早,所以在各种版本的Linux都常见到。而debian的包管理器dpkg则 只出现在Debina Linux中,其它Linux版本一般都没有。我们在此就简单地说明一下:
     1. 安装
            dpkg –i deb软件包名
          如:dpkg –i software-1.2.3-1.deb
      2. 卸载
            dpkg –e 软件名
      如:dpkg –e software
    六、软件的安装 
      ---- Linux下软件的安装主要有两种不同的形式。第一种安装文件名为filename.tar.gz。另一种安装文件名为 filename.i386.rpm。以第一种方式发行的软件多为以源码形式发送的。第二种方式则是直接以二进制形式发行的。i386即表示该软件是按 Inter 386指令集编译生成的。
      ---- 对于第一种,安装方法如下: 
      ---- 首先,将安装文件拷贝至你的目录中。例如,如果你是以root身份登录上的,就将软件拷贝至/root中。 
      ---- #cp filename.tar.gz /root 
      ---- 由于该文件是被压缩并打包的,所以,应对其解压缩。命令为: 
      ---- #tar xvzf filename.tar.gz 
      ---- 执行该命令后,安装文件按路径,解压缩在当前目录下。用ls命令可以看到解压缩后的文件。通常在解压缩后产生的文件中,有名为"INSTALL"的文件。该文件为纯文本文件,详细讲述了该软件包的安装方法。
      ---- 对于多数需要编译的软件,其安装的方法大体相同。执行解压缩后产生的一个名为configure的可执行脚本程序。它是用于检查系统是否有编译时所需的库,以及库的版本是否满足编译的需要等安装所需要的系统信息。为随后的编译工作做准备。命令为:
      ---- #./configure 
      ---- 如果检查过程中,发现有错误,configure将给予提示,并停止检查。你可以跟据提示对系统进行配置。再重新执行该程序。检查通过后,将生成用于编译 的MakeFile文件。此时,可以开始进行编译了。编译的过程视软件的规模和计算机的性能的不同,所耗费的时间也不同。命令为:
      ---- #make 
      ---- 成功编译后,键入如下的命令开始安装: 
      ---- #make install 
      ---- 安装完毕,应清除编译过程中产生的临时文件和配置过程中产生的文件。键入如下命令: 
      #make clean 
      #make distclean 
      至此,软件的安装结束。 
      ---- 对于第二种,其安装方法要简单的多。 
      ---- 同第一种方式一样,将安装文件拷贝至你的目录中。然后使用rpm来安装该文件。命令如下: 
      ---- #rpm -i filename.i386.rpm 
      ---- rpm将自动将安装文件解包,并将软件安装到缺省的目录下。并将软件的安装信息注册到rpm的数据库中。参数i的作用是使rpm进入安装模式。 
      ---- 另外,还有一些Linux平台下的商业软件。在其安装文件中,有Setup安装程序,其安装方法同Windows平台下的一样。如:Corel WordPerfect。
      软件的卸载 
      ---- 软件的卸载主要是使用rpm来进行的。卸载软件首先要知道软件包在系统中注册的名称。键入命令: 
      ---- #rpm -q -a 
      ---- 即可查询到当前系统中安装的所有的软件包。参数q的作用是使rpm进入查询命令模式。参数a是查询模式的子参数,意为全部(ALL)。查询到的信息较多,可使用less人屏显示。
      ---- 确定了要卸载的软件的名称,就可以开始实际卸载该软件了。键入命令: 
      ---- #rpm -e [package name] 
      ---- 即可卸载软件。参数e的作用是使rpm进入卸载模式。对名为[package name]的软件包进行卸载。由于系统中各个软件包之间相互有依赖关系。如果因存在依赖关系而不能卸载,rpm将给予提示并停止卸载。你可以使用如下的命 令来忽略依赖关系,直接开始卸载:
      ---- #rpm -e [package name] -nodeps 
      ---- 忽略依赖关系的卸载可能会导致系统中其它的一此软件无法使用。你可以使用 
      ---- #rpm -e [package name] -test 

      ---- 使rpm进行一次卸载预演,而不是真正卸载。这样可以使你检查一下软件是否存在有依赖关系。卸载过程中是否有错误。


    **************************************Linux网络*****************************************

    Linux网络
    ping

    使用这个命令判断网络的连通性以及网速,偶尔还顺带当做域名解析使用(查看域名的IP):
    ping google.com
    默认使用该命令会一直发送ICMP包直到用户手动中止,可以使用-c命令指定发送数据包的个数,使用-W指定最长等待时间,如果有多张网卡,还可以通过-I指定发送包的网卡。
    小技巧: 在ping过程中按下ctrl+|会打印出当前的summary信息,统计当前发送包数量、接收数量、丢包率等。
    其他比如-b发送广播,另外注意ping只能使用ipv4,如果需要使用ipv6,可以使用ping6命令。

    netstat
    这个命令用来查看当前建立的网络连接(深刻理解netstat每一项代表的含义)。最经典的案例就是查看本地系统打开了哪些端口:
    fgp@controller:~$ sudo netstat -lnpt
    [sudo] password for fgp:
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2183/mysqld
    tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      2506/memcached
    tcp        0      0 0.0.0.0:9292            0.0.0.0:*               LISTEN      1345/python
    tcp        0      0 0.0.0.0:6800            0.0.0.0:*               LISTEN      2185/ceph-osd
    tcp        0      0 0.0.0.0:6801            0.0.0.0:*               LISTEN      2185/ceph-osd
    tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      1339/mongod
    tcp        0      0 0.0.0.0:6802            0.0.0.0:*               LISTEN      2185/ceph-osd
    tcp        0      0 0.0.0.0:6803            0.0.0.0:*               LISTEN      2185/ceph-osd
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1290/sshd
    netstat能够查看所有的网络连接,包括unix socket连接,其功能非常强大。

    另外使用netstat还可以查看本地路由表:

    fgp@controller:~$ sudo netstat -nr
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 brqcb225471-1f
    172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
    192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 brqcb225471-1f
    192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
    以上Genmask为0.0.0.0的表示默认路由,即连接外网的路由。网络中0.0.0.0的IP地址表示整个网络,即网络中的所有主机。它的作用是帮助路由器发送路由表中无法查询的包。如果设置了全零网络的路由,路由表中无法查询的包都将送到全零网络的路由中去。

    lsof

    lsof命令用来查看打开的文件(list open files),由于在Linux中一切皆文件,那socket、pipe等也是文件,因此能够查看网络连接以及网络设备,其中和网络最相关的是-i选项,它输出符合条件的进程(4、6、协议、:端口、 @ip等),它的格式为[46][protocol][@hostname|hostaddr][:service|port],比如查看22端口有没有打开,哪个进程打开的:


    fgp@controller:~$ sudo lsof -i :22
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    1290 root    3u  IPv4  10300      0t0  TCP *:ssh (LISTEN)
    sshd    1290 root    4u  IPv6  10302      0t0  TCP *:ssh (LISTEN)
    可见22端口是sshd这个命令,其进程号pid为1290打开的。

    可以指定多个条件,但默认是OR关系的,如果需要AND关系,必须传入-a参数,比如查看22端口并且使用Ipv6连接的进程:

    fgp@controller:~$ sudo lsof -c sshd -i 6 -a -i :22
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    1290 root    4u  IPv6  10302      0t0  TCP *:ssh (LISTEN)
    列出所有与192.168.56.1(我的宿主机IP地址)的ipv4连接:

    fgp@controller:~$ sudo lsof -i 4@192.168.56.1
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    2299 root    3u  IPv4  14047      0t0  TCP controller:ssh->mac:54558 (ESTABLISHED)
    sshd    2377  fgp    3u  IPv4  14047      0t0  TCP controller:ssh->mac:54558 (ESTABLISHED)

    iftop
    用过top以及iotop的,自然能够大致猜到iftop的功能,它是用于查看网络流量的工具(display bandwidth usage on an interface by host):
    sudo iftop

    nc
    nc(netcat)被称为网络工具的瑞士军刀,其非常轻巧但功能强大!常常作为网络应用的Debug分析器,可以根据需要创建各种不同类型的网络连接。官方描述的功能包括:

    simple TCP proxies
    shell-script based HTTP clients and servers
    network daemon testing
    a SOCKS or HTTP ProxyCommand for ssh(1)
    and much, much more
    总之非常强大,能够实现简单的聊天工具、模拟ssh登录远程主机、远程传输文件等。一个经典的用法是端口扫描。比如我要扫描192.168.56.2主机1~100端口,探测哪些端口开放的(黑客攻击必备):

    fgp@controller:~$ nc -zv 192.168.56.2 1-100 |& grep 'succeeded!'
    Connection to 192.168.56.2 22 port [tcp/ssh] succeeded!
    Connection to 192.168.56.2 80 port [tcp/http] succeeded!
    从结果中发现,该主机打开了22和80端口。

    tcpdump
    tcpdump(dump traffic on a network)是一个强大的命令行抓包工具,千万不要被它的名称误导以为只能抓取tcp包,它能抓任何协议的包。它能够实现Wireshark一样的功能,并且更加灵活自由!比如需要抓取目标主机是192.168.56.1,通过端口22的传输数据包:

    sudo tcpdump -n -i eth1 'dst host 192.168.56.1 && port 22'
    输出为:

    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
    23:57:39.507490 IP 192.168.56.2.22 > 192.168.56.1.54558: Flags [P.], seq 3010719012:3010719120, ack 1116715283, win 354, options [nop,nop,TS val 1049052 ecr 187891473], length 108
    23:57:39.507607 IP 192.168.56.2.22 > 192.168.56.1.54558: Flags [P.], seq 108:144, ack 1, win 354, options [nop,nop,TS val 1049052 ecr 187891473], length 36
    23:57:39.507784 IP 192.168.56.2.22 > 192.168.56.1.54558: Flags [P.], seq 144:252, ack 1, win 354, options [nop,nop,TS val 1049052 ecr 187891476], length 108
    抓取HTTP包:

    sudo tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
    其中0x4745为"GET"前两个字母"GE",0x4854为"HTTP"前两个字母"HT"。

    指定-A以ACII码输出数据包,使用-c指定抓取包的个数。

    telnet
    telnet协议客户端(user interface to the TELNET protocol),不过其功能并不仅仅限于telnet协议,有时也用来探测端口,比如查看本地端口22是否开放:

    fgp@controller:~$ telnet localhost 22
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6
    可见成功连接到localhost的22端口,说明端口已经打开,还输出了banner信息。

    ifconfig
    ifconfig也是熟悉的网卡配置工具(configure a network interface),我们经常使用它来查看网卡信息(比如IP地址、发送包的个数、接收包的个数、丢包个数等)以及配置网卡(开启关闭网卡、修改网络mtu、修改ip地址等)。

    查看网卡ip地址:

    fgp@controller:~$ ifconfig eth0
    eth0      Link encap:Ethernet  HWaddr 08:00:27:c9:b4:f2
              inet6 addr: fe80::a00:27ff:fec9:b4f2/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:27757 errors:0 dropped:0 overruns:0 frame:0
              TX packets:589 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:10519777 (10.5 MB)  TX bytes:83959 (83.9 KB)
    为网卡eth0增加一个新的地址(虚拟网卡):

    fgp@controller:~$ sudo ifconfig eth0:0 10.103.240.2/24
    fgp@controller:~$ ifconfig eth0:0
    eth0:0    Link encap:Ethernet  HWaddr 08:00:27:c9:b4:f2
              inet addr:10.103.240.2  Bcast:10.103.240.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    关闭网卡以及开启网卡:

    sudo ifconfig eth0 down

    sudo ifconfig eth0 up

    nslookup & dig
    nslookup用于交互式域名解析(query Internet name servers interactively),当然也可以直接传入域名作为Ad-Hoc命令使用,比如查看google.com的ip地址:

    fgp@controller:~$ nslookup google.com
    Server:         114.114.114.114
    Address:        114.114.114.114#53

    Non-authoritative answer:
    Name:   google.com
    Address: 37.61.54.158
    查看使用的DNS服务器地址:

    fgp@controller:~$ nslookup
    > server
    Default server: 114.114.114.114
    Address: 114.114.114.114#53
    Default server: 8.8.8.8
    Address: 8.8.8.8#53
    dig命令也是域名解析工具(DNS lookup utility),不过提供的信息更全面:

    fgp@controller:~$ dig google.com

    ; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> google.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53828
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

    ;; QUESTION SECTION:
    ;google.com.                    IN      A

    ;; ANSWER SECTION:
    google.com.             2730    IN      A       37.61.54.158

    ;; AUTHORITY SECTION:
    google.com.             10204   IN      NS      ns2.google.com.
    google.com.             10204   IN      NS      ns4.google.com.
    google.com.             10204   IN      NS      ns3.google.com.
    google.com.             10204   IN      NS      ns1.google.com.

    ;; ADDITIONAL SECTION:
    ns1.google.com.         86392   IN      A       216.239.32.10
    ns2.google.com.         80495   IN      A       216.239.34.10
    ns3.google.com.         85830   IN      A       216.239.36.10
    ns4.google.com.         13759   IN      A       216.239.38.10

    ;; Query time: 17 msec
    ;; SERVER: 114.114.114.114#53(114.114.114.114)
    ;; WHEN: Thu May 05 00:11:48 CST 2016
    ;; MSG SIZE  rcvd: 180


    whois

    whois用于查看域名所有者的信息(client for the whois directory service),比如注册邮箱、手机号码、域名服务商等:

    fgp@controller:~$ whois coolshell.cn
    Domain Name: coolshell.cn
    ROID: 20090825s10001s91994755-cn
    Domain Status: ok
    Registrant ID: hc401628324-cn
    Registrant: 陈皓
    Registrant Contact Email: haoel@hotmail.com
    Sponsoring Registrar: 阿里云计算有限公司(万网)
    Name Server: f1g1ns1.dnspod.net
    Name Server: f1g1ns2.dnspod.net
    Registration Time: 2009-08-25 00:40:26
    Expiration Time: 2020-08-25 00:40:26
    DNSSEC: unsigned
    我们发现coolshell.cn这个域名是陈皓在万网购买注册的,注册时间是2009年,注册邮箱是haoel@hotmail.com。

    route
    route命令用于查看和修改路由表:

    查看路由表:

    fgp@controller:~$ sudo route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 brqcb225471-1f
    172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 brqcb225471-1f
    192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
    增加/删除路由分别为add/del子命令,比如删除默认路由:

    sudo route del default
    增加默认路由,网关为192.168.1.1,网卡为brqcb225471-1f:

    sudo route add default gw 192.168.1.1 dev brqcb225471-1f


    ip

    ip命令可以说是无比强大了,它完全可以替换ifconfig、netstat、route、arp等命令,

    比如查看网卡eth1 IP地址:

    fgp@controller:~$ sudo ip addr ls  dev eth1
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff
        inet 192.168.56.2/24 brd 192.168.56.255 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fe9a:d5d1/64 scope link

           valid_lft forever preferred_lft forever


    查看网卡eth1配置:
    fgp@controller:~$ sudo ip link ls eth1
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

        link/ether 08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff


    查看路由:
    fgp@controller:~$ ip route
    default via 192.168.1.1 dev brqcb225471-1f
    172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1
    192.168.1.0/24 dev brqcb225471-1f  proto kernel  scope link  src 192.168.1.105
    192.168.56.0/24 dev eth1  proto kernel  scope link  src 192.168.56.2


    查看arp信息:

    fgp@controller:~$ sudo ip neigh
    192.168.56.1 dev eth1 lladdr 0a:00:27:00:00:00 REACHABLE
    192.168.0.6 dev vxlan-80 lladdr fa:16:3e:e1:30:c8 PERMANENT
    172.17.0.2 dev docker0 lladdr 02:42:ac:11:00:02 STALE
    192.168.56.3 dev eth1  FAILED
    192.168.1.1 dev brqcb225471-1f lladdr 30:fc:68:41:12:c6 STALE


    查看网络命名空间:

    fgp@controller:~$ sudo ip netns ls
    qrouter-24bf83c7-f61d-496b-8115-09f0f3d64d21
    qdhcp-9284d7a8-711a-4927-8a10-605b34372768
    qdhcp-cb225471-1f85-4771-b24b-a4a7108d93a4


    进入某个网络命名空间:

    fgp@controller:~$ sudo ip netns exec qrouter-24bf83c7-f61d-496b-8115-09f0f3d64d21 bash
    root@controller:~# ifconfig
      qg-0d258e6d-83 Link encap:Ethernet  HWaddr fa:16:3e:93:6f:a3
              inet addr:172.16.1.101  Bcast:172.16.1.255  Mask:255.255.255.0
              inet6 addr: fe80::f816:3eff:fe93:6fa3/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1035 errors:0 dropped:0 overruns:0 frame:0
              TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:102505 (102.5 KB)  TX bytes:1200 (1.2 KB)


    brctl
    brctl是linux网桥管理工具,可用于查看网桥、创建网桥、把网卡加入网桥等。
    查看网桥:
    fgp@controller:~$ sudo brctl show
    bridge name     bridge id               STP enabled     interfaces
    brq9284d7a8-71          8000.12841adee45f       no              tap36daf550-27
                                                            tape729e013-df
                                                            vxlan-80
    brqcb225471-1f          8000.080027c9b4f2       no              eth0
                                                            tap0d258e6d-83
                                                            tapb844e7a5-83
    docker0         8000.0242e4580b61       no              veth50ed8dd
    以上因为部署了openstack neutron以及docker,因此网桥比较复杂。 其他子命令如addbr用于创建网桥、delbr用户删除网桥(删除之前必须处于down状态,使用ip link set br_name down)、addif把网卡加到网桥等。

    traceroute
    ping命令用于探测两个主机间连通性以及响应速度,而traceroute会统计到目标主机的每一跳的网络状态(print the route packets trace to network host),这个命令常常用于判断网络故障,比如本地不通,可使用该命令探测出是哪个路由出问题了。如果网络很卡,该命令可判断哪里是瓶颈:

    fgp@controller:~$ sudo traceroute  -I -n int32bit.me
    traceroute to int32bit.me (192.30.252.154), 30 hops max, 60 byte packets
     1  192.168.1.1  4.610 ms  5.623 ms  5.515 ms
     2  117.100.96.1  5.449 ms  5.395 ms  5.356 ms
     3  124.205.97.48  5.362 ms  5.346 ms  5.331 ms
     4  218.241.165.5  5.322 ms  5.310 ms  5.299 ms
     5  218.241.165.9  5.187 ms  5.138 ms  7.386 ms
     ...
    可以看到,从主机到int32bit.me共经过30跳,并统计了每一跳间的响应时间。
    另外可以参考tracepath。

    curl
    curl是强大的URL传输工具,支持FILE, FTP, HTTP, HTTPS, IMAP, LDAP, POP3,RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET以及TFTP等协议。我们使用这个命令最常用的功能就是通过命令行发送HTTP请求以及下载文件,它几乎能够模拟所有浏览器的行为请求,比如模拟refer(从哪个页面跳转过来的)、cookie、agent(使用什么浏览器)等等,同时还能够模拟表单数据。

    curl -X POST -d "DDDDD=2013140333&upass=1q2w3e4r&save_me=1&R1=0" 10.3.8.211
    以上方法利用curl往认证服务器发送POST请求,发送数据为用户名以及密码(模拟表单输入)。
    具体用法参考buptLogin。
    Openstack的命令行工具,比如nova,传入--debug参数就会显示curl往nova-api的curl REST请求。
    curl命令非常强大,掌握了它能够发挥巨大的作用,其他有用参数列举如下:
    -i 显示头部信息
    -I 只显示头部信息,不显示正文
    -X 指定请求方法,比如GET、POST等
    -d 发送数据
    --form模拟表单,利用这个参数可以上传文件、模拟点击按钮等
    -A 指定用户代理,比如Mozilla/4.0,有些坑爹网址必须使用IE访问怎么办
    -b 设置cookie
    -c 指定cookie文件
    -e 指定referer,有些网址必须从某个页面跳转过去
    --header 设置请求的头部信息
    --user 有些页面需要HTTP认证, 传递name:password认证

    wget
    wget是一个强大的非交互网络下载工具(The non-interactive network downloader),虽然curl也支持文件下载,不过wget更强大,比如支持断点下载等。
    最简单的用法直接加上文件URL即可:
    wget http://xxx/xxx/video.mp4
    使用-r参数为递归的下载网页,默认递归深度为5,相当于爬虫,用户可以通过-l指定递归深度。
    注意wget默认没有开启断点下载功能,需要手动传入-c参数。
    如果需要批量下载,可以把所有的URL写入文件download.txt,然后通过-i指定下载文件列表:
    wget -i download.txt
    如果用户不指定保存文件名,wget默认会以最后一个符合/的后面的字符作为保存文件名,有时不是我们所期望的,此时需要-O指定保存的文件名。
    通过--limit-rate可以限制下载的最大速度。
    使用-b可以实现后台下载。
    另外wget甚至可以镜像整个网站:
    wget --mirror -p --convert-links -P int32bit http://int32bit.me
    wget还支持指定下载文件的格式,比如只下载jpg图片:

    wget -A.jpg -r -l 2 http://int32bit.me/


    axel

    axel是一个多线程下载工具(A light download accelerator for Linux),通过建立多连接,能够大幅度提高下载速度,所以我经常使用这个命令开挂下载大文件,比wget快多了,并且默认就支持断点下载:
    开启20个线程下载文件:
    axel -n 20 URL
    这个强大的下载工具极力推荐,非常好用!

    iptables
    iptables是强大的包过滤工具,Docker、Neutron都网络配置都离不开iptables。iptables通过一系列规则来实现数据包过滤、处理,能够实现防火墙、NAT等功能。当一个网络数据包进入到主机之前,先经过Netfilter检查,即iptables规则,检查通过则接受(Accept)进入本机资源,否则丢弃该包(Drop)。规则是有顺序的,如果匹配第一个规则,则执行该规则的Action,不会执行后续的规则。iptables的规则有多个表构成,每个表又由链(chain)构成,每个表的功能不一样,本文只涉及两个简单的表,即Filter表和NAT表,望文生义即可了解,Filter表用于包过滤,而NAT表用来进行源地址和目的地址的IP或者端口转换。
    1.Filter表
    Filter表主要和进入Linux本地的数据包有关,也是默认的表。该表主要由三条链构成:
    INPUT:对进入主机的数据包过滤
    OUTPUT:对本地发送的数据包过滤
    FORWARD:传递数据包到后端计算机,与NAT有点类似。


    查看本地的Filter表:

    fgp@controller:~$ sudo iptables -n -t filter --list
    [root@portal ~]# iptables -n -t filter --list
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    其中-n表示不进行域名解析,-t指定使用的表,--list表示列出所有规则。我们发现目前没有定义任何规则。注意链后面的policy为ACCEPT,表示若通过所有的规则都不匹配,则为默认action accept。

    接下来将通过几个demo实例演示怎么使用Filter表。

    注意:

    本文实验使用的是本机虚拟机,其中宿主机地址为192.168.56.1,虚拟机地址为192.168.56.2,在实验中会涉及丢弃192.168.56.1的数据包,如果您连接的是远程云主机,将导致和远程主机断开连接。
    以下每个步骤,除非特别说明,下一个步骤执行前,务必清空上一个步骤的规则:
    sudo iptables -F
    首先看一个简单的例子,把192.168.56.1加入黑名单禁止其访问:

    sudo iptables -A INPUT -i eth1 -s 192.168.56.1 -j DROP
    例子中-A表示追加规则,INPUT是链名,-i指定网卡,-s指定源IP地址,-j指定action,这里为DROP,即丢弃包。

    此时192.168.56.1这个ip不能和主机通信了,ssh会立即掉线,只能通过vnc连接了!

    -s不仅能够指定IP地址,还可以指定网络地址,使用-p指定协议类型,比如我们需要丢掉所有来自192.168.56.0/24这个网络地址的ICMP包,即不允许ping:

    sudo iptables -A INPUT -s 192.168.56.0/24 -i eth1 -p icmp -j DROP
    输出结果:

    ?  ~ nc -z 192.168.56.2 22
    Connection to 192.168.56.2 port 22 [tcp/ssh] succeeded!
    ?  ~ ping 192.168.56.2
    PING 192.168.56.2 (192.168.56.2): 56 data bytes
    Request timeout for icmp_seq 0
    Request timeout for icmp_seq 1
    ^C
    --- 192.168.56.2 ping statistics ---
    3 packets transmitted, 0 packets received, 100.0% packet loss
    我们发现能够通过nc连接主机,但ping不通。

    我们还可以通过--dport指定目标端口,比如不允许192.168.56.1这个主机ssh连接(不允许访问22端口):

    sudo iptables -A INPUT -s 192.168.56.1 -p tcp --dport 22 -i eth1 -j DROP
    注意:使用--dport或者--sport必须同时使用-p指定协议类型,否则无效!

    以上把192.168.56.1打入了ssh黑名单,此时能够ping通主机,但无法通过ssh连接主机。

    Filter表的介绍就到此为止,接下来看NAT表的实例。

    2.NAT表
    NAT表默认由以下三条链构成:

    PREROUTING:在进行路由判断前所要进行的规则(DNAT/Redirect)
    POSTROUTING: 在进行路由判断之后要进行的规则(SNAT/MASQUERADE)
    OUTPUT: 与发送的数据包有关
    根据需要修改的是源IP地址还是目标IP地址,NAT可以分为两种:

    DNAT:需要修改目标地址(IP或者端口),使用场景为从外网来的数据包需要映射到内部的一个私有IP,比如46.64.22.33->192.168.56.1。显然作用在PREROUTING。
    SNAT:需要修改源地址(IP或者端口),使用场景和DNAT相反,内部私有IP需要发数据包出去,必须首先映射成公有IP,比如192.168.56.1->46.64.22.33。显然作用在POSTROUTING。
    首先实现介绍一个简单的demo,端口转发,我们把所有来自2222的tcp请求转发到本机的22端口,显然需要修改目标地址,因此属于DNAT:

    sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-ports 22
    此时在192.168.56.1上使用ssh连接,指定端口为2222:

    ssh fgp@192.168.56.2 -p 2222
    我们能够顺利登录,说明端口转发成功。

    另一个例子是使用双网卡linux系统作为路由器,我们有一台服务器controller有两个网卡:

    eth0: 192.168.1.102 # 可以通外网
    eth1: 192.168.56.2 # 不可以通外网,用作网关接口。
    另外一台服务器node1只有一个网卡eth1,IP地址为192.168.56.3,不能通外网。我们设置默认路由为controller机器的eth1:

    sudo route add default gw 192.168.56.2 dev eth1
    此时路由表信息为:

    fgp@node1:~$ sudo route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.56.2    0.0.0.0         UG    0      0        0 eth1
    192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
    由路由表可知,node1上的数据包会发送到网关192.168.56.2,即controller节点.

    接下来我们要在服务器controller上配置NAT,我们需要实现192.168.56.0/24的IP都转发到eth0,显然是SNAT,修改的源地址为eth0 IP地址192.168.1.102:

    sudo iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o eth0 -j SNAT --to-source 192.168.1.102
    其中-t指定nat表,-A 指定链为POSTROUTING,-s 为源ip地址段,-o指定转发网卡,注意-j参数指定action为SNAT,并指定eth0 IP地址(注意eth0可能配置多个ip地址,因此必须指定--to-source)。

    此时在node1机器上检测网络连通性:

    fgp@node1:~$ ping baidu.com -c 2
    PING baidu.com (180.149.132.47) 56(84) bytes of data.
    64 bytes from 180.149.132.47: icmp_seq=1 ttl=48 time=7.94 ms
    64 bytes from 180.149.132.47: icmp_seq=2 ttl=48 time=6.32 ms

    --- baidu.com ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1002ms
    rtt min/avg/max/mdev = 6.328/7.137/7.946/0.809 ms
    node1能够正常上网。

    以上通过使用controller的网卡eth0作为路由实现了node1的上网,但同时有一个问题存在,我们在指定SNAT时必须手动指定IP,如果eth0 IP地址变化了,必须修改iptables规则。显然这样很难维护,我们可以通过MASQUERADE实现动态SNAT,不需要指定IP地址:

    sudo iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o eth0 -j MASQUERADE
    其他
    使用iptables-save能够导出规则,使用iptables-restore能够从文件中导入规则。

    ipset
    以上我们通过iptables封IP,如果IP地址非常多,我们就需要加入很多的规则,这些规则需要一一判断,性能会下降(线性的)。ipset能够把多个主机放入一个集合,iptables能够针对这个集合设置规则,既方便操作,又提高了执行效率。注意ipset并不是只能把ip放入集合,还能把网络地址、mac地址、端口等也放入到集合中。

    首先我们创建一个ipset:

    sudo ipset create blacklist hash:ip
    以上创建了一个blacklist集合,集合名称后面为存储类型,除了hash表,还支持bitmap、link等,后面是存储类型,我们指定的是ip,表示我们的集合元素为ip地址。

    我们为这个blacklist集合增加一条规则,禁止访问:

    sudo iptables -I INPUT -m set --match-set blacklist src -j DROP 
    此时只要在blacklist的ip地址就会自动加入黑名单。

    我们把192.168.56.1和192.168.56.3加入黑名单中:

    sudo ipset add blacklist 192.168.56.3
    sudo ipset add blacklist 192.168.56.1
    此时ssh连接中断,使用vnc连接查看:

    fgp@controller:~/github/int32bit.github.io$ sudo ipset list blacklist
    Name: blacklist
    Type: hash:ip
    Revision: 2
    Header: family inet hashsize 1024 maxelem 65536
    Size in memory: 176
    References: 1
    Members:
    192.168.56.1
    192.168.56.3
    把192.168.56.1移除黑名单:

    sudo ipset del blacklist 192.168.56.1
    我们上面的例子指定的类型为ip,除了ip,还可以是网络段,端口号(支持指定TCP/UDP协议),mac地址,网络接口名称,或者上述各种类型的组合。比如指定 hash:ip,port就是 IP地址和端口号共同作为hash的键。指定类型为net既可以放入ip地址,也可以放入网络地址。

    另外ipset还支持timeout参数,可以指定时间,单位为秒,超过这个时间,ipset会自动从集合中移除这个元素,比如封192.168.56.11分钟时间不允许访问

    sudo ipset create blacklist hash:net timeout 300
    sudo ipset add blacklist 192.168.56.1 timeout 60
    以上首先创建了支持timeout的集合,这个集合默认超时时间为300s,接着把192.168.56.1加入到集合中并设置时间为60s。

    注意:执行ipset add时指定timeout必须保证创建的集合支持timeout参数,即设置默认的timeout时间.如果不想为集合设置默认timeout时间,而又想支持timeout,可以设置timeout为0,相当于默认不会超时。

    总结
    本文总结了Linux中的常用的网络工具,其中包括

    网络配置相关:ifconfig、ip
    路由相关:route、netstat、ip
    查看端口工具:netstat、lsof、ss、nc、telnet
    下载工具:curl、wget、axel
    防火墙:iptables、ipset
    流量相关:iftop、nethogs
    连通性及响应速度:ping、traceroute、mtr、tracepath
    域名相关:nslookup、dig、whois
    web服务器:python、nginx
    抓包相关:tcpdump

    网桥相关:ip、brctl、ifconfig、ovs

    Linux网络配置

    interface文件

    # interfaces(5) file used by ifup(8) and ifdown(8)
    auto lo
    iface lo inet looback

    #The primary network interface
    auto ens33  //Ubuntu16.04以后名字可能是ens33要自己查看
    iface ens33 inet static
    address 202.202.72.245
    netmask 255.255.255.0
    gateway 202.202.72.129
    dns-nameserver 8.8.8.8
    netmask 255.255.255.0

    今天配置了一天,学会了一些命令
    sudo /etc/init.d/networking restart  //重启网络
    sudo gedit /etc/network/interfaces //用gedit编辑器写网络配置文件 ,vim简直是折磨。
    vi是vim简称 vim 有两种编辑模式,1、普通模式:会把所有键入的东西都当做指令h左移j下移k上移l右移;2:点击i进入插入模式,Esc退出;shift+:wq保存。
    vim /etc/network/interfaces vim编辑网络配置
    su root 进入root模式 su:用户之间进行切换命令

    sudo命令用来以其他身份来执行命令,预设的身份为root

    有线网络出问题参考:http://blog.csdn.net/zengxianyang/article/details/50402002

    Ubuntu16.04设置静态网络:http://blog.csdn.net/xiaohuozi_2016/article/details/54743992       /   http://blog.csdn.net/hurricane_0x01/article/details/51941941

    ************************Linux防火墙*******************************

    一篇很好的介绍iptables的博文:http://blog.chinaunix.net/uid-26495963-id-3279216.html

    shelll脚本基础

    http://www.runoob.com/linux/linux-shell-include-file.html

    展开全文
  • Linux——linux学习全攻略 (转)

    万次阅读 多人点赞 2011-02-23 10:26:00
    Linux——linux学习全攻略 Linux——linux学习全攻略 Linux——linux学习全攻略
  • Linux学习路线

    万次阅读 2015-04-09 10:19:27
    自己的学习路线写一下最近个人的linux学习路线,学完后再好好参考其他人的:1.《Linux程序设计》- 靠它来入门,然后装一个linux系统,学习shell(bash)和linux C,把基础打牢; 2. 《深入理解Linux内核》和《Linux...
  • Linux学习路线图

    千次阅读 多人点赞 2018-02-07 22:39:00
    Linux学习进阶路线图 摘自:http://blog.csdn.net/zdwzzu2006/article/details/4334791Linux 基础Linux 基础Linux安装专题教程Linux中文环境Linux—从菜鸟到高手 鸟哥的Linux私房菜 基础学习篇(第二版)Ubuntu ...
  • 嵌入式linux学习路线参考(LINUX学习者必看经典)

    万次阅读 多人点赞 2016-11-17 10:11:44
    整理了嵌入式linux学习路线供参考,希望对您有所参考价值! 一、linux入门 目前嵌入式主要开发环境有 Linux、Wince等;Linux因其开源、开发操作便利而被广泛采用。而Linux操作系统也只是一个简单的操作...
  • 目录前言Linux常用命令介绍(1)ifconfig(2)pwd(3)cd(4)ls(5)clear(6)touch(7)cat(8)more(9)head(10)tail(11)mkdir(12)cp(13) rm...上一篇文章:学习笔记之Linux学习(一) 介绍了VMware Wo
  • linux学习书籍推荐linux学习书籍推荐

    千次阅读 2019-08-21 16:39:39
    linux编程学习 inux 学习书目推荐 Linux基础 1、《Linux与Unix Shell 编程指南》 C语言基础 1、《C Primer Plus,5th Edition》【美】Stephen Prata著 2、《The C Programming Language, 2nd Edition》【美】...
  • 学习linux要多久?linux学习

    千次阅读 多人点赞 2018-03-09 15:28:13
    随着互联网的迅猛发展,Linux得到了广发的应用,目前市场是百分之八十服务器端都在使用Linux操作系统,小至私人企业,大至世界百强企业,均有Linux操作系统使用者,因此,Linux就业前景很不错,很多人想学习Linux,...
  • Linux学习(二)--远程登录Linux系统

    千次阅读 2020-11-29 11:21:58
    Linux学习–远程登录Linux系统 一、明白为什么我们需要远程登入Linux系统?   在以后工作的时候,Linux服务器是开发小组共享,而正式上线的项目是运行在公网的,因此程序员需要远程登入到CentOS或者Ubuntu等Linux...
  • Linux学习进阶路线图

    千次阅读 2019-03-04 21:56:33
    Linux学习进阶路线图 学习Linux的一个指南 为什么要学习Linux? 为什么学Linux,每个人都有自己的理由: Linux是免费的不用花一分钱,能够节约大笔的成本; Linux是开源的,你可以根据自已的需要修改源代码; Linux...
  • Linux学习之开始 - 看什么Linux书籍

    千次阅读 2017-04-13 10:04:58
    linux学习,书籍
  • Linux学习路线及网络编程经典书籍

    万次阅读 多人点赞 2017-05-09 15:05:30
    linux学习资源整理:https://zhuanlan.zhihu.com/p/22654634 Linux初学者(学习资料):https://zhuanlan.zhihu.com/p/21723250 知乎 - 你是如何学习 Linux 编程的?:https://www.zhihu.com/question/20730157 如果让...
  • Linux学习】Linux free 命令学习

    千次阅读 2018-11-20 15:23:43
    一、学习这个命令的背景 因为最近Gitlab服务器占用内存很多,也在下面的这篇博客里面写了怎么减少Gitlab占用的内存问题。 +【Git学习】解决GitLab内存消耗大的问题 但是一开始并没有很清楚的...linux的内核版本号...
  • Linux学习推荐书籍

    千次阅读 2013-12-07 16:58:27
    Linux学习推荐书籍
  • 新手必会的Linux学习小技巧

    千次阅读 多人点赞 2020-04-24 09:30:57
    本文不是Linux学习计划的清单,而是展示了每位Linux学习者如何学习,如何在Linux世界中树立正常和健康的学习态度,以及如何防止Linux小白学习走弯路。 1 如何正确比较Linux与Windows 对于刚接触Linux的使用者来说,...
  • Linux学习笔记 --- Linux 下 yum源配置文件 repo 文件学习
  • Linux学习笔记1

    千次阅读 2016-03-28 19:04:38
    Linux学习笔记1Linux学习笔记1配置网卡 配置详情 重启服务 配置DNS 配置详情 安装网络工具组件 CentOS 7中没有ifconfig命令而且不能发现eth0 centOS7在VirtualBox中装好后的网络连接问题 安装VIM配置网卡 vi /etc/...
  • Linux学习笔记5—Linux常用命令之用户、权限管理 引言 用户是Unix/Linux系统工作中重要的一环,用户管理包括用户与组账号的管理。 在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须...
  • Linux学习-vmware虚拟机安装tomcat

    千次阅读 2016-05-21 19:19:24
    Linux学习-vmware虚拟机安装tomcat
  • Linux学习—退出vi编辑模式

    万次阅读 2016-02-16 20:15:22
    Linux学习中总结退出vi编辑模式
  • I.MX6ULL ARM Linux学习笔记

    千次阅读 2020-02-21 10:06:01
    I.MX6ULL ARM Linux学习笔记写在前面 写在前面 本文章为我在学习I.MX6ULL ARM Linux时的记录文章,知识来源为《正点原子阿尔法 I.MX6ULL ARM Linux开发板》的视频教程和野火《i.MX Linux开发实战指南》的视频和电子...
  • 阿里云ECS训练营开课了,这是我第四天打卡任务,云端搭建linux学习环境 本人只在csdn写博客 云端搭建linux学习环境一. 购买云服务器二 .下载远程管理三. 为Linux环境安装图形化桌面(Gnome)错误:显示No such file...
  • linux 学习计划

    千次阅读 2016-03-20 22:57:01
    开始学习linux要做好计划1.熟悉linux启动过程 3月最后一周 2.熟悉shell脚本编写,linux维护 4月第一周3.熟悉linux网络编程以及异常处理 4月第二周---第三周4.熟悉linux设备驱动程序加载过程 4月第四周5.熟悉linux...
  • linux学习方法!该怎样学习linux,通过什么步骤呢,高手们给个答案呗

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 190,279
精华内容 76,111
关键字:

linux学习

linux 订阅