1. 程式人生 > 實用技巧 >Mac編譯Android 8.1

Mac編譯Android 8.1

Linux概述

訊息對列(Kafka、RabbitMQ、RockeetMQ),快取(Redis),搜尋引擎(ES)

叢集分散式(需要購買多臺伺服器,如果沒伺服器我們就只能使用虛擬機器)

我們為什麼要學Linux

Linux的幾個優點

  1. 免費(這個是大多數人的喜歡的吧)
  2. 很多軟體原生是在Linux執行的,龐大的社群支援,生態環境好
  3. 開源,可被定製,開放,多使用者的網路作業系統
  4. 相對安全

LInux 簡述

Linux 核心最初只是由芬蘭人林納斯·託瓦茲(Linus Torvalds)在赫爾辛基大學上學時出於個人愛好而編寫的。

Linux 是一套免費使用和自由傳播的類 Unix 作業系統,是一個基於 POSIX(可移植作業系統介面) 和 UNIX 的多使用者、多工、支援多執行緒和多 CPU 的作業系統。

Linux 能執行主要的 UNIX 工具軟體、應用程式和網路協議。它支援 32 位和 64 位硬體。Linux 繼承了 Unix 以網路為核心的設計思想,是一個性能穩定的多使用者網路作業系統。

環境搭建

購買雲伺服器

雲伺服器就是一個遠端電腦,伺服器一般不會關機!

  1. 阿里雲伺服器購買地址:https://www.aliyun.com/minisite/goods?userCode=0phtycgr

  2. 購買完畢後,獲取伺服器的ip地址,重置伺服器密碼,就可以遠端登入了

    • 獲取公網IP地址!
    • 修改自己的登入密碼

    注意事項:

  3. 下載xShell工具,進行遠端連線使用!

這個就相當於一個個遠端電腦了,只不過都是命令列。

Ctrl + 滑鼠滾輪,可以放大縮小

可以用xftp上傳檔案

Linux系統基本命令

開機登入

開機會啟動許多程式。它們在Windows叫做"服務"(service),在Linux就叫做"守護程序"(daemon)。

開機成功後,它會顯示一個文字登入介面,這個介面就是我們經常看到的登入介面,在這個登入介面中會提示使用者輸入使用者名稱,而使用者輸入的使用者將作為引數傳給login程式來驗證使用者的身份,密碼是不顯示的,輸完回車即可!

一般來說,使用者的登入方式有三種:

  • 命令列登入
  • ssh登入
  • 圖形介面登入

最高許可權賬戶為 root,可以操作一切!

關機

關機指令: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

halt # 關閉系統,等同於shutdown –h now 和 poweroff
systemctl poweroff #關機

Linux系統目錄結構

根目錄 / ,所有的檔案都掛載在這個節點下

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

ls /  

樹狀目錄結構:

  • /binbin是Binary的縮寫,這個目錄存放著最經常使用的命令。

  • /bot:這裡存放的是啟動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的意思,這裡存放的是系統管理員使用的系統管理程式。

  • /selinux:這個目錄是Redhat/CentOS所特有的目錄,Selinux是一個安全機制,類似於windows的防火牆,但是這套機制比較複雜,這個目錄就是存放selinux相關的檔案的。

  • /srv:該目錄存放一些服務啟動之後需要提取的資料。

  • /sys: 這是linux2.6核心的一個很大的變化。該目錄下安裝了2.6核心中新出現的一個檔案系統 sysfs 。

  • /tmp:這個目錄是用來存放一些臨時檔案的。用完即丟的檔案,可以放在這個目錄下,比如:安裝包。

  • /usr
    這是一個非常重要的目錄,使用者的很多應用程式和檔案都放在這個目錄下,類似於windows下的program files目錄。

  • /usr/bin:統使用者使用的應用程式。

  • /usr/sbin:超級使用者使用的比較高階的管理程式和系統守護程式。(Super使用者管理)

  • /usr/src:核心原始碼預設的放置目錄。

  • /var:這個目錄中存放著在不斷擴充著的東西,我們習慣將那些經常被修改的目錄放在這個目錄下。包括各種日誌檔案。

  • /run:是一個臨時檔案系統,儲存系統啟動以來的資訊。當系統重啟時,這個目錄下的檔案應該被刪掉或清除。如果你的系統上有 /var/run 目錄,應該讓它指向 run。

  • /www:存放伺服器網站相關的資源,環境,網站的專案

常用的基本命令

目錄管理

cd 絕對路徑、相對路徑

絕對路徑為路徑的全稱。

cd:切換目錄命令!

./:當前目錄

cd .. :返回上一級目錄

ls (列出目錄)

-a引數:all,檢視全部的檔案,包括隱藏檔案

-l引數:列出所有的檔案,包括檔案的屬性和許可權,沒有隱藏檔案

所有的Linux命令可以組合使用,即 ls -al 就是檢視全部檔案,且列出所有的檔案屬性和許可權。

pwd顯示當前使用者所在的目錄!

[root@cyy ~]# pwd
/root
[root@cyy ~]# cd /bin
[root@cyy bin]# pwd
/bin

touch 建立一個檔案

[root@cyy home]# ls
redis  test  www
[root@cyy home]# touch do.txt	#也可以沒有後綴名
[root@cyy home]# ls
do.txt  redis  test  www

mkdir 建立一個目錄

[root@cyy /]# cd home/	#建立目錄
[root@cyy home]# ls
redis  www
[root@cyy home]# mkdir test
[root@cyy home]# ls
redis  test  www
[root@cyy home]# cd test
[root@cyy test]# cd ..
[root@cyy home]# mkdir -p test1/test2/test3  #建立多級目錄
[root@cyy home]# cd test1
[root@cyy test1]# ls
test2
[root@cyy test1]# cd test2/
[root@cyy test2]# ls
test3

rmdir 刪除目錄

rmdir僅能刪除空的目錄,如果下面存在檔案,需要先刪除檔案,遞迴刪除多個目錄加 -p 引數即可

cp(複製檔案或者目錄)

cp 原來的地方 拷貝到新的地方

root@cyy home]# ls
redis  test  test.txt  www
[root@cyy home]# cp test.txt test	#拷貝檔案至目錄
[root@cyy home]# ls
redis  test  test.txt  www
[root@cyy home]# cd test.txt 
-bash: cd: test.txt: Not a directory
[root@cyy home]# cd test
[root@cyy test]# ls
test.txt

rm(移除或者目錄!)

-f 忽略不存在的檔案,不會出現警告,強制刪除!

-r 遞迴刪除目錄!

-i 互動,刪除詢問是否刪除

rm -rf /* #系統中所有的檔案就被刪除了(非常危險!不要這樣做)
[root@cyy test]# ls
test.txt
[root@cyy test]# cd ..
[root@cyy home]# ls
redis  test  test.txt  www
[root@cyy home]# rm -rf test
[root@cyy home]# ls
redis  test.txt  www

mv 移動檔案或者目錄!(也可以重新命名資料夾)

-f 強制

-u 只替換已經更新過的檔案

[root@cyy home]# ls
redis  test.txt  www
[root@cyy home]# mkdir test
[root@cyy home]# rm test.txt test
rm: remove regular empty file ‘test.txt’? y
rm: cannot remove ‘test’: Is a directory
[root@cyy home]# ls
redis  test  www

Linux中的幫助命令:

  • 用來檢視Linux系統手冊上的幫助資訊:man命令

    [root@dawn home]# man 命令
    

    分屏顯示、按回車翻一行、按空格翻一頁、按q退出檢視。

  • 用來檢視命令的內建幫助資訊:help 命令

    [root@dawn home]# help 命令
    

    基本屬性

看懂檔案屬性

在Liunx中第一個字元代表這個檔案是目錄、檔案或連線檔案等等:

  • 當為[d]則是目錄
  • 當為[-]則是檔案;
  • 若是[I]則表示為連結文件(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"字元表示,則有執行許可權,如果用"-"字元表示,則沒有執行許可權。

檢視檔案或者目錄的許可權

ls -ahl	# h為human以人性化的方式顯示

修改檔案屬性

1、chgrp:更改檔案屬組(一般不要改)

chgrp -R 屬組名  檔名	# -R是遞迴修改目錄的所有者和所在的組

2、chown:更改檔案屬主,也可以同時更改檔案屬組(一般不用改)

chown -R 新屬主名 檔名	# -R是遞迴修改目錄的所有者和所在的組
chown -R 新屬主名:新屬組名 檔名

3、chmod:更改檔案9個屬性(重點)

chmod -r xyz 檔案或目錄

Linux檔案屬性有兩種設定方法,一種是數字(常用),一種是符號。

Linux檔案的基本許可權就有九個,分別是owner/group/others三種身份各有自己的read/write/execute許可權。

先複習一下剛剛上面提到的資料:檔案的許可權字元為:『-rwxrwxrwx』, 這九個許可權是三個三個一組的!其中,我們可以使用數字來代表各個許可權,各許可權的分數對照表如下:

r:4  	w:2  	x:1

chomd 777 檔案所有使用者可讀可寫可執行!

符號:
用u、g、o、a分別表示給所有者、同組使用者、其他組使用者、所有使用者修改許可權
用+、-、=分別給指定的使用者增加、減少、設定對應的許可權

chmod g-w,o+w t5.txt # 對同組使用者減少寫的許可權,對其他使用者組增加寫的許可權
chmod g=rwx t5.txt	# 對同組使用者設定讀寫可執行許可權
chmod a-r t5.txt	# 所有人減少讀的許可權

檔案內容檢視

Linux系統中使用一下命令來檢視檔案的內容(命令 + 檔名):

  • cat 由第一行開始顯示檔案內容(最常用)
  • tac 從最後一行開始顯示,可以看出tac是cat的倒著寫!
  • nl 顯示的時候,順道輸出行號!(常用)
  • more一頁一頁的顯示檔案內容(用空格鍵翻頁,Enter向下看一行,:f 顯示當前所在行)(常用)
  • less與more類似,但是比more更好的是,他可以往前翻頁!(用pageDown,pageUp鍵翻頁,上下鍵移動行,退出q命令,查詢字串: 用 / + 字串 這個是向下查詢, ? + 要查詢的字串 這個是向上查詢 ;n向下搜尋,N向上搜尋)
  • head只看頭幾行,通過-n引數來控制顯示前幾行
[root@cyy etc]# head -n 5 csh.login   #表示顯示前5行
# /etc/csh.login

# System wide environment and startup programs, for login setup

#add sbin directories to the path

  • tail 與head類似,只不過是倒著看幾行

網路配置目錄:cd /home/etc/sysconfig/network-scripts

ifconfig命令檢視網路配置!(windows系統是ipconfig)

Linux 連結的概念

Linux的連結分為兩種:硬連結、軟連結!

硬連結:A --B,假設B是A的硬連結,那麼他們兩個指向了同一個檔案!允許一個檔案擁有多個路徑。

軟連結:相當於Wind上的快捷方式,刪除了原始檔,快捷方式就訪問不了了

建立連結用In命令

ln + 原始檔 + 生成檔案    建立一個硬連結
ln -s + 原始檔 + 生成檔案  建立一個軟連結

echo輸出字串

[root@cyy home]# ls
do.txt  redis  test  www
[root@cyy home]# ln do.txt do2		#生成硬連結
[root@cyy home]# ls
do2  do.txt  redis  test  www
[root@cyy home]# ln -s do.txt do3   #生成軟連結
[root@cyy home]# ls
do2  do3  do.txt  redis  test  www
[root@cyy home]# echo "I Love U" >> do2   #向do2裡面輸入字串
[root@cyy home]# cat do2  
I Love U
[root@cyy home]# cat do3
I Love U

echo也可以輸出系統變數

[root@Dawn java]# echo $PATH
/usr/lib/jdk1.8.0_231/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@Dawn java]# echo $JAVA_HOME 
/usr/lib/jdk1.8.0_231

把前一個檢視命令的結果輸出到指定的檔案中:檢視命令 > 檔名

  • 如果目標檔案不存在,則新建一個檔案
  • 如果目標檔案已存在,則把以前的檔案內容覆蓋
[root@Dawn home]# ls
git  redis  ret.txt  www
[root@Dawn home]# ls > ret.txt
[root@Dawn home]# ls
git  redis  ret.txt  www
[root@Dawn home]# cat ret.txt
git
redis
ret.txt
www

刪除do.txt後

[root@cyy home]# ls
do2  do3  do.txt  redis  test  www
[root@cyy home]# rm -f do.txt 
[root@cyy home]# ls
do2  do3  redis  test  www
[root@cyy home]# cat do2 	#do2還可以正常檢視(硬連結)
I Love U
[root@cyy home]# cat do3	#do3不能檢視(軟連結)
cat: do3: No such file or directory

日期和時間的操作

  1. 檢視或者設定系統的日期或者時間:date

    [root@Dawn home]# date  	# 檢視系統當前時間的完整的日期和時間
    Wed Aug 12 20:21:16 CST 2020	
    [root@Dawn home]# date +%Y	# 檢視系統當前的年份
    2020
    [root@Dawn home]# date +%m	# 檢視系統當前的月份
    08
    [root@Dawn home]# date +%d	# 檢視系統當前的日期
    12
    [root@Dawn home]# date '+%Y-%m-%d %H:%M:%S' # 按yyyy-MM-dd HH:mm:ss格式顯示
    2020-08-12 20:22:42 
    [root@Dawn home]# date -S '2020-10-20 10:20:30' # 設定當前的系統時間
    
  2. 檢視日曆:cal

    [root@Dawn home]# cal # 檢視當前月份的日曆
         August 2020    
    Su Mo Tu We Th Fr Sa
                       1
     2  3  4  5  6  7  8
     9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31
    [root@Dawn home]# cal 2020	# 檢視指定年份的日曆
                                   2020                               
    
           January               February                 March       
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
              1  2  3  4                      1    1  2  3  4  5  6  7
     5  6  7  8  9 10 11    2  3  4  5  6  7  8    8  9 10 11 12 13 14
    12 13 14 15 16 17 18    9 10 11 12 13 14 15   15 16 17 18 19 20 21
    19 20 21 22 23 24 25   16 17 18 19 20 21 22   22 23 24 25 26 27 28
    26 27 28 29 30 31      23 24 25 26 27 28 29   29 30 31
    
            April                   May                   June        
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
              1  2  3  4                   1  2       1  2  3  4  5  6
     5  6  7  8  9 10 11    3  4  5  6  7  8  9    7  8  9 10 11 12 13
    12 13 14 15 16 17 18   10 11 12 13 14 15 16   14 15 16 17 18 19 20
    19 20 21 22 23 24 25   17 18 19 20 21 22 23   21 22 23 24 25 26 27
    26 27 28 29 30         24 25 26 27 28 29 30   28 29 30
                           31
            July                  August                September     
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
              1  2  3  4                      1          1  2  3  4  5
     5  6  7  8  9 10 11    2  3  4  5  6  7  8    6  7  8  9 10 11 12
    12 13 14 15 16 17 18    9 10 11 12 13 14 15   13 14 15 16 17 18 19
    19 20 21 22 23 24 25   16 17 18 19 20 21 22   20 21 22 23 24 25 26
    26 27 28 29 30 31      23 24 25 26 27 28 29   27 28 29 30
                           30 31
           October               November               December      
    Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                 1  2  3    1  2  3  4  5  6  7          1  2  3  4  5
     4  5  6  7  8  9 10    8  9 10 11 12 13 14    6  7  8  9 10 11 12
    11 12 13 14 15 16 17   15 16 17 18 19 20 21   13 14 15 16 17 18 19
    18 19 20 21 22 23 24   22 23 24 25 26 27 28   20 21 22 23 24 25 26
    25 26 27 28 29 30 31   29 30                  27 28 29 30 31
    
    

搜尋檔案或目錄命令

  1. find [搜尋範圍] [搜尋標準] 關鍵字
[root@Dawn home]# find *.txt 	# 搜尋當前目錄裡下所有的.txt檔案
cy.txt
[root@Dawn home]# find *e* 		#搜尋當前目錄下,所有的名稱中包含e的那些檔案或者目錄
redis
redis/.bash_logout
redis/.bash_profile
redis/.bashrc
[root@Dawn home]# find /etc *.txt	# 搜尋/etc目錄下所有.txt檔案
[root@Dawn home]# find /etc -size +5M	#搜尋/etc目錄下所有大於5M的檔案,小於用減號,等於不用符號
/etc/udev/hwdb.bin
[root@Dawn home]# find /etc -user zhangsan 	#搜尋/etc目錄下所有的所有者是zhangsan的檔案和目錄
  1. locate:在整棵目錄樹中搜索檔案或者目錄,都是根據名稱搜尋

    用之前先要updatedb (更新資料庫)

    [root@Dawn home]# updatedb
    [root@Dawn home]# locate *.txt
    
  2. 搜尋過濾命令,在前一個搜尋夢靈結果中進行按名稱進一步過濾:

    • 搜尋命令 | grep [選項] 過濾條件
    • 檢視命令 | grep [選項] 過濾條件
    [root@Dawn home]# find *.txt|grep new	#搜尋當前目錄下,所有包含new的.txt檔案
    

壓縮和解壓命令

  1. 壓縮或者解壓單個檔案:

    gzip 檔名:壓縮單個檔案,生產一個.gz的壓縮包,並且會把原來的檔案刪除。

    [root@Dawn home]# ls
    cy.txt  git  redis  www
    [root@Dawn home]# gzip cy.txt 
    [root@Dawn home]# ls
    cy.txt.gz  git  redis  www 
    

    gunzip 檔名: .gz壓縮包名:解壓.gz壓縮包,並且會把原來的.gz壓縮包刪除。

    [root@Dawn home]# ls
    cy.txt.gz  git  redis  www
    [root@Dawn home]# gunzip cy.txt.gz 
    [root@Dawn home]# ls
    cy.txt  git  redis  www
    
  2. 壓縮(打包)或者解壓多個檔案和目錄:

    zip 目標壓縮包名稱(通常使用.zip壓縮包) 檔案或者目錄列表 :

    [root@Dawn home]# ls
    cy.txt  git  redis  t1.txt  t2.txt  www
    [root@Dawn home]# zip test.zip *.txt
      adding: cy.txt (deflated 74%)
      adding: t1.txt (stored 0%)
      adding: t2.txt (stored 0%)
    [root@Dawn home]# ls
    cy.txt  git  redis  t1.txt  t2.txt  test.zip  www
    

    unzip 壓縮包名(.zip) -d 解壓目錄:將指定的.zip壓縮包解壓到當前目錄(或者指定目錄)

    [root@Dawn home]# unzip test.zip -d test
    Archive:  test.zip
      inflating: test/cy.txt             
     extracting: test/t1.txt             
     extracting: test/t2.txt             
    [root@Dawn home]# ls test
    cy.txt  t1.txt  t2.txt
    
  3. 壓縮(打包)或者解壓多個檔案和目錄:

    tar [選項] 目標壓縮包名稱

    • -z: 打包時同時壓縮
    • -c:產生.tar.gz打包檔案
    • -v:顯示詳細資訊
    • -f:指定壓縮後的檔名
    • -x:解壓
    • -C:指定解壓到哪個目錄

    解壓:tar -zcvf xxx.tar.gz 檔案或者目錄列表

    [root@Dawn home]# mkdir test5
    [root@Dawn home]# tar -zxvf mytar.tar.gz -C test5
    cy.txt
    test.zip
    test/
    test/t2.txt
    test/cy.txt
    test/t1.txt
    [root@Dawn home]# ls test5
    cy.txt  test  test.zip
    

    壓縮:tar -zxvf xxx.tar.gz -C解壓目錄名

    [root@Dawn home]# ls
    cy.txt  git  redis  t1.txt  t2.txt  test  test.zip  www
    [root@Dawn home]# tar -zcvf mytar.tar.gz cy.txt test.zip test
    cy.txt
    test.zip
    test/
    test/t2.txt
    test/cy.txt
    test/t1.txt
    [root@Dawn home]# ls
    cy.txt  git  mytar.tar.gz  redis  t1.txt  t2.txt  test  test.zip  www
    

Vim 編輯器

所有的 Unix Like 系統都會內建 vi 文書編輯器,其他的文書編輯器則不一定會存在。

但是目前我們使用比較多的是 vim 編輯器。

vim 具有程式編輯的能力,可以主動的以字型顏色辨別語法的正確性,方便程式設計。

Vim是從 vi 發展出來的一個文字編輯器。程式碼補完、編譯及錯誤跳轉等方便程式設計的功能特別豐富,在程式設計師中被廣泛使用。

簡單的來說, vi 是老式的字處理器,不過功能已經很齊全了,但是還是有可以進步的地方。 vim 則可以說是程式開發者的一項很好用的工具。

連 vim 的官方網站 (http://www.vim.org) 自己也說 vim 是一個程式開發工具而不是文書處理軟體。

vim 的使用

基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode)輸入模式(Insert mode)底線命令模式(Last line mode)。 這三種模式的作用分別是:

命令模式:

使用者剛剛啟動 vi/vim,便進入了命令模式。

此狀態下敲擊鍵盤動作會被Vim識別為命令,而非輸入字元。比如我們此時按下i,並不會輸入一個字元,i被當作了一個命令。

以下是常用的幾個命令:

  • i 切換到輸入模式,以輸入字元。

  • x 刪除當前游標所在處的字元。
  • : 切換到底線命令模式,以在最底一行輸入命令。(記得先退出編輯模式按Esc鍵退出)

若想要編輯文字:啟動Vim,進入了命令模式,按下i,切換到輸入模式。

命令模式只有一些最基本的命令,因此仍要依靠底線命令模式輸入更多命令。

輸入模式

在命令模式下按下i就進入了輸入模式。

在輸入模式中,可以使用以下按鍵:

  • 字元按鍵以及Shift組合,輸入字元
  • ENTER,回車鍵,換行
  • BACK SPACE,退格鍵,刪除游標前一個字元
  • DEL,刪除鍵,刪除游標後一個字元
  • 方向鍵,在文字中移動游標
  • HOME/END,移動游標到行首/行尾
  • Page Up/Page Down,上/下翻頁
  • Insert,切換游標為輸入/替換模式,游標將變成豎線/下劃線
  • ESC,退出輸入模式,切換到命令模式

底線命令模式

在命令模式下按下:(英文冒號)就進入了底線命令模式。

底線命令模式可以輸入單個或多個字元的命令,可用的命令非常多。

在底線命令模式中,基本的命令有(已經省略了冒號):

  • q 退出程式
  • w 儲存檔案(一般是wq配合使用

簡單的說,我們可以將這三個模式想成底下的圖示來表示:

vi/vim 按鍵說明

移動游標的方法
h 或 向左箭頭鍵(←) 游標向左移動一個字元
j 或 向下箭頭鍵(↓) 游標向下移動一個字元
k 或 向上箭頭鍵(↑) 游標向上移動一個字元
l 或 向右箭頭鍵(→) 游標向右移動一個字元
如果你將右手放在鍵盤上的話,你會發現 hjkl 是排列在一起的,因此可以使用這四個按鈕來移動游標。 如果想要進行多次移動的話,例如向下移動 30 行,可以使用 "30j" 或 "30↓" 的組合按鍵, 亦即加上想要進行的次數(數字)後,按下動作即可!
[Ctrl] + [f] 螢幕『向下』移動一頁,相當於 [Page Down]按鍵 (常用)
[Ctrl] + [b] 螢幕『向上』移動一頁,相當於 [Page Up] 按鍵 (常用)
[Ctrl] + [d] 螢幕『向下』移動半頁
[Ctrl] + [u] 螢幕『向上』移動半頁
+ 游標移動到非空格符的下一行
- 游標移動到非空格符的上一行
數字 + 空格 例如 20 < space > 則游標會向後面移動 20 個字元距離。
0 或功能鍵[Home] 這是數字『 0 』:移動到這一行的最前面字元處 (常用)
$ 或功能鍵[End] 移動到這一行的最後面字元處(常用)
H 游標移動到這個螢幕的最上方那一行的第一個字元
M 游標移動到這個螢幕的中央那一行的第一個字元
L 游標移動到這個螢幕的最下方那一行的第一個字元
G 移動到這個檔案的最後一行(常用)
nG n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu)
gg 移動到這個檔案的第一行,相當於 1G 啊! (常用)
數字+ < Enter > 例如 3 游標向下移動3行(常用)
搜尋替換
/word 向光標之下尋找一個名稱為 word 的字串。例如要在檔案內搜尋 vbird 這個字串,就輸入 /vbird 即可! (常用)
?word 向光標之上尋找一個字串名稱為 word 的字串。
n 這個 n 是英文按鍵。代表重複前一個搜尋的動作。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字串,則按下 n 後,會向下繼續搜尋下一個名稱為 vbird 的字串。如果是執行 ?vbird 的話,那麼按下 n 則會向上繼續搜尋名稱為 vbird 的字串!
N 這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。 例如 /vbird 後,按下 N 則表示『向上』搜尋 vbird 。
使用 /word 配合 n 及 N 是非常有幫助的!可以讓你重複的找到一些你搜尋的關鍵詞!
:n1,n2s/word1/word2/g n1 與 n2 為數字。在第 n1 與 n2 行之間尋找 word1 這個字串,並將該字串取代為 word2 !舉例來說,在 100 到 200 行之間搜尋 vbird 並取代為 VBIRD 則: 『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g:%s/word1/word2/g 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !(常用)
:1,$s/word1/word2/gc:%s/word1/word2/gc 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認 (confirm) 是否需要取代!(常用)
刪除、複製與貼上
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 重做,重做上一個動作。(常用)
這個 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 為止;(常用)
上面這些按鍵中,在 vi/vim 畫面的左下角處會出現『--INSERT--』或『--REPLACE--』的字樣。 由名稱就知道該動作了吧!!特別注意的是,我們上面也提過了,你想要在檔案裡面輸入字元時, 一定要在左下角處看到 INSERT 或 REPLACE 才能輸入喔!
[Esc] 退出編輯模式,回到一般模式中(常用)

第三部分:一般模式切換到指令行模式的可用的按鈕說明

指令行的儲存、離開等指令
:w 將編輯的資料寫入硬碟檔案中(常用)
:w! 若檔案屬性為『只讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟你對該檔案的檔案許可權有關啊!
:q 離開 vi (常用)
:q! 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。
注意一下啊,那個驚歎號 (!) 在 vi/vim 當中,常常具有『強制』的意思~
: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 相反,為取消行號!

賬號管理

在公司中,用的應該都不是root使用者!

簡介

Linux系統是一個多使用者多工的分時作業系統,任何一個要使用系統資源的使用者,都必須首先向系統管理員申請一個賬號,然後以這個賬號的身份進入系統。

使用者的賬號一方面可以幫助系統管理員對使用系統的使用者進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助使用者組織檔案,併為使用者提供安全性保護。

每個使用者賬號都擁有一個唯一的使用者名稱和各自的口令。

使用者在登入時鍵入正確的使用者名稱和口令後,就能夠進入系統和自己的主目錄。

實現使用者賬號的管理,要完成的工作主要有如下幾個方面:

  • 使用者賬號的新增、刪除與修改。
  • 使用者口令的管理。
  • 使用者組的管理。

使用者賬號的管理

使用者賬號的管理工作只要涉及到使用者賬號的天加、修改和刪除。

新增使用者賬號就是在系統中建立一個新賬號,然後為新賬號分配使用者號、使用者組、主目錄和登入Shell等資源。

useradd 命令 新增使用者

useradd -選項 使用者名稱

-m: 自動建立這個使用者的主目錄

[root@cyy home]# useradd -m Dawn 建立一個使用者
[root@cyy home]# ls
Dawn  redis  www

理解一下本質 :Linux中一切皆檔案,這裡的新增使用者說白了就是往莫一個檔案中寫入使用者的資訊(資訊在/etc/passwd)

刪除使用者 userdel

userdel -r Dawn 刪除使用者的時候將使用者的時候將他的目錄也一併刪除!

[root@cyy home]# ls
Dawn  redis  www
[root@cyy home]# userdel -r Dawn	#刪除使用者
[root@cyy home]# ls
redis  www

修改使用者 usermod

修改使用者 usermod 對應修改的內容 修改那個使用者

[root@cyy home]# usermod -d /home/cy dawn

修改完畢後檢視配置檔案即可!

切換使用者

root使用者

  1. 切換使用者的命令為:su + 使用者名稱
  2. 從普通使用者切換到root使用者,還可以使用命令:sudo su
  3. 在終端輸入exit或sogout或使用快捷方式ctrl + d ,可以退回到原來使用者,其實ctrl + d也是執行的exit命令
  4. 在切換使用者時,如果想在切換使用者之後使用新使用者的工作環境,可以在su和username之前加-,例如 :[su - root]

$表示普通使用者

表示超級使用者,也就是root使用者

hostname 檢視主機名

hostname + 使用者名稱 修改主機名

使用者的密碼設定

我們一般通過root建立使用者的時候!要配置密碼!(Linux上輸入密碼,密碼是不會顯示的,不是你的電腦卡了哦~)

如果是超級使用者的話用passwd + 使用者名稱 修改使用者密碼

如果是普通使用者直接passwd (然後輸入舊密碼,就可以輸入新密碼了)

鎖定賬戶!(也就是所謂的凍結賬戶)

passwd -l + 使用者名稱 鎖定之後這個使用者就不能登入了

passwd -d + 使用者名稱 -d是指不僅使用者名稱凍結了,密碼也刪除了。

passwd -u + 使用者名稱 解除鎖定

使用者組管理

每個使用者都有一個使用者組,系統可以對一個使用者組中的所有使用者進行集中管理。不同Linux 系統對使用者組的規定有所不同,如Linux下的使用者屬於與它同名的使用者組,這個使用者組在建立使用者時同時建立。

使用者組的管理涉及使用者組的新增、刪除和修改。組的增加、刪除和修改實際上就是對/etc/group檔案的更新。

建立一個使用者組 groupadd

[root@dawn home]# groupadd cc
[root@dawn home]# cat /etc/group #檢視使用者組

建立完使用者組後可以得到一個組的id,這個是可以指定的 -g 123 , 若不指定就是自增 1

刪除使用者組 groupdel

[root@dawn home]# groupdel cc	#刪除使用者組
[root@dawn home]# cat /etc/group #檢視使用者組

把使用者新增到組中: gpasswd - a 使用者名稱 組名

[root@dawn home]# gpasswd - a cc dev

把使用者從組中移除:gpasswd -d 使用者名稱 組名

[root@dawn home]# gpasswd -d cc dev

建立使用者時,指定所屬的組(主組):useradd -g 組名 使用者名稱

[root@dawn home]# useradd -g dev cc

修改使用者組的許可權資訊和名字 groupmod

使用者如果要切換使用者組怎麼辦?

$ newgrp root

與使用者賬號有關的系統檔案(拓展)

這個檔案對所有使用者都是可讀的。它的內容類似下面的例子:

# cat /etc/passwd

root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh

從上面的例子我們可以看到,/etc/passwd中一行記錄對應著一個使用者,每行記錄又被冒號(:)分隔為7個欄位,其格式和具體含義如下:

使用者名稱:口令(登入密碼,我們不可見):使用者標識號:組標識號:註釋性描述:主目錄:登入Shell

1)"使用者名稱"是代表使用者賬號的字串。

通常長度不超過8個字元,並且由大小寫字母和/或數字組成。登入名中不能有冒號(