Linux Foundation(笔记)

/*************************************************************
 *                    Linux Foundation
 *   1. 总结一下Linux的基础内容;
 *   2. 主要目标是防止以后忘记了,这里有个地方可以快速回忆;
 *
 *                                2015-3-29 晴 深圳 曾剑锋
 ************************************************************/

          \\\\\\\\\\\\\\\\\*目录*////////////////
          |  一. 退出终端的三种方法:           
          |  二. 关机:                         
          |  三. 重启:                         
          |  四. 快速打开文件夹:               
          |  五. 快速输入:                     
          |  六. 锁屏:                         
          |  七. 配置网络,进行联网:            
          |  八. shell命令处理顺序:            
          |  九. 把标准错误合并到标准输出:     
          |  十. 命令历史:                     
          |  十一. 环境变量:                   
          |  十二. bash配置文件:                
          |  十三. 什么叫正则表达式?            
          |  十四. 计算机网络:                 
          |  十五. arp查看网络:                
          |  十六. nc监听端口,netstat查询端口:  
          |  十七. 修改系统的DNS服务器:         
          |  十八. 五个类别的IP地址:            
          |  十九. TCP连接建立,断开:           
          |  二十. 路由表:                      
          |  二十一. 数据包转发:                  
          |  二十二. iptables语法               
          \\\\\\\\\\\\\\\\\\\\///////////////////

一. 退出终端的三种方法:
    1. 执行命令 logout
    2. 执行命令 exit
    3. 按组合键 Ctrl+D

二. 关机:
    1. init 0
    2. shutdown -h now (root权限) 
    
三. 重启:
    1. reboot
    2. init 1
    2. shutdown -r now   (root权限)
    3. shutdown -r 10    (root权限,过10分钟重启)
    4. shutdown -r 20:35 (root权限,在20:35重启)

四. 快速打开文件夹:
    nautilus .

五. 快速输入:
    按组合键Ctrl+L可以弹出窗口,用以输入目标目录的位置

六. 锁屏:
    1. 组合键Ctrl+Alt+L可用于快速锁屏(推荐)
    2. 运行系统菜单项 System -> Lock Screen

七. 配置网络,进行联网:
    1. 打开gnome-terminal
    2. 切换成root身份
    3. 关闭NetworkManager 服务,NetworkManager 服务会干扰网络配置,必须把它关闭
        1. service NetworkManager stop
        2. chkconfig --level 2345 NetworkManager off
    4. 确认网线已经连接好,以eth0 为例
        1. ifconfig eth0 up
        2. mii-tool eth0
            eth0: negotiated 100baseTx-FD flow-control, link ok     <-- 网线已经连好
        3. mii-tool eth0
            eth0: no link                                           <-- 网线没有连好
    6. 上面找到的网卡可能不止一个,挑其中一个进行配置即可,用vim命令编辑网卡的配置文件:
        vim /etc/sysconfig/network-scripts/ifcfg-eth0
        按照下面的范例进行修改,然后保存,退出.两条虚线和每一行右边的描述文字不属于配置文件的内容.
            -------------------------------------------
            DEVICE=eth0                 <-- 网卡名字
            BOOTPROTO=static            <-- 使用固定IP
            NM_CONTROLLED=no
            ONBOOT=yes                  <-- 自动启动
            TYPE=Ethernet
            IPADDR=10.1.1.11            <-- IP 地址
            NETMASK=255.255.255.0       <-- 子网掩码
            GATEWAY=10.1.1.1            <-- 默认网关
            DNS1=10.1.1.1               <-- DNS 服务器
            -------------------------------------------

八. shell读取命令行输入后,按以下顺序进行处理:
    1. 把变量赋值和重定向的字符保存起来,留到后面使用
    2. 执行各种展开操作 (包括命令别名展开,参数/变量展开,等等)
    3. 设置重定向
    4. 给变量赋值
    5. 如果命令名中不包含斜杠,shell会按照这个顺序查找命令,并执行首先找到的命令:
        函数 --> 内部命令 --> PATH中的可执行文件
    6. 如果命令名中包含了斜杠,shell会把命令名当文件路径,然后去执行该文件

九. 把标准错误合并到标准输出:
    1. ls /home /root 1> /tmp/good 2>&1     <-- good
        1. 默认值           1  --- 屏幕
        2. 1> /tmp/good     1  --- /tmp/good
        3. 2>&1             2  --- /tmp/good
    2. ls /home /root 2>&1 1> /tmp/good     <-- bad
        1. 默认值           1  --- 屏幕
        2. 2>&1             2  --- 屏幕
        3. 1> /tmp/good     1  --- /tmp/good

十. 命令历史:
    1. set -o history      <-- 启用命令历史功能 
    2. set +o history      <-- 关闭命令历史功能 
    3. history             <-- 显示命令的历史
    
十一. 环境变量:
    1. 环境变量可以被子进程访问;
    2. 查看当前的环境变量: env 
    3. set命令可以列出更多信息;
    4. 定义(设置)一个环境变量,用的是命令export,有两种做法:
        1. 先定义,后export:
            TMOUT=300
            HISTSIZE=100000
            export TMOUT HISTSIZE
        2. 一步到位export:
            export TMOUT=300 HISTSIZE=100000
    5. 几个环境变量介绍
        1. PATH                                     <-- 影响命令的搜索
        2. TMOUT                                    <-- 超时时间
        3. PS1                                      <-- 命令提示符
        4. HISTSIZE, HISTFILESIZE, HISTTIMEFORMAT   <-- 命令历史

十二. bash配置文件:
    1. Bash shell 常用的配置文件有以下几个:
        1. /etc/profile       <-- 全局配置文件,作用于系统上所有的用户
        2. /etc/bashrc        <-- 全局配置文件,作用于系统上所有的用户
        3. ~/.bash_profile    <-- 用户配置文件
        4. ~/.bashrc          <-- 用户配置文件
        5. ~/.bash_logout     <-- 用户配置文件
    2. 根据shell 的启动方式不同,可以大致地把shell分为以下几种:
        1. login shell              <-- 在文本界面登录,su -, bash --login
        2. interactive shell        <-- gnome-terminal 中的shell
        3. non-interactive shell    <-- 用来运行脚本的shell
    3. 在红帽企业版6.3上面,/etc/profile, ~/.bash_profile, ~/.bashrc, /etc/bashrc 这四者的调用关系图如下:

               login shell                    interactive shell
                  /  \                                |
                 /    \                               |
              1 /      \ 2                            |
               /        \                             |
              /          \                            v
     /etc/profile       ~/.bash_profile  ----->  ~/.bashrc  -----> /etc/bashrc

        1. login shell开始运行时会按顺序读取文件/etc/profile和~/.bash_profile
        2. interactive shell 开始运行时会读取文件 ~/.bashrc
        3. ~/.bash_profile 会调用~/.bashrc
        4. ~/.bashrc 会调用 /etc/bashrc
    4. 另外,login shell 退出时会读取文件 ~/.bash_logout
    5. 根据以上特点,可以通过修改上面几个配置文件,来修改shell的行为

十三. 什么叫正则表达式?
    1. 正规表示法: Regular expression
    2. 单个字符表示法:
        字符本身        <-- 除了下面的特殊字符之外,字符可以表示其本身
        .               <-- Any character
        \d              <-- Digit in 0123456789
        \D              <-- Non-digit 
        \w              <-- Word: letters, digits, underscore (_)
        \W              <-- Non-word 
        \t              <-- Tab
        \r              <-- Carriage return
        \n              <-- New line
        \s              <-- Whitespace: space, \t, \r, \n
        \S              <-- Non-whitespace
        [abc]           <-- a, or b, or c
        [a-c]           <-- a, or b, or c
        [0-2]           <-- 0, or 1, or 2
        [1-3a-cX-Z]     <-- 1, 2, 3, a, b, c, X, Y, Z
        [^abc]          <-- Any character except a and b and c
        [:upper:]       <-- Upper case letters, [A-Z]
        [:lower:]       <-- Lower case letters, [a-z]
        [:alpha:]       <-- Alphabetic characters, [a-zA-Z]
        [:alnum:]       <-- Alphanumeric characters, [a-zA-Z0-9]
        [:digit:]       <-- Digits, [0-9]
        [:xdigit:]      <-- Hexadecimal digits, [a-fA-F0-9]
        [:punct:]       <-- Punctuation and symbols, [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-]
        [:blank:]       <-- Space and tab, [ \t]
        [:space:]       <-- All whitespace characters including line breaks, [ \t\r\n\v\f]
        [:cntrl:]       <-- Control characters, [\x00-\x1F\x7F]
        [:graph:]       <-- Visible characters (i.e. anything except spaces, control characters, etc.), [\x21-\x7E]
        [:print:]       <-- Visible characters and spaces (i.e. anything except control characters, etc.), [\x20-\x7E]
        [:word:]        <-- Word characters (letters, numbers and underscores), [a-zA-Z0-9_]
        [:ascii:]       <-- ASCII characters, [\x00-\x7F]
    3. 特殊字符表示法
        ^$.*+?|\{}[]() 都有特殊意义的,如果需要表示这些符号,则可以用反斜杠对它们进行转义,比如:
        \. 匹配一个点
        \\ 匹配一个反斜杠
        \^
        \$
    4. 数量表示法, 用来表示前面的一个字符,或者一组字符重复的次数
        *           <-- 任意次,     c >= 0
        +           <-- 至少1次,    c >= 1
        ?           <-- 0次或者1次, c == 0 || c == 1
        {m}         <-- m 次,       c == m
        {m,}        <-- 至少m 次,   c >= m
        {m,n}       <-- m 次至n 次, c >= m && c <= n
    
       1. 默认情况下,数量表示符只作用于前面的【一个】字符,如果需要
          作用于前面的多个字符,可以使用(...)把前面的字符括起来
           1. ab+  匹配ab, abb, abbb, abbbb...
           2. (ab)+ 匹配ab, abab, ababab, abababab...
       
       2. 默认情况下,数量表示符是最大匹配,好的正则表达式引擎支持用
          问号?来启用最小匹配
           1. .*b   匹配 aaabababa      <-- 最大匹配
                         ^^^^^^^^
           2. .*?b  匹配 aaabababa      <-- 最小匹配
                         ^^^^
    5. 分组表示法
        (abc)       <-- 一组连续的字符abc
        (aa|bb)     <-- 一组连续的字符ab 或者 bb
    6. 边界表示法
        ^           <-- 字符串的开头
        $           <-- 字符串的结尾
        \b          <-- 单词边界
        \B          <-- 非单词边界
        \<          <-- 单词左边界
        \>          <-- 单词右边界
    7. 引用表示法,从左边开始数左小括号(openning brace),数字从1开始,
       被第一对括号匹配的字符可以用\1 来引用,第二对可以用\2 来引用,以此类推.
        1. echo abcabcabcaabb | grep -E '(a(bc)){2}\1' --color
            abcabcabcaabb
        2. echo abcabcabcaabb | grep -E '(a(bc)){2}a\2' --color
            abcabcabcaabb
        3. echo "hello world, hello world, hello beautiful world" | grep -E --color '((hello) (world)), \1, \2 .* \3'
            hello world, hello world, hello beautiful world
    8. 时间表示方法
        date | grep --color -oE '([0-1][0-9]|2[0-3])(:[0-5][0-9]){2}'
    9. 日期表示方法
        echo 2014-07-07 12:30:30 | grep --color -E '[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])'
    10. IP的表示方法
        ifconfig | grep --color -E '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
    11. MAC 地址的表示方法
        ifconfig | grep --color -E '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}'

十四. 计算机网络:
    1. 当通过网络安装操作系统时,客户机上的临时系统需要从服务器下载文件,背后的流程是怎样的?
       此时客户机和服务器同处一个局域网(在同一个网络中),通信模式是主机 <---> 主机
    2. 交换机:
       用来连接同一个网络(局域网,本地网络)的主机
    3. 当用户从互联网上下载一个文件的时候,背后的流程又是怎样的?
       此时客户机和服务器处于不同的网络,情况复杂了一些,通信模式是网络 <---> 网络
    4. 路由器用来连接不同的网络
    5. 网页浏览器,网卡驱动程序,硬件设备,协议(书面写的协议,和协议的实现,比如程序)
    6. 协议的实现(implementation)
        1. TCP/IP 协议族:
            TCP, UDP, IP, ICMP, IGMP, ARP, HTTP, FTP, TFTP, DNS, DHCP
        2. TCP/IP 的分层结构
            1. 应用层(Application): http, ftp, tftp, dns, dhcp
            2. 运输层(transport,传输层): TCP,UDP
               在两台主机上的进程之间传输数据
            3. 网络层(Internet): IP, IGMP, ICMP
               在两台主机之间传输数据
            4. 链接层(Link):
               负责在局域网(本地网)内的主机之间传输数据
            
十五. arp查看网络:
    1. IP: 10.1.1.1
    2. MAC: 1C:6F:65:66:F2:55
    3. arp -s 10.1.1.1 1C:6F:65:66:F2:55
    4. arp -n 10.1.1.1
    5. 快速获取当前局域网里所有主机的MAC地址,假设局域网IP的范围是11至41
        for i in {11..41}
        do
            ping -c1 -W1 10.1.1.${i} &>/dev/null &
        done

十六. 用命令nc监听本地的30000端口,然后用netstat列出该记录:
    1. nc -l 10.1.1.1 30000
    2. netstat -tulpn | grep 30000

十七. 修改系统的DNS服务器:
    1. 打开 /etc/resolv.conf
        vim /etc/resolv.conf
    2. 把里面所有的记录删除,然后添加以下一行
        nameserver 8.8.8.8
    3. 保存退出

十八. 五个类别的IP地址:
    1. A类地址首位为0
    2. B类地址首两位为10
    3. C类地址首三位为110
    4. D类地址首四位为1110
    5. E类地址首五位为11110

十九. TCP连接建立,断开:
    1. TCP 连接的建立:
        TCP 连接的建立需要经历一个被称为“三次握手”的过程:
    2. TCP 连接的断开:
        TCP 连接的断开,一般需要经历四个阶段,某些情况下是三个阶段.
    
二十. 路由表操作:
    1. IP层在内存中有一个路由表,当需要发送数据包时,它都要对该表搜索一次
        1. route -n
            Kernel IP routing table
            Destination   Gateway       Genmask         Flags Metric Ref Use Iface
            8.8.8.8       192.168.199.2 255.255.255.255 UGH   0      0     0 eth0
            192.168.6.0   0.0.0.0       255.255.255.0   U     0      0     0 vmnet8
            192.168.71.0  0.0.0.0       255.255.255.0   U     0      0     0 vmnet1
            192.168.199.0 0.0.0.0       255.255.255.0   U     0      0     0 eth0
            10.1.1.0      0.0.0.0       255.255.255.0   U     0      0     0 eth0
            169.254.0.0   0.0.0.0       255.255.0.0     U     1002   0     0 eth0
            0.0.0.0       192.168.199.1 0.0.0.0         UG    0      0     0 eth0
            标记的含义:
                U   <-- route is up
                G   <-- use gateway
                H   <-- target is a host (没有此标记代表这是到某个网络的路由)
    2. 管理路由表
        1. route -n                                 <-- 查看
        2. route add default gw 10.1.1.1            <-- 添加一条默认路由
        3. route del default gw 10.1.1.1            <-- 删除指定的默认路由
        4. route add -net 10.1.2.0/24 gw 10.1.1.2   <-- 添加到达指定网络的路由
        5. route del -net 10.1.2.0/24 gw 10.1.1.2   <-- 删除达到指定网络的路由
        6. route add -host 10.1.3.1 gw 10.1.1.3     <-- 添加到达指定主机的路由
        7. route del -host 10.1.3.1 gw 10.1.1.3     <-- 删除达到指定主机的路由
        8. route add -net 10.1.2.0/24 dev eth0      <-- 添加一条直连路由

二十一. 数据包转发
    1. 当主机收到来自某个网络接口的数据时,它会按照以下方式进行处理:
        1. 检查数据中的目的IP是否为本机的IP之一或者广播地址:
            1. 是,则把数据送到相应的协议模块进行处理
            2. 否,则进入下一步
        2. 检查主机是否被设置为路由器:
            1. 是,则对数据进行转发
            2. 否,丢弃数据
    1. 把Linux 系统配置成路由器的步骤
        1. 编辑文件:/etc/sysctl.conf
            net.ipv4.ip_forward = 1     <-- 设置为1,代表启用包转发功能
        2. 运行命令sysctl -p使上一个的配置生效
        3. 确认防火墙没有阻挡包的转发
            1. iptables -F FORWARD
            2. iptables -P FORWARD ACCEPT
        4. 把当前的iptables 的设置写入配置文件中:service iptables save,
           配置将会保存到/etc/sysconfig/iptables 中

二十二. iptables语法
    1. 参数列表:
        -A append, 在链的尾部添加规则
        -D delete, 删除规则
        -L list, 列出规则 
        -S list, 列出规则,规则的形式和命令行一样
        -n numeric, 以数值显示
        -I insert, 在链的指定位置(默认为最前面)插入规则 
        -v verbose 显示统计数据,与-L一起用,看到的信息更多
        --line-numbers 显示规则的序号
        -F flush, 用于清空规则
        -t table, 表名(比如nat)
        -P policy, 用于设置链的默认策略
        -p protocol, 协议名
        --dport destination port, 目标端口
        --sport source port, 源端口
        -d destination, 目标IP 地址
        -s source, 源IP 地址或者网络
        -i input interface, 网卡,数据包的来源网卡
        -o output interface, 网卡,数据包的目标网卡
        -j jump, 动作
    2. 动作的分类:
        ACCEPT      允许
        DROP        丢弃数据包,不回应源端
        REJECT      丢弃数据包,回应源端
        SNAT        源地址转换
        DNAT        目标地址转换
        MASQUERADE  IP 伪装,实质上是SNAT,常用于外网IP 不固定的场合,比如PPP拔号
        LOG         记录日志
    3. iptables的表:
        1. filter (默认的表)
        2. nat
    4. iptables 匹配规则的顺序是从上往下逐条匹配,找到匹配的条目后就不再继续往下
       匹配了,如果没有找到匹配的条目,就按照默认策略处理.
    5. 举例:
        1. 只允许10.1.1.20 ping,拒绝其他所有IP (注意两条规则的顺序)
           iptables -A INPUT -p icmp -s 10.1.1.20/32 -j ACCEPT
           iptables -A INPUT -p icmp -j DROP
        2. 把一条规则加到链的最前面
           iptables [-t table] -I chain rule-specification
           iptables -I INPUT -p tcp --dport 22 -j REJECT
        3. 把一条规则加到链的指定位置
           iptables [-t table] -I chain rulenum rule-specification
           iptables -I INPUT 2 -p tcp --dport 22 -j REJECT
        4. 删除指定的某条规则
           iptables [-t table] -D chain rulenum
           iptables -I INPUT 10
        5. 清空规则
           iptables [-t table] -F [chain]
           iptables -F OUTPUT
           iptables -t nat -F POSTROUTING
        6. 多端口的写法
           iptables -A INPUT -p tcp --dport 1:1000 -j ACCEPT
           iptables -A INPUT -p tcp -m multiport --dport 22,80,110 -j ACCEPT
        7. 允许对本机的TCP 22, 25, 80 端口的访问
           iptables -A INPUT -p tcp -m multiport --dport 22,25,80 -j ACCEPT
        8. 记录日志
           iptables -A OUTPUT -p udp -d 8.8.8.8 --dport 53 -j LOG --log-prefix "[FWLOG] "
        9. 列出某个链中的所有规则
           iptables -L <chain>
           iptables -S <chain>
           iptables -L INPUT
           iptables -S INPUT
           iptables -t nat -L POSTROUTING
        10. 显示规则的序号
           iptables -L <chain> --line-number
        11. 清空某个表中的所有规则
           iptables [-t table] -F
        12. 设置链的默认规则(策略)
           iptables [-t table] -P chain target
           iptables -P INPUT DROPT
           iptables -P OUTPUT ACCEPT
        13. 禁止访问外部加密网页(https)
           iptables -A OUTPUT -p tcp --dport 443 -j REJECT
        14. 有选择地转发数据包
           iptables -A FORWARD -s 10.1.2.0/24 -j ACCEPT
           iptables -A FORWARD -s 10.1.1.0/24 -j REJECT
           iptables -D FORWARD -p tcp --dport 443 -j DROP
           iptables -I FORWARD -p tcp --dport 80 -j DROP
        15. 匹配网卡
           iptables -t nat -A POSTROUTING -o eth1 -s 10.1.2.0/24 -j ACCEPT
           iptables -A INPUT -i vmnet1 -j ACCEPT
        16. 白名单功能
           iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
           iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
           iptables -A OUTPUT -j REJECT
    6. 把当前的防火墙规则保存到默认位置 (/etc/sysconfig/iptables)
        service iptables save
    7. 把当前的防火墙规则保存到指定的文件中
        iptables-save > /somewhere/in/the/system/firewall
    8. 可以直接编辑防火墙规则文件
        vim /somewhere/in/the/system/firewall
    9. 从防火墙规则文件中加载规则,这个动作会把现有的规则清空
        iptables-restore < /somewhere/in/the/system/firewall
    10. 重启防火墙服务,可以清空当前的防火墙设置,并从默认位置加载规则 (/etc/sysconfig/iptables)
        service iptables restart

 

上一篇:tinyhttpd-0.1.0_hacking


下一篇:centos 7 搭建wordpress 网站详细教程