一.非交互式shell -----expect 1.裝包 yum -y install expect 2.最後一行不執行 一. sed的基本用法 1.sed 命令 -n 選項的用法 sed -n '1p' /etc/passwd (顯示passwd文件的第一行,不加n則會全部顯示,p是打印) sed '1,4d' /etc/passwd (d刪除,刪除passwd的1-4行內容,並顯示刪除後的內容) 2.sed 命令 -i 選項的用法 正常情況下sed命令,只是把處理的結果顯示打印到屏幕上,而不會真的修改原始文件;只有 加了-i 選項後纔會取修改原始文件; 3.sed 選項後面跟多個指令時,可以用;(分號)隔開; sed -n '1p;5p' /etc/passwd 顯示第一行和第五行 4.認識sed工具p輸出操作 sed -n '/local$/p' 1.txt 輸出以local結尾的行 sed -n 'p;n' 1.txt 輸出基數行 sed -n 'n;p' 1.txt 輸出偶數行 sed -n '5,$p' 1.txt 輸出從第五行到最後一行 sed -n '$=' 1.txt 輸出文本的總行數 5.sed工具的d輸出操作(不要加-n) sed '3,5d' 1.txt 刪除3-5行 sed '/init/d' 1.txt 刪除包含init所有的行 sed '/init/d;/bin/d' 1.txt 刪除所有包含init和bin的行 sed '/init/!d' 1.txt 刪除不包含init的行 sed '$d' 1.txt 刪除最後一行 sed '/^$/d' 1.txt 刪除文件中所有的空行 6.sed工具的s替換操作 sed 's/ll/AA/' 1.txt 將所有行的第一個ll替換爲AA sed 's/ll/AA/g' 1.txt 將所有行的ll替換爲AA sed '3s/script/SCRIPT/2' 1.txt 將第三行內的第二個script替換爲SCRIPT sed 's/init//g' 1.txt 刪除所有的init字符 sed 's/script\|init\e//g' 刪除所有的script init e 的字符 sed '3,5s/^#//' 1.txt 解除3到5行的#註釋 sed '6,7s/^/#/' 1.txt 給6到7行添加註釋 7.sed的擴展 sed 's/.//2;s/.$//' 1.txt 刪除每行的第二個字符和最後一個字符 sed -r 's/^(.)(.)(.*)/\2\1\3/' 把每行的第一個字符和第二個字符互換 sed -r 's/[0-9]//g;s/^( )+//' 1.txt 把文件中所有數字,和首行空格刪除; sed 's/[A-Z]/(&)/g' 1.txt 把文件中每個大寫字母添加括號 二.使用sed修改系統配置 1.修改IP地址 /etc/sysconfig/network-scripts/ifcfg-eth0 sed '/^IPADDR/s/192.168.1.1/172.25.10.1/' 1.txt (第一種方法) sed -r '/^IPADDR/s/192.168.1.(.*)/172.25.10.\1/' 1.txt (第二種) 2.調整web根目錄(由於需要替換的字符串中有 / ,爲了避免與sed替換操作的分隔混淆,可以使用其他字符作爲替換分隔,比如可改用“s#old#new#”的方式實現替換) sed 's#/var/www/html#/var/www/web#' 1.txt 一. Squid代理服務器(功能全,速度相對varnish慢) 1.裝包yum -y install squid 2.修改配置文件:vim /etc/squid/squid.conf http_port 80 vhost (修改第59行;下面內容自己添加) visible_hostname www.haha.com(設置自己的代理服務的名字,用於客戶訪問代理服務器) cache_peer 192.168.2.100 parent 80 0 originserver(定義後端服務器) cache_dir ufs /var/spool/squid 200 16 256 (設置硬盤緩存容量爲200M 自動創建16個一級子目錄和256個二級子目錄) http_access allow all (修改56行,允許所有主機使用代理服務器) 3.重啓服務設置開機自啓。netstat -antpu | grep 80 查看squid是否啓用 4.用客戶端驗證 二. Varnish代理服務器(加速web,性能好,速度快,緩存數據在內存) 1.安裝Varnish源碼包和安裝依賴包yum -y install gcc readline-devel pcre-devel 解壓源碼包,cd進去,執行./configure --prefix=/usr/local/varnish指定安裝路徑 然後make && make install 編譯安裝; 2.複製啓動腳本和配置文件 cd到解壓出來的軟件包中;cp redhat/varnish.initrc /etc/init.d/varnish cp redhat/varnish.sysconfig /etc/sysconfig/varnish (複製配置文件) ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/ (創建快捷方式) ln -s /usr/local/varnish/bin/* /usr/bin/ 3.修改前端配置:vim /etc/sysconfig/varnish VARNISH_LISTEN_PORT=80 (修改66行, 默認端口) VARNISH_STORAGE_SIZE=64M (修改89行,定義緩存大小) VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"(修改92,基於內存方式緩存) 4.修改後端配置(代理配置文件) vim /etc/varnish/default.vcl mkdir /etc/varnish cp /usr/local/varnish/etc/default.vcl /etc/varnish uuidgen > /etc/varnish/secret vim /etc/varnish/default.vcl (取消註釋即可) backend default { .host = "192.168.2.100"; (定義後端服務器) .port = "80"; (定義端口號) } 5.重啓服務:/etc/init.d/varnish start 6.客戶端訪問; 7.日誌的使用: varnishlog (軟件本身日誌,在內存裏) varnishncsa (訪問日誌,沒人訪問則沒有日誌) 8.問題:vanish 代理主要採用了緩存技術,存在的一個問題是,如果web服務更新了頁面,會導致客戶端訪問頁面時,還是舊的,不能立即同步(軟件有自動更新緩存,但有時間);如果想立即同步,需要手動清除緩存 varnishadmin -S /etc/varnish/secret -T 127.0.0.1:6082 (交互式) (/etcc/varnish/secret 密碼存放文件)(6082 僅管理員使用的端口) storage.list (列出緩存) backend.list (列出後端服務器) ban.url .*(清理所有)(支持正則;清除緩存) ban.url 2.html (2.html是源站點) varnishadm –S /etc/varnish/secret –T 127.0.0.1:6082 ban.url 頁面文件名 (非交互式) ------------------------------------------------------------------------------------------------------------- 一.nginx Web 服務器 源碼包安裝: 1.yum -y install gcc pcre-devel openssl-devel (安裝常見依賴包) 2.創建一個普通用戶,指定普通用戶來安裝nginx (增強安全性,避免軟件被***,同時軟件還擁有root的權限)useradd -s /sbin/nologin nginx 3.tar -xvf nginx-1.8.0.tar.gz 解壓安裝包 4.cd nginx-1.8.0 5. ./configure --prefix=/usr/local/nginx(安裝路路徑) --user=nginx(指定用戶) --group=nginx(指定組) 6.make && make install (編譯並安裝) 7.創建一個服務的快捷方式:ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ 方便使用;避免每次起服務打很長路徑 8.nginx 啓動服務 nginx -s stop 關閉服務 nginx -s reload 重新加載配置文件 nginx -V 產看軟件信息(安裝了那些模塊) 9.netsta -anptu | grep nginx (查看服務是否啓動,監聽端口是多少) 二. 升級(加裝)nginx 服務器 1.解壓軟件,並cd進去 2. ./configure --with-http_ssl_module 安裝ssl加密模塊(升級前的用戶記者也在添加 下) (./configure --help | grep ssl 通過help查詢命令) 3.make 只編譯軟件,不要make install 安裝 因爲一旦安裝後,就會覆蓋升級前的配置; 4.備份(重命名)老的nginx主程序,把剛剛編譯出來的新主程序替換老程序; 備份:mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold 把新的複製進去 cd 到解壓的軟件中 然後執行 cp objs/nginx /usr/local/nginx/sbin 5.起服務 nginx -s reload 6.驗證 netstat -antpu | grep nginx ----------------------------------------------------------------------------------------------------------- 三. 用戶認證 1.用戶認證的作用:當訪問一個網頁時,需要提交用戶名和密碼認證; 2.修改nginx配置文件:vim /usr/local/nginx/conf/nginx.conf (修改時用;結尾) server { listen 80; (通過80端口監聽) server_name www.a.com; (設置網站域名) auth_basic "renzheng"; (認證窗口提示文字) auth_basic_user_file "/usr/local/nginx/pass"; (指定認證用戶密碼文件路徑) location / { root html;(網頁存放路徑,這裏路徑是相對路徑) index index.html index.htm; 3.創建剛在配置文件中寫入的密碼認證文件; 生成密碼文件需要安裝httpd-tools包,然後使用命令(交互式)htpasswd創建密碼文件; htpasswd -c /usr/local/nginx/pass tom (創建tom用戶名,密碼根據提示輸) 首次添加用戶要使用-c 的選項,當我門再次添加別的用戶時千萬不要在用-c的選項,一旦使 用會導致覆蓋之前的用戶;直接用htpasswd /usr/local/nginx/pass zhangsan 4.重啓nginx服務(重新讀取一邊配置文件) nginx -s reload 四. 基於域名的虛擬主機(就是用一臺服務器提供多個網站供用戶訪問) 1.修改配置文件vim /usr/local/nginx/conf/nginx.conf (有模版直接用,取消註釋) server { listen 80; server_name www.a.com; auth_basic "qingrenzhneg:"; auth_basic_user_file "usr/local/nginx/pass" location / { root html; index index.html index.htm; } } ...... server { listen 80; server_name www.b.com; location / { root web; index index.html index.htm; } } 2.創建www.b.com的網頁目錄和網頁 3.重啓服務 nginx -s reload 4.用客戶端驗證 由於沒有DNS服務器解析域名需要採用另外一種辦法:修改客戶機的/etc/hosts 文件 手動在這個文件中添加;他的優先級還高於DNS的優先級; vim /etc/hosts 添加 服務器地址 域名 192.168.4.5 www.a.com www.b.com 五.SSL安全的虛擬主機 1.首先確認nginx是否安裝--with-http_ssl-module 加密模塊 nginx -V 查看nginx軟件詳細信息 2.生成私鑰和證書,需要把生成的文件放入指定路徑下:cd /usr/local/nginx/conf 使用openssl命令生成文件 openssl genrsa > my.key (生成私鑰) openssl req -new -x509 -key my.key > my.crt (生成證書) 在生成證書的時候會提示輸入:國家 省份 城市 公司 部門 主機名 郵箱 3.修改配置文件,調用私鑰和證書實現加密 vim /usr/local/nginx/conf/nginx.conf (有模版直接用,取消最後註釋) server { listen 443 ssl; server_name www.c.com; ssl_certificate my.crt; ssl_certificate_key my.key; ....... location / { root html; index index.html index.htm; } } 4.重啓服務nginx -s reload 5.客戶端驗證,當客戶端訪問服務器時,服務器會自動傳輸一個證書給到客戶端的 一.Nginx 作代理(調度器,不會緩存)實現訪問Web的負載均衡,並且定時檢查Web的健康; 1.前提先搭建2臺web服務器(作web集羣) 2.部署nginx調度器 修改nginx配置文件,此軟軟件自帶備份配置文件(以default結尾),把昨天的配置文件覆蓋掉 vim /usr/local/ngins/conf/nginx.conf http { upstream webs { (web是我自己命名的集羣名稱,用於下面調用) ip_hash;(相同客戶端訪問,給相同web服務頁面,根據實際情況是否寫次條命令) server 192.168.2.100:80 (weight=2 max_fails=2 fail_timeout=10); 括號裏的內容爲附加條件weight作用是負載量是正常的兩倍;max_fails fail_timeout 定義失敗後處理動作設置失敗次數,不再訪問時間,權重; server 192.168.2.200:80; } (定義我們的web服務集羣) server { listen 80; server_name localhost; location / { proxy_pass http://webs; (調用web集羣,提供web服務) } } ------------------------------------------------------------------------------------------------------------- 二. Nginx作爲Web服務器實現 動靜分離 1.部署LNMP環境; L:linux操作系統 N:nginx網站服務軟件 M:MySQL Mariadb 數據庫 P:網站開發語言(PHP Perl Python) 安裝:yum -y install mariadb mariadb-server mariadb-devel php php-mysql 源碼安裝nginx 手動安裝rpm -hiv php-fpm-5.4.16-36.el7_1.x86_64.rpm(他是php的自動監聽啓動服務,可以自動執行php命令,解析php) 啓服務:systemctl restart mariadb php-fpm 查看服務是否啓用:netstat -antpu | grep 80(nginx) 3306(mariadb) 9000(php) 2.修改nginx配置文件(有模版,取消註釋適當修改即可)(清除上面實驗做的配置) location / { root html; index index.html index.htm; } location ~ \.php$ { (這個配置需要我們作出修改) root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } 通過上面配置實現當客戶端訪問一個靜態頁面時直接在根目錄下提供頁面;如果請求一個動態頁面,nginx自動識別,將將請求的內容給到php,讀取內容,然後將讀取後的內容給到客戶端; php動態的頁面還可以取關聯讀取mariadb數據庫的內容(這個關聯頁面開發提供) 3.手動寫一個php動態頁面,用客戶端驗證 4.如果報錯查看以下log 1) tailf /usr/local/nginx/logs/error.log 2) ls /var/log/php-fpm/* ------------------------------------------------------------------------------------------------------------- 三. nginx地址重寫 好處:1.把長域名變短; 2.跳轉頁面,跳轉網站 3.根據不同的瀏覽器出現不同的頁面 案例1.當客戶訪問192.168.4.5/a.html 時 服務端自動調轉成b.html vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name localhost; location / { root html; rewrite /a.html /b.html redirect;地址重寫 (redirect可寫可不寫;寫了起到的作用是客戶輸入a.html後會變成b.html) index index.html index.htm; } 案例2.客戶訪問你那個頁面,你只提供跳轉頁面 rewrite ^/ http://www.tmooc.cn;(直接調到tmooc首頁上) 案例3.訪問網頁指定路徑,跳轉後依然可以提供到之前的指定目錄; rewrite ^/(.*) http://www.jd.com/$1; 四.nginx作web服務器提供電腦版網頁和手機版網頁實現web頁面的跳轉 1.先創建兩套網頁,一套是電腦版的一套手機版的; 模擬實驗 cd /usr/local/nginx/html/ echo 電腦版 > test.html mkdir shouji echo 手機版 > shouji/test.html 2.修改nginx配置文件 server { listen 80; server_name localhost; location / { root html; index index.html; } if ($http_user_agent ~* curl) { rewrite ^/(.*) /shouji/$1; } } 3.客戶端驗證 curl http://192.168.4.5/test.html (僞裝成curl 格式瀏覽器) curl -A “Windows 10” 地址 僞裝成其他瀏覽器 ---------------------------------------------------------------------------------------------------------- 備註:rewrite 後跟選項的語法使用 break 完成當前的規則集,不再處理rewrite指令 --------------------------------------------------------------------------------------------------------- 五.Nginx常見問題及優化方案 1.版本號:(客戶端默認可以直接看到,不利於安全,會被利用版本漏洞***,因此需隱藏) 修改nginx配置文件:(在http下面添加) http{ server_tokens off; (不顯示nginx版本號) } 2.併發量:軟件默認最大併發量爲1024(企業需求高於1024,需手動修改) 模擬併發量: ab -c 500 -n 500 http://192.168.4.5/ (不會報錯) ab -c 1025 -n 1025 http://192.168.4.5/ (報錯超過併發量) 解決方案:(兩步走,修改nginx配置文件和內核策略) a.修改nginx配置文件: worker_processes 2;(第3行;進程數,根據實際cpu數量設置) worker_connections 65535; (第13行;將值修改爲65535) b.修改內核限制:(默認最多打開1024個文件) ulimit -a 查看所有限制 ulimit -Hn 100000 (H硬限制(普通用戶不可以修改,root可以修改)n最大文件數量) ulimit -Sn 100000 (S軟限制(普通用戶可以修改,root可以修改)n最大文件數量) 驗證查看: ss -ntup | grep nginx (查看實時訪問量) 以上修改內核爲臨時修改,重啓後無效;永久修改需要修改配置文件 vim /etc/security/limits.conf (在16行下面根據提示添加) * sofe nofile 100000 * hard nofile 100000 3.包頭請求信息過大,導致無法訪問(緩存不夠大,會報錯414) 每個客戶機請求內容時,服務端都會去建立一個獨立的緩存文件大小默認1k,當客戶端請求 的包頭信息過大時,就會導致無法訪問服務;修改nginx配置文件可以解決; http { client_header_buffer_size 1k; (默認包頭請求信息緩存) large_client_header_buffers 4 4k; (擴大請求包信息緩存個數和容量) } 4.在nginx服務器上進行壓縮處理,可以優化訪問流量 修改nginx的配置文件,開啓壓縮功能 http { gzip on; (開啓壓縮功能) gzip_min_length 1000; (設置最小壓縮指標,1000字節;) gzip_comp_level 4; (設置壓縮等級) gzip_types text/plain text (設置那些格式的文件可以壓縮要參考mime.types文件) 備註:(mp3 mp4 本身就是壓縮格式了) 5.在nginx服務器上修改nginx配置文件,讓用戶的瀏覽器緩存數據,可以加快訪問速度 這種方法緩存的數據,一旦更新了,用戶將不能讀取到最新網頁內容;因此,在設置時要指定 用戶只能緩存一些不經常會改變的內容,如mp3 mp4 jpg 和 多媒體文件; server { listen 80; server_name www.a.com location / { root html; index index.html; } location ~* \.(jpg|png)$ { (手動添加進去) expires 30d; (緩存時間爲30天) } 客戶端用about:cache 查看瀏覽器緩存 6.自定義報錯文件 vim /etc/local/nginx/conf/nginx.conf charset utf-8; (45行,設置識別中文字符) error_page 404 /error.html; (59行;指定404報錯時,提供報錯網頁的路徑) 寫把錯網頁,放到指定路徑下; 1.nginx 可以搭建PHP python perl這些寫的網頁 JAVA寫的網頁要用Tomcat(免費),jboss(收費),weblogic 2.java 網站要具備jdk(解釋器)和tomcat(服務器) ----------------------------------------------------------------------------------------------- 一.Tomcat軟件安裝(默認訪問端口8080) 1.解壓軟件包,將解壓出來的包移動到/usr/local/tomcat 下面;移動完成就時安裝ok; 2.查看軟件包含的文件ls /usr/local/tomcat bin 程序 conf 配置文件 logs 日誌文件 webapps 網頁內容 webapps/ROOT 網頁默認根目錄 3.啓動文件 /usr/local/tomcat/bin/startup.sh 啓動程序 /usr/local/tomcat/bin/shutdown.sh 關閉程序 4.查看服務是否啓動 netstat -antpu | grep java 查看啓動端口 8009 8080 8005 (tomcat啓動時生成隨機數) 8005端口如果未啓動需執行以下操作 mv /dev/random /dev/random.bak ls -n /dev/urandom /dev/random 二.配置tomcat(嚴格區分大小寫)虛擬主機,實現搭建多web 1.修改配置文件vim /usr/local/tomcat/conf/server.xml <Host name="www.a.com" appBase="a" unpackWARs="true" autoDeploy="true"> </Host> <Host name="www.b.com" appBase="b" unpackWARs="true" autoDeploy="true"> </Host> 2.創建網頁 配置文件可以看出a文件要放到tomcat下,結合默認網頁文件要放在ROOT下;按以下這樣創建 mkdir -p /usr/local/tomcat/{a,b}/ROOT (創建虛擬主機網頁路徑) echo aa > /usr/local/tomcat/a/ROOT/index.html (寫網頁內容) echo bb > /usr/local/tomcat/b/ROOT/index.html (寫網頁內容) 默認要放到ROOT的條件可以手動修改,需要把下面這條命令發到<Host>和</Host>中間 <Context path="" docBase="base" reloadable="true" /> 這樣修改後,就是把網 頁放到a/base文件加下 3.重啓服務,先關閉,在開啓; 三.實現路徑跳轉 當瀏覽器輸入www.a.com/test時,網站把頁面從/var/www/html/下提供 <Context path="/test" docBase="/var/www/html" reloadable="true" /> 四.作加密網站https (一旦開放了8443端口,所有的網站都可以作) 1. keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore (生成密鑰) #gen 生成密鑰 #alias 別名 #keyalg 算法 #keystore 密鑰存放位置 2.修改主配置文件,把生成的密鑰添加進去;(大概修改84行)先取消註釋"<!--""-->",只有最後 一行需要自己添加; <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 85 maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 86 clientAuth="false" sslProtocol="TLS" keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" /> 3.重啓服務 /usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh 4.客戶端驗證,需特別指出訪問8443端口,因爲配置文件中開放的安全端口爲8443 https ://www.a.com:8443 五.Tomcat優化 1.併發量優化 修改配置文件vim /usr/local/tomcat/conf/server.xml (大概60行) 添加以下內容 <Connector port="8080" protocol="HTTP/1.1" maxThreads="1000" 最大線程數 minSpareThreads="100" maxSpareThreads="1000" enableLookups="false" URIEncoding="utf-8" acceptCount="1000" 最大排隊數 一.memcached數據庫(基於內存的儲存方式;默認端口11211) 1.裝包yum -y install memcached telnet (telnet是一款遠程訪問工具,mem軟件無客戶端,所以需安裝telnet連接服務器) 2.啓服務:systemctl restart memcached.server 查看端口是否啓用:netstat -antpu | grep mem 3.查看配置文件(默認不需要修改):vim /etc/sysconfig/memcached 4.連接數據庫驗證是否可用:telnet 127.0.0.1 11211 (測試環境使用的工具) set name 0 180 3 添加一個數據 (即可以新建又可以覆蓋) get name 查看添加的數據 #0代表數據不壓縮 #180數據在內存裏只存180秒 #3代表存3個字符的數據 add name 0 180 3 (add只能添加新的變量) replace name 0 180 3 (只能替換變量) append name 0 180 4 (在原來的數據上追加4個字符) delete name (刪除數據) flush_all 清除所有 stats 統計查看狀態操作 5.安裝php和數據庫關聯的軟件 正常情況下,數據庫要和php腳本關聯起來,php軟件包並不具備關聯功能,需要手動安裝; 軟件包可以通過搜索查看:yum list | grep memcached yum -y install php-pecl-memcache (安裝可以關聯mem數據庫的軟件) 開啓次服務systemctl restart php-fpm 6.之前做過nginx的動靜分離,現在可以直接放一個php的頁面到html下面直接訪問; 一.基於java的web集羣指定共用數據庫 1.這個環境需要在兩個web服務器上配置,先cp軟件 需要先安裝一個jave關聯memcached的軟件,這個軟件只需要在lnmp中cp相應文件即可實現; cd lnmp_soft/session cp *jar /usr/local/tomcat/lib (關聯軟件的相關包) cp context.xml /usr/local/tomcat/conf/ (配置文件) 2.修改配置文件vim /usr/local/tomcat/conf/context.xml 只需要修改36行的配置,寫入我們web集羣共用的memcached數據庫的ip地址 3.重啓web服務;啓動數據庫 一.redis數據庫:基於內存,持久化儲存,數據類型更多;安全,儲存重要數據; 1.裝包:cd lnmp 解壓redis軟件包,cd到redis軟件包中, 注意不用./configure 直接先安裝一個編譯軟件gcc 然後直接mkae && make install 安裝完成後還需要最後一步,cd到redis軟件包中的utils文件中,執行腳本 install_server.sh 這個腳本會幫我們配置配置文件;到這裏數據庫就安裝完成了 還可以輸入:redis-benchmark 來檢測數據庫性能 ascll 2.啓動數據庫: /etc/init.d/redis_6379 start | stop | restart 3.相關程序 服務器程序:redis-server 客戶端程序:redis-cli 3.列表 -1永不過期 -2已經過期 ------------------------------------------------------------------------------------------------------------------------------ 4.主從 (實時同步) 主 1.修改配置文件 397 requirepass 123456 2.用redis-cli -a 123456訪問 3.43 $CLIEXEC -p $REDISPORT -a 123456 shutdown 4./etc/init.d/redis_6379 restart 從 1.211 slaveof 192.168.2.100 6379 2.218 masterauth 123456 驗證 主 set nb 123 從 get nb 123 RPM包 源碼----->RPM 1.什麼是RPM包? 1).壓縮包(源碼安裝後的目錄) 2).RPM包含一些描述信息 1.裝包yum -y install rpm-build rpmbuild -ba xx.spec(報錯,主要用這條命令來創建下面着6個目錄) rpmbuild/ BUILD BUILDROOT RPMS SOURCES SPECS SRPMS #SOURCES:存放源碼包的目錄 #SPECS:配置文件(基本信息,把源碼安裝過程寫到這個配置文件) #BUILDROOT:假根(對rpmbuild這款軟件來說) #RPMS: 成品的位置,rpm包 2.拷貝一個源碼包到SOURCES下 Name:nginx Version:1.8.0 Release:180 Summary:This is a Web Server License:GPL URL:www.sdas Source0:nginx-1.8.0.tar.gz2 %description adksadkaldjkfsfklsfjlkfsakjlkfsklwe %build ./configure --with-http_ssl_module %files %doc /usr/local/nginx/* 3.安裝yum -y install gcc pcre-devel openssl-devel 4. cd rpmbuild/SPECS/ rpm-ba nginx.spec 一.SVN:版本控制軟件(默認端口3690)(subversion) 版本控制的核心:服務器--共享目錄 所有數據都有備份 file:///abc/本地訪問 svn://192.168.4.5/abc 遠程訪問 1.裝包yum -y install subversion 2.創建mkdir /var/svn 共享目錄框架,此目錄不是真實共享目錄 3.創建真實共享目錄:svnadmin create /var/svn/project1 4.導入想要共享的內容:svn import . file:///var/svn/project1/ -m "註釋" 導入的數據不是明文顯示的,cd到目錄是無法看到的 5.本地使用這個命令查看:svn list file:///var/svn/project1 6. vim svnserve.conf 19 anon-access = none (匿名訪問不給任何權限) 20 auth-access = write (認證訪問給讀的權限) 27 password-db = passwd (指定密碼文件爲passwd稍後要修改) 34 authz-db = authz (指定控制權限的文件,稍後要修改) 7.vim passwd tom = 123456 harry = 123456 8.vim authz [/] tom = rw harry = rw 9.啓動服務(兩種方法) 方法一:svnserve -d -r /var/svn/project/ (指定共享目錄發佈,-d的意思是放後臺) 方法二:systemctl start svnserver (把所有的共享目錄都發布出去) 10.驗證 客戶端:svn co --username tom --password 123456 svn://192.168.2.100/ code co(checkout)下載,從svn://192.168.2.100/下載共享目錄,並且自動放到本地code目錄(該目錄會自動創建) 11.cd到code 客戶端任意修改一個文件,再上傳文件 命令:svn ci -m "註釋" (ci是上傳 ,這個上傳會自動識別那個文件改變了,只把改變的文件上傳上去) 12.如果服務器上的文件有被更新,客戶端可以通過:svn update 命令實現更新自己的本地 13.可以同過以下命令查看vsn的文件更新log; svn log svn://192.168.2.100 svn info svn://192.168.2.100 14.客戶端自己新建文件後通過以下上傳到svn服務器 vim 11.sh (直接創建,不受svn管理) svn add 11.sh (給到svn管理) svn ci -m "註釋" (上傳文件) 15.客戶端實現新建目錄,重命名,複製操作; svn mkdir abc svn mv 11.sh 22.sh svn cp xx.sh zz.sh svn rm zz.sh svn ci -m "註釋" 最後上傳文件 16.對比本地和服務器的差別 svn diff svn diff 文件名 svn cat svn://192.168.2.100/wenjian 17.數據還原: 1)本地修改了一個文件,但未提交 svn revert 11.txt 2)本地修改了,而且也提交了[6] svn merge -r6:5 11.txt 3)本地修改了,而且也提交了(第二種) svn -r5 co svn://192.168.1.100 code2 18.多人協同 1)修改不同的文件 互不影響,最後各自更新各自的 2)修改相同文件的不同行; 先上傳的不受影響,後上傳的提示過期,要svn update,這個時後文件會自動和並,然後在上傳服務; 3)修改相同文件的相同行 會產生衝突,需人員協同;,修改後的文件會生成多個版本,協商後把多於的刪除,然後提交服務器 19.備份服務器 svnadmin dump /var/snv/project1/ > my.bak 20.還原服務器 svnadmin load /var/snv/project2/ < my.bak 命令+shell語法格式 python【數據分析,網站,電影,書】 win python linux python 調用模塊【積木】 Linux python-startup=a.sh python ftp://172.40.50.118/share/autotab.sh python[空格或tab是必需] if 3>2: python【模塊】 (功能)a.py shell[模塊] python[模塊{10功能}] import os os.chmod('ttt.py',777) os.chmod('/root/abc.txt',0777) i=12344334 i=0232 i=0x33 i=ob1010 i=1.3 i=9999999999999999999999999999 i="abc" i='abc' i='''abc''' 變量賦值: 1.數字 ab=1 ab=99999999999999999999 ab=3.333 ab=0777 (8進制) ab=0xff (16) ab=0b010101 (2) 2.字符 ab="abc" ab='ab' ab='''abcc''' a[1] a[1:-1] a[:4] a[4:] print a+b print a*20 3.變量可以是列表 a=['tom',122,'test',34] a[0] 提取a列表中的第0個值 a[1] a[:3] 提取a列表中的第0到第2值(3-1=2) a[3:] tom in a 判斷tom是否在a變量中 'nihao' in a 判斷nihao是否在a變量中 a.append('xxx') 向列表a中追加值 a.remove(122) 從列表a中刪除122的值 4.變量可以是元組,不可修改的列表 ab=('tom',22,'hehe') ab[0] ab[1] 'tom' in ab 判斷tom是否在ab變量中 5.字典 toms={'name':'tom','age':22,'sex':'male'} 注意事項:字串一定需要【引號】 toms #提取所有的值 toms['name'] #提取toms字典中name的值 toms['age']=18 #修改toms字典中age的值 toms['qq']=1111 #新建toms字典中qq以及它的值 == != >= <= > < 案例: 1.讀取用戶輸入信息,賦值給變量 user=raw_input("提示:") passwd=raw_input("提示:") 2.判斷: 如果用戶名是bob,密碼是123456,則提示成功 否則提示失敗 提示:#coding:utf-8 提示:and邏輯並且,相當於shell【&&】 if 判斷1 and 判斷2 #!/usr/bin/python #coding:utf-8 user=raw_input("請輸入用戶名:") passwd=raw_input("請輸入用密碼:") if user=='bob' and passwd=='123456': print "成功" else: print "失敗" score=raw_input("請輸入成績:") if score > 90: print "A" elif score > 80: print "B" elif score > 70: vim a.py import random num=random.randint(1,100) if 判斷: 指令 if 判斷: 指令 else: 指令 1. i=11 j=22 print "iam %d,she is %d" %(i,j) (%d 佔位符,佔位數字) 2.i=tom 3.while True: 死循環 4.range(1,10) 產生1-9的列表[1,2,3,4,5,6,7,8,9],不包含10 range(10) 產生0-9的列表 5.[50 for i in range(10)] 產生10個50 [50, 50, 50, 50, 50, 50, 50, 50, 50, 50] [i for i in range(10)] 產生0-9 6.["192.168.4.%d" %i for i in range(1,255)]產生4的所有網段 7.python 文件的讀寫 data=open('/etc/passwd') 設置變量 data.readline() 讀一行 data.readline()再讀一行 data.read() 讀整個文本 data.seek(0) 移動光標到首行 data.close() 關閉文件(帶保存功能) data=open('/root/new.txt','w') 新建一個文件 data.writelines('wqdadadw\n') 寫入內容(\n表示回車) data.flush() 保存文件 8.python 定義函數 def 函數名(): 命令 ------------ 函數名() 調用函數 -------------- #!/usr/bin/python #coding:utf-8 def jsq(x,y): (形參) print 'x+y=',x+y print 'x*y=',x*y print 'x-y=',x-y jsq(2,3) (實參) jsq(2,4) ---------------------------------- #!/usr/bin/python #coding:utf-8 def jsq(x=2,y=3): (默認參數)如果有實際參數,按實際參數處理 print 'x+y=',x+y print 'x*y=',x*y print 'x-y=',x-y jsq() jsq(2,4) 9.位置參數 import sys (調用模塊) print sys.argv[0] print sys.argv[1] print sys.argv[2] print sys.argv 10.模塊 import 模塊1,模塊2,模塊3 (可以同時導入多個模塊) --------------------------------------------------------------- from test import star (只調用模塊中的一個參數) star() 調用函數 --------------------------------------------------------- import test 調用模塊 test.star() 使用函數 1.定義報錯 try: x=int(raw_input("請輸入一個數字:")) print 10/x except ZeroDivisionError: (出現錯誤時輸出以下) print "請不要輸入0" else: (未出錯時,輸出以下) print "ok" finally: (不論是否出錯,都輸出以下) print 'game over' 2. with open('/etc/hosts') as x: (用with讀文件後,文加會自動關閉保存) ... x.readline() 3.raise語句;自定義生成報錯,可以把正確輸出也報錯; try: x=int(raw_input("請輸入1-100:")) if x>100: raise ValueError,"你的值超出了範圍" except ValueError,e: print "Error:",e 4.assert,自定義報錯語句;它是反着來的 try: x=int(raw_input("請輸入1-100數字:")) assert x<100,"你的數字太大" ##如果你輸入的數字大於100則,報錯 except AssertionError,e: print "Error:",e --------------------------------------------------------------------------------------------------------------------------------- 1.正則匹配 正則表達式 m=re.match('the','hello the world') 從開始匹配,在數據中找the 找到返回Match,否則返回None m.group() #查看找到的匹配值 m=re.search('the','hello the world') 在整個數據的任意位置中找the,僅找第一個匹配 找到返回Match,否則返回None m.group() #查看找到的匹配值 m=re.findall('the','hello the a the world') 在整個數據的任意位置中找the,找全部的匹配 找到返回Match,否則返回None m.group() #查看找到的匹配值 ----------------------------------------- x={'qq':444,'age':23} 定義字典 x.get('qq',8)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章