Linux詳解(基礎、環境設定、專案部署入門)

2022-05-27 06:02:06

Linux(CentOS 7)作業系統

訊息佇列(Kafka、RabbitMQ、RocketMQ),快取(Redis),搜尋引擎(ES),叢集分散式(需要購買多臺伺服器,如果沒有伺服器我們就只能使用虛擬機器器)!

Linux一切皆檔案 :檔案就是 讀、寫、(許可權)

學習方式:

  1. 認識Linux
  2. 基本的命令(重點:Git講了一些基本的命令(檔案操作、目錄管理、檔案屬性、Vim編輯器、賬號管理、磁碟管理......))
  3. 軟體的安裝和部署!(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中沒有錯誤就代表操作成功!

系統目錄結構

  1. 一切皆檔案
  2. 根目錄 / ,所有的檔案都掛載在這個節點下

登入系統後,在當前命令視窗下輸入命令:

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。

修改檔案屬性

  1. chgrp:更改檔案屬組

    chgrp [-R] 屬組名 檔名
    

    -R:遞迴更改檔案屬組,就是在更改某個目錄檔案的屬組時,如果加上-R的引數,那麼該目錄下的所有檔案的屬組都會更改。

  2. chown:更改檔案屬主,也可以同時更改檔案屬組

    chown [–R] 屬主名 檔名
    chown [-R] 屬主名:屬組名 檔名
    
  3. 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: https://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: https://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 的官方網站 (http://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更多偏向於使用!

什麼是程序

  1. 在Linux中,每一個程式都是有自己的一個程序,每一個程序都有一個id號!
  2. 每一個程序都會有一個父程序!
  3. 程序可以有兩種存在方式:前臺執行,後臺執行!
  4. 一般的話服務都是後臺執行的,基本的程式都是前臺執行的!

命令

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 程式必須要的環境!

  1. 下載JDK rpm。去oracle官網

  2. 安裝 Java 環境

    # 檢測當前系統是否存在java環境! java -version
    # 如果有的話就需要解除安裝
    # rpm -qa|grep jdk  # 監測JDK版本資訊
    # rpm -e --nodeps [查出的完整jdk資訊]
    
    # 解除安裝完畢後即可安裝jdk
    # rpm -ivh [rpm包]
    
    # 設定環境變數!
    

    解除安裝:

    安裝:

  3. 設定環境變數 /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 中執行!

  1. 下載tomcat。官網下載即可 tomcat9 apache-tomcat-9.0.63.tar.gz

  2. 解壓這個檔案

    tar -axvf apache-tomcat-9.0.63.tar.gz
    

  3. 啟動 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源

官網安裝參考手冊:https://docs.docker.com/install/linux/docker-ce/centos/

我們現在是在Linux下執行,一定要聯網,yum線上安裝!

安裝

  1. 檢測CentOS 7

    [root@iZwz94pp1jlrh60g51w9b8Z home]# cat /etc/redhat-release
    CentOS Linux release 7.9.2009 (Core)
    
  2. 安裝我們的準備環境

    yum -y install gcc
    yum -y install gcc-c++
    
  3. 解除安裝舊版本

    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
    
  4. 安裝需要的軟體包

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  5. 設定stable映象倉庫

    # 正確推薦使用國內的
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  6. 更新yum軟體包索引

    yum makecache fast
    
  7. 安裝Docker CE

    yum -y install docker-ce docker-ce-cli containerd.io
    
  8. 啟動docker

    systemctl start docker
    
  9. 測試

    docker version
    
    docker run hello-world
    
    docker images
    

寶塔面板(懶人式安裝)

詳見伺服器購買、環境搭建及執行