作業系統篇之Linux命令操作和redis安裝以及基本使用

  • 2019 年 10 月 5 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/zhao1299002788/article/details/100185441

電腦作業系統 : windows7,8,10,xp,win98  			作業系統 : linux ax unix  		以後開發項目是部署在伺服器上,伺服器一般採用linux.  		linux的優點:系統穩定,操作速度快,系統安全..  		linux可以部署 : 資料庫 tomcat 快取(redis).....  	1.如果安裝虛擬機,必須把金山毒霸,360防護退出(禁用vmware程式)    	指令:  		通用語法:  			命令後面不接 ./  或者  ../  表示是當前目錄.  			./ 表示當前目錄  			../表示上一層目錄  			/表示根目錄    			clear清屏    	磁碟管理:  		ls list 顯示目錄下的數據:  			-l : 詳細列別  			-r : 反序  			-t : 日期  			需要記住的是 ll  			ll -a  			-a : 表示所有文件都顯示.  		cd change 切換目錄:  			路徑滿足通用語法.  			~ 表示 : 當前用戶的目錄,cd~回到用戶目錄 cd 跟 cd~一樣.  			cd - : 回調剛才所在目錄.  		pwd : 顯示當前所在目錄.  		mkdir -p : 批量創建文件夾  	文件瀏覽:  		cat : 顯示所有的內容,如果內容過多,沒辦法看完.  			cat 文件名.  		more : 查詢文件的內容.  			more 文件  			空格 下一頁  			b 上一頁  			回車 一行  			q 退出  		less 查看文件內容  			less 文件  			空格 下一頁  			b 上一頁  			回車 一行  			q 退出    			 進入以後可以進行 在翻頁的時候 進行(/字元串 向下搜索,?字元串 向上搜索) ?字元串 向上搜索   /字元串 向下搜索  			參數:  				-m 百分比  				-N 行號    		tail 查看文件末尾內容:  			tail-數字 文件名 查看最後指定的條數.  			參數 -f循環讀取.  			(重要 可以動態查看文件末尾的內容,開發中往日誌里寫數據)    			此處模擬過程  			往一個文件動態循環寫數據,使用tail指令動態查看數據.  			ping 用來測試連通性.  			ping 127.0.0.1>ip.log 將ping的命令列印內容輸出到文件中去  			例如: 127.0.0.1>ip.log & : 表示後台運行  			tail -f ip.log  : 循環讀取文件ip.log裡面的內容,並顯示在控制台上    	文件操作:  		cp 複製 複製並重命名 copy  			cp 文件 路徑 表示複製  			cp 文件 路徑/新文件名稱   表示複製並重命名  			-r : 表示遞歸  		mv  move  			mv 文件 路徑 表示 移動.  			mv 文件 路徑/新文件名稱   表示移動並重命名.  			-f表示強制  		rm remove 刪除  			rm-fr 文件名 可以刪除一切  		find 查找  			find 路徑 -name 文件名稱  			find 路徑 -name '*...'  	文檔編輯:  		vi vim 命令一摸一樣  			vi 相當於txt  			vim 相當於 note++  	vim : 有三種模式  		一般模式 : 能看不能輸入內容,進入文件默認是一般默認,按i或者a或者o切換,到編輯默認 按:切換到行底模式.  		編輯模式 : 可以輸入內容 如果編寫完了,按esc表示退回到一般模式.  		行底模式 : 可以輸入 registry-zookeeper:wq  退出保存  :q! 退出不保存.  		退出,先按esc ,再按 Shift+:   ,q! 或者wq  	一般模式有特點:  		yy複製  p 粘貼  dd 刪除一行.  		nyy 複製多行 ndd刪除多行.  		gg 第一行 shift + g 最多一行.  	管道 |  		作用 : 將兩個命令合成一個命令  命令1|命令2    	grep 正則匹配 過濾  		語法 1: grep-i 過濾的字元 文件名稱  		語法 2: 命令1|grep-i 過濾的字元  需要匹配不同內容  輸出不同的值  		前面命令1的內容 作為了後面過濾的依據.        	系統命令:  		ps-ef 查看所有的進程  		以後的用法:  			ps-ef|grep-i 過濾的字元  		kill 殺死  		kill pid 終止進程  		kill-9 pid 殺死進程    		ifconfig 查看當前ip  		ping 測試連通性    	備份壓縮:  		參數不可以改變順序:  		tar -zcvf 文檔名 文件    壓縮  		tar -zxvf 文檔名			解壓縮    	關機重啟(忽略)  		重啟 reboot  		關機 halt    		shutdown -r 時間 重啟  		shutdonw -h 時間 關機    	文件許可權  		chmod 接上數字 文件  		chmod 000 刪除所有許可權  		comod 777 添加所有許可權  		一個7 表示三個許可權  		4 2 1  		r 可讀 		2的2次方  4  		w 可寫		2的1次方  2  		x 可執行    2的0次方  1    		例如:  			drwxr-xr-x. 2 root root 4096 8月 11 04:23 a : 第一個字母代表是文件夾或者文件, d代表文件夾,-代表文件  			-rw-r--r--.  : rw- 表示用戶 ; r-- 表示用戶名組 ; r-- 表示其他  			官方文檔解釋 : -rwxrw-r--  				第一位 : 文件類型(d目錄,-普通文件 ,| 鏈接文件(桌面快捷方式));  				第2-4位: 所屬用戶許可權,用u(user)表示;  				第5-7位: 所屬組許可權,用g(group)表示;  				第8-10位: 其他用戶許可權,用o(other)表示;  				第2-10位: 表示所有的許可權,用a(all)表示;  				r 可讀許可權  				w 可寫許可權  				x 可執行許可權    		修改許可權:- 表示去除許可權  			chmod u-rwx aaa.tar;表示把用戶許可權變成---  			chmod g-rwx aaa.tar;表示把用戶組許可權變成---  			chmod o-rwx aaa.tar;表示把其他用戶許可權變成---    			chmod ugo+rwx aaa.tar : 表示給這個文件加上應有許可權  			chmod 000 aaa.tar ; 表示去除文件所有許可權  			chmod 777 aaa.tar; 表示給文件加上應有許可權    	安裝過程注意事項 : 使用CRT連接不上linux,存在以下幾種情況:  		vim/etc/sysconfig/netword-scripts/ifcfg-eth0  			1 . 配置網路,自動連接勾選.  			2 . 360或金山毒霸沒關.  			3 . 本地虛擬機伺服器沒開啟.  			4 . 本地適配沒有打開.  			5 . Linux配置環境 網卡沒有開機自動啟動.    	ONBOOT = yes  : 開機自動啟動網卡  Linux環境可以按照伺服器,應用伺服器,tomcat ,需要jdk,mysql,快取redis  	統一步驟:  		1.需要上傳壓縮包.  		2.解壓.  		3.安裝.    	rpm -qa 查看.  	rpm -ivh 程式名稱 安裝.  	rpm -Uvh 程式名稱 更新.  	rpm -e 刪除  --nodeps 不刪除依賴.    	例子:  		查看系統中是否安裝有jdk : rpm -qa | grep -i jdk  		如果有就刪除jdk,刪除了以後再安裝  		rpm -e 上面查到的jdk全稱    	yum remove 聯網自動刪除數據  	yum install 聯網自動安裝數據  	cm95DvStxaqflMVE : 自動生成的秘密 每個人都不一樣    	gPKufF50DIn720ua 我的MySql秘密    	NoSql :    		NoSql 特點:  			在大數據存取上具備關係型資料庫無法比擬的性能優勢:  				1.易擴展:  					NoSql 資料庫種類繁多,但是一個共同的特點都是去掉關係資料庫的關係型特性.數據之間  					無關係,這樣就非常容易擴展.也無形之間,在架構的層面上帶來了可擴展的能力.  				2.大數據量,高性能  					NoSql 資料庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀.這得益於它的  					無關係性,資料庫的結果簡單.  				3.靈活的數據模型  					NoSql 無需事先為要存儲的數據建立欄位,隨時可以存儲自定義的數據格式.而在關係數  					據庫里,增刪欄位是一件非常麻煩的事情.如果是非常大數據量的表,增加欄位簡直就是  					一個噩夢.這點在大數據量的Web2.0時代尤其明顯.  				4.高可用  					NoSql 在不太影響性能的情況,就可以方便的實現高可用的架構.比如Cassandra,HBase  					模型,通過複製模型也能實現高可用.        		MySql 關係型資料庫 : 泛指資料庫中數據表,具有一定關係.  		Redis 非關係性資料庫 : 資料庫中數據是沒有關係(用作快取,快取伺服器)  		db4o 文件資料庫 : 數據是保存在文件中.    		短鏈接 : 打開一次連接 關閉.  		長鏈接 : 連接池 打卡一次不關閉.    		Redis : 用來存儲數據 將數據存到記憶體中 用於處理大數據.  			Redis是用C語言開發的一個開源的高性能鍵值對(key-value)資料庫.它通過提高多種鍵值數據類型來適應不同  			場景下的存儲需求,目前為止Redis支援的鍵值數據類型如下:  				1.字元串類型  2.散列類型  3.列表類型  4.集合類型  5.有序集合類型  		hibernate : 一級快取 內置快取.  		hibernate : 二級快取(需要其他配置) 使用redis替換.    		redis 安裝  			需要C的編譯環境.    		Redis的後台啟動方式:  			1.如果需要後台啟動 需要從redis配置目錄中 copy一個文件 redis.conf  			cp redis.conf /usr/local/src/redis    			2.修改配置文件  				daemonize yes(修改成yes)  				以後開發中命名有規範的,項目名稱_業務名稱_表名稱_欄位名稱_0  1  				Constant 常量池 一個項目需要有自己的常量池.  				public static final 項目名稱_業務名稱_表名稱_欄位名稱_=""    		數據結構:    			redis 是一種高級的key-value的存儲系統,其中value支援五中數據類型.  				1.字元串(String)  2.哈希(hash)  3.字元串列表(list)  				4.字元串集合(set)  5.有序字元串集合(sorted set)  				而關於key的定義呢,需要大家注意的幾點:  				1:key不要太長,最好不要超過1024個位元組,這不僅會消耗記憶體還會降低查找效率  				2.key不要太短,如果太短會降低key的可讀性.  				3.在項目中,key最好有一個統一的命名規範.    			String  				賦值 set key value    				取值 get key  					 getset key value 獲得並賦值    				刪除 del key    				其他  					遞增 incr key    					遞減 decr key    					增加多少 incrby key 數字    					減少多少 decrby key 數字    					追加 append key 拼接的字元    			Hash  				賦值:  					hset 集合名稱 欄位的名稱 欄位的值 只能賦值一個  					hmset 集合名稱 欄位的名稱 欄位的值 欄位的名稱 賦值多個  				取值  					hget 集合的名稱 欄位名稱 獲得一個欄位值  					hmget 集合的名稱 欄位名稱 [欄位名稱 欄位名稱]... 獲得指定多個欄位值  					hgetall 集合名稱 獲得所有的欄位值  				刪除  					del 集合名稱 刪除集合 通用語法(其他集合一樣可以使用)  					hdel 集合名稱 欄位名稱[....]    				其他  					增加指定數字  						hincrby 集合名稱 欄位名稱 增加的數字  					判斷集合中是否含有某個欄位  						hexists 集合 欄位  					長度  						hlen 集合  					獲得所有的key  						hkeys 集合  					獲得所有的value  						hvals 集合  					顯示集合中的key和value  						hgetall 集合    	類載入器的作用 : 將類載入到記憶體中形成class對象 , 保證虛擬機中就只有一個對象.  	三個類載入器 : 應用載入器(主要載入tomcat的jar包和自己放的一些jar包,載入自己創建的類的class文件) , 擴展載入器(載入一些特殊的jar包,如果公司需要放jar包也放在這裡面) , 引導類載入器(主要是把環境載入進來).  	應用類載入器繼承擴展類載入器繼承引導類載入器.  	載入機制 : 全盤負責機制 , 父類委託機制  	System.out.println(ClassLoaderDemo.class.getClassLoader());  	System.out.println(ClassLoaderDemo.class.getClassLoader().getParent());  	System.out.println(ClassLoaderDemo.class.getClassLoader().getParent().getParent());    	rt.jar 表示運行時 , 載入不同位置的東西.  	String parths = System.getProperty("sun.boot.class.path");  	String[] arr = parths.split(";");  	for(String string : arr) {  		System.out.println(string);  	}  	System.out.println(String.class.getClassLoader());    	public class ClassLoaderDemo {  	/*public static void main(String[] args) {  		//類載入器的作用: 將類載入到記憶體中形成class對象 保證虛擬機中就只有一個對象  		//三個類載入器 : 應用類載入器  擴展類載入器  引導類載入器(不是類 C 調用批處理 載入我們數據Class對象)  		//載入機制:全盤負責 委託機制  		//System.out.println(ClassLoaderDemo.class.getClassLoader());  		//System.out.println(ClassLoaderDemo.class.getClassLoader().getParent());  		//System.out.println(ClassLoaderDemo.class.getClassLoader().getParent().getParent());  		//System.out.println(DNSNameService.class.getClassLoader());    		//rt.jar 表示運行時  載入不同位置的東西  		String parths = System.getProperty("sun.boot.class.path");  		String [] arr = parths.split(";");    		for (String string : arr) {  			System.out.println(string);  		}  		System.out.println(String.class.getClassLoader());    	}*/  	/*public static void main(String[] args) {  		//類載入器的作用: 將類載入到記憶體中形成class對象 保證虛擬機中就只有一個對象  		//三個類載入器 : 應用類載入器  擴展類載入器  引導類載入器(不是類 C 調用批處理 載入我們數據Class對象)  		//載入機制:全盤負責 委託機制  		//System.out.println(ClassLoaderDemo.class.getClassLoader());  		//System.out.println(ClassLoaderDemo.class.getClassLoader().getParent());  		//System.out.println(ClassLoaderDemo.class.getClassLoader().getParent().getParent());  		//System.out.println(DNSNameService.class.getClassLoader());    		//rt.jar 表示運行時  載入不同位置的東西  		String parths = System.getProperty("java.ext.dirs");  		String [] arr = parths.split(";");    		for (String string : arr) {  			System.out.println(string);  		}  		//擴展類載入器 一般公司使用  		System.out.println(DNSNameService.class.getClassLoader());    	}*/      	public static void main(String[] args) {  		//類載入器的作用: 將類載入到記憶體中形成class對象 保證虛擬機中就只有一個對象  		//三個類載入器 : 應用類載入器  擴展類載入器  引導類載入器(不是類 C 調用批處理 載入我們數據Class對象)  		//載入機制:全盤負責 委託機制  		//System.out.println(ClassLoaderDemo.class.getClassLoader());  		//System.out.println(ClassLoaderDemo.class.getClassLoader().getParent());  		//System.out.println(ClassLoaderDemo.class.getClassLoader().getParent().getParent());  		//System.out.println(DNSNameService.class.getClassLoader());    		//rt.jar 表示運行時  載入不同位置的東西  		String parths = System.getProperty("java.class.path");  		String [] arr = parths.split(";");    		for (String string : arr) {  			System.out.println(string);  		}  		//應用載入器  負責載入tomcat的路徑jar 還有下面兩個  		//E:Usershzbworkspaceee66_day48buildclasses  		//E:Usershzbworkspaceee66_day48WebContentWEB-INFlibjedis-2.7.0.jar  		System.out.println(ClassLoaderDemo.class.getClassLoader());    	}  }  List  		賦值:lpush key value1[value2......] 從鏈表的左邊添加  如果key不存在就創建  			 rpush key value1[value2......] 從鏈表的右邊添加  如果key不存在就創建  		取值  			lrange key start end  查詢數據 start表示開始索引 end表示結束索引 默認情況.  			end 可以為負數 負數表示 從右邊開始數  		刪除  			lpop key 從左邊彈出  			rpop key 從右邊彈出  		其他  			llen key 集合長度大小  			lpushx key value1  添加鏈表的左邊 如果key不存在 不會進行創建  			rpushx key value1  添加鏈表的右邊 如果key不存在 不會進行創建  			lrem key count value  刪除集合中多少個元素  				count > 0 從左往右刪除count個  				count = 0 刪除所有指定的value值  				count < 0 從右往左刪除count個  			lset key index value  設置索引值為index 的value值  			linsert key before | after 指定的元素 添加的值 在指定元素前後添加值  			rpoplpush 集合1 集合2  將集合 1 的右邊彈出  添加到集合 2 的左邊  (隊列 先進先出)    	Set  		賦值 :  			sadd key value [value...]  添加  		取值 :  			smembers key 獲得集合的成員  		刪除  			srem key value [value...]  刪除指定的成員    		其他  			sismember key member  判斷集合中是否存在這個成員  		集合的運算  			差集  將集合 1 減去集合 2 剩下的是集合 1 的元素.  				sdiff key1 key2  			交集  取兩個集合共有的一部分元素  				sinter key1 key2  			並集  取兩個集合所有的元素 但需要去重  				sunion key1 key2    		集合的運算並存儲  			差集  將集合 1 減去集合 2 剩下的是集合 1 的元素  將結果存到newkey中  				sdiffstore newkey key1 key2  			交集  取兩個集合共有的一部分元素  將結果存到newkey中  				sinterstore newkey key1 key2  			並集 取兩個集合所有的元素  但需要去重  將結果存到newkey中  				sunionstore newkey key1 key2  			scard key  查看集合中多少個成員  			srandmember key 隨機返回一個成員    	Sortset  		賦值 :  			zadd key sore1 member1 sore2 member2 ...  		取值 :  			zrange key start end [withscores]  返回指定返回的數據  默認升序  			start 表示開始索引  end表示結束索引  默認情況  								  end 可以為負數  負數表示  從右邊開始數  			zrevrange key start end [withscores] 返回指定返回的數據  降序  		刪除  			zrem key member  		其他  			zscore key member  返回對應成員的分數  			zcard key 返回集合的長度  		刪除一定返回內的數據 按照排名  			zremrangebyrank key start end    		刪除一定返回內的數據 start end  			zremrangebyscore key minscore maxscore    		按照分數查詢一定返回內的數據  			zrangebyscore key minscore maxscore [withscores] [limit startindex pagesize]    		給指定成員添加分數  			zincrby key 分數 value 值  		獲得區間分數內的個數  			zcount key minscore maxscore    		返回成員在排名的中的位置  			zrank key value 升序  			zrevrank key value  降序    		通用操作  			keys * 表示查看所有的key ?  表示佔位符  			Del key 刪除指定的key  			Exists key 查看key是否存在  			Rename key  newKey 修改名稱  			Type key 查看類型    			Expire key 設置過期時間  			Ttl 查看過期時間  				-2 已結失效  				-1 永不失效  				>0 還有多少秒之後失效    	Jedis  		Jedis java 中訪問redis 環境 操作命令對象 如果需要在java環境中使用redis 必須導入jar包  			commons-pool-2.3.jar  			jedis-2.7.0.jar    		jedis 操作:  			public static void main(String[] args) {  				//創建redis對象 java表示的是jedis對象    				Jedis jedis = new Jedis("192.168.40.199",6379);  				String nickname = jedis.get("nickname");  				System.out.println(nickname);  				//重寫設置  				jedis.set("nickname","吉吉");//以後設置都是json字元串  				nickname = jedis.get("nickname");  				System.out.println(nickname);  				jedis.close();    			}    		Jedis 連接池:  			public static void main(String[] args) {  				//需要增加配置  				JedisPoolConfig poolConfig = new JedisPoolConfig();    				//設置其他配置  				//最小空閑數 (例如在訪問資料庫高分期的時候,會創建很多連接給予使用,當連接池連接數量用完了以後,會繼續產生連接,保證連接池有三個空閑連接,以備不時只需)  				poolConfig.setMinIdle(3);  				//最大空閑數 (例如在訪問資料庫低分期的時候,連接池會有很多閑置的連接,這時會保證閑置連接不能超過30個,如果超過去30個,超過的會銷毀)  				poolConfig.setMaxIdle(30);  				//獲得連接池  				JedisPool jedisPool = new JedisPool(poolConfig,"192.168.40.199",6379);  				//通過連接池 可以獲得jedis對象  				Jedis jedis = jedisPool.getResource();    				String nickname = jedis.get("nickname");  				System.out.println(nickname);  				jedis.close();    			}    	1.8Redis特性  		1.8.1多資料庫概念  		默認情況下 我們操作時操作第一個    		Select 索引 選擇資料庫  		Move key 索引 將key 移動到對應的資料庫下    		退出 quit exit ctrl + c  		Dbsize key的數量  		Info 資訊    		Flushdb 刪除當前資料庫的所有key  		Flushall 刪除所有資料庫的key      		1.8.2消息訂閱和發布  		Subscribe  頻道名稱   表示 訂閱某個頻道  		Psubscribe  頻道名稱 表示訂閱多個頻道  		Publish 頻道名稱 內容  往頻道內發布內容        	1.8.3事務(批量處理)  		Multi 開啟事務  		Exec 提交  		Discard 回滾事務    		提交事務時 如果中間報錯  不會回滾 繼續操作  		1.9持久化  		Redis的數據是在記憶體中 持久化就是將數據保存在磁碟上(序列化 鈍化)  		Redis中提供了兩種持久化機制 : 將數據持久化起來    			為什麼要有資料庫? 資料庫能保存數據  			RDB : 快照 redis默認機制 我們不處理  				優點:恢復速度快  				缺點:存在資料庫丟失情況  			AOF : 記錄日誌  將命令行保存起來  				優點:不存在數據丟失  				缺點:恢復速度太慢  			如果想要使用AOF 需要手動配置  			檢查AOF機制是否存在  		1.配置AOF  		2.打開客戶端 進行操作數據  		3.清空資料庫  		4.將redis 伺服器執行緒關閉(看日誌文件  修改日誌文件)  		5.啟動redis 看數據是否能恢復    		如果需要修改修改埠號進行對外開放進入:vim /etc/sysconfig/iptables  		重新啟動伺服器 : service iptables restart    				進入redis安裝目錄下  				cd /usr/local/redis  				/usr/local/src/redis install  				進入bin目錄下的批處理進行登錄  				./bin/redis-cli  				./redis-server ../redis.conf    	9.進入redis目錄  			cd /root/baidu/redis/redis-3.0.0  			10.將redis下的conf文件拷貝到redis下  			cp redis.conf /usr/local/redis    			11.進入redis的bin目錄下  			cd /usr/local/src/redis/bin  			12.啟動  			./redis-server ../redis.conf        			後端啟動  			vim /usr/local/redis/redis.conf  			1.找到一下程式碼 修改成yes  			daemonize no  ==>>daemonize yes    			2.啟動時,指定配置文件  			cd /usr/local/redis/  			./bin/redis-server ./redis.conf