歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux基礎

Linux基礎

日期:2017/3/1 11:44:22   编辑:關於Linux

1、Linux簡介

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

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。

Linux能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。

2、Linux的發行版

Linux的發行版說簡單點就是將Linux內核與應用軟件做一個打包。

目前市面上較知名的發行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE、TurboLinux、BluePoint、RedFlag、Xterm、SlackWare等。


3、Linux應用領域

今天各種場合都有使用各種Linux發行版,從嵌入式設備到超級計算機,並且在服務器領域確定了地位,通常服務器使用LAMP(Linux + Apache + MySQL + PHP)或LNMP(Linux + Nginx+ MySQL + PHP)組合。


4、Linux安裝

centos6.4 下載地址:

網易鏡像:http://mirrors.163.com/centos/6/isos/搜狐鏡像:http://mirrors.sohu.com/centos/6/isos/

注:建議安裝64位Linux系統。

注:你也可以在Window上安裝VMware虛擬機來安裝Linux系統。


5、Linux 安裝步驟

1、首先,使用光驅或U盤或你下載的Linux ISO文件進行安裝。

界面說明:

image001

Install or upgrade an existing system 安裝或升級現有的系統

install system with basic video driver 安裝過程中采用基本的顯卡驅動

Rescue installed system 進入系統修復模式

Boot from local drive 退出安裝從硬盤啟動

Memory test 內存檢測

注:用聯想E49安裝時選擇第一項安裝時會出現屏幕顯示異常的問題,後改用第二項安裝時就沒有出現問題

2、介質直接"skip"就可以了

image002

3、出現引導界面,點擊"next"

image003

4、選中"English(English)"否則會有部分亂碼問題

image004

5、鍵盤布局選擇"U.S.English"

image005

6、選擇"Basic Storage Devies"點擊"Next"

image006

7、詢問是否忽略所有數據,新電腦安裝系統選擇"Yes,discard any data"

image007

8、Hostname填寫格式"英文名.姓"

image008

9、網絡設置安裝圖示順序點擊就可以了

image009

10、時區可以在地圖上點擊,選擇"shanghai"並取消System clock uses UTC前面的對勾

image010

11、設置root的密碼

image011

12、硬盤分區,一定要按照圖示點選

image012

13、調整分區,必須要有/home這個分區,如果沒有這個分區,安裝部分軟件會出現不能安裝的問題

image013

14、詢問是否格式化分區

image014

15、將更改寫入到硬盤

image015

16、引導程序安裝位置

image016

17、最重要的一步,也是最關鍵的一步,按圖示順序點擊

image017

18、取消以下內容的所有選項

Applications

Base System

Servers

並對Desktops進行如下設置

即取消如下選項:

Desktop Debugging and Performance Tools

Desktop Platform

Remote Desktop Clients

Input Methods中僅保留ibus-pinyin-1.3.8-1.el6.x86_64,其他的全部取消

image018

image019

19、選中Languages,並選中右側的Chinese Support然後點擊紅色區域

image020

20、調整完成後如下圖所示

image021

21、至此,一個最精簡的桌面環境就設置完成了,

image022

22、安裝完成,重啟

image023

23、重啟之後,的License Information

image024

24、Create User

Username:填寫您的英文名(不帶.姓)

Full Name:填寫您的英文名.姓(首字母大寫)

image025

25、"Date and Time" 選中 "Synchronize data and time over the network"

Finsh之後系統將重啟

image026

26、第一次登錄,登錄前不要做任何更改,這個很重要!!!登錄之後緊接著退出

第二次登錄,選擇語言,在紅色區域選擇下拉小三角,選other,選中"漢語(中國)"

image027

image028

27、登錄之後,請一定按照如下順序點擊!

至此,CentOS安裝完成,如有其他問題,請隨時與我聯系!!

image029


6、Linux啟動

Linux系統的啟動過程可以分為5個階段:

內核的引導。 運行init。系統初始化。建立終端 。用戶登錄系統。

7、內核引導

當計算機打開電源後,首先是BIOS開機自檢,按照BIOS中設置的啟動設備(通常是硬盤)來啟動。

操作系統接管硬件以後,首先讀入 /boot 目錄下的內核文件。

bg2013081702


8、運行init

init 進程是系統所有進程的起點,你可以把它比擬成系統所有進程的老祖宗,沒有這個進程,系統中任何進程都不會啟動。

init 程序首先是需要讀取配置文件 /etc/inittab。

bg2013081703

運行級別

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

init進程的一大任務,就是去運行這些開機啟動的程序。

但是,不同的場合需要啟動不同的程序,比如用作服務器時,需要啟動Apache,用作桌面就不需要。

Linux允許為不同的場合,分配不同的開機啟動程序,這就叫做"運行級別"(runlevel)。也就是說,啟動時根據"運行級別",確定要運行哪些程序。

bg2013081704

Linux系統有7個運行級別(runlevel):

運行級別0:系統停機狀態,系統默認運行級別不能設為0,否則不能正常啟動運行級別1:單用戶工作狀態,root權限,用於系統維護,禁止遠程登陸運行級別2:多用戶狀態(沒有NFS)運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制台命令行模式運行級別4:系統未使用,保留運行級別5:X11控制台,登陸後進入圖形GUI模式運行級別6:系統正常關閉並重啟,默認運行級別不能設為6,否則不能正常啟動

9、系統初始化

在init的配置文件中有這麼一行: si::sysinit:/etc/rc.d/rc.sysinit 它調用執行了/etc/rc.d/rc.sysinit,而rc.sysinit是一個bash shell的腳本,它主要是完成一些系統初始化的工作,rc.sysinit是每一個運行級別都要首先運行的重要腳本。

它主要完成的工作有:激活交換分區,檢查磁盤,加載硬件模塊以及其它一些需要優先執行任務。

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"來自行設定。

bg2013081705


10、建立終端

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程序來驗證用戶的身份。


11、用戶登錄系統

一般來說,用戶的登錄方式有三種:

(1)命令行登錄(2)ssh登錄(3)圖形界面登錄

bg2013081706

對於運行級別為5的圖形方式用戶來說,他們的登錄是通過一個圖形化的登錄界面。登錄成功後可以直接進入KDE、Gnome等窗口管理器。

而本文主要講的還是文本方式登錄的情況:當我們看到mingetty的登錄界面時,我們就可以輸入用戶名和密碼來登錄系統了。

Linux的賬號驗證程序是login,login會接收mingetty傳來的用戶名作為用戶名參數。

然後login會對用戶名進行分析:如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內容,然後退出。

這通常用來系統維護時防止非root用戶登錄。只有/etc/securetty中登記了的終端才允許root用戶登錄,如果不存在這個文件,則root可以在任何終端上登錄。

/etc/usertty文件用於對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。


12、圖形模式與文字模式的切換方式

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 切換至命令窗口。

bg2013081707


13、Linux 關機

在linux領域內大多用在服務器上,很少遇到關機的操作。畢竟服務器上跑一個服務是永無止境的,除非特殊情況下,不得已才會關機。

正確的關機流程為:sysnc > shutdown > reboot > halt

關機指令為:shutdown ,你可以man shutdown 來看一下幫助文檔。

例如你可以運行如下命令關機:

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.


14、Linux系統目錄結構

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

 ls / 

你會看到如下圖所示:

4_20

樹狀目錄結構:

003vPl7Rty6E8kZRlAEdc&690

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

/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的預設放置也是在這裡。


15、Linux忘記密碼解決方法

linux系統忘記root密碼的情況該怎麼辦呢?重新安裝系統嗎?當然不用!進入單用戶模式更改一下root密碼即可。

步驟如下:

重啟linux系統

4_21

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

4_22

然後輸入e

4_23

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

4_24在後邊加上single 回車

4_25

最後按"b"啟動,啟動後就進入了單用戶模式了

4_26

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

4_27

使用系統安裝光盤的救援模式

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

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

4_28

輸入linux rescue 回車

4_29

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

4_30

選擇us 鍵盤

4_31

4_32

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

4_33

這裡告訴我們,接下來會把系統掛載在/mnt/sysimage 中。

其中有三個選項:

Continue 就是掛載後繼續下一步。 Read-Only 掛載成只讀,這樣更安全,有時文件系統損壞時,只讀模式會防止文件系統近一步損壞。Skip就是不掛載,進入一個命令窗口模式。

這裡我們選擇Continue。

4_34

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

4_35

提示: 其實也可以到rescue模式下更改root的密碼的。這個rescue模式和windows PE系統很相近。

當運行了chroot /mnt/sysimage/ 後,再ls 看到目錄結構和原來系統中的目錄結構是一樣的。

沒錯!現在的環境和原來系統的環境是一模一樣的。你可以輸入exit 或者按Ctrl + D退出這個環境。然後你再ls 看一下

4_36

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


16、Linux遠程登錄

Linux一般作為服務器使用,而服務器一般放在機房,你不可能在機房操作你的Linux服務器。

這事我們就需要遠程登錄到Linux服務器來管理維護系統。

Linux系統中是通過ssh服務實現的遠程登錄功能,默認ssh服務端口號為 22。

Window系統上 Linux 遠程登錄客戶端有SecureCRT, Putty, SSH Secure Shell等,本文以Putty為例來登錄遠程服務器。

putty下載地址:http://www.putty.org/

如果你下載了putty,請雙擊putty.exe 然後彈出如下的窗口。

5_1

在Host Name( or IP address) 下面的框中輸入你要登錄的遠程服務器IP(可以通過ifconfig命令查看服務器ip),然後回車。

5_12

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

5_13

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

5_14


17、使用密鑰認證機制遠程登錄linux

SSH 為 Secure Shell 的縮寫,由 IETF 的網絡工作小組(Network Working Group)所制定。

SSH 為建立在應用層和傳輸層基礎上的安全協議。

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

5_15

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

5_16

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

5_17

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

5_18

到這裡,密鑰對已經生成了。你可以給你的密鑰輸入一個密碼,(在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 就保存了。格式如下圖:

5_19

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

5_20

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


18、Linux文件基本屬性

Linux系統是一種典型的多用戶系統,不同的用戶處於不同的地位,擁有不同的權限。為了保護系統的安全性,Linux系統對不同的用戶訪問同一文件(包括目錄文件)的權限做了不同的規定。

在Linux中我們可以使用ll或者ls –l命令來顯示一個文件的屬性以及文件所屬的用戶和組,如:

[root@www /]# ls -l
total 64
dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot
……

實例中,bin文件的第一個屬性用"d"表示。"d"在Linux中代表該文件是一個目錄文件。

在Linux中第一個字符代表這個文件是目錄、文件或鏈接文件等等。

當為[ d ]則是目錄當為[ - ]則是文件;若是[ l ]則表示為鏈接文檔(link file);若是[ b ]則表示為裝置文件裡面的可供儲存的接口設備(可隨機存取裝置);若是[ c ]則表示為裝置文件裡面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)。

接下來的字符中,以三個為一組,且均為『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。

每個文件的屬性由左邊第一部分的10個字符來確定(如下圖)。

363003_1227493859FdXT

從左至右用0-9這些數字來表示。

第0位確定文件類型,第1-3位確定屬主(該文件的所有者)擁有該文件的權限。

第4-6位確定屬組(所有者的同組用戶)擁有該文件的權限,第7-9位確定其他用戶擁有該文件的權限。

其中,第1、4、7位表示讀權限,如果用"r"字符表示,則有讀權限,如果用"-"字符表示,則沒有讀權限;

第2、5、8位表示寫權限,如果用"w"字符表示,則有寫權限,如果用"-"字符表示沒有寫權限;第3、6、9位表示可執行權限,如果用"x"字符表示,則有執行權限,如果用"-"字符表示,則沒有執行權限。


19、Linux文件屬主和屬組

[root@www /]# ls -l
total 64
dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot
……

對於文件來說,它都有一個特定的所有者,也就是對該文件具有所有權的用戶。

同時,在Linux系統中,用戶是按組分類的,一個用戶屬於一個或多個組。

文件所有者以外的用戶又可以分為文件所有者的同組用戶和其他用戶。

因此,Linux系統按文件所有者、文件所有者同組用戶和其他用戶來規定了不同的文件訪問權限。

在以上實例中,bin文件是一個目錄文件,屬主和屬組都為root,屬主有可讀、可寫、可執行的權限;與屬主同組的其他用戶有可讀和可執行的權限;其他用戶也有可讀和可執行的權限。

更改文件屬性

1、chgrp:更改文件屬組

語法:

chgrp [-R] 屬組名文件名

參數選項

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

2、chown:更改文件屬主,也可以同時更改文件屬組

語法:

chown [–R] 屬主名 文件名
chown [-R] 屬主名:屬組名 文件名

進入 /root 目錄(~)將install.log的擁有者改為bin這個賬號:

[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log

將install.log的擁有者與群組改回為root:

[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

3、chmod:更改文件9個屬性

Linux文件屬性有兩種設置方法,一種是數字,一種是符號。

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

先復習一下剛剛上面提到的數據:文件的權限字符為:『-rwxrwxrwx』, 這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:

r:4w:2x:1

每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:

owner = rwx = 4+2+1 = 7group = rwx = 4+2+1 = 7others= --- = 0+0+0 = 0

所以等一下我們設定權限的變更時,該文件的權限數字就是770啦!變更權限的指令chmod的語法是這樣的:

 chmod [-R] xyz 文件或目錄

選項與參數:

xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都會變更

舉例來說,如果要將.bashrc這個文件所有的權限都設定啟用,那麼命令如下:

[root@www ~]# ls -al .bashrc
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

那如果要將權限變成 -rwxr-xr-- 呢?那麼權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754。

符號類型改變文件權限

還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦! 那麼我們就可以藉由u, g, o來代表三種身份的權限!

此外, a 則代表 all 亦即全部的身份!那麼讀寫的權限就可以寫成r, w, x!也就是可以使用底下的方式來看:

chmod u
g
o
a +(加入)
-(除去)
=(設定) r
w
x 文件或目錄

如果我們需要將文件權限設置為 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 來設定:

[root@www ~]# ls -al .bashrc
-rwxr-xr-x  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod  a+w  .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

而如果是要將權限去掉而不改變其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:

[root@www ~]# chmod  a-x  .bashrc
[root@www ~]# ls -al .bashrc
-rw-rw-rw-  1 root root 395 Jul  4 11:45 .bashrc


20、Linux文件與目錄管理

我們知道Linux的目錄結構為樹狀結構,最頂級的目錄為根目錄 /。

其他目錄通過掛載可以將它們添加到樹中,通過解除掛載可以移除它們。

什麼是絕對路徑與相對路徑?

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

21、處理目錄的常用命令

接下來我們就來看幾個常見的處理目錄的命令吧:

ls: 列出目錄cd:切換目錄pwd:顯示目前的目錄mkdir:創建一個新的目錄rmdir:刪除一個空的目錄cp: 復制文件或目錄rm: 移除文件或目錄

你可以使用 man [命令] 來查看各個命令的使用文檔,如 :man cp。

ls (列出目錄)

在Linux系統當中, ls 命令可能是最常被運行的。

語法:

[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱
[root@www ~]# ls [--color={never,auto,always}] 目錄名稱
[root@www ~]# ls [--full-time] 目錄名稱

選項與參數:

-a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來(常用)-d :僅列出目錄本身,而不是列出目錄內的文件數據(常用)-l :長數據串列出,包含文件的屬性與權限等等數據;(常用)

將家目錄下的所有文件列出來(含屬性與隱藏檔)

[root@www ~]# ls -al ~

cd (切換目錄)

cd是Change Directory的縮寫,這是用來變換工作目錄的命令。

語法:

 cd [相對路徑或絕對路徑]
#使用 mkdir 命令創建w3cschool.cc目錄
[root@www ~]# mkdir w3cschool.cc

#使用絕對路徑切換到w3cschool.cc目錄
[root@www ~]# cd /root/w3cschool.cc/

#使用相對路徑切換到w3cschool.cc目錄
[root@www ~]# cd ./w3cschool.cc/

# 表示回到自己的家目錄,亦即是 /root 這個目錄
[root@www w3cschool.cc]# cd ~

# 表示去到目前的上一級目錄,亦即是 /root 的上一級目錄的意思;
[root@www ~]# cd ..

接下來大家多操作幾次應該就可以很好的理解 cd 命令的。

pwd (顯示目前所在的目錄)

pwd是Print Working Directory的縮寫,也就是顯示目前所在目錄的命令。

[root@www ~]# pwd [-P]
選項與參數:
-P  :顯示出確實的路徑,而非使用連結 (link) 路徑。

范例:單純顯示出目前的工作目錄:
[root@www ~]# pwd
/root   <== 顯示出目錄啦~

范例:顯示出實際的工作目錄,而非連結檔本身的目錄名而已
[root@www ~]# cd /var/mail   <==注意,/var/mail是一個連結檔
[root@www mail]# pwd
/var/mail         <==列出目前的工作目錄
[root@www mail]# pwd -P
/var/spool/mail   <==怎麼回事?有沒有加 -P 差很多~
[root@www mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep  4 17:54 /var/mail -> spool/mail
# 看到這裡應該知道為啥了吧?因為 /var/mail 是連結檔,連結到 /var/spool/mail 
# 所以,加上 pwd -P 的選項後,會不以連結檔的數據顯示,而是顯示正確的完整路徑啊!

mkdir (創建新目錄)

如果想要創建新的目錄的話,那麼就使用mkdir (make directory)吧。

語法:

mkdir [-mp] 目錄名稱

選項與參數:

-m :配置文件的權限喔!直接配置,不需要看默認權限 (umask) 的臉色~-p :幫助你直接將所需要的目錄(包含上一級目錄)遞回創建起來!

范例:請到/tmp底下嘗試創建數個新目錄看看:

[root@www ~]# cd /tmp
[root@www tmp]# mkdir test    <==創建一名為 test 的新目錄
[root@www tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4': 
No such file or directory       <== 沒辦法直接創建此目錄啊!
[root@www tmp]# mkdir -p test1/test2/test3/test4

加了這個 -p 的選項,可以自行幫你創建多層目錄!

范例:創建權限為rwx--x--x的目錄

[root@www tmp]# mkdir -m 711 test2
[root@www tmp]# ls -l
drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test
drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2

上面的權限部分,如果沒有加上 -m 來強制配置屬性,系統會使用默認屬性。

如果我們使用 -m ,如上例我們給予 -m 711 來給予新的目錄 drwx--x--x 的權限。


rmdir (刪除空的目錄)

語法:

 rmdir [-p] 目錄名稱

選項與參數:

-p :連同上一級『空的』目錄也一起刪除

刪除 w3cschool.cc 目錄

[root@www tmp]# rmdir w3cschool.cc/

范例:將於mkdir范例中創建的目錄(/tmp底下)刪除掉!

[root@www tmp]# ls -l   <==看看有多少目錄存在?
drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test
drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2
[root@www tmp]# rmdir test   <==可直接刪除掉,沒問題
[root@www tmp]# rmdir test1  <==因為尚有內容,所以無法刪除!
rmdir: `test1': Directory not empty
[root@www tmp]# rmdir -p test1/test2/test3/test4
[root@www tmp]# ls -l        <==您看看,底下的輸出中test與test1不見了!
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2

利用 -p 這個選項,立刻就可以將 test1/test2/test3/test4 一次刪除。

不過要注意的是,這個 rmdir 僅能刪除空的目錄,你可以使用 rm 命令來刪除非空目錄。

cp (復制文件或目錄)

cp 即拷貝文件和目錄。

語法:

[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory

選項與參數:

-a :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)-d :若來源檔為連結檔的屬性(link file),則復制連結檔屬性而非文件本身;-f :為強制(force)的意思,若目標文件已經存在且無法開啟,則移除後再嘗試一次;-i :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)-l :進行硬式連結(hard link)的連結檔創建,而非復制文件本身;-p :連同文件的屬性一起復制過去,而非使用默認屬性(備份常用);-r :遞回持續復制,用於目錄的復制行為;(常用)-s :復制成為符號連結檔 (symbolic link),亦即『捷徑』文件;-u :若 destination 比 source 舊才升級 destination !

用root身份,將家目錄下的 .bashrc 復制到 /tmp 下,並更名為 bashr

[root@www ~]# cp ~/.bashrc /tmp/bashrc
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n  <==n不覆蓋,y為覆蓋

rm (移除文件或目錄)

語法:

 rm [-fir] 文件或目錄

選項與參數:

-f :就是 force 的意思,忽略不存在的文件,不會出現警告信息;-i :互動模式,在刪除前會詢問使用者是否動作-r :遞回刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!

將剛剛在 cp 的范例中創建的 bashrc 刪除掉!

[root@www tmp]# rm -i bashrc
rm: remove regular file `bashrc'? y

如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名!

mv (移動文件與目錄,或修改名稱)

語法:

[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory

選項與參數:

-f :force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;-i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!-u :若目標文件已經存在,且 source 比較新,才會升級 (update)

復制一文件,創建一目錄,將文件移動到目錄中

[root@www ~]# cd /tmp
[root@www tmp]# cp ~/.bashrc bashrc
[root@www tmp]# mkdir mvtest
[root@www tmp]# mv bashrc mvtest

將某個文件移動到某個目錄去,就是這樣做!

將剛剛的目錄名稱更名為 mvtest2

[root@www tmp]# mv mvtest mvtest2

22、Linux 文件內容查看

Linux系統中使用以下命令來查看文件的內容:

cat 由第一行開始顯示文件內容tac 從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!nl 顯示的時候,順道輸出行號!more 一頁一頁的顯示文件內容less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!head 只看頭幾行tail 只看尾巴幾行

你可以使用 man [命令]來查看各個命令的使用文檔,如 :man cp。

cat

由第一行開始顯示文件內容

語法:

cat [-AbEnTv]

選項與參數:

-A :相當於 -vET 的整合選項,可列出一些特殊字符而不是空白而已;-b :列出行號,僅針對非空白行做行號顯示,空白行不標行號!-E :將結尾的斷行字節 $ 顯示出來;-n :列印出行號,連同空白行也會有行號,與 -b 的選項不同;-T :將 [tab] 按鍵以 ^I 顯示出來;-v :列出一些看不出來的特殊字符

檢看 /etc/issue 這個文件的內容:

[root@www ~]# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m

tac

tac與cat命令剛好相反,文件內容從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!如:

[root@www ~]# tac /etc/issue

Kernel \r on an \m
CentOS release 6.4 (Final)

nl

顯示行號

語法:

nl [-bnw] 文件

選項與參數:

-b :指定行號指定的方式,主要有兩種:
-b a :表示不論是否為空行,也同樣列出行號(類似 cat -n);
-b t :如果有空行,空的那一行不要列出行號(默認值);-n :列出行號表示的方法,主要有三種:
-n ln :行號在螢幕的最左方顯示;
-n rn :行號在自己欄位的最右方顯示,且不加 0 ;
-n rz :行號在自己欄位的最右方顯示,且加 0 ;-w :行號欄位的占用的位數。

范例一:用 nl 列出 /etc/issue 的內容

[root@www ~]# nl /etc/issue
     1  CentOS release 6.4 (Final)
     2  Kernel \r on an \m

more

一頁一頁翻動

[root@www ~]# more /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中間省略)....
--More--(28%)  <== 重點在這一行喔!你的光標也會在這裡等待你的命令

在 more 這個程序的運行過程中,你有幾個按鍵可以按的:

空白鍵 (space):代表向下翻一頁;Enter :代表向下翻『一行』;/字串 :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;:f :立刻顯示出檔名以及目前顯示的行數;q :代表立刻離開 more ,不再顯示該文件內容。b 或 [ctrl]-b :代表往回翻頁,不過這動作只對文件有用,對管線無用。

less

一頁一頁翻動,以下實例輸出/etc/man.config文件的內容:

[root@www ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
....(中間省略)....
:   <== 這裡可以等待你輸入命令!

less運行時可以輸入的命令有:

空白鍵 :向下翻動一頁;[pagedown]:向下翻動一頁;[pageup] :向上翻動一頁;/字串 :向下搜尋『字串』的功能;?字串 :向上搜尋『字串』的功能;n :重復前一個搜尋 (與 / 或 ? 有關!)N :反向的重復前一個搜尋 (與 / 或 ? 有關!)q :離開 less 這個程序;

head

取出文件前面幾行

語法:

head [-n number] 文件 

選項與參數:

-n :後面接數字,代表顯示幾行的意思
[root@www ~]# head /etc/man.config

默認的情況中,顯示前面 10 行!若要顯示前 20 行,就得要這樣:

[root@www ~]# head -n 20 /etc/man.config

tail

取出文件後面幾行

語法:

tail [-n number] 文件 

選項與參數:

-n :後面接數字,代表顯示幾行的意思-f :表示持續偵測後面所接的檔名,要等到按下[ctrl]-c才會結束tail的偵測
[root@www ~]# tail /etc/man.config
# 默認的情況中,顯示最後的十行!若要顯示最後的 20 行,就得要這樣:
[root@www ~]# tail -n 20 /etc/man.config


23、Linux用戶和用戶組管理

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

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

每個用戶賬號都擁有一個惟一的用戶名和各自的口令。

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

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

用戶賬號的添加、刪除與修改。 用戶口令的管理。用戶組的管理。

一、Linux系統用戶賬號的管理

用戶賬號的管理工作主要涉及到用戶賬號的添加、修改和刪除。

添加用戶賬號就是在系統中創建一個新賬號,然後為新賬號分配用戶號、用戶組、主目錄和登錄Shell等資源。剛添加的賬號是被鎖定的,無法使用。

1、添加新的用戶賬號使用useradd命令,其語法如下:

useradd 選項 用戶名

參數說明:

選項:

-c comment 指定一段注釋性描述。-d 目錄 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創建主目錄。-g 用戶組 指定用戶所屬的用戶組。-G 用戶組,用戶組 指定用戶所屬的附加組。-s Shell文件 指定用戶的登錄Shell。-u 用戶號 指定用戶的用戶號,如果同時有-o選項,則可以重復使用其他用戶的標識號。

用戶名:

指定新賬號的登錄名。

實例1

# useradd –d /usr/sam -m sam

此命令創建了一個用戶sam,其中-d和-m選項用來為登錄名sam產生一個主目錄/usr/sam(/usr為默認的用戶主目錄所在的父目錄)。

實例2

# useradd -s /bin/sh -g group –G adm,root gem

此命令新建了一個用戶gem,該用戶的登錄Shell是 /bin/sh,它屬於group用戶組,同時又屬於adm和root用戶組,其中group用戶組是其主組。

這裡可能新建組:#groupadd group及groupadd adm

增加用戶賬號就是在/etc/passwd文件中為新用戶增加一條記錄,同時更新其他系統文件如/etc/shadow, /etc/group等。

Linux提供了集成的系統管理工具userconf,它可以用來對用戶賬號進行統一管理。

3、刪除帳號

如果一個用戶的賬號不再使用,可以從系統中刪除。刪除用戶賬號就是要將/etc/passwd等系統文件中的該用戶記錄刪除,必要時還刪除用戶的主目錄。

刪除一個已有的用戶賬號使用userdel命令,其格式如下:

userdel 選項 用戶名

常用的選項是-r,它的作用是把用戶的主目錄一起刪除。

例如:

# userdel sam

此命令刪除用戶sam在系統文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的記錄,同時刪除用戶的主目錄。

4、修改帳號

修改用戶賬號就是根據實際情況更改用戶的有關屬性,如用戶號、主目錄、用戶組、登錄Shell等。

修改已有用戶的信息使用usermod命令,其格式如下:

usermod 選項 用戶名

常用的選項包括-c, -d, -m, -g, -G, -s, -u以及-o等,這些選項的意義與useradd命令中的選項一樣,可以為用戶指定新的資源值。

另外,有些系統可以使用選項:-l 新用戶名

這個選項指定一個新的賬號,即將原來的用戶名改為新的用戶名。

例如:

# usermod -s /bin/ksh -d /home/z –g developer sam

此命令將用戶sam的登錄Shell修改為ksh,主目錄改為/home/z,用戶組改為developer。

5、用戶口令的管理

用戶管理的一項重要內容是用戶口令的管理。用戶賬號剛創建時沒有口令,但是被系統鎖定,無法使用,必須為其指定口令後才可以使用,即使是指定空口令。

指定和修改用戶口令的Shell命令是passwd。超級用戶可以為自己和其他用戶指定口令,普通用戶只能用它修改自己的口令。命令的格式為:

passwd 選項 用戶名

可使用的選項:

-l 鎖定口令,即禁用賬號。-u 口令解鎖。-d 使賬號無口令。-f 強迫用戶下次登錄時修改口令。

如果默認用戶名,則修改當前用戶的口令。

例如,假設當前用戶是sam,則下面的命令修改該用戶自己的口令:

$ passwd 
Old password:****** 
New password:******* 
Re-enter new password:*******

如果是超級用戶,可以用下列形式指定任何用戶的口令:

# passwd sam 
New password:******* 
Re-enter new password:*******

普通用戶修改自己的口令時,passwd命令會先詢問原口令,驗證後再要求用戶輸入兩遍新口令,如果兩次輸入的口令一致,則將這個口令指定給用戶;而超級用戶為用戶指定口令時,就不需要知道原口令。

為了系統安全起見,用戶應該選擇比較復雜的口令,例如最好使用8位長的口令,口令中包含有大寫、小寫字母和數字,並且應該與姓名、生日等不相同。

為用戶指定空口令時,執行下列形式的命令:

# passwd -d sam

此命令將用戶sam的口令刪除,這樣用戶sam下一次登錄時,系統就不再詢問口令。

passwd命令還可以用-l(lock)選項鎖定某一用戶,使其不能登錄,例如:

# passwd -l sam


二、Linux系統用戶組的管理

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

用戶組的管理涉及用戶組的添加、刪除和修改。組的增加、刪除和修改實際上就是對/etc/group文件的更新。

1、增加一個新的用戶組使用groupadd命令。其格式如下:

groupadd 選項 用戶組

可以使用的選項有:

-g GID 指定新用戶組的組標識號(GID)。-o 一般與-g選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同。

實例1:

# groupadd group1

此命令向系統中增加了一個新組group1,新組的組標識號是在當前已有的最大組標識號的基礎上加1。

實例2:

# groupadd -g 101 group2

此命令向系統中增加了一個新組group2,同時指定新組的組標識號是101。

2、如果要刪除一個已有的用戶組,使用groupdel命令,其格式如下:

groupdel 用戶組

例如:

# groupdel group1

此命令從系統中刪除組group1。

3、修改用戶組的屬性使用groupmod命令。其語法如下:

groupmod 選項 用戶組

常用的選項有:

-g GID 為用戶組指定新的組標識號。-o 與-g選項同時使用,用戶組的新GID可以與系統已有用戶組的GID相同。-n新用戶組 將用戶組的名字改為新名字

實例1:

# groupmod -g 102 group2

此命令將組group2的組標識號修改為102。

實例2:

# groupmod –g 10000 -n group3 group2

此命令將組group2的標識號改為10000,組名修改為group3。

4、如果一個用戶同時屬於多個用戶組,那麼用戶可以在用戶組之間切換,以便具有其他用戶組的權限。

用戶可以在登錄後,使用命令newgrp切換到其他用戶組,這個命令的參數就是目的用戶組。例如:

$ newgrp root

這條命令將當前用戶切換到root用戶組,前提條件是root用戶組確實是該用戶的主組或附加組。類似於用戶賬號的管理,用戶組的管理也可以通過集成的系統管理工具來完成。


三、與用戶賬號有關的系統文件

完成用戶管理的工作有許多種方法,但是每一種方法實際上都是對有關的系統文件進行修改。

與用戶和用戶組相關的信息都存放在一些系統文件中,這些文件包括/etc/passwd, /etc/shadow, /etc/group等。

下面分別介紹這些文件的內容。

1、/etc/passwd文件是用戶管理工作涉及的最重要的一個文件。

Linux系統中的每個用戶都在/etc/passwd文件中有一個對應的記錄行,它記錄了這個用戶的一些基本屬性。

這個文件對所有用戶都是可讀的。它的內容類似下面的例子:

# 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:/usr/sam:/bin/sh

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

用戶名:口令:用戶標識號:組標識號:注釋性描述:主目錄:登錄Shell

1)"用戶名"是代表用戶賬號的字符串。

通常長度不超過8個字符,並且由大小寫字母和/或數字組成。登錄名中不能有冒號(:),因為冒號在這裡是分隔符。

為了兼容起見,登錄名中最好不要包含點字符(.),並且不使用連字符(-)和加號(+)打頭。

2)“口令”一些系統中,存放著加密後的用戶口令字。

雖然這個字段存放的只是用戶口令的加密串,不是明文,但是由於/etc/passwd文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多Linux 系統(如SVR4)都使用了shadow技術,把真正的加密後的用戶口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一個特殊的字符,例如“x”或者“*”。

3)“用戶標識號”是一個整數,系統內部用它來標識用戶。

一般情況下它與用戶名是一一對應的。如果幾個用戶名對應的用戶標識號是一樣的,系統內部將把它們視為同一個用戶,但是它們可以有不同的口令、不同的主目錄以及不同的登錄Shell等。

通常用戶標識號的取值范圍是0~65 535。0是超級用戶root的標識號,1~99由系統保留,作為管理賬號,普通用戶的標識號從100開始。在Linux系統中,這個界限是500。

4)“組標識號”字段記錄的是用戶所屬的用戶組。

它對應著/etc/group文件中的一條記錄。

5)“注釋性描述”字段記錄著用戶的一些個人情況。

例如用戶的真實姓名、電話、地址等,這個字段並沒有什麼實際的用途。在不同的Linux 系統中,這個字段的格式並沒有統一。在許多Linux系統中,這個字段存放的是一段任意的注釋性描述文字,用做finger命令的輸出。

6)“主目錄”,也就是用戶的起始工作目錄。

它是用戶在登錄到系統之後所處的目錄。在大多數系統中,各用戶的主目錄都被組織在同一個特定的目錄下,而用戶主目錄的名稱就是該用戶的登錄名。各用戶對自己的主目錄有讀、寫、執行(搜索)權限,其他用戶對此目錄的訪問權限則根據具體情況設置。

7)用戶登錄後,要啟動一個進程,負責將用戶的操作傳給內核,這個進程是用戶登錄到系統後運行的命令解釋器或某個特定的程序,即Shell。

Shell是用戶與Linux系統之間的接口。Linux的Shell有許多種,每種都有不同的特點。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell)等。

系統管理員可以根據系統情況和用戶習慣為用戶指定某個Shell。如果不指定Shell,那麼系統使用sh為默認的登錄Shell,即這個字段的值為/bin/sh。

用戶的登錄Shell也可以指定為某個特定的程序(此程序不是一個命令解釋器)。

利用這一特點,我們可以限制用戶只能運行指定的應用程序,在該應用程序運行結束後,用戶就自動退出了系統。有些Linux 系統要求只有那些在系統中登記了的程序才能出現在這個字段中。

8)系統中有一類用戶稱為偽用戶(psuedo users)。

這些用戶在/etc/passwd文件中也占有一條記錄,但是不能登錄,因為它們的登錄Shell為空。它們的存在主要是方便系統管理,滿足相應的系統進程對文件屬主的要求。

常見的偽用戶如下所示:

偽 用 戶 含 義 
bin 擁有可執行的用戶命令文件 
sys 擁有系統文件 
adm 擁有帳戶文件 
uucp UUCP使用 
lp lp或lpd子系統使用 
nobody NFS使用


24、擁有帳戶文件

1、除了上面列出的偽用戶外,還有許多標准的偽用戶,例如:audit, cron, mail, usenet等,它們也都各自為相關的進程和文件所需要。

由於/etc/passwd文件是所有用戶都可讀的,如果用戶的密碼太簡單或規律比較明顯的話,一台普通的計算機就能夠很容易地將它破解,因此對安全性要求較高的Linux系統都把加密後的口令字分離出來,單獨存放在一個文件中,這個文件是/etc/shadow文件。 有超級用戶才擁有該文件讀權限,這就保證了用戶密碼的安全性。

2、/etc/shadow中的記錄行與/etc/passwd中的一一對應,它由pwconv命令根據/etc/passwd中的數據自動產生

它的文件格式與/etc/passwd類似,由若干個字段組成,字段之間用":"隔開。這些字段是:

登錄名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標志
"登錄名"是與/etc/passwd文件中的登錄名相一致的用戶賬號"口令"字段存放的是加密後的用戶口令字,長度為13個字符。如果為空,則對應用戶沒有口令,登錄時不需要口令;如果含有不屬於集合 { ./0-9A-Za-z }中的字符,則對應的用戶不能登錄。"最後一次修改時間"表示的是從某個時刻起,到用戶最後一次修改口令時的天數。時間起點對不同的系統可能不一樣。例如在SCO Linux 中,這個時間起點是1970年1月1日。"最小時間間隔"指的是兩次修改口令之間所需的最小天數。"最大時間間隔"指的是口令保持有效的最大天數。"警告時間"字段表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數。"不活動時間"表示的是用戶沒有登錄活動但賬號仍能保持有效的最大天數。"失效時間"字段給出的是一個絕對的天數,如果使用了這個字段,那麼就給出相應賬號的生存期。期滿後,該賬號就不再是一個合法的賬號,也就不能再用來登錄了。

下面是/etc/shadow的一個例子:

# cat /etc/shadow

root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::

3、用戶組的所有信息都存放在/etc/group文件中。

將用戶分組是Linux 系統中對用戶進行管理及控制訪問權限的一種手段。

每個用戶都屬於某個用戶組;一個組中可以有多個用戶,一個用戶也可以屬於不同的組。

當一個用戶同時是多個組中的成員時,在/etc/passwd文件中記錄的是用戶所屬的主組,也就是登錄時所屬的默認組,而其他組稱為附加組。

用戶要訪問屬於附加組的文件時,必須首先使用newgrp命令使自己成為所要訪問的組中的成員。

用戶組的所有信息都存放在/etc/group文件中。此文件的格式也類似於/etc/passwd文件,由冒號(:)隔開若干個字段,這些字段有:

組名:口令:組標識號:組內用戶列表
"組名"是用戶組的名稱,由字母或數字構成。與/etc/passwd中的登錄名一樣,組名不應重復。"口令"字段存放的是用戶組加密後的口令字。一般Linux 系統的用戶組都沒有口令,即這個字段一般為空,或者是*。"組標識號"與用戶標識號類似,也是一個整數,被系統內部用來標識組。"組內用戶列表"是屬於這個組的所有用戶的列表/b],不同用戶之間用逗號(,)分隔。這個用戶組可能是用戶的主組,也可能是附加組。

/etc/group文件的一個例子如下:

root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam

四、添加量用戶批

添加和刪除用戶對每位Linux系統管理員都是輕而易舉的事,比較棘手的是如果要添加幾十個、上百個甚至上千個用戶時,我們不太可能還使用useradd一個一個地添加,必然要找一種簡便的創建大量用戶的方法。Linux系統提供了創建大量用戶的工具,可以讓您立即創建大量用戶,方法如下:

(1)先編輯一個文本用戶文件。

每一列按照/etc/passwd密碼文件的格式書寫,要注意每個用戶的用戶名、UID、宿主目錄都不可以相同,其中密碼欄可以留做空白或輸入x號。一個范例文件user.txt內容如下:

user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash

(2)以root身份執行命令 /usr/sbin/newusers,從剛創建的用戶文件user.txt中導入數據,創建用戶:

# newusers < user.txt

然後可以執行命令 vipw 或 vi /etc/passwd 檢查 /etc/passwd 文件是否已經出現這些用戶的數據,並且用戶的宿主目錄是否已經創建。

(3)執行命令/usr/sbin/pwunconv。

將 /etc/shadow 產生的 shadow 密碼解碼,然後回寫到 /etc/passwd 中,並將/etc/shadow的shadow密碼欄刪掉。這是為了方便下一步的密碼轉換工作,即先取消shadow password 功能。

# pwunconv

(4)編輯每個用戶的密碼對照文件。

范例文件 passwd.txt 內容如下:

user001:密碼
user002:密碼
user003:密碼
user004:密碼
user005:密碼
user006:密碼

(5)以root身份執行命令 /usr/sbin/chpasswd。

創建用戶密碼,chpasswd 會將經過 /usr/bin/passwd 命令編碼過的密碼寫入 /etc/passwd 的密碼欄。

# chpasswd < passwd.txt

(6)確定密碼經編碼寫入/etc/passwd的密碼欄後。

執行命令 /usr/sbin/pwconv 將密碼編碼為 shadow password,並將結果寫入 /etc/shadow。

# pwconv

這樣就完成了大量用戶的創建了,之後您可以到/home下檢查這些用戶宿主目錄的權限設置是否都正確,並登錄驗證用戶密碼是否正確。


25、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 的數量來顯示

實例 1

將系統內所有的文件系統列出來!

[root@www ~]# df
Filesystem      1K-blocks      Used Available Use% Mounted on
/dev/hdc2         9920624   3823112   5585444  41% /
/dev/hdc3         4956316    141376   4559108   4% /home
/dev/hdc1          101086     11126     84741  12% /boot
tmpfs              371332         0    371332   0% /dev/shm

在 Linux 底下如果 df 沒有加任何選項,那麼默認會將系統內所有的 (不含特殊內存內的文件系統與 swap) 都以 1 Kbytes 的容量來列出來!

實例 2

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

[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

實例 3

將系統內的所有特殊文件格式及名稱都列出來

[root@www ~]# df -aT
Filesystem    Type 1K-blocks    Used Available Use% Mounted on
/dev/hdc2     ext3   9920624 3823112   5585444  41% /
proc          proc         0       0         0   -  /proc
sysfs        sysfs         0       0         0   -  /sys
devpts      devpts         0       0         0   -  /dev/pts
/dev/hdc3     ext3   4956316  141376   4559108   4% /home
/dev/hdc1     ext3    101086   11126     84741  12% /boot
tmpfs        tmpfs    371332       0    371332   0% /dev/shm
none   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_misc
sunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs

實例 4

將 /etc 底下的可用的磁盤容量以易讀的容量格式顯示

[root@www ~]# df -h /etc
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdc2             9.5G  3.7G  5.4G  41% /


du

inux 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 時, 則系統將會把整個系統內能夠搜尋到的裝置的分區均列出來。

實例 1

列出所有分區信息

[root@AY120919111755c246621 tmp]# fdisk -l

Disk /dev/xvda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1        2550    20480000   83  Linux
/dev/xvda2            2550        2611      490496   82  Linux swap / Solaris

Disk /dev/xvdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x56f40944

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb2               1        2610    20964793+  83  Linux

實例 2

找出你系統中的根目錄所在磁盤,並查閱該硬盤內的相關信息

[root@www ~]# df /            <==注意:重點在找出磁盤文件名而已
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hdc2              9920624   3823168   5585388  41% /

[root@www ~]# fdisk /dev/hdc  <==仔細看,不要加上數字喔!
The number of cylinders for this disk is set to 5005.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):     <==等待你的輸入!

輸入 m 後,就會看到底下這些命令介紹

Command (m for help): m   <== 輸入 m 後,就會看到底下這些命令介紹
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==刪除一個partition
   l   list known partition types
   m   print this menu
   n   add a new partition           <==新增一個partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在屏幕上顯示分割表
   q   quit without saving changes   <==不儲存離開fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==將剛剛的動作寫入分割表
   x   extra functionality (experts only)

離開 fdisk 時按下 q,那麼所有的動作都不會生效!相反的, 按下w就是動作生效的意思。

Command (m for help): p  <== 這裡可以輸出目前磁盤的狀態

Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==這個磁盤的文件名與容量
255 heads, 63 sectors/track, 5005 cylinders      <==磁頭、扇區與磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每個磁柱的大小

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux
/dev/hdc2              14        1288    10241437+  83  Linux
/dev/hdc3            1289        1925     5116702+  83  Linux
/dev/hdc4            1926        5005    24740100    5  Extended
/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris
# 裝置文件名 啟動區否 開始磁柱    結束磁柱  1K大小容量 磁盤分區槽內的系統

Command (m for help): q

想要不儲存離開嗎?按下 q 就對了!不要隨便按 w 啊!

使用 p 可以列出目前這顆磁盤的分割表信息,這個信息的上半部在顯示整體磁盤的狀態。


磁盤格式化

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

語法:

mkfs [-t 文件系統格式] 裝置文件名

選項與參數:

-t :可以接文件系統格式,例如 ext3, ext2, vfat 等(系統有支持才會生效)

實例 1

查看 mkfs 支持的文件格式

[root@www ~]# mkfs[tab][tab]
mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.msdos   mkfs.vfat

按下兩個[tab],會發現 mkfs 支持的文件格式如上所示。

實例 2

將分區 /dev/hdc6(可指定你自己的分區) 格式化為 ext3 文件系統:

[root@www ~]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label=                <==這裡指的是分割槽的名稱(label)
OS type: Linux
Block size=4096 (log=2)          <==block 的大小配置為 4K 
Fragment size=4096 (log=2)
251392 inodes, 502023 blocks     <==由此配置決定的inode/block數量
25101 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=515899392
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done <==有日志記錄
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# 這樣就創建起來我們所需要的 Ext3 文件系統了!簡單明了!


26、磁盤檢驗

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 全部檢查修復。

實例 1

查看系統有多少文件系統支持的 fsck 命令:

[root@www ~]# fsck[tab][tab]
fsck         fsck.cramfs  fsck.ext2    fsck.ext3    fsck.msdos   fsck.vfat

實例 2

強制檢測 /dev/hdc6 分區:

[root@www ~]# fsck -C -f -t ext3 /dev/hdc6 
fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks

如果沒有加上 -f 的選項,則由於這個文件系統不曾出現問題,檢查的經過非常快速!若加上 -f 強制檢查,才會一項一項的顯示過程。


27、磁盤掛載與卸除

Linux 的磁盤掛載使用 mount 命令,卸載使用 umount 命令。

磁盤掛載語法:

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

實例 1

用默認的方式,將剛剛創建的 /dev/hdc6 掛載到 /mnt/hdc6 上面!

[root@www ~]# mkdir /mnt/hdc6
[root@www ~]# mount /dev/hdc6 /mnt/hdc6
[root@www ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
.....中間省略.....
/dev/hdc6              1976312     42072   1833836   3% /mnt/hdc6

磁盤卸載命令 umount 語法:

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

選項與參數:

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

卸載/dev/hdc6

[root@www ~]# umount /dev/hdc6     


28、Linux vi/vim

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

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

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

相關文章:史上最全Vim快捷鍵鍵位圖 — 入門到進階


29、什麼是 vim?

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

簡單的來說, vi 是老式的字處理器,不過功能已經很齊全了,但是還是有可以進步的地方。 vim 則可以說是程序開發者的一項很好用的工具。 連 vim 的官方網站 (http://www.vim.org) 自己也說 vim 是一個程序開發工具而不是文字處理軟件。

vim 鍵盤圖:

\


30、vi/vim 的使用

基本上 vi/vim 共分為三種模式,分別是一般模式、編輯模式與指令列命令模式。 這三種模式的作用分別是:

一般模式:
以 vi 打開一個檔案就直接進入一般模式了(這是默認的模式)。在這個模式中, 你可以使用『上下左右』按鍵來移動光標,你可以使用『刪除字符』或『刪除整行』來處理檔案內容, 也可以使用『復制、貼上』來處理你的文件數據。
編輯模式:
在一般模式中可以進行刪除、復制、貼上等等的動作,但是卻無法編輯文件內容的! 要等到你按下『i, I, o, O, a, A, r, R』等任何一個字母之後才會進入編輯模式。注意了!通常在 Linux 中,按下這些按鍵時,在畫面的左下方會出現『INSERT 或 REPLACE 』的字樣,此時才可以進行編輯。而如果要回到一般模式時, 則必須要按下『Esc』這個按鍵即可退出編輯模式。
指令列命令模式:
在一般模式當中,輸入『 : / ? 』三個中的任何一個按鈕,就可以將光標移動到最底下那一行。在這個模式當中, 可以提供你『搜尋資料』的動作,而讀取、存盤、大量取代字符、離開 vi 、顯示行號等等的動作則是在此模式中達成的!

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

\

vi/vim 使用實例

使用 vi/vim 進入一般模式

如果你想要使用 vi 來建立一個名為 test.txt 的文件時,你可以這樣做:

[root@www ~]# vi test.txt

直接輸入 vi 文件名 就能夠進入 vi 的一般模式了。請注意,記得 vi 後面一定要加文件名,不管該文件存在與否!

\

按下 i 進入編輯模式,開始編輯文字

在一般模式之中,只要按下 i, o, a 等字符就可以進入編輯模式了!

在編輯模式當中,你可以發現在左下角狀態欄中會出現 –INSERT- 的字樣,那就是可以輸入任意字符的提示。

這個時候,鍵盤上除了 [Esc] 這個按鍵之外,其他的按鍵都可以視作為一般的輸入按鈕了,所以你可以進行任何的編輯。

\

按下 [ESC] 按鈕回到一般模式

好了,假設我已經按照上面的樣式給他編輯完畢了,那麼應該要如何退出呢?是的!沒錯!就是給他按下 [Esc] 這個按鈕即可!馬上你就會發現畫面左下角的 – INSERT – 不見了!

在一般模式中按下 :wq 儲存後離開 vi

OK,我們要存檔了,存盤並離開的指令很簡單,輸入『:wq』即可保存離開!

\

OK! 這樣我們就成功創建了一個 test.txt 的文件。是不是很簡單。


31、vi/vim 按鍵說明

除了上面簡易范例的 i, [Esc], :wq 之外,其實 vim 還有非常多的按鍵可以使用。

第一部份:一般模式可用的按鈕說明,光標移動、復制貼上、搜尋取代等

移動光標的方法 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 刪除游標所在的那一整行(常用) 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 畫面的左下角處會出現『--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 輸出的檔案信息! vim 環境的變更 :set nu 顯示行號,設定之後,會在每一行的前綴顯示該行的行號 :set nonu 與 set nu 相反,為取消行號!

特別注意,在 vi/vim 中,數字是很有意義的!數字通常代表重復做幾次的意思! 也有可能是代表去到第幾個什麼什麼的意思。

舉例來說,要刪除 50 行,則是用 『50dd』 對吧! 數字加在動作之前,如我要向下移動 20 行呢?那就是『20j』或者是『20↓』即可。


32、Linux yum命令

yum( Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟件包管理器。

基於RPM包管理,能夠從指定的服務器自動下載RPM包並且安裝,可以自動處理依賴性關系,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

yum提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。

yum 語法

yum [options] [command] [package ...]
options:可選,選項包括-h(幫助),-y(當安裝過程提示選擇全部為"yes"),-q(不顯示安裝的過程)等等。 command:要進行的操作。 package操作的對象。

33、yum常用命令

1.列出所有可更新的軟件清單命令:yum check-update2.更新所有軟件命令:yum update3.僅安裝指定的軟件命令:yum install 4.僅更新指定的軟件命令:yum update 5.列出所有可安裝的軟件清單命令:yum list6.刪除軟件包命令:yum remove 7.查找軟件包 命令:yum search 8.清除緩存命令: yum clean packages: 清除緩存目錄下的軟件包yum clean headers: 清除緩存目錄下的 headersyum clean oldheaders: 清除緩存目錄下舊的 headersyum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除緩存目錄下的軟件包及舊的headers

實例 1

安裝 pam-devel

[root@www ~]# yum install pam-devel
Setting up Install Process
Parsing package install arguments
Resolving Dependencies  <==先檢查軟件的屬性相依問題
--> Running transaction check
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated
--> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel
--> Running transaction check
---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated
filelists.xml.gz          100% |=========================| 1.6 MB    00:05
filelists.xml.gz          100% |=========================| 138 kB    00:00
-> Finished Dependency Resolution
……(省略)

實例 2

移除 pam-devel

[root@www ~]# yum remove pam-devel
Setting up Remove Process
Resolving Dependencies  <==同樣的,先解決屬性相依的問題
--> Running transaction check
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Removing:
 pam-devel               i386       0.99.6.2-4.el5   installed         495 k

Transaction Summary
=============================================================================
Install      0 Package(s)
Update       0 Package(s)
Remove       1 Package(s)  <==還好,並沒有屬性相依的問題,單純移除一個軟件

Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing   : pam-devel                    ######################### [1/1]

Removed: pam-devel.i386 0:0.99.6.2-4.el5
Complete!

實例 3

利用 yum 的功能,找出以 pam 為開頭的軟件名稱有哪些?

[root@www ~]# yum list pam*
Installed Packages
pam.i386                  0.99.6.2-3.27.el5      installed
pam_ccreds.i386           3-5                    installed
pam_krb5.i386             2.2.14-1               installed
pam_passwdqc.i386         1.0.2-1.2.2            installed
pam_pkcs11.i386           0.5.3-23               installed
pam_smb.i386              1.1.7-7.2.1            installed
Available Packages <==底下則是『可升級』的或『未安裝』的
pam.i386                  0.99.6.2-4.el5         base
pam-devel.i386            0.99.6.2-4.el5         base
pam_krb5.i386             2.2.14-10              base


34、國內 yum 源

網易(163)yum源是國內最好的yum源之一 ,無論是速度還是軟件版本,都非常的不錯。

將yum源設置為163 yum,可以提升軟件包安裝和更新的速度,同時避免一些常見軟件版本無法找到。

安裝步驟

首先備份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下載對應版本repo文件, 放入/etc/yum.repos.d/(操作前請做好相應備份)

CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repoCentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo

運行以下命令生成緩存

yum clean all
yum makecache

除了網易之外,國內還有其他不錯的yum源,比如中科大和搜狐。

Copyright © Linux教程網 All Rights Reserved