putty: [p^ti]: 油灰, 腻子,像 clay 粘土同样起 链接做用.
很是简洁,只有500多kB, 不须要安装,纯绿色的,版本仍是0.x, Simon Tatham, 甚至没有主界面,没有菜单/工具栏什么的, 仅仅只有一个建立链接的对话框, 链接后就只有一个方框了.
一般 没有若是没有什么特殊缘由, 都是直接使用 这个 putty (油灰/腻子) 来链接的了.php
一般安装一个软件的时候,按类别放置:
基础架构的东西放在include, lib中
配置文件放在conf目录, 少数有的放在etc中
服务的 管理 启动 中止等放在 sbin中
而对于服务的工具类如调试, utils等放在bin中
软件包的资源文件一般放在share中, 好比软件的css,js, images, man, scripts, documents帮助文档等等...
还有一个很重要的目录: var, 一般是对于服务器软件来讲的, 就是一些服务器 向外提供的内容, 一些常常会变化的内容, 好比httpd的 /var/www目录, dns的 /var/named目录等. 一般各类服务器的常常变换的实体内容都集中放在/var目录中
还有一些 辅助目录, 如: log等.css
dns的配置文件实际上只有两个, 一个是主配置文件named.conf, 另外一个是区域数据文件.
对于区域文件的命名, 一般用 .zone结尾,好比: file "localdomain.zone"; 或者: file "0.0.127.zone"html
named.ca 中的ca是cache的意思, 是缓存的意思, 由于dns系统 支持暂存盘, 可是只有 root根才能够这样命名.linux
动态dns系统是指 存在 主/从 master:slave dns-server的状况下, 固然得要安装其余dns支持组件正则表达式
在dns中的IN, 指的是: IN = internet 资源类型.thinkphp
区域zone文件中的 allow-update {none;}; 表示的是是否 容许 客户机/和当前dns服务器 自行更新本身的dns记录.shell
dns的运行命令和服务名称叫named, 可是提供他的包名称是bind. bind: Barkley internet named daemon. 这是用得最多的 一种dns服务器软件(也还有其余的dns服务器软件包).
一般要安装的包有: bind, bind-utils ([i]或[ai] 是utility的缩写,一些工具包性质的软件), 还有 caching-nameserver数据库
notepad中保存文件时光标会乱跳? 这是一个小bug? 解决方法是: 一种是取消"格式中的 自动换行", 第二种是: 打开文件时什么都不要操做, 先ctrl-s保存一下,之后保存时就不会乱跑了express
若是您了解 DNS 的查询模式﹐您会知道 DNS 服务器在查询非本身管辖的 zone 的时候﹐首先会向 root 查询下一级的 zone 在哪里﹐而后逐级查询下去。但问题是﹕当 named 刚启动的时候﹐在 cache 里面一片空白﹐它怎么知道 root zone 的 servers 在哪里呢﹖这不是一个矛盾吗﹖因此﹐就必须靠这个档案告诉 named 关于 root zone 的 servers 有哪些﹖以及在哪里﹖ --- 明白了吗﹖
zone "0.0.127.in-addr.arpa" IN { ....}
这里的 in-addr.arpa 表示的是 internet - address. 这个是固定的写法, 直接添加在 反ip地址后面就好了.This address mapping domain is calledIN-ADDR.ARPA Within that domain are subdomains for each network, based on network number. 原来它是一个官方专门取的一个名字, 一个域的名字
named 的日志查看: named -g
查看全部的服务信息: service --status-all
bind-utils 是bind-utilities for querying name servers编程
由于bind在设计的时候, 就是这样设计的, 主要是为了 dns不中断解析(一般生产环境中的dns服务器很繁忙的), 能够经过rndc( 让你得逞) 来在线更新 named. 因此named服务在启动时, 必须经过 rndc来管理启动: ** bind的named服务在启动的时候, 会去经过rndc 和named之间的 TCP的套接字(hmac md5证书)来链接rndc服务器. 若是找不到rndc服务及其配置文件(如: /etc/rndc.conf) ,就会报错,虽然你看 named服务进程是 running, 可是dns解析会error! **
wget https://www.isc.org/downloads/file/bind-9-10-6/
下载下来的名字就是bind-9-10-6, 要将这个文件更名为: ...tar.gz在新的版本中, 使用了应用分组.
之前是使用多个 应用程序, 平级的, 好比最多见的两个独立的应用程序, 前台和后台, Home和Admin.它们是平级的, 且目录跟tp是在同一个地方.
而如今分组后, Home和Admin是做为 一个大的/总的应用程序 App下的两个应用分组,是两个目录. 而App跟ThinkPHP是平级的.
tp版本从3.0, 3.1, 3.2. 其中3.1和3.2 的修订版最后都是3,即最大的版本: 3.1.3, 和3.2.3
3.1.2是 比较低的, 旧的版本, 而3.2.x是一个比较大的 重大的升级, 变化较大, 能够认为是 4.0的版本. 好比: 3.1中的库核心目录叫lib, 而在3.2中叫 Library, 3.1中尚未现成的index.php入口文件, 3.2中就已经给你写了一个入口文件了. 并且在开发分组和独立分组上也有了较大的差异.
.,.+8
如下命令将文中全部的字符串idiots替换成managers: :1,$s/idiots/manages/g 一般咱们会在命令中使用%指代整个文件作为替换范围: :%s/search/replace/g 如下命令指定只在第5至第15行间进行替换: :5,15s/dog/cat/g 如下命令指定只在当前行至文件结尾间进行替换: :.,$s/dog/cat/g 如下命令指定只在后续9行内进行替换: :.,.+8s/dog/cat/g **你还能够将特定字符作为替换范围。好比,将SQL语句从FROM至分号部分中的全部等号(=)替换为不等号(<>):** :/FROM/,/;/s/=/<>/g
. , $-1 s/^#\ //g 就是将当前行 到倒数第一行的内容
表达式中的正号 负号, 能够看做是加减号, 也能够看做是 相对 行号...好比: $-1, .+8, ...
head -n 5 foo.txt 等同于 head -n +5 foo.txt
而 tail -n 10 foo.txt 等同于 tail -n -10 foo.txt
head -n -3 foo.txt
表示的是 去掉 末尾的 3行文字 而 tail -n +5 foo.txt
表示的是 从开头的 第5行开始(注意, 要包括这个第5行)直到末尾的行数所有显示。killall和 kil的区别
dns中 soa是什么意思: start of authority: 开始受权, 后面开始写 区域定义
rndc是什么: "让你得逞", remote name deamon control, 是名字服务的远程控制, named 服务, 必需要有rndc服务, 并且要rndc服务起来并由 rndc来管理它. named服务才能正常运行和解析
dig -t NS .
是什么意思 : 去挖掘 . 这个根域名服务器的记录和信息, 当得到 控制台输出后,就能够 重定向到named.ca文件
named.ca是什么文件? 他表示 dns服务器的全部 的 根域名服务器的 信息. 当咱们本地的 生产性 域名服务器本地 没有顶级 域名的信息时, 要把dns查询请求发送给 根, 而后让 根dns服务器去返回 其余 下级(子级)域名服务器的信息. 那么这个根域名服务器的信息就放在 named.ca中.
hint表示连接? 表示 named.ca这个文件, 只是一个连接, 其数据库并无在本地机器上.
最重要的是: 全球的 根 dns服务器共有 13个, 那么 named.ca这个文件 中, 应该包含有 这13个 服务器的 A (address ip) 记录内容才行, 而不仅是 这13个根dns服务器的域名
init ?
这个命令, 当? =0 的时候, init 0
就表示 关机, init 6
就表示重启.shutdown 若是没有指明 message, 会默认的 报告: for maintenance. maintain的名词, maintenance: during routine maintenance
注意: time参数是 必须的, 不然会报错, 他要知道 何时关机? 有三种表示方法: 有意义的单词 NOW; +m 表示多少分钟后关机, m表示分钟的数字; hh:mm指定关机的绝对时间.
[root@localhost foo]# cat /etc/services | grep -nE 'boot' 71:bootps 67/tcp # BOOTP server 72:bootps 67/udp 73:bootpc 68/tcp dhcpc # BOOTP client 74:bootpc 68/udp dhcpc
bootp 是比较老的分配协议, dhcp(注意就是dhcp后面没有d) 是bootp的升级版. 有两个优势: bootp须要事先知道客户端的mac地址, 而dhcp不须要; bootp分配地址后, 一般是静态的地址, 而dhcp是动态可变化的.
tail -f 是能够 跟踪 文件末尾的变化和新增内容 的, 其中 -f是follow的意思, 可是 当 被跟踪文件 被移动或删除的状况下, -f可能会中止继续输出, 而这时候, 能够用 -F 来一直跟踪, 他能够重建 被跟踪文件...
双圆括号, 是对 [, [[, test等的扩展. 能够只 使用双圆括号代替他们: features:
双括号中的运算彻底支持c语言的全部运算符号,好比 a++, a--, a>1?true: false, 其次, 双括号中的全部变量引用都不须要加 $
; 能够扩展 四则运算\逻辑运算\结构运算if while for等; 可是要注意的是, 双括号中的是表达式, 能够是多个表达式, 之间用逗号分割, 可是要得到 双括号的值, 好比你要 echo, 你要赋值, 则必须在双括号前面加上 $
一个最大的区别是: 单中括号会进行 变量的扩展(若是是多个单词的字符串, 会把它们看成多个单词来看待, 这时候会产生错误), 因此像 name="Smith Jonh" ; if [ $name = "Smith Jonh" ]; echo ...
会报语法错误, 由于单中括号 会将 $name 扩展成 if [ Smith John = "Smith John" ], 从而认为 Smith 是多余的单词 而报错
, 这时候, 使用单中括号, 应该将 变量用 双引号括起来, 明确地告诉这是一个 完整的 字符串.
而使用 双 中括号 则不会扩展, if [[ $name = "Smith John" ]] ...
则不会报错...
linux的shell脚本 的语句和语句之间 须要分割. 有两种分割方式, 一种是 用 分号, 另外一种是 用 回车符 两种均可以.
另外: 一个大的原则是 : 凡是在结构语句中, 好比if, for, while前面的条件 语句(注意这些if while for 分句都是 一个语句, 一个判断 语句! 它 跟后面的do语句, 之间都须要加 分号或回车进行分割.
而后就是 凡是shell中的全部结构体(if, while, for ,until等 ) 中的body部分, 都必须有 相似 C语言中的 大括号 进行括起来. shell是用 关键字 进行来 "括起来"来的, 好比: if 结构体中, 要用 then...else....fi来括起来, while和for等要用 do ...done 来括起来. 这样的话, 就不会忘记写then或do等关键字了.
$(())
等之类的 计算表达式的时候, 会 先将 表达式的值计算出来而后再打印,好比:[root@localhost foo]# echo b=$((a+3)) b=6
就是关于 能够用在if while for等语句中 表示条件判断的情形
\>, 或 \<
, 最重要的是字符串支持 单个字符串判断, 好比: if [ "$name"]
, 可是 整数就不支持这种单个的逻辑运算而多个逻辑表达式 的 混合运算 能够用 -a, -o, ! , 也能够用对应的 &&, || ,! 可是 前者要放在一个 中括号内, 然后者要放在两个 单独的 中括号里面,好比: if [ $a -eq 1 -a $b -eq 2]
用&&
就是 if [ $a -eq 0 ] && [ $b -eq 2 ];
关于字符串匹配的if判断是 : if [ 反引号echo $name | grep -e pattern ] ; then ... 反引号
str=
在判断是否为空的时候, 不能这样写if [ $str = '' ]
而是 直接加上一个 末尾的附加字符串 来比较, 好比: if [ "$str"x = "x" ];
在shell中, 跟其余编程语言对字符串变量的 认定是同样的, 即变量取名的时候, 都是"最大程度的 贪婪匹配", 好比, 原本有一个变量是 str, 可是若是你写成: if [ $strx = 'x' ]
那么这时候, 他不会认为是 变量 $str
和字符x的链接, 而是直接把他当成 变量 $strx
了, 由于以前 的 $strx
变量没有申明, 变量为空, 因此仍然会报错: unary operator expected.... 即:
[root@localhost ~]# str= [root@localhost ~]# if [ $strx = "x" ]; then echo 'right'; fi -bash: [: =: unary operator expected [root@localhost ~]# if [ "$str"x = "x" ]; then echo 'right'; fi right 比较两个字符串是否相等的办法是: if [ "$test"x = "test"x ]; then 这里的关键有几点: 1 使用单个等号 2 注意到等号两边各有一个空格:这是unix shell的要求 3 注意到"$test"x最后的x,这是特地安排的,由于当$test为空的时候,上面的表达式就变成了x = testx,显然是不相等的。而若是没有这个x,表达式就会报错:[: =: unary operator expected
garble: [ga:bl], 断章取义, 曲解, 歪曲, 篡改.
at 命令提示 garbled time表示时间设置不对.
at命令表示的是, 在未来某个指定的时间 执行某个事件。至关于win的 计划任务
格式是:at [options] 时间 + 要执行的具体任务
也能够有at 交互式命令输入
在交互式的at命令中, 结束命令的输入 是 按 ctrl+d , 注意不是 ctlr_c, ctrl_c是放弃, 取消当前输入的命令, 取消at 安排!
at每设置一次, 设置一个job, 显示已经设置的 job是: job 序号 at 执行时间.
显示的时候, 老是从 上到下 显示最近设置的 at . 即按 job 从大到小的顺序进行
at 有不少别名, 好比: at -l =atq, at -d =atrm 等等.
at 也能够把要执行的命令放在 一个文件中, 使用 -f 选项:
at -f jobs.at_todo 23:00 2010-12-12
运行at命令须要开启 atd 服务
at命令的其余细节
linux系统中 不少常常变化的内容都 放在 /var目录中, 有的直接放在 /var下, 有的放在/var下的spool, 通常的进程号放在 /var/run/目录下, 等等, at命令的 内容项要放在 /var/spool/at, /var/run/at/里面放的是pid文件.
quota是什么意思
是磁盘对用户的配额设置, 他会首先去读取 /etc/filesystems中的内容, 而后显示全部的fs的配额
echo >> 是 添加, 那么要删除 某一行呢? : 使用 sed命令. 很简单: sed -i -e '$d' foo.txt
NURBS曲线: 是非统一有理B样条曲线:
Non-Uniform 是指一个控制顶点的影响力范围能够可以改变,
Rational 有理, 是指曲线能够用数学表达式来定义
B 样条曲线 spline : 由于在模拟 拟合多个点构成的曲线时, 是用 有弹性的木条来拟合的, 因此叫样条曲线.
如何设置ip地址和网关和dns服务器?
route add default gw ...dev eth0? : dev是说要设置哪一个网卡的默认网关?
你能够具体的指定是 哪一个 网卡的 默认网关...
动名词和名词的区别?
好比,amazing, 动名词具备动词的性质,因此能够带其余成分宾语、或状语成分。而其余普通的名词则不能。
sed 是流编辑, 它会把后面跟的文件 中的内容, 一行一行地读出来, 而后进行处理, 而后默认的输出到控制台. 他的格式是: sed [options] '编辑的命令脚本' files
即sed的后面是选项, 和 你要对文件进行什么样的编辑命令, 最后是要编辑的文件名称.
一句话深刻到sed的实质: sed实际上就是跟 vim的 编辑命令/冒号命令 彻底是同样的! 你知道vim的冒号命令/命令模式的使用, 就同样的使用sed命令了. 只是sed命令不须要打开文件...
命令脚本组成: 编辑范围 + 编辑命令,
默认的是 对全部的行都进行相应的编辑, (至关于%), 固然你也能够 指定只 编辑哪些范围, 其余的不知足条件的行不编辑
编辑的时候, 是把当前行 读取 -> 拷贝 到 缓冲区, 而后进行编辑操做.
编辑范围好比: 1 | 1, $| /^a.A$/ | /^a.A/, $ 等等
编辑命令包括: 增删该: i , d , s , a , c 等, 命令的格式是 单字符命令中间加一个空格后, 而后 用 反斜杠 . 不过注意的是, 命令后面能够不加 空格, 也能够不加反斜杠, 什么都不加, 加上空格, 反斜杠只是 便于阅读和理解.
总之, sed是很智能的, 基本上, 你不写 一些辅助代码的时候, 都尽可能 来解析...
sed -e 'script - expression' 命令中的 -e
等于--expression=script...
, -e能够不要, 不写.
script-expression表示的是 "add the script to the commands to be executed" 要添加到命令中去执行的脚本...
i, a,c,d, s等命令中, 后面的空格和反斜杠不是必须的, 只有当解析出现错误的时候, 才去添加空格或反斜杠.
注意a和i的 含义, 他们是表示 在当前 正在处理的行 的前面或后面 添加/插入一行.
c是替换 整个处理的行, 而s只是替换 行中的 字符串. 两个不同.
同时 在执行sed 的时候, 能够同时指定多个 -e脚本命令表达式, 来一次性地执行多个指令, 好比: cat /etc/at.deny | sed -e ' $a \foo' -e '$a \bar' -e '$a \ itoto'
由于, 在第三层传输的时候, 使用 是 ip地址, 传输单位是包 package, 而当包下传到 第二层的时候, 分到局域网中时,进行传输的是“帧”,帧里面要封装 目标主机的MAC地址的。
在以太网中,一个主机要和另外一个主机进行直接通讯,必需要知道目标主机的MAC地址。但这个目标MAC地址是如何得到的呢?它就是经过地址解析协议得到的。 ARP协议的基本功能就是经过目标设备的IP地址,查询目标设备的MAC地址,以保证通讯的顺利进行。
ARP协议的工做原理
在每台安装有TCP/IP协议的电脑里都有一个 ARP缓存表,表里的IP地址与MAC地址是一一对应的.
以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在本身的ARP缓存表中寻找是否有目标IP地址。若是找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就能够了;
可是, 若是在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的全部主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其余主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A作出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。这样,主机A就知道了主机B的MAC地址,它就能够向主机B发送信息了。
ARP的缓存?? : : 当 第一次 找到 主机B的 mac地址后 , 为了不后面再屡次进行询问, 须要暂时将 这个B 主机的条目保存下来, 即就是要 更新了本身的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就能够了。
ARP的老化, 如同你注册一个邮箱同样, 若是你注册后, 在一段时间内都没有用过, 那么它就会给你删除 即老化 机制:::: 可是有一个问题, 若是把每次 曾经经过信的主机的mac地址条目无论时间 过了多久 都永远保存, 那样, arp表将会很大, 既不便于存储, 浪费存储空间, 又不便于查询 将会浪费不少的查询时间...
因此:: ARP缓存表采用了老化机制,在一段时间内若是表中的某一行没有使用,就会被删除,这样能够大大减小ARP缓存表的长度,又 加快查询速度。
ARP攻击 就是经过伪造IP地址和MAC地址实现ARP欺骗,可以在网络中产生大量的ARP通讯量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,形成网络中断或中间人攻击。 ARP攻击主要是存在于局域网网络中,局域网中如有一我的感染ARP木马,则感染该ARP木马的系统将会试图经过“ARP欺骗”手段截获所在网络内其它计算机的通讯信息,并所以形成网内其它计算机的通讯故障。
那么这三种 名称服务的 采用的 前后次序是 怎样规定的呢? 由 文件: /etc/nsswitch.conf : 即: 名称服务切换...
cname: 命名(aliases):