❶ 以免霸屏的指令是什麼
為什麼要學習linux,因為Linux很多都是開源免費的,並且Linux是非常穩定的,我們開發出來的項緩伍目一般都是在伺服器中的,我們操作伺服器中的程序有兩種方式,要麼你就去伺服器跟前,這種明顯是不現實的,所以在實際情況中我們都是在電腦安裝一個遠程登陸軟體,通過這個軟體來連接遠程的伺服器,這樣我們就可以在本地的電腦操作遠程伺服器了;Linux就提供了一種可靠的遠程連接方式;
Linux的特點:免費,開源,多用戶(同一時刻可以多個用戶同時登陸和執行同一個Linux系統),多任務;
Linux的安裝
安裝
1.安裝VMWare: 下載對應的軟體,一直下一步就行;
2.安裝centOS鏡像:
①點擊創建新的虛擬機
②然後按照虛擬機向導安裝鏡像,注意選擇自己安裝對應的鏡像版本
③在CD/DVD的配置項中配置鏡像的路徑;(內存可以根據自己需求設置)
然後一直下一步就行;
④第一次啟動的時候比較慢,因為需要安裝一些東西;然後按照需求配置自己需要的就行;
不過設置的root密碼要記住!第一次安裝完成後需要重新啟動!!!
⑤配置網卡驅動:
然後重新啟動!
然後再使用 ip addr 查看ip地址是否可以顯示了;
使用finalshell連接虛擬機
⑥使用遠程連接軟體連接本地的Linux來進行操作;
這里我們使用finalshell,自己下載安裝這個finalshell就行;
下面我們來演示一下如何使用finalshell來連接這個Linux: 要先知道我們要連接的伺服器(Linux或者是雲伺服器的IP地址)的ip地址才能去連接;
點擊最左上角的文件夾圖形,然後點擊左邊白色的文件夾,會彈窗出:然後點擊SSH連接
出現下面的窗口:這個主機要豎宏寫你要連接的伺服器的ip地址,這里我們填自己這個虛擬機的ip地址就行(在本機的虛擬機使用 ip addr 查看自己的虛擬機的IP地址);
了解一下Linux的目錄結構(不需要記憶)
java中流傳一句話:萬物皆對象!在Linux中同樣流傳一句話:萬物皆文件!
Linux中常用的命令(重點)
Linux命令初體驗--幾個常用命令
序號 命令 對應英文 作用
1 ls list 查看當前目錄下的內容
2 pwd print work directory 查看當前目錄所在目錄
3 cd 目錄名 change directory 切換目錄
4 touch 文件名 touch 如果文件不存在,就新創建文件
5 mkdir 目錄名 make directory 創建目錄
6 rm 文件名 remove 刪除指定文件
注意事項:
在執行Linux命令的時候,提示信息如果顯示為亂碼,這是由於編碼問題導致的,只需要修改Linux的編碼就行即可,命令如下:
下面命名表示:把'LANG="en_UTF-8"'追加到後面的文件中
echo 'LANG="en_UTF-8"' >> /etc/profile
source /etc/profile #重新載入配置文件,新添進去的配置才可以生效
登錄後復制
使用Linux的一些小技巧:非常使用,和經常使用得到;
tab鍵自動補全
連續兩次Tab鍵,給出操作提示
使用上下箭頭快速調出曾經使用過的命令
使用clear命令或者是ctrl+l 實現快速清屏
Linux命令格式
command [-options][parameter]
登錄後復制
說明:
command:命令名
[-options]:選項,可以用來對命令進行控制,也可以進行省略
[parameter]:傳給命令的參數,可以是零個,一個或者是多個
注意:[] 代表可選
命令名 ,選項 ,參數之間使用空格進行分隔
案例演示: 使用 ls 與 使用 ls -l 的區別
paramter是多個的時候:比如同時創建多個文件
強制刪除文件:
強制刪除一個文件:rm -f 文件名1
強制刪除一批文件:rm -f 文件名1 文件名2 文件名3
顯示指定目錄下的內容 ls和ll
作用:顯示指定目錄下的內容
語法:ls [-al] [dir]
說明:
-a 顯示所有文件及目錄 (.開頭的隱藏文件也會列出, 在Linux中隱藏文件是以.開頭的)
-l 除文件名稱外,同時將文件類型(d表示目錄,-表示文件),許可權,擁有者,文余哪冊件大小等信息詳細列出
注意:由於我們使用ls命令是經常需要加入 -l 選項, 所以Linux為ls -l 提供了一種簡單的書寫方式, 即 ll
如果不指定特定的dir,那麼展示的就是root目錄下的所有文件;
如果指定了dir,那麼展示的就是指定dir目錄下的所有文件:ls -al /etc
簡寫: 把ls -al 進行了合並,變成了 ll
切換目錄: cd
作用:用於切換當前工作目錄,即進入指定目錄;
語法:cd [dirName]
特殊說明:
~表示當前用戶的home目錄 不同用戶的home目錄可能不同,比如Linux中的root用戶的home目錄就是 /root
.表示目前所在的目錄
..表示目前位置的上級目錄 (用得比較頻繁)
舉例:
cd .. 切換到當前目錄的上級目錄
cd ~ 切換到用的home目錄
cd /usr/local 切換到/usr/local目錄
cd usr 進入到usr目錄
顯示文件內容:cat
作用:用於顯示文件內容
語法: cat [-n] filaName
說明: -n 由1開始對所有輸出行數編號
舉例:cat /etc/profile 查看/etc目錄下的profile文件內容
不使用-n:
使用-n:
分頁查看文件:more
作用:以分頁的形式顯示文件內容, 使用場景,當查看的文件的內容比較多的時候,就可以使用more命令來查看,這樣更加方便
語法:more fileNeme
操作說明:
回車鍵 向下滾動一行
空格鍵 向下滾動一屏
b 返回上一屏
q或者是Ctrl + c 退出more
舉例:在根目錄下使用命令 more /etc/profile
查看文件末尾:tail
作用:查看文件末尾的內容
語法:tail [-f] fileName
說明:動態的讀取文件末尾內容並顯示,通過用於日誌文件的內容的輸出
舉例:
tail /etc/profile 顯示/etc目錄下的profile文件末尾10行的內容(這個10是默認的)
tail -20 /etc/profile 顯示/etc目錄下的profile文件末尾20行的內容
tail -f /ydl/my.log 動態的讀取 /ydl目錄下的my.log文件末尾內容並顯示, 這個命令會讓當前Linux窗口處於霸屏的狀態,使用Ctrl + C 就可以停止;
創建目錄:mkdir
作用:創建目錄
語法:mkdir [-p] dirName
說明:
-p: 確保目錄名稱是存在的,不存在就創建一個。通過此選項,可以實現多層目錄同時創建
(p代表parent)
舉例:
mkdir it在當前目錄下,創建一個名為it的子目錄
mkdir -p it/javaTest 在工作的目錄下的it目錄中建立一個名為test的目錄,若it目錄不存在,則創建一個
刪除目錄:rmdir
作用:刪除空目錄
語法:rmdir [-p] dirName
說明:
-p : 當子目錄被刪除後使父目錄為空目錄的話,則一並刪除
舉例:
rmdir it 刪除為it的空目錄
rmdir -p it/java 刪除it目錄中名為Java的子目錄,若java目錄刪除後it目錄變為空目錄,則it目錄也會被刪除
rmdir it* 刪除以it開頭的空目錄
刪除不為空的文件或目錄 rm
作用:刪除文件或者目錄
語法:rm [-rf] name
說明:
-r : 將目錄及目錄中的所有文件(目錄)逐一刪除,即遞歸刪除
-f : 無需確認,直接刪除
舉例:
rm -r it/ 刪除名為it的目錄和目錄中的所有文件,刪除前需要確定
rm -rf it/ 無需確認,直接刪除名為it的目錄和目錄中所有文件
rm -rf hello.txt 無需確認,直接刪除hello.txt文件 (這個刪除文件的命令可以不用帶r)
拷貝移動命令cp
作用:用於復制文件或者是目錄
語法:cp [-r] source target
說明:
-r : 如果復制的是目錄需要使用到此項,此時將復制該目錄下所有的子目錄和文件
舉例:
cp hello.txt it/ 將hello.txt復制到it目錄中
cp hello.txt ./hi.txt 將hello.txt復制到當前目錄,並改名為hi.txt
cp -r it/ itjava/ 將it目錄和目錄下的所有文件復制到itjava目錄下
cp -r it/* itjava/ 將it目錄下所有文件復制到itjava目錄下(目錄這一層不復制,只復制目錄下的內容)
移動拷貝mv
作用:為文件或者是目錄進行改名,或將文件或目錄移動到其他位置
語法:mv source dest
舉例:
mv hello.txt hi.txt 將hello.txt改名為hi.txt
mv hi.txt it/ 將文件hi.txt移動到it目錄中
mv hi.txt it/hello.txt 將hi.txt移動到it目錄中,並且改名為hello.txt
mv it/ itjava/ 如果itjava目錄不存在,將it目錄改名為itjava
mv it/ itjava/ 如果itjava目錄存在,將it目錄移動到itjava目錄中
打包壓縮命令 tar
作用:對文件進行打包,解包,壓縮,解壓
語法:tar [-zcxvf] filaName[files]
包文件後綴為 .tar 表示只完成了打包,並沒有壓縮
包文件後綴為 .tar.gz 表示打包同時還進行了壓縮
說明:
-z : z代表的是gzip , 通過gzip命令處理文件,gzip可以對文件壓縮或者是解壓
-c : c代表的是create, 即創建新的文件包 (打包)
-x : x代表的是extract,實現從包文件還原文件 (解包)
-v : v代表的是verbose,顯示命令執行的過程
-f : f代表的是file,用於指定包文件的名稱
如果不想把解壓的文件包的內容放到當前目錄, 加 -c /要存放的目錄
第一個常用組合: -cvf
第二個常用組合:-zcvf
第三個常用組合: -xvf 解壓包
第四個常用組合:-zxvf (非常常用)
文本編輯命令vi/vim
作用:vi命令是Linux系統提供的一個文本編輯工具,可以對文件內容進行編輯,類似與windows的記事本;
語法:vi fileName
文本編輯命令vim:
作用:對文件內容進行編輯,vim其實就是一個文本編輯器;
語法:vim fileName
說明:
1.在使用vim進行編輯文件的時候,如果指定的文件存在則直接打開此文件。如果指定的文件不存在則新建文件
2.vim在進行文本編輯的時候一共分為三種模式,分別是命令模式(command mode),插入模式(insert mode)和底行模式(last line mode)。這三種模式之間可以相互切換。我們在使用vim命令的時一定要注意我們當前所處的是哪一種模式;
對於這三種模式的一些說明:
注意:命令模式下,這個gg表示的是快速將游標移動到文件開頭, 這個G表示的是快速將游標移動到文件末尾;
下面的插入模式和底行模式,是不能直接進行轉換的,都需要先進入到命令模式然後才能進行模式轉換;
注意:必須要進入底行模式才能進行文件的保存!!!
查詢命令find
作用:在指定目錄下查找文件 (從指定目錄中搜索指定的文件)
語法:find dirName(目錄名稱) -option fileName
(-option 一般是-name,表示根據指定名稱來查找文件)
舉例:
find . -name "*.java" 在當前目錄及其子目錄下查找.java結尾的文件 (-name根據文件名來進行查找)
find /it -name "*.java" 在/it目錄及其子目錄下查找.java結尾的文件
查找指定內容命令grep
作用:從指定文件中查找指定的文本內容(從當前或者是指定的文件中查找指定的內容)
語法:grep word fileName
注意:這個word是區分大小寫的 !
舉例:
grep hello helloword.java 查找 helloword.java文件中出現的hello字元串的位置
grep hello *.java 查找當前目錄中所有.java結尾的文件中包含hello字元串的位置
Linux中進行軟體安裝
軟體安裝的方式:
二進制發布包的安裝
軟體已經針對具體平台編譯打包發布,只需要解壓,修改配置即可
rpm安裝
軟體已經安裝redhat的包管理規范進行打包,使用rpm命令進行安裝,不能自行解決庫依賴問題
yum安裝(一般推薦這種安裝方式)
一種在線軟體安裝方式,本質上還是rpm安裝,自動下載安裝包並安裝,安裝過程自動解決庫依賴的問題
源碼編譯安裝(Java源代碼安裝)
軟體以源碼工程的形式發布,需要自己編譯打包
在Linux中安裝jdk
安裝jdk,先檢測一下自己的Linux中有沒有jdk環境,如果有就不需要安裝了;
檢測命令:java -version
如果沒有的話,那就安裝和配置環境變數:
1.先在官網下載好jdk在Linux環境下的呀壓縮包,以.tar.gz結尾的jdk壓縮包
2.然後使用 tar -zxvf jdk-8uxxxxxx64.tar.gz -C /usr/local (表示把壓縮包解壓到usr下的local文件夾下)
3.解壓完成後,然後進行環境變數的配置, 使用命令 vim /etc/profile
然後快速的到達文件的末尾,按一下 大寫的G就行;然後修改配置文件:
LANG="en_US.UTF-8" #配置字元編碼集
JAVA_HOME=/usr/java/jdk1.8.0_261-amd64 #配置jdk的環境變數
PATH=$JAVA_HOME/bin:$PATH
登錄後復制
修改完成後讓配置文件重新載入一下,使用命令:source /etc/profile 然後回車;
4.然後查看是否配置成功:java -version
在Linux中安裝Tomcat(防火牆相關命令使用的時候查詢就行)
sh startup.sh
./startup.sh
登錄後復制
# 查看Tomcat的後50行日誌
tail -50 /usr/loacal/apache-tomcat-7.0.57/logs/catalina.out
# 查詢指定軟體的進程
ps -ef | grep tomcat
登錄後復制
Tomcat在Linux運行的,可能你在瀏覽器也無法訪問,因為防火牆開著的;
查看和修改防火牆的狀態:
查看防火牆狀態(systemctl status firewalld、firewall-cmd --state)
暫時關閉防火牆(systemctl stop firewalld)
永久關閉防火牆(systemctl disable firewalld)
開啟防火牆(systemctl start firewalld)
開放指定埠8080(firewall-cmd --zone=public --add-port=8080/tcp --permanent)
關閉指定埠(firewall-cmd --zone=public --remove-port=8080/tcp --permanent)
立即生效(firewall-cmd --reload)
查看開放的埠(firewall-cmd --zone=public --list-ports)
注意:
1、systemctl是管理Linux中服務的命令,可以對服務進行啟動、停止、重啟、查看狀態等操作
2、firewall-cmd是Linux中專門用於控制防火牆的命令
3、為了保證系統安全,伺服器的防火牆不建議關閉 在Linux中開放指定的埠是以後在實際生產中最常用的方式,在實際生產中是不能直接把防火牆關閉的,容易受到攻擊;修改防火牆配置後都需要reload一下才能生效;
systemctl status firewalld、firewall-cmd --state
systemctl stop firewalld
systemctl start firewalld
systemctl start firewalld
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
登錄後復制
sh shutdown.sh
./shutdwon.sh
ps -ef | grep tomcat
kill -9 7742 # 一般不建議直接強制停止進程,除非正常的手段無法停止進程了
登錄後復制
在Linux中安裝MySQL
使用rpm來進行安裝MySQL;
①先檢查當前系統中是否安裝了MySQL資料庫
rpm -qa #查詢當前系統中安裝的所有軟體
rpm -qa|grep mysql #查詢當前系統中安裝的名稱帶MySQL的軟體
rpm -qa|grep mariadb #查詢當前系統中安裝的名稱帶mariadb的軟體 這個是centons中自帶的一個資料庫,如果你的虛擬機中有這個軟體要先把這個軟體給卸載然後再安裝MySQL,不然會出現資料庫沖突的情況
登錄後復制
卸載mariadb資料庫:
rpm -e --nodeps 軟體名稱
rpm -e --nodeps
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
登錄後復制
參考下面的文章:
Linux安裝MySQL詳細教程(YUM+離線安裝)初塵嶼風的博客-CSDN博客yum安裝mysql的步驟和方法
https://blog.csdn.net/qinluyu111/article/details/124343942?ops_request_misc=%7B%22request_id%22%3A%22165569845616782390520827%22%2C%22scm%22%3A%2220140713.130102334.pc_all.%22%7D&request_id=165569845616782390520827&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v32_ecpm-26-124343942-null-null.142%5Ev17%5Erank_v32,157%5Ev15%5Enew_3&utm_term=linux%E5%AE%89%E8%A3%85MySQL%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187
在參考這個文章的時候,中途可能還會報一個錯誤:在下面的文件中修改配置文件,把相關的文件地址填過去;
登陸: mysql -u -root -p 登陸的時候可能會報下面的錯誤:一般來說都是密碼錯誤了.....(反正我測試了很多次才登陸成功)
安裝Linux常見的三個錯誤:liunx 安裝 mysql 時遇到錯誤的解決_qq_31683775的博客-CSDN博客
安裝lrzsz
這個是Linux中負責文件的上傳和下載的功能;
1.搜索lrzsz安裝包,命令為 yum list lrzsz (這個命令的作用是在應用商店搜索lrzsz這個安裝包)
2.使用yum在線安裝,命令為 yum install lrzsz.x86_64 ,然後回車就行(中間可能讓你輸入一個y);然後在命令窗口使用 rz 命令就可以把本地的文件上傳到Linux上了;
注意:雖然這個finalshell可以直接使用拖拽的方式來進行文件的上傳,那麼為什麼還要安裝這個軟體?因為並不是所有的Linux連接工具中都會有這種可視圖操作的功能!
Linux項目部署
手工部署項目
自己打包,自己上傳,自己運行,然後都是自己一行一行的手敲命令來完成;
①在代碼編寫工具中把spring boot項目打成jar架構包;
②將jar包上傳到Linux伺服器
mkdir /usr/local/take_out_app #創建目錄,將項目的jar包放到此目錄
登錄後復制
運行命令:不過要注意的是,你這個Linux環境必須安裝了jdk才可以運行Boot項目
java -jar reggie_take_out-1.0-SNAPSHOT.jar
登錄後復制
檢查防火牆8080是否對外開放:firewall -cmd --zone=public --list-ports
我們發現8080埠並沒有被開放,所以使用命令把8080埠開放:
firewall-cmd --zone=public --add-port=8080/tcp --permanent # 出現sucess後,然後必須執行下面的reload,不然開放的埠不會生效
firewall-cmd --reload
firewall-cmd --zone=public --list-ports # 如果再次進行查看
登錄後復制
然後可以去瀏覽器訪問了,但是此時還不一定可以訪問成功,如果你的這個項目使用到了資料庫MySQL或者是redis,那麼還需要配置資料庫,或者是使用你本地的資料庫,但是要修改剛剛上傳的jar架構包中的yml文件中的MySQL的url;
比如果你的Linux的ip是:192.168.300.100 , 而你的MySQL是在windons中,你windows的ip地址是 192.169.200.1, 那麼就要在Linux中把yml文件中的MySQL的url中的localhost改成你的這個windows的ip地址;
等等問題需要去解決。。。。。。。。(後面再補充一下具體的情況)
設置Java項目在後台運行並且輸出日誌到指定文件
上面的那種霸屏允許的方式,只要允許Java程序的那個窗口被關閉,那麼在瀏覽器就訪問不到了;
比如在運行剛剛到項目:
nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> app.log & # 這里的log文件是相對路徑下的文件,會在我們執行該行命令的目錄下生成這個log文件 最後一個&表示在後台運行
登錄後復制
那麼這種在後台運行的程序應該怎麼把它結束?使用殺進程的方式
ps -ef | grep java 拿到Java程序的進程id
然後使用 kill -9 進程號 (這個9可以換成15,15殺進程的方式更加『溫柔一些』)
然後再查詢一下 ps -ef | grep java 看有沒有關閉該程序
shell腳本自動部署
通過腳本的方式,只要執行一個命令,就可以自動的從我們的git倉庫拉取項目和部署項目;
完整的操作步驟:
java
linux
電子蜂鳴器
精選推薦
廣告
python基礎代碼大全-python基礎語法,python 代碼命令大全
1804閱讀·0評論·0點贊
2020年10月28日
Undefined symbols for architecture x86_64:"xxxxxx", referenced from:
9398閱讀·0評論·0點贊
2016年12月6日
yml 配置指令參考
129閱讀·0評論·0點贊
2022年9月29日
Docker Compose
236閱讀·0評論·0點贊
2020年5月12日
linux伺服器上部署項目常用命令
1658閱讀·1評論·3點贊
2018年6月21日
/proc/diskstats
381閱讀·0評論·0點贊
2018年8月2日
如果,一個人身上出現了這幾個跡象,說明他的情商非常低
國際專業情商測試
廣告
[求助] win7 x64 封裝 出現 Administrator.xxxxx 的問題
391閱讀·0評論·0點贊
2016年11月27日
Linux大神都是怎麼記住這么多命令的?
496閱讀·1評論·0點贊
2021年7月22日
將瑞吉外賣項目jar包部署在遠程伺服器並成功運行在pc和移動端
928閱讀·14評論·8點贊
2022年7月20日
linux命令那麼多怎麼記,如何記住Linux命令
205閱讀·0評論·0點贊
2021年5月11日
linux命令怎麼學?
6481閱讀·0評論·1點贊
2018年10月3日
【Linux學習筆記22】Linux-C進程內存分布
210閱讀·0評論·1點贊
2019年8月2日
Linux nohup模式啟動jar
220閱讀·0評論·0點贊
2018年9月21日
linux yml安裝mysql
2345閱讀·2評論·0點贊
2019年12月18日
Linux 命令集錦
5476閱讀·0評論·0點贊
2007年3月19日
shendxx python 知識點
1下載·0評論
2022年12月9日
科創成果獎勵.rar.rar
0下載·0評論
2022年12月9日
DISCO_v1.0.7.exe
0下載·0評論
2022年12月9日
統計咨詢用戶量.sql
0下載·0評論
2022年12月9日
去首頁
看看更多熱門內容
評論2
愛殤戲子
贊
大佬,再自學么?
❷ linux學習中,關於文件復制的cp命令,其中有一個 -i 的命令有點問題
cat~/.bashrc
你會發現cp默認就等於了cp -i
aliascp='cp-i'
所以導致你無論cp還是cp -i都是一樣的效果
我每次用linux之前都會把這句alias cp='cp -i'注釋掉
附上我常用的alias文件吧,以後直接替換就可以了,操作步驟:
1.先進入編輯模式
vim~/.bashrc
2.跳轉到文字的結尾:一直按pagedown按鍵,到最後一行,再按end到文字結尾
3.按a,或者o,進入編輯模式
3.ctrl+u是一行一行刪除,把所有內容都刪除掉
4.復制粘貼以下代碼
#.bashrc
#
aliasrm='rm-i'
#aliascp='cp-i'
aliasmv='mv-i'
aliasll="ls-l"
#修改alias文件
aliasaliasvim="vim/root/.bashrc"
#重載alias文件使其生效,每次修改後都要刷新
aliasaliasource="source/root/.bashrc"
#修改環境變數,比如添加jre,tomcat,redis
aliasprofilevim="vim/etc/profile"
#重載環境變數,使其生效
aliasprofilesource="source/etc/profile"
#重啟網卡
aliasnetworkrestart="servicenetworkrestart"
#列出此伺服器的網卡配置文件
aliasnetworkvim="cd/etc/sysconfig/network-scripts/&&ls|grepifcfg-"
#修改DNS解析
aliasnameservervim="vim/etc/resolv.conf"
#修改hosts
aliashostsvim="vim/etc/hosts"
#查看埠當前佔用情況
aliasportcheck="netstat-tunlp|grep"
#查看firewall防火牆開放埠列表(白名單)
aliasfirewallports="firewall-cmd--zone=public--list-ports"
#設置firewall防火牆的mysql3306埠互通
aliasfirewalladd="echo'firewall-cmd--zone=public--add-port=3306/tcp--permanent'"
#firewall防火牆重啟
aliasfirewallreload="firewall-cmd--reload"
#iptables防火牆添加指定埠命令
aliasiptablesadd="echo'/sbin/iptables-IINPUT-ptcp--dport8080-jACCEPT'"
#查看防火牆白名單(應該是重啟還在的)
aliasiptableports="more/etc/sysconfig/iptables"
#查看指定進程
#aliaspid="psaux|grep"
aliaspid="ps-ef|grep"
#查找根目錄/下的名字為xx的文件,支持通配符*
aliassearch="find/-name"
#查看Linux系統版本和位數
aliassysteminfo='cat/etc/redhat-release;getconfLONG_BIT;uname-a'
#顯示當前伺服器時間
aliastimenow='date+"%Y-%m-%d%H:%M:%S"'
#更新伺服器時間
#aliasupdatetime='ntpdate0.centos.pool.ntp.org'
#跳轉tomcat路徑
aliastomcatpwd="cd/disk1/app/tomcat8"
#啟動tomcat
aliastomcatstart="tomcatpwd&&./bin/startup.sh&&tail-f./logs/catalina.out"
#停止tomcat
aliastomcatstop="tomcatpwd&&./bin/shutdown.sh&&ps-ef|greptomcat"
#查看tomcat日誌
aliastomcatlog="tomcatpwd&&tail-200f./logs/catalina.out"
#批量啟動多個tomcat
aliastomcatstartall="/usr/local/tomcat8080/bin/startup.sh&&/usr/local/tomcat8081/bin/startup.sh&&/usr/local/tomcat8082/bin/startup.sh&&/usr/local/tomcat8083/bin/startup.sh&&/usr/local/tomcat8084/bin/startup.sh"
#批量關閉多個tomcat
aliastomcatstopall="/usr/local/tomcat8080/bin/shutdown.sh&&/usr/local/tomcat8081/bin/shutdown.sh&&/usr/local/tomcat8082/bin/shutdown.sh&&/usr/local/tomcat8083/bin/shutdown.sh&&/usr/local/tomcat8084/bin/shutdown.sh"
#redis查找指定key對應value值
aliasrediskeys='redis-cli-a"abc@123"keys'
#修改nginx默認配置
aliasnginxconf="vim/usr/local/nginx/conf/nginx.conf"
#以默認配置啟動nginx
aliasnginxstart="/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf"
#強制停止nginx伺服器,如果有未處理的數據,丟棄
aliasnginxstop="/usr/local/nginx/sbin/nginx-sstop"
#推薦:優雅的停止nginx伺服器,如果有未處理的數據,等待處理完成之後停止
aliasnginxquit="/usr/local/nginx/sbin/nginx-squit"
#重載nginx,用於修改配置後,直接刷新使配置生效
aliasnginxreload="/usr/local/nginx/sbin/nginx-sreload"
#檢查nginx的配置是否可用
aliasnginxcheck="/usr/local/nginx/sbin/nginx-t"
#虛擬機共享文件夾路徑
#aliasshare="/mnt/hgfs/ShareFolder/"
#Sourceglobaldefinitions
if[-f/etc/bashrc];then
./etc/bashrc
fi
5.粘貼後,按ESC退出編輯模式,然後按冒號+w+q+回車 保存
我那些alias裡面不懂的去網路吧,基本用過linux的差不多都接觸過或者一看就懂
❸ 如何在Linux上配置基於Web的網路流量監控系統
在Linux上安裝ntopng
如果你是Debian、Ubuntu或Linux Mint,執行以下命令:
❹ Linux服務開機自啟動三種方式,你覺得哪種最優雅
很多時候,我們需要將一些服務在Linux系統啟動時即自動運行,省得每次都要去手動啟動一遍,如Redis, MySQL, Nginx等。本文對CentOS與Ubuntu下開機自啟動的配置方法進行整理,供參考查閱。
rc.local是CentOS以前版本的方式,在CentOS7中仍然以兼容的形式存在,雖仍可用,但不推薦(推薦使用systemd service)。
1、編寫需要開機自啟動的腳本,並添加執行許可權
作為測試,上述腳本列印一個時間到/tmp/test.log文件中
2、在/etc/rc.d/rc.local配置文件中添加腳本運行命令(使用絕對路徑)
3、添加/etc/rc.d/rc.local文件的執行許可權
在centos7中,/etc/rc.d/滾毀岩rc.local沒有執行許可權,需要手動授權
以上三步,即可使/root/test_rclocal.sh >/dev/null 2>/dev/null 命令在伺服器系統啟動時自動運行。
1、編寫需要開機自啟動的測試腳本,並添加執行許可權
2、在/etc/rc.d/init.d/目錄下添加一個可執行腳本testchkconfig
上述testchkconfig腳本的頭部必須遵循一定的格式 # chkconfig: 2345 90 10, 其中2345指定服務在哪些執行等級中開啟或關閉,90表示啟動的優先順序(0-100,越大優先順序越低),10表示關閉的優先順序。執行等級包括
3、加入開機啟動服務列表
使用 chkconfig --list 可查看當前加入開機自啟動的服務列表,但如Note部分所述,該命令只顯示SysV服務,不包含原生的systemd服務,查看systemd服務可使用systemctl list-unit-files命令。
以上三步,即可使/root/test_chkconfig.sh >/dev/null 2>/dev/null 命令在伺服器系統啟動時自動運行。
chkconfig的其它命令參考
CentOS7的余滾systemd服務腳本存放在:/usr/lib/systemd/system(系統級)/usr/lib/systemd/user(用戶級)下,以.service結尾。這里以nginx為例
1、在/usr/lib/systemd/system目錄大御下創建nginx.service文件
其中Service部分的Type包括如下幾種類型:
2、 開啟開機自啟動
以上兩步,就將nginx服務配置成了在操作系統啟動時自動啟動。
其它命令參考
從字面看是PID文件不可讀,查看/var/run/nginx.pid,該文件也確實不存在,查看nginx.conf配置文件,發現是pid /var/run/nginx.pid;這行配置被注釋掉了, 如果不指定pid文件位置,nginx默認會把pid文件保存在logs目錄中。所以出現systemd啟動服務時找不到pid文件而報錯,將nginx.conf中的pid配置注釋去掉,重啟nginx.service即可。
在Ubuntu18.04中,主要也是以systemd服務來實現開機自啟動,systemd默認讀取/etc/systemd/system/下的配置文件,該目錄下的一些文件會鏈接到/lib/systemd/system/下的文件。
因此可以在/etc/systemd/system/目錄下面創建一個自啟動服務配置,以內網穿透服務frp客戶端為例,如
各配置項與CentOS類似。然後將伺服器加到自啟動列表中並啟動服務
其它更多systemctl命令與CentOS類似。
也可以使用/lib/systemd/system/rc-local.service來執行一些開機需要執行的腳本,該文件內容為
從Description看它是為了兼容之前版本的/etc/rc.local的,該服務啟動命名就是/etc/rc.local start,將該文件鏈接到/etc/systemd/system下
創建/etc/rc.local文件,並賦予可執行許可權
作者:半路雨歌
鏈接:https://juejin.cn/post/6844904104515338248
❺ Redis分布式緩存搭建
花了兩天時間整理了之前記錄的Redis單體與哨兵模式的搭建與使用,又補齊了集群模式的使用和搭建經驗,並對集群的一些個原理做了理解。
筆者安裝中遇到的一些問題:
如果make報錯,可能是沒裝gcc或者gcc++編輯器,安裝之 yum -y install gcc gcc-c++ kernel-devel ,有可能還是提示一些個c文件編譯不過,gcc -v查看下版本,如果不到5.3那麼升級一下gcc:
在 /etc/profile 追加一行 source /opt/rh/devtoolset-9/enable
scl enable devtoolset-9 bash
重新make clean, make
這回編譯通過了,提示讓你最好make test一下/
執行make test ,如果提示 You need tcl 8.5 or newer in order to run the Redis test
那就升級tcl, yum install tcl
重新make test,如果還有error就刪了目錄,重新tar包解壓重新make , make test
o/ All tests passed without errors! ,表示編譯成功。
然後make install即可。
直接運行命令: ./redis-server /usr/redis-6.0.3/redis.conf &
redis.conf 配置文件里 bind 0.0.0.0 設置外部訪問, requirepass xxxx 設置密碼。
redis高可用方案有兩種:
常用搭建方案為1主1從或1主2從+3哨兵監控主節點, 以及3主3從6節點集群。
(1)sentinel哨兵
/usr/redis-6.0.3/src/redis-sentinel /usr/redis-6.0.3/sentinel2.conf &
sentinel2.conf配置:
坑1:master節點也會在故障轉移後成為從節點,也需要配置masterauth
當kill master進程之後,經過sentinel選舉,slave成為了新的master,再次啟動原master,提示如下錯誤:
原因是此時的master再次啟動已經是slave了,需要向現在的新master輸入密碼,所以需要在master.conf
中配置:
坑2:哨兵配置文件要暴露客戶端可以訪問到的master地址
在 sentinel.conf 配置文件的 sentinel monitor mymaster 122.xx.xxx.xxx 6379 2 中,配置該哨兵對應的master名字、master地址和埠,以及達到多少個哨兵選舉通過認為master掛掉。其中master地址要站在redis訪問者(也就是客戶端)的角度、配置訪問者能訪問的地址,例如sentinel與master在一台伺服器(122.xx.xxx.xxx)上,那麼相對sentinel其master在本機也就是127.0.0.1上,這樣 sentinel monitor mymaster 127.0.0.1 6379 2 邏輯上沒有問題,但是如果另外伺服器上的springboot通過lettuce訪問這個redis哨兵,則得到的master地址為127.0.0.1,也就是springboot所在伺服器本機,這顯然就有問題了。
附springboot2.1 redis哨兵配置:
坑3:要注意配置文件.conf會被哨兵修改
redis-cli -h localhost -p 26379 ,可以登到sentinel上用info命令查看一下哨兵的信息。
曾經遇到過這樣一個問題,大致的信息如下
slaves莫名其妙多了一個,master的地址也明明改了真實對外的地址,這里又變成127.0.0.1 !
最後,把5個redis進程都停掉,逐個檢查配置文件,發現redis的配置文件在主從哨兵模式會被修改,master的配置文件最後邊莫名其妙多了一行replicaof 127.0.0.1 7001, 懷疑應該是之前配置錯誤的時候(見坑2)被哨兵動態加上去的! 總之,實踐中一定要多注意配置文件的變化。
(2)集群
當數據量大到一定程度,比如幾十上百G,哨兵模式不夠用了需要做水平拆分,早些年是使用codis,twemproxy這些第三方中間件來做分片的,即 客戶端 -> 中間件 -> Redis server 這樣的模式,中間件使用一致性Hash演算法來確定key在哪個分片上。後來Redis官方提供了方案,大家就都採用官方的Redis Cluster方案了。
Redis Cluster從邏輯上分16384個hash slot,分片演算法是 CRC16(key) mod 16384 得到key應該對應哪個slot,據此判斷這個slot屬於哪個節點。
每個節點可以設置1或多個從節點,常用的是3主節點3從節點的方案。
reshard,重新分片,可以指定從哪幾個節點移動一些hash槽到另一個節點去。重新分片的過程對客戶端透明,不影響線上業務。
搭建Redis cluster
redis.conf文件關鍵的幾個配置:
啟動6個集群節點
[root@VM_0_11_centos redis-6.0.3]# ps -ef|grep redis
root 5508 1 0 21:25 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7001 [cluster]
root 6903 1 0 21:32 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7002 [cluster]
root 6939 1 0 21:33 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7003 [cluster]
root 6966 1 0 21:33 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7004 [cluster]
root 6993 1 0 21:33 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7005 [cluster]
root 7015 1 0 21:33 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7006 [cluster]
這時候這6個節點還是獨立的,要把他們配置成集群:
說明: -a xxxx 是因為筆者在redis.conf中配置了requirepass xxxx密碼,然後 --cluster-replicas 1 中的1表示每個master節點有1個從節點。
上述命令執行完以後會有一個詢問: Can I set the above configuration? yes同意自動做好的分片即可。
最後 All 16384 slots covered. 表示集群中16384個slot中的每一個都有至少有1個master節點在處理,集群啟動成功。
查看集群狀態:
坑1:暴露給客戶端的節點地址不對
使用lettuce連接發現連不上,查看日誌 Connection refused: no further information: /127.0.0.1:7002 ,跟之前哨兵配置文件sentinel.conf里邊配置master地址犯的錯誤一樣,集群啟動的時候帶的地址應該是提供給客戶端訪問的地址。
我們要重建集群:先把6個redis進程停掉,然後刪除 nodes-7001.conf 這些節點配置文件,刪除持久化文件 mp.rdb 、 appendonly.aof ,重新啟動6個進程,在重新建立集群:
然後,還是連不上,這次報錯 connection timed out: /172.xx.0.xx:7004 ,發現連到企鵝雲伺服器的內網地址上了!
解決辦法,修改每個節點的redis.conf配置文件,找到如下說明:
所以增加配置:
然後再重新構建集群,停進程、改配置、刪除節點文件和持久化文件、啟動進程、配置集群。。。再來一套(累死了)
重新使用Lettuce測試,這次終於連上了!
坑2:Lettuce客戶端在master節點故障時沒有自動切換到從節點
name這個key在7002上,kill這個進程模擬master下線,然後Lettuce一直重連。我們期望的是應該能自動切換到其slave 7006上去,如下圖:
重新啟動7002進程,
7006已成為新master,7002成為它的slave,然後Lettuce也能連接上了。
解決辦法,修改Lettuce的配置:
筆者用的是springboot 2.1 spring-boot-starter-data-redis 默認的Lettuce客戶端,當使用Redis cluster集群模式時,需要配置一下 RedisConnectionFactory 開啟自適應刷新來做故障轉移時的自動切換從節點進行連接。
重新測試:停掉master 7006,這次Lettuce可以正常切換連到7002slave上去了。(仍然會不斷的在日誌里報連接錯誤,因為需要一直嘗試重連7006,但因為有7002從節點頂上了、所以應用是可以正常使用的)
Redis不保證數據的強一致性
Redis並不保證數據的強一致性,也就是取CAP定理中的AP
關於一致性Hash演算法,可以參考 一致性Hash演算法 - (jianshu.com)
Redis cluster使用的是hash slot演算法,跟一致性Hash演算法不太一樣,固定16384個hash槽,然後計算key落在哪個slot里邊(計算key的CRC16值再對16384取模),key找的是slot而不是節點,而slot與節點的對應關系可以通過reshard改變並通過gossip協議擴散到集群中的每一個節點、進而可以為客戶端獲知,這樣key的節點定址就跟具體的節點個數沒關系了。也同樣解決了普通hash取模演算法當節點個數發生變化時,大量key對應的定址都發生改動導致緩存失效的問題。
比如集群增加了1個節點,這時候如果不做任何操作,那麼新增加的這個節點上是沒有slot的,所有slot都在原來的節點上且對應關系不變、所以沒有因為節點個數變動而緩存失效,當reshard一部分slot到新節點後,客戶端獲取到新遷移的這部分slot與新節點的對應關系、定址到新節點,而沒遷移的slot仍然定址到原來的節點。
關於熱遷移,猜想,內部應該是先做復制遷移,等遷移完了,再切換slot與節點的對應關系,復制沒有完成之前仍按照原來的slot與節點對應關系去原節點訪問。復制結束之後,再刪除原節點上已經遷移的slot所對應的key。
與哨兵模式比較類似,當1個節點發現某個master節點故障了、會對這個故障節點進行pfail主觀宕機,然後會通過gossip協議通知到集群中的其他節點、其他節點也執行判斷pfail並gossip擴散廣播這一過程,當超過半數節點pfail時那麼故障節點就是fail客觀宕機。接下來所有的master節點會在故障節點的從節點中選出一個新的主節點,此時所有的master節點中超過半數的都投票選舉了故障節點的某個從節點,那麼這個從節點當選新的master節點。
所有節點都持有元數據,節點之間通過gossip這種二進制協議進行通信、發送自己的元數據信息給其他節點、故障檢測、集群配置更新、故障轉移授權等等。
這種去中心化的分布式節點之間內部協調,包括故障識別、故障轉移、選主等等,核心在於gossip擴散協議,能夠支撐這樣的廣播協議在於所有的節點都持有一份完整的集群元數據,即所有的節點都知悉當前集群全局的情況。
Redis高可用方案 - (jianshu.com)
面試題:Redis 集群模式的工作原理能說一下么 - 雲+社區 - 騰訊雲 (tencent.com)
深度圖解Redis Cluster原理 - detectiveHLH - 博客園 (cnblogs.com)
Redis學習筆記之集群重啟和遇到的坑-阿里雲開發者社區 (aliyun.com)
雲伺服器Redis集群部署及客戶端通過公網IP連接問題
❻ linux 怎樣安裝redis
獲取Redis
1、通過官網http://redis.io/獲取穩定版源碼包下載地址;
2、通過wget http://download.redis.io/releases/redis-3.0.2.tar.gz下載 源碼包;
2
編譯安裝Redis
1、解壓源碼安裝包,通過tar -xvf redis-3.0.2.tar.gz解壓源碼,速度相當快;
2、進入解壓後的目錄,執行make編譯源碼;
make命令執行完成後,會在src目錄下生成6個可執行文件,分別是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-mp、redis-sentinel。
3、執行make install安裝,或者通過make PREFIX=/usr/local/redis install指定安裝目錄。這里默認安裝,默認將之前生成的可執行文件拷貝到/usr/local/bin目錄下;
END
配置運行
修改配置文件
1、將源碼目錄下redis配置文件redis.conf拷貝到/etc/redis目錄下。
2、修改配置項,根據需要;如果不修改,使用默認配置也可以;
啟動服務:
查看埠是否被佔用:netstat
–ntlp
|grep 6379
方式一:通過命令redis-server 啟動,可在命令後加上`&`號使redis以後台程序方式運行;
方式二:通過指定配置文件啟動;redis-server /etc/redis/redis.conf
默認安裝的路徑已經加入環境變數中,可直接在命令行執行命令;
命令客戶端檢測鏈接
1、連接之前可以先檢測服務是否啟動;
2、測試啟動 redis-cli ping 返回PONG,啟動成功。
停止Redis:
關閉服務
redis-cli shutdown
如果非默認埠,可指定埠:
redis-cli -p 6380 shutdown
簡單操作:
1、兩種連接方式:
1:window DOS方式:tentel主機IP埠號(默認為127.0.0.1:6379)
2:linux客戶端方式:redis-cli 主機IP 埠號(默認為127.0.0.1 6379)
2、命令行操作:
#redis-cli
redis 127.0.0.1:6379> set name clj
OK
redis 127.0.0.1:6379> get name
"clj"