Linux詳解(基礎、環境配置、項目部署入門)
Linux(CentOS 7)作業系統
消息隊列(Kafka、RabbitMQ、RocketMQ),快取(Redis),搜索引擎(ES),集群分散式(需要購買多台伺服器,如果沒有伺服器我們就只能使用虛擬機)!
Linux一切皆文件 :文件就是 讀、寫、(許可權)
學習方式:
- 認識Linux
- 基本的命令(重點:Git講了一些基本的命令(文件操作、目錄管理、文件屬性、Vim編輯器、帳號管理、磁碟管理……))
- 軟體的安裝和部署!(Java、tomcat、docker)
Linux –> Redis –> docker
LAMP(Linux + Apache + MySQL + PHP) 或 LNMP(Linux + Nginx + MySQL + PHP)
Linux vs Windows
1、環境搭建
詳細講解請看伺服器購買、環境搭建及運行
2、走進Linux
開機登錄
開機會啟動許多程式。它們在Windows叫做「服務」(service),在Linux就叫做「守護進程」(daemon)。
開機成功後,它會顯示一個文本登錄介面,這個介面就是我們經常看到的登錄介面,在這個登錄介面中會提示用戶輸入用戶名,而用戶輸入的用戶名將作為參數傳給login程式來驗證用戶的身份,密碼是不顯示的,輸完回車即可!
一般來說,用戶的登錄方式有三種:
- 命令行登錄
- ssh登錄
- 圖形介面登錄
最高許可權賬戶為 root ,可以操作一切!
關機
在Linux領域內大多用在伺服器上,很少遇到關機的操作。畢竟伺服器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機。
關機指令為:shutdown;
sync # 將數據由記憶體同步到硬碟中
shutdown # 關機指令,你可以 man shutdown 來看一下幫助文檔。例如你可以運行如下命令關機:
shutdown -h 10 # 這個命令告訴大家,電腦將在10分鐘後關機
shutdown -h now # 立馬關機
shutdown -h 20:25 # 系統會在今天20:25關機
shutdown -h +10 # 十分鐘後關機
shutdown -r now # 系統立馬重啟
shutdown -r +10 # 系統十分鐘後重啟
reboot # 就是重啟,等同於 shutdown -r now
half # 關閉系統,等同於shutdown -h now 和 poweroff
最後總結一下,不管是重啟系統還是關閉系統,首先要運行 sync 命令,把記憶體中的數據寫到磁碟中。
Linux中沒有錯誤就代表操作成功!
系統目錄結構
- 一切皆文件
- 根目錄 / ,所有的文件都掛載在這個節點下
登錄系統後,在當前命令窗口下輸入命令:
ls /
你會看到如下圖所示:
樹狀目錄結構:
以下是對這些目錄的解釋:
- /bin:bin是Binary的縮寫,這個目錄存放著最經常使用的命令。
- /boot:這裡存放的是啟動Linux時使用的一些核心文件,包括一些連接文件以及鏡像文件。
- /dev:dev是Device(設備)的縮寫,存放的是Linux的外部設備,在Linux中訪問設備的方式和訪問文件的方式是相同的。
- /etc:這個目錄是用來存放所有的系統管理所需要的配置文件和子目錄。
- /home:用戶的主目錄,在Linux中,每個用戶都有一個自己的目錄,一般該目錄名是以用戶的帳號命名的。
- /lib:這個目錄里存放著系統最基本的動態連接共享庫,其作用類似於Windows里的DLL文件。
- /lost+found:這個目錄一般情況下是空的,當系統非法關機後,這裡就存放了一些文件。
- /media:linux系統會自動識別一些設備,例如U盤、光碟機等等,當識別後,linux會把識別的設備掛載到這個目錄下。
- /mnt:系統提供該目錄是為了讓用戶臨時掛載別的文件系統的,我們可以將光碟機掛載在/mnt/上,然後進入該目錄就可以查看光碟機里的內容了。
- /opt:這是給主機額外安裝軟體所擺放的目錄。比如你安裝一個ORACLE資料庫則就可以放到這個目錄下。默認是空的。
- /proc:這個目錄是一個虛擬的目錄,它是系統記憶體的映射,我們可以通過直接訪問這個目錄來獲取系統資訊。
- /root:該目錄為系統管理員,也稱作超級許可權者的用戶主目錄。
- /sbin:s就是Super User的意思,這裡存放的是系統管理員使用的系統管理程式。
- /srv:該目錄存放一些服務啟動之後需要提取的數據。
- /sys:這是linux2.6內核的一個很大的變化。該目錄下安裝了2.6內核中新出現的一個文件系統sysfs。
- /tmp:這個目錄是用來存放一些臨時文件的。
- /usr:這是一個非常重要的目錄,用戶的很多應用程式和文件都放在這個目錄下,類似於windows下的program files目錄。
- /usr/bin:系統用戶使用的應用程式。
- /usr/sbin:超級用戶使用的比較高級的管理程式和系統守護程式。Super
- /usr/src:內核源程式碼默認的放置目錄。
- /var:這個目錄中存放著在不斷擴充著的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌文件。
- /run:是一個臨時文件系統,存儲系統啟動以來的資訊。當系統重啟時,這個目錄下的文件應該被刪掉或清除。
- /www:存放伺服器網站相關的資源、環境、網站的項目
3、常用的基本命令
目錄管理
絕對路徑、相對路徑
絕對路徑,路徑的全稱:C:\ProgramData\xxx
比如說 C:\ProgramData 目錄下,那這個xxx文件,對應我們相對應的配置就是/xxx
cd :切換目錄命令!
./ :當前目錄
cd .. :返回上一級目錄
ls(列出目錄!)
在Linux中 ls 可能是最常被使用的!
-a參數:all,查看全部的文件,包括隱藏文件
-l參數:列出所有的文件,包含文件的屬性和許可權,不顯示隱藏文件
所有的Linux命令可以組合使用!
cd 命令 切換目錄
cd 目錄名(絕對路徑都是以 / 開頭,相對路徑,對於當前目錄該如何尋找 ../../ )
大家只要多嘗試使用就會了!
pwd 顯示當前用戶所在的目錄!
[root@iZwz94pp1jlrh60g51w9b8Z ~]# pwd
/root
[root@iZwz94pp1jlrh60g51w9b8Z ~]# cd /bin
[root@iZwz94pp1jlrh60g51w9b8Z bin]# pwd
/bin
[root@iZwz94pp1jlrh60g51w9b8Z bin]# cd /usr/local
[root@iZwz94pp1jlrh60g51w9b8Z local]# pwd
/usr/local
mkdir 創建一個目錄
[root@iZwz94pp1jlrh60g51w9b8Z home]# mkdir test1
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test1 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cd test1
[root@iZwz94pp1jlrh60g51w9b8Z test1]# cd ..
[root@iZwz94pp1jlrh60g51w9b8Z home]# mkdir test2/test3/test4
mkdir: cannot create directory 『test2/test3/test4』: No such file or directory
[root@iZwz94pp1jlrh60g51w9b8Z home]# mkdir -p test2/test3/test4
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test1 test2 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cd test2
[root@iZwz94pp1jlrh60g51w9b8Z test2]# ls
test3
[root@iZwz94pp1jlrh60g51w9b8Z test2]# cd test3
[root@iZwz94pp1jlrh60g51w9b8Z test3]# ls
test4
rm 刪除目錄
批量刪除文件:
[root@iZwz94pp1jlrh60g51w9b8Z home]# rm -rf f2 f3 kuangstudy.txt
[root@iZwz94pp1jlrh60g51w9b8Z local]# cd /home
[root@iZwz94pp1jlrh60g51w9b8Z home]# mkdir test1
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test1 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cd test1
[root@iZwz94pp1jlrh60g51w9b8Z test1]# cd ..
[root@iZwz94pp1jlrh60g51w9b8Z home]# mkdir test2/test3/test4
mkdir: cannot create directory 『test2/test3/test4』: No such file or directory
[root@iZwz94pp1jlrh60g51w9b8Z home]# mkdir -p test2/test3/test4
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test1 test2 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cd test2
[root@iZwz94pp1jlrh60g51w9b8Z test2]# ls
test3
[root@iZwz94pp1jlrh60g51w9b8Z test2]# cd test3
[root@iZwz94pp1jlrh60g51w9b8Z test3]# ls
test4
[root@iZwz94pp1jlrh60g51w9b8Z test3]# cd /home
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test1 test2 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# rmdir test1
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test2 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# rmdir test2
rmdir: failed to remove 『test2』: Directory not empty
[root@iZwz94pp1jlrh60g51w9b8Z home]# rmdir -p test2
rmdir: failed to remove 『test2』: Directory not empty
[root@iZwz94pp1jlrh60g51w9b8Z home]# rmdir -p test2/test3/test4
[root@iZwz94pp1jlrh60g51w9b8Z home]# mkdir -p test2/test3/test4
[root@iZwz94pp1jlrh60g51w9b8Z home]# rmdir test2/test3/test4
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test2 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# rmdir -p test2/test3/test4
rmdir: failed to remove 『test2/test3/test4』: No such file or directory
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test2 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# rmdir -p test2/test3/test4
rmdir: failed to remove 『test2/test3/test4』: No such file or directory
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis test2 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cd test2/test3
[root@iZwz94pp1jlrh60g51w9b8Z test3]# cd test4
-bash: cd: test4: No such file or directory
[root@iZwz94pp1jlrh60g51w9b8Z test3]# mkdir test4
[root@iZwz94pp1jlrh60g51w9b8Z test3]# cd ../..
[root@iZwz94pp1jlrh60g51w9b8Z home]# rmdir -p test2/test3/test4
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangstudy redis www
rmdir 僅能刪除空的目錄,如果下面存在文件,需要先刪除文件,遞歸刪除多個目錄 -p 參數即可
cp(複製文件或者目錄)
cp 原來的地方 新的地方!
[root@iZwz94pp1jlrh60g51w9b8Z home]# cp install.sh kuangstudy # 拷貝文件至目錄
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
install.sh kuangshen kuangstudy www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cd kuangstudy/
[root@iZwz94pp1jlrh60g51w9b8Z kuangstudy]# ls
install.sh
[root@iZwz94pp1jlrh60g51w9b8Z kuangstudy]# cd ..
[root@iZwz94pp1jlrh60g51w9b8Z home]# cp install.sh kuangstudy # 如果文件重複,就選擇覆蓋(y)或者放棄(n)
cp: overwrite 『kuangstudy/install.sh』? y
rm(移除文件或者目錄!)
-f 忽略不存在的文件,不會出現警告,強制刪除!
-r 遞歸刪除目錄!
-i 互動,刪除詢問是否刪除
rm -rf / # 系統中所有的文件就被刪除了,刪庫跑路的操作!
[root@iZwz94pp1jlrh60g51w9b8Z kuangstudy]# ls
install.sh
[root@iZwz94pp1jlrh60g51w9b8Z kuangstudy]# rm -rf install.sh
mv 移動文件或者目錄!重命名文件
-f 強制
-u 只替換已經更新過的文件
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
install.sh kuangshen kuangstudy www
[root@iZwz94pp1jlrh60g51w9b8Z home]# mv install.sh kuangstudy/ # 移動文件
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangshen kuangstudy www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cd kuangstudy/
[root@iZwz94pp1jlrh60g51w9b8Z kuangstudy]# ls
install.sh
[root@iZwz94pp1jlrh60g51w9b8Z kuangstudy]# cd ..
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangshen kuangstudy www
[root@iZwz94pp1jlrh60g51w9b8Z home]# mv kuangstudy kuangstudy2 # 重命名文件夾!
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
kuangshen kuangstudy2 www
基本屬性
看懂文件屬性
Linux系統是一種典型的多用戶系統,不同的用戶處於不同的地位,擁有不同的許可權。為了保護系統的安全性,Linux系統對不同的用戶訪問同一文件(包括目錄文件)的許可權做了不同的規定。
在Linux中我們可以使用ll
或者ls -l
命令來顯示一個文件的屬性以及文件所屬的用戶和組,如:
實例中,boot文件的第一個屬性用”d”表示。”d”在Linux中代表該文件是一個目錄文件。
在Linux中第一個字元代表這個文件是目錄、文件或鏈接文件等等:
- 當為[ d ]則是目錄
- 當為[ – ]則是文件;
- 若是[ l ]則表示為鏈接文檔(link file);
- 若是[ b ]則表示為裝置文件裡面的可供儲存的介面設備(可隨機存取裝置);
- 若是[ c ]則表示為裝置文件裡面的串列埠設備,例如鍵盤、滑鼠(一次性讀取裝置)。
接下來的字元中,以三個為一組,且均為[ rwx ]的三個參數的組合
其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。
要注意的是,這三個許可權的位置不會改變,如果沒有許可權,就會出現減號[ – ]而已。
每個文件的屬性由左邊第一部分的10個字元來確定(如下圖):
從左至右用0-9這些數字來表示。
第0位確定文件類型,第1-3位確定屬主(該文件的所有者)擁有該文件的許可權。第4-6位確定屬組(所有者的同組用戶)擁有該文件的許可權,第7-9位確定其他用戶擁有該文件的許可權。
其中:
第 1、4、7 位表示讀許可權,如果用 r 字元表示,則有讀許可權,如果用 – 字元表示,則沒有讀許可權;
第 2、5、8 位表示寫許可權,如果用 w 字元表示,則有寫許可權,如果用 – 字元表示沒有寫許可權;
第 3、6、9 位表示可執行許可權,如果用 x 字元表示,則有執行許可權,如果用 – 字元表示,則沒有執行許可權。
對於文件來說,它都有一個特定的所有者,也就是對該文件具有所有權的用戶。
同時,在Linux系統中,用戶是按組分類的,一個用戶屬於一個或多個組。
文件所有者以外的用戶又可以分為文件所有者的同組用戶和其他用戶。
因此,Linux系統按文件所有者、文件所有者同組用戶和其它用戶來規定了不同的文件訪問許可權。
在以上實例中,boot文件是一個目錄文件,屬主和屬組都為root。
修改文件屬性
-
chgrp:更改文件屬組
chgrp [-R] 屬組名 文件名
-R:遞歸更改文件屬組,就是在更改某個目錄文件的屬組時,如果加上-R的參數,那麼該目錄下的所有文件的屬組都會更改。
-
chown:更改文件屬主,也可以同時更改文件屬組
chown [–R] 屬主名 文件名 chown [-R] 屬主名:屬組名 文件名
-
chmod:更改文件9個屬性
chmod [-R] xyz 文件或目錄
Linux文件屬性有兩種設置方法,一種是數字,一種是符號。
Linux 文件的基本許可權就有九個,分別是 owner/group/others(擁有者/組/其他) 三種身份各有自己的 read/write/execute 許可權。
先複習一下剛剛上面提到的數據:文件的許可權字元為: [ -rwxrwxrwx ], 這九個許可權是三個三個一組的!其中,我們可以使用數字來代表各個許可權,各許可權的分數對照表如下:
r:4 w:2 x:1 可讀可寫不可執行 rw- 6 可讀可寫可執行 rwx 7 chmod 777 [文件名] 文件賦予用戶可讀可寫可執行!
每種身份(owner/group/others)各自的三個許可權(r/w/x)分數是需要累加的,例如當許可權為:[ -rwxrwx ]— 分數則是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= — = 0+0+0 = 0
chmod 770 filename
可以自己下去多進行測試!
文件內容查看
我們會經常使用到文件查看!
Linux系統中使用以下命令來查看文件的內容:
-
cat 由第一行開始顯示文件內容,用來讀文章,或者讀取配置文件,都使用 cat 命令
-
tac 從最後一行開始顯示,可以看出tac是cat倒著寫!
[root@iZwz94pp1jlrh60g51w9b8Z network-scripts]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.69.40 netmask 255.255.240.0 broadcast 172.17.79.255 inet6 fe80::216:3eff:fe08:b1ff prefixlen 64 scopeid 0x20<link> ether 00:16:3e:08:b1:ff txqueuelen 1000 (Ethernet) RX packets 483319 bytes 634469009 (605.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 181652 bytes 53264870 (50.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 194 bytes 11737 (11.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 194 bytes 11737 (11.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@iZwz94pp1jlrh60g51w9b8Z network-scripts]# cat ifcfg-eth0 # Created by cloud-init on instance boot automatically, do not edit. # If you don't want cloud-init genrated automatically,you can disable it in /etc/cloud/cloud.cfg # For more information, please refer to: //help.aliyun.com/document_detail/57803.html # BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no [root@iZwz94pp1jlrh60g51w9b8Z network-scripts]# tac ifcfg-eth0 USERCTL=no TYPE=Ethernet STARTMODE=auto ONBOOT=yes DEVICE=eth0 BOOTPROTO=dhcp # # For more information, please refer to: //help.aliyun.com/document_detail/57803.html # If you don't want cloud-init genrated automatically,you can disable it in /etc/cloud/cloud.cfg # Created by cloud-init on instance boot automatically, do not edit.
-
nl 顯示的時候,順道輸出行號!看程式碼的時候,希望顯示行號!
-
more 一頁一頁地顯示文件內容,帶餘下內容的(空格代表翻頁,enter 代表向下看一行,:f 行號)
-
less 與 more 類似,但是比 more 更好的是,它可以往前翻頁!(空格翻頁,pageDown,pageUp鍵代表翻動頁面!退出 q 命令,查找字元串 / 要查詢的字元向下查詢,向上查詢使用 ? 要查詢的字元串,n 繼續搜尋下一個,N向上尋找!)
-
head 只看頭幾行 通過 -n 參數來控制顯示幾行!
-
tail 只看尾巴幾行 -n 參數 要查看幾行!
你可以使用 man [命令] 來查看各個命令的使用文檔,如:man cp。
網路配置目錄:cd/etc/sysconfig/
ifconfig 命令查看網路配置!
拓展:Linux鏈接的概念(了解即可!)
Linux的鏈接分為兩種:硬鏈接、軟鏈接!
硬鏈接:A —> B,假設B是A的硬鏈接,那麼他們兩個指向了同一個文件!允許一個文件擁有多個路徑,用戶可以通過這種機制建立硬鏈接到一些重要文件上,防止誤刪!
軟鏈接:類似Windows下的快捷方式,刪除源文件,快捷方式也訪問不了!
創建鏈接 ln 命令!
touch
命令創建文件!
echo
輸入字元串,也可以輸入到文件中!
[root@iZwz94pp1jlrh60g51w9b8Z home]# touch f1 # 創建一個f1文件
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
f1 kuangstudy redis www
[root@iZwz94pp1jlrh60g51w9b8Z home]# ln f1 f2 # 創建一個硬鏈接 f2
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
f1 f2 kuangstudy redis www
[root@iZwz94pp1jlrh60g51w9b8Z home]# ln -s f1 f3 # 創建一個軟鏈接(符號鏈接) f3
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
f1 f2 f3 kuangstudy redis www
[root@iZwz94pp1jlrh60g51w9b8Z home]# ll
total 12
-rw-r--r-- 2 root root 0 May 25 19:28 f1
-rw-r--r-- 2 root root 0 May 25 19:28 f2
lrwxrwxrwx 1 root root 2 May 25 19:28 f3 -> f1
drwxr-xr-x 2 root root 4096 May 25 14:06 kuangstudy
drwx------ 2 redis redis 4096 May 24 20:14 redis
drwx------ 3 www www 4096 May 24 20:13 www
[root@iZwz94pp1jlrh60g51w9b8Z home]# echo "i love kuangshen" >>f1 # 給f1文件中寫入一些字元串!
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
f1 f2 f3 kuangstudy redis www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cat f1 # 查看f1
i love kuangshen
[root@iZwz94pp1jlrh60g51w9b8Z home]# cat f2 # 查看f2
i love kuangshen
[root@iZwz94pp1jlrh60g51w9b8Z home]# cat f3 # 查看f3
i love kuangshen
刪除 f1 之後,查看 f2 和 f3 的區別
[root@iZwz94pp1jlrh60g51w9b8Z home]# rm -rf f1
[root@iZwz94pp1jlrh60g51w9b8Z home]# ls
f2 f3 kuangstudy redis www
[root@iZwz94pp1jlrh60g51w9b8Z home]# cat f2 # f2 硬鏈接還在
i love kuangshen
[root@iZwz94pp1jlrh60g51w9b8Z home]# cat f3 # f3 (軟鏈接、符號鏈接)快捷方式失效!
cat: f3: No such file or directory
Vim編輯器
什麼是Vim編輯器
Vim是從 vi 發展出來的一個文本編輯器。程式碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程式設計師中被廣泛使用。
簡單的來說, vi 是老式的字處理器,不過功能已經很齊全了,但是還是有可以進步的地方。
vim 則可以說是程式開發者的一項很好用的工具。
所有的 Unix Like 系統都會內建 vi 文書編輯器,其他的文書編輯器則不一定會存在。
連 vim 的官方網站 (//www.vim.org) 自己也說 vim 是一個程式開發工具而不是文字處理軟體。
三種使用模式
基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)。這三種模式的作用分別是:
命令模式:
用戶剛剛啟動 vi/vim,便進入了命令模式。
此狀態下敲擊鍵盤動作會被Vim識別為命令,而非輸入字元。比如我們此時按下i,並不會輸入一個字元,i被當作了一個命令。
以下是常用的幾個命令:
- i 切換到輸入模式,以輸入字元。
- x 刪除當前游標所在處的字元。
- : 切換到底線命令模式,以在最底一行輸入命令。
若想要編輯文本:啟動Vim,進入了命令模式,按下i,切換到輸入模式。
命令模式只有一些最基本的命令,因此仍要依靠底線命令模式輸入更多命令。
輸入模式:
在命令模式下按下i就進入了輸入模式。
在輸入模式中,可以使用以下按鍵:
- 字元按鍵以及Shift組合,輸入字元
- ENTER,回車鍵,換行
- BACK SPACE,退格鍵,刪除游標前一個字元
- DEL,刪除鍵,刪除游標後一個字元
- 方向鍵,在文本中移動游標
- HOME/END,移動游標到行首/行尾
- Page Up/Page Down,上/下翻頁
- Insert,切換游標為輸入/替換模式,游標將變成豎線/下劃線
- ESC,退出輸入模式,切換到命令模式
底線命令模式
在命令模式下按下:(英文冒號)就進入了底線命令模式。
底線命令模式可以輸入單個或多個字元的命令,可用的命令非常多。
在底線命令模式中,基本的命令有(已經省略了冒號):
- q 退出程式
- w 保存文件
按ESC鍵可隨時退出底線命令模式。
簡單的說,我們可以將這三個模式想成底下的圖標來表示:
上手體驗一下,在home目錄下測試
如果你想要使用 vi 來建立一個名為 kuangstudy.txt 的文件時,你可以這樣做:
[root@kuangshen home]# vim kuangstudy.txt
然後就會進入文件
按下 i 進入輸入模式(也稱為編輯模式),開始編輯文字
在一般模式之中,只要按下 i, o, a 等字元就可以進入輸入模式了!
在編輯模式當中,你可以發現在左下角狀態欄中會出現 –INSERT- 的字樣,那就是可以輸入任意字元的提示。
這個時候,鍵盤上除了 Esc 這個按鍵之外,其他的按鍵都可以視作為一般的輸入按鈕了,所以你可以進行任何的編輯。
按下 ESC 按鈕回到一般模式
好了,假設我已經按照上面的樣式給他編輯完畢了,那麼應該要如何退出呢?是的!沒錯!就是給他按下 Esc 這個按鈕即可!馬上你就會發現畫面左下角的 – INSERT – 不見了!
在一般模式中按下 :wq 儲存後離開 vim!
OK! 這樣我們就成功創建了一個 kuangstudy.txt 的文件。
Vim 按鍵說明
除了上面簡易範例的 i, Esc, :wq 之外,其實 vim 還有非常多的按鍵可以使用。
第一部分:一般模式可用的游標移動、複製粘貼、搜索替換等
移動游標的方法 | |
---|---|
h 或 向左箭頭鍵(←) | 游標向左移動一個字元 |
j 或 向下箭頭鍵(↓) | 游標向下移動一個字元 |
k 或 向上箭頭鍵(↑) | 游標向上移動一個字元 |
l 或 向右箭頭鍵(→) | 游標向右移動一個字元 |
[Ctrl] + [f] | 螢幕『向下』移動一頁,相當於 [Page Down]按鍵 (常用) |
[Ctrl] + [b] | 螢幕『向上』移動一頁,相當於 [Page Up] 按鍵 (常用) |
[Ctrl] + [d] | 螢幕『向下』移動半頁 |
[Ctrl] + [u] | 螢幕『向上』移動半頁 |
+ | 游標移動到非空格符的下一行 |
– | 游標移動到非空格符的上一行 |
n< space> | 那個 n 表示『數字』,例如 20 。按下數字後再按空格鍵,游標會向右移動這一行的 n 個字元。 |
0 或功能鍵[Home] | 這是數字『 0 』:移動到這一行的最前面字元處 (常用) |
$ 或功能鍵[End] | 移動到這一行的最後面字元處(常用) |
H | 游標移動到這個螢幕的最上方那一行的第一個字元 |
M | 游標移動到這個螢幕的中央那一行的第一個字元 |
L | 游標移動到這個螢幕的最下方那一行的第一個字元 |
G | 移動到這個檔案的最後一行(常用) |
nG | n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu) |
gg | 移動到這個檔案的第一行,相當於 1G 啊!(常用) |
n< Enter> | n 為數字。游標向下移動 n 行(常用) |
搜索替換 | |
---|---|
/word | 向游標之下尋找一個名稱為 word 的字元串。例如要在檔案內搜尋 vbird 這個字元串,就輸入 /vbird 即可!(常用) |
?word | 向游標之上尋找一個字元串名稱為 word 的字元串。 |
n | 這個 n 是英文按鍵。代表重複前一個搜尋的動作。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字元串,則按下 n 後,會向下繼續搜尋下一個名稱為 vbird 的字元串。如果是執行 ?vbird 的話,那麼按下 n 則會向上繼續搜尋名稱為 vbird 的字元串! |
N | 這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。例如 /vbird 後,按下 N 則表示『向上』搜尋 vbird 。 |
刪除、複製與粘貼 | |
---|---|
x, X | 在一行字當中,x 為向後刪除一個字元 (相當於 [del] 按鍵), X 為向前刪除一個字元(相當於 [backspace] 亦即是退格鍵) (常用) |
nx | n 為數字,連續向後刪除 n 個字元。舉例來說,我要連續刪除 10 個字元, 『10x』。 |
dd | 刪除游標所在的那一整行(常用) |
ndd | n 為數字。刪除游標所在的向下 n 行,例如 20dd 則是刪除 20 行 (常用) |
d1G | 刪除游標所在到第一行的所有數據 |
dG | 刪除游標所在到最後一行的所有數據 |
d$ | 刪除游標所在處,到該行的最後一個字元 |
d0 | 那個是數字的 0 ,刪除游標所在處,到該行的最前面一個字元 |
yy | 複製游標所在的那一行(常用) |
nyy | n 為數字。複製游標所在的向下 n 行,例如 20yy 則是複製 20 行(常用) |
y1G | 複製游標所在行到第一行的所有數據 |
yG | 複製游標所在行到最後一行的所有數據 |
y0 | 複製游標所在的那個字元到該行行首的所有數據 |
y$ | 複製游標所在的那個字元到該行行尾的所有數據 |
p, P | p 為將已複製的數據在游標下一行貼上,P 則為貼在游標上一行!舉例來說,我目前游標在第 20 行,且已經複製了 10 行數據。則按下 p 後, 那 10 行數據會貼在原本的 20 行之後,亦即由 21 行開始貼。但如果是按下 P 呢?那麼原本的第 20 行會被推到變成 30 行。(常用) |
J | 將游標所在行與下一行的數據結合成同一行 |
c | 重複刪除多個數據,例如向下刪除 10 行,[ 10cj ] |
u | 復原前一個動作。(常用) |
[Ctrl]+r | 重做上一個動作。(常用) |
第二部分:一般模式切換到編輯模式的可用的按鈕說明
進入輸入或取代的編輯模式 | |
---|---|
i, I | 進入輸入模式(Insert mode):i 為『從目前游標所在處輸入』, I 為『在目前所在行的第一個非空格符處開始輸入』。(常用) |
a, A | 進入輸入模式(Insert mode):a 為『從目前游標所在的下一個字元處開始輸入』, A 為『從游標所在行的最後一個字元處開始輸入』。(常用) |
o, O | 進入輸入模式(Insert mode):這是英文字母 o 的大小寫。o 為『在目前游標所在的下一行處輸入新的一行』;O 為在目前游標所在處的上一行輸入新的一行!(常用) |
r, R | 進入取代模式(Replace mode):r 只會取代游標所在的那一個字元一次;R會一直取代游標所在的文字,直到按下 ESC 為止;(常用) |
[Esc] | 退出編輯模式,回到一般模式中(常用) |
第三部分:一般模式切換到指令行模式的可用的按鈕說明
指令行的儲存、離開等指令 | |
---|---|
:w | 將編輯的數據寫入硬碟檔案中(常用) |
:w! | 若文件屬性為『只讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟你對該檔案的檔案許可權有關啊! |
:q | 離開 vi (常用) |
:q! | 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。 |
注意一下啊,那個驚嘆號 (!) 在 vi 當中,常常具有『強制』的意思~ | |
:wq | 儲存後離開,若為 :wq! 則為強制儲存後離開 (常用) |
ZZ | 這是大寫的 Z 喔!若檔案沒有更動,則不儲存離開,若檔案已經被更動過,則儲存後離開! |
:w [filename] | 將編輯的數據儲存成另一個檔案(類似另存新檔) |
:r [filename] | 在編輯的數據中,讀入另一個檔案的數據。亦即將 『filename』 這個檔案內容加到游標所在行後面 |
:n1,n2 w [filename] | 將 n1 到 n2 的內容儲存成 filename 這個檔案。 |
:! command | 暫時離開 vi 到指令行模式下執行 command 的顯示結果!例如 『:! ls /home』即可在 vi 當中看 /home 底下以 ls 輸出的檔案資訊! |
:set nu 設置行號,程式碼中經常會使用! | 顯示行號,設定之後,會在每一行的前綴顯示該行的行號 |
:set nonu | 與 set nu 相反,為取消行號! |
以上標黃的掌握熟練即可,其餘的了解即可,平時使用Vim最多的就是修改下文件內容而已!
帳號管理
簡介
Linux系統是一個多用戶多任務的分時作業系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個帳號,然後以這個帳號的身份進入系統。
用戶的帳號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,並為用戶提供安全性保護。
每個用戶帳號都擁有一個唯一的用戶名和各自的口令。
用戶在登錄時鍵入正確的用戶名和口令後,就能夠進入系統和自己的主目錄。
實現用戶帳號的管理,要完成的工作主要有如下幾個方面:
- 用戶帳號的添加、刪除與修改。
- 用戶口令的管理。
- 用戶組的管理。
用戶帳號的管理
用戶帳號的管理工作主要涉及到用戶帳號的添加、修改和刪除。
添加用戶帳號就是在系統中創建一個新帳號,然後為新帳號分配用戶號、用戶組、主目錄和登錄Shell等資源。
添加帳號 useradd
useradd 選項 用戶名
參數說明:
-
選項 :
-
- -c comment 指定一段注釋性描述。
- -d 目錄 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創建主目錄。
- -g 用戶組 指定用戶所屬的用戶組。
- -G 用戶組,用戶組 指定用戶所屬的附加組。
- -m 使用者目錄如不存在則自動建立。
- -s Shell文件 指定用戶的登錄Shell。
- -u 用戶號 指定用戶的用戶號,如果同時有-o選項,則可以重複使用其他用戶的標識號。
-
用戶名 :
-
- 指定新帳號的登錄名。
測試:
# 此命令創建了一個用戶kuangshen,其中-m選項用來為登錄名kuangshen產生一個主目錄 /home/kuangshen
[root@kuangshen home]# useradd -m kuangshen
增加用戶帳號就是在/etc/passwd文件中為新用戶增加一條記錄,同時更新其他系統文件如/etc/shadow, /etc/group等。
Linux下如何切換用戶
1.切換用戶的命令為:su username 【username是你的用戶名哦】
2.從普通用戶切換到root用戶,還可以使用命令:sudo su
3.在終端輸入exit或logout或使用快捷方式ctrl+d,可以退回到原來用戶,其實ctrl+d也是執行的exit命令
4.在切換用戶時,如果想在切換用戶之後使用新用戶的工作環境,可以在su和username之間加-,例如:【su – root】
$表示普通用戶
#表示超級用戶,也就是root用戶
刪除帳號
如果一個用戶的帳號不再使用,可以從系統中刪除。
刪除用戶帳號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還刪除用戶的主目錄。
刪除一個已有的用戶帳號使用userdel命令,其格式如下:
userdel 選項 用戶名
常用的選項是 -r,它的作用是把用戶的主目錄一起刪除。
[root@kuangshen home]# userdel -r kuangshen
此命令刪除用戶kuangshen在系統文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的記錄,同時刪除用戶的主目錄。
修改帳號
修改用戶帳號就是根據實際情況更改用戶的有關屬性,如用戶號、主目錄、用戶組、登錄Shell等。
修改已有用戶的資訊使用usermod命令,其格式如下:
usermod 選項 用戶名
常用的選項包括-c, -d, -m, -g, -G, -s, -u以及-o等,這些選項的意義與useradd命令中的選項一樣,可以為用戶指定新的資源值。
例如:
# usermod -s /bin/ksh -d /home/z –g developer kuangshen
此命令將用戶kuangshen的登錄Shell修改為ksh,主目錄改為/home/z,用戶組改為developer。
用戶口令的管理
用戶管理的一項重要內容是用戶口令的管理。用戶帳號剛創建時沒有口令,但是被系統鎖定,無法使用,必須為其指定口令後才可以使用,即使是指定空口令。
指定和修改用戶口令的Shell命令是passwd。超級用戶可以為自己和其他用戶指定口令,普通用戶只能用它修改自己的口令。
命令的格式為:
passwd 選項 用戶名
可使用的選項:
- -l 鎖定口令,即禁用帳號。
- -u 口令解鎖。
- -d 使帳號無口令。
- -f 強迫用戶下次登錄時修改口令。
如果默認用戶名,則修改當前用戶的口令。
例如,假設當前用戶是kuangshen,則下面的命令修改該用戶自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超級用戶,可以用下列形式指定任何用戶的口令:
# passwd kuangshen
New password:*******
Re-enter new password:*******
普通用戶修改自己的口令時,passwd命令會先詢問原口令,驗證後再要求用戶輸入兩遍新口令,如果兩次輸入的口令一致,則將這個口令指定給用戶;而超級用戶為用戶指定口令時,就不需要知道原口令。
為了系統安全起見,用戶應該選擇比較複雜的口令,例如最好使用8位長的口令,口令中包含有大寫、小寫字母和數字,並且應該與姓名、生日等不相同。
為用戶指定空口令時,執行下列形式的命令:
# passwd -d kuangshen
此命令將用戶 kuangshen的口令刪除,這樣用戶 kuangshen下一次登錄時,系統就不再允許該用戶登錄了。
passwd 命令還可以用 -l(lock) 選項鎖定某一用戶,使其不能登錄,例如:
# passwd -l kuangshen
用戶組管理
屬主、屬組
每個用戶都有一個用戶組,系統可以對一個用戶組中的所有用戶進行集中管理(開發、測試、運維、root)。不同Linux系統對用戶組的規定有所不同,如Linux下的用戶屬於與它同名的用戶組,這個用戶組在創建用戶時同時創建。
用戶組的管理涉及用戶組的添加、刪除和修改。組的增加、刪除和修改實際上就是對/etc/group文件的更新。
創建一個用戶組 groupadd
創建完用戶組後可以得到一個組的id,這個id是可以指定的! -g 520
,如果不指定就是自增 1
[root@iZwz94pp1jlrh60g51w9b8Z ~]# groupadd -g 520 kuangshen2
刪除用戶組
[root@iZwz94pp1jlrh60g51w9b8Z ~]# groupdel kuangshen2
[root@iZwz94pp1jlrh60g51w9b8Z ~]# cat /etc/group
修改用戶組的許可權資訊和名字 groupmod -g -n
[root@iZwz94pp1jlrh60g51w9b8Z ~]# groupmod -g 666 -n newkuangshen kuangshen # 修改狂神用戶組id為666,重命名為newkuangshen
用戶如果要切換用戶組怎麼辦呢?
# 登錄當前用戶 qinjiang
$ newgrp root
拓展:文件的查看!(了解即可)
/etc/passwd
用戶名:口令(登錄密碼,我們不可見):用戶標識號:組標識號:注釋性描述:主目錄:登錄Shell
這個文件中的每一行都代表這一個用戶,我們可以從這裡看出這個用戶的主目錄在那裡,可以看到屬於哪一個組!
登錄口令:把真正的加密後的用戶口令字存放到/etc/shadow文件中,保證我們密碼的安全性!
用戶組的所有資訊都存放在/etc/group文件中。
磁碟管理
df(列出文件系統整體的磁碟使用量) du(檢查磁碟空間使用量!)
df !
du ! (du -a 可以看到子文件夾;du -sm /* 檢查根目錄下每個目錄所佔用的容量)
Mac或者想使用Linux掛在我們的一些本地磁碟或者文件!
掛載:mount
[root@iZwz94pp1jlrh60g51w9b8Z /]# mount /dev/kuangshen /mnt/kuangshen #將外部設備kuangshen掛載到mnt目錄下,來實現訪問!
卸載:unmount -f [掛載位置] 強制卸載
除此之外,以後我們安裝了JDK,其實可以使用Java中的一些命令來查看資訊!
進程管理
Linux中一切皆文件
(文件:讀寫執行(查看,創建,刪除,移動,複製,編輯),許可權(用戶、用戶組)。系統:(磁碟,進程))
對於我們開發人員來說,其實Linux更多偏向於使用!
什麼是進程
- 在Linux中,每一個程式都是有自己的一個進程,每一個進程都有一個id號!
- 每一個進程都會有一個父進程!
- 進程可以有兩種存在方式:前台運行,後台運行!
- 一般的話服務都是後台運行的,基本的程式都是前台運行的!
命令
ps 查看當前系統中正在執行的各種進程的資訊!
ps-xx:
- -a 顯示當前終端運行的所有的進程資訊
- -u 以用戶的資訊顯示進程
- -x 顯示後台運行進程的參數!
# ps -aux 查看所有的進程
ps -aux|grep mysql
# | 在Linux這個叫做管道符 A|B
# grep 查找文件中符合條件的字元串!
對於我們來說,這裡目前只需要記住一個命令即可 ps -xx|grep 進程名字!過濾進程資訊!
ps -ef:可以查看到父進程的資訊
ps -ef|grep mysql # 看父進程我們一般可以通過目錄樹結構來查看!
# 進程樹!
pstree -pu
-p 顯示父id
-u 顯示用戶組
結束進程:殺掉進程,等價於windows結束任務!
kill -9 進程的id
但是,我們平時寫的一個Java程式碼死循環了,可以選擇結束進程!殺進程
kill -9 進程的id
表示強制結束該進程!
nohup
代表後台執行程式。
4、環境安裝
安裝軟體一般有三種方式:
- rpm(jdk:在線發布一個SpringBoot項目)
- 解壓縮(tomcat,啟動並通過外網訪問,發布網站)
- yum在線安裝(docker:直接安裝運行跑起來docker就可以!)!
JDK安裝
我們開發 Java 程式必須要的環境!
-
下載JDK rpm。去oracle官網
-
安裝 Java 環境
# 檢測當前系統是否存在java環境! java -version # 如果有的話就需要卸載 # rpm -qa|grep jdk # 監測JDK版本資訊 # rpm -e --nodeps [查出的完整jdk資訊] # 卸載完畢後即可安裝jdk # rpm -ivh [rpm包] # 配置環境變數!
卸載:
安裝:
-
配置環境變數
/etc/profile
在文件的最後面增加 Java 的配置和 Windows 安裝環境變數一樣!JAVA_HOME=/usr/java/jdk1.8.0_333-amd64 CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export JAVA_HOME CLASSPATH PATH
讓這個配置文件生效!
source /etc/profile
我們來發布一個項目試試!
# 開啟防火牆埠 firewall-cmd --zone=public --add-port=9000/tcp --permanent # 重啟防火牆 systemctl restart firewalld.service # 查看所有開啟的埠,如果是阿里雲,需要配置安全組規則! firewall-cmd --list-ports
Tomcat 安裝
ssm war 就需要放到tomcat 中運行!
-
下載tomcat。官網下載即可 tomcat9
apache-tomcat-9.0.63.tar.gz
-
解壓這個文件
tar -axvf apache-tomcat-9.0.63.tar.gz
-
啟動 tomcat 測試!
# 執行 ./startup.sh # 停止 ./shutdown.sh
如果防火牆8080埠開啟了,並且阿里雲安全組也開放了,這個時候就可以直接訪問遠程了!
# 查看firewall服務狀態 systemctl status firewalld # 開啟、重啟、關閉、firewalld.service服務 # 開啟 service firewalld start # 重啟 service firewalld restart # 關閉 service firewalld stop # 查看防火牆規則 firewall-cmd --list-all # 查看全部資訊 firewall-cmd --list-ports # 只看埠資訊 # 開啟埠 開埠命令:firewall-cmd --zone=public --add-port=80/tcp --permanent 重啟防火牆:systemctl restart firewalld.service 命令含義: --zone #作用域 --add-port=80/tcp #添加埠,格式為:埠/通訊協議 --permanent #永久生效,沒有此參數重啟後失效
上傳完畢的項目直接購買自己的域名,備案解析過去即可!
域名解析後,如果埠是80 -http 或者 443 -https 可以直接訪問,如果是 9000 8080,就需要通過Apache或者Nginx做一下反向代理即可,配置文件即可。
安裝Docker(yum安裝)
聯網的情況下 yum install -y yum源
官網安裝參考手冊://docs.docker.com/install/linux/docker-ce/centos/
我們現在是在Linux下執行,一定要聯網,yum在線安裝!
安裝
-
檢測CentOS 7
[root@iZwz94pp1jlrh60g51w9b8Z home]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
-
安裝我們的準備環境
yum -y install gcc yum -y install gcc-c++
-
卸載舊版本
yum -y remove docker docker-common docker-selinux docker-engine # 官網版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
安裝需要的軟體包
yum install -y yum-utils device-mapper-persistent-data lvm2
-
設置stable鏡像倉庫
# 正確推薦使用中國的 yum-config-manager --add-repo //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum軟體包索引
yum makecache fast
-
安裝Docker CE
yum -y install docker-ce docker-ce-cli containerd.io
-
啟動docker
systemctl start docker
-
測試
docker version docker run hello-world docker images
寶塔面板(懶人式安裝)
詳見伺服器購買、環境搭建及運行