隨筆-314  評論-209  文章-0  trackbacks-0
           
          如果你的IPTABLES基礎(chǔ)知識還不了解,建議先去看看.
          開始配置
          我們來配置一個filter表的防火墻.
          (1)查看本機關(guān)于IPTABLES的設(shè)置情況
          [root@tp ~]# iptables -L -n
          Chain INPUT (policy ACCEPT)
          target       prot opt source                 destination         
          Chain FORWARD (policy ACCEPT)
          target       prot opt source                 destination         
          Chain OUTPUT (policy ACCEPT)
          target       prot opt source                 destination         
          Chain RH-Firewall-1-INPUT (0 references)
          target       prot opt source                 destination         
          ACCEPT       all    --    0.0.0.0/0              0.0.0.0/0           
          ACCEPT       icmp --    0.0.0.0/0              0.0.0.0/0             icmp type 255 
          ACCEPT       esp    --    0.0.0.0/0              0.0.0.0/0           
          ACCEPT       ah     --    0.0.0.0/0              0.0.0.0/0           
          ACCEPT       udp    --    0.0.0.0/0              224.0.0.251           udp dpt:5353 
          ACCEPT       udp    --    0.0.0.0/0              0.0.0.0/0             udp dpt:631 
          ACCEPT       all    --    0.0.0.0/0              0.0.0.0/0             state RELATED,ESTABLISHED 
          ACCEPT       tcp    --    0.0.0.0/0              0.0.0.0/0             state NEW tcp dpt:22 
          ACCEPT       tcp    --    0.0.0.0/0              0.0.0.0/0             state NEW tcp dpt:80 
          ACCEPT       tcp    --    0.0.0.0/0              0.0.0.0/0             state NEW tcp dpt:25 
          REJECT       all    --    0.0.0.0/0              0.0.0.0/0             reject-with icmp-host-prohibited 
          可以看出我在安裝linux時,選擇了有防火墻,并且開放了22,80,25端口.
          如果你在安裝linux時沒有選擇啟動防火墻,是這樣的
          [root@tp ~]# iptables -L -n
          Chain INPUT (policy ACCEPT)
          target       prot opt source                 destination         
          Chain FORWARD (policy ACCEPT)
          target       prot opt source                 destination         
          Chain OUTPUT (policy ACCEPT)
          target       prot opt source                 destination  
          什么規(guī)則都沒有.
          (2)清除原有規(guī)則.
          不管你在安裝linux時是否啟動了防火墻,如果你想配置屬于自己的防火墻,那就清除現(xiàn)在filter的所有規(guī)則.
          [root@tp ~]# iptables -F        清除預(yù)設(shè)表filter中的所有規(guī)則鏈的規(guī)則
          [root@tp ~]# iptables -X        清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則
          我們在來看一下
          [root@tp ~]# iptables -L -n
          Chain INPUT (policy ACCEPT)
          target       prot opt source                 destination         
          Chain FORWARD (policy ACCEPT)
          target       prot opt source                 destination         
          Chain OUTPUT (policy ACCEPT)
          target       prot opt source                 destination      
          什么都沒有了吧,和我們在安裝linux時沒有啟動防火墻是一樣的.(提前說一句,這些配置就像用命令配置IP一樣,重起就會失去作用),怎么保存.
          [root@tp ~]# /etc/rc.d/init.d/iptables save
          這樣就可以寫到/etc/sysconfig/iptables文件里了.寫入后記得把防火墻重起一下,才能起作用.
          [root@tp ~]# service iptables restart
          現(xiàn)在IPTABLES配置表里什么配置都沒有了,那我們開始我們的配置吧
          (3)設(shè)定預(yù)設(shè)規(guī)則
          [root@tp ~]# iptables -p INPUT DROP
          [root@tp ~]# iptables -p OUTPUT ACCEPT
          [root@tp ~]# iptables -p FORWARD DROP
          上面的意思是,當(dāng)超出了IPTABLES里filter表里的兩個鏈規(guī)則(INPUT,FORWARD)時,不在這兩個規(guī)則里的數(shù)據(jù)包怎么處理呢,那就是DROP(放棄).應(yīng)該說這樣配置是很安全的.我們要控制流入數(shù)據(jù)包
          而對于OUTPUT鏈,也就是流出的包我們不用做太多限制,而是采取ACCEPT,也就是說,不在著個規(guī)則里的包怎么辦呢,那就是通過.
          可以看出INPUT,FORWARD兩個鏈采用的是允許什么包通過,而OUTPUT鏈采用的是不允許什么包通過.
          這樣設(shè)置還是挺合理的,當(dāng)然你也可以三個鏈都DROP,但這樣做我認(rèn)為是沒有必要的,而且要寫的規(guī)則就會增加.但如果你只想要有限的幾個規(guī)則是,如只做WEB服務(wù)器.還是推薦三個鏈都是DROP.
          注:如果你是遠(yuǎn)程SSH登陸的話,當(dāng)你輸入第一個命令回車的時候就應(yīng)該掉了.因為你沒有設(shè)置任何規(guī)則.
          怎么辦,去本機操作唄!
          (4)添加規(guī)則.
          首先添加INPUT鏈,INPUT鏈的默認(rèn)規(guī)則是DROP,所以我們就寫需要ACCETP(通過)的鏈
          為了能采用遠(yuǎn)程SSH登陸,我們要開啟22端口.
          [root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
          [root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (注:這個規(guī)則,如果你把OUTPUT 設(shè)置成DROP的就要寫上這一部,好多人都是望了寫這一部規(guī)則導(dǎo)致,始終無法SSH.在遠(yuǎn)程一下,是不是好了.
          其他的端口也一樣,如果開啟了web服務(wù)器,OUTPUT設(shè)置成DROP的話,同樣也要添加一條鏈:
          [root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)
          如果做了WEB服務(wù)器,開啟80端口.
          [root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
          如果做了郵件服務(wù)器,開啟25,110端口.
          [root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
          [root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT

          如果做了FTP服務(wù)器,開啟21端口
          [root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
          [root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
          如果做了DNS服務(wù)器,開啟53端口
          [root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
          如果你還做了其他的服務(wù)器,需要開啟哪個端口,照寫就行了.
          上面主要寫的都是INPUT鏈,凡是不在上面的規(guī)則里的,都DROP
          允許icmp包通過,也就是允許ping,
          [root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設(shè)置成DROP的話)
          [root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT    (INPUT設(shè)置成DROP的話)
          允許loopback!(不然會導(dǎo)致DNS無法正常關(guān)閉等問題)
          IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
          IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
          下面寫OUTPUT鏈,OUTPUT鏈默認(rèn)規(guī)則是ACCEPT,所以我們就寫需要DROP(放棄)的鏈.
          減少不安全的端口連接
          [root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
          [root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
          有些些特洛伊木馬會掃描端口31337到31340(即黑客語言中的 elite 端口)上的服務(wù)。既然合法服務(wù)都不使用這些非標(biāo)準(zhǔn)端口來通信,阻塞這些端口能夠有效地減少你的網(wǎng)絡(luò)上可能被感染的機器和它們的遠(yuǎn)程主服務(wù)器進(jìn)行獨立通信的機會
          還有其他端口也一樣,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也應(yīng)被禁止,我在這寫的也不全,有興趣的朋友應(yīng)該去查一下相關(guān)資料.
          當(dāng)然出入更安全的考慮你也可以包OUTPUT鏈設(shè)置成DROP,那你添加的規(guī)則就多一些,就像上邊添加
          允許SSH登陸一樣.照著寫就行了.
          下面寫一下更加細(xì)致的規(guī)則,就是限制到某臺機器
          如:我們只允許192.168.0.3的機器進(jìn)行SSH連接
          [root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
          如果要允許,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.
          24表示子網(wǎng)掩碼數(shù).但要記得把 /etc/sysconfig/iptables 里的這一行刪了.
          -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因為它表示所有地址都可以登陸.
          或采用命令方式:
          [root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
          然后保存,我再說一邊,反是采用命令的方式,只在當(dāng)時生效,如果想要重起后也起作用,那就要保存.寫入到/etc/sysconfig/iptables文件里.
          [root@tp ~]# /etc/rc.d/init.d/iptables save
          這樣寫 !192.168.0.3 表示除了192.168.0.3的ip地址
          其他的規(guī)則連接也一樣這么設(shè)置.
          在下面就是FORWARD鏈,FORWARD鏈的默認(rèn)規(guī)則是DROP,所以我們就寫需要ACCETP(通過)的鏈,對正在轉(zhuǎn)發(fā)鏈的監(jiān)控.
          開啟轉(zhuǎn)發(fā)功能,(在做NAT時,FORWARD默認(rèn)規(guī)則是DROP時,必須做)
          [root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
          [root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
          丟棄壞的TCP包
          [root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
          處理IP碎片數(shù)量,防止攻擊,允許每秒100個
          [root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
          設(shè)置ICMP包過濾,允許每秒1個包,限制觸發(fā)條件是10個包.
          [root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
          我在前面只所以允許ICMP包通過,就是因為我在這里有限制.
          二,配置一個NAT表放火墻
          1,查看本機關(guān)于NAT的設(shè)置情況
          [root@tp rc.d]# iptables -t nat -L
          Chain PREROUTING (policy ACCEPT)
          target       prot opt source                 destination         
          Chain POSTROUTING (policy ACCEPT)
          target       prot opt source                 destination         
          SNAT         all    --    192.168.0.0/24         anywhere              to:211.101.46.235
          Chain OUTPUT (policy ACCEPT)
          target       prot opt source                 destination    
          我的NAT已經(jīng)配置好了的(只是提供最簡單的代理上網(wǎng)功能,還沒有添加防火墻規(guī)則).關(guān)于怎么配置NAT,參考我的另一篇文章
          當(dāng)然你如果還沒有配置NAT的話,你也不用清除規(guī)則,因為NAT在默認(rèn)情況下是什么都沒有的
          如果你想清除,命令是
          [root@tp ~]# iptables -F -t nat
          [root@tp ~]# iptables -X -t nat
          [root@tp ~]# iptables -Z -t nat
          2,添加規(guī)則
          添加基本的NAT地址轉(zhuǎn)換,(關(guān)于如何配置NAT可以看我的另一篇文章),
          添加規(guī)則,我們只添加DROP鏈.因為默認(rèn)鏈全是ACCEPT.
          防止外網(wǎng)用內(nèi)網(wǎng)IP欺騙
          [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
          [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
          [root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

          如果我們想,比如阻止MSN,QQ,BT等的話,需要找到它們所用的端口或者IP,(個人認(rèn)為沒有太大必要)
          例:
          禁止與211.101.46.253的所有連接
          [root@tp ~]# iptables -t nat -A PREROUTING    -d 211.101.46.253 -j DROP
          禁用FTP(21)端口
          [root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
          這樣寫范圍太大了,我們可以更精確的定義.
          [root@tp ~]# iptables -t nat -A PREROUTING    -p tcp --dport 21 -d 211.101.46.253 -j DROP
          這樣只禁用211.101.46.253地址的FTP連接,其他連接還可以.如web(80端口)連接.
          按照我寫的,你只要找到QQ,MSN等其他軟件的IP地址,和端口,以及基于什么協(xié)議,只要照著寫就行了.
          最后:
          drop非法連接
          [root@tp ~]# iptables -A INPUT     -m state --state INVALID -j DROP
          [root@tp ~]# iptables -A OUTPUT    -m state --state INVALID -j DROP
          [root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP

          允許所有已經(jīng)建立的和相關(guān)的連接
          [root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
          [root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

          [root@tp ~]# /etc/rc.d/init.d/iptables save

          這樣就可以寫到/etc/sysconfig/iptables文件里了.寫入后記得把防火墻重起一下,才能起作用.

          [root@tp ~]# service iptables restart


          別忘了保存,不行就寫一部保存一次.你可以一邊保存,一邊做實驗,看看是否達(dá)到你的要求,
          上面的所有規(guī)則我都試過,沒有問題.
          寫這篇文章,用了我將近1個月的時間.查找資料,自己做實驗,希望對大家有所幫助.如有不全及不完善的地方還請?zhí)岢?
          因為本篇文章以配置為主.關(guān)于IPTABLES的基礎(chǔ)知識及指令命令說明等我會盡快傳上,當(dāng)然你可以去網(wǎng)上搜索一下,還是很多的.
          posted @ 2015-11-24 16:15 xzc 閱讀(221) | 評論 (0)編輯 收藏
               摘要: meta表修復(fù)一Java代碼  查看hbasemeta情況  hbase hbck  1.重新修復(fù)hbase meta表(根據(jù)hdfs上的regioninfo文件,生成meta表)  hbase hbck -fixMeta  2.重新將hbase m...  閱讀全文
          posted @ 2015-11-19 18:08 xzc 閱讀(1396) | 評論 (0)編輯 收藏

           echo "Cfoo'barxml" | sed "s/'/::/g" |  sed 's/::/\\:/g' |  sed "s/:/'/g"    替換單引號為 \'

           

          ------------------------

          sed 替換單引號'

          echo "mmm'sss" > test
          cat test


          把test內(nèi)容中單引號替換成雙引號
          sed 's/'"'"/'"''/g' test  ==> sed 's/' " ' " / ' " ' '/g' test
          解析下:
          's/' => 要進(jìn)行替換操作,后緊跟匹配字符
          "'" => 用雙引號包裹著單引號
          /   =>分割符
          '"'  => 用單引號包裹著雙引號
          '/g' =>分隔符,全局替換


          當(dāng)然還可以使用下面這兩種方法替換:
          sed s#\'#\"#g test   最外層使用#分隔,里面使用轉(zhuǎn)義單引號,轉(zhuǎn)義雙引號
          sed "s/'/\"/g" test    最外層使用雙引號,里面使用單引號,轉(zhuǎn)義雙引號


          echo "mmm'sss"  | sed 's/'"'"/'"''/g'
          echo "mmm'sss"  | sed s#\'#\"#g
          echo "mmm'sss"  | sed "s/'/\"/g"

           

          awk '{print "sed '\''s/"$1"\\t/"$2"\\t/g'\'' ref_Zv9_top_level.bed.chrom"}' ref_Zv9_top_level.gff3_transID

          sed 's/rna10004\t/XR_223343.1\t/g' ref_Zv9_top_level.bed.chrom
          sed 's/rna10000\t/XR_223342.1\t/g' ref_Zv9_top_level.bed.chrom

           

          sed 's/\]/\"/g'   替換]為“

          sed 's/\[/\"/g'   替換[為“

          posted @ 2015-10-29 19:52 xzc 閱讀(1838) | 評論 (1)編輯 收藏
          shell中${}的妙用
           
          1. 截斷功能
          ${file#*/}:       拿掉第一條/及其左邊的字符串:dir1/dir2/dir3/my.file.txt
          ${file##*/}:    拿掉最后一條/及其左邊的字符串:my.file.txt
          ${file#*.}:       拿掉第一個.及其左邊的字符串:file.txt
          ${file##*.}:    拿掉最后一個.及其左邊的字符串:txt
          ${file%/*}:     拿掉最后條/及其右邊的字符串:/dir1/dir2/dir3
          ${file%%/*}: 拿掉第一條/及其右邊的字符串:(空值)
          ${file%.*}:    拿掉最后一個.及其右邊的字符串:/dir1/dir2/dir3/my.file
          ${file%%.*}: 拿掉第一個.及其右邊的字符串:/dir1/dir2/dir3/my
          記憶的方法為:
          [list]#是去掉左邊, ##最后一個
                %是去掉右邊, %%第一個
          2. 字符串提取 
          單一符號是最小匹配﹔兩個符號是最大匹配。
          ${file:0:5}:提取最左邊的 5 個字節(jié):/dir1
          ${file:5:5}:提取第 5 個字節(jié)右邊的連續(xù) 5 個字節(jié):/dir2
          3. 字符串替換
          ${file/dir/path}:將第一個 dir 提換為 path:/path1/dir2/dir3/my.file.txt
          ${file//dir/path}:將全部 dir 提換為 path:/path1/path2/path3/my.file.txt
          4. 針對不同的變量狀態(tài)賦值(沒設(shè)定、空值、非空值):
          ${file-my.file.txt}: 若$file沒有設(shè)定,則使用my.file.txt作返回值。(空值及非空值時不作處理)
          ${file:-my.file.txt}:若$file沒有設(shè)定或為空值,則使用my.file.txt作返回值。(非空值時不作處理)
          ${file+my.file.txt}: 若$file設(shè)為空值或非空值,均使用my.file.txt作返回值。(沒設(shè)定時不作處理)
          ${file:+my.file.txt}:若$file為非空值,則使用my.file.txt作返回值。(沒設(shè)定及空值時不作處理)
          ${file=my.file.txt}: 若$file沒設(shè)定,則使用my.file.txt作返回值,同時將$file 賦值為 my.file.txt。(空值及非空值時不作處理)
          ${file:=my.file.txt}:若$file沒設(shè)定或為空值,則使用my.file.txt作返回值,同時將 $file 賦值為 my.file.txt。(非空值時不作處理)
          ${file?my.file.txt}: 若$file沒設(shè)定,則將my.file.txt輸出至 STDERR。(空值及非空值時不作處理)
          ${file:?my.file.txt}:若$file沒設(shè)定或為空值,則將my.file.txt輸出至STDERR。(非空值時不作處理)
          注意: 
          ":+"的情況是不包含空值的.
          ":-", ":="等只要有號就是包含空值(null).
          5. 變量的長度
          ${#file}
          6. 數(shù)組運算
          A=(a b c def)
          ${A[@]} 或 ${A[*]} 可得到 a b c def (全部組數(shù))
          ${A[0]} 可得到 a (第一個組數(shù)),${A[1]} 則為第二個組數(shù)...
          ${#A[@]} 或 ${#A[*]} 可得到 4 (全部組數(shù)數(shù)量)
          ${#A[0]} 可得到 1 (即第一個組數(shù)(a)的長度),${#A[3]} 可得到 3 (第四個組數(shù)(def)的長度)
          posted @ 2015-10-29 16:18 xzc 閱讀(157) | 評論 (0)編輯 收藏

          在linux操作系統(tǒng)中,find命令非常強大,在文件與目錄的查找方面可謂無所不至其極,如果能結(jié)合xargs命令使得,更是強大無比。

          以下來看看find命令忽略目錄查找的用法吧。

          例1,根據(jù)文件屬性查找:


          復(fù)制代碼
          代碼如下:

          find . -type f -name "*config*" ! -path "./tmp/*" ! -path "./scripts/*" ! -path "./node_modules/*" 
          Explanation:
          find . - Start find from current working directory (recursively by default) 
          -type f - Specify to find that you only want files in the results 
          -name "*_peaks.bed" - Look for files with the name ending in _peaks.bed 
          ! -path "./tmp/*" - Exclude all results whose path starts with ./tmp/ 
          ! -path "./scripts/*" - Also exclude all results whose path starts with ./scripts/

          例2,根據(jù)文件內(nèi)容查找:


          復(fù)制代碼
          代碼如下:

          grep -n -r --exclude-dir='node_modules' --exclude-dir='logs' --exclude="nohup.out" 192 *




          使用find命令在linux系統(tǒng)中查找文件時,有時需要忽略某些目錄,可以使用 -prune 參數(shù)來進(jìn)行過濾。
          不過必須注意:要忽略的路徑參數(shù)要緊跟著搜索的路徑之后,否則該參數(shù)無法起作用。

          例如:指定搜索/home/zth目錄下的所有文件,但是會忽略/home/zth/astetc的路徑:


          復(fù)制代碼
          代碼如下:

          find /home/zth -path "/home/zth/astetc" -prune -o -type f -print

          按照文件名來搜索則為:


          復(fù)制代碼
          代碼如下:

          find /home/zth -path "/home/zth/astetc" -prune -o -type f -name "cdr_*.conf" -print

          要忽略兩個以上的路徑如何處理?


          復(fù)制代碼
          代碼如下:

          find /home/zth /( -path "/home/zth/astetc" -o -path "/home/zth/etc" /) -prune -o -type f -print
          find /home/zth /( -path "/home/zth/astetc" -o -path "/home/zth/etc" /) -prune -o -type f -name "cdr_*.conf" -print

          注意:/( 和/) 前后都有空格。

          查找某個文件包含內(nèi)容,以下語句可以解決目錄帶空格的問題:


          復(fù)制代碼
          代碼如下:

          find ./ -name "mysql*" -print0 |xargs -0 grep "SELECT lead_id FROM vicidial_list where vendor_lead_code"

          如果目錄不帶空格,可以這樣:
           

          復(fù)制代碼
          代碼如下:

          find ./ -name "mysql*" |xargs grep "SELECT lead_id FROM vicidial_list where vendor_lead_code"

          通過以上的例子,大家應(yīng)該可以掌握find命令查找文件時,忽略相關(guān)目錄的方法了。

          posted @ 2015-10-28 11:33 xzc 閱讀(1382) | 評論 (1)編輯 收藏

          X509 文件擴展名

          首先我們要理解文件的擴展名代表什么。DER、PEM、CRT和CER這些擴展名經(jīng)常令人困惑。很多人錯誤地認(rèn)為這些擴展名可以互相代替。盡管的確有時候有些擴展名是可以互換的,但是最好你能確定證書是如何編碼的,進(jìn)而正確地標(biāo)識它們。正確地標(biāo)識證書有助于證書的管理。


          編碼 (也用于擴展名)

          • .DER 擴展名DER用于二進(jìn)制DER編碼的證書。這些證書也可以用CER或者CRT作為擴展名。比較合適的說法是“我有一個DER編碼的證書”,而不是“我有一個DER證書”。
          • .PEM = 擴展名PEM用于ASCII(Base64)編碼的各種X.509 v3 證書文件開始由一行"—– BEGIN …“開始。

          常用的擴展名

          • .CRT = 擴展名CRT用于證書。證書可以是DER編碼,也可以是PEM編碼。擴展名CER和CRT幾乎是同義詞。這種情況在各種unix/linux系統(tǒng)中很常見。
          • CER = CRT證書的微軟型式。可以用微軟的工具把CRT文件轉(zhuǎn)換為CER文件(CRT和CER必須是相同編碼的,DER或者PEM)。擴展名為CER的文件可以被IE識別并作為命令調(diào)用微軟的cryptoAPI(具體點就是rudll32.exe cryptext.dll, CyrptExtOpenCER),進(jìn)而彈出一個對話框來導(dǎo)入并/或查看證書內(nèi)容。
          • .KEY = 擴展名KEY用于PCSK#8的公鑰和私鑰。這些公鑰和私鑰可以是DER編碼或者PEM編碼。

          CRT文件和CER文件只有在使用相同編碼的時候才可以安全地相互替代。

          posted @ 2015-10-01 10:12 xzc 閱讀(453) | 評論 (0)編輯 收藏

          原文地址: http://www.thegeekstuff.com/2012/04/curl-examples/


          下載單個文件,默認(rèn)將輸出打印到標(biāo)準(zhǔn)輸出中(STDOUT)中

          curl http://www.centos.org

          通過-o/-O選項保存下載的文件到指定的文件中:
          -o:將文件保存為命令行中指定的文件名的文件中
          -O:使用URL中默認(rèn)的文件名保存文件到本地

          1 # 將文件下載到本地并命名為mygettext.html
          2 curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
          3 
          4 # 將文件保存到本地并命名為gettext.html
          5 curl -O http://www.gnu.org/software/gettext/manual/gettext.html

          同樣可以使用轉(zhuǎn)向字符">"對輸出進(jìn)行轉(zhuǎn)向輸出

          同時獲取多個文件

          1 curl -O URL1 -O URL2

          若同時從同一站點下載多個文件時,curl會嘗試重用鏈接(connection)。

          通過-L選項進(jìn)行重定向
          默認(rèn)情況下CURL不會發(fā)送HTTP Location headers(重定向).當(dāng)一個被請求頁面移動到另一個站點時,會發(fā)送一個HTTP Loaction header作為請求,然后將請求重定向到新的地址上。
          例如:訪問google.com時,會自動將地址重定向到google.com.hk上。

          復(fù)制代碼
           1 curl http://www.google.com
           2 <HTML>
           3 <HEAD>
           4     <meta http-equiv="content-type" content="text/html;charset=utf-8">
           5     <TITLE>302 Moved</TITLE>
           6 </HEAD>
           7 <BODY>
           8     <H1>302 Moved</H1>
           9     The document has moved
          10     <A HREF="http://www.google.com.hk/url?sa=p&amp;hl=zh-CN&amp;pref=hkredirect&amp;pval=yes&amp;q=http://www.google.com.hk/&amp;ust=1379402837567135amp;usg=AFQjCNF3o7umf3jyJpNDPuF7KTibavE4aA">here</A>.
          11 </BODY>
          12 </HTML>
          復(fù)制代碼

          上述輸出說明所請求的檔案被轉(zhuǎn)移到了http://www.google.com.hk。

          這是可以通過使用-L選項進(jìn)行強制重定向

          1 # 讓curl使用地址重定向,此時會查詢google.com.hk站點
          2 curl -L http://www.google.com

          斷點續(xù)傳

          通過使用-C選項可對大文件使用斷點續(xù)傳功能,如:

          復(fù)制代碼
          1 # 當(dāng)文件在下載完成之前結(jié)束該進(jìn)程
          2 $ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
          3 ##############             20.1%
          4 
          5 # 通過添加-C選項繼續(xù)對該文件進(jìn)行下載,已經(jīng)下載過的文件不會被重新下載
          6 curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
          7 ###############            21.1%
          復(fù)制代碼

          對CURL使用網(wǎng)絡(luò)限速
          通過--limit-rate選項對CURL的最大網(wǎng)絡(luò)使用進(jìn)行限制

          1 # 下載速度最大不會超過1000B/second
          2 
          3 curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

          下載指定時間內(nèi)修改過的文件

          當(dāng)下載一個文件時,可對該文件的最后修改日期進(jìn)行判斷,如果該文件在指定日期內(nèi)修改過,就進(jìn)行下載,否則不下載。
          該功能可通過使用-z選項來實現(xiàn):

          1 # 若yy.html文件在2011/12/21之后有過更新才會進(jìn)行下載
          2 curl -z 21-Dec-11 http://www.example.com/yy.html

          CURL授權(quán)

          在訪問需要授權(quán)的頁面時,可通過-u選項提供用戶名和密碼進(jìn)行授權(quán)

          1 curl -u username:password URL
          2 
          3 # 通常的做法是在命令行只輸入用戶名,之后會提示輸入密碼,這樣可以保證在查看歷史記錄時不會將密碼泄露
          4 curl -u username URL

          從FTP服務(wù)器下載文件

          CURL同樣支持FTP下載,若在url中指定的是某個文件路徑而非具體的某個要下載的文件名,CURL則會列出該目錄下的所有文件名而并非下載該目錄下的所有文件

          1 # 列出public_html下的所有文件夾和文件
          2 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
          3 
          4 # 下載xss.php文件
          5 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

          上傳文件到FTP服務(wù)器

          通過 -T 選項可將指定的本地文件上傳到FTP服務(wù)器上

          復(fù)制代碼
          # 將myfile.txt文件上傳到服務(wù)器
          curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
          
          # 同時上傳多個文件
          curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com
          
          # 從標(biāo)準(zhǔn)輸入獲取內(nèi)容保存到服務(wù)器指定的文件中
          curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
          復(fù)制代碼

          獲取更多信息

          通過使用 -v 和 -trace獲取更多的鏈接信息

          通過字典查詢單詞

          復(fù)制代碼
          1 # 查詢bash單詞的含義
          2 curl dict://dict.org/d:bash
          3 
          4 # 列出所有可用詞典
          5 curl dict://dict.org/show:db
          6 
          7 # 在foldoc詞典中查詢bash單詞的含義
          8 curl dict://dict.org/d:bash:foldoc
          復(fù)制代碼

          為CURL設(shè)置代理

          -x 選項可以為CURL添加代理功能

          1 # 指定代理主機和端口
          2 curl -x proxysever.test.com:3128 http://google.co.in

           

          其他網(wǎng)站整理

          保存與使用網(wǎng)站cookie信息

          1 # 將網(wǎng)站的cookies信息保存到sugarcookies文件中
          2 curl -D sugarcookies http://localhost/sugarcrm/index.php
          3 
          4 # 使用上次保存的cookie信息
          5 curl -b sugarcookies http://localhost/sugarcrm/index.php

          傳遞請求數(shù)據(jù)

          默認(rèn)curl使用GET方式請求數(shù)據(jù),這種方式下直接通過URL傳遞數(shù)據(jù)
          可以通過 --data/-d 方式指定使用POST方式傳遞數(shù)據(jù)

          復(fù)制代碼
          1 # GET
          2 curl -u username https://api.github.com/user?access_token=XXXXXXXXXX
          3 
          4 # POST
          5 curl -u username --data "param1=value1&param2=value" https://api.github.com
          6 
          7 # 也可以指定一個文件,將該文件中的內(nèi)容當(dāng)作數(shù)據(jù)傳遞給服務(wù)器端
          8 curl --data @filename https://github.api.com/authorizations
          復(fù)制代碼

          注:默認(rèn)情況下,通過POST方式傳遞過去的數(shù)據(jù)中若有特殊字符,首先需要將特殊字符轉(zhuǎn)義在傳遞給服務(wù)器端,如value值中包含有空格,則需要先將空格轉(zhuǎn)換成%20,如:

          1 curl -d "value%201" http://hostname.com

          在新版本的CURL中,提供了新的選項 --data-urlencode,通過該選項提供的參數(shù)會自動轉(zhuǎn)義特殊字符。

          1 curl --data-urlencode "value 1" http://hostname.com

          除了使用GET和POST協(xié)議外,還可以通過 -X 選項指定其它協(xié)議,如:

          1 curl -I -X DELETE https://api.github.cim

          上傳文件

          1 curl --form "fileupload=@filename.txt" http://hostname/resource

           

          http://curl.haxx.se/docs/httpscripting.html

          posted @ 2015-09-23 16:55 xzc 閱讀(330) | 評論 (2)編輯 收藏

          方法一: 使用全局變量

          1. g_result=""  
          2.   
          3. function testFunc()  
          4. {  
          5.     g_result='local value'  
          6. }  
          7.   
          8. testFunc  
          9. echo $g_result  

          方法二: 把shell函數(shù)作為子程序調(diào)用,將其結(jié)果寫到子程序的標(biāo)準(zhǔn)輸出

          1. function testFunc()  
          2. {  
          3.     local_result='local value'  
          4.     echo $local_result  
          5. }  
          6.   
          7. result=$(testFunc)  
          8. echo $result  

          看到一篇關(guān)于函數(shù)返回值的好文章,分享一下: http://www.linuxjournal.com/content/return-values-bash-functions 
          posted @ 2015-09-21 10:20 xzc 閱讀(4454) | 評論 (2)編輯 收藏
               摘要: 12345678$# 是傳給腳本的參數(shù)個數(shù)$0 是腳本本身的名字$1 是傳遞給該shell腳本的第一個參數(shù)$2 是傳遞給該shell腳本的第二個參數(shù)$@ 是傳給腳本的所有參數(shù)的列表$* 是以一個單字符串顯示所有向腳本傳遞的參數(shù),與位置變量不同,參數(shù)可超過9個$$ 是腳本運行的當(dāng)前進(jìn)程ID號$? 是顯示最后命令的退出狀態(tài),0表示沒有錯誤,其他表示有錯誤  閱讀全文
          posted @ 2015-09-15 20:07 xzc 閱讀(247) | 評論 (0)編輯 收藏
               摘要: #!/bin/sh #測試各種字符串比較操作。#shell中對變量的值添加單引號,爽引號和不添加的區(qū)別:對類型來說是無關(guān)的,即不是添加了引號就變成了字符串類型,#單引號不對相關(guān)量進(jìn)行替換,如不對$符號解釋成變量引用,從而用對應(yīng)變量的值替代,雙引號則會進(jìn)行替代#author:tenfyguo A="$1"B="$2" echo "輸入的原始值:A=$A,B=$B"&nb...  閱讀全文
          posted @ 2015-09-15 14:52 xzc 閱讀(2006) | 評論 (1)編輯 收藏
          僅列出標(biāo)題
          共32頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 Last 
          主站蜘蛛池模板: 皋兰县| 台东县| 桐柏县| 嵩明县| 筠连县| 吴江市| 海口市| 修水县| 荆州市| 手机| 利川市| 礼泉县| 杂多县| 吉林省| 将乐县| 海盐县| 安阳县| 兴宁市| 蕲春县| 利津县| 霍邱县| 黄山市| 孝昌县| 高邑县| 西贡区| 合山市| 阜南县| 玉溪市| 明水县| 绿春县| 武夷山市| 襄汾县| 桐柏县| 长顺县| 福鼎市| 潢川县| 宾阳县| 南和县| 宁化县| 阜南县| 桦甸市|