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框架用於實現展現和應用邏輯的分離;