JavaEE--------Linux 快速入門教程

(參考http://www.92csz.com/study/linux/1.htm 點擊打開鏈接,以此爲模板 自己做了整理、修改) 

加一個Linux安裝軟件的文章OracleTomcatNginxLinux幾個工具的

第一部分,Linux日常使用的幾個軟件Secure CRT和Filesille。第二部分,在Linux系統上安裝Oracle、Tomcat、Nginx。第三部分,Linux中部署Java EE系統、項目。

 

一. 關於linux的歷史

很多關於linux的書籍在前面章節中寫了一大堆東西來介紹linux,可惜讀者看了好久也沒有正式開始進入linux的世界,這樣反而導致了他們對linux失去了一些興趣,而把厚厚的一本書丟掉。
Linux的歷史確實有必要讓讀者瞭解的,但是不瞭解也並不會影響你將來的linux技術水平。哈哈,本人其實就不怎麼了解linux的歷史,所以對於linux的歷史在本教程中不會涉及到。如果你感興趣的話,那你去網上搜一下吧,一大堆呢足夠讓你看一天的。雖然我不太想囉嗦太多,但是關於linux最基本的認識,我還是想簡單介紹一下的。也算是我對linux的創始人Linus Torvalds 先生的尊重。
在介紹linux的歷史前,我想先針對大家如何對linux的發音說一下。我發現我身邊的朋友對linux的發音大致有這麼幾種: “裏那克斯”與“裏你克斯”“裏扭克斯”等。其實官方的標準發音爲 ['li:nэks],因爲這個發音是創始人Linus的發音。如果你不認識這個音標,那麼就讀成“裏那克斯”。而筆者習慣發音成“裏你克斯”,當然你發音成什麼,並沒有人會說你,完全是一個人的習慣而已。
也許有的讀者已經瞭解到,linux和unix是非常像的。沒錯,linux就是根據unix演變過來的。當年linus就是因爲接觸到了unix而後才自己想開發一個簡易的系統內核的,他開發的簡易系統內核其實就是linux。當時linus把開發的這個系統內核丟到網上提供大家下載,由於它的精緻小巧,越來越多的愛好者去研究它。人們對這個內核添枝加葉,而後成爲了一個系統。也許你聽說過吧,linux是免費的,其實這裏的免費只是說linux的內核免費。在linux內核的基礎上而產生了衆多linux的版本。
Linux的發行版,說簡單點就是將Linux內核與應用軟件做一個打包。較知名的發行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE、TurboLinux、BluePoint、RedFlag、Xterm、SlackWare等
而筆者常用的就是Redhat 和 CentOS,這裏有必要說一下,其實CentOS是基於Redhat的,網上有人說,Centos是Redhat企業版的克隆。筆者所在公司的服務器全部都是安裝CentOS系統,並且相當穩定。CentOS較之於Redhat 可以免費使用yum 下載安裝所需要的軟件包,這個是相當方便的。而Redhat要想使用yum必須要購買服務了。
筆者只是簡單的介紹了一下linux,如果你想詳細瞭解linux的歷史,那麼請自己去查詢一下相關的資料吧。

二. 圖形界面還是命令窗口

對於linux的應用,我想大多數都是用在服務器領域,對於服務器來講真的沒有必要跑一個圖形界面。所以我們平時安裝linux操作系統時往往是不安裝圖形界面的。說到這裏也許你會有疑問,圖形界面還能選擇裝或者不裝?
是的,雖然linux和微軟的windows一樣同爲操作系統,但是它們有一個很大的區別就是windows操作系統的圖形界面是和內核一體的,俗稱微內核,而linux操作系統圖形界面就像一個軟件一樣,和內核並不是一體的。所以linux你可以選擇不安裝圖形界面,這樣不僅不影響服務器的正常使用還可以節省系統資源的開銷,何樂而不爲呢?
如果你對linux超級感興趣,想使用linux就像使用windows一樣,那你可以安裝圖形界面,可以像windows一樣來體驗linux也是蠻不錯的。但是如果你想成爲一個專業的linux系統工程師,那我建議你從第一天開始就不要去安裝圖形界面,從命令窗口開始熟悉它。
另外一點值得說的是,日常應用中,我們都是遠程管理服務器的,不可能開着圖形界面來讓你去操作,雖然目前也有相應的工具支持遠程圖形連接服務器,可是那樣太消耗網絡帶寬資源,所以從這方面來考慮還是建議你不要使用圖形界面。

三. Linux操作系統的安裝 

因爲筆者一直都是使用CentOS,所以這次安裝系統也是基於CentOS的安裝。把光盤插入光驅,設置bios光驅啓動。進入光盤的歡迎界面。

其中有兩個選項,可以直接按回車,也可以在當前界面下輸入 linux text 按回車。前者是圖形下安裝,可以動鼠標的,後者是純文字形式的。建議初學者用前者安裝。直接回車後,出現一下界面:

這一步是要提示你是否要校驗光盤,目的是看看光盤中的安裝包是否完整或者是否被人改動過,一般情況下,如果是正規的光盤不需要做這一步操作,因爲太費時間。接下來是:

這一步沒有什麼可說明的,直接點“Next”

這裏是選擇安裝系統時所用語言,筆者習慣用English,當然你也可以選擇Chinese(Simplified)(簡體中文),選擇好後點“Next”

這裏是選擇合適的鍵盤,我們平時使用的都是英文鍵盤,所以這裏不用動,默認即可,直接“Next”

到這裏就會提示你,下面會分區,會初始化磁盤,磁盤上的數據會丟失,問你是否要初始化設備並清除磁盤上的數據。因爲是空盤,所以選擇“Yes”

到這一步,就該分區了。其中一共有四種方式可以供你選擇、

第一種,在所選磁盤上把所有分區移除,然後按照默認的方式分區;
第二種,在所選磁盤上把所有linux分區移除(如果磁盤上有windows格式的分區,並不會移除),然後按照默認方式分區;
第三種,在所選磁盤上只使用空閒部分,並且按照默認方式分區;
第四種,用戶自定義。
這裏我們選第四種。然後“Next”

接下來該分區了,分區的很靈活,但大體上按照這個規則來(這是服務器上這樣分,如果你是虛擬機,請看後邊部分):

1. /boot 分區 100M

2. Swap 分區 內存的2倍,如果大於等於4G,則只需給4G即可

3. / 分區給20G

4.剩餘空間給/data

說明:/boot 分區是系統啓動所需要的文件,就跟windows的C盤中的windows 目錄類似,這個分區中的文件並不大,只需要100M足夠。Swap分區是交換分區,當內存不夠時,系統會把這部分空間當內存使用。/ 分區,其實就是一個根目錄,在以後的章節中會介紹到。現在不懂並沒有關係,只要知道有這麼一個東西即可。/data 這個分區是我們自定義的,就是專門放數據的分區。
如果你安裝的是虛擬機,並且你只有8G的磁盤空間,那麼我建議你這樣分區:
1 /boot 100M
2 swap 內存的2倍
3 / 全部剩餘空間
分區完後,點“Next”

 

 

可以在Use a boot loader password 前面打勾,這個選項的作用是,給boot loader 加一個密碼,爲了防止有人通過光盤進入單用戶模式修改root密碼。
下面的選項同樣可以打勾,筆者從來沒有用過該功能,如果你有興趣,可以研究一下。然後下一步

這一步是配置網卡信息,可以現在自定義網卡的IP,和配置主機名,默認是通過DHCP獲得,你也可以點manually 自定義一個主機名,如 mail.example.com 。如果這兩種方式都沒有配置,那麼linux會給你配置一個萬能的主機名,即localhost.localdomain 剩下的幾個就不用配置了,默認留空。

接着下一步,選擇時區,在這裏當然要選擇我們所處的時區Asia/Chongqing 如果沒有Chongqing那就選擇Asia/Shanghai。

繼續下一步

 在這裏自己定義一個root的密碼,繼續下一步

這裏要我們選擇要安裝的包,筆者習慣自定義安裝,需要點下面的“customize now”然後下一步

“Desktop Environments” 看右側,把GNOME 前面的勾去掉,這個其實就是圖形界面的安裝包,如果不去掉這個勾,就會安裝圖形界面。

 

“Applications” 除了Editors 前面的打勾以外,其他均不要勾選

 

 

“Development”全部都要勾上

 

“Servers”以及以下所有項都不要勾任何,然後下一步

 

點Next 後,系統就開始安裝了。

 

等過會後,會出現

至此,linux系統已經安裝完成了。接下來點“Reboot”重啓一下,進入linux系統看看吧。

四. 初步進入linux世界 

【Linux 系統啓動過程】
Linux的啓動其實和windows的啓動過程很類似,不過windows我們是無法看到啓動信息的,而linux啓動時我們會看到許多啓動信息,例如某個服務是否啓動。
Linux系統的啓動過程大體上可分爲五部分:內核的引導;運行init;系統初始化;建立終端 ;用戶登錄系統。
A 內核引導
當計算機打開電源後,首先是BIOS開機自檢,按照BIOS中設置的啓動設備(通常是硬盤)來啓動。緊接着由啓動設備上的grub程序開始引導linux,當引導程序成功完成引導任務後,Linux從它們手中接管了CPU的控制權,然後CPU就開始執行Linux的核心映象代碼,開始了Linux啓動過程。也就是所謂的內核引導開始了,在內核引導過程中其實是很複雜的,我們就當它是一個黑匣子,反正是linux內核做了一些列工作,最後內核調用加載了init程序,至此內核引導的工作就完成了。交給了下一個主角init。
B 運行init
init 進程是系統所有進程的起點,你可以把它比擬成系統所有進程的老祖宗,沒有這個進程,系統中任何進程都不會啓動。init 程序首先是需要讀取配置文件 /etc/inittab。inittab是一個不可執行的文本文件,它有若干行指令所組成。具體內容如下:(你可以在你的linux上執行命令 cat /etc/inittab 這樣獲得)

  # inittab       This file describes how the INIT process should set up
  #               the system in a certain run-level.
  #
  # Author:       Miquel van Smoorenburg,
  #               Modified for RHS Linux by Marc Ewing and Donnie Barnes
  #
  # Default runlevel. The runlevels used by RHS are:
  #   0 - halt (Do NOT set initdefault to this)
  #   1 - Single user mode
  #   2 - Multiuser, without NFS (The same as 3, if you do not havenetworking)
  #   3 - Full multiuser mode
  #   4 - unused
  #   5 - X11
  #   6 - reboot (Do NOT set initdefault to this)
  #
  ###表示當前缺省運行級別爲5(initdefault);
  id:5:initdefault:
  ###啓動時自動執行/etc/rc.d/rc.sysinit腳本(sysinit)
  # System initialization.
  si::sysinit:/etc/rc.d/rc.sysinit
  l0:0:wait:/etc/rc.d/rc 0
  l1:1:wait:/etc/rc.d/rc 1
  l2:2:wait:/etc/rc.d/rc 2
  l3:3:wait:/etc/rc.d/rc 3
  l4:4:wait:/etc/rc.d/rc 4
  ###當運行級別爲5時,以5爲參數運行/etc/rc.d/rc腳本,init將等待其返回(wait)
  l5:5:wait:/etc/rc.d/rc 5
  l6:6:wait:/etc/rc.d/rc 6
  ###在啓動過程中允許按CTRL-ALT-DELETE重啓系統
  # Trap CTRL-ALT-DELETE
  ca::ctrlaltdel:/sbin/shutdown -t3 -r now
  # When our UPS tells us power has failed, assume we have a few minutes
  # of power left.  Schedule a shutdown for 2 minutes from now.
  # This does, of course, assume you have powerd installed and your
  # UPS connected and working correctly.
  pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
  # If power was restored before the shutdown kicked in, cancel it.
  pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
  ###在2、3、4、5級別上以ttyX爲參數執行/sbin/mingetty程序,打開ttyX終端用於用戶登錄,
  ###如果進程退出則再次運行mingetty程序(respawn)
  # Run gettys in standard runlevels
  1:2345:respawn:/sbin/mingetty tty1
  2:2345:respawn:/sbin/mingetty tty2
  3:2345:respawn:/sbin/mingetty tty3
  4:2345:respawn:/sbin/mingetty tty4
  5:2345:respawn:/sbin/mingetty tty5
  6:2345:respawn:/sbin/mingetty tty6
  ###在5級別上運行xdm程序,提供xdm圖形方式登錄界面,並在退出時重新執行(respawn)
  # Run xdm in runlevel 5
  x:5:respawn:/etc/X11/prefdm -nodaemon

以上面的inittab文件爲例,來說明一下inittab的格式。其中以#開始的行是註釋行,除了註釋行之外,每一行都有以下格式: 

  id:runlevel:action:process

  對上面各項的詳細解釋如下:
1)id
  id是指入口標識符,它是一個字符串,對於getty或mingetty等其他login程序項,要求id與tty的編號相同,否則getty程序將不能正常工作。
2) Runlevel
    runlevel是init所處於的運行級別的標識,一般使用0-6以及S或s。0、1、6運行級別被系統保留:其中0作爲shutdown動作,1作爲重啓至單用戶模式,6爲重啓;S和s意義相同,表示單用戶模式,且無需inittab文件,因此也不在inittab中出現,實際上,進入單用戶模式時,init直接在控制檯(/dev/console)上運行/sbin/sulogin。在一般的系統實現中,都使用了2、3、4、5幾個級別,在CentOS系統中,2表示無NFS支持的多用戶模式,3表示完全多用戶模式(也是最常用的級別),4保留給用戶自定義,5表示XDM圖形登錄方式。7-9級別也是可以使用的,傳統的Unix系統沒有定義這幾個級別。runlevel可以是並列的多個值,以匹配多個運行級別,對大多數action來說,僅當runlevel與當前運行級別匹配成功纔會執行。
3) action
  action是描述其後的process的運行方式的。action可取的值包括:initdefault、sysinit、boot、bootwait等: initdefault是一個特殊的action值,用於標識缺省的啓動級別;當init由核心激活以後,它將讀取inittab中的initdefault項,取得其中的runlevel,並作爲當前的運行級別。如果沒有inittab文件,或者其中沒有initdefault項,init將在控制檯上請求輸入runlevel。  sysinit、boot、bootwait等action將在系統啓動時無條件運行,而忽略其中的runlevel。其餘的action(不含initdefault)都與某個runlevel相關。各個action的定義在inittab的man手冊中有詳細的描述。
4) process
  process爲具體的執行程序。程序後面可以帶參數。 
Tips: 如果你看不懂這個文件,沒有關係,隨着你對linux的深入瞭解,你再回過頭看這個文件你就會豁然開朗的。但是你現在必須要明白runlevel的各個級別的含義。
C 系統初始化
在init的配置文件中有這麼一行: si::sysinit:/etc/rc.d/rc.sysinit 它調用執行了/etc/rc.d/rc.sysinit,而rc.sysinit是一個bash shell的腳本,它主要是完成一些系統初始化的工作,rc.sysinit是每一個運行級別都要首先運行的重要腳本。它主要完成的工作有:激活交換分區,檢查磁盤,加載硬件模塊以及其它一些需要優先執行任務。
rc.sysinit約有850多行,但是每個單一的功能還是比較簡單,而且帶有註釋,建議有興趣的用戶可以自行閱讀自己機器上的該文件,以瞭解系統初始化所詳細情況。由於此文件較長,所以不在本文中列出來,也不做具體的介紹。當rc.sysinit程序執行完畢後,將返回init繼續下一步。通常接下來會執行到/etc/rc.d/rc程序。以運行級別3爲例,init將執行配置文件inittab中的以下這行:
  l5:5:wait:/etc/rc.d/rc 5
 這一行表示以5爲參數運行/etc/rc.d/rc,/etc/rc.d/rc是一個Shell腳本,它接受5作爲參數,去執行/etc/rc.d/rc5.d/目錄下的所有的rc啓動腳本,/etc/rc.d/rc5.d/目錄中的這些啓動腳本實際上都是一些連接文件,而不是真正的rc啓動腳本,真正的rc啓動腳本實際上都是放在/etc/rc.d/init.d/目錄下。而這些rc啓動腳本有着類似的用法,它們一般能接受start、stop、restart、status等參數。
/etc/rc.d/rc5.d/中的rc啓動腳本通常是K或S開頭的連接文件,對於以以S開頭的啓動腳本,將以start參數來運行。而如果發現存在相應的腳本也存在K打頭的連接,而且已經處於運行態了(以/var/lock/subsys/下的文件作爲標誌),則將首先以stop爲參數停止這些已經啓動了的守護進程,然後再重新運行。這樣做是爲了保證是當init改變運行級別時,所有相關的守護進程都將重啓。
至於在每個運行級中將運行哪些守護進程,用戶可以通過chkconfig或setup中的"System Services"來自行設定。
D 建立終端
rc執行完畢後,返回init。這時基本系統環境已經設置好了,各種守護進程也已經啓動了。init接下來會打開6個終端,以便用戶登錄系統。在inittab中的以下6行就是定義了6個終端:
  1:2345:respawn:/sbin/mingetty tty1
  2:2345:respawn:/sbin/mingetty tty2
  3:2345:respawn:/sbin/mingetty tty3
  4:2345:respawn:/sbin/mingetty tty4
  5:2345:respawn:/sbin/mingetty tty5
  6:2345:respawn:/sbin/mingetty tty6
 從上面可以看出在2、3、4、5的運行級別中都將以respawn方式運行mingetty程序,mingetty程序能打開終端、設置模式。同時它會顯示一個文本登錄界面,這個界面就是我們經常看到的登錄界面,在這個登錄界面中會提示用戶輸入用戶名,而用戶輸入的用戶將作爲參數傳給login程序來驗

證用戶的身份。

E 用戶登錄系統

對於運行級別爲5的圖形方式用戶來說,他們的登錄是通過一個圖形化的登錄界面。登錄成功後可以直接進入KDE、Gnome等窗口管理器。而本文主要講的還是文本方式登錄的情況:當我們看到mingetty的登錄界面時,我們就可以輸入用戶名和密碼來登錄系統了。
Linux的賬號驗證程序是login,login會接收mingetty傳來的用戶名作爲用戶名參數。然後login會對用戶名進行分析:如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內容,然後退出。這通常用來系統維護時防止非root用戶登錄。只有/etc/securetty中登記了的終端才允許root用戶登錄,如果不存在這個文件,則root可以在任何終端上登錄。/etc/usertty文件用於對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。
在分析完用戶名後,login將搜索/etc/passwd以及/etc/shadow來驗證密碼以及設置賬戶的其它信息,比如:主目錄是什麼、使用何種shell。如果沒有指定主目錄,將默認爲根目錄;如果沒有指定shell,將默認爲/bin/bash。
login程序成功後,會向對應的終端在輸出最近一次登錄的信息(在/var/log/lastlog中有記錄),並檢查用戶是否有新郵件(在/usr/spool/mail/的對應用戶名目錄下)。然後開始設置各種環境變量:對於bash來說,系統首先尋找/etc/profile腳本文件,並執行它;然後如果用戶的主目錄中存在.bash_profile文件,就執行它,在這些文件中又可能調用了其它配置文件,所有的配置文件執行後後,各種環境變量也設好了,這時會出現大家熟悉的命令行提示符,到此整個啓動過程就結束了。 
【圖形模式與文字模式的切換方式】
Linux預設提供了六個命令窗口終端機讓我們來登錄。默認我們登錄的就是第一個窗口,也就是tty1,這個六個窗口分別爲tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 來切換它們。如果你安裝了圖形界面,默認情況下是進入圖形界面的,此時你就可以按Ctrl + Alt + F1 ~ F6來進入其中一個命令窗口界面。當你進入命令窗口界面後再返回圖形界面只要按下Ctrl + Alt + F7 就回來了。如果你用的vmware 虛擬機,命令窗口切換的快捷鍵爲 Alt + Space + F1~F6. 如果你在圖形界面下請按Alt + Shift + Ctrl + F1~F6 切換至命令窗口。 
【學會使用快捷鍵】
Ctrl + C:這個是用來終止當前命令的快捷鍵,當然你也可以輸入一大串字符,不想讓它運行直接Ctrl + C,光標就會跳入下一行。 
Tab: 這個鍵是最有用的鍵了,也是筆者敲擊概率最高的一個鍵。因爲當你打一個命令打一半時,它會幫你補全的。不光是命令,當你打一個目錄時,同樣可以補全,不信你試試。
Ctrl + D: 退出當前終端,同樣你也可以輸入exit。
Ctrl + Z: 暫停當前進程,比如你正運行一個命令,突然覺得有點問題想暫停一下,就可以使用這個快捷鍵。暫停後,可以使用fg 恢復它。
Ctrl + L: 清屏,使光標移動到第一行。
【學會查詢幫助文檔 — man】

這個man 通常是用來看一個命令的幫助文檔的。例如:

輸入 man ls 其實格式爲 man + 命令
你就會看到相關的幫助文檔了。從命令的介紹到命令的參數以及用法介紹的都非常詳細的。不錯吧。
【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  這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。這個目錄的內容不在硬盤上而是在內存裏,我們也可以直接修改裏面的某些文件,比如可以通過下面的命令來屏蔽主機的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的預設放置也是在這裏。
【如何正確關機】
其實,在linux領域內大多用在服務器上,很少遇到關機的操作。畢竟服務器上跑一個服務是永無止境的,除非特殊情況下,不得已纔會關機。
linux和windows不同,在 Linux 底下,由於每個程序(或者說是服務)都是在在背景下執行的,因此,在你看不到的屏幕背後其實可能有相當多人同時在你的主機上面工作,例如瀏覽網頁啦、傳送信件啦以 FTP 傳送檔案啦等等的,如果你直接按下電源開關來關機時,則其它人的數據可能就此中斷!那可就傷腦筋了!此外,最大的問題是,若不正常關機,則可能造成文件系統的毀損(因爲來不及將數據回寫到檔案中,所以有些服務的檔案會有問題!)。
如果你要關機,必須要保證當前系統中沒有其他用戶在線。可以下達 who 這個指令,而如果要看網絡的聯機狀態,可以下達 netstat -a 這個指令,而要看背景執行的程序可以執行 ps -aux 這個指令。使用這些指令可以讓你稍微瞭解主機目前的使用狀態!(這些命令在以後的章節中會提及,現在只要瞭解即可!)
正確的關機流程爲:sysnc ? shutdown ? reboot ? halt
sync 將數據由內存同步到硬盤中。
shutdown 關機指令,你可以man shutdown 來看一下幫助文檔。例如你可以運行如下命令關機:
shutdown –h 10 ‘This server will shutdown after 10 mins’ 這個命令告訴大家,計算機將在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
最後總結一下,不管是重啓系統還是關閉系統,首先要運行sync命令,把內存中的數據寫到磁盤中。關機的命令有 shutdown –h now halt poweroff 和 init 0 , 重啓系統的命令有 shutdown –r now reboot init 6.
【忘記root密碼如何做】

以前筆者忘記windows的管理員密碼,由於不會用光盤清除密碼最後只能重新安裝系統。現在想想那是多麼愚笨的一件事情。同樣linux系統你也會遇到忘記root密碼的情況,如果遇到這樣的情況怎麼辦呢?重新安裝系統嗎?當然不用!進入單用戶模式更改一下root密碼即可。如何進入呢。

1) 重啓linux系統

 

在3 秒之內要按一下回車,出現如下界面

 

然後輸入e

在第二行最後邊輸入 single,有一個空格。具體方法爲按向下尖頭移動到第二行,按“e”進入編輯模式

 

在後邊加上single 回車

 

最後按“b”啓動,啓動後就進入了單用戶模式了

此時已經進入到單用戶模式了,你可以更改root密碼了。更密碼的命令爲 passwd

【使用系統安裝光盤的救援模式】
救援模式即rescue ,這個模式主要是應用於,系統無法進入的情況。如,grub損壞或者某一個配置文件修改出錯。如何使用rescue模式呢?

 

光盤啓動,按F5 進入rescue模式

 

輸入linux rescue 回車

選擇語言,筆者建議你選擇英語

選擇us 鍵盤

這裏問你是否啓動網絡,有時候可能會聯網調試。我們選no

這裏告訴我們,接下來會把系統掛載在/mnt/sysimage 中。其中有三個選項,Continue 就是掛載後繼續下一步; Read-Only 掛載成只讀,這樣更安全,有時文件系統損壞時,只讀模式會防止文件系統近一步損壞;Skip就是不掛載,進入一個命令窗口模式。這裏我們選擇Continue。

至此,系統已經掛載到了/mnt/sysimage中。接下來回車,輸入chroot /mnt/sysimage 進入管理員環境。

Tips: 其實也可以到rescue模式下更改root的密碼的。這個rescue模式和windows PE系統很相近。當運行了chroot /mnt/sysimage/ 後,再ls 看到目錄結構和原來系統中的目錄結構是一樣的。沒錯!現在的環境和原來系統的環境是一模一樣的。你可以輸入exit 或者按Ctrl + D退出這個環境。然後你再ls 看一下

這個目錄其實就是rescue模式下的目錄結構,而我們的系統文件全部在 /mnt/sysimage目錄下。

五. Linux系統的遠程登錄

(首先要說一下,該部分內容對於linux初學者來講並不是特別重要的,可以先跳過該章節,先學下一章,等學完後再回來看這一章。)

Linux大多應用於服務器,而服務器不可能像PC一樣放在辦公室,它們是放在IDC機房的,所以我平時登錄linux系統都是通過遠程登錄的。Linux系統中是通過ssh服務實現的遠程登錄功能。默認ssh服務開啓了22端口,而且當我們安裝完系統時,這個服務已經安裝,並且是開機啓動的。所以不需要我們額外配置什麼就能直接遠程登錄linux系統。ssh服務的配置文件爲 /etc/ssh/sshd_config,你可以修改這個配置文件來實現你想要的ssh服務。比如你可以更改啓動端口爲36000.

如果你是windows的操作系統,則Linux遠程登錄需要在我們的機器上額外安裝一個終端軟件目前比較常見的終端登錄軟件有SecureCRT, Putty, SSH Secure Shell等,很多朋友喜歡用SecureCRT因爲它的功能是很強大的,而筆者喜歡用Putty,只是因爲它的小巧以及非常漂亮的顏色顯示。不管你使用哪一個客戶端軟件,最終的目的只有一個,就是遠程登錄到linux服務器上。這些軟件網上有很多免費版的,你可以下載一個試着玩玩。下面筆者介紹如何使用Putty登錄遠程linux服務器。

如果你下載了putty,請雙擊putty.exe 然後彈出如下的窗口。筆者所用putty爲英文版的,如果你覺得英文的用着彆扭,可以下載一箇中文版的。

因爲是遠程登錄,所以你要登錄的服務器一定會有一個IP或者主機名。請在Host Name( or IP address) 下面的框中輸入你要登錄的遠程服務器IP(如果你的linux還沒有IP,那麼請自行設置一個IP,如何設置請到後續章節查找),然後回車。

此時,提示我們輸入要登錄的用戶名。

輸入root 然後回車,再輸入密碼,就能登錄到遠程的linux系統了。

【使用密鑰認證機制遠程登錄linux】

SSH服務支持一種安全認證機制,即密鑰認證。所謂的密鑰認證,實際上是使用一對加密字符串,一個稱爲公鑰(public key), 任何人都可以看到其內容,用於加密;另一個稱爲密鑰(private key),只有擁有者才能看到,用於解密。 通過公鑰加密過的密文使用密鑰可以輕鬆解密,但根據公鑰來猜測密鑰卻十分困難。 ssh 的密鑰認證就是使用了這一特性。服務器和客戶端都各自擁有自己的公鑰和密鑰。 如何使用密鑰認證登錄linux服務器呢?

首先使用工具 PUTTYGEN.EXE 生成密鑰對。打開工具PUTTYGEN.EXE後如下圖所示:

該工具可以生成三種格式的key :SSH-1(RSA) SSH-2(RSA) SSH-2(DSA) ,我們採用默認的格式即SSH-2(RSA)。Number of bits in a generated key 這個是指生成的key的大小,這個數值越大,生成的key就越複雜,安全性就越高。這裏我們寫2048.

然後單擊Generate 開始生成密鑰對:

注意的是,在這個過程中鼠標要來回的動,否則這個進度條是不會動的。

到這裏,密鑰對已經生成了。你可以給你的密鑰輸入一個密碼,(在Key Passphrase那裏)也可以留空。然後點 Save public key 保存公鑰,點 Save private Key 保存私鑰。筆者建議你放到一個比較安全的地方,一來防止別人偷窺,二來防止誤刪除。接下來就該到遠程linux主機上設置了。

1)創建目錄 /root/.ssh 並設置權限

        [root@localhost ~]# mkdir /root/.ssh mkdir 命令用來創建目錄,以後會詳細介紹,暫時只瞭解即可。

        [root@localhost ~]# chmod 700 /root/.ssh chmod 命令是用來修改文件屬性權限的,以後會詳細介紹。

2)創建文件 / root/.ssh/authorized_keys

        [root@localhost ~]# vim /root/.ssh/authorized_keys vim 命令是編輯一個文本文件的命令,同樣在後續章節詳細介紹。

3)打開剛纔生成的public key 文件,建議使用寫字板打開,這樣看着舒服一些,複製從AAAA開頭至 “---- END SSH2 PUBLIC KEY ----“ 該行上的所有內容,粘貼到/root/.ssh/authorized_keys 文件中,要保證所有字符在一行。(可以先把複製的內容拷貝至記事本,然後編輯成一行載粘貼到該文件中)。在這裏要簡單介紹一下,如何粘貼,用vim打開那個文件後,該文件不存在,所以vim會自動創建。按一下字母”i”然後同時按shift + Insert 進行粘貼(或者單擊鼠標郵件即可),前提是已經複製到剪切板中了。粘貼好後,然後把光標移動到該行最前面輸入ssh-ras ,然後按空格。再按ESC,然後輸入冒號wq 即 :wq 就保存了。格式如下圖:

4)再設置putty選項,點窗口左側的SSh –> Auth ,單擊窗口右側的Browse… 選擇剛剛生成的私鑰, 再點Open ,此時輸入root,就不用輸入密碼就能登錄了。

如果在前面你設置了Key Passphrase ,那麼此時就會提示你輸入密碼的。爲了更加安全建議大家要設置一個Key Passphrase。

六. Linux文件與目錄管理

在linux中什麼是一個文件的路徑呢,說白了就是這個文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 這就是一個文件的路徑。如果你告訴系統這個文件的路徑,那麼系統就可以找到這個文件。在linux的世界中,存在着絕對路徑和相對路徑。
絕對路徑:路徑的寫法一定由根目錄”/”寫起,例如/usr/local/mysql 這就是絕對路徑。
相對路徑:路徑的寫法不是由根目錄”/”寫起,例如,首先用戶進入到/ 然後再進入到home ,命令爲 cd /home 然後 cd test 此時用戶所在的路徑爲 /home/test 。第一個cd命令後跟 /home 第二個cd命令後跟test ,並沒有斜槓,這個test是相對於/home 目錄來講的,所以叫做相對路徑。

pwd 這個命令打印出當前所在目錄

cd 進入到某一個目錄

./ 指的是當前目錄

../ 指的是當前目錄的上一級目錄。

上圖中,首先進入到/usr/local/lib/ 目錄下,然後再進入 ./ 其實還是進入到當前目錄下,用pwd查看當前目錄,並沒有發生變化,然後再進入../ 則是進入到了/usr/local/目錄下,即/usr/local/lib目錄的上一級目錄。你看明白了嗎?

mkdir 創建一個目錄,這個命令在上一章節中提及過。mkdir 其實就是make directory的縮寫。其語法爲 mkdir [-mp] [目錄名稱] ,其中-m , –p 爲其選項,-m:這個參數用來指定要創建目錄的權限,該參數不常用,所以筆者不做重點解釋。-p:這個參數很管用的,先來做個試驗,你會一目瞭然的。

當我們想創建 /tmp/test/123 目錄,可是提示不能創建,原因是/tmp/test目錄不存在,你會說,這個linux怎麼這樣傻,/tmp/test目錄不存在就自動創建不就OK了嘛,的確linux確實很傻,如果它發現要創建的目錄的上一級目錄不存在就會報錯。然後linux也爲我們想好了解決辦法,即-p參數。

你看到這裏,是不是明白-p參數的作用了?沒錯,它的作用就是遞歸創建目錄,即使上級目錄不存在。還有一種情況就是如果你想要創建的目錄存在的話,會提示報錯,然後你加上-p參數後,就不會報錯了。

rmdir 刪除一個目錄。

rmdir 其實是rmove directory 縮寫,其只有一個選項-p 類似與mkdir命令,這個參數的作用是將上級目錄一起刪除。舉個例子吧,新建目錄mkdir -p d1/d2/d3 ,rmdir -p d1/d2/d3相當於是刪除了d1,d1/d2, d1/d2/d3。如果一個目錄中還有目錄,那麼當你直接rmdir 該目錄時,會提示該目錄不爲空,不能刪除。如果你非要刪除不爲空的目錄,那你用rm指令吧。

rm 刪除目錄或者文件

rmdir 只能刪除目錄但不能刪除文件,要想刪除一個文件,則要用rm命令了。rm同樣也有很多選項。你可以通過 man rm 來獲得詳細幫助信息。在這裏筆者只列舉較常用的幾個選項。

-f 強制的意思,如果不加這個選項,當刪除一個不存在的文件時會報錯。

-i 這個選項的作用是,當用戶刪除一個文件時會提示用戶是否真的刪除。

如果刪除,輸入y 否則輸入 n

-r 當刪除目錄時,加該選項,如果不加這個選項會報錯。rm是可以刪除不爲空的目錄的。

你會發現,筆者在列舉的rm例子中使用的是絕對路徑,而ls 則使用的相對路徑。這是爲什麼呢?

which 用來查找一個命令的絕對路徑,這個命令筆者不詳細介紹,因爲平時筆者只用來查找一個命令的絕對路徑。

alias 用來設置指令的別名。語法:alias[別名]=[指令名稱],例如 alias rm='rm -i' ,即當我們使用rm命令時,實際上是使用的是rm –i ,而用絕對路徑的/bin/rm 則不會被alias,該命令在以後章節中會詳細介紹。

【環境變量PATH】

上邊提到了alias,也提到了絕對路徑的/bin/rm ,然後你意識到沒有,爲什麼我們輸入很多命令時是直接打出了命令,而沒有去使用這些命令的絕對路徑?這是因爲環境變量PATH在起作用了。請輸入 echo $PATH,這裏的echo其實就是打印的意思,而PATH前面的$表示後面接的是變量。

因爲/bin 在PATH的設定中,所以自然就可以找到ls了。如果你將 ls 移動到 /root 底下的話,然後你自己本身也在 /root 底下,但是當你執行 ls 的時候,他就是不理你?怎麼辦?這是因爲 PATH 沒有 /root 這個目錄,而你又將 ls 移動到 /root 底下了,自然系統就找不到可執行文件了,因此就會告訴你, command not found !那麼該怎麼克服這種問題呢?

有兩個方法,一種方法是直接將 /root 的路徑加入 PATH 當中!如何增加?可以使用:  
        PATH=”$PATH”:/root
另一種方式則是使用完整檔名,亦即直接使用相對或絕對路徑來執行,例如:
/root/ls
./ls

關於rm,筆者使用最多便是-rf兩個選項合用了。不管刪除文件還是目錄都可以。但是方便的同時也要多注意,萬一你的手太快後邊跟了/那樣就會把你的系統文件全部刪除的,切記切記。

ls 在前面的命令中多次用到它。現在你已經明白它的含義了吧。沒有錯,就是查看某個目錄或者某個文件,是list的簡寫。ls 後可以跟一個目錄,也可以跟一個文件。以下是ls的選項,在這裏筆者並沒有完全列出,只是列出了平時使用最多的選項。其他選項,你可以自行通過man ls 查詢。

-a 全部的檔案都列出,包括隱藏的。linux文件系統中同樣也有隱藏文件。這些隱藏文件的文件名是以.開頭的。例如.test, /root/.123, /root/.ssh 等等,隱藏文件可以是目錄也可以是普通文件。

-l 詳細列出文件的屬性信息,包括大小、創建日期、所屬主所屬組等等。ll 這個命令等同於ls –l 。

--color=never/always/auto never即不要顯示顏色,always 即總顯示顏色,auto 是由系統自行判斷。在Redhat/CentOS 系統中,默認是帶顏色的,因爲我們平時用的ls已經alias成了ls –color=tty 所以目錄的顏色是藍色的,而可執行文件的顏色是綠色。這樣有助於幫我們區分文件的格式。

-d 後邊跟目錄,如果不加這個選項則列出目錄下的文件,加上後只列車目錄本身。

cp copy的簡寫,即拷貝。格式爲 cp [選項] [ 來源文件 ] [目的文件] ,例如我想把test1 拷貝成test2 ,這樣即可 cp test1 test2,以下介紹幾個常用的選項

-d 這裏涉及到一個“連接”的概念。連接分爲軟連接和硬連接。在以後的章節中會詳細解釋,現在你只要明白這裏的軟連接跟windows中的快捷方式類似即可。如果不加這個-d 則拷貝軟連接時會把軟連接的目標文件拷貝過去,而加上後,其實只是拷貝了一個連接文件(即快捷方式)。

上例中的ln 命令即爲建立連接的,以後再做詳細解釋。

-r 如果你要拷貝一個目錄,必須要加-r選項,否則你是拷貝不了目錄的。

-i 如果遇到一個存在的文件,會問是否覆蓋。在Redhat/CentOS系統中,我們使用的cp其實是cp –i

下面簡單做一個小試驗,很快你就會明白-i 選項的作用了。

上例中,touch 命令,看字面意思就是摸一下,沒錯,如果有這個文件,則會改變文件的訪問時間,如果沒有這個文件就會創建這個文件。前面說過echo,其實就是打印,在這裏所echo的內容”abc” 和 “def”並沒有顯示在屏幕上,而是分別寫進了文件 111和222, 其寫入作用的就是這個大於號”>” 在linux中這叫做重定向,即把前面產生的輸出寫入到後面的文件中。在以後的章節中會做詳細介紹,這裏你要明白它的含義即可。而cat 命令則是讀一個文件,並把讀出的內容打印到當前屏幕上。該命令也會在後續章節中詳細介紹。

-u 該選項僅當目標文件存在時纔會生效,如果源文件比目標文件新纔會拷貝,否則不做任何動作。
mv 移動的意思,是move的簡寫。格式爲 mv [ 選項 ] [源文件] [目標文件],下面介紹幾個常用的選項。
-i 和cp的-i 一樣,當目標文件存在時會問用戶是否要覆蓋。在Redhat/CentOS系統中,我們使用的mv其實是mv –i
-u 和上邊cp 命令的-u選項一個作用,當目標文件存在時纔會生效,如果源文件比目標文件新纔會移動,否則不做任何動作。
該命令有集中情況,你注意到了嗎?
1) 目標文件是目錄,而且目標文件不存在;
2) 目標文件是目錄,而且目標文件存在;
3) 目標文件不是目錄不存在;
4) 目標文件不是目錄存在;

目標文件是目錄,存在和不存在,移動的結果是不一樣的,如果存在,則會把源文件移動到目標文件目錄中。不存在的話移動完後,目標文件是一個文件。這樣說也許你會覺得有點不好理解,看例子吧。

windows下的重命名,在linux下用mv就可以搞定。
cat 比較常用的一個命令,即查看一個文件的內容並顯示在屏幕上。

-n 查看文件時,把行號也顯示到屏幕上。

上例中出現了一個”>>”,這個符號跟前面介紹的”>”的作用都是重定向,即把前面輸出的東西輸入到後邊的文件中,只是”>>”是追加的意思,而用”>”,如果文件中有內容則會刪除文件中內容,而”>>”則不會。

-A 顯示所有東西出來,包括特殊字符

tac 其實是cat的反寫,同樣的功能也是反向打印文件的內容到屏幕上。

more 也是用來查看一個文件的內容。當文件內容太多,一屏幕不能佔下,而你用cat肯定是看不前面的內容的,那麼使用more就可以解決這個問題了。當看完一屏後按空格鍵繼續看下一屏。但看完所有內容後就會退出。如果你想提前退出,只需按q鍵即可。

less 作用跟more一樣,但比more好在可以上翻,下翻。空格鍵同樣可以翻頁,而按”j”鍵可以向下移動(按一下就向下移動一行),按”k”鍵向上移動。在使用more和less查看某個文件時,你可以按一下”/” 鍵,然後輸入一個word回車,這樣就可以查找這個word了。如果是多個該word可以按”n”鍵顯示下一個。另外你也可以不按”/”而是按”?”後邊同樣跟word來搜索這個word,唯一不同的是,”/”是在當前行向下搜索,而”?”是在當前行向上搜索。

head head後直接跟文件名,則顯示文件的前十行。如果加 –n 選項則顯示文件前n行。

tail 和head一樣,後面直接跟文件名,則顯示文件最後十行。如果加-n 選項則顯示文件最後n行。

-f 動態顯示文件的最後十行,如果文件是不斷增加的,則用-f 選項。如:tail -f /var/log/messages

【文件的所屬主以及所屬組】

 

一個linux目錄或者文件,都會有一個所屬主和所屬組。所屬主,即文件的擁有者,而所屬組,即該文件所屬主所在的一個組。Linux這樣設置文件屬性的目的是爲了文件的安全。例如,test文件的所屬主是user0 而test1文件的所屬主是user1,那麼user1是不能查看test文件的,相應的user0也不能查看test1文件。然後有這樣一個應用,我想創建一個文件同時讓user0和user1來查看怎麼辦呢?

 

這時“所屬組”就派上用場了。即,創建一個羣組users,讓user0和user1同屬於users組,然後建立一個文件test2,且其所屬組爲users,那麼user0和user1都可以訪問test2文件。

Linux文件屬性不僅規定了所屬主和所屬組,還規定了所屬主(user)、所屬組(group)以及其他用戶(others)對該文件的權限。你可以通過ls -l 來查看這些屬性。

【linux文件屬性】
上例中,用ls –l 查看當前目錄下的文件時,共顯示了9列內容(用空格劃分列),都代表了什麼含義呢?

 

第1列,包含的東西有該文件類型和所屬主、所屬組以及其他用戶對該文件的權限。第一列共10位。其中第一位用來描述該文件的類型。上例中,我們看到的類型有”d”, “-“ ,其實除了這兩種外還有”l”, “b”, “c”,”s”等。

 

d 表示該文件爲目錄;

- 表示該文件爲普通文件;

l 表示該文件爲連接文件(linux file),上邊提到的軟連接即爲該類型;

b 表示該文件爲塊設備文件,比如磁盤分區

c 表示該文件爲串行端口設備,例如鍵盤、鼠標。

s 表示該文件爲套接字文件(socket),用於進程間通信。

後邊的9位,每三個爲一組。均爲rwx 三個參數的組合。其中r 代表可讀,w代表可寫,x代表可執行。前三位爲所屬主(user)的權限,中間三位爲所屬組(group)的權限,最後三位爲其他非本羣組(others)的權限。下面拿一個具體的例子來述說一下。
一個文件的屬性爲-rwxr-xr-- ,它代表的意思是,該文件爲普通文件,文件擁有者可讀可寫可執行,文件所屬組對其可讀不可寫可執行,其他用戶對其只可讀。
對於一個目錄來講,打開這個目錄即爲執行這個目錄,所以任何一個目錄必須要有x權限才能打開並查看該目錄。例如一個目錄的屬性爲 drwxr--r-- 其所屬主爲root,那麼除了root外的其他用戶是不能打開這個目錄的。
第2列,表示爲連接佔用的節點(inode),若爲目錄時,通常與該目錄地下還有多少目錄有關係,關於連接(link)在以後章節詳細介紹。
第3列,表示該文件的所屬主。
第4列,表示該文件的所屬組。
第5列,表示該文件的大小。
第6列、第7列和第8列爲該文件的創建日期或者最近的修改日期,分別爲月份日期以及時間。
第9列,文件名。如果前面有一個. 則表示該文件爲隱藏文件。
【更改文件的權限】
更改文件的權限,也就是更改所屬主、所屬組以及他們對應的讀寫執行權限。
1)更改所屬組 chgrp

語法:chgrp [組名] [文件名]

這裏用到了groupadd 命令,其含義即增加一個用戶組。該命令在以後章節中做詳細介紹,你只要知道它是用來增加用戶組的即可。

2)更改文件的所屬主 chown

語法:chown [ -R ] 賬戶名 文件名
chown [ -R ] 賬戶名:組名 文件名

這裏的-R選項只作用於目錄,作用是級聯更改,即不僅更改當前目錄,連目錄裏的目錄或者文件全部更改。

useradd 是增加一個賬戶,以後會詳細介紹。上例中,首先建立一個目錄test,然後在test目錄下創建一個普通文件test2,因爲是以root的身份創建的目錄和文件,所以所屬主以及所屬組都是root。chown user1 test 這使test的目錄所屬主由root變爲了user1 ,然後test目錄下的test2文件所屬主以及所屬組還是root。接着 chown –R user1:testgroup test 這樣把test連同test目錄下的test2 的所屬主以及所屬組都改變了。

3)改變用戶對文件的讀寫執行權限 chmod

在linux中爲了方便更改這些權限,linux使用數字去代替rwx ,具體規則爲r: 4 w:2 x:1 -:0 舉個例子,-rwxrwx---用數字表示就是 770,具體是這樣來的:
rwx = 4+2+1=7; rwx= 4+2+1=7; --- = 0+0+0=0
chmod 語法: chmod [-R] xyz 文件名 (這裏的xyz,表示數字)
-R 選項作用同chown,級聯更改。

值得提一下的是,在linux系統中,默認一個目錄的權限爲 755,而一個文件的默認權限爲644.

如果你創建了一個目錄,而該目錄不想讓其他人看到內容,則只需設置成 rwxr----- (740) 即可。

chmod 還支持使用rwx的方式來設置權限。!從之前的介紹中我們可以發現,基本上就九個屬性分別是(1)user (2)group (3)others 三羣啦!那麼我們就可以藉由 u, g, o 來代表三羣的屬性!此外, a 則代表 all 亦即全部的三羣!那麼讀寫的屬性就可以寫成了 r, w, x!也就是可以使用底下的方式來看:

現在我想把一個文件設置成這樣的權限 rwxr-xr-x (755),使用這種方式改變權限的命令爲

另外還可以針對u, g, o, a增加或者減少某個權限(讀,寫,執行),例如

另外linux下還有兩個比較特殊的權限s和t,請點擊linux下文件的特殊權限s和t
umask
上邊也提到了默認情況下,目錄權限值爲766,普通文件權限值爲644。那麼這個值是由誰規定呢?追究其原因就涉及到了umask。
umask語法: umask xxx (這裏的xxx代表三個數字)
查看umask值只要輸入umask然後回車。 umask預設是0022,其代表什麼含義?先看一下下面的規則:
1)若用戶建立爲普通文件,則預設“沒有可執行權限”,只有rw兩個權限。最大爲666(-rw-rw-rw-)
2)若用戶建立爲目錄,則預設所有權限均開放,即777(drwxrwxrwx)

umask數值代表的含義爲,上邊兩條規則中的默認值(文件爲666,目錄爲777)需要減掉的權限。所以目錄的權限爲(rwxrwxrwx) – (----w--w-) = (rwxr-xr-x),普通文件的權限爲(rw-rw-rw-) – (----w--w-) = (rw-r--r--)。umask的值是可以自定義的,比如設定umask 爲 002,你再創建目錄或者文件時,默認權限分別爲(rwxrwxrwx) – (-------w-) = (rwxrwxr-x)和(rw-rw-rw-) – (-------w-) = (rw-rw-r--)。

umask 可以在/etc/bashrc裏面更改,預設情況下,root的umask爲022,而一般使用者則爲002,因爲可寫的權限非常重要,因此預設會去掉寫權限。
chattr 修改文件的特殊屬性
語法: chattr [+-=][ASaci [文件或者目錄名]
+-= :分別爲增加、減少、設定
A:增加該屬性後,文件或目錄的atime將不可被修改;
S:增加該屬性後,會將數據同步寫入磁盤中;
a:增加該屬性後,只能追加不能刪除,非root用戶不能設定該屬性;
c:自動壓縮該文件,讀取時會自動解壓;

i:增加後,使文件不能被刪除、重命名、設定連接、寫入、新增數據;

增加i屬性後不能在該目錄中建立文件。

增加a屬性後,只能追加不能刪除。
lsattr 列出文件/目錄的特殊屬性
語法: lsattr [-aR] [文件/目錄名]
-a:類似與ls 的-a 選項,即連同隱藏文件一同列出;

-R:連同子目錄的數據一同列出

在上例中,test4是在test3目錄增加a屬性後建立的,所以test4也有a屬性,通過這個例子可以看出,chattr 的屬性是級聯生效的,不僅對當前目錄生效而且會對目錄下的文件同樣生效。

【在linux下搜索一個文件】
在windows下有一個搜索工具,可以讓我們很快的找到一個文件,這是很有用的。然而在linux下搜索功能更加強大。
which 用來查找可執行文件的絕對路徑。

在前面章節中已經多次用到該命令,需要注意的一點是,which只能用來查找PATH環境變量中出現的路徑下的可執行文件。這個命令用的也是蠻多的,有時候我們不知道某個命令的絕對路徑,which一下很容易就知道了。

當查找的文件在PATH變量中並沒有時,就會報錯。
whereis 通過預先生成的一個文件列表庫去查找跟給出的文件名相關的文件。
語法: whereis [-bmsu] [文件名稱]
-b:只找binary 文件
-m:只找在說明文件manual路徑下的文件
-s:只找source來源文件

-u:沒有說明檔的文件

說明:whereis 筆者幾乎很少用到,如果你感興趣請深入研究。

locate 類似於whereis,也是通過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪裏。後邊直接跟文件名。如果你的linux沒有這個命令,請安裝軟件包 mlocate ,這個軟件包在你的系統安裝盤裏,後綴名是RPM,隨後介紹的find命令會告訴你如何查找這個包。如果你裝的CentOS你可以使用這個命令來安裝 yum install –y mlocate 。 前提是你的CentOS能連互聯網。至於yum這個命令如何使用,到後續章節你自然會明白。如果你剛裝上這個命令,初次使用會報錯。

這是因爲系統還沒有生成那個文件列表庫。你可以使用updatedb 命令立即生成(更新)這個庫。如果你的服務器上正跑着重要的業務,那麼你最好不要去運行這個命令,因爲一旦運行,服務器的壓力會變大。這個數據庫默認情況下每週更新一次。所以你用locate命令去搜索一個文件,正好是在兩次更新時間段內,那你肯定是得不到結果的。你可以到/etc/updated.conf 去配置這個數據庫生成(更新)的規則。locate命令筆者用的也並不多,所以你只要明白有這麼一個東西即可。你用到時再去深究其用法吧。
find 這個搜索工具是筆者用的最多的一個,所以請你務必要熟悉它。
語法: find [路徑] [參數] 下面介紹幾個筆者經常用的參數
-atime +n :訪問或執行時間大於n天的文件
-ctime +n :寫入、更改inode屬性(例如更改所有者、權限或者連接)時間大於n天的文件
-mtime +n :寫入時間大於n天的文件
看到這裏,你對這三個time是不是有些暈了,那筆者就先給你介紹一下這三個time屬性。
文件的 Access time,atime 是在讀取文件或者執行文件時更改的。文件的 Modified time,mtime 是在寫入文件時隨文件內容的更改而更改的。文件的 Create time,ctime 是在寫入文件、更改所有者、權限或鏈接設置時隨 Inode 的內容更改而更改的。 因此,更改文件的內容即會更改 mtime 和 ctime,但是文件的 ctime 可能會在 mtime 未發生任何變化時更改,例如,更改了文件的權限,但是文件內容沒有變化。 如何獲得一個文件的atime mtime 以及ctime ?
ls -l 命令可用來列出文件的 atime、ctime 和 mtime。
ls -lc filename         列出文件的 ctime
ls -lu filename         列出文件的 atime
ls -l filename          列出文件的 mtime    
atime不一定在訪問文件之後被修改,因爲:使用ext3文件系統的時候,如果在mount的時候使用了noatime參數那麼就不會更新atime的信息。而這是加了 noatime 取消了, 不代表真實情況。反正, 這三個 time stamp 都放在 inode 中。若 mtime, atime 修改inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟著要改了。
繼續講find常用的參數。

-name filename 直接查找該文件名的文件,這個使用最多了。

-type type :通過文件類型查找。文件類型在前面部分已經簡單介紹過,相信你已經大體上了解了。type 包含了 f, b, c, d, l, s 等等。後續的內容還會介紹文件類型的。

【linux的文件系統】

搞計算機的應該都知道windows的系統格式化硬盤時會指定格式,fat 或者 ntfs。而linux的文件系統格式爲Ext2,或者Ext3 。早期的linux使用Ext2格式,目前的linux都使用了Ext3。 Ext2文件系統雖然是高效穩定的。但是,隨着Linux系統在關鍵業務中的應用,Linux文件系統的弱點也漸漸顯露出來了,因爲Ext2文件系統是非日誌文件系統。這在關鍵行業的應用是一個致命的弱點。Ext3文件系統是直接從Ext2文件系統發展而來,Ext3文件系統帶有日誌功能,可以跟蹤記錄文件系統的變化,並將變化內容寫入日誌,寫操作首先是對日誌記錄文件進行操作,若整個寫操作由於某種原因 (如系統掉電) 而中斷,系統重啓時,會根據日誌記錄來恢復中斷前的寫操作,而且這個過程費時極短。目前Ext3文件系統已經非常穩定可靠。它完全兼容Ext2文件系統。用戶可以平滑地過渡到一個日誌功能健全的文件系統中來。這實際上了也是ext3日誌文件系統初始設計的初衷。

Linux文件系統在windows中是不能識別的,但是在linux系統中你可以掛載的windows的文件系統,linux目前支持MS-DOS,VFAT,FAT,BSD等格式。如果你使用的是Redhat或者CentOS,那麼你不要妄圖掛載NFS格式的文件到linux下,因爲它不支持NFS。雖然有些版本的linux支持NFS,但不建議使用,因爲目前的技術還不成熟。

Ext3文件系統爲Redhat/CentOS默認使用的文件系統,除了Ext3文件系統外,有些linux發行版例如SuSE默認的文件系統爲reiserFS ,Ext3 獨特的優點就是易於轉換,很容易在 Ext2 和 Ext3 之間相互轉換,而具有良好的兼容性,其它優點 ReiserFS 都有,而且還比它做得更好。如高效的磁盤空間利用和獨特的搜尋方式都是Ext3 所不具備的,速度上它也不能和 ReiserFS相媲美,在實際使用過程中,reiserFS 也更加安全高效,據說反刪除功能也不錯。

ReiserFS 的優勢在於,它是基於 B*Tree 快速平衡樹這種高效算法的文件系統,例如在處理小於 1k 的文件比 Ext3 快 10 倍。再一個就是 ReiserFS 空間浪費較少,它不會對一些小文件分配 inode,而是打包存放在同一個磁盤塊 (簇) 中,Ext2/Ext3 是把它們單獨存放在不同的簇上,如簇大小爲 4k,那麼 2 個 100 字節的文件會佔用 2 個簇,ReiserFS 則只佔用一個。當然 ReiserFS 也有缺點,就是每升級一個版本,都要將磁盤重新格式化一次。

【linux文件類型】

在前面的內容中簡單介紹了普通文件(-),目錄(d)等,在linux文件系統中,主要有以下幾種類型的文件。
1)正規文件(regular file):就是一般類型的文件,當用ls –l 查看某個目錄時,第一個屬性爲”-“的文件就是正規文件,或者叫普通文件。正規文件又可分成純文字文件(ascii)和二進制文件(binary)。純文本文件是可以通過cat, more, less等工具直接查看內容的,而二進制文件並不能。例如我們用的命令/bin/ls 這就是一個二進制文件。
2)目錄(directory):這個很容易理解,就是目錄,跟windows下的文件夾一個意思,只不過在linux中我們不叫文件夾,而是叫做目錄。ls –l 查看第一個屬性爲”d”。
3)連接檔(link):ls –l 查看第一個屬性爲 “l”,類似windows下的快捷方式。這種文件在linux中很常見,而且筆者在日常的系統運維工作中用的很多,所以你要特意留意一下這種類型的文件。在後續章節筆者會介紹。
4)設備檔(device):與系統周邊相關的一些檔案,通常都集中在 /dev 這個目錄之下!通常又分爲兩種:區塊 (block) 設備檔 :就是一些儲存數據,以提供系統存取的接口設備,簡單的說就是硬盤啦!例如你的一號硬盤的代碼是 /dev/hda1 等等的檔案啦!第一個屬性爲 “ b “;字符 (character) 設備檔 :亦即是一些串行端口的接口設備,例如鍵盤、鼠標等等!第一個屬性爲 “ c “。

* linux 文件後綴名

對於後綴名這個概念,相信你不陌生吧。在linux系統中,文件的後綴名並沒有具體意義,也就是說,你加或者不加,都無所謂。但是爲了容易區分,linux愛好者們都習慣給文件加一個後綴名,這樣當用戶看到這個文件名時就會很快想到它到底是一個什麼文件。例如1.sh, 2.tar.gz, my.cnf, test.zip等等,如果你首次接觸這些文件,你也許會感到很暈,沒有關係,隨着學習的深入,你就會逐漸的瞭解這些文件了。筆者所列舉的幾個文件名中1.sh代表它是一個shell script ,2.tar.gz 代表它是一個壓縮包,my.cnf 代表它是一個配置文件,test.zip 代表它是一個壓縮文件。

另外需要你知道的是,早期Unix系統文件名最多允許14個字符,而新的Unix或者linux系統中,文件名最長可以到達 256 個字符!

【linux中的連接檔】

在講連接檔之前,需要你先理解inode的概念。什麼是inode呢?這就需要你知道磁盤的整體構造。磁盤是有多個盤片(類似與光盤)重疊在一起構成的,而每個盤片上會有一個可以移動的磁頭,這個磁頭的作用就是用來讀寫數據的。磁頭並不是一直在動,當磁頭固定時,盤片轉一圈,這一圈就是一個磁道了。很多個盤片同半徑的那一圈的磁道總和稱爲磁柱。而由圓心向外畫出直線,可以得到一個個扇區,如圖二所示,一個扇區的物理量大約是 512 bytes ( 約 0.5K )。


                                                        圖一

                                                        圖二

知道了大體的硬盤構造之後,再來談一談怎麼硬盤分割( partition )呢?我們在進行硬盤分割的時候,最小都是以磁柱爲單位進行分割的,那麼分割完成之後自然就是格式化( format )囉,在 Linux 裏面我們在進行格式化的時候必須要考慮到 Block 與 inode 的信息,這個 block 還好理解,他是我們磁盤可以記錄的最小單位,是由數個 sector 所組成的,所以他的大小通常爲 n*512 bytes ,例如 4K 。那麼 inode 是什麼? Block 是記錄“檔案內容數據”的地區,而 inode 則是記錄“該檔案的屬性、及該檔案放置在哪一個 Block 之內”的信息!所以,每個檔案都會佔用到至少一個 inode 。而當我們 Linux 系統要找到這個檔案時,他會先去搜尋 inode table 找到這個檔案的屬性及數據放置的地區,然後再到數據去找到數據存放的 Block 進而將數據取出利用。這個 inode 數目在一開始就會被設定好,他的設定方式通常是利用 ( 硬盤大小 / 一個容量 ),這個容量至少應該比 Block 要大一些較佳,例如剛剛的 Block 訂爲 4K ,那麼 inode 可以訂爲 8K 左右。所以,一顆 1GB 的硬盤,如果以 8K 來規劃他的 inode 數時,他的 inode 就會有 131072 個 inode 啦!而一個 inode 的大小爲 128 bytes 這麼大!這麼一來的話,我們就可以清楚的知道了,那就是一個 partition 格式化爲一個 filesystem 之後,基本上,他一定會有 inode table 與 data area 兩個區塊,一個用來記錄檔案的信息與該檔案放置的 block 區塊,一個用來記錄檔案的內容!

由於我們 Linux 在讀取數據的時候,是先查詢 inode table 以得到數據是放在那個 Block 裏面,然後再去該 Block 裏面讀取真正的數據內容!然後,那個 block 是我們在格式化硬盤的時候規定出來的一個值,這個 block 是由 2 的 n 次方個sector 所集結而成的!所以,他是 0.5K 的倍數!假設我們 block 規劃爲 4KBytes 好了,那麼由於一個 inode 與一個block 最多均只紀錄一個檔案,所以,如果你的一個檔案有 0.1 K bytes 這麼大時,你要曉得的是,由於你的 block 爲 4K bytes ,因此,你就會有 3.9 Kbytes 的空間浪費掉!所以,當你在格式化硬盤的時候,請千萬注意到你的系統未來的使用方向。

【ln 建立連接檔】

前面提到過兩次連接檔的概念,現在終於該好好介紹下這部分內容了。連接檔分爲兩種,硬連接(hard link)和軟連接(symbolic link)。

Hard Links: 上面內容中說過,當系統要讀取一個文件時,就會先去讀inode table,然後再去根據inode中的信息到塊區域去將數據取出來。而hard link 是直接再建立一個inode連接到文件放置的塊區域。也就是說,進行hard link的時候實際上該文件內容沒有任何變化,只是增加了一個指到這個文件的inode,不過這樣一來就會有個問題,因爲增加的inode會連接到塊區域,而目錄本身僅僅消耗inode而已,那麼hard link就不能連接目錄了。請你記住,hard link 有兩個限制:1 不能跨文件系統,因爲不通的文件系統有不同的inode table; 2 不能連接目錄。

Symbolic Links:跟hard link不同,這個是建立一個獨立的文件,而這個文件的作用是當讀取這個連接文件時,它會把讀取的行爲轉發到該文件所link的文件上。這樣講,也許比較繞口,那麼就來舉一個例子。現在有文件a,我們做了一個軟連接文件b(只是一個連接文件,非常小),b指向了文件a。當讀取b時,那麼b就會把讀取的動作轉發到a上,這樣就讀取到了文件a。所以,當你刪除文件a時,文件b並不會被刪除,但是再讀取b時,會提示無法打開文件。而,當你刪除b時,a是不會有任何影響的。

看樣子,似乎 hard link 比較安全,因爲即使某一個 inode 被殺掉了,只要有任何一個 inode 存在,那麼該文件就不會不見!不過,不幸的是,由於 Hard Link 的限制太多了,包括無法做目錄的 link ,所以在用途上面是比較受限的!反而是 Symbolic Link 的使用方向較廣!那麼如何建立軟連接和硬連接呢?這就用到了ln 命令。
ln 語法: ln [-s] [來源文件] [目的文件]

ln 常用的選項就一個-s ,如果不加就是建立硬連接,加上就建立軟連接。

在建立硬連接前後,123目錄所佔空間大小並沒有改變。

當把源文件刪除後,空間仍舊沒有變化。說明了刪除一個文件其實只是刪除了inode信息。

不能創建目錄的硬連接。

建立軟連接後,456目錄增加了4k

刪除源文件後會提示“沒有這個文件”的錯誤。

目錄是可以軟連接的。

刪除軟連接對源文件沒有任何影響。

七. linux系統用戶以及用戶組管理

關於這部分內容,筆者在日常的linux系統管理工作中用到的並不多,但這並不代表該內容不重要。畢竟linux系統是一個多用戶的系統,每個賬號都幹什麼用,你必須瞭如指掌。因爲這涉及到一個安全的問題。

【認識/etc/passwd和/etc/shadow】

 

這兩個文件可以說是linux系統中最重要的文件之一。如果沒有這兩個文件或者這兩個文件出問題,則你是無法正常登錄linux系統的。


/etc/passwd由’:’分割成7個字段,每個字段的具體含義是:
1)用戶名(如第一行中的root就是用戶名),代表用戶賬號的字符串。用戶名字符可以是大小寫字母、數字、減號(不能出現在首位)、點以及下劃線,其他字符不合法。雖然用戶名中可以出現點,但不建議使用,尤其是首位爲點時,另外減號也不建議使用,因爲容易造成混淆。
2)存放的就是該賬號的口令,爲什麼是’x’呢?早期的unix系統口令確實是存放在這裏,但基於安全因素,後來就將其存放到/etc/shadow中了,在這裏只用一個’x’代替。
3)這個數字代表用戶標識號,也叫做uid。系統識別用戶身份就是通過這個數字來的,0就是root,也就是說你可以修改test用戶的uid爲0,那麼系統會認爲root和test爲同一個賬戶。通常uid的取值範圍是0~65535,0是超級用戶(root)的標識號,1~499由系統保留,作爲管理賬號,普通用戶的標識號從500開始,如果我們自定義建立一個普通用戶,你會看到該賬戶的標識號是大於或等於500的。
4)表示組標識號,也叫做gid。這個字段對應着/etc/group 中的一條記錄,其實/etc/group和/etc/passwd基本上類似。
5)註釋說明,該字段沒有實際意義,通常記錄該用戶的一些屬性,例如姓名、電話、地址等等。不過,當你使用finger的功能時就會顯示這些信息的(稍後做介紹)。
6)用戶的家目錄,當用戶登錄時就處在這個目錄下。root的家目錄是/root,普通用戶的家目錄則爲/home/username,這個字段是可以自定義的,比如你建立一個普通用戶test1,要想讓test1的家目錄在/data目錄下,只要修改/etc/passwd文件中test1那行中的該字段爲/data即可。

 

 

7)shell,用戶登錄後要啓動一個進程,用來將用戶下達的指令傳給內核,這就是shell。Linux的shell有很多種sh, csh, ksh, tcsh, bash等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,該字段中除了/bin/bash外還有/sbin/nologin比較多,它表示不允許該賬號登錄。如果你想建立一個賬號不讓他登錄,那麼就可以把該字段改成/sbin/nologin,默認是/bin/bash。


再來看看/etc/shadow這個文件,和/etc/passwd類似,用”:”分割成9個字段。
1)用戶名,跟/etc/passwd對應。
2)用戶密碼,這個纔是該賬號的真正的密碼,不過這個密碼已經加密過了,但是有些黑客還是能夠解密的。所以爲了安全,該文件屬性設置爲600,只允許root讀寫。
3)上次更改密碼的日期,這個數字是這樣計算得來的,距離1970年1月1日到上次更改密碼的日期,例如上次更改密碼的日期爲2012年1月1日,則這個值就是365*(2012-1970)+1=15331。
4)要過多少天纔可以更改密碼,默認是0,即不限制。
5)密碼多少天后到期。即在多少天內必須更改密碼,例如這裏設置成30,則30天內必須更改一次密碼,否則將不能登錄系統,默認是99999,可以理解爲永遠不需要改。
6)密碼到期前的警告期限,若這個值設置成7,則表示當7天后密碼過期時,系統就發出警告告訴用戶,提醒用戶他的密碼將在7天后到期。
7)賬號失效期限。你可以這樣理解,如果設置這個值爲3,則表示:密碼已經到期,然而用戶並沒有在到期前修改密碼,那麼再過3天,則這個賬號就失效了,即鎖定了。
8)賬號的生命週期,跟第三段一樣,是按距離1970年1月1日多少天算的。它表示的含義是,賬號在這個日期前可以使用,到期後賬號作廢。
9)作爲保留用的,沒有什麼意義。
【新增/刪除用戶和用戶組】
a. )新增一個組 groupadd [-g GID] groupname

 

不加-g 則按照系統默認的gid創建組,跟用戶一樣,gid也是從500開始的

-g選項可以自定義gid

b.) 刪除組 gropudel groupname

沒有特殊選項。
c.) 增加用戶 useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]
-u 自定義UID
-g 使其屬於已經存在的某個GID
-d 自定義用戶的家目錄
-M 不建立家目錄
-s 自定義shell

你會發現,創建test11時,加上了-M選項後,在/etc/passwd文件中test11那行的第六字段依然有/home/test11,可是ls查看該目錄時,會提示該目錄不存在。


-M選項的作用就是不創建用戶的家目錄。

 

-d. 刪除用戶 userdel [-r] username

 

 

-r 選項的作用是刪除用戶時,連同用戶的家目錄一起刪除。

【chfn 更改用戶的finger (不常用)】
前面內容中提到了findger,即在/etc/passwd文件中的第5個字段中所顯示的信息,那麼如何去設定這個信息呢?

 

 

就是chfn這個命令了。修改完後,就會在/etc/passwd文件中的test的那一行第五個字段中看到相關信息了,默認是空的。

 

【創建/修改一個用戶的密碼 “passwd [username]”】

等創建完賬戶後,默認是沒有設置密碼的,雖然沒有密碼,但該賬戶同樣登錄不了系統。只有設置好密碼後方可登錄系統。

爲用戶創建密碼時,爲了安全起見,請儘量設置複雜一些。你可以按照這樣的規則來設置密碼:a. 長度大於10個字符;b. 密碼中包含大小寫字母數字以及特殊字符(*&等);c. 不規則性(不要出現root, happy, love, linux, 123456, 111111等等單詞或者數字);d. 不要帶有自己名字、公司名字、自己電話、自己生日等。

passwd 後面不跟用戶名則是更改當前用戶的密碼,當前用戶爲root,所以此時修改的是root的密碼,後面跟test則修改的是test的密碼。

【用戶身份切換】

Linux系統中,有時候普通用戶有些事情是不能做的,除非是root用戶才能做到。這時就需要臨時切換到root身份來做事了。


用test賬號登錄linux系統,然後使用su - 就可以切換成root身份,前提是知道root的密碼。

你可以使用echo $LOGNAME來查看當前登錄的用戶名

su 的語法爲: su [-] username

 

後面可以跟”-”也可以不跟,普通用戶su不加username時就是切換到root用戶,當然root用戶同樣可以su到普通用戶。

 

 

加”-“後會連同用戶的環境變量一起切換過來。su test 後雖然切換到了test用戶,但是當前目錄還是切換前的/root目錄,然後當用su - test時切換用戶後則到了test的家目錄/home/test。當用root切換普通用戶時,是不需要輸入密碼的。這也體現了root用戶至高無上的權利。

 

用su是可以切換用戶身份,如果每個普通用戶都能切換到root身份,如果某個用戶不小心泄漏了root的密碼,那豈不是系統非常的不安全?沒有錯,爲了改進這個問題,產生了sudo這個命令。使用sudo執行一個root才能執行的命令是可以辦到的,但是需要輸入密碼,這個密碼並不是root的密碼而是用戶自己的密碼。默認只有root用戶能使用sudo命令,普通用戶想要使用sudo,是需要root預先設定的,即,使用visudo命令去編輯相關的配置文件/etc/sudoers。如果沒有visudo這個命令,請使用” yum install -y sudo”安裝。

默認root能夠sudo是因爲這個文件中有一行” root ALL=(ALL) ALL” 在該行下面加入” test ALL=(ALL) ALL”就可以讓test用戶擁有了sudo的權利。如果每增加一用戶就設置一行,這樣太麻煩了。所以你可以這樣設置。

 

把這一行前面的”#”去掉,讓這一行生效。它的意思是,wheel這個組的所有用戶都擁有了sudo的權利。接下來就需要你把想讓有sudo權利的所有用戶加入到wheel這個組中即可。

 

你不妨跟筆者試一下,非常有意思。

八. Linux磁盤管理

【查看磁盤或者目錄的容量 df 和 du】

df 查看已掛載磁盤的總容量、使用容量、剩餘容量等,可以不加任何參數,默認是按k爲單位顯示的

df常用參數有 –i -h -k –m等

-i 使用inodes 顯示結果

-h 使用合適的單位顯示,例如G

-k -m 分別爲使用K,M爲單位顯示

簡單介紹一下,你看到的相關數據。Filesystem 表示扇區,也就是你劃分磁盤時所分的區;1K-blocks/1M-blocks表示以1K/1M爲單位;Used 和 Available 分別是已使用和剩餘;Use% 就是已經使用的百分比,如果這個值大於90% 那麼你就應該注意了,磁盤很有可能馬上就會變滿的;Mounted on 則表示該分區(扇區)所掛載的地方。

du 用來查看某個目錄所佔空間大小

語法:du [-abckmsh] [文件或者目錄名] 常用的參數有:

-a:全部文件與目錄大小都列出來。如果不加任何選項和參數只列出目錄(包含子目錄)大小。

-b:列出的值以bytes爲單位輸出,默認是以Kbytes

-c:最後加總

-k:以KB爲單位輸出
-m:以MB爲單位輸出
-s:只列出總和

-h:系統自動調節單位,例如文件太小可能就幾K,那麼就以K爲單位顯示,如果大到幾G,則就以G爲單位顯示。筆者習慣用 du –sh filename 這樣的形式。

【磁盤的分區和格式化】

筆者經常做的事情就是拿一個全新的磁盤來分區並格式化。這也說明了作爲一個linux系統管理員,對於磁盤的操作必須要熟練。所以請你認真學習該部分內容。
fdisk linux下的硬盤分區工具
語法: fdisk [-l ] [設備名稱]

-l :後邊不跟設備名會直接列出系統中所有的磁盤設備以及分區表,加上設備名會列出該設備的分區表。

如果不加-l 則進入另一個模式,在該模式下,可以對磁盤進行分區操作。

剛進入該模式下,會有一個提示Command (m for help): 此時按m則會打印出幫助列表,如果你英文好,我想你不難理解這些字母的功能。筆者常用的有p, n,d, w, q.

P:打印當前磁盤的分區情況。

n:重新建立一個新的分區。
w:保存操作。
q:退出。
d:刪除一個分區

因爲筆者的linux系統是安裝在虛擬機上的,所以我可以增加一塊新的磁盤。然後筆者會把新的磁盤分成多個分區。

當再次fdisk -l 查看時發現多了一個/dev/hdb 設備,並提示該設備沒有可用的分區表。那麼下面就來分一下這個/dev/hdb.

首先用p查看一下,並沒有任何分區信息。

用n創建一個新的分區,會提示要建立e (extended 擴展分區)或者p (primary partition主分區),這裏筆者選擇主分區,所以按了p回車後,又讓輸入First cylinder 你或者直接回車或者輸入一個數字,因爲這塊磁盤是新的並沒有任何分區,所以直接回車其實就是從1開始了。你也可以自定義輸入,但不要超過2080,筆者這裏輸入1回車。此時會提示要分多大,可以寫一個數值(2-2080),也可以輸入+sizeK或者+sizeM,後者比較直觀容易理解,所以筆者在這裏輸入+100M,即我分了一個100M的主分區。再用p查看時,果真多出來一個分區。然後筆者繼續重複前面的操作,建立了4個主分區。當筆者再次輸入n創建分區時,結果提示錯了。

由此你會發現,在linux中最多隻能創建4個主分區,那如果你想多創建幾個分區如何做?很容易,在創建完第三個分區後,創建第四個分區時選擇擴展分區。

先刪除第四個主分區,然後建立一個擴展分區

在建立擴展分區時,會問你要分多少給這個擴展分區,筆者直接回車,即把所有空間都分給了這個擴展分區。這個擴展分區/dev/hdb4並不能往裏寫數據,它只是一個空殼子,需要我們繼續在這個空殼中繼續創建分區。

當建立完擴展分區,然後按n創建新分區時你會發現不再提示是要建立p還是e了,因爲我們已經不能再創建p了。在這裏需要你明白的是,hdb5 其實只是 hdb4 中的一個子分區,到目前爲止可用的分區也才4個,那筆者就再創建第5個分區出來。

然後按w保存,該模式自動退出,如果你不想保存分區信息直接按q即可退出。

下面我們把剛分好的分區刪除,重新建立分區。如何刪除你還記得吧,對了就是直接按d然後選擇合適的數字。刪除完所有分區後,這塊磁盤就恢復如初了。

第一個分區,我們就建立成擴展分區。並且分給它200M。

當再次新建分區時,發生了變化,不再是p或者e了,而是p或者l(邏輯分區),這是爲什麼呢?在上面也提到了,一個擴展分區只是一個空殼,在擴展分區下纔可以繼續劃分小的分區,這個小的分區其實就是邏輯分區了。

而且這個邏輯分區默認都是從字數5開始的,因爲前面的數字要麼給主分區留着,要麼給擴展分區留着。由此我們也可以得到,在linux中最多可以創建4個主分區,一旦創建4個主分區後就不能增加任何分區了。另外最多也只能創建一個擴展分區。擴展分區下的邏輯分區最多可以創建多少呢?IDE的硬盤(類似於hda, hdb, hdc 等)最多可以創建10個(hdb5-hdb15),這是筆者試驗出來的結果。有的資料說linux下的邏輯分區是沒有限制的,也有的說最大可以到64,至於對不對,需要你去近一步考察了,我們沒有必要多麼深入的研究這個問題,也沒有什麼意義。
通過以上操作,相信你也學會了用fdisk 來分區了吧。值得提出的是,不要閒着沒事分區玩兒,這操作的危險性是很高的,一不留神就把你服務器上的數據全部給分沒有了。如果有分區的操作,那麼請保持百分之二百的細心,切記切記!
mkfs.ext2 / mkfs.ext3 /mke2fs 格式化linux硬盤分區
當用man查詢這三個命令的幫助文檔時,你會發現我們看到了同一個幫助文檔,這說明三個命令是一樣的。常用的選項有:
-b:分區時設定每個數據區塊佔用空間大小,目前支持1024, 2048 以及4096 bytes每個塊。
-i:設定inode大小
-N:設定inode數量,有時使用默認的inode數不夠用,所以要自定設定inode數量。
-c:在格式化前先檢測一下磁盤是否有問題,加上這個選項後會非常慢

-L:預設該分區的標籤label

-j:建立ext3格式的分區,如果使用mkfs.ext3 就不用加這個選項了

不加任何選項,直接格式化/dev/hdb1

上例中更改了block size爲4096 默認是1024,而inode大小設定爲4096。

下面的例子分區時自定義分區的label(標籤)名。

e2label 用來查看或者修改分區的標籤(label)

這個命令很簡單,後邊直接跟分區編號,即可查看該分區的label,當想要修改標籤名時,分區編號後邊跟想要的標籤名即可。

fsck 檢查硬盤有沒有壞道
語法: fsck [-Aar] [分區]
-A :加該參數時,後不需要跟分區名作爲參數。它會自動檢查/etc/fstab 文件下的所有分區(開機過程中就會執行一次該操作);
-a :自動修復檢查到有問題的分區;

-r :當檢查到有壞道的分區時會讓用戶決定是否修復。

當你使用fsck檢查磁盤有無壞道時,會提示用戶“跑這個任務可能會導致某些掛載的文件系統損壞”,所以這個命令不要輕易運行。否則真的遇到問題,系統甚至都不能啓動了。

【掛載/卸載磁盤】
在上面的內容中講到了磁盤的分區和格式化,那麼格式化完了後,如何去用它呢?這就涉及到了掛載這塊磁盤。格式化後的磁盤其實是一個塊設備文件,類型爲b,也許你會想,既然這個塊文件就是那個分區,那麼直接在那個文件中寫數據不就寫到了那個分區中麼?當然不行。
在掛載某個分區前需要先建立一個掛載點,這個掛載點是以目錄的形式出現的。一旦把某一個分區掛載到了這個掛載點(目錄)下,那麼再往這個目錄寫數據使,則都會寫到該分區中。這就需要你注意一下,在掛載該分區前,掛載點(目錄)下必須是個空目錄。其實目錄不爲空並不影響所掛載分區的使用,但是一旦掛載上了,那麼該目錄下以前的東西就不能看到了。只有卸載掉該分區後才能看到。

 

mount 掛載設備

 

先建立/test1 /test2 目錄,然後在/test1目錄下建立一個1.txt文件。

把/dev/hdb1分區掛載到/test1目錄,然後再查看/test1目錄發下,1.txt不存在了。此時往/test1目錄下寫數據,則會寫到/dev/hdb1分區中。在講mount的-a選項時,我們有必要先了解一下這個文件 /etc/fstab

這個文件是系統啓動時,需要掛載的各個分區。第一列就是分區的label;第二列是掛載點;第三列是分區的格式;第四列則是mount的一些掛載參數,等下會詳細介紹一下有哪些參數,一般情況下,直接寫defaults即可;第五列的數字表示是否被dump備份,是的話這裏就是1,否則就是0;第六列是開機時是否自檢磁盤,就是剛纔講過的那個fsck檢測。1,2都表示檢測,0表示不檢測,在Redhat中,這個1,2還有個說法,/ 分區必須設爲1,而且整個fstab中只允許出現一個1,這裏有一個優先級的說法。1比2優先級高,所以先檢測1,然後再檢測2,如果有多個分區需要開機檢測那麼都設置成2吧,1檢測完了後會同時去檢測2。下面該說說第四列中常用到的參數了。
async/sync :async表示和磁盤和內存不同步,系統每隔一段時間把內存數據寫入磁盤中,而sync則會時時同步內存和磁盤中數據;
auto/noauto :開機自動掛載/不自動掛載;
default:按照大多數永久文件系統的缺省值設置掛載定義,它包含了rw, suid, dev, exec, auto, nouser,async ;
ro:按只讀權限掛載 ;
rw:按可讀可寫權限掛載 ;
exec/noexec :允許/不允許可執行文件執行,但千萬不要把根分區掛載爲noexec,那就無法使用系統了,連mount命令都無法使用了,這時只有重新做系統了;
user/nouser :允許/不允許root外的其他用戶掛載分區,爲了安全考慮,請用nouser ;
suid/nosuid :允許/不允許分區有suid屬性,一般設置nosuid ;
usrquota :啓動使用者磁盤配額模式,磁盤配額相關內容在後續章節會做介紹;
grquota :啓動羣組磁盤配額模式;
學完這個/etc/fstab後,我們就可以自己修改這個文件,增加一行來掛載新增分區。例如,筆者增加了這樣一行
/dev/hdb1 /test1 ext3 defaults 0 0
那麼系統再重啓時就會掛載這個分區了。
講完了/etc/fstab 我們繼續回來講這個mount,mout -a 如果運行了這個命令,則會把/etc/fstab中出現的所有磁盤分區掛載上。所以當你在/etc/fstab文件中增加一行後,你完全可以直接運行mount -a 來掛載你增加的那行,這樣就不用重啓啦。

你可以使用mount -o 選項來重新掛載一個分區,並同時指定你想要的選項(即上邊介紹fstab第六列中那些)

看到了吧,使用了ro選項,則不能新建文件了。

再重新掛載一次就恢復正常了,如果不加任何其他選項,則就是defaults。
筆者在日常的運維工作中遇到過這樣的情況,一臺服務器上新裝了亮塊磁盤,磁盤a(在服務器上顯示爲sdc)和磁盤b(在服務器上顯示爲sdd),有一次把這兩塊磁盤都拔掉了,然後再重新插上,重啓機器,結果磁盤編號調換了,a變成了sdd,b變成了sdc(這是因爲把磁盤插錯了插槽),問題來了。通過上邊的學習,你掛載磁盤是通過/dev/hdb1 這樣的分區名字來掛載的,如果先前加入到了/etc/fstab 中,結果系統啓動後則會掛載錯分區。那麼怎麼樣避免這樣的情況發生?

blkid 這個命令是用來顯示磁盤分區uuid的,uuid其實就是一大串字符,在linux系統中每一個分區都會有唯一的一個uuid。說到這,聰明的你想到了吧,沒有錯,我們就用這唯一的uuid來掛載磁盤分區。

這個命令筆者只是用來顯示uuid,沒有其他用途所以不做詳細介紹,當然你也可以在命令後邊跟某一個分區,只顯示該分區的uuid。

看到了吧,其實是很好用的。那麼怎麼讓它也開機啓動?很簡單,把剛纔敲的mount 磁盤的命令直接寫到 /etc/rc.d/rc.local 文件即可。對了,筆者到現在還沒有給你講過這個rc.local文件的作用。簡單點說,系統啓動完後會執行這個文件中的命令。所以只要你想開機後運行什麼命令統統寫入到這個文件下面吧。

其實這個文件就是一個shell 腳本,以後筆者會單獨用一章來介紹它。行開頭的”#”是註釋的意思,代表這行在這個腳本中不生效。你想讓系統開機後運行什麼命令,就把什麼命令寫到這裏面來。就比如剛纔筆者掛載的那條命令。你可以這樣實現:

 

mount 還有一個比較常用的選項就是-t ,後邊指定文件系統的類型,比如掛載軟盤時就需要指定 vfat,而掛載光盤時就需要指定iso9660,但在筆者多年來的經驗,目前的系統都是智能識別所要掛載分區的系統格式類別的。也就是說,用不着你去指定,它會自動判斷的。


umount 卸載設備
現在你學會了如何掛載一個設備,那麼如何去卸載一個設備呢,這就要用到umount了,這個命令也簡單的很,後邊可以跟掛載點,也可以跟分區名(/dev/hdb1)

 

 

有時也許你會遇到比較難卸載的設備,就像在windows下無法刪除U盤一樣,教你一個特管用的方法就是 umount -l /dev/hdb1 ,這個-l選項有強制卸載的意思,你一定要記住哦,非常有用的。

 

【建立一個swap文件】

從裝系統時就接觸過這個swap了,前面也說過它類似與windows的虛擬內存,分區的時候一般大小爲內存的2倍,如果你的內存超過4G,那麼你分8G似乎是沒有必要了。分4G足夠日常交換了。然而,還會有虛擬內存不夠用的情況發生。如果真遇到了,莫非還要重新分一下磁盤?當然不能!那我們就增加一個虛擬的磁盤出來。
基本的思路就是:建立swapfile  格式化爲swap格式  啓用該虛擬磁盤

利用dd 來創建一個419M的文件/tmp/newdisk出來,其中if代表從哪個文件讀,/dev/zero是linux下特有的一個0生成器,of表示輸出到哪個文件,bs即塊大小,count則定義有多少個塊。

mkswap 這個命令是專門格式化swap格式的分區的,這個命令用的時候一定要看清楚了,否則把其他分區給格式化錯了就只有哭了。

free 是用來查看系統內存以及虛擬內存使用情況的,-m選項是以M的形式查看。可以看到當前系統的。而swapon 是啓用我們新建的swap文件,啓用後再用free查看發現多了400M。

我們還可以用swapoff 關閉啓用的swap文件。

【磁盤配額】

磁盤配合其實就是給每個用戶分配一定的磁盤額度,只允許他使用這個額度範圍內的磁盤空間。在linux系統中,是多用戶多任務的環境,所以會有很多人共用一個磁盤的情況。針對每個用戶去限定一定量的磁盤空間是有必要的,這樣才顯得公平。
在linux中,用來管理磁盤配額的東西就是quota了。如果你的linux上沒有quota,則需要你安裝這個軟件包 quota-3.13-5.el5.RPM (其實版本是多少無所謂了,關鍵是這個軟件包)。quota在實際應用中是針對整個分區進行限制的。如果你的/dev/hda3 是掛載在/home 目錄下的,那麼/home 所有目錄都會受到限制。
quota 這個模塊主要分爲quota quotacheck quotaoff quotaon quotastats edquota setquota warnquota repquota這幾個命令,下面就分別介紹這些命令。
quota 用來顯示某個組或者某個使用者的限額。
語法:quota [-guvs] [user,group]
-g :顯示某個組的限額
-u :顯示某個用戶的限額
-v :顯示的意思
-s :選擇inod或硬盤空間來顯示
quotacheck 用來掃描某一個磁盤的quota空間。
語法:quotacheck [-auvg] /path
-a :掃描所有已經mount的具有quota支持的磁盤
-u :掃描某個使用者的文件以及目錄
-g :掃描某個組的文件以及目錄
-v :顯示掃描過程
-m :強制進行掃描
edquota 用來編輯某個用戶或者組的quota值。
語法:edquota [-u user] [-g group] [-t]
edquota -p user -u user
-u :編輯某個用戶的quota
-g :編輯某個組的quota
-t :編輯寬限時間
-p :拷貝某個用戶或組的quta到另一個用戶或組
當運行edquota -u user 時,系統會打開一個文件,你會看到這個文件中有7列,它們分別代表的含義是:
Filesystem :磁盤分區,如/dev/hda3
blocks :當前用戶在當前的Filesystem中所佔用的磁盤容量,單位是Kb。該值請不要修改。
soft/hard :當前用戶在該Filesystem內的quota值,soft指的是最低限額,可以超過這個值,但必須要在寬限時間內將磁盤容量降低到這個值以下。hard指的是最高限額,即不能超過這個值。當用戶的磁盤使用量高於soft值時,系統會警告用戶,提示其要在寬限時間內把使用空間降低到soft值之下。
inodes :目前使用掉的inode的狀態,不用修改。
quotaon 啓動quta,在編輯好quota後,需要啓動才能是quta生效
語法:quotaon [-a] [-uvg directory]
-a :全部設定的quota啓動
-u :啓動某個用戶的quota
-g :啓動某個組的quota

-s :顯示相關信息

quotaoff 關閉quota

該命令常用只有一種情況 quotaoff -a 關閉全部的quota
以上講了很多quota的相關命令,那麼接下來筆者教你如何在實踐應用中去做這個磁盤配額。整個執行過程如下:

首先先確認一下,你的/home目錄是不是單獨的掛載在一個分區下,用df 查看即可。如果不是則需要你跟我一起做。否則這一步即可省略。

筆者的linux系統中,/home並沒有單獨佔用一個分區。所以需要把/home目錄掛載在一個單獨的分區下,因爲quota是針對分區來限額的。

筆者用fdisk -l 查看目前/dev/hdb 磁盤有5個可用分區,所以筆者打算把/dev/hdb1掛載在/home 目錄下

看到了吧,目前筆者的/home目錄已經是一個單獨的分區了。

1)建立測試用戶

首先建立一個test用戶,則同時建立了一個test組。可以在/etc/passwd中有以test爲開頭的行,其中uid和gid都爲500 ,然後又建立一個test1賬號,使其加入test組,查看/etc/passwd文件發現test和test1用戶的gid都爲500。(也許你對/etc/passwd文件、增加一個用戶以及uid和gid等概念不熟悉,沒有關係,在以後的章節中會做介紹,在這裏只需要你明白即可)
2)打開磁盤的quota功能

默認linux並沒有對任何分區做quota的支持,所以需要我們手動打開磁盤的quota功能,你是否記得,在前面內容中分析/etc/fstab文件的第四列時講過這個quota選項(usrquota, grpquota)。沒錯,要想打開這個磁盤的quota支持就是需要修改這個第四列的。用vim編輯/etc/fstab 加入一行,如下圖:

vim命令將會在後續章節詳細介紹,前面介紹過如何進入編輯模式以及如何保存文件。如果你的linux系統已經有/home這一行,那麼直接修改第四列,加上usrquota,grpguota(中間沒有空格)。接下來需要重新掛載/home。

另外你也可以這樣實現重新掛載/home

如何查看是否啓用了quota呢?

只要查看/etc/mtab文件中/home所在那行是否有usrguota,grpquota即可。筆者的/dev/hdb1現在已經支持了quota
3)掃描磁盤的使用者使用狀況,併產生重要的aquota.group與aquota.user

這一步就需要用到quotacheck了,aquota.group與aqouta.user分別是組以及用戶磁盤配額需要的配置文件。如果沒有這兩個文件,則磁盤配額是不會生效的。

當首次使用quotacheck命令時,會提示“cannot stat old user quota file ……”其實這是在提示你在/home目錄下沒有aquota.user以及aquota.group兩個文件。沒有關係,因爲以前並沒有配置過磁盤配額,當然沒有這兩個文件了。當執行完quotacheck命令後,會在/home目錄下生成這兩個文件的。

4)啓動quota配額

5)編輯用戶磁盤配額

 

先來設定test賬戶的配額,然後直接把test的配額拷貝給test1即可。這裏就需要用到edquota了。

 

講上面內容修改爲

其中單位是Kb,所以soft 值大約爲20Mb,hard值爲30Mb,保存這個文件,保存的方式跟vim一個文件的方式一樣的。

將test的配額複製給test1。下面繼續設定寬限時間。

默認是7days 在這裏我們改爲1days。下面查看一下test以及test1用戶的配額吧。

6)編輯組磁盤配額

設定組test的soft配額值爲40M,hard值爲50M。下面查看組test的配額。

7)設定開機啓動

前面已經講到啓動磁盤配額的命令是quotaon -aug ,所以要想開機啓動,只需將這條命令加入到 /etc/rc.d/rc.local文件即可。

 

九. 文本編輯工具vim

 

前面多次提到過vim這個東西,它是linux中必不可少的一個工具。沒有它很多工作都無法完成。早期的Unix都是使用的vi作爲系統默認的編輯器的。你也許會有疑問,vi與vim有什麼區別?可以這樣簡單理解,vim是vi的升級版。很多linux系統管理員都習慣用vi,那是因爲他們接觸linux的時候用的就是vi,vim後來才比較流行。所以,無所謂用vi和vim,只要你能達到你想要的目的即可。

在筆者看來vi 和vim最大的區別就是編輯一個文本時,vi不會顯示顏色,而vim會顯示顏色。顯示顏色更易於用戶進行編輯。其他功能沒有什麼區別。所以在linux系統下,使用vi還是vim完全取決你的個人愛好而已。筆者從一開始學linux就一直使用vim,所以也會一直以vim的角色來教授給你。

vim的三種模式:一般模式、編輯模式、命令模式。這需要你牢記的,因爲以前筆者剛剛從事linux工作的時候去面試,很多單位的筆試題就有這個知識點。

* 一般模式: 當你vim filename 編輯一個文件時,一進入該文件就是一般模式了。在這個模式下,你可以做的操作有,上下移動光標;刪除某個字符;刪除某行;複製、粘貼一行或者多行。
* 編輯模式:一般模式下,是不可以修改某一個字符的,只能到編輯模式了。從一般模式進入編輯模式,只需你按一個鍵即可(i,I,a,A,o,O,r,R)。當進入編輯模式時,會在屏幕的最下一行出現“INSERT或REPLACE”的字樣。從編輯模式回到一般模式只需要按一下鍵盤左上方的ESC鍵即可。

 

* 命令模式:在一般模式下,輸入”:”或者”/”即可進入命令模式。在該模式下,你可以搜索某個字符或者字符串,也可以保存、替換、退出、顯示行號等等。

 

下面筆者教你如何在一個空白文檔中寫入一段文字,然後保存。

輸入vim test.txt直接回車進入一般模式。然後按"i" 字母進入編輯模式

會看到窗口的左下方出現”INSERT”字樣,說明已經進入了編輯模式,此時就可以寫入內容了。

等編輯完內容後,按ESC退出編輯模式,進入一般模式。此時在左下方的”INSERT”字樣消失,然後按”:”進入命令模式,最後輸入wq保存並退出vim。

這時,看一下test.txt文檔的內容吧。

其實vim爲全鍵盤操作的編輯器,所以在各個模式下都有很多功能鍵盤的。下面筆者列舉一下,其中筆者認爲常用的會用紅色標出,需要你多加練習,另外不常用的你也要知道的。

暫時就講這麼多了。如果你全部掌握,你就是vim高手啦。如果你覺得太多,只要記住筆者標紅部分即可,其他的用時再過來查就ok啦。下面筆者給你留一個小作業,希望你要認真完成!
 1.)請把/etc/init.d/iptables 複製到/root/目錄下,並重命名爲test.txt
 2.) 用vim打開test.txt並設置行號
 3.) 分別向下、向右、向左、向右移動5個字符
 4.)分別向下、向上翻兩頁
 5.) 把光標移動到第49行
 6.) 讓光標移動到行末,再移動到行首
 7.) 移動到test.txt文件的最後一行
 8.) 移動到文件的首行
 9.) 搜索文件中出現的 iptables 並數一下一共出現多少個
10.) 把從第一行到第三行出現的iptables 替換成iptable
11.) 還原上一步操作
12.) 把整個文件中所有的iptables替換成iptable
13.) 把光標移動到50行,刪除字符”$”
14.) 還原上一步操作
15.) 刪除第50行
16.) 還原上一步操作
17.) 刪除從37行到42行的所有內容
18.) 還原上一步操作
19.) 複製48行並粘貼到52行下面
20.) 還原上一步操作(按兩次u)
21.) 複製從37行到42行的內容並粘貼到44行上面
23.) 還原上一步操作(按兩次u)
24.) 把37行到42行的內容移動到19行下面
25.) 還原上一步操作(按兩次u)
26.) 光標移動到首行,把/bin/sh 改成 /bin/bash
27.) 在第一行下面插入新的一行,並輸入”# Hello!”

28.) 保存文檔並退出

十. 文檔的壓縮與打包

在windows下我們接觸最多的壓縮文件就是.rar格式的了。但在linux下這樣的格式是不能識別的,它有自己所特有的壓縮工具。有一種文件在windows和linux下都能使用那就是.zip格式的文件了。壓縮的好處不用筆者介紹相信你也曉得吧,它不僅能節省磁盤空間而且在傳輸的時候還能節省網絡帶寬呢。

在linux下最常見的壓縮文件通常都是以.tar.gz 爲結尾的,除此之外還有.tar, .gz, .bz2, .zip等等。以前也介紹過linux系統中的後綴名其實要不要無所謂,但是對於壓縮文件來講必須要帶上。這是爲了判斷壓縮文件是由哪種壓縮工具所壓縮,而後才能去正確的解壓縮這個文件。以下介紹常見的後綴名所對應的壓縮工具。

.gz gzip 壓縮工具壓縮的文件
.bz2 bzip2 壓縮工具壓縮的文件
.tar tar 打包程序打包的文件(tar並沒有壓縮功能,只是把一個目錄合併成一個文件)
.tar.gz 可以理解爲先用tar打包,然後再gzip壓縮

.tar.bz2 同上,先用tar打包,然後再bzip2壓縮

【gzip】
語法: gzip [-d#] filename 其中#爲1-9的數字
-d :解壓縮時使用

 

-# :壓縮等級,1壓縮最差,9壓縮最好,6爲默認

 

壓縮test.txt後,則變成了test.txt.gz

用-d解壓縮

要注意的是,gzip不可以壓縮目錄

【bzip2】
語法:bzip2 [-dz] filename
-d :解壓縮

 

-z :壓縮

 

其實-z參數是可以省略掉的,你不妨試試

跟gzip的解壓類似,也是用-d解壓。

【tar】
語法:tar [-zjxcvfpP] filename
-z :是否同時用gzip壓縮
-j :是否同時用bzip2壓縮
-x :解包或者解壓縮
-t :查看tar包裏面的文件
-c :建立一個tar包或者壓縮文件包
-v :可視化
-f :後面跟文件名,壓縮時跟-f文件名,意思是壓縮後的文件名爲filename,解壓時跟-f文件名,意思是解壓filename。請注意,如果是多個參數組合的情況下帶有-f,請把f寫到最後面。
-p :使用原文件的屬性,壓縮前什麼屬性壓縮後還什麼屬性。(不常用)
-P :可以使用絕對路徑。(不常用)

 

--exclude filename :在打包或者壓縮時,不要將filename文件包括在內。(不常用)

 

首先在test目錄下建立test111目錄,然後在test111目錄下建立test2.txt,並寫入”nihao”到test2.txt中,接着是用tar把test111打包成test111.tar。請記住-f參數後跟的是打包後的文件名。

刪除原來的test111目錄,然後解包test111.tar,不管是打包還是解包,原來的文件是不會刪除的。

打包的同時使用gzip壓縮

用-tf 跟包名來查看包或者壓縮包內的文件都有哪些

先刪除test111,然後用tar -zxvf 來解壓.tar.gz的壓縮包。

-jcvf 打包的同時用bzip2壓縮,-tf同樣可以查看.tar.bz2的壓縮包

-jxvf解壓縮.tar.bz2的壓縮包

--exclude參數的作用就是打包的時候過濾掉某些文件,如果想過濾多個文件怎麼辦

只能是繼續跟 --exclude filename了。

十二. Linux下安裝Tomcat服務器和部署Web應用

Linux 下,安裝Tomcat,並部署web應用:

https://www.cnblogs.com/xdp-gacl/p/4097608.html

Linux下,安裝Oracle 

https://blog.csdn.net/holmofy/article/details/77622284

 

 

----------------------------------------我是低調的分隔線-------------------------------------------- 

                      

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章