歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux基礎介紹

Linux基礎介紹

日期:2017/3/3 13:06:46   编辑:Linux技術
【以下內容總結自】:http://www.92csz.com/study/linux/
Linux的創始人Linus Torvalds。Linux的官方標准發音為['linəks]。Linux和Unix是非常像的,Linux就是根據Unix演變過來的。Linux是免費的,其實只是說Linux的內核免費。在Linux內核的基礎上產生了眾多的Linux版本。Linux的發行版說簡單點就是將Linux內核與應用軟件做一個打包。
Linux系統目錄結構:在命令窗口下輸入:ls /
(1)、/bin:bin是Binary的縮寫。這個目錄存放這最經常使用的命令。
(2)、/boot:這裡存放的是啟動Linux時使用的一些核心文件,包括一些鏈接文件及鏡像文件。
(3)、/dev:dev是Device(設備)的縮寫。該目錄下存放的是Linux的外部設備,在Linux中訪問設備的方式和訪問文件的方式是相同的。
(4)、/etc:這個目錄用來存放所有的系統管理所需要的配置文件和子目錄。
(5)、/home:用戶的主目錄,在Linux中,每個用戶都有一個自己的目錄,一般該目錄名是以用戶的賬戶命名的。
(6)、/lib:這個目錄裡存放著系統最基本的動態鏈接共享庫,其作用類似於Windows裡的dll文件。幾乎所有的應用程序都需要用到這些共享庫。
(7)、/lost+found:這個目錄一般情況下是空的,當系統非法關機後,這裡就存放了一些文件。
(8)、/media:Linux系統會自動識別一些設備,如U盤、光驅等,當識別後,Linux會把識別的設備掛載到這個目錄下。
(9)、/mnt:Linux系統提供該目錄是為了讓用戶臨時掛載別的文件系統的,我們可以將光驅掛載在/mnt/上,然後進入該目錄就可以查看光驅裡的內容了。
(10)、/opt:這是給主機額外安裝軟件所擺放的目錄。比如你安裝一個ORACLE數據庫就可以放到這個目錄下。默認是空的。
(11)、/proc:這個目錄是一個虛擬的目錄,它是系統內存的映射,我們可以通過直接訪問這個目錄來獲取系統信息。這個目錄的內容不再硬盤上而是在內存裡,我們也可以直接修改裡面的某些文件,比如可以通過下面的命令來屏蔽主機的ping命令,使別人無法ping你的機器:echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
(12)、/root:該目錄為系統管理員,也稱作超級權限者的用戶主目錄。
(13)、/sbin:s就是Super User的意思,這裡存放的是系統管理員使用的系統管理程序。
(14)、/srv:該目錄存放一些服務啟動之後需要提取的數據。
(15)、/sys:系統核心文件。系統設備和文件層次結構,並向用戶程序提供詳細的內核數據信息。
(16)、/tmp:這個目錄是用來存放一些臨時文件的。
(17)、/usr:這是一個非常重要的目錄,用戶的很多應用程序和文件都放在這個目錄下,類似於windows下的Program Files目錄。
(18)、/var:這個目錄中存放著不斷擴充著的東西,我們習慣將這些經常被修改的文件放在這個目錄下,包括各種日志文件。
Linux中的絕對路徑和相對路徑:(1)、絕對路徑的寫法一定由根目錄”/”寫起,如/home/spring/tmp這就是絕對路徑。(2)、相對路徑:相對路徑的寫法不是由根目錄”/”寫起。
Linux中的環境變量PATH:在命令窗口下輸入:echo $PATH ,可以查看由哪些目錄加入到了系統環境變量中。
Linux文件的所屬主以及所屬組:一個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)、第1列,包含的東西有該文件類型和所屬主、所屬組以及其他用戶對該文件的權限。第1列共10位。其中第1位用來描述該文件的類型。”d”表示該文件為目錄;”-”表示該文件為普通文件;”l”表示該文件為鏈接文件(Linux file),如軟鏈接(ln命令)即為該類型;”b”表示該文件為塊設備文件,比如磁盤分區;”c”表示該文件為串行端口設備,例如鍵盤、鼠標;”s”表示該文件為套接字文件(socket),用於進程間通信。後邊的9位,每三個為一組,均為rwx三個參數的組合。其中”r”代表可讀,”w”代表可寫,”x”代表可執行。前三位為所屬主(user)的權限,中間三位為所屬組(group)的權限,最後三位為其他非本群組(others)的權限。如一個文件的屬性為-rwxr-xr--,它代表的意思是,該文件為普通文件,文件擁有者可讀可寫可執行,文件所屬組對其可讀不可寫可執行,其他用戶對其只可讀。對於一個目錄來講,打開這個目錄即為執行這個目錄,所以任何一個目錄必須要有”x”權限才能打開並查看該目錄。
(2)、第2列,表示為連接占用的節點(inode),若為目錄時,通常與該目錄下還有多少目錄有關系。
(3)、第3列,表示該文件所屬主。
(4)、第4列,表示該文件所屬組。
(5)、第5列,表示該文件的大小。
(6)、第6列、第7列、第8列,為該文件的創建日期或者最近的修改日期,分別為月份、日期以及時間。
(7)、第9列,為文件名。如果前面有一個”.”,則表示該文件為隱藏文件(可通過快捷鍵Ctrl+h來查看當前目錄的隱藏文件)
更改Linux文件權限:更改文件的權限,也就是更改所屬主、所屬組以及他們對應的讀寫執行權限:
(1)、更改所屬組用chgrp命令:chgrp [組名] [文件名] ,通過groupadd命令用來增加一個用戶組,通過groupdel命令來刪除一個用戶組。
(2)、更改文件的所屬主用chown命令:chown [所屬主名(或賬號名)] [文件名] ,通過useradd命令來增加一個賬戶,通過userdel命令來刪除一個賬號。
(3)、改變用戶對文件的讀寫執行權限用chmod命令:在Linux中為了方便更改這些權限,Linux使用數字去代替rwx,具體規則為r:4, w:2, x:1, -:0.在Linux系統中,默認一個目錄的權限是755,而一個文件的默認權限是644.chmod還支持使用rwx的方式來設置權限。可以使用chattr命令來修改文件的特殊屬性。
在Linux下搜索一個文件
(1)、which命令用來查找可執行文件的絕對路徑。注意,which命令只能用來查找PATH環境變量中出現的路徑下的可執行文件
(2)、whereis命令通過預先生成的一個文件列表庫去查找跟給出的文件名相關的文件。
(3)、locate命令類似於whereis,也是通過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪裡。後面直接跟文件名。
(4)、find命令:find [路徑] [參數],如find . -name “*.txt”
Linux文件系統:Linux文件系統格式為Ext2、Ext3、ReiserFS等,目前大部分Linux都使用了Ext3. windows下的文件系統格式有FAT、NTFS。
Linux文件類型:在Linux文件系統中,主要有以下幾種類型的文件:
(1)、正規文件(regular file):就是一般類型的文件,當用ls -l查看某個目錄時,第一個屬性為”-”的文件就是正規文件,或者叫普通文件。正規文件又可分成純文本文件(ascii)和二進制文件(binary)。純文本文件是可以通過cat、more、less等工具直接查看內容的,而二進制文件並不能。
(2)、目錄(directory):就是目錄,跟windows下的文件夾一個意思,只是在Linux下不叫文件夾而叫做目錄。用ls -l查看第一個屬性為”d”。
(3)、連接檔(link):用ls -l查看的第一個屬性為”l”,類似windows下的快捷方式。用”ln”命令建立連接檔。
(4)、設備檔(device):與系統周邊相關的一些檔案,通常都集中在/dev這個目錄之下。通常又分為兩種:區塊(block)設備檔,就是一些儲存數據,以提供系統存取的接口設備,簡單的說就是硬盤。用ls -l查看的第一個屬性為”b”。字符(character)設備檔,即是一些串行端口的接口設備。用ls -l查看的第一個屬性為”c”。
Linux文件後綴名:在Linux系統中,文件的後綴名並沒有具體意義,也就是說,你加或者不加,都無所謂。但是為了容易區分,Linux愛好者們都習慣給文件加一個後綴名,這樣當用戶看到這個文件名時就會很快想到它到底是一個什麼文件。例如1.sh, 2.tar.gz,my.cnf, test.zip等等,其中1.sh代表它是一個shell script ,2.tar.gz 代表它是一個壓縮包,my.cnf 代表它是一個配置文件,test.zip 代表它是一個壓縮文件。Linux中,文件名最長可以支持到256個字符。
/etc/passwd文件:用”:”分割成7個字段,每個字段的含義是:
(1)、第1個字段:用戶名(如第1行中的root就是用戶名),代表用戶賬號的字符串。用戶名字符可以是大小寫字母、數字、減號(不能出現在首位)、點以及下劃線,其它字符不合法。雖然用戶名中可以出現點,但不建議使用,尤其是首位為點時,另外減號也不建議使用,因為容易造成混淆。
(2)、第2個字段:存放的就是該賬號的口令。為什麼是”x”呢,早期的Unix系統口令確實是存放在這裡,但基於安全因素,後來就將其存放到/etc/shadow中了,在這裡只用一個”x”代替。
(3)、第3個字段:這個數字代表用戶標識號,也叫做uid。系統識別用戶身份就是通過這個數字來的,0就是root,也就是說你可以修改test用戶的uid為0,那麼系統會認為root和test為同一個賬戶。通常uid的取值范圍是0~65535,0是超級用戶(root)的標識號,1~499由系統保留,作為管理賬號,普通用戶的標識號從500開始,如果我們自定義建立一個普通用戶,你會看到該賬戶的標識號是大於或等於500的。
(4)、第4個字段:表示組標識號,也叫做gid。這個字段對應著/etc/group 中的一條記錄,其實/etc/group和/etc/passwd基本上類似。
(5)、第5個字段:注釋說明,該字段沒有實際意義,通常記錄該用戶的一些屬性,例如姓名、電話、地址等等。不過,當你使用finger的功能時就會顯示這些信息的。可以通過chfn命令來更改。
(6)、第6個字段:用戶的家目錄,當用戶登錄時就處在這個目錄下。root的家目錄是/root,普通用戶的家目錄則為/home/username,這個字段是可以自定義的,比如你建立一個普通用戶test1,要想讓test1的家目錄在/data目錄下,只要修改/etc/passwd文件中test1那行中的該字段為/data即可。
(7)、第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文件:用”:”分割成9個字段,每個字段的含義是:
(1)、第1個字段:用戶名,跟/etc/passwd對應。
(2)、第2個字段:用戶密碼,這個才是該賬號的真正的密碼,不過這個密碼已經加密過了,但是有些黑客還是能夠解密的。所以為了安全,該文件屬性設置為600,只允許root讀寫。
(3)、第3個字段:上次更改密碼的日期,這個數字是這樣計算得來的,距離1970年1月1日到上次更改密碼的日期,例如上次更改密碼的日期為2012年1月1日,則這個值就是365*(2012-1970)+1=15331.
(4)、第4個字段:要過多少天才可以更改密碼,默認是0,即不限制。
(5)、第5個字段:密碼多少天後到期。即在多少天內必須更改密碼,例如這裡設置成30,則30天內必須更改一次密碼,否則將不能登錄系統,默認是99999,可以理解為永遠不需要改。
(6)、第6個字段:密碼到期前的警告期限,若這個值設置成7,則表示當7天後密碼過期時,系統就發出警告告訴用戶,提醒用戶他的密碼將在7天後到期。
(7)、第7個字段:賬號失效期限。你可以這樣理解,如果設置這個值為3,則表示:密碼已經到期,然而用戶並沒有在到期前修改密碼,那麼再過3天,則這個賬號就失效了,即鎖定了。
(8)、第8個字段:賬號的生命周期,跟第三段一樣,是按距離1970年1月1日多少天算的。它表示的含義是,賬號在這個日期前可以使用,到期後賬號作廢。
(9)、第9個字段:作為保留用的,沒有什麼意義。
創建/修改一個用戶的密碼:等創建完賬號後,默認是沒有設置密碼的,雖然沒有密碼,但該賬戶同樣登錄不了系統。只有設置好密碼後方可登錄系統。可以通過passwd命令來創建/修改用戶密碼。passwd 後面不跟用戶名則是更改當前用戶的密碼,當前用戶為root,所以此時修改的是root的密碼,後面跟test則修改的是test用戶的密碼。
Linux下用戶身份切換:Linux系統中,有時候普通用戶有些事情是不能做的,除非是root用戶才能做到。這時就需要臨時切換到root身份來做事了。
在不知道root密碼的情況下,從spring普通用戶切換到root下,則執行:sudo -s 即可;如果從root再次切換到spring,則執行:su - spring即可
設置root密碼:在終端輸入命令sudo passwd,然後輸入當前用戶的密碼,enter,終端會提示我們輸入新的密碼並確認,此時的密碼就是root新密碼。修改成功後,輸入命令su root,再輸入新的密碼就會進入root賬號了。可以使用命令:echo $LOGNAME,來查看當前登錄的用戶名。
su的語法為:su [-] username ,後面可以跟”-”也可以不跟,普通用戶su不加username時就是切換到root用戶,當然root用戶同樣su到普通用戶。加”-”後會連同用戶的環境變量一起切換過來。如suspring後雖然切換到了spring用戶,但是當前目錄還是切換前的/root目錄。然後當用su - spring時切換用戶後則到了spring的家目錄/home/spring。當用root切換到普通用戶時,是不需要輸入密碼的。這也體現了root用戶至高無上的權利。使用sudo命令執行一個root才能執行的命令是可以辦到的,但是需要輸入密碼,這個密碼並不是root的密碼而是用戶自己的密碼。
查看磁盤的容量可以用df命令:df命令可以查看已掛載磁盤的總容量、使用容量、剩余容量等,可以不加任何參數,默認是按k為單位顯示的。df命令常用的參數有-i、-h、-k、-m等:(1)、-i,使用inodes顯示結果;(2)、-h,使用合適的單位顯示;(3)、-k、-m,分別為使用K、M為單位顯示。對列進行說明:(1)、Filesystem,表示扇區,也就是你劃分磁盤時所分的區;(2)、1K-blocks/1M-blocks,表示以1K/1M為單位;(3)、Used和Available,分別是已使用和剩余;(4)、Use%,就是已經使用的百分比,如果這個這個值大於90%那麼你就應該注意了,磁盤很有可能馬上就會變滿的;(5)、Mounted
on,則表示該分區(扇區)所掛載的地方。
查看某個目錄所占空間大小可以用du命令:語法,du [-abckmsh] [文件或者目錄名] :(1)、-a,全部文件或目錄大小都列出來。如果不加任何選項和參數只列出目錄(包含子目錄)大小;(2)、-b,列出的值以bytes為單位輸出,默認是以Kbytes;(3)、-c,最後加總;(4)、-k,以KB為單位輸出;(5)、-m,以MB為單位輸出;(6)、-s,只列出總和;(7)、-h,系統自動調節單位,例如文件太小可能就幾K,那麼就以K為單位顯示,如果大到幾G,則就以G為單位顯示。
磁盤的分區:通過命令fdisk -l ,會直接列出系統中所有的磁盤設備以及分區表,-l 後加設備名會列出該設備的分區表。如果不加-l則進入另一個模式,在該模式下,可以對磁盤進行分區操作。在Linux中最多可以創建4個主分區,一旦創建4個主分區後就不能增加任何分區了。另外最多也只能創建一個擴展分區。
格式化Linux硬盤分區:通過命令mkfs.ext2、mkfs.ext3、mke2fs來完成。
掛載/卸載磁盤:用mount命令掛載設備;用umount命令卸載設備。
磁盤配額:磁盤配額其實就是給每個用戶分配一定的磁盤額度,只允許他使用這個額度范圍內的磁盤空間。在Linux系統中,是多用戶多任務的環境,所以會有很多人共用一個磁盤的情況。針對每個用戶去限定一定量的磁盤空間是有必要的。在Linux中,用來管理磁盤配額的東西就是quota了。quota在實際應用中是針對整個分區進行限制的。
文本編輯工具vim:早期的Unix都是使用vi作為系統默認的編輯器。vim是vi的升級版。
vim的三種模式即一般模式、編輯模式、命令模式
一般模式:當vim filename編輯一個文件時,一進入該文件就是一般模式了。在這個模式下,可以做的操作有:上下移動光標、刪除某個字符、刪除某行、復制、粘貼一行或者多行。
編輯模式:一般模式下,是不可以修改某一個字符的,只能到編輯模式了。從一般模式進入編輯模式,只需按一個鍵即可(i、I、a、A、o、O、r、R)。當進入編輯模式時,會在屏幕的最下一行出現”INSERT”或”REPLACE”的字樣。從編輯模式回到一般模式只需要按一下鍵盤左上方的Esc鍵即可。
命令模式:在一般模式下,輸入”:”或者”/”即可進入命令模式。在該模式下,你可以搜索某個字符或者字符串,也可以保存、替換、退出、顯示行號等等。
文檔的壓縮與打包:在Linux下最常見的壓縮文件通常都是以.tar.gz為結尾的,除此之外還有.tar, .gz, .bz2, .zip(.zip格式文件在Windows和Linux下都能使用)等等:(1)、.gz:gzip壓縮工具壓縮的文件(注意,gzip不可以壓縮目錄);(2)、.bz2:bzip2壓縮工具壓縮的文件;(3)、.tar:tar打包程序打包的文件(tar並沒有壓縮功能,只是把一個目錄合並成一個文件);(4)、.tar.gz:可以理解為先用tar打包,然後再gzip壓縮;(5)、.tar.bz2:先用tar打包,然後再bzip2壓縮。
shell:簡單點理解,就是系統跟計算機硬件交互時使用的中間介質,它只是系統的一個工具。實際上,在shell和計算機硬件之間還有一層東西那就是系統內核了。用戶直接面對的不是計算機硬件而是shell,用戶把指令告訴shell,然後shell再傳輸給系統內核,接著內核再去支配計算機硬件去執行各種操作。
bash(Redhat/CentOS系統默認安裝的shell叫做bash,它是sh的增強版本。Ubuntu默認安裝的shell是dash。通過執行:ll /bin/sh ,可以發現Ubuntu中的/bin/sh指向的是dash而不是bash,/bin/sh是個軟連接,你也可以通過軟連接的方式使/bin/sh指向bash:sudo ln -s /bin/bash /bin/sh 。)的特點:
(1)、記錄命令歷史:我們敲過的命令,linux是會有記錄的,預設可以記錄1000條歷史命令。這些命令保存在用戶的家目錄中的.bash_history文件中。有一點需要你知道的是,只有當用戶正常退出當前shell時,在當前shell中運行的命令才會保存至.bash_history文件中;
(2)、指令和文件名補全:按tab鍵,它可以幫你補全一個指令,也可以幫你補全一個路徑或者一個文件名。連續按兩次tab鍵,系統則會把所有的指令或者文件名都列出來;
(3)、別名:可以通過alias命令把一個常用的並且很長的指令別名一個簡潔易記的指令。如果不想用了,還可以用unalias命令解除別名功能。直接敲alias會看到目前系統預設的alias;
(4)、通配符:在bash下,可以使用*來匹配零個或多個字符,而用?匹配一個字符;
(5)、輸入輸出重定向:輸入重定向用於改變命令的輸入,輸出重定向用於改變命令的輸出。輸出重定向更為常用,它經常用於將命令的結果輸入到文件中,而不是屏幕上。輸入重定向的命令是<,輸出重定向的命令是>,另外還有錯誤重定向2>,以及追加重定向>> ;
(6)、管道符:”|”, 就是把前面的命令運行的結果丟給後面的命令;
(7)、作業控制:當運行一個進程時,你可以使它暫停(按Ctrl+z),然後使用fg命令恢復它,利用bg命令使他到後台運行,你也可以使它終止(按Ctrl+c)。
變量:通常shell預設的變量都是大寫的。變量,說簡單點就是使用一個較簡單的字符串來替代某些具有特殊意義的設定以及數據。就拿PATH來講,這個PATH就代替了所有常用命令的絕對路徑的設定。因為有了PATH這個變量,所以我們運行某個命令時不再去輸入全局路徑,直接敲命令名即可。你可以使用echo命令顯示變量的值,如:echo $PATH 。
使用env命令即可全部列出系統預設的全部系統環境變量了。不過登錄的用戶不一樣這些環境變量的值也不一樣。
env命令顯示的變量只是環境變量,系統預設的變量其實還有很多,你可以使用set命令把系統預設的全部變量都顯示出來。set不僅可以顯示系統預設的變量,也可以連同用戶自定義的變量顯示出來。
雖然你可以自定義變量,如自定義變量myname,但是該變量只能在當前shell中生效。使用bash命令即可再打開一個shell,此時先前設置的自定義變量已經不存在了,退出當前shell回到原來的shell(可以通過exit命令退出當前的shell),則自定義變量還在:
(1)、要想系統內所有用戶登錄後都能使用自定義變量:需要在/etc/profile文件最末行加入”export myname=spring”(export其實就是聲明這個變量的意思),然後運行”source /etc/profile”就可以生效了;source命令的作用是,將目前設定的配置刷新,即不用注銷再登錄也能生效;
(2)、只想讓當前用戶使用該變量:需要在用戶主目錄下的.bashrc文件最後一行加入“export myname=spring”, 然後運行”source .bashrc”就可以生效了。
設置自定義變量的規則:
(1)、設定變量的格式為”a=b”,其中a為變量名,b為變量的內容,等號兩邊不能有空格
(2)、變量名只能由英、數字以及下劃線組成,而且不能以數字開頭;
(3)、當變量內容帶有特殊字符(如空格)時,需要加上單引號,如,myname= ‘spring spring’;有一種情況,需注意,就是變量內容中本身帶有單引號,這就需要用到雙引號了,如,myname=”spring’spring”;
(4)、如果變量內容中需要用到其他命令運行結果則可以使用反引號,如,myname=`pwd`;
(5)、變量內容可以累加其他變量的內容,需要加雙引號(單引號和雙引號的區別:用雙引號時不會取消掉裡面出現的特殊字符的本身作用(這裡的$),而使用單引號則裡面的特殊字符全部失去它本身的作用),如,myname=”$LOGNAME”spring;
(6)、在父shell中設定一個變量後,進入子shell後該變量是不會生效的,如果想讓這個變量在子shell中生效則要用到export指令。如果在當前shell中運行bash指令後,則會進入一個新的shell,這個shell就是原來shell的子shell了,可以通過pstree指令來查看,此指令會把Linux系統中所有進程通過樹形結構打印出來。
系統環境變量的配置文件
(1)、/etc/profile:這個文件預設了幾個重要的變量,例如PATH, USER,LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umas等等;
(2)、/etc/bash.bashrc:這個文件主要預設umask以及PS1.
個人環境變量的配置文件:除了兩個系統級別的配置文件外,每個用戶的主目錄下還有幾個這樣的隱藏文件:
(1)、.profile:定義了用戶的個人化路徑與環境變量的文件名稱。每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次;
(2)、.bashrc:該文件包含專用於你的shell的bash信息,當登錄時以及每次打開新的shell時,該文件被讀取。例如你可以將用戶自定義的alias或者自定義變量寫到這個文件中;
(3)、.bash_history:記錄命令歷史用的;
(4)、.bash_logout:當退出shell時,會執行該文件。可以把一些清理的工作放到這個文件中。
Linux shell中的特殊符號
(1)、*:代表零個或多個字符或數字;
(2)、?:只代表一個任意的字符;
(3)、#:這個符號在Linux中表示注釋說明的意思,即”#”後面的內容Linux忽略掉;在命令的開頭或者中間插入”#”,Linux都會忽略掉的;
(4)、\:脫意字符,將後面的特殊符號(如”*”)還原為普通字符;
(5)、|:管道符,它的作用在於將符號前面命令的結果丟給符號後面的命令。這裡提到的後面的命令,並不是所有的命令都可以的,一般針對文檔操作的命令比較常用,例如cat, less, head,tail, grep(過濾一個或多個字符), cut(截取某一個字段), sort(排序), wc(統計文檔的行數、字符數、詞數), uniq(去重復的行,在進行uniq之前,需要先用sort排序然後才能uniq,否則你將得不到你想要的), tee(後跟文件名,類似與重定向”>”,但是比重定向多了一個功能,在把文件寫入後面所跟的文件中的同時,還顯示在屏幕上),
tr(替換字符,常用來處理文檔中出現的特殊符號), split(切割文檔), sed, awk等等,其中grep, sed, awk為正則表達式必須掌握的工具;
(6)、$:除了用於變量前面的標識符外,還有一個妙用,就是和’!’結合起來使用;”!$”表示上條命令中最後出現的那些內容;
(7)、;:分號,想在一行中運行兩個或兩個以上的命令,則需要在命令之間加一個”;”;
(8)、~:用戶的家目錄,如果是root則是 /root ,普通用戶則是 /home/username;
(9)、&:如果想把一條命令放到後台執行的話,則需要加上這個符號。通常用於命令運行時間非常長的情況;
(10)、>,>>,2>,2>>:>和>>分別表示重定向和追加重定向,2>和2>>分別表示錯誤重定向和錯誤追加重定向;當我們運行一個命令報錯時,報錯信息會輸出到當前的屏幕,如果想重定向到一個文本裡,則要用2>或者2>>;
(11)、[]:中括號,中間為字符組合,代表中間字符中的任意一個;
(12)、&&與||:作用類似於C++中的&&和||邏輯操作符。
正則表達式:使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器裡,正則表達式通常被用來檢索、替換那些符合某個模式的文本,常用的工具有grep、sed、awk等,這些工具都是針對文本的行操作的。
grep命令:用法如,grep -in ‘abc’ tmp.txt ,常用參數介紹:
(1)、-c:打印符號要求的行數;
(2)、-i:忽略大小寫;
(3)、-n:在輸出符號要求的行的同時連同行號一起輸出;
(4)、-v:打印不符合要求的行;
其它說明:
(1)、”[]”:如果是數字的話就用[0-9]這種情勢;如果只包含數字1和5,則可以用[15],它不會認為是15;如果要過濾出數字以及大小寫字母則要這樣寫[0-9a-zA-Z];另外[ ]還有一種形式,就是[^字符] 表示除[ ]內的字符之外的字符;
(2)、在正則表達式中,”^”表示行的開始,”$”表示行的結尾,那麼空行則表示”^$”,如果你只想篩選出非空行,則可以使用 “grep -v ‘^$’ filename”得到你想要的結果;
(3)、”.”表示任意一個字符;”*”表示零個或多個前面的字符;”.*” 表示零個或多個任意字符,空行也包含在內;
(4)、可以使用”{}”,其內部為數字,表示前面的字符要重復的次數。
sed命令:grep實現的只是查找功能,而它卻不能實現把查找的內容替換掉,而sed工具不僅可以把查找的內容替換掉,而且還能實現把替換的文本輸出到屏幕上的功能,而且還有其它更豐富的功能,sed是流式編輯器:
(1)、打印某行或者多行:sed -n ‘n’p filename ,單引號內的n是一個數字,表示第幾行;
(2)、刪除某行或者多行:sed ‘1,5’d filename,刪除第1行和第5行;
(3)、替換字符或字符串:sed ‘1,3s/AB/ab/g’ filename,將文件中的第1行和第3行中的字符串AB替換為ab;’s’就是替換的命令,’g’為本行中全局替換,如果不加’g’,只換該行中出現的第一個。除了可以使用’/’外,還可以使用其它特殊字符如’#’或者’@’都沒有問題。
awk命令:它和sed一樣是流式編輯器,它也是針對文檔中的行來操作的,一行一行的去執行,它的功能比sed更加強大:
shell腳本與windows/doc下的批處理相似,也就是用各類命令預先放入到一個文件中,方便一次性執行的一個程序文件,主要是方便管理員進行設置或者管理用的。shell腳本能幫助我們很方便的去管理服務器,因為我們可以指定一個任務計劃定時去執行某一個shell腳本實現我們想要需求。
凡是自定義的腳本建議放到/usr/local/sbin/目錄下,這樣做的目的是,一來可以更好的管理文檔,二來以後接管你的管理員都知道自定義腳本放在哪裡,方便維護。
shell腳本的基本結構:shell腳本通常都是以.sh為後綴名的,這個並不是說不帶.sh這個腳本就不能執行,只是大家的一個習慣而已。所以,以後你發現了.sh為後綴的文件那麼它一定會是一個shell腳本。shell腳本文件中第一行一定是 “#! /bin/bash” 它代表的意思是,該文件使用的是bash語法。如果不設置該行,那麼你的shell腳本就不能被執行。’#’表示注釋,後面跟一些該腳本的相關注釋內容以及作者和創建日期或者版本等等。當然這些注釋並非必須的。該腳本再往下面則為要運行的命令了。
shell腳本的執行很簡單,直接”sh filename.sh”即可,另外也可以通過”./filename.sh”來執行。另外使用sh命令去執行一個shell腳本的時候是可以加-x選項來查看這個腳本執行過程的,這樣有利於我們調試這個腳本哪裡出了問題。
shell腳本中的變量:(1)、定義變量的格式為:”變量名=變量的值”;(2)、當在腳本中引用變量時需要加上’$’符號;(3)、read命令可以從標准輸入獲得變量的值,後跟變量名。”read x”表示x變量的值需要用戶通過鍵盤輸入得到;(4)、shell腳本在執行的時候後邊是可以跟變量的(預設變量,一個shell腳本的預設變量是沒有限制的,$0代表腳本本身的名字),而且還可以跟多個。
注意:Ubuntu的shell默認安裝的是dash,而不是bash。可以通過運行ls -al /bin/sh查看sh的詳細信息。dash比bash更輕、更快,當bash卻更常用。如果一些命令、腳本等總不能正常執行,有可能是dash的原因。Linux上的shell並非只有一種,而各個shell的語法是由差別的
shell腳本中的邏輯判斷:if… fi、if … else… fi、if … elif… else…fi、case。
shell腳本中的循環:for、while。
shell腳本中的函數:function。
Linux系統日常管理:
監控系統的狀態:
(1)、用”w”命令查看當前系統的負載(系統整體上的負載):一般情況下,平均負載值不超過服務器的cpu數量就沒有關系;可以通過這個命令”grep -c ‘processor’ /proc/cpuinfo ”來查看當前系統有幾個cpu。
(2)、用”vmstat”命令監控系統的狀態:vmstat命令打印的結果共分為6部分:A、procs:顯示進程相關信息,’r’表示運行和等待cpu時間片的進程數,如果長期大於服務器cpu的個數,則說明cpu不夠用了;’b’表示等待資源的進程數,比如等待I/O、內存等,這列的值如果長時間大於1,則需要關注下;B、memory:內存相關信息,’swpd’表示切換到交換分區中的內存數量;’free’表示空閒的內存數量;’buff’緩沖大小(即將寫入磁盤的);’cache’緩存大小(從磁盤中讀取的);C、swap:內存交換情況,’si’由內存進入交換區的數量,’so’由交換區進入內存的數量;D、io:磁盤使用情況,’bi’從塊設備讀取數據的量(讀磁盤),’bo’從塊設備寫入數據的量(寫磁盤);E、system:顯示采集間隔內發生的中斷次數,’in’
表示在某一時間間隔中觀測到的每秒設備中斷數,’cs’ 表示每秒產生的上下文切換次數;F、cpu:顯示cpu的使用狀態;’us’ 顯示了用戶下所花費 cpu 時間的百分比,’sy’顯示系統花費cpu時間百分比,’id’ 表示cpu處於空閒狀態的時間百分比,’wa’ 表示I/O等待所占用cpu時間百分比,’st’ 表示被偷走的cpu所占百分比(一般都為0,不用關注)。
(3)、用”top”顯示進程所占系統資源:這個命令用於動態監控進程所占系統資源,每隔3秒變一次。這個命令的特點是把占用系統資源(CPU,內存,磁盤IO等)最高的進程放到最前面。top命令打印出了很多信息,包括系統負載(load average)、進程數(Tasks)、cpu使用情況、內存使用情況以及交換分區使用情況。
(4)、用”sar”命令監控系統狀態:sar 命令很強大,它可以監控系統所有資源狀態,比如平均負載、網卡流量、磁盤狀態、內存使用等等。它不同於其他系統狀態監控工具的地方在於,它可以打印歷史信息,可以顯示當天從零點開始到當前時刻的系統狀態信息。如果你系統沒有安裝這個命令,請使用”sudo apt-get install sysstat”命令安裝。
(5)、用”free”命令查看內存使用狀態:查看內存使用多少,剩余多少看第二行的數據。
(6)、用’ps”命令查看系統進程:ps aux
(7)、用”netstat”命令查看網絡狀況:A、”netstat -lnp”打印當前系統啟動哪些端口;B、”netstat -an”打印網絡連接狀況。
(8)、抓包工具tcpdump:想看一下某個網卡上都有哪些數據包,尤其是當你初步判定你的服務器上有流量攻擊。這時,使用抓包工具來抓一下數據包,就可以知道有哪些IP在攻擊你了。
Linux網絡相關:
(1)、用”ifconfig”命令查看網卡IP:
(2)、給一個網卡設定多個IP:在Linux系統中,網卡是可以設定多重IP的。
(3)、查看網卡連接狀態:”mii-tool”這個命令用來查看網卡是否連接,如圖顯示”link ok”等字樣說明連接正常,否則會顯示”no link”字樣。虛擬機不支持”mii-tool”命令。
(4)、更改主機名:可以使用”hostname”命令查看你的Linux的主機名是什麼。
(5)、設置DNS:在linux下面設置dns非常簡單,只要把dns地址寫到一個配置文件中即可。這個配置文件就是/etc/resolv.conf.
Linux的防火牆:iptables是Linux上特有的防火牆機制,其功能非常強大。
Linux系統的任務計劃:可通過”crontab”命令來完成。
Linux系統服務管理:chkconfig
Linux中的數據備份:rsync
Linux系統日志:日志主要的功能有:審計和檢測,它還可以實時的檢測系統狀態,檢測和追蹤侵入者等等。
Linux下同步時間服務器:ntpdate
LAMP環境搭建:LAMP是LinuxApache MySQL PHP的簡寫,其實就是把Apache,MySQL以及PHP安裝在Linux系統上,組成一個環境來運行php的腳本語言。
LNMP環境搭建:和LAMP不同的是LNMP中的N指的是Nginx(類似於Apache的一種web服務軟件),其它都一樣。Nginx設計的初衷是提供一種快速高效多並發的web服務軟件。
NFS服務配置:NFS會經常用到,用於在網絡上共享存儲。
配置ftp服務:FTP(File Transfer Protocol)即文件傳輸協議。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。用戶可以通過它把自己的PC機與世界各地所有運行FTP協議的服務器相連,訪問服務器上的大量程序和信息。FTP的主要作用,就是讓用戶連接上一個遠程計算機(這些計算機上運行著FTP服務器程序)察看遠程計算機有哪些文件,然後把文件從遠程計算機上拷到本地計算機,或把本地計算機的文件送到遠程計算機去。
配置squid服務:Squid是比較知名的代理軟件,它不僅可以跑在linux上還可以跑在windows以及Unix上。
配置Tomcat:Tomcat就是用來解析jsp程序的一個軟件。
配置samba服務器:可以通過samba服務來實現windows和Linux的文件共享。
使用Nagios搭建監控服務器:Nagios是一款用於監控系統和網絡的開源應用軟件,它的模式是服務器—客戶端,也就是說首先要在在一台服務器上(server)部署相應的主要套件,然後在要監控的服務器上部署客戶端程序,這樣server會和client通信,從而監控client端的各項資源。
Copyright © Linux教程網 All Rights Reserved