LinuxHistoryUserful link用户管理手动建立用户修改root密码LDAPldapaddldapsearchldapdeleteldappasswdldapmodifyfindCPIO文件系统建立文件系统InodeBlock大小文件描述符FDuevent修改superblock文件类型管道Suid和StickyI/O重定向集群文件系统内核相关可重入内核系统调用内核线程进程与线程进程管理I/O模型系统时间和用户时间MMAPIPCModulesNotes硬件相关Bios磁盘相关RAID系统启动流程GPT分区结构inittabRedhat RC启动脚本系统初始化脚本rc.sysinitGRUBgrub的安装制做Initrd编译操做系统安装linux&&windows双系统重启后强制fsck软件安装VIM环境修改VIM配置Cygwin相关基础编程Bash通配符:正则表达式Read隐藏密码Trap变量做用域Stack vs HeapThe StackThe HeapStack vs Heap Pros and ConsStackHeap连接库shell下个进制转换证书与加密openssl使用openssl查看信息证书类型证书转换部分脚本内容产生随机数的几种方法产生sha512的密码包管理RPMYUM源码安装网络相关Bridge&&802.1qPortMaplsoftcpdump主机arp&route配置网卡网卡Bonding检查网络状态vmstatHTTP Client服务相关curlrsyslogdNTPtimezonekillall邮件服务器虚拟化ESXI网卡安全相关使用urandom替代randomTipsMVChtml
Kernel version:node
Bootup:python
ChangeLog:linux
ip a
to check the Virtual IPs, and use ip -s link
show link statisticsSourceForge: http://www.sourceforge.orgios
sliceshare PPT 分享: http://www.slideshare.netnginx
wordpress: http://www.wordpress.comgit
google code: http://code.google.com程序员
用vim编辑/etc/passwd ,为新用户增长一个新行。 若是要建立新组,用vim 编辑/etc/group 。 用mkdir 产生用户的主目录。 将/etc/skel 中的文件复制到新的主目录中。 用chown 和chmod 修改全部者和权限。 -R选项是最有用的。 #cd /home/newusername #chown -R username.group . #chmod -R go=u,go-w . #chmod go= . 用passwd设定口令。 最后一步设定完口令,这个账户就能用了。
/etc/passwd: 用户名:x:UID:基本组ID:comment信息:HOME:默认shell /etc/shadow文件的格式: UserName:加密的密码:最近一次密码修改时间:最短使用期限:最长使用期限:警告区间:非活动区间:账号的过时期限:预留段 sp_namp - pointer to null-terminated user name sp_pwdp - pointer to null-terminated password sp_lstchg - days since Jan 1, 1970 password was last changed sp_min - days before which password may not be changed sp_max - days after which password must be changed sp_warn - days before password is to expire that user is warned of pending password expiration sp_inact - days after password expires that account is considered inactive and disabled sp_expire - days since Jan 1, 1970 when account will be disabled sp_flag - reserved for future use
密码改成root01web
sed -i s/'^root:.*:\(.*\):\(.*\):\(.*\):\(.*\):\(.*\):\(.*\):\(.*\)'/"root:\$1\$3UEVsYK.\$bUg14pg\/vHYYUgR7hxzL.1:\1:\2:\3:\4:\5:\6:\7"/ /etc/shadow
echo nsadm|passwd --stdin root
正则表达式
-x 进行简单认证 -D 用来绑定服务器的DN -h 目录服务的地址 -w 绑定DN的密码 -f 使用ldif文件进行条目添加的文件
eg
ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret -f /root/test.ldif ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret (这样写就是在命令行添加条目)
-x 进行简单认证 -D 用来绑定服务器的DN -w 绑定DN的密码 -b 指定要查询的根节点 -H 制定要查询的服务器
eg.
ldapsearch -x -D "cn=root,dc=starxing,dc=com" -w secret -b "dc=starxing,dc=com" 使用简单认证,用 "cn=root,dc=starxing,dc=com" 进行绑定,要查询的根是 "dc=starxing,dc=com"。这样会把绑定的用户能访问"dc=starxing,dc=com"下的全部数据显示出来。 ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -h troy.osdn.zzti.edu.cn ldapsearch -b "dc=canon-is,dc=jp" -H ldaps://192.168.0.92:636
ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com" ldapdelete -x -D 'cn=root,dc=it,dc=com' -w secert 'uid=zyx,dc=it,dc=com' 这样就能够删除'uid=zyx,dc=it,dc=com'记录了,应该注意一点,若是o或ou中有成员是不能删除的。
-x 进行简单认证 -D 用来绑定服务器的DN -w 绑定DN的密码 -S 提示的输入密码 -s pass 把密码设置为pass -a pass 设置old passwd为pass -A 提示的设置old passwd -H 是指要绑定的服务器 -I 使用sasl会话方式
eg.
#ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S New password: Re-enter new password: 就能够更改密码了,若是原来记录中没有密码,将会自动生成一个userPassword。
-a 添加新的条目.缺省的是修改存在的条目. -C 自动追踪引用. -c 出错后继续执行程序并不停止.缺省状况下出错的当即中止.好比若是你的ldif 文 件内的某个条目在数据库内并不存在,缺省状况下程序当即退出,但若是使用了该参数,程 序忽略该错误继续执行. -n 用于调试到服务器的通信.但并不实际执行搜索.服务器关闭时,返回错误;服务器 打开时,常和-v 参数一块儿测试到服务器是不是一条通路. -v 运行在详细模块.在标准输出中打出一些比较详细的信息.好比:链接到服务器的 ip 地址和端口号等. -M[M] 打开manage DSA IT 控制. -MM 把该控制设置为重要的. -f file 从文件内读取条目的修改信息而不是从标准输入读取. -x 使用简单认证. -D binddn 指定搜索的用户名(通常为一dn 值). -W 指定了该参数,系统将弹出一提示入用户的密码.它和-w 参数相对使用. -w bindpasswd 直接指定用户的密码. 它和-W 参数相对使用. -H ldapuri 指定链接到服务器uri(ip 地址和端口号,常见格式为 ldap://hostname:port).若是使用了-H 就不能使用-h 和-p 参数. -h ldaphost 指定要链接的主机的名称/ip 地址.它和-p 一块儿使用. -p ldapport 指定要链接目录服务器的端口号.它和-h 一块儿使用. 若是使用了-h 和-p 参数就不能使用-H 参数. -Z[Z] 使用StartTLS 扩展操做.若是使用-ZZ,命令强制使用StartTLS 握手成功. -V 启用证书认证功能,目录服务器使用客户端证书进行身份验证,必须与-ZZ 强制启用 TLS 方式配合使用,而且匿名绑定到目录服务器. -e 设置客户端证书文件,例: -e cert/client.crt -E 设置客户端证书私钥文件,例: -E cert/client.key
eg
ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif 将modify.ldif中的记录更新原有的记录。
-name "文件名称": 支持使用globbing
* ? [] [^] -iname "文件名称":查找时不区分字符大小写 -user UserName: 根据属主查找 -group GroupName: 根据属组查找 -uid UID -gid GID -nouser:查找没有属主的文件; -nogroup: 查找没有属组的文件; 组合条件: -a: 与,同时知足 -o: 或, -not, !:非,取反 非A,而且 非B: 非(A或B) -not ( -user hadoop -o -iname "*.txt" ) 非A,或 非B: 非(A且B) -type: 根据文件类型查找 f: 普通文件 d: 目录 b: 块设备 c: 字符设备 l: 符号连接文件 p: 命名管道 s: 套接字 -size: 根据文件大小查找 -size [+|-]#Unit 例如:-size +2M 经常使用单位:k, M, G #: (#-1)<x<=# 根据时间戳查找: 以天为单位(time): -atime [+|-]# +: 表示(#+1)天以外被访问过; -: 表示#天以内被访问过; 无符号:表示短于(#+1)> x >=#天的时间段被访问过; -mtime -ctime 以分钟为单位(min): -amin [+|-]# -mmin -cmin
根据权限查找: -perm [+|-]MODE MODE:精确匹配 +MODE: 任何一类用户的任何一位权限匹配;经常使用于查找某类用户的某特定权限是否存在; -MODE: 每类用户的指定要检查的权限位都匹配; 文件权限:644 -perm 600: 否 -perm +222: -perm +002 -perm -444
find与xargs 在使用find命令的-exec选项处理匹配到的文件时, find命令将全部匹配到的文件一块儿传递给exec执行。但有些系统对可以传递给exec的命令长度有限制,这样在find命令运行几分钟以后,就会出现 溢出错误。错误信息一般是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一块儿使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是所有,不像-exec选项那样。这样它能够先处理最早获取的一部分文件,而后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每个匹配到的文件而发起一个相应的进程,并不是将匹配到的文件所有做为参数一次执行;这样在有些状况下就会出现进程过多,系统性能降低的问题,于是效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,到底是一次获取全部的参数,仍是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来肯定。
【命令格式】
cpio [option][destination-directory]
【经常使用选项】
i:使用copy-in模式,还原归档文件或列出归档文件中的文件列表。
o:使用copy-out模式,创建归档文件。
p:使用copy-pass模式,将文件直接复制到目的目录。
c:使用老式的ASCII归档模式。若是须要跨平台使用,应该使用老式的ASCII归档格式。
d:建立须要的目录。若是文件不处于同一目录中,应该使用此选项。
v:显示处理过程的详细信息。
t:显示归档文件中的文件列表。
m:保持文件的时间戳记。
H:使用指定的格式归档文件
经常与find命令一同使用
制做归档文件
find -print | cpio -ov >../backup.cpio
查看CPIO内容
cpio -tv <backup.cpio
文件系统是操做系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操做系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统.
预留block空间
Reserving some number of filesystem blocks for use by privileged processes is done to avoid filesystem fragmentation, and to allow system daemons, such as syslogd(8), to continue to function correctly after non-privileged processes are prevented from writing to the filesystem
文件类型
与文件相关的硬连接个数
以字节为单位的文件长度
设备标识符
在文件系统中表示文件的索引节点号
文件拥有者的UID
文件的用户组ID
几个时间戳, 表示索引节点状态改变的时间, 最后访问时间及最后修改时间
访问权限和文件模式.
inode 0 is used as a NULL value, to indicate that there is no inode. indoe 1 is used to keep track of any bad blocks on the disk; it is essentially a hidden file containing the bad blocks. Those bad blocks which are recorded using e2fsck –c indoe 2 is used by the root directory which indicates starting of File system inodes
1k, 最大单一档案限制 16GB, 最大文件系统总容量2TB
2k, 最大单一档案限制 256GB, 最大文件系统总容量8TB
4k, 最大单一档案限制2TB, 最大文件系统总容量16TB
文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者建立一个新文件时,内核向进程返回一个文件描述符。
Udev的工做是依赖于sysfs文件系统的,因此从内核版本2.6以后才开始支持udev。它基本能够替代2.4以后的devfs。
调用过程是内核空间经过netlinksocket跟用户空间交互,kenerl调用kobject-uevent()函数给用户空间发送netLink message来通知用户空间。
在用户空间,udev是启动一个守护进程叫作udevd(使用ps指令能够查看). 当uevent到达用户空间时,用户空间经过inotify的功能通知udevd。Udevd得到硬件更新信息,而后再根据/etc/udev.conf 以及/etc/udev/rules.d/* 下的规则进行设备定义,udev语法能够参考连接。
PS1. 能够模拟一个uevent的动做echo add > /sys/class/net/eth0/uevent来出发一个uevent消息。
PS2. /etc/udev/rules.d/中的70-persistent-net.rules文件生成,是经过在/lib/udev/write_net_rules脚原本生成。
破坏superblock, 因为有boot sector的存在, 因此须要seek响应的位数
dd if=/dev/zero of=/dev/sda6 bs=1 count=1024 seek=1024
修复superblock
e2fsck -b 32768 /dev/sda6
管道是Linux中很重要的一种通讯方式,是把一个程序的输出直接链接到另外一个程序的输入,常说的管道可能是指无名管道,无名管道只能用于具备亲缘关系的进程之间,这是它与有名管道的最大区别。
文件描述符
文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者建立一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写每每会围绕着文件描述符展开。可是文件描述符这一律念每每只适用于UNIX、Linux这样的操做系统.
文件描述符的有效范围是 0 到 OPEN_MAX。通常来讲,每一个进程最多能够打开 64 个文件(0 — 63)
进程上下文
这些代码从可执行文件载入到进程的地址空间执行。通常程序在用户空间执行当一个程序调用了系统调用或者触发了某个异常,它就陷入了内核空间。此时,咱们称内核“表明进程执行”并处于进程上下文。在此上下文中current宏是有效的。除非在此间隙有更高优先级的进程须要执行并由调度器作出了相应调整,不然在内核退出的时候,程序恢复在用户空间继续执行。
s :当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组ID)。
t:设置标志位(留在内存,不被换出)。若是该文件是目录,在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。若是它是可执行文件,在该文件执行后,指向其正文段(程序的代码)的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。
目录的S属性使得在该目录下建立的任何文件及目录属于该目录所拥有的组。
INPUT:标准输入,stdin, 0 OUPUT: 标准输出,stdout, 1 标准错误:stderr, 2
输入重定向:<, <<
<: 输入重定向 << EOF: 此处建立文件, Here Document 经常使用于在脚本中建立文件或生成菜单
输出重定向:>, >>
>: 覆盖输出 >>: 追加输出 set -C:禁止使用覆盖重定向至已经存在的文件; set +C: 关闭上述特性; >|:在-C特性下,强制使用覆盖重定向;
/dev/null: bit bucket,位桶
同时重定标准输出和错误输出:
COMMAND > /path/to/outfile 2> /path/to/errfile COMMAND &> /path/to/somefile COMMAND > /path/to/somefile 2>&1
集群文件系统有GFS2(Redhat),OCFS2(Oracle)
2.6以前的内核发布分为稳定版和测试版, 偶数次表明稳定版本, 奇次则不一样.
reentrant: 若干个进程能够同时在内核态下执行. 固然在单处理器系统上只有一个进程在真正的运行
open(path, flag, mode): 打开一个文件
flock(): 可让进程在整个文件或部分文件上对I/O操做实施同步.
read(fd,buf,count), write(): 系统调用老是从文件指针的当前位置开始读或者写. 默认offset为0. Read()能够指定buf, 即指定进程地址空间中缓冲区的地址.
close(fd): 关闭文件
rename(oldpath,newpath): 修改文件名称
unlink(pathname): 修改文件连接的名字. 当一个文件的连接数为0, 则该文件被删除.
是运行在内核态的特权进程. 它们之内核态运行在内核空间, 不予用户直接交互, 而且在系统启动时建立, 在系统关闭时关闭.
为了让内核管理进程, 每一个进程都由一个进程描述符(process descriptor)表示. 当内核暂停一个进程的执行时, 就把几个处理器寄存器相关的内容保存在进程描述符中.
程序计数器(PC)和栈指针(SP)
通用寄存器
浮点寄存器
包含CPU状态信息的处理器控制寄存器(处理器状态字, processor status word)
用来跟踪进程对RAM访问的内存管理寄存器.
线程是进程的子单位, 在linux系统中并不支持原生态的线程, linux把全部线程当作进程来对待, 只不过将其当作轻量级进程来对待, LWP: light weight process. Linux 自身的线程库不一样, 有内核自带的也有红帽提供的. Linux中的进程与线程响应I/O调用时的机制倒是相同的
对于进程而言, 指令执行流是串行执行的. 而有了线程以后, 指令能够并行执行
进程切换须要保留现场, 以及还原现场. 保留指令指针, 数据要加载到CPU的缓存中. CPU的寄存器也要重置. 线程间切换, 因为数据共享, 则无需进行CPU的缓存清空
CPU的存储器是寄存器
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每一个寄存器都有本身的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息
CPU 忙等/闲等, 忙等不切换(使用自旋锁, spin lock), 闲等上下文切换
使用命令 pmap -x 能够查看进程的内存占用信息; lsof -a -p 能够查看一个进程打开的文件信息。ps -Lf 能够查看进程的线程数。
另外procfs也是一个分析进程结构的好地方。procfs是一个虚拟的文件系统,它把系统中正在运行的进程都显如今/proc/目录下。
SELECT() 每次将全部的I/O请求的文件描述符扫一遍, 而后再将整个数据结构输给用户空间. 最多只支持1024个IO请求. 当内核发现有完成的IO调用后, 返回将全部内容返回
select的几大缺点:
(1)每次调用select,都须要把fd集合从用户态拷贝到内核态,这个开销在fd不少时会很大
(2)同时每次调用select都须要在内核遍历传递进来的全部fd,这个开销在fd不少时也很大
(3)select支持的文件描述符数量过小了,默认是1024
poll()没有上限限制, 可是性能跟select()差很少
五种I/O模型
1 . Blocking I/O: blocked all the way
2 . nonblocking I/O: if no data in buffer
3 . I/O multiplexing(select and poll): blocked separately in wait and copy
4 . Singal Driven I/O(SIGIO): nonblocked in wait but blocked in copy(signaled when I/O can be initiated) (epoll())
5 . asynchornous I/O(aio): nonblocked all the way(singaled when I/O is complete)
Synchronous I/O: 引发请求进程阻塞, 直到I/O完成
Asynchronous I/O:不致使请求进程阻塞
系统调用, 内核运行的时间成为系统时间. 用户空间内占用的时间, 称为用户时间.
pointer_size
系统指针大小, 32位的系统指针大小一般为32bytes, 64位系统一般大小为64bytes.
系统调用mmap()能够将某文件映射至内存(进程空间),如此能够把对文件的操做转为对内存的操做,以此避免更多的lseek()与read()、write()操做,这点对于大文件或者频繁访问的文件而言尤为受益。
一、 Linux采用了投机取巧的分配策略,用到时,才分配物理内存。也就是说进程调用brk()或mmap()时,只是占用了虚拟地址空间,并无真正占用物理内存。这也正是free –m中used并不意味着消耗的全都是物理内存。 二、 mmap()经过指定标志(flag) MAP_ANONYMOUS来代表该映射是匿名内存映射,此时能够忽略fd,可将它设置为-1。若是不支持MAP_ANONYMOUS标志的类unix系统,能够映射至特殊设备文件/dev/zero实现匿名内存映射。 三、 调用mmap()时就决定了映射大小,不能再增长。换句话说,映射不能改变文件的大小。反过来,由文件被映射部分,而不是由文件大小来决定进程可访问内存空间范围(映射时,指定offset最好是内存页面大小的整数倍)。 四、一般使用mmap()的三种状况.提升I/O效率、匿名内存映射、共享内存进程通讯。
mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,若是文件的大小不是全部页的大小之和,最后一个页不被使用的空间将会清零。
当使用mmap映射文件到进程后,就能够直接操做这段虚拟地址进行文件的读写等操做,没必要再调用read,write等系统调用.但需注意,直接对该段内存写时不会写入超过当前文件大小的内容.
采用共享内存通讯的一个显而易见的好处是效率高,由于进程能够直接读写内存,而不须要任何数据的拷贝。对于像管道和消息队列等通讯方式,则须要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次从输入文件到共享内存区,另外一次从共享内存区到输出文件。
使用命令 pmap -x 能够查看进程的内存占用信息; lsof -a -p 能够查看一个进程打开的文件信息。ps -Lf 能够查看进程的线程数。
另外procfs也是一个分析进程结构的好地方。procfs是一个虚拟的文件系统,它把系统中正在运行的进程都显如今/proc/目录下。
(1) 半双工Unix管道 (2) FIFOs(命名管道) (3) 消息队列 (4) 信号量 (5) 共享内存 (6) 网络Socket
Linux的内核: 单内核, 支持动态装载和卸载
模块: /lib/modules/KERNEL_VERSION/
查看PCI设备的命令
lspci
查看当前内核装载的模块
lsmod
查看某模块的详细信息
modinfo MOD_NAME
动态卸载某模块
modprobe -r MOD_NAME
rmmod MOD_NAME
动态装载某模块
modprobe MOD_NAME
insmod /path/to/module_file
不要对内核进行升级操做: 多版本内核能够并存, 所以,建议执行安装操做
BIOS芯片是主板上一块长方型或正方型芯片,在微机的发展初期,BIOS都存放在ROM(Read Only Memory,只读存储器)中。ROM内部的资料是在ROM的制造工序中,在工厂里用特殊的方法被烧录进去的,其中的内容只能读不能改,一旦烧录进去,用户只能验证写入的资料是否正确,不能再做任何修改。若是发现资料有任何错误,则只有舍弃不用。EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯片可重复擦除和写入,解决了PROM芯片只能写入一次的弊端。EPROM芯片有一个很明显的特征,在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,能够看到其内部的集成电路,紫外线透过该孔照射内部芯片就能够擦除其内的数据,完成芯片擦除的操做要用到EPROM擦除器。EPROM内资料的写入要用专用的编程器,而且往芯片中写内容时必需要加必定的编程电压(VPP=12—24V,随不一样的芯片型号而定)。EPROM的型号是以27开头的,如27C020(8*256K)是一片2M Bits容量的EPROM芯片。EPROM芯片在写入资料后,还要以不透光的贴纸或胶布把窗口封住,以避免受到周围的紫外线照射而使资料受损。由EPROM操做的不便,后来出的主板上BIOS ROM芯片大部分都采用EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程ROM。
BIOS中主要存放: ● 自诊断程序:经过读取CMOS RAM中的内容识别硬件配置,并对其进行自检和初始化; ● CMOS设置程序:引导过程当中,用特殊热键启动,进行设置后,存入CMOS RAM中; ● 系统自举装载程序:在自检成功后将磁盘相对0道0扇区上的引导程序装入内存,让其运行以装入DOS系统; ● 主要I/O设备的驱动程序和中断服务: 因为BIOS直接和系统硬件资源打交道,所以老是针对某一类型的硬件系统,而各类硬件系统又各有不一样,因此存在各类不一样种类的BIOS,随着硬件技术的发展,同一种BIOS也前后出现了不一样的版本,新版本的BIOS比起老版原本说,功能更强。
程序员能够经过INT5, INT13等中断的访问直接调用BIOS中断例程.
POST: Power on self test
磁盘的识别机制
1 . Centos 5
IDE硬盘 -hd[abc..]#
SATA、SCSI、USB、SAS - sd[abc...]#
2 .Centos 六、7
IDE、SATA、SCSI、USB、SAS -sd[abc...] 查看内核中的主次设备号映射
cat /proc/devices
如今的 Linux 内核容许多个驱动共享一个主设备号,但更多的设备都遵循一个驱动对一个主设备号的原则
次设备号的主要用途
一、区分设备驱动程序控制的实际设备; 二、区分不一样用途的设备 (misc 系列设备) 三、区分块设备的分区 (partition)
Level: 仅用于标识磁盘组合方式的不一样 raid0, raid1, raid5, raid10, raid50, jbod
raid0: 至少须要两块磁盘,没有容错能力,读写性能都提高,100%
raid1: 至少须要两块磁盘,镜像,硬件容错能力,读性能提高,写性能降低,50%
raid4: 至少须要三块磁盘,容许一块盘出错,读写性能提高,(n-1)/n
raid5: 至少须要三块磁盘,容许一块盘出错,读写性能提高,(n-1)/n
raid6: 至少须要四块磁盘,容许两块盘出错,读写性能提高,(n-2)/n
raid10: 至少须要四块磁盘,容许不一样组内各坏一块盘,读写性能提高,50% raid01
POST --> BIOS(boot sequence) --> MBR (bootloader) --> Kernel (initrd, initramfs) --> /sbin/init (/etc/inittab)
init:
SysV init: /etc/inittab upstart: /etc/inittab, /etc/init/*.conf SystemD: OS X
1 .POST: 加电自检, ROM中的代码, CPU看到的存储存储空间为ROM+RAM, CPU寻找ROM要实现自举. 开机首先寻找ROM的地址, 主板商和CPU商约定俗成
2 .MBR:第0个扇区, 446bytes boot loader 64partition table 2: SA(标示是否有操做系统) bootloader要自行识别kernel所在磁盘的文件系统, kernel文件只能放在基本磁盘分区上, 最多放在raid1上, bootloader要在 /目录被挂载前找到vmlinux内核, 为找寻一个临时入口, bootloader会直接访问/vmlinuz将其做为根目录访问, vmlinuz会自解压到内存中, kernel自行进行初始化
3 .initrd帮助内核初始化, initrd是一个根文件系统, rd:ramdisk 将内存模拟成磁盘使用, 创建临时根,寻找模块使用/lib/module
4 ./sbin/init: /etc/rc.d/rc.sysinit脚本
GPT磁盘是指使用GUID分区表的磁盘。是源自EFI标准的一种较新的磁盘分区表结构的标准。与广泛使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。
在GPT分区表的最开头(LBA0),处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫作保护MBR。
GPT分区表分为4个区域:GPT头、分区表、GPT分区、备份区。
/sbin/init的配置文件:
每行定义一种操做: id: 操做的ID runlevels: 在哪些级别下执行此操做 action: 动做 initdefault: 设置默认运行级别,无需定义操做 sysinit:指定系统初始化脚本 si::sysinit:/etc/rc.d/rc.sysinit wait: 等待系统切换至此级别时运行一次; ctrlaltdel: 定义组合键被按下时要运行的命令; respawn: 当指定操做进程被关闭时当即再启动一次; tty1:2345:respawn:/sbin/mingetty tty1 process: 操做 /etc/inittab中定义的操做: 设定默认运行级别 指定系统运行的初始化脚本 启动指定级别下的要启动的服务,并关闭须要中止的服务 定义CtrlAltDel组合的动做 初始化字符终端 启动图开终端
对于Redhat来讲,执行的顺序为:
①/etc/rc.d/rc.sysinit # 由init执行的第一个脚本
②/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式
③/etc/rc.d/rc .local # RUNLEVEL为二、三、5时运行
④/etc/rc.d/rc.serial # $RUNLEVEL为一、3时初始化串口
/sbin/mingetty # 等待用户登陆
系统初始化脚本/etc/rc.d/rc.sysinit
设置主机名 打印文本欢迎信息 激活SELinux和udev 激活swap 挂载/etc/fstab定义的本地文件系统 检测根文件系统并对其以读写方式从新挂载 设置系统时钟 装载键盘映射 根据/etc/sysctl.conf设置内核参数 激活RAID和LVM设备 清理操做
GRand Unified Bootloader
1st stage: 位于MBR中,为了引导2nd stage 1.5 stage: 位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件系统识别扩展 2nd stage: 位于boot基本磁盘分区中,GRUB的引导程序
boot分区大小: CentOS5: 100M CentOS6: 200M
grub接口:
title: 操做系统或内核的标题 root: 设定内核文件所在的分区为grub的根 kernel: 定义要使用的内核文件,后面可附加传递给内核的启动参数 initrd: 指定为内核提供额外驱动等功能的ram disk或ram fs文件
init的级别1的表示方式:
1, s, single, S 单用户模式几乎不会启动任何服务,且不须要用户登陆;可是会执行/etc/rc.d/rc.sysinit脚本; 如是连/etc/rc.d/rc.sysinit文件也不加载,则传递 emergency
grub.conf配置文件语法:
default=#: 指定默认启动的内核或OS; timeout=#: 等待用户选择要启动的内核或OS的时长,单位为秒; splashimage=/path/to/splashimage_file: 指定使用的背景图片 hiddenmenu: 隐藏菜单 title root (hd0,0) (Device, Part) Device表示方式: 在grub中,通通以hd开头,并紧跟一个数字作各磁盘设备的标记,从0开始编号 Part表示方式:表明分区,从0开始编号 kernel 指定内核文件及传递给内核的参数 参数:ro root=/path/to/DEVICE quiet initrd 文件:一般为cpio归档,并使用gzip压缩;一般以.img做为文件名后缀;
查看runlevel
runlevel
who -r
第一种方式
grub> root (hd#,#) grub> setup (hd#) grub> quit
第二种方式
chroot /mnt/sysimage grub-install --root-directory=/ /dev/sda
command mkinitrd
mkinitrd [-v] [--with=模块名称] initrd档名 核心版本 选项与参数: -v :显示 mkinitrd 的运行过程 --with=模块名称:模块名称指的是模块的名字而已,不须要填写档名。举例来讲, 目前核心版本的 ext3 文件系统模块为底下的档名: /lib/modules/$(uname -r)/kernel/fs/ext3/ext3.ko 那你应该要写成: --with=ext3 就行了 (省略 .ko) initrd档名:你所要建立的 initrd 档名,尽可能取有意义又好记的名字。 核心版本 :某一个核心的版本,若是是目前的核心则是『 $(uname -r) 』
HOST: 宿主机
Target: 目标机
基于HOST制做一个简单的可启动的Linux:
一、给目标磁盘分区 两个: 宿主机上:/dev/sdb1, /dev/sdb2 /dev/sdb1 挂载至 /mnt/boot /dev/sdb2 挂载至 /mnt/sysroot 二、安装grub至目标磁盘 # grub-install --root-directory=/mnt /dev/sdb 三、复制内核和initrd文件 # cp /boot/vmlinuz-VERSION /mnt/boot/vmlinuz # cp /boot/initramfs-VERSION.img /mnt/boot/initramfs.img 四、建立目标主机的根文件系统 # mkdir -pv /mnt/sysroot/{etc/rc.d, usr, var, proc, sys, dev, lib, lib64, bin, sbin, boot, srv, mnt, media, home, root} 接着去移植bash等至目标主机的根文件系统; 五、为grub提供配置文件 # vim /mnt/boot/grub/grub.conf default=0 timeout=5 title MageEdu Little Linux root (hd0,0) kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash initrd /initramfs.img
要先安装windows在给linux系统分区后安装linux. 由于windows的boot loader在安装时会覆盖原有的MBR内容, 致使linux没法被引导. 其次Windows并不支持安装在扩展分区上面.
Grub自己还能够监测到windows的存在,而且给与正确的配置
touch /forcefsck
RPM搜索站点:
RPM Find RPM
set ts=4 set sw=4 set expandtab set autoindent
VIM粘贴模式
set paste
cygwin安装apt-cyg
svn --force export http://apt-cyg.googlecode.com/svn/trunk/ /bin/ chmod +x /bin/apt-cyg
Syntax:
"apt-cyg install <package names>" to install packages "apt-cyg remove <package names>" to remove packages "apt-cyg update" to update setup.ini "apt-cyg show" to show installed packages "apt-cyg find <pattern(s)>" to find packages matching patterns "apt-cyg describe <pattern(s)>" to describe packages matching patterns "apt-cyg packageof <commands or files>" to locate parent packages
restore_cyg_ssh.sh
#!/bin/bash editrights -u cyg_server -a SeCreateTokenPrivilege editrights -u cyg_server -a SeTcbPrivilege editrights -u cyg_server -a SeAssignPrimaryTokenPrivilege editrights -u cyg_server -a SeServiceLogonRight ls editrights -u Administrator -a SeCreateTokenPrivilege editrights -u Administrator -a SeTcbPrivilege editrights -u Administrator -a SeAssignPrimaryTokenPrivilege editrights -u Administrator -a SeServiceLogonRight net start sshd
mintty主题
BoldAsFont=-1 Locale=C Charset=GBK Printer=Foxit Reader PDF Printer Transparency=medium Columns=100 Rows=59 BackspaceSendsBS=yes DeleteSendsDEL=yes MiddleClickAction=void RightClickAction=paste Scrollbar=none CursorType=underscore Term=xterm ForegroundColour=248,248,242 BackgroundColour=39,40,34 CursorColour=253,157,79 Black=39,40,34 BoldBlack=117,113,94 Red=249,38,114 BoldRed=204,6,78 Green=166,226,46 BoldGreen=122,172,24 Yellow=244,191,117 BoldYellow=240,169,69 Blue=102,217,239 BoldBlue=33,199,233 Magenta=174,129,255 BoldMagenta=126,51,255 Cyan=161,239,228 BoldCyan=95,227,210 White=248,248,242 BoldWhite=249,248,245
*: 匹配任意长度的任意字符 abc, abb, abm, xab, ab ab* *ab *ab*: ?:匹配任意单个字符 []: 匹配指定字符范围内的任意单个字符 [xyz] [a-z] [A-Z] [0-9] [0-9a-zA-Z] [[:upper:]] 全部大写字母 [[:lower:]] [[:alpha:]] [[:digit:]] [[:alnum:]] [[:space:]] [[:punct:]] [^]: 匹配指定字符范围外的任意单个字符 [^0-9], [^[:digit:]]
交互式登陆: su -
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互时登陆: su
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
基本正则表达式和扩展正则表达式
基本正则表式的元字符:grep -E
字符匹配: .: 任意单个字符 []: 指定范围内的任意单个字符 [0-9], [[:digit:]] [a-z], [[:lower:]] [A-Z], [[:upper:]] [[:alpha:]] [[:alnum:]] [[:space:]] [[:punct:]] [^]:指定范围外的任意单个字符 次数匹配:用来指定匹配其前面的字符的次数 *: 任意次 例子:x*y, xxy, xy, y, .*: 匹配任意长度的任意字符 \?: 0次或1次 x\?y, xy, y, xxy 贪婪模式:尽量的长的去匹配字符; \{m\}: 匹配m次 \{m,n\}: \{m,\}: 至少m次; \{0,n\}:至多n次; 位置锚定:用于指定字符出现的位置 ^: 锚定行首 ^Char $: 锚定行尾 char$ ^$: 空白行 \<char: 锚定词首,\bchar char\>: 锚定词尾,char\b 分组: \(\) \(ab\)*xy 引用: \1: 后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容 \2 ... \(a.b\)xy\1: a6bxya6b,
He like his lover. She love her liker. He love his lover. She like her liker.
read -s -p "Please input your pgsql User password:" PGPASSWORD
stty -echo read pw stty echo
trap "Clear_Temp;exit" SIGINT SIGQUIT SIGHUP
变量做用域:变量可以被使用的代码范围. 变量被声明的位置决定了其做用域:
查找次序: 内层函数 外层函数 主程序 bash解释器内置环境变量
So far we have seen how to declare basic type variables such as int
, double
, etc, and complex types such as arrays and structs. The way we have been declaring them so far, with a syntax that is like other languages such as MATLAB, Python, etc, puts these variables on the stack in C.
What is the stack? It's a special region of your computer's memory that stores temporary variables created by each function (including the main()
function). The stack is a "LIFO" (last in, first out) data structure, that is managed and optimized by the CPU quite closely. Every time a function declares a new variable, it is "pushed" onto the stack. Then every time a function exits, all of the variables pushed onto the stack by that function, are freed (that is to say, they are deleted). Once a stack variable is freed, that region of memory becomes available for other stack variables.
The advantage of using the stack to store variables, is that memory is managed for you. You don't have to allocate memory by hand, or free it once you don't need it any more. What's more, because the CPU organizes stack memory so efficiently, reading from and writing to stack variables is very fast.
A key to understanding the stack is the notion that when a function exits, all of its variables are popped off of the stack (and hence lost forever). Thus stack variables are local in nature. This is related to a concept we saw earlier known as variable scope, or local vs global variables. A common bug in C programming is attempting to access a variable that was created on the stack inside some function, from a place in your program outside of that function (i.e. after that function has exited).
Another feature of the stack to keep in mind, is that there is a limit (varies with OS) on the size of variables that can be store on the stack. This is not the case for variables allocated on the heap.
To summarize the stack:
The heap is a region of your computer's memory that is not managed automatically for you, and is not as tightly managed by the CPU. It is a more free-floating region of memory (and is larger). To allocate memory on the heap, you must use malloc()
or calloc()
, which are built-in C functions. Once you have allocated memory on the heap, you are responsible for using free()
to deallocate that memory once you don't need it any more. If you fail to do this, your program will have what is known as a memory leak. That is, memory on the heap will still be set aside (and won't be available to other processes). As we will see in the debugging section, there is a tool called valgrind
that can help you detect memory leaks.
Unlike the stack, the heap does not have size restrictions on variable size (apart from the obvious physical limitations of your computer). Heap memory is slightly slower to be read from and written to, because one has to usepointers to access memory on the heap. We will talk about pointers shortly.
Unlike the stack, variables created on the heap are accessible by any function, anywhere in your program. Heap variables are essentially global in scope.
realloc()
库是写好的现有的,成熟的,能够复用的代码。现实中每一个程序都要依赖不少基础的底层库,不可能每一个人的代码都从零开始,所以库的存在乎义非同寻常。
本质上来讲库是一种可执行代码的二进制形式,能够被操做系统载入内存执行。库有两种:静态库(**.a、.lib)和动态库(.so、.dll)。 windows上对应的是.lib .dll linux上对应的是.a .so**
gcc -c hellospeak.cpp
会将hellospeak.cpp 选项 -c 用来告诉编译器编译源代码但不要执行连接,输出结果为对象文件。文件默认名与源码文件名相同,只是将其后缀变为 .o。例如,上面的命令将编译源码文件hellospeak.cpp 并生成对象文件 hellospeak.o;
将上述两个源码文件链接成一个单一的可执行程序:
gcc hellospeak.cpp speak.cpp -o hellospeak
若是没有-o和后面参数,编译器默认采用默认的a.out. 本例中就会生成hellospeak这样的可执行程序
编译的四个过程
1 . 预处理(Pre-processing)
在该阶段, 编译器将C源代码中的包含的头文件如stdio.h编译进来, 用户能够使用gcc -E 选项查看
2 . 编译阶段(Compiling)
第二步进行的是编译阶段,在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以肯定代码的实际要作的工做,在检查无误后,Gcc把代码翻译成汇编语言.
用户能够使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
3 . 汇编阶段(Assembling)
汇编阶段是把编译阶段生成的".s"文件转成二进制目标代码. 选项为 -c
4 . 连接阶段(Link)
将编译输出文件hello.o连接成最终可执行文件.
静态库
之因此成为【静态库】,是由于在连接阶段,会将汇编生成的目标文件.o与引用到的库一块儿连接打包到可执行文件中。所以对应的连接方式称为静态连接。静态库文件为.a
静态库对函数库的连接是放在编译时期完成的
程序在运行时与函数库没有关系, 方便移植
浪费资源和空间, 由于全部相关的目标文件与牵涉到函数库被连接合成一个可执行文件
1、16进制转换成10进制 printf %d 0xF 15 或者 echo $((16#F)) 15 2、10进制转换成16进制 printf %x 15 f 或者 echo "obase=16;15"|bc F 3、10进制转换成8进制 printf %o 9 11 4、8进制转换成10进制 echo $((8#11)) 9 5、同理二进制转换成10进制 echo $((2#111)) 7 6、10进制转换成二进制 echo "obase=2;15"|bc 1111
查看私钥
openssl rsa -noout -text -in private.key
查看CSR
openssl req -noout -text -in myserver.csr
查看证书
openssl x509 -noout -text -in ca.crt
查看证书链
openssl verify selfsign.crt openssl verify -CAfile ca.crt myserver.crt
将pem证书转成windows能够使用的pfx格式
openssl pkcs12 -export -in /etc/pki/CA/newcerts/01.pem -inkey /etc/pki/CA/private/user1.key -out /etc/pki/CA/private/user1.pfx -chain -CAfile /etc/pki/CA/certs/chain.crt
openssl pkcs12 -export -out user.pfx -inkey /etc/pki/CA/pricate/cakey.pem -in /etc/pki/CA/cacert.pem -certfile ca-chain.pem
使用openssl s_client测试链接
openssl s_client -connect server.example.com:443 -ign_eof -cipher "DHE-RSA-CAMELLIA256-SHA" - no_comp -msg 2> /dev/null echo -e "GET / HTTP/1.0\n"|openssl s_client -showcerts -connect 135.27.213.164:443 2>/dev/null
Certificate -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY----- RSA private key (PKCS#1) -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- RSA public key (PKCS#1) -----BEGIN RSA PUBLIC KEY----- ... -----END RSA PUBLIC KEY----- RSA private key (PKCS#8, key ) -----BEGIN PRIVATE KEY----- ... -----END PRIVATE KEY----- RSA public key (PKCS#8) -----BEGIN PUBLIC KEY----- ... -----END PUBLIC KEY----- RSA private key (PKCS#8, key) -----BEGIN ENCRYPTED PRIVATE KEY----- ... -----END ENCRYPTED PRIVATE KEY----- openssl中有以下后缀名的文件 .key格式:私有的密钥 .crt格式:证书文件,certificate的缩写 .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写 .crl格式:证书吊销列表,Certificate Revocation List的缩写 .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式 经常使用证书协议 x509v3: IETF的证书标准 x.500:目录的标准 SCEP: 简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的 PKCS#7: 是封装数据的标准,能够放置证书和一些请求信息 PKCS#10: 用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据 PKCS#12: 用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户能够导出,以防证书服务器挂掉能够进行相应恢复。思科是.p12,微软是.pfx 1.带有私钥的证书 由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx做为证书文件后缀名。 2.二进制编码的证书 证书中没有私钥,DER 编码二进制格式的证书文件,以cer做为证书文件后缀名。 3.Base64编码的证书 证书中没有私钥,BASE64 编码格式的证书文件,也是以cer做为证书文件后缀名。
DER转换为PEM
openssl x509 -inform der -in CA.crt -out CA.pem
x509转换为pfx
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
PKCS12到PEM转换
openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem 验证 openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem
从PFX格式文件中提取私钥格式文件
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key
转换pem到DER格式
openssl x509 -in Cert.pem -inform PEM -out cert.der -outform DER
转换pem到PKCS#12
openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem
转换PKCS#12到pem
openssl pkcs12 -in sun59.p12 -out sun59.pem
产生私钥
openssl genrsa -des3 -passout pass:1234 -out /etc/pki/CA/private/cakey.pem 2048
自签证书
openssl req -new -x509 -passin pass:1234 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 -subj "/C=CN/ST=BJ/L=BJ/O=Centos/OU=Linux Department/CN=centos.example.com"
产生CSR
openssl req -new -passin pass:1234 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/newcerts/client1.csr -subj "/C=CN/ST=LN/L=SY/O=Client1/OU=IT Department/CN=client1.example.com" openssl req -new -passin pass:1234 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/newcerts/server.csr -subj "/C=CN/ST=LN/L=DL/O=Server/OU=Operation System Department/CN=server.example.com"
签发证书
openssl x509 -req -in /etc/pki/CA/newcerts/client1.csr -CA /etc/pki/CA/cacert.pem -CAkey /etc/pki/CA/private/cakey.pem -CAcreateserial -passin pass:1234 -out /etc/pki/CA/certs/client1.crt openssl x509 -req -in /etc/pki/CA/newcerts/server.csr -CA /etc/pki/CA/cacert.pem -CAkey /etc/pki/CA/private/cakey.pem -CAcreateserial -passin pass:1234 -out /etc/pki/CA/certs/server.crt
签V3证书
openssl ca -extensions v3_ca -passin pass:1234 -in /etc/pki/CA/newcerts/client1.csr -config ./ca.config -days 300 -out /etc/pki/CA/certs/client1.crt -batch
第一种: date +%s | sha256sum | base64 | head -c 10 解释: date +%s -- 当前时间戳 date +%s | sha256sum -- 对时间戳求hash值 (也能够使用md5sum) date +%s | sha256sum | base64 -- 对hash值进行基于base64的编码 date +%s | sha256sum | base64 | head -c 10 -- 取前10个字符作为密码 第二种: tr -cd '*,+\-\.a-zA-z0-9' < /dev/urandom | head -c 10 解释: tr -cd '*,+\-\.a-zA-z0-9' < /dev/urandom -- 从/dev/urandom读取,并去掉非",*+-\.\-a-zA-Z0-9"这类字符 tr -cd '*,+\-\.a-zA-z0-9' < /dev/urandom | head -c 10 -- 取前10个字符 第三种: openssl rand 100 | base64 | head -c 10 解释: openssl rand 100 -- 利用系统openssl随机产生100个字节随机字符 openssl rand 100 | base64 -- 产生随机字符用base64编码 openssl rand 100 | base64 | head -c 10 -- 取前10个字符 第四种: date +%s | md5sum | head -c 10 解释: date +%s -- 获得当前时间戳 date +%s | md5sum -- 对时间戳求md5值,md5sum是128位hash值,sha256sum是256hash值 date +%s | md5sum | head -c 10 -- 取前10个字符,这里还能够对hash值求base64编码
python -c 'import crypt; print crypt.crypt("nsadm", "$6$QvoUYKM/")'
也能够使用grub-crypt
grub-crypt --md5|--sha-256|--sha-512
openssl 只支持Up_front这种形式的
Up_front:
means SSL handshakes immediately follow up with TCP handshakes
Upgraded:
TLSstarted after a command at theapplication protocol level like tlsstart
You can do this for by adding -starttlsthe_name_of_the_protocol to this openssl s_clientcommand.
-starttls protocol
send the protocol-specific message(s) toswitch to TLS for communication. protocol is a keyword for the intendedprotocol. Currently, the only supported keywords are "smtp","pop3", "imap", "ftp", "xmpp","xmpp-server", and "irc."
获取rpm包的途径: 一、发行商的光盘或站点服务器
以CentOS为例: http://mirrors.163.com http://mirrors.sohu.com
二、http://rpmfind.net 三、http://rpm.pbone.net
rpm -ivh h:hash, 以#的个数显示安装进度,一个#表示2%的进度
--test:仅测试, 不真正执行安装过程
rpm -e --nodeps
查看全部已经安装的包: rpm -qa
查看包的描述信息: rpm -qi
查看某单个包是否安装: rpm -q package_name
查询包安装以后再当前系统生成的文件列表: rpm -ql package_name
查看某文件是哪一个包安装生成的: rpm -qf /path/to/somefile
查询包安装后生成的帮助文档: rpm -qd package_name
查询包安装后生成的配置文件: rpm -qc package_name
查询包相关的脚本: rpm -q --scripts package_name
脚本有四类:
preinstall: 安装前脚本 postinstall: 安装后脚本 preuninstall: 卸载前脚本 postuninstall: 卸载后脚本
rpm包管理: 校验, 查看包安装后生成的文件是否被修改过:
rpm -V package_name S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P caPabilities differ
rpm检验来源合法性和软件包完整性
包完整性: md5|sha1 经过单向加密机制
来源合法性: 经过公钥加密机制(RSA)
导入制做者的公钥, rpm --import /path/to/pgp-key-file
检查:rpm -K /path/to/package_file rpm --checksig /path/to/package_file --nosignature: 不检查来源合法性 --nodigest: 不检查完整性
rpm包数据库重建
重建: rpm --initdb: 初始化 若是事先不存在一个数据库,则新建之; rpm --rebuilddb: 重建 直接重建数据库,会覆盖原有的库;
yum配置宏
$releasever: 程序的版本,对Yum而言指的是redhat-release版本;只替换为主版本号,如RedHat 6.5,则替换为6; $arch: 系统架构 $basearch: 系统基本架构,如i686,i586等的基本架构为i386; $YUM0-9: 在系统中定义的环境变量,能够在yum中使用
获取当前系统相应宏替换结果的办法
# python Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import yum,pprint >>> yb = yum.YumBase() >>> pprint.pprint(yb.conf.yumvar,width=1) Loaded plugins: fastestmirror, refresh-packagekit {'arch': 'ia32e', 'basearch': 'x86_64', 'releasever': '6', 'uuid': 'ea249181-2f82-4c40-8c42-d51b3fce319a'} >>> quit()
能够使用createrepo建立yum仓库, createrepo
前提:准备好开发环境 编译过程:
./configure make make install
输出:
头文件 库文件 二进制程序 man文档
VLAN内核管理工具vconfig, TAP/TUN设备管理工具tunctl.
建立/删除Bridge
brctl addbr [BRIDGE NAME] brctl delbr [BRIDGE NAME]
attach/detach设备到Bridge:
brctl addif [BRIDGE NAME][DEVICE NAME] brctl delif [BRIDGE NAME][DEVICE NAME]
查看Bridge
brctl show
建立/删除VLAN设备
vconfig add [Parent Device Name][VLAN ID] vconfig rem [VLAN DEVICE NAME]
设置VLAN设备flag
vconfig set_flag [VLAN DEVICE NAME][FLAG][VLAN]
设置VLAN设备qos
vconfig set_egress_map [VLAN DEVICE NAME] [SKB_PRIORITY] [VLAN_QOS] vconfig set_ingress_map [VLAN DEVICE NAME] [SKB_PRIORITY] [VLAN_QOS]
查看VLAN设备状况
cat /proc/net/vlan/[VLAN DEVICE NAME]
建立VETH设备
ip link add link [DEVICE NAME] type veth
建立/删除TAP设备
tunctl -p [TAP DEVICE NAME] tunctl -d [TAP DEVICE NAME]
查询系统全部二层设备, 包括VETH/TAP设备
ip link show
删除普通二层设备
ip link delete [DEVICE NAME] type [TYPE]
Remote Procedure Call, RPC. 当一个RPC服务器启动时,会选择一个空闲的端口并在上面监听(每次启动的端口号各不相同), 同时它做为一个可用的服务会在portmap进程注册. 一个RPC服务器对应惟一一个RPC程序号,RPC服务器告诉portmap进程它在哪一个端口号上监听链接请求和为哪一个RPC程序号提供服务. 通过这个过程, portmap进程就知道了每个已注册的PRC服务器所用的Internet端口号,并且还知道哪一个程序号在这个端口上是可用的. portmap进程维护着一张RPC程序号到Internet端口号之间的映射表,它的字段包括程序号,版本号,所用协议,端口号和服务名, portmap进程经过这张映射表来提供程序号-端口号之间的转化功能
Lsof是听从Unix哲学的典范,它只完成一个功能,而且作的至关完美――它能够列出某个进程打开的全部文件信息。打开的文件多是普通的文件、目录、NFS文件、块文件、字符文件、共享库、常规管道、命名管道、符号连接、Socket流、网络Socket、UNIX域Socket,以及其它更多类型。由于“一切皆文件”乃为Unix系统的重要哲学思想之一,所以能够想象lsof命令的重要地位。
lsof输出各列信息的意义以下:
COMMAND:进程的名称 PID:进程标识符 USER:进程全部者 FD:文件描述符,应用程序经过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等 DEVICE:指定磁盘的名称 SIZE:文件的大小 NODE:索引节点(文件在磁盘上的标识) NAME:打开文件的确切名称
FD 列中的文件描述符cwd 值表示应用程序的当前工做目录,这是该应用程序启动的目录,除非它自己对这个目录进行更改,txt 类型的文件是程序代码,如应用程序二进制文件自己或共享库,如上列表中显示的 /sbin/init 程序。
其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具备对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每一个应用程序时,都具备三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。因此大多数应用程序所打开的文件的 FD 都是从 3 开始。
与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
lsof语法格式
lsof [options] filename
lsof /path/to/somefile:显示打开指定文件的全部进程之列表 lsof -c string:显示其COMMAND列中包含指定字符(string)的进程全部打开的文件;此选项能够重复使用,以指定多个模式; lsof -p PID:查看该进程打开了哪些文件;进程号前能够使用脱字符“^”取反; lsof -u USERNAME:显示指定用户的进程打开的文件;用户名前能够使用脱字符“^”取反,如"lsof -u ^root"则用于显示非root用户打开的全部文件; lsof -g GID:显示归属gid的进程状况 lsof +d /DIR/:显示指定目录下被进程打开的文件 lsof +D /DIR/:基本功能同上,但lsof会对指定目录进行递归查找,注意这个参数要比grep版本慢: lsof -a:按“与”组合多个条件,如lsof -a -c apache -u apache lsof -N:列出全部NFS(网络文件系统)文件 lsof -d FD:显示指定文件描述符的相关进程;也能够为描述符指定一个范围,如0-2表示0,1,2三个文件描述符;另外,-d还支持其它不少特殊值,如: mem: 列出全部内存映射文件; mmap:显示全部内存映射设备; txt:列出全部加载在内存中并正在执行的进程,包含code和data; cwd:正在访问当前目录的进程列表; lsof -n:不反解IP至HOSTNAME lsof -i:用以显示符合条件的进程状况 lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 46:IPv4或IPv6 protocol:TCP or UDP hostname:Internet host name hostaddr:IPv4地址 service:/etc/service中的服务名称(能够不仅一个) port:端口号 (能够不仅一个)
查看系统目前正在被打开的文件(通常是log文件)
lsof -Pn|grep "[0-9]w.*REG"|awk '{print $NF}'
查看系统正在侦听状态的进程
lsof -Pn |grep LISTEN
查看被删除的文件
lsof -Pn |grep deleted
对于应用程序而言,当进程打开了某个文件时,只要该进程保持打开该文件,即便将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然能够向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程以外,这个文件是不可见的,由于已经删除了其相应的目录索引节点。
若是文件被删除,则能够将相应的文件描述符中的内容保存出来
eg. cat /proc/1283/fd/2 >/var/log/messages
查看正在被修改的文件大小排序
lsof -Pn|egrep "[0-9]u.*REG|[0-9]w.*REG"|awk '{print $7" "$9}'|sort -rnu|head -20
查看网络活动
lsof -i @192.168.48.1 查看端口状态 lsof -i :22
查看正在读写的文件
lsof -Pn|grep "[0-9][ruw] .*REG "|awk '{print substr($4,length($4),1)" "$9" "$7}'|grep -v "/proc/"|sort -u
Syntax: tcpdump [options] [Protocol] [Direction] [Host(s)] [Value] [Logical Operations] [Other expression]
经常使用选项:
经常使用选项:
-i any : Listen on all interfaces just to see if you're seeing any traffic. -n : Don't resolve hostnames. -nn : Don't resolve hostnames or port names. -X : Show the packet's contents in both hex and ASCII. -XX : Same as -X, but also shows the ethernet header. -v, -vv, -vvv : Increase the amount of packet information you get back. -c # : Only get x number of packets and then stop. -s : Define the snaplength (size) of the capture in bytes. Use -s0 to get everything, unless you are intentionally capturing less. -S : Print absolute sequence numbers. -e : Get the ethernet header as well. -q : Show less protocol information. -E : Decrypt IPSEC traffic by providing an encryption key. -A :Display Captured Packets in ASCII -w /path/to/some_file : Capture the packets and write into a file -r /path/from/some_file : Reading the packets from a saved file -tttt : Capture packets with proper readable timestamp
Protocol:
ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. 若没有定义协议,则全部协议都会被捕获
Direction(流向)
src, dst, src and dst, src or dst
若未指定则是src or dst
Hosts(主机)
net, port, host, portrange. 若未指定主机类型,则host为缺省值
Logical Operations:
and &&; or ||; not !
清空arp表
arp -n|awk '/^[1-9]/ {print "arp -d "$1}' | sh
Bonding的模式7种方式:
#define BOND_MODE_ROUNDROBIN 0 (balance-rr模式)网卡的负载均衡模式 #define BOND_MODE_ACTIVEBACKUP 1 (active-backup模式)网卡的容错模式 #define BOND_MODE_XOR 2 (balance-xor模式)须要交换机支持 #define BOND_MODE_BROADCAST 3 (broadcast模式) #define BOND_MODE_8023AD 4 (IEEE 802.3ad动态链路聚合模式)须要交换机支持 #define BOND_MODE_TLB 5 自适应传输负载均衡模式 #define BOND_MODE_ALB 6 网卡虚拟化方式
网卡绑定mode共有七种(0~6) bond0、bond一、bond二、bond三、bond四、bond五、bond6等7种,其中经常使用的有三种: mode=0:平衡负载模式,有自动备援,但须要”Switch”支援及设定。 mode=1:自动备援模式,其中一条线若断线,其余线路将会自动备援。 mode=6:平衡负载模式,有自动备援,没必要”Switch”支援及设定。
须要说明的是若是想作成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须作特殊配置(这两个端口应该采起聚合方式),由于作bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode 0下) mode 0下bond所绑定的网卡的IP都被修改为相同的mac地址,若是这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多个,那么交换机接受到发往这个mac地址的包应该往哪一个端口转发呢?正常状况下mac地址是全球惟一的,一个mac地址对应多个端口确定使交换机迷惑了。因此 mode0下的bond若是链接到交换机,交换机这几个端口应该采起聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),由于交换机作了聚合后,聚合下的几个端口也被捆绑成一个mac地址.咱们的解 决办法是,两个网卡接入不一样的交换机便可。 mode6模式下无需配置交换机,由于作bonding的这两块网卡是使用不一样的MAC地址。
七种bond模式说明: 第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡轮循环策略) 特色:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;可是咱们知道若是一个链接或者会话的数据包从不一样的接口发出的话,中途再通过不一样的链路,在客户端颇有可能会出现数据包无序到达的问题,而无序到达的数据包须要从新要求被发送,这样网络的吞吐量就会降低 第二种模式:mod=1,即: (active-backup) Active-backup policy(主-备份策略) 特色:只有一个设备处于活动状态,当一个宕掉另外一个立刻由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是惟一的,以免switch(交换机)发生混乱。此模式只提供了容错能力;因而可知此算法的优势是能够提供高网络链接的可用性,可是它的资源利用率较低,只有一个接口处于工做状态,在有 N 个网络接口的状况下,资源利用率为1/N 第三种模式:mod=2,即:(balance-xor) XOR policy(平衡策略) 特色:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其余的传输策略能够经过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力 第四种模式:mod=3,即:broadcast(广播策略) 特色:在每一个slave接口上传输每一个数据包,此模式提供了容错能力 第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态连接聚合) 特色:建立一个聚合组,它们共享一样的速率和双工设定。根据802.3ad规范将多个slave工做在同一个激活的聚合体下。 外出流量的slave选举是基于传输hash策略,该策略能够经过xmit_hash_policy选项从缺省的XOR策略改变到其余策略。须要注意的 是,并非全部的传输策略都是802.3ad适应的,尤为考虑到在802.3ad标准43.2.4章节说起的包乱序问题。不一样的实现可能会有不一样的适应性。
必要条件: 条件1:ethtool支持获取每一个slave的速率和双工设定 条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation 条件3:大多数switch(交换机)须要通过特定配置才能支持802.3ad模式
第六种模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡) 特色:不须要任何特别的switch(交换机)支持的通道bonding。在每一个slave上根据当前的负载(根据速度计算)分配外出流量。若是正在接受数据的slave出故障了,另外一个slave接管失败的slave的MAC地址。 该模式的必要条件:ethtool支持获取每一个slave的速率
第七种模式:mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡) 特色:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),并且不须要任何switch(交换机)的支持。接收负载均衡是经过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的惟一硬件地址,从而使得不一样的对端使用不一样的硬件地址进行通讯。 来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达 时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,所以对端学习到这个硬件地址后,接收流量将会所有流向当前的slave。这个问题能够经过给全部的对端发送更新 (ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而致使流量从新分布。当新的slave加入到bond中时,或者某个未激活的slave从新 激活时,接收流量也要从新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上 当某个链路被从新接上,或者一个新的slave加入到bond中,接收流量在全部当前激活的slave中所有从新分配,经过使用指定的MAC地址给每一个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。
必要条件: 条件1:ethtool支持获取每一个slave的速率; 条件2:底层驱动支持设置某个设备的硬件地址,从而使得老是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每一个 bond 中的slave都有一个惟一的硬件地址。若是curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管 其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本同样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量
miimon 监视网络连接的频度,单位是毫秒,咱们设置的是200毫秒。 max_bonds 配置的bond口个数 mode bond模式,主要有如下几种,在通常的实际应用中,0和1用的比较多,
DEVICE="eth0" USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none DEVICE="eth1" USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none DEVICE="bond0" BOOTPROTO="static" MTU="1500" ONBOOT="yes" BONDING_OPTS='mode=1 miimon=100 primary=eth0' IPADDR=192.168.48.131 NETMASK=255.255.255.0 GATEWAY=192.168.48.130 DNS1=192.168.48.130
vmstat: procs r: 运行或等待CPU时间片的进程的个数 b: 被阻塞(一般为等待IO完成)的进程队列的长度 memory swpd: 从物理内存交换至swap中的数据量 free: 未使用物理内存大小 buffer: buffer空间大小,一般与缓存写操做相关 cache: cache空间大小,一般与缓存读操做相关 swap si: swap in, 数据进入swap中的数据量,一般是速率,kb/s so: swap out, 数据离开swap的数据量, io bi: block in,从块设备读入的数据量,一般是速率,kb/s bo: block out, 保存至块设备中的数据量,一般是速率,kb/s system in: 中断发生速率,每秒的中断数; cs: context switch, 上下文切换,进程切换,速率,一般为每秒钟切换的次数 cpu us sy id wa st # vmstat [delay [counts]] -s: 显示内存统计数据
curl命令选项: --cacert <file> CA证书 (SSL) --capath <directory> CA目录 (made using c_rehash) to verify peer against (SSL) --compressed 要求返回是压缩的形势 (using deflate or gzip) --connect-timeout <seconds> 设置最大请求时间 -H/--header <line>自定义头信息传递给服务器 -i/--include 输出时包括protocol头信息 -I/--head 只显示文档信息 --interface <interface> 使用指定网络接口/地址 -s/--silent静音模式。不输出任何东西 -u/--user <user[:password]>设置服务器的用户和密码 -p/--proxytunnel 使用HTTP代理
Rsyslog是syslogd的多线程加强版,提供三种传输方式:
UDP配置
$ModLoad imudp $UDPServerRun 514 $AllowedSender UDP, 192.168.48.0/24 $template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" :fromhost-ip, !isequal, "127.0.0.1" ?Remote
TCP配置
$ModLoad imtcp $InputTCPServerRun 514 $AllowedSender TCP, 192.168.48.0/24 $template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" :fromhost-ip, !isequal, "127.0.0.1" ?Remote
RELP传输
$ModLoad imrelp # 加载相应模块 $InputRELPServerRun 20514 # 监听端口 $template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" :fromhost-ip, !isequal, "127.0.0.1" ?Remote
Client端
$ActionQueueType LinkedList # use asynchronous processing $ActionQueueFileName srvrfwd # set file name, also enables disk mode $ActionResumeRetryCount -1 # infinite retries on insert failure $ActionQueueSaveOnShutdown on # save in-memory data if rsyslog shuts down *.* :omrelp:192.168.48.130:20514 ###其余场景 *.* @@192.168.48.131
Troubleshooting
[root@ausyd-WFO-ACR2 ~]# ntpq -np remote refid st t when poll reach delay offset jitter ============================================================================== *129.224.76.34 192.61.61.44 4 u 85 128 377 197.869 -13.437 39.879 129.221.132.42 129.224.76.34 5 u 69 128 377 294.079 -22.477 32.765 192.207.98.31 129.224.76.34 5 u 81 128 377 0.292 -15.927 38.265 [root@ausyd-WFO-ACR2 ~]# ntpq -i ntpq> ass ind assID status conf reach auth condition last_event cnt =========================================================== 1 11563 9624 yes yes none sys.peer reachable 2 2 11564 9024 yes yes none reject reachable 2 3 11565 9024 yes yes none reject reachable 2 ntpq> rv 11563 assID=11563 status=9624 reach, conf, sel_sys.peer, 2 events, event_reach, srcadr=timehost1, srcport=123, dstadr=172.24.202.112, dstport=123, leap=00, stratum=4, precision=-6, rootdelay=65.140, rootdispersion=78.842, refid=192.61.61.44, reach=377, unreach=0, hmode=3, pmode=4, hpoll=7, ppoll=7, flash=00 ok, keyid=0, ttl=0, offset=-13.437, delay=197.869, dispersion=22.047, jitter=47.972, reftime=da377f63.1cdc0478 Wed, Jan 6 2016 11:56:19.112, org=da378161.8cbb3fdc Wed, Jan 6 2016 12:04:49.549, rec=da378161.bb9b8835 Wed, Jan 6 2016 12:04:49.732, xmt=da378161.88e539d7 Wed, Jan 6 2016 12:04:49.534, filtdelay= 198.09 197.98 198.19 203.75 198.44 199.54 203.07 197.87, filtoffset= -84.06 -79.58 -73.02 -69.69 -15.91 -18.38 -12.31 -13.44, filtdisp= 15.63 17.58 19.48 21.39 23.29 24.25 25.20 26.19
mv /usr/share/zoneinfo/[时区文件] /etc/localtime
#测试服务是否在线 killall -0 nginx echo $? If sig is 0, then no signal is sent, but error checking is still performed.
rhel5: sendmail
rhel6: postfix
SMTP: Simple Mail Transfer Protocol 没法实现用户认证
ESMTP: 实现检测, 没法进行认证
POP3: Post Office Protocol, 邮局协议3
IMAP4: Internet Mail Access Protocol, IMAP4功能比POP3强大,可是IMAP3更加消耗资源
UUCP: Unix to Unix Copy: Unix主机复制文件的协议
SMTP自己能够实现传输路由的功能, C/S架构 sendmail, smtpd(TCP:25)
邮件传输: MT
邮件投递: MD
邮件用户: MU
MUA: Mail User Agent 邮件用户代理. 用于编写邮件的工具. eg: outlook
lmtp: local mail transfer protocol 本地邮件传输协议
OP
一、vsphere中的Esxi中的操做系统称做 HypervCentersor ,是基于Redhat Linux的改良规约版本,大部 分bash仍是可以使用的,只是网络资源都是由 HypervCentersor 操做系统管理的,所以没法使用ifconfig之类的命令操做。
二、NIC teaming 指的是多个物理网卡合并成一个网络界面来给单台的设备(好比Exsi)使用,能够保证在一个网卡出问题的时候,系统可以经过另外的网卡继续常规任务。
三、Esxi中的网络,物理网卡称做 vmnic0 ,虚拟交换机则是vSwitch0 开始编号的,默认系统会建立一个vSwitch0的交换机,每一个交换机能够由一片或者多片vmnic组成。
四、Esxi中的虚拟交换机是经过端口组(Port Group)进行逻辑区分的,不一样的端口组具备不一样的功能,Esxi具备三个端口组分别用于不一样的功能: ①主控台(Service Console):用于链接到Esxi主机的通信接口,必须拥有一个IP地址,通称为 vswif,第一个主控台端口就是 vswif0。 ②ESXi内核(VMKernel):用于Esxi高级功能,好比vMotion,HA,FT(Fault Tolerance)等,通称为 vmk,第一个就是 vmk0. ③虚拟机通信端口组(Virtual Machine):用于给虚拟机进行通信的端口。这些端口可能链接到几台相连的虚拟交互机上,也可能链接到真实的物理交换机上面。
五、vSwitch和物理网卡的关系 一个vSwitch至少须要一个物理网卡,可是一个vSwitch上能够同时有3中端口组,多个vSwitch没法使用同一个物理网卡,就是这样的对应关系。
六、VLAN组件 VLAN的观念和虚拟机或物理机无关,主要是划分网络以及安全上相关的服务,要让vSphere支持vlan,必须让物理设备支持vlan才能够,能够在建立端口组的时候,在属性里面设置 VLAN 号。
七、VM上面的网卡 ①vlance网卡,在没有安装vmware tool的主机上的网卡,只有基本的联网功能,无更多的配置。 ②vmxnet网卡,安装vmware tool以后,vm中的网卡就变成了 vmxnet 网卡,这是一个高性能的网卡,具备更多的配置选项。`
urandom是经过算法产生伪随机数的工具,因为使用random产生随机数会消耗大量的时间,不少时候为了方便产生key使用如下方式替换
mv /dev/{random,random.bak} ln -s /dev/urandom /dev/random
记录make&&make install 日志
make >& LOG_make &;tailf LOG_make make install >& LOG_install &;tailf LOG_install
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑汇集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不须要从新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构
MVC架构: Controller,Model和View各自独立,一个流行的开源实现是Apache Structs框架;目今,设计优良的Web应用程序一般用相就的技术实现相应的功能,好比: 一、Servlet用于实现应用逻辑; 二、JSP用于内容展现; 三、标签库和JSP扩展语言用于替换在JSP内部嵌入Java代码,进而下降了HTML维护的复杂度; 四、MVC框架用于实现展现和应用逻辑的分离;