1. 程式人生 > 程式設計 >Linux入門手冊

Linux入門手冊

Linux是一個基於POSIX和Unix的多使用者、多工、支援多執行緒和多CPU的效能穩定的作業系統,可免費使用並自由傳播。

Linux是眾多作業系統之一,目前流行的伺服器和 PC 端作業系統有 Linux、Windows、UNIX 等

Linux的創始人 Linus Torvalds 林納斯 (同時也是git的開發者)

linux-creater.png

Linux主要的發行版:

Ubuntu(烏班圖)、RedHat(紅帽)、CentOS、Debain[蝶變]、Fedora、SuSE、OpenSUSE

unix是怎麼來的

unix.png

理查德·斯托曼發起的GNU計劃

  • 在自由的時代使用者應該免費享有對軟體原始碼閱讀、修改的權利。

  • 軟體公司可以靠提供服務和訓練獲得盈利。

gnu.png

Linux和Unix的關係

linux-unix.png

(Redhat又衍生出兩個版本,redhat和centOS)

Refrences:

www.w3cschool.cn/linux/

c.biancheng.net/linux_tutor…

《鳥哥的Linux私房菜》 shouce.jb51.net/vbird-linux…

1.Linux的檔案許可權

在linux中的每個使用者必須屬於一個組,不能獨立於組外。在linux中每個檔案有所有者、所在組、其它組的概念

ls -al(l):

ls -l(別名ll 就可以檢視)

linux-ls.png

從左到又每一列的資訊依次為 許可權、 連線數、 所有者 、 使用者組 、 檔案容量 、 修改日期 、 檔名

第一列的十位字母代表的是檔案的型別和許可權,第一個字元代表這個檔案是“目錄、檔案或連結檔案等”含義:

  • d:代表是目錄

  • -:代表是檔案

  • l:代表是連線檔案

  • b:代表裝置檔案裡可供儲存的介面裝置

  • c:代表裝置檔案裡面的串列埠裝置。如鍵盤,滑鼠等

後邊9個字元,每3個字元為一組,“rwx”(可讀、可寫、可執行eXecute)這三個引數的組合,(rwx3者的順序不能改變,換句話說,第一個要麼是r,要麼啥都沒有,不能是w或者x),三個組合分別代表“檔案所有者的許可權”、“同用戶組的許可權”、“其他非本使用者組的許可權”。

linux-permission.png

許可權的重要性:

  • 系統保護的功能;

  • 團隊開發軟體或資料共享的功能;

改變檔案屬性和許可權:

  • chgrp: 改變檔案所屬使用者組(change group)

    • chgrp [-R] users 目錄或檔案 : 將這個路徑下的檔案的使用者組改成“users“
    • 這個新使用者組一定得是/etc/group下有的,否則會報錯。
    • 若最後一個引數是目錄,則表示只將這個目錄下的檔案的使用者組改成這個。
    • R表示若最後一個引數是目錄,則將當前目錄下的檔案連同子目錄下的所有檔案的使用者組都改成這個。
  • chown: 改變檔案所有者(change owner)

    • chown [-R] 使用者名稱 檔案或目錄 : 將這個目錄下的所有檔案的所有者都改成這個使用者名稱。
    • 這個使用者名稱必須是/etc/passwd下有的才行。
    • 這個命令可以既修改檔案主又修改使用者組:
    • chown [-R] 使用者名稱:使用者組名 目錄/檔案(:和 . 都可以)
    • chown [-R] 使用者名稱.使用者組名 目錄/檔案
    • 由於使用者名稱可以存在小數點,當出現含有小數點的使用者名稱時,系統會發生誤判,所以我們一般都使用:來連線使用者名稱和使用者組名。
    • 還可以僅修改使用者組名:chown [-R] .使用者組名 目錄/檔案
  • chmod: 改變檔案的許可權

    改變檔案的許可權有兩種方法:用數字或者符號進行許可權的修改

    1. 用數字進行許可權的修改

    ​ Linux檔案的基本許可權有9個,分別是owner、group、others三種身份各有自己的read、write、execute 許可權。在這種方式中,r=4、w=2、x=1,將每一組的三個值加起來,組成一個三位數即可。例如:

    ​ 檔案主:rwx = 4+2+1=7;

    ​ 同組使用者:rwx=4+2+1=7;

    ​ 其他人:---=0+0+0=0;

    ​ 所以命令如下:

    chmod [-R] 770 檔案/目錄

    1. 用符號進行許可權的修改

      用u、g、o 代表user、group、others三種身份的許可權,a 代表 all,也就是全部的身份。 +(加入),-(除去),=(設定)。

    chmod u/g/o/a +/-/= r/w/x 檔案/目錄

    ​ 例子:檔案主能夠讀、寫、執行;同組使用者和其他使用者能夠讀、執行。

    chmod u=rwx,go=rx 檔名

    ​ 假設原先不知道檔案的屬性,現在只想讓所有的人能夠執行這個檔案,則:

    chmod a+x 檔案/目錄

    ​ 假設原先不知道檔案的屬性,現在只想讓同組使用者和其他使用者無法寫,則:

    chmod go-w 檔案/目錄

目錄和檔案的許可權意義:

  • 許可權對檔案的意義.

    • r:代表可讀取此檔案的實際內容
    • w:代表可以編輯、新增或者修改檔案的內容(但是不包含刪除檔案)
    • x:代表該檔案具有可以被系統執行的許可權。<與windows不同,在Linux中判斷一個檔案是否可以執行,不是根據字尾名(如.exe ,.bat,.com),而是和這個檔案是否具有“x”許可權決定的。>
  • 許可權對目錄的意義

    • r:代表具有讀取目錄結構列表的許可權(你可以使用ls命令將目錄下的所有列表讀出來)

    • w:這個許可權對目錄來說可是很強大的,表示你具有更改該目錄結構列表的許可權

      主要有:

      • 新建新的檔案與目錄
      • 刪除已經存在的檔案或者目錄(無論檔案的許可權是怎樣的)
      • 將已經存在的檔案或者目錄重新命名
      • 轉移該目錄內的檔案、目錄位置
    • x:目錄雖然不可以被拿來執行,但是目錄的x代表的是使用者能否進入該目錄成為工作目錄的用途。(所謂工作目錄就是你當下的目錄,也就是時候,如果目錄不具有x許可權,那麼你就不能通過cd命令進入到該目錄下工作)。

能不能進入某一目錄,只與該目錄的x 許可權有關

Linux的單一檔案或者目錄的最大容許檔名為255個字元,包含完整路徑名記(/)的完整檔名為4096個字元。


2.Linux系統目錄結構

linux的檔案系統是採用級層式的樹狀目錄結構,在此結構中的最上層是根目錄“/”,然後在此目錄下再建立其他的目錄。在Linux世界裡,一切皆檔案

Linux系統目錄結構

登入系統後,在當前命令視窗下輸入 ls / 你會看到

linux-catalog.png

以下是對這些目錄的解釋:

/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 這個目錄是一個虛擬的目錄,它是系統記憶體的對映,我們可以通過直接訪問這個目錄來獲取系統資訊。這個目錄的內容不在硬碟上而是在記憶體裡,我們也可以直接修改裡面的某些檔案,比如可以通過下面的命令來遮蔽主機的ping命令,使別人無法ping你的機器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all。

/root 該目錄為系統管理員,也稱作超級許可權者的使用者主目錄。

/sbin s就是Super User的意思,這裡存放的是系統管理員使用的系統管理程式。

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

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

/sys 這是linux2.6核心的一個很大的變化。該目錄下安裝了2.6核心中新出現的一個檔案系統 sysfs ,sysfs檔案系統集成了下面3種檔案系統的資訊:針對程式資訊的proc檔案系統、針對裝置的devfs檔案系統以及針對偽終端的devpts檔案系統。該檔案系統是核心裝置樹的一個直觀反映。當一個核心物件被建立的時候,對應的檔案和目錄也在核心物件子系統中被建立。

/tmp 這個目錄是用來存放一些臨時檔案的。

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

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

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

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

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

在linux系統中,有幾個目錄是比較重要的,平時需要注意不要誤刪除或者隨意更改內部檔案。/etc: 上邊也提到了,這個是系統中的配置檔案,如果你更改了該目錄下的某個檔案可能會導致系統不能啟動。/bin,/sbin,/usr/bin,/usr/sbin: 這是系統預設的執行檔案的放置目錄,比如 ls 就是在/bin/ls 目錄下的。值得提出的是,/bin,/usr/bin 是給系統使用者使用的指令(除root外的通使用者),而/sbin,/usr/sbin 則是給root使用的指令。 /var: 這是一個非常重要的目錄,系統上跑了很多程式,那麼每個程式都會有相應的日誌產生,而這些日誌就被記錄到這個目錄下,具體在/var/log 目錄下,另外mail的預設放置也是在這裡。


3.Linux檔案與目錄操作

絕對路徑:

路徑的寫法,由根目錄 / 寫起,例如: /usr/share/doc 這個目錄。

相對路徑:

路徑的寫法,不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成: cd ../man 這就是相對路徑的寫法啦!

目錄的相關操作

ls(檢視檔案與目錄)

cd(切換目錄)

pwd(顯示當前所在目錄)

mkdir(建立新目錄)

mkdir 【-mp】目錄名稱

加了-p 引數,可以自行建立多層目錄, 加了-m,可以強制設定屬性。

mkdir test
mkdir -p test1/test2/test3/test4*
mkdir -m 711 test2(給予新目錄drwx--x--x的許可權)
複製程式碼

rmdir(刪除“空”目錄)

rmdir [-p] 目錄名稱(-p 可以連同上層空目錄一起刪除)

rmdir -p test1/test2/test3/test4
複製程式碼

cp(複製檔案或目錄)

cp [-adfilprsu] 原始檔(source) 目標檔案(destination
複製程式碼
  • -a:相當於-pdr的意思;

  • -i:若目標檔案已經存在且無法開啟,則刪除後再嘗試一次;

  • -p:連同檔案的屬性一起復制過去,而非使用預設屬性(備份常用);

  • -r:遞迴持續複製,用於目錄的複製行為

cp test testtest (將test檔案重新命名為testtest)
cp /var/log/wtmp .(複製到當前目錄.)
cp -r /etc/ /tmp(複製etc目錄下的所有內容到/tmp下,許可權可能被改變了)
複製程式碼

rm(移除檔案或目錄)

rm [-fir] 檔案或目錄
複製程式碼
  • -f:force的意思,忽略不存在的檔案,不會出現警告資訊;
  • -i:互動模式,在刪除前會詢問使用者是否操作;
  • -r:遞迴刪除,危險
#不能直接刪除目錄,刪除目錄的話需要加-r
rm -r /tmp/test (root使用者預設會加入-i引數,詢問,刪除的是test檔案,沒有刪除tmp)
touch  /tmp/aaa (新建空檔案aaa)
rm /tmp/aaa(直接刪除檔案aaa)
複製程式碼

mv(移動檔案與目錄,或更名)

mv [-fiu] source destination
複製程式碼
  • -f:force強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋;
  • -i:若目標檔案已經存在,就會詢問是否覆蓋;
  • -u:若目標檔案已經存在,且source比較新,才會更新;
mv aaa test(將檔案aaa移動到目錄test中)
mv test mytest(將test重新命名為mytest)
mv aaa bbb ccc test(將aaa、bbb、ccc多個原始檔或目錄全部移動到test目錄中)
複製程式碼

檔案內容查閱

cat:由第一行開始顯示檔案內容;

tac:從最後一行開始顯示,可以看出tac是cat的倒寫形式;

nl:顯示的時候,順便輸出行號;

more:一頁一頁的顯示檔案內容;

less:與more類似,但是可以往前翻頁;

head:只看開頭幾行;

tail:只看結尾幾行;

od:以二進位制的方式讀取檔案內容

直接檢視檔案內容 cat、tac、nl

cat(concatenate)

cat [-AbEnTv] 檔案
複製程式碼
  • -A:相當於-vET的整合引數,可列出一些特殊字元,而不是空白而已;

  • -b:列出行號,僅針對非空白行做行號顯示,空白行不標行號;

  • -E:將結尾用斷行字元 $ 顯示出來;

  • -n:打印出行號,連同空白行也會有行號,區別於-b;

  • -T:將Tab按鍵以^T顯示出來;

  • -v:列出一些看不出來的特殊字元

cat -n 檔案路徑 | tail -n +5 | head -n 6 // 顯示 5 ~ 10 行的內容, 包括5 和10

cat 檔案路徑 | head -n 10 | tail -n +5 //同上

tac(反向顯示)

nl(新增行號列印)

nl [-bnw] 檔案
複製程式碼

可翻頁檢視檔案內容 more和less

more(一頁一頁翻動)

linux-more.png

如果檔案內容較多,more 命令之後,會繼續等到後續操作

  • 空格鍵(Space):向下翻頁;
  • Enter:向下滾動一行;
  • /字串:在當前顯示內容中,向下查詢該字串;
  • :f:顯示出檔名以及目前顯示的行數;
  • q:直接離開more,不再顯示該檔案內容;
  • b:往回翻頁,只對檔案有用,對管道無用

less(一頁一頁翻動)

less可以用向上、下按鍵的功能前後翻頁,也可以向上查詢

  • 空格鍵(Space):向下翻頁;

  • [PageDown]:向下翻動一頁

  • [PageUp]:向上翻動一頁

  • Enter:向下滾動一行;

  • /字串:向下查詢該字串;

  • ?字串:向上查詢該字串;

  • n:重複前一個查詢(與/或?有關);

  • N:反向重複前一個查詢(與/或?有關);

  • q:直接離開less,不再顯示該檔案內容;

資料選取檢視 head和tail

head(取出前面幾行)

head [-n number] 檔案(預設顯示十行)
複製程式碼
  • -n:後邊接數字,代表顯示幾行的意思;

tail(取出後邊幾行)

tail [-n number] 檔案
tail [-f] 檔案
複製程式碼
  • -f:表示持續監測後邊所接的檔案內容,一般用於檢視日誌程式,按下[ctrl]+c才會結束檢測;

touch(修改檔案時間或者建立新檔案)

touch [-acdmt] 檔案
複製程式碼
  • -a:僅修改訪問時間;

  • -c:僅修改訪問時間,若該檔案不存在則不建立新檔案;

  • -d:後面可以接想要修改的日期而不用目前的日期;

  • -m:僅修改mtime;

  • -t:後面可以接想要修改的時間而不用目前的時間;


4.vim程式編輯器

在Linux的系統中使用文字編輯器來編輯Linux引數配置檔案是一件相當重要的事情,所以至少要熟悉一種文字編輯器。

那為什麼一定要學會vim呢。因為:

  • 所有的UNIX Like系統都會內建vi文字編輯器,其它的文字編輯器則不一定存在;
  • 很多軟體的編輯介面都會主動呼叫vi;
  • vim具有程式編輯的能力,可以主動以字型顏色辨別語法的正確性,方便程式設計;
  • 程式簡單,編輯速度相當快速。

vim 鍵盤圖:

linux-vim.png

vim其實可以視為vi的高階版本。

vi的使用

vi共分為3種模式,分別是一般模式、編輯模式和命令列模式。

一般模式

以vi開啟一個檔案就直接進入一般模式(預設的模式)。在這個模式中, 你可以使用『上下左右』按鍵來移動遊標,你可以使用『刪除字元』或『刪除整行』來處理檔案內容, 也可以使用『複製、貼上』來處理你的檔案資料。

編輯模式

在一般模式中可以進行刪除、複製、貼上等等的動作,但是卻無法編輯檔案內容的! 要等到你按下『i,I,o,O,a,A,r,R』等任何一個字母之後才會進入編輯模式。注意了!通常在 Linux 中,按下這些按鍵時,在畫面的左下方會出現『 INSERT 或 REPLACE 』的字樣,此時才可以進行編輯。而如果要回到一般模式時, 則必須要按下『Esc』這個按鍵即可退出編輯模式。

命令列模式

在一般模式當中,輸入『 : / ? 』三個中的任何一個按鈕,就可以將遊標移動到最底下那一行。在這個模式當中, 可以提供你『搜尋資料』的動作,而讀取、存檔、大量取代字元、離開 vi 、顯示行號等等的動作則是在此模式中達成的!

一般模式與編輯模式及命令列模式可以互相轉換,但編輯模式與命令列模式之間不可以互相轉換

按鍵說明

  • 第一部份:一般模式可用的按鈕說明,遊標移動、複製貼上、搜尋取代等
移動遊標的方法
h 或 向左箭頭鍵(←) 遊標向左移動一個字元
j 或 向下箭頭鍵(↓) 遊標向下移動一個字元
k 或 向上箭頭鍵(↑) 遊標向上移動一個字元
l 或 向右箭頭鍵(→) 遊標向右移動一個字元
如果你將右手放在鍵盤上的話,你會發現 hjkl 是排列在一起的,因此可以使用這四個按鈕來移動遊標。 如果想要進行多次移動的話,例如向下移動 30 行,可以使用 "30j" 或 "30↓" 的組合按鍵, 亦即加上想要進行的次數(數字)後,按下動作即可!
[Ctrl] + [f] 螢幕『向下』移動一頁,相當於 [Page Down]按鍵 (常用)
[Ctrl] + [b] 螢幕『向上』移動一頁,相當於 [Page Up] 按鍵 (常用)
[Ctrl] + [d] 螢幕『向下』移動半頁
[Ctrl] + [u] 螢幕『向上』移動半頁
+ 遊標移動到非空格符的下一列
- 遊標移動到非空格符的上一列
n 那個 n 表示『數字』,例如 20 。按下數字後再按空格鍵,遊標會向右移動這一行的 n 個字元。例如 20 則遊標會向後面移動 20 個字元距離。
0 或功能鍵[Home] 這是數字『 0 』:移動到這一行的最前面字元處 (常用)
$ 或功能鍵[End] 移動到這一行的最後面字元處(常用)
H 遊標移動到這個螢幕的最上方那一行的第一個字元
M 遊標移動到這個螢幕的中央那一行的第一個字元
L 遊標移動到這個螢幕的最下方那一行的第一個字元
G 移動到這個檔案的最後一行(常用)
nG n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu)
gg 移動到這個檔案的第一行,相當於 1G 啊! (常用)
n n 為數字。遊標向下移動 n 行(常用)
查詢與替換
/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 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !(常用)
:1,$s/word1/word2/gc 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認 (confirm) 是否需要取代!(常用)
刪除、複製和貼上
x,X 在一行字當中,x 為向後刪除一個字元 (相當於 [del] 按鍵), X 為向前刪除一個字元(相當於 [backspace] 亦即是退格鍵) (常用)
nx n 為數字,連續向後刪除 n 個字元。舉例來說,我要連續刪除 10 個字元, 『10x』。
dd 剪下遊標所在的那一行(常用)
D 刪除從當前遊標到遊標所在行尾的全部字元
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 行。 (常用) 貼上到遊標上一行(p),下一行(P)
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 畫面的左下角處會出現『--INSERT--』或『--REPLACE--』的字樣。 由名稱就知道該動作了吧!!特別注意的是,我們上面也提過了,你想要在檔案裡面輸入字元時, 一定要在左下角處看到 INSERT 或 REPLACE 才能輸入喔!
[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的功能

塊選擇

當我們按下v或者V或者【Ctrl】+v的時候,遊標移動過的地方會開始反白

塊選擇的按鍵意義
v 字元選擇,會將遊標經過的地方反白選擇!
V 行選擇,會將遊標經過的行反白選擇!
[Ctrl]+v 區塊選擇,可以用長方形的方式選擇資料
y 將反白的地方複製起來
d 將反白的地方刪除掉

多檔案編輯

我們可以使用vim後面同時接好幾個檔案來同時開啟

多檔案編輯的按鍵
:n 編輯下一個檔案
:N 編輯上一個檔案
:files 列出目前這個 vim 的開啟的所有檔案

多視窗功能

多視窗編輯按鍵
:sp [filename] 開啟一個新視窗,如果有加 filename, 表示在新視窗開啟一個新檔案,否則表示兩個視窗為同一個檔案內容(同步顯示)。
[ctrl]+w+ j[ctrl]+w+↓ 按鍵的按法是:先按下 [ctrl] 不放, 再按下 w 後放開所有的按鍵,然後再按下 j (或向下箭頭鍵),則遊標可移動到下方的視窗。
[ctrl]+w+ k[ctrl]+w+↑ 同上,不過遊標移動到上面的視窗。
[ctrl]+w+ q 其實就是 :q 結束離開啦! 舉例來說,如果我想要結束下方的視窗,那麼利用 [ctrl]+w+↓ 移動到下方視窗後,按下 :q 即可離開, 也可以按下 [ctrl]+w+q 啊!

5.linux磁碟管理

Linux磁碟管理好壞管理直接關係到整個系統的效能問題。

Linux磁碟管理常用三個命令為df、du和fdisk。

  • df:列出檔案系統的整體磁碟使用量
  • du:檢查磁碟空間使用量
  • fdisk:用於磁碟分割槽

df

df命令引數功能: 顯示指定磁碟檔案的可用空間。如果沒有檔名被指定,則所有當前被掛載的檔案系統的可用空間將被顯示 。可以利用該命令來獲取硬碟被佔用了多少空間,目前還剩下多少空間等資訊。

語法:

df [-ahikHTm] [目錄或檔名]

選項與引數:

  • -a :列出所有的檔案系統,包括系統特有的 /proc 等檔案系統;
  • -k :以 KBytes 的容量顯示各檔案系統;
  • -m :以 MBytes 的容量顯示各檔案系統;
  • -h :以人們較易閱讀的 GBytes,MBytes,KBytes 等格式自行顯示;
  • -H :以 M=1000K 取代 M=1024K 的進位方式;
  • -T :顯示檔案系統型別,連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出;
  • -i :不用硬碟容量,而以 inode 的數量來顯示

將容量結果以易讀的容量格式顯示出來

[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdc2             9.5G  3.7G  5.4G  41% /
/dev/hdc3             4.8G  139M  4.4G   4% /home
/dev/hdc1              99M   11M   83M  12% /boot
tmpfs                 363M     0  363M   0% /dev/shm
複製程式碼

du

Linux du命令也是檢視使用空間的,但是與df命令不同的是Linux du命令是對檔案和目錄磁碟使用的空間的檢視,還是和df命令有一些區別的,這裡介紹Linux du命令。

語法:

du [-ahskm] 檔案或目錄名稱

選項與引數:

  • -a :列出所有的檔案與目錄容量,因為預設僅統計目錄底下的檔案量而已。
  • -h :以人們較易讀的容量格式 (G/M) 顯示;
  • -s :列出總量而已,而不列出每個各別的目錄佔用容量;
  • -S :不包括子目錄下的總計,與 -s 有點差別。
  • -k :以 KBytes 列出容量顯示;
  • -m :以 MBytes 列出容量顯示;

例項 1

列出目前目錄下的所有檔案容量

[root@www ~]# du
8       ./test4     <==每個目錄都會列出來
8       ./test2
....中間省略....
12      ./.gconfd   <==包括隱藏檔案的目錄
220     .           <==這個目錄(.)所佔用的總量
複製程式碼

直接輸入 du 沒有加任何選項時,則 du 會分析當前所在目錄的檔案與目錄所佔用的硬碟空間。

例項 2

將檔案的容量也列出來

[root@www ~]# du -a
12      ./install.log.syslog   <==有檔案的列表了
8       ./.bash_logout
8       ./test4
8       ./test2
....中間省略....
12      ./.gconfd
220     .
複製程式碼

例項 3

檢查根目錄底下每個目錄所佔用的容量

[root@www ~]# du -sm /*
7       /bin
6       /boot
.....中間省略....
0       /proc
.....中間省略....
1       /tmp
3859    /usr     <==系統初期最大就是他了啦!
77      /var
複製程式碼

萬用字元 * 來代表每個目錄。

與 df 不一樣的是,du 這個命令其實會直接到檔案系統內去搜尋所有的檔案資料。

fdisk

fdisk 是 Linux 的磁碟分割槽表操作工具。

語法:

fdisk [-l] 裝置名稱

選項與引數:

  • -l :輸出後面接的裝置所有的分割槽內容。若僅有 fdisk -l 時, 則系統將會把整個系統內能夠搜尋到的裝置的分割槽均列出來。

磁碟格式化

磁碟分割完畢後自然就是要進行檔案系統的格式化,格式化的命令非常的簡單,使用 mkfs(make filesystem) 命令。

語法:

mkfs [-t 檔案系統格式] 裝置檔名

選項與引數:

  • -t :可以接檔案系統格式,例如 ext3,ext2,vfat 等(系統有支援才會生效)

磁碟檢驗

fsck(file system check)用來檢查和維護不一致的檔案系統。

若系統掉電或磁碟發生問題,可利用fsck命令對檔案系統進行檢查。

語法:

fsck [-t 檔案系統] [-ACay] 裝置名稱

選項與引數:

  • -t : 給定檔案系統的型式,若在 /etc/fstab 中已有定義或 kernel 本身已支援的則不需加上此引數
  • -s : 依序一個一個地執行 fsck 的指令來檢查
  • -A : 對/etc/fstab 中所有列出來的 分割槽(partition)做檢查
  • -C : 顯示完整的檢查進度
  • -d : 打印出 e2fsck 的 debug 結果
  • -p : 同時有 -A 條件時,同時有多個 fsck 的檢查一起執行
  • -R : 同時有 -A 條件時,省略 / 不檢查
  • -V : 詳細顯示模式
  • -a : 如果檢查有錯則自動修復
  • -r : 如果檢查有錯則由使用者回答是否修復
  • -y : 選項指定檢測每個檔案是自動輸入yes,在不確定那些是不正常的時候,可以執行 # fsck -y 全部檢查修復。

磁碟掛載與卸除

Linux 的磁碟掛載使用 mount 命令,解除安裝使用 umount 命令。

磁碟掛載語法:

mount [-t 檔案系統] [-L Label名] [-o 額外選項] [-n] 裝置檔名 掛載點

umount [-fn] 裝置檔名或掛載點

選項與引數:

  • -f :強制卸除!可用在類似網路檔案系統 (NFS) 無法讀取到的情況下;
  • -n :不升級 /etc/mtab 情況下卸除。

6.檔案與檔案系統的壓縮與打包

在linux環境中,壓縮檔案的副檔名大多是.tar,.tar.gz,.tgz,.gz,.Z,.bz2;

Linux支援的壓縮命令很多,且不同的命令所用的壓縮技術不同,彼此可能無法相互壓縮/解壓檔案。

*.Z         compress 程式壓縮的檔案;
*.zip       zip 程式壓縮的檔案;
*.gz        gzip 程式壓縮的檔案;
*.bz2       bzip2 程式壓縮的檔案;
*.xz        xz 程式壓縮的檔案;
*.tar       tar 程式打包的資料,並沒有壓縮過;
*.tar.gz    tar 程式打包的檔案,其中並且經過 gzip 的壓縮
*.tar.bz2   tar 程式打包的檔案,其中並且經過 bzip2 的壓縮
*.tar.xz    tar 程式打包的檔案,其中並且經過 xz 的壓縮
複製程式碼

gzip,zcat/zmore/zless/zgrep

gzip [-cdtv#] 檔名 壓縮檔案為 *.gz 的檔案,使用gzip壓縮後原始檔案就不再存在了

  • -c :將壓縮的資料輸出到螢幕上,可通過資料流重導向來處理;
  • -d :解壓縮的引數;
  • -t :可以用來檢驗一個壓縮檔案的一致性~看看檔案有無錯誤;
  • -v :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
  • -# :# 為數字的意思,代表壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6

zcat/zmore/zless/zgrep和cat/more等指令類似,檢視、查詢壓縮檔案

gzip test.txt   #壓縮test.txt檔案
gcat test.gz   #檢視test.gz檔案內容
gzip -d test.gz  #解壓檔案,和gunzip效果相同
zgrep -n 'http' services.gz  #http 這個關鍵字在哪幾行

gzip -c test > test.gz   #壓縮test,並保留原檔案

複製程式碼

bzip2,bzcat/bzmore/bzless/bzgrep

bzip2 [-cdkzv#] 檔名 bzip2 則是為了取代 gzip 並提供更佳的壓縮比而來的,用法和gzip幾乎相同

  • -c :將壓縮的過程產生的資料輸出到螢幕上!
  • -d :解壓縮的引數
  • -k :保留原始檔案,而不會刪除原始的檔案喔!
  • -z :壓縮的引數 (預設值,可以不加)
  • -v :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
  • -# :與 gzip 同樣的,都是在計算壓縮比的引數, -9 最佳, -1 最快!

tar

tar 打包指令,將多個檔案或目錄包成一個大檔案的指令

  • -c: 建立壓縮檔案
  • -x:解壓
  • -t:檢視內容
  • -r:向壓縮歸檔檔案末尾追加檔案
  • -u:更新原壓縮包中的檔案

這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的引數是根據需要在壓縮或解壓檔案時可選的。

  • -z:有gzip屬性的
  • -j:有bz2屬性的
  • -Z:有compress屬性的
  • -v:顯示所有過程
  • -O:將檔案解開到標準輸出
  • -f: 使用檔案名字,切記,這個引數是最後一個引數,且是必須的,後面只能接檔案名。
tar -cf all.tar *.jpg #將所有.jpg的檔案打成一個名為all.tar的包,-c是表示產生新的包,-f指定包的檔名

tar -rf all.tar *.gif   #將所有.gif的檔案增加到all.tar的包裡面去。-r是表示增加檔案的意思

tar -uf all.tar logo.gif #更新原來tar包all.tar中logo.gif檔案

tar -tf all.tar #列出all.tar包中所有檔案

tar -xf all.tar #解出all.tar包中所有檔案
複製程式碼

總結

1、*.tar 用 tar -xvf 解壓

2、*.gz 用 gzip -d或者gunzip 解壓

3、.tar.gz和.tgz 用 tar -xzf 解壓

4、*.bz2 用 bzip2 -d或者用bunzip2 解壓

5、*.tar.bz2用tar -xjf 解壓

6、*.Z 用 uncompress 解壓

7、*.tar.Z 用tar -xZf 解壓

8、*.rar 用 unrar e解壓

9、*.zip 用 unzip 解壓

解壓jdk到指定資料夾:

tar -xzvf jdk-8u131-linux-x64.tar.gz -C /usr/local/java
複製程式碼

8.軟體包管理

RPM

RPM概述

RPM(RedHat Package Manager),RedHat軟體包管理工具,類似windows裡面的setup.exe

是Linux這系列作業系統裡面的打包安裝工具,它雖然是RedHat的標誌,但理念是通用的。

RPM包的名稱格式: Apache-1.3.23-11.i386.rpm

  • “apache” 軟體名稱
  • “1.3.23-11”軟體的版本號,主版本和此版本
  • “i386”是軟體所執行的硬體平臺,Intel 32位微處理器的統稱
  • “rpm”副檔名,代表RPM包
RPM查詢命令(rpm -qa)

rpm -qa (功能描述:查詢所安裝的所有rpm軟體包)

由於軟體包比較多,一般都會採取過濾。rpm -qa | grep rpm軟體包

pm -qa |grep firefox  #查詢firefox軟體安裝情況
複製程式碼
RPM解除安裝命令(rpm -e)

rpm -e RPM軟體包

rpm -e --nodeps 軟體包

選項 功能
-e 解除安裝軟體包
--nodeps 解除安裝軟體時,不檢查依賴。這樣的話,那些使用該軟體包的軟體在此之後可能就不能正常工作了。
rpm -e firefox #解除安裝firefox軟體
複製程式碼
RPM安裝命令(rpm -ivh)

rpm -ivh RPM包全名

選項 功能
-i -i=install,安裝
-v -v=verbose,顯示詳細資訊
-h -h=hash,進度條
--nodeps --nodeps,不檢測依賴進度

YUM

YUM概述

YUM(全稱為Yellow dog Updater,Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

YUM的常用命令

yum [-y] [引數] -y表示對所有提問都回答“yes”

引數 功能
install 安裝rpm軟體包
update 更新rpm軟體包
check-update 檢查是否有可用的更新rpm軟體包
remove 刪除指定的rpm軟體包
list 顯示軟體包資訊
clean 清理yum過期的快取
deplist 顯示yum軟體包的所有依賴關係
修改網路YUM源

預設的系統YUM源,需要連線國外apache網站,網速比較慢,可以修改關聯的網路YUM源為國內映象的網站,比如網易163。

9.linux常用命令

常用快捷鍵 功能
ctrl + c 停止程式
ctrl+l 清屏;徹底清屏是:reset
ctrl + q 退出
善於用tab鍵 提示(更重要的是可以防止敲錯)
上下鍵 查詢執行過的命令
ctrl +alt linux和Windows之間切換

幫助命令

man 獲得幫助資訊

man [命令或配置檔案] (功能描述:獲得幫助資訊)

man ls
複製程式碼

help 獲得shell內建命令的幫助資訊

help 命令 (功能描述:獲得shell內建命令的幫助資訊)

[root@hadoop101 ~]# help cd
複製程式碼

檔案目錄類

cd 切換目錄

cd:Change Directory切換路徑

引數 功能
cd 絕對路徑 切換路徑
cd相對路徑 切換路徑
cd ~或者cd 回到自己的家目錄
cd - 回到上一次所在目錄
cd .. 回到當前目錄的上一級目錄
cd -P 跳轉到實際物理路徑,而非快捷方式路徑
mkdir 建立新目錄

mkdir [-p] 要建立的目錄

mkdir test  #建立test目錄
mkfir -p test/starfish   #建立多級目錄
複製程式碼
rmdir 刪除空目錄
rmdir test/starfish     #刪除test下的空資料夾starfish
複製程式碼
touch 建立空檔案
touch test/helloworld.txt   #test資料夾下建立helloworld.txt檔案
複製程式碼
cp 複製檔案或目錄

cp [-r] source dest 複製source檔案到dest

cp -r ~/home/sys/tmp/ .    #複製資料夾的所有檔案到當前目錄
複製程式碼
rm 移除檔案或目錄

rm [選項] deleteFile (功能描述:遞迴刪除目錄中所有內容)

選項 功能
-r 遞迴刪除目錄中所有內容
-f 強制執行刪除操作,而不提示用於進行確認。
-v 顯示指令的詳細執行過程
rm -rf dssz/   #遞迴刪除目錄中所有內容
複製程式碼
mv 移動檔案與目錄或重新命名

mv oldNameFile newNameFile (功能描述:重新命名)

mv /temp/movefile /targetFolder (功能描述:移動檔案)

mv tets.txt test.txt #重新命名
mv /home/star/test.txt .  #移動檔案到當前目錄
複製程式碼
cat 檢視檔案內容

cat [-n] 要檢視的檔案 可顯示行號檢視檔案

more 檔案內容分屏檢視器

more指令是一個基於VI編輯器的文字過濾器,它以全螢幕的方式按頁顯示文字檔案的內容。more指令中內建了若干快捷鍵,詳見操作說明。

more 要檢視的檔案

操作 功能說明
空白鍵(space) 代表向下翻一頁;
Enter 代表向下翻『一行』;
q 代表立刻離開more ,不再顯示該檔案內容。
Ctrl+F 向下滾動一屏
Ctrl+B 返回上一屏
= 輸出當前行的行號
:f 輸出檔名和當前行的行號
less 分屏顯示檔案內容

​ less指令用來分屏檢視檔案內容,它的功能與more指令類似,但是比more指令更加強大,支援各種顯示終端。less指令在顯示檔案內容時,並不是一次將整個檔案載入之後才顯示,而是根據顯示需要載入內容,對於顯示大型檔案具有較高的效率。

less 要檢視的檔案

操作 功能說明
空白鍵 向下翻動一頁;
[pagedown] 向下翻動一頁
[pageup] 向上翻動一頁;
/字串 向下搜尋『字串』的功能;n:向下查詢;N:向上查詢;
?字串 向上搜尋『字串』的功能;n:向上查詢;N:向下查詢;
q 離開less 這個程式;
echo 輸出內容到控制檯

echo [-e] [輸出內容] -e: 支援反斜線控制的字元轉換

控制字元 作用
\ 輸出\本身
\n 換行符
\t 製表符,也就是Tab鍵
[starfish:Technical-Learning$ echo -e "hello\tworld"

hello	world
複製程式碼
head 顯示檔案頭部內容

head用於顯示檔案的開頭部分內容,預設情況下head指令顯示檔案的前10行內容。

head 檔案 (功能描述:檢視檔案頭10行內容)

head -n 5 檔案 (功能描述:檢視檔案頭5行內容,5可以是任意行數)

tail 輸出檔案尾部內容

tail用於輸出檔案中尾部的內容,預設情況下tail指令顯示檔案的最後10行內容。

tail 檔案 (功能描述:檢視檔案頭10行內容)

tail -n 5 檔案 (功能描述:檢視檔案頭5行內容,5可以是任意行數)

tail -f 檔案 (功能描述:實時追蹤該檔案的所有更新)

輸出重定向和>> 追加

ls -l>檔案 (功能描述:列表的內容寫入檔案a.txt中(覆蓋寫))

ls -al >>檔案 (功能描述:列表的內容追加到檔案aa.txt的末尾)

cat 檔案1 > 檔案2 (功能描述:將檔案1的內容覆蓋到檔案2)

echo “內容” >> 檔案

2.案例實操

ls -l>houge.txt #將ls檢視資訊寫入到檔案中
ls -l>>houge.txt #將ls檢視資訊寫入到檔案中
echo hello>>houge.txt #採用echo將hello單詞追加到檔案中
複製程式碼
ln 軟連結

軟連結也成為符號連結,類似於windows裡的快捷方式,有自己的資料塊,主要存放了連結其他檔案的路徑。

ln -s [原檔案或目錄] [軟連結名] (功能描述:給原檔案建立一個軟連結)

history 檢視已經執行過歷史命令

history (功能描述:檢視已經執行過歷史命令)

時間日期類

date [OPTION]... [+FORMAT]

選項 功能
-d<時間字串> 顯示指定的“時間字串”表示的時間,而非當前時間
-s<日期時間> 設定系統日期時間
引數 功能
<+日期時間格式> 指定顯示時使用的日期時間格式
date 顯示當前時間

date (功能描述:顯示當前時間)

date +%Y (功能描述:顯示當前年份)

date +%m (功能描述:顯示當前月份)

date +%d (功能描述:顯示當前是哪一天)

date "+%Y-%m-%d %H:%M:%S" (功能描述:顯示年月日時分秒)

date -d '1 days ago' (功能描述:顯示前一天時間)

date -d '-1 days ago' (功能描述:顯示明天時間)

cal 檢視日曆

cal [具體某一年] (功能描述:不加選項,顯示本月日曆)

cal 2019  #顯示2019年日曆
複製程式碼

使用者管理命令

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

使用者和組的相關檔案

/etc/passwd檔案

使用者(user)的配置檔案,記錄使用者的各種資訊

每行的含義:使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:登入Shell

linux-passwd.png

/etc/shadow 檔案

口令的配置檔案

每行的含義:登入名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:保留

linux-shadow.png

/etc/group檔案

組(group)的配置檔案,記錄Linux包含的組的資訊

每行含義:組名:口令:組標識號:組內使用者列表

linux-group.png

useradd 新增新使用者

useradd 使用者名稱 (功能描述:新增新使用者)

useradd -g 組名使用者名稱 (功能描述:新增新使用者到某個組)

passwd 設定使用者密碼

passwd 使用者名稱 (功能描述:設定使用者密碼)

id 檢視使用者是否存在

id 使用者名稱

cat /etc/passwd 檢視建立了哪些使用者
cat  /etc/passwd
複製程式碼
su 切換使用者

su 使用者名稱稱 (功能描述:切換使用者,只能獲得使用者的執行許可權,不能獲得環境變數)

su - 使用者名稱稱 (功能描述:切換到使用者並獲得該使用者的環境變數及執行許可權)

  • 從許可權高的使用者切換到許可權低的使用者,不需要輸入密碼,反之需要。

  • 當需要返回到原來使用者時,使用exit指令

  • 如果su – 沒有帶使用者名稱,則預設切換到root使用者

userdel 刪除使用者

userdel 使用者名稱 (功能描述:刪除使用者但儲存使用者主目錄)

userdel -r 使用者名稱 (功能描述:使用者和使用者主目錄都刪除,刪除使用者的同時,刪除與使用者相關的所有檔案)

who 檢視登入使用者資訊

whoami (功能描述:顯示自身使用者名稱稱)

who am i (功能描述:顯示登入使用者的使用者名稱)

sudo 設定普通使用者具有root許可權

1.新增sysnc360使用者,並對其設定密碼。

useradd sysnc360
passwd sysnc360
複製程式碼

2.修改配置檔案

vi /etc/sudoers
複製程式碼

修改/etc/sudoers 檔案,找到下面一行(91行),在root下面新增一行,如下所示:

## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
sysnc360   ALL=(ALL)    ALL
複製程式碼

或者配置成採用sudo命令時,不需要輸入密碼

## Allow root to run any commands anywhere
root      ALL=(ALL)     ALL
sysnc360   ALL=(ALL)    NOPASSWD:ALL
複製程式碼

修改完畢,現在可以用sysnc360帳號登入,然後用命令sudo ,即可獲得root許可權進行操作。

sudo mkdir module  #用普通使用者在/opt目錄下建立一個資料夾
chown atguigu:atguigu module/
複製程式碼
usermod 修改使用者

usermod -g 使用者組使用者名稱

選項 功能
-g 修改使用者的初始登入組,給定的組必須存在。預設組id是1。
usermod -g root starfish #將使用者加入到使用者組
複製程式碼

使用者組管理命令

每個使用者都有一個使用者組,系統可以對一個使用者組中的所有使用者進行集中管理。不同Linux 系統對使用者組的規定有所不同,

如Linux下的使用者屬於與它同名的使用者組,這個使用者組在建立使用者時同時建立。

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

groupadd 新增組

groupadd 組名

groupdel 刪除組

groupdel 組名

groupmod 修改組

groupmod -n 新組名 老組名

groupmod -n sysnc360 starfish #修改sysnc360組名稱為starfish
複製程式碼
cat /etc/group 檢視建立了哪些組
cat  /etc/group
複製程式碼

檔案許可權操作

chmod 改變許可權

chmod [{ugoa}{+-=}{rwx}] 檔案或目錄

chmod [mode=421 ] [檔案或目錄]

經驗技巧

​ u:所有者 g:所有組 o:其他人 a:所有人(u、g、o的總和)

r=4 w=2 x=1 rwx=4+2+1=7

chmod u+x test.txt #修改檔案使其所屬主使用者具有執行許可權

chmod g+x test.txt #修改檔案使其所屬組使用者具有執行許可權

chmod u-x,o+x test.txt #修改檔案所屬主使用者執行許可權,並使其他使用者具有執行許可權

chmod 777 test.txt #採用數字的方式,設定檔案所有者、所屬組、其他使用者都具有可讀可寫可執行許可權

chmod -R 777 test/ #採用數字的方式,設定檔案所有者、所屬組、其他使用者都具有可讀可寫可執行許可權
複製程式碼
chown 改變所有者

chown [-r] [終端使用者] [檔案或目錄] (功能描述:改變檔案或者目錄的所有者)

chgrp 改變所屬組

chgrp [終端使用者組] [檔案或目錄] (功能描述:改變檔案或者目錄的所屬組)

搜尋查詢類

find 查詢檔案或者目錄

find指令將從指定目錄向下遞迴地遍歷其各個子目錄,將滿足條件的檔案顯示在終端。

find [搜尋範圍] [選項]

選項 功能
-name<查詢方式> 按照指定的檔名查詢模式查詢檔案
-user<使用者名稱> 查詢屬於指定使用者名稱所有檔案
-size<檔案大小> 按照指定的檔案大小查詢檔案。

按檔名:

find opt/ -name *.txt #根據名稱查詢/目錄下的filename.txt檔案
find opt/ -user test #查詢/opt目錄下,使用者名稱稱為-user的檔案
find /home -size +204800 #在/home目錄下查詢大於200m的檔案(+n 大於  -n小於   n等於)
複製程式碼
locate快速定位檔案路徑

locate指令利用事先建立的系統中所有檔名稱及路徑的locate資料庫實現快速定位給定的檔案。Locate指令無需遍歷整個檔案系統,查詢速度較快。為了保證查詢結果的準確度,管理員必須定期更新locate時刻。

locate 搜尋檔案

經驗技巧:由於locate指令基於資料庫進行查詢,所以第一次執行前,必須使用updatedb指令建立locate資料庫。

updatedb
locate tmp
複製程式碼
grep 過濾查詢及“|”管道符

管道符,“|”,表示將前一個命令的處理結果輸出傳遞給後面的命令處理

grep [-n] 查詢內容原始檔(-n可顯示行號)

壓縮和解壓類

gzip/gunzip 壓縮

gzip 檔案 (功能描述:壓縮檔案,只能將檔案壓縮為*.gz檔案)

gunzip 檔案.gz (功能描述:解壓縮檔案命令)

經驗技巧

  • 只能壓縮檔案不能壓縮目錄

  • 不保留原來的檔案

zip/unzip 壓縮

zip [選項] XXX.zip 將要壓縮的內容 (功能描述:壓縮檔案和目錄的命令)

unzip [選項] XXX.zip (功能描述:解壓縮檔案)

zip選項 功能
-r 壓縮目錄
unzip選項 功能
-d<目錄> 指定解壓後檔案的存放目錄

經驗技巧

zip 壓縮命令在window/linux都通用,可以壓縮目錄且保留原始檔。

tar 打包

tar [選項] XXX.tar.gz 將要打包進去的內容 (功能描述:打包目錄,壓縮後的檔案格式.tar.gz)

選項 功能
-c 產生.tar打包檔案
-v 顯示詳細資訊
-f 指定壓縮後的檔名
-z 打包同時壓縮
-x 解包.tar檔案
tar -zcvf houma.tar.gz aa.txt bb.txt  #壓縮檔案aa和bb
tar -zcvf test.tar.gz test/ #壓縮目錄
tar -zxvf test.tar.gz #解壓到當前目錄
tar -zxvf test.tar.gz -C /opt #解壓到指定目錄
複製程式碼

磁碟分割槽類

df 檢視磁碟空間使用情況 df: disk free 空餘硬碟

df 選項(功能描述:列出檔案系統的整體磁碟使用量,檢查檔案系統的磁碟空間佔用情況)

選項 功能
-h 以人們較易閱讀的GBytes,KBytes 等格式自行顯示;
df -h #檢視磁碟使用情況
du -h /目錄  #查詢指定目錄的磁碟佔用情況
複製程式碼
fdisk 檢視分割槽

fdisk -l (功能描述:檢視磁碟分割槽詳情,該命令必須在root使用者下才能使用)

功能說明

  • Linux分割槽(類比wins的C,D,E盤)
    • Device:分割槽序列
    • Boot:引導
    • Start:從X磁柱開始
    • End:到Y磁柱結束
    • Blocks:容量
    • Id:分割槽型別ID
    • System:分割槽型別
mount/umount 掛載/解除安裝

對於Linux使用者來講,不論有幾個分割槽,分別分給哪一個目錄使用,它總歸就是一個根目錄、一個獨立且唯一的檔案結構。

Linux中每個分割槽都是用來組成整個檔案系統的一部分,它在用一種叫做“掛載”的處理方法,它整個檔案系統中包含了一整套的檔案和目錄,並將一個分割槽和一個目錄聯絡起來,要載入的那個分割槽將使它的儲存空間在這個目錄下獲得。

mount [-t vfstype] [-o options] device dir(功能描述:掛載裝置)

umount裝置檔名或掛載點 (功能描述:解除安裝裝置)

引數 功能
-t vfstype 指定檔案系統的型別,通常不必指定。mount 會自動選擇正確的型別。常用型別有:光碟或光碟映象:iso9660DOS fat16檔案系統:msdosWindows 9x fat32檔案系統:vfatWindows NT ntfs檔案系統:ntfsMount Windows檔案網路共享:smbfsUNIX(LINUX) 檔案網路共享:nfs
-o options 主要用來描述裝置或檔案的掛接方式。常用的引數有:loop:用來把一個檔案當成硬碟分割槽掛接上系統ro:採用只讀方式掛接裝置rw:採用讀寫方式掛接裝置  iocharset:指定訪問檔案系統所用字符集
device 要掛接(mount)的裝置
dir 裝置在系統上的掛接點(mount point)

程式執行緒類

  1. 在LINUX中,每個執行的**程式(程式碼)**都稱為一個程式。每一個程式都分配一個ID號。
  2. 每一個程式,都會對應一個父程式,而這個父程式可以複製多個子程式。例如www伺服器。
  3. 每個程式都可能以兩種方式存在的。前****臺後臺,所謂前臺程式就是使用者目前的螢幕上可以進行操作的。後臺程式則是實際在操作,但由於螢幕上無法看到的程式,通常使用後臺方式執行[sshd,crond]。
  4. 一般系統的服務都是以後臺程式的方式存在,而且都會常駐在系統中。直到關機才才結束。
ps 檢視當前系統程式狀態

ps:process status 程式狀態

ps aux | grep xxx (功能描述:檢視系統中所有程式)

ps -ef| grep xxx (功能描述:可以檢視子父程式之間的關係)

選項 功能
-a 選擇所有程式
-u 顯示所有使用者的所有程式
-x 顯示沒有終端的程式

3.功能說明

(1)ps aux顯示資訊說明

  • USER:該程式是由哪個使用者產生的
  • PID:程式的ID號
  • %CPU:該程式佔用CPU資源的百分比,佔用越高,程式越耗費資源;
  • %MEM:該程式佔用實體記憶體的百分比,佔用越高,程式越耗費資源;
  • VSZ:該程式佔用虛擬記憶體的大小,單位KB;
  • RSS:該程式佔用實際實體記憶體的大小,單位KB;
  • TTY:該程式是在哪個終端中執行的。其中tty1-tty7代表本地控制檯終端,tty1-tty6是本地的字元介面終端,tty7是圖形終端。pts/0-255代表虛擬終端。
  • STAT:程式狀態。常見的狀態有:R:執行、S:睡眠、T:停止狀態、s:包含子程式、+:位於後臺
  • START:該程式的啟動時間
  • TIME:該程式佔用CPU的運算時間,注意不是系統時間
  • COMMAND:啟動程式所用的命令和引數,如果過長會被截斷顯示

(2)ps -ef顯示資訊說明

  • UID:使用者ID
  • PID:程式ID
  • PPID:父程式ID
  • C:CPU用於計算執行優先順序的因子。數值越大,表明程式是CPU密集型運算,執行優先順序會降低;數值越小,表明程式是I/O密集型運算,執行優先順序會提高
  • STIME:程式啟動的時間
  • TTY:完整的終端名稱
  • TIME:CPU時間
  • CMD:啟動程式所用的命令和引數

如果想檢視程式的CPU佔用率和記憶體佔用率,可以使用aux;

如果想檢視程式的父程式ID可以使用ef;

ps aux|grep java

ps -ef|grep tomcat
複製程式碼
kill 終止程式

kill [-9] 程式號 (功能描述:通過程式號殺死程式,-9表示強迫程式立即停止)

killall 程式名稱 (功能描述:通過程式名稱殺死程式,也支援萬用字元,這在系統因負載過大而變得很慢時很有用)

pstree 檢視程式樹

pstree [選項]

選項 功能
-p 顯示程式的PID
-u 顯示程式的所屬使用者
Pstree -p #用樹狀的形式顯示程式的pid 
Pstree –u #用樹狀的形式程式的使用者id
複製程式碼

服務管理

服務(service) 本質就是程式,但是是執行在後臺的,通常都會監聽某個埠,等待其它程式的請求,比如(mysql,sshd 防火牆等),因此我們又稱為守護程式

service管理指令:

service 服務名 [start | stop | restart | reload | status]

在CentOS7.0後 不再使用service,而是 systemctl

service iptables status #檢視當前防火牆的狀況
service  iptables  stop #關閉或者啟用防火牆後,立即生效(臨時生效,重啟後恢復)
service iptables start

複製程式碼

服務的執行級別(runlevel):

檢視或者修改預設級別: vi /etc/inittab

Linux系統有7種執行級別(runlevel):常用的是級別3和5

  • **執行級別0:**系統停機狀態,系統預設執行級別不能設為0,否則不能正常啟動
  • **執行級別1:**單使用者工作狀態,root許可權,用於系統維護,禁止遠端登陸
  • **執行級別2:**多使用者狀態(沒有NFS),不支援網路
  • **執行級別3:**完全的多使用者狀態(有NFS),登陸後進入控制檯命令列模式
  • **執行級別4:**系統未使用,保留
  • **執行級別5:**X11控制檯,登陸後進入圖形GUI模式
  • 執行級別6:系統正常關閉並重啟,預設執行級別不能設為6,否則不能正常啟動

開機的流程說明:

linux-runlevel.png

chkconfig指令

通過chkconfig命令可以給每個服務的各個執行級別設定自啟動/關閉

基本語法

1) 檢視服務 chkconfig --list|grep xxx

2) chkconfig 服務名 --list

  1. chkconfig --level 5 服務名 on/off [可以指定某個服務,某各個執行級別,開啟或關閉]
chkconfig –level 1 sshd off/on #sshd 服務在 1 執行級別 off
複製程式碼
  1. chkconfig 服務名 on/off
chkconfig iptables off #  iptables 徹底關閉,不管是哪個級別都關閉

chkconfig --list   #顯示當前系統所有服務的各個執行級別的執行狀態 
複製程式碼
top 檢視系統健康狀態

top與ps命令很相似。它們都用來顯示正在執行的程式。top與ps最大的不同之處,在於top在執行一段時間可以更新正在執行的的程式(預設每3秒變化一次)

top [選項]

選項 功能
-d 秒數 指定top命令每隔幾秒更新。預設是3秒在top命令的互動模式當中可以執行的命令:
-i 使top不顯示任何閒置或者僵死程式。
-p 通過指定監控程式ID來僅僅監控某個程式的狀態。
操作 功能
P 以CPU使用率排序,預設就是此項
M 以記憶體的使用率排序
N 以PID排序
q 退出top
查詢結果欄位解釋

第一行資訊為任務佇列資訊

內容 說明
12:06:46 系統當前時間
up 1 day,13:32 系統的執行時間,本機已經執行1天13小時32分鐘
2 users 當前登入了兩個使用者
load average: 0.00,0.00,0.00 系統在之前1分鐘,5分鐘,15分鐘的平均負載。一般認為小於1時,負載較小。如果大於1,系統已經超出負荷。

第二行為程式資訊

Tasks: 95 total 系統中的程式總數
1 running 正在執行的程式數
94 sleeping 睡眠的程式
0 stopped 正在停止的程式
0 zombie 殭屍程式。如果不是0,需要手工檢查殭屍程式

第三行為CPU資訊

Cpu(s): 0.1%us 使用者模式佔用的CPU百分比
0.1%sy 系統模式佔用的CPU百分比
0.0%ni 改變過優先順序的使用者程式佔用的CPU百分比
99.7%id 空閒CPU的CPU百分比
0.1%wa 等待輸入/輸出的程式的佔用CPU百分比
0.0%hi 硬中斷請求服務佔用的CPU百分比
0.1%si 軟中斷請求服務佔用的CPU百分比
0.0%st st(Steal time)虛擬時間百分比。就是當有虛擬機器器時,虛擬CPU等待實際CPU的時間百分比。

第四行為實體記憶體資訊

Mem: 625344k total 實體記憶體的總量,單位KB
571504k used 已經使用的實體記憶體數量
53840k free 空閒的實體記憶體數量,我們使用的是虛擬機器器,總共只分配了628MB記憶體,所以只有53MB的空閒記憶體了
65800k buffers 作為緩衝的記憶體數量

第五行為交換分割槽(swap)資訊

Swap: 524280k total 交換分割槽(虛擬記憶體)的總大小
0k used 已經使用的互動分割槽的大小
524280k free 空閒交換分割槽的大小
409280k cached 作為快取的互動分割槽的大小
top -d 1
top -i
top -p 2575

# 執行上述命令後,可以按P、M、N對查詢出的程式結果進行排序。
複製程式碼
netstat 顯示網路統計資訊和端口占用情況

netstat -anp |grep 程式號(功能描述:檢視該程式網路資訊)

netstat -nlp | grep 埠號 (功能描述:檢視網路埠號佔用情況)

選項 功能
-an 按一定順序排列輸出
-p 表示顯示哪個程式在呼叫
netstat -anp | grep java #通過程式號檢視該程式的網路資訊

netstat -nlp | grep 20670 #檢視某埠號是否被佔用
複製程式碼

crond 系統定時任務

crond 服務管理
service crond restart #重新啟動crond服務
複製程式碼
crontab 定時任務設定

crontab [選項]

選項 功能
-e 編輯crontab定時任務,會開啟vim編輯你的工作
-l 查詢crontab任務
-r 刪除當前使用者所有的crontab任務
專案 含義 範圍
第一個“*” 一小時當中的第幾分鐘 0-59
第二個“*” 一天當中的第幾小時 0-23
第三個“*” 一個月當中的第幾天 1-31
第四個“*” 一年當中的第幾月 1-12
第五個“*” 一週當中的星期幾 0-7(0和7都代表星期日)
特殊符號 含義
* 代表任何時間。比如第一個“*”就代表一小時中每分鐘都執行一次的意思。
代表不連續的時間。比如“0 8,12,16 * * * 命令”,就代表在每天的8點0分,12點0分,16點0分都執行一次命令
- 代表連續的時間範圍。比如“0 5 * * 1-6命令”,代表在週一到週六的凌晨5點0分執行命令
*/n 代表每隔多久執行一次。比如“*/10 * * * * 命令”,代表每隔10分鐘就執行一遍命令
時間 含義
45 22 * * * 命令 在22點45分執行命令
0 17 * * 1 命令 每週1 的17點0分執行命令
0 5 1,15 * * 命令 每月1號和15號的凌晨5點0分執行命令
40 4 * * 1-5 命令 每週一到週五的凌晨4點40分執行命令
*/10 4 * * * 命令 每天的凌晨4點,每隔10分鐘執行一次命令
0 0 1,15 * 1 命令 每月1號和15號,每週1的0點0分都會執行命令。注意:星期幾和幾號最好不要同時出現,因為他們定義的都是天。非常容易讓管理員混亂。

FAQ

  • 統計/home資料夾下檔案的個數 ls –l /home/ | grep “^-” | wc -l

  • 統計/home資料夾下目錄的個數 ls –l /home/ | grep “^d” | wc -l

  • 統計/home資料夾下檔案的個數,包括子資料夾裡的 ls –lR /home/ | grep “^-” | wc -l

  • 統計/home資料夾下目錄的個數,包括子資料夾裡的 ls –lR /home/ | grep “^d” | wc -l

  • 如何檢視當前系統都有哪些程式

    ps -aux 或者ps -elf

  • 如何檢視系統都開啟了哪些埠?

    netstat -lnp

  • 平時用到哪些Linux命令

    ps、grep、tar、touch、pwd