《馬哥出品高薪linux運維教程》wingkeung學習筆記-linux基礎入門課程

計算機原理概念:前端

 

一、CPU和內存中的存儲單元通訊線路稱爲總線(BUS),總線是被指令和數據複用的,因此也稱爲前端總線。java

二、計算機中計算頻率的時間標準即晶體振盪器原理,精確計算時間長度,根據相同的時間統計變化的次數,即保持時鐘同步。node

三、每個芯片在廠家生產時都有一個以微碼(彙編語言)形式存在內置接口,完成必定意義上的智能操做。linux

四、CPU中控制器在未從存儲器中提取所有數據交給運算器運算的過程當中,已提取的數據存放ios

的位置叫寄存器,所有數據提取完以後才交給運算器進行運算(舉例:1+1=?)。git

五、北橋是高速總線(即相似於CPU和存儲器的本地總線)的鏈接設備;南橋是慢速設備(類程序員

似於鍵鼠、USB、硬盤等)的鏈接設備,而且鏈接到北橋,經過北橋再與CPU通訊。正則表達式

六、主板上顯卡、硬盤等的插槽被稱爲適配器或控制器。shell

七、將輸入設備和輸出設備(外圍I/O設備),尤爲輸入設備鏈接起來,隨時通知CPU停下來express

理數據的芯片稱爲中斷控制器;CPU識別中斷控制器的標識即中斷向量。

 

計算機操做系統發展歷史:

 

 

 

  爲了解決穿孔機時代CPU在同一時間只能處理一個程序(批處理和脫機批處理)的問題,GE(通用電氣),MIT(麻省理工學院),AT&T(美國電話電報公司)的Bell實驗室共同研發了多用戶、多任務、多層次的多用途通用系統——multics ,因爲MULTICS比較昂貴和巨大,工程師們迷失,不知道該往哪一個方向發展,致使GE、MIT退出,只剩下AT&T,Bell實驗室習慣了使用multics,因此作出了multics運行

 

在mainframe,經過分頻器,多個用戶使用同一個計算機mainframe,假如Bell實驗室的工程師從AT&T脫離出來,就不能使用了,而實驗室的的ken有一個遊戲space travel,要運行,就得本身有一個個multics,而後當時計算機很昂貴,因此ken在bell實驗室發現了一臺淘汰的PDP-7(DEC公司生產),而且使用匯編語言寫了一個小系統,因爲系統比較小,比較簡單,因此他同事給系統起名爲unics(單一的),而且其餘同事對這個系統很感興趣。

 

   因爲計算機的程序和計算機的CPU是密切相關的,因此在PDP-7上開發的系統不能再PDP-11上運行,由於CPU的針腳不同,因此要運行,必須進行從新編譯(代碼移植),ken在研究激光照排系統時擁有了PDP-11的使用權,因此Unics流行起來,引發另一個同事的注意,對其很感興趣,因此一塊兒和ken研究,最後簡化重命名爲unix,因爲屢次移植很痛苦,因此把B語言進行升級,升級後命名爲C語言,用C這個高級語言重寫Unix的源程序,只要有編譯器,就能夠根據不一樣CPU編譯源程序以後運行在各類計算機上。1974年,這兩人在雜誌上發表了UNIX,因此不少學計算機的人很感興趣,因爲UNIX屬於AT&T,而後AT&T被美國政府反壟斷法裁定,不能銷售電報電話意外的任何商品,因此KEN在別人要UNIX系統的時候要一筆郵費,別人能夠學習,而且不少其餘人對其研發了不少新功能。1976年ken到加州大學伯克利分校任教,當時該學校已經擁有UNIX代碼,而且有個小組(BSRG)專門研究UNIX,而且引進了不少新特性,加上其餘人研發公佈出來的新特性,研發了一種人機交互的接口csh,該系統叫作BSD(伯克利分校分發版本),而且進行銷售。1980先後,Bell實驗室再次因爲反壟斷法從AT&T分拆出來,就開始銷售本身UNIX的System V系統(4W美圓),因爲版權法和昂貴的價格,一些人不使用System V,致使Bell實驗室和BSD打起了官司,差很少十年。

 

   當時,其餘公司也看到BSD的利益,也本身打包UNIX開始發售,包括SGI、IBM(AIX)、SUN(solaris)、HP(HP-UX),當時在西雅圖有家公司叫microsoft,也賣UNIX,叫XENIX。當時IBM已經有了PC機,使用inter80286的CPU,而且很醜陋,UNIX不能再其上運行,而當時UNIX的系統都使用摩托羅拉的CPU,M68000。IBM的PC機沒有系統使用,而當時比爾蓋茨的一個聯合創世人的一個同窗仿造稱做PL/M的操做系統,花了四周時間研發了一個系統,這時比爾蓋茨經過其創始人花了5W美圓買了這個操做系統,比爾蓋茨的母親是IBM的董事會成員,因此經過他母親找到IBM,向IBM賣許可證(license),一個license5美圓,而且IBM贊成比爾蓋斯把這個license也賣給其餘生產PC機的廠商,大概一年,就賺上千萬美圓,而且去掉了這個系統的原有標識,打進了microsoft的標識,稱其系統爲DOS(Disk Operating System)。IBM研發PC兼容機的時候,美國另外一個公司apple公司,也專門賣PC兼容機,它使用的CPU是powerpc,而且系統源代碼是封閉的,apple機也很漂亮,powerpc系統很穩定,並且運行了unix系統BSD,因此蘋果公司PC機大賣特賣,因爲創始人喬布斯人格比較偏激,結果被董事會趕出了apple公司,喬布斯離開apple以後又建立了pix動畫公司,後來買給了迪士尼。因爲apple在喬布斯離開以後一路走低,舉步維艱,又請回了喬布斯。在APPLE公司創立不久,屬於施樂公司的PARK實驗室研發出來了一個程序GUI,研發了鼠標。因爲施樂公司是作複印機,打印機的,懼怕有了GUI沒人使用打印機,因此中止了GUI的研發。而喬布斯一次進入park實驗室發現了GUI,向施樂公司申請,買了GUI的一份兒拷貝,喬布斯組織團隊,研發GUI,使用BSD內核,研發出了稱爲MAC的圖形界面系統。這是比爾蓋茨知道了,因此就可憐巴巴的找喬布斯,買了一份GUI拷貝說回去研究學習,而且偷偷的研發。當喬布斯準備與一家公司簽約的時候,被比爾蓋斯挖牆腳搶走了,而且比爾蓋茨給本身的圖形界面系統起名叫windows。因爲比爾蓋斯沒有拿到MAC的核心技術,只是拿到了GUI,因此windows是運行在DOS的基礎上,而DOS原本很醜陋,是個單用戶單任務的系統,因此windows常常藍屏。在這期間,UNIX仍在打仗,當發現apple和windows如此強大時,UNIX悔之晚矣。

 

   DEC公司當時研發的是小型機PDP系列和VAX系列,VAX運行的是VMS系統,因爲UNIX在小型機很流行,因此當DEC向別人銷售的時候買家要求安裝UNIX系統,因此DEC只好委屈的在VAX上安裝UNIX,放棄了VMS系統,VMS研發團隊被打入冷宮。因爲windows常常藍屏,技術不行,因此比爾蓋茨找到VMS的項目負責人,而且帶來了整個團隊和VMS的技術,這幫人硬是把windows和VMS的核心技術結合在了一塊兒,出現了windowsNT,而且出現了server版本,所以,也敲響了Novell公司(netware)的喪鐘,由於微軟服務器系統的傻瓜化和其圖形操做界面,可是windows是一個補丁補起來的系統,因此係統不夠穩定。在windowsNT誕生的時候,微軟與IBM共同研發叫作OS2的操做系統,因爲windowsNT的出現而且很火,因此微軟退出了OS2的研發,結果IBM也未研發成功。當apple的界面愈來愈漂亮的時候,比爾蓋茨又找IBM購買了OS2進行研發,即windows vista。

 

   UNIX閉源之後,芬蘭的一所大學裏面的一個教授,經過UNIX講授本身寫的一個徹底兼容UNIX,而且只有4000多行代碼的新系統,在整個歐洲教授其系統,此係統叫作Minix。而別人又針對其系統開發了不少驅動之類的程序,想運行在Minix上,而這個教授爲了保證其系統的純淨不容許,因此這些人就很鬱悶,包括本身的一個學生linus。linus20歲生日的時候,他的外公(工做在至關於中國的工信部的部長)送給其一個80386的PC機,linus安裝Minix,本身的一些驅動教授又不讓安裝,因此就乾脆抹掉整個系統,本身寫了一個操做系統,放在了當時的電子公告牌上公佈出去,更名linux,而且徹底兼容UNIX,和UNIX很像,因此稱爲類UNIX。因爲閉源的問題,不少人不能使用UNIX,當時MIT中第一我的Richard Stallman,舉起了自由的大旗,認爲軟件屬於大衆,因此倡導自由軟件運動,任何人開發的源程序,自由獲取,自由改編,自由分發,自由使用。當自由軟件運動發起以後,受到了世界上黑客的追捧,因此就開發了不少程序(好比vi、gcc等),當時因爲沒有開源的操做系統,很諷刺的是,開源程序只能運行在封閉的操做系統,在報國無門的時候,linux出現了,linux系統結合開源程序,迅速發展起來。可是linux不是給普通用戶使用的,因此其入門很難,學習曲線比較陡峭,至許多人望而生畏,而且其好多功能普通用戶使用不到,因此只覆蓋在服務器領域。自由軟件運動當時被稱爲GNU,即GNU is not UNIX。system V在和BSD打官司,收回了公開權限,而且賣license,引發了黑客的一致反對。此時,GNU的一些表明成立了一些遵循自由軟件運動的協議,即GPL(舉例,***的共產主義宣言),此協議規定遵循此協議的軟件,必需要公開程序的源代碼,第三方自由獲取,自由改編,自由分發,自由使用,而且不能有任何商業利益,即便只是用了其1%的源碼,也不能進行商業利益。因爲GPL協議,不少第三方對開發程序失去積極性,因此GNU又規定了LGPL協議,此協議是GNU的妥協,任何第三方的我的或公司要使用別人的程序,在進行商業利益時,即便使用了別人1%的源碼,也不能對其進行更改,但能夠進行調用。GPL協議過於嚴苛,因此修訂有了GPL V2,GPL V3版本。其餘開源運動的組織倡導了其餘開源協定,好比BSD也有了BSD協定,因此GNU只是開源運動的一個組成部分和重要生命軍。因爲BSD協定比GPL寬鬆不少,因此如今好多人遵循BSD協定。開源的目的是自由free,可是開源並不定是免費,開源能夠自由使用,可是出現問題不進行負責,因此不少公司和做者就是賣服務。因爲不管如何,程序不能跨平臺運行,(除非是java和C#運行在虛擬機上的更高級語言開發),因此普通用戶根據本身的平臺編譯程序是很困難的,沒幾我的能完成,所以有人專門針對不一樣的平臺專門編譯,而且專門開發一個安裝程序,把二進制程序和安裝程序放在一塊,經過安裝程序把編譯的二進制程序安裝到硬件上(好比一個軟件有windows版本,有linux版本,有32位和64位的版本之分)。

 

   專門包裝發行linux發行版的公司有,Redhat(Linux+GNU+安裝程序)、Slackware、Debian,現金全球三大linux發行版包裝公司有Redhat、Debian(ubuntu)、SUSE,其餘版本都是在這三個版本的基礎上二次發行、三次發行,而且添加本身的公司標識。因爲這些版本遵循GPL協議,因此這些公司賣服務,若是公開的系統有漏洞,它提供補丁的源碼包,不提供編譯好的二進制,因此若是不買服務,則本身編譯的補丁能不能打上就是問題。加州大學伯克利分校的一我的爲了避免使此事發生,使用這些廠家的源碼包,使用相同的方式進行編譯,好比CentOS,因此CentOS發行時間大概比Redhat遲一個月。因爲商業利益,這些公司像windows同樣給發行版裏面包裝 了不少本身開發的程序,因此高級用戶使用純淨的Slackware和Gentoo,更高級最純淨的版本爲LFS(書,菜譜,告訴你去哪裏下載相關的文件),本身作linux系統,內核及每個程序須要本身編譯,固然時間須要很長,可能須要幾天。這些包裝公司通常的版本有ALPBA(內測版),Beta(公測版),RC(發行候選)。BSD和貝爾實驗室的System v打官司以後,BSD去掉了system V的代碼,最後中止開發,有黑客開發爲FreeBSD、OpenBSD、NetBSD,System V賣給Novell公司,Novell最後賣給了開源基金會,至今BSD和System V都不存在,而IBM、HP、SUN的UNIX仍存在。如今的Android:linux內核+java虛擬機;ios:FreeBSD+objectC。

 

 

 

總結:

 

自由軟件

 

一、爲任何目的運行程序的自由

 

二、學習和修改源程序的自由

 

三、從新分發程序的自由

 

四、基於某源程序開發衍生版的自由

 

基本法則:

 

一、一切皆文件

 

二、體積眇小且目的的單一的程序

 

三、組合小程序,完成複雜任務

 

四、儘量避免捕獲用戶接口

 

五、配置數據保存至文本文件

 

linux內核調度機制:

 

 

 

   若是隻有一個linux內核,而沒有編譯器相似的程序,只有內核是不能在硬件上運行的,因此linux內核提供了開源程序的平臺,開源程序又催生了linux的發展,而底層的硬件要被上層應用使用,又須要驅動程序。

 

   在多程序運行時,CPU進行時間分片(timeslice)分配給每一個程序,而且程序要運行,必須在內存中,可是內存分片會造成內存碎片,因此最後出現了線性地址和物理地址。多程序同時運行時進行交替,簡稱切換,爲了保證多個程序不互相打攪,在內存切換按時有序,因此把在內存中程序的副本,稱爲進程,實現對運行中程序資源分配的單位,因此一個基本內核,最基本的功能,應該具備:CPU時間分配、內存管理、進程管理、安全管理、驅動硬件,所以,每一個硬件都必須有驅動程序,一些經常使用的驅動程序能夠集成在內核中,不經常使用的就須要安裝第三方驅動。

 

   操做系統基本上分三個層次,最底層硬件-內核-應用程序,操做系統起來以後須要一個機制供用戶操做(好比桌面,爲人機接口),有一個程序供用戶去管理其餘應用程序,即shell,SHELL分兩類:GUI圖形用戶接口和CLI命令行接口。爲了保證內核的功可以底層,夠簡潔,夠通用,內核將底層硬件的功能經過系統調用(system call)向上層應用程序提供,系統調用即函數。爲了簡化程序員的工做,將相應系統調用進行封裝,造成通用功能,被稱爲庫(被調用之後的程序)。庫的調用方式有兩種:靜態編譯和動態編譯(例如windows中以.dll結尾的文件,linux中爲C語言提供基本的底層運行庫爲glibc)。

 

   在系統運行以後,內存中有一段空間只有內核才能訪問,用戶是沒法訪問的,用戶是不能跟內核空間打交道的。好比說用戶執行rm /tmp/test.txt,用戶空間執行程序以後,發現須要刪除文件,要操做硬件,而刪除須要內核進行,因此CPU要陷入到內核模式,CPU分級別,用戶空間在3,內核空間爲0,只有在0級別下才能進行操做刪除。因此不一樣平臺的庫調用機制不同,庫也不同,因此不一樣程序在不能平臺不能使用,於是爲了保證庫UNIX和LINUX庫的兼容性,可移植性,造成了一個標準,即調用方式和輸出結果是同樣的,稱做POS(可移植操做系統),後更名爲POSIX,像POSIX規範,叫API規範(應用編程接口)。但API相同,ABI(應用二進制接口)不一樣,即在LINUX中編譯好的程序在UNIX中不能執行,也就是執行格式不同,若是從新編譯,便可使用,而後ABI取決於庫和內核。

 

 

文件類型及FHS:

 

 

 

高級格式化:申請一個區域,用於存放文件的索引,而且將整塊磁盤劃分紅一個一個固定大小的可存儲數據的磁盤塊的過程,也叫作建立文件系統的過程

 

 

 

linux文件類型:

 

一、普通文件 -,d

 

二、目錄文件 d

 

三、連接文件

 

   符號連接(軟連接)l

 

   硬連接

 

四、特殊文件,用於做爲硬件設備訪問入口的文件

 

   塊設備,可以隨機,按塊進行存取的設備 b

 

   字符設備,線性的按字符逐個存取的設備 c

 

五、套接字文件(socket) s

 

六、命名管道文件(prpe) p

 

 

 

FHS:文件系統層次結構標準(fhs-2.3-pdf)

 

 

 

/bin:二進制,爲全部用戶使用

 

/sbin:二進制,爲管理員使用

 

/boot:內核,bootloader的存放位置

 

/dev:設備文件的存放位置

 

/etc:配置文件

 

/home:普通用戶的家目錄

 

/lib:基本共享庫和內核模塊

 

/media,/mnt:掛載點

 

/opt:可選的軟件安裝路徑(用的很少,除非oracle等)

 

/root:管理員的家目錄

 

/srv:某服務運行的中間數據

 

/tmp:臨時文件,公共場所

 

/usr:

 

   /usr/share

 

   /usr/bin

 

   /usr/lib

 

   /usr/include

 

   /usr/src

 

   /usr/local/bin

 

   /usr/local/sbin

 

   /usr/local/lib

 

/var:常常發生變化的文件

 

   /var/log:日誌文件

 

   /var/spool:緩衝文件(好比打印機的打印隊列)

 

   /var/run:服務的守護進程文件

 

   /var/lock:

 

   /var/mail:

 

/proc:僞文件目錄,系統運行起來放在內存中的內核信息

 

/sys:僞文件目錄,跟硬件設備相關的內核信息

 

/misc:雜項,不便歸類的目錄

 

/selinux:跟selinux相關的文件

 

 

命令:

 

內部命令:由shell程序自帶的命令叫作內部命令;

外部命令:在系統的某個路徑下,有一個與命令同名的可執行程序叫作外部命令。

   查看內外部命令的命令:type 命令

   命令選項:用於調整命令執行行爲的開關。長選項,若是須要參數的話,一般須要使用等號,例如--size=1G

       []可選內容;<>必選內容;|多選一;...能夠有多個;{}可展開。

文件系統,即文件管理系統,對文件管理的方式;定位文件的方式叫路徑,pwd顯示當前工做目錄。

 

獲取命令幫助信息:

 

內部命令,help

外部命令,--help、man、info

 

1、man:手冊,是分章節的,通常有8個相關章節,常見的有一、五、8。若是在查看時有亂碼,則可執行export LANG=en,即將語言設爲英文

   一、用戶命令

   二、系統調用

   三、庫調用

   四、特殊文件,例如/dev/tty1

   五、文件格式(命令的配置文件的語法)

   六、遊戲相關

   七、雜項(不便歸類的)

   八、管理員命令

   man的使用:翻屏操做:頁,向後:Space 向前:b;行,向後:Enter,向前:k;退出:q

2、info:有超連接的文檔,比man的信息更多,可是比較複雜,不經常使用。

3、通常應用程序在/usr/share/doc/app_name-version中有README幫助文檔;INSTALLATION,安裝信息、INSTALL等

4、google:

 

linux經常使用命令:

 

RHEL中:minge程序生成tty,

一、hwclock  查看主板時間;hwclock -w 以系統時間爲準設定主板時間;hwclock -s 以主板時間爲準設定系統時間

二、cal 顯示日曆;cal -3顯示當前月及先後各一個月;cal 2014顯示2014年的日曆;cal -3 2014顯示2014年3月份的日曆;

三、halt關機命令;halt -p關閉系統時關閉電源,執行halt時默認會加上-p

四、reboot重啓系統

五、shutdown 關機命令,選項較多;shutdown -r重啓;shutdown -h關機;shutdown -c在執行關機或重啓命令時取消關機;

六、cd改變目錄;cd ;cd ~;cd ~wingkeung;cd .;cd ..;cd -在上次的目錄和當前目錄來回切換,cd在執行時有兩個環境變量$PWD和$OLDPWD,分別用於保存當前目錄和上次的目錄,因此cd -才能在來回切換。

七、file/mkdir/rm/ls

八、ls:

   -a,-A

   -l

       文件類型 文件權限 文件硬連接的個數(文件1個目錄2個) 文件的屬主 文件的屬組 文件的大小 文件最近一次被修改的時間 文件名

   -h 人性化

   -d 只顯示目錄自己

   -r 逆序

   -R 遞歸查詢

   -i 節點,索引號碼

九、mkdir:建立目錄;mkdir -p建立遞歸目錄;mkdir -v顯示建立目錄的過程;mkdir /tmp/{p,q}/{a,b}

十、rmdir:刪除空目錄;rmdir -p遞歸刪除目錄

十一、tree:展現目錄結構,好比tree /tmp

十二、rm:刪除文件及目錄;rm -r遞歸刪除;rm -f強制刪除

1三、cp:複製文件和目錄;

   cp -r遞歸複製目錄;

   cp -i複製時提醒,默認存在;

   cp -p複製時保留原有的權限、屬主和時間戳,通常只有管理員才能使用;

   cp -a保留全部原有屬性,至關於-drp選項

1四、mv:移動或重命名文件和目錄;

1五、touch:改變時間戳,文件有三個時間,最近一次的訪問時間;最近一次的修改時間(文件數據的改變);最近一次的改變時間(文件屬性的改變)

1六、stat:用於顯示文件的全部元數據(屬性)信息

1七、nano:最簡單的文本編輯器

1八、file:後跟文件,用於顯示用戶文件內容的類型

1九、cat:查看文本內容;cat -n顯示文本內容行號;cat -E顯示非打印字符,好比換行符;

20、tac:與cat查看的文本內容相倒,即逆序顯示文本內容

2一、more:分屏查看文本內容,文件尾部後直接退出

2二、less:分屏查看文本內容,可使用man中的翻屏查找功能

2三、head:默認只查看文本前10行內容;head -3查看前三行

2四、tail:默認只查看文本後10行內容;tail -3查看後三行;tail -f動態查看文件內容,對文件內容進行跟蹤

2五、cut:剪切文檔的某些字段;例如cut -d: -f1,3 /etc/passwd,-d指定分隔符-f指定所剪切的分段;-d' '以空格爲分隔符;

2六、tr:對字符進行替換或刪除;例如tr 'abc' 'ABC' < mytest.txt將小寫abc替換爲大寫ABC;tr -d 'a' < mytest.txt刪除文檔中的a;

2七、wc:文本統計命令;-l 行數;-w 單詞數;-c 字符數;例如wc -l /etc/passwd統計/etc/passwd的行數;

2八、sort:文本排序;sort /etc/fstab對/etc/fstab進行升序排列;sort -r /etc/fstab對其進行降序排序;-n按數值大小進行排序,默認按照字符進行排序;例如sort -n -t' ' -k3 /etc/passwd以空格分隔,以第三個字段進行排序;

2九、hash:命令緩存表,查找速度很是快;hash -d wc清除wc的緩存;hash -r清空全部命令緩存

30、history:!24執行命令歷史中的第24條;!!執行上一條命令;!-n執行倒數第n條命令;!echo執行倒數最近一次以echo開始的命令;按鍵盤Esc鬆開後按.、Alt+.或!$調用上一條命令的最後一個參數;export HISTCONTROL=ignorespace/ignoredups/ignoreboth;

   history -c清空歷史記錄;

   history -w保存緩存中的命令至歷史文件;

   history -d 16 3從第16條開始刪除3條歷史命令;

3一、通配符,glob,特殊字符,元字符,不表示字符的表面意義,而是能匹配符合特徵的字符串;

   *:任意長度的任意字符;

   ?任意單個字符;

   []匹配指定範圍內的任意單個字符,例如a[axy]b,a[a-zA-Z]b;

   [^]指定範圍以外的任意單個字符,例如[^a-z]=[^[:lower:]]

       [[:alpha:]]=[a-zA-Z],

       [[:digit:]]=[0-9],

       [[:lower:]]=[a-z],

       [[:upper:]]=[A-Z],

       [[:alnum:]]=[a-zA-Z0-9],

       [[:space:]]=空格,

       [[:punct:]]至關於等號;

3二、man 7 glob查看通配符的man說明

3三、echo:顯示字符;echo -n沒有換行符;echo -e "hello\tworld"讓轉義符生效,\t表示製表符;

3四、seq:

3五、uniq:除掉重複切連續的行,只保留一行相同內容(和sort -u相同)

3六、tee:既輸出到管道又保留在屏幕上;COMMAND | tee FILE | COMMAND 例如:ls /etc | tee /tmp/tee.out | tr 'A-Z' 'a-z'

 

vim文本編輯器

 

文本編輯器

   行編輯器:sed(流編輯器)

   全屏幕編輯器:nano,emacs,vi,vim

vim(vi):模式化編輯器

   編輯模式(命令模式):

   輸入模式:

   末行模式:

vim啓動:

   vim [option] FILE……   例如:vim /tmp/a.txt

   option:

       +# 打開時光標定位在第#行第一個字符

       + 打開時光標定位在最後一行第一個字符

vim退出:

   :q

   :q! 強制退出

   :wq 保存退出 等同於:x

   :w! 強制保存

 

模式轉換:

   編輯模式 --> 輸入模式

       i:當前光標所在字符前面插入

       a:當前光標所在字符後面插入

       o:當前光標所在行的下方新增空白行並輸入

       I:當前光標所在行的行首插入

       A:當前光標所在行的行尾插入

       O:當前光標所在行的上方新增空白行並輸入

   輸入模式 --> 編輯模式

       Esc

   編輯模式 --> 末行模式

       :

   末行模式 --> 編輯模式

       Esc

光標跳轉:

   h 左

   j 下

   k 上

   l 右

詞間跳轉:

   w 下個單詞的詞首

   e 跳轉至詞尾

   b 和e相反

行首、行尾:

   ^行首的第一個非空白字符

   0 絕對行首

   $ 絕對行尾

行間跳轉:

   #G 跳轉到#行 gg跳轉到第一行

   G 跳轉至文件尾部(最後一行)

   末行模式下跳轉:

       :# 跳轉到#行

翻屏操做:

   ctrl+f 向文件尾部跳一屏

   ctrl+b 和ctrl+f相反

   ctrl+d 向文件尾部跳半屏

   ctrl+u 和ctrl+d相反

刪除:

   x 刪除光標前的一個字符

   dd 刪除當前所在行

   #dd 刪除從光標所在行開始的#行內容

   d^ 刪除光標以前到行首

   d$ 刪除光標到行尾

複製:

   yy 複製當前行

   #yy 複製從光標所在行開始的#行

   y^ 複製光標以前到行首

   y$ 複製光標到行尾

粘貼:

   p 粘貼到光標所在位置以後

   P 粘貼到光標所在位置以前

可視化模式:(選定)

   v 按字符選取

   V 按行選取

撤銷編輯操做:

   u 撤銷上一次編輯操做

   #u 撤銷最近的#次操做

   ctrl+r 對最近一次的撤銷操做進行撤銷

   U 撤銷對當前行所作的全部編輯

查找:

   /搜索的詞 向後搜索

   ?搜索的詞  向前搜索

查找並替換:

   末行模式下使用s命令格式:

       :定界s/查找的內容/替換成的內容/gi

   定界

   % 全文查找

   n,m

   查找的內容

   支持正則表達式

   替換成的內容

   不支持正則表達式,但可以使用前向引用

   g 全局替換

   i 忽略大小寫

   & 用於引用查找到的整個字符串

   注意:在查找時碰見和分隔符相同的字符必須用轉義符進行轉義

和shell交互:

   末行模式下:

   !shell command例如::!ls /var/spool/mail

   將某些行進行另存爲,例如::n,m /tmp/a.txt

   水平拆分窗口:ctrl+w而後鬆開按s

   垂直拆分窗口:ctrl+w而後鬆開按v

   拆分窗口來回切換:ctrl+w而後鬆開按方向鍵

   關閉某個窗口:ctrl+w而後鬆開按q

   同時打開多個文件時,在末行模式下切換:

       :next 切換至後一個文件

       :prev 切換至前一個文件

       :first 切換至第一個文件

       :last 切換至最後一個文件

       :wall  保存全部

       :qall退出全部

       :q!qll 強制退出全部

       :e 新文件   打開新的文件

       :r 新文件讀入新文件

打開多個文件並拆分顯示:

   -o

   -O

定製vim的工做屬性:(末行模式下)

   :set nu 顯示行號

   :set nonu 關閉行號

   :set ai 自動縮進

   :set noai 關閉縮進

   :set 顯示幫助

   :set all顯示全部屬性

   :set ic 忽略大小寫

   :set noic 關閉ic

   :syntax on|off開啓關閉語法高亮顯示

   :set hlsearch 打開查找高亮

   :set nohlsearch關閉查找高亮

vim配置文件:

   全局 /etc/vimrc

   我的 ~/.vimrc(不存在,本身建立)

vimtotur:vim的練習題

用戶和組的建立及其權限:

 

whatis shadow

man 5 shadow

Redhat用戶密碼默認加密方式:單項加密

單向加密的特性是:

   定長輸出

   雪崩效應

   明文一直,結果一直

   不可逆

單向加密的類型:

   md5:message degist,128bit

   shal:secure hash algorithm,160bit

密碼設定策略:

   隨機密碼

   至少應該包含四類字符中的三種

   長度8位以上

   按期修改

 

用戶:

   /etc/passwd

用戶名:密碼佔位符:UID:GID:用戶finger信息(爲空):用戶的家目錄:用戶默認使用的shell

   /etc/shadow

用戶名:密碼(!!用戶禁用):密碼最近一次的修改時間:密碼最短使用期限:密碼最長使用期限:密碼過時前向用戶發警告的天數:用戶帳號的非活動期限:用戶帳號有限期限:保留

建立用戶:useradd [option]…… 用戶名

option:

   -u 指定UID

   -g GID爲用戶指定一個事先已經存在的組爲基本組

   -G GID爲用戶指定一個或多個已經存在的附加組

   -c "COMMENT註釋"

   -d 指定用戶的家目錄

   -s 指定用戶的shell(可用shell,通常要求是出如今/etc/shells中的shell)

   -e 指定用戶帳號的有效期

   -M 不給用戶建立家目錄

   -p 給用戶指定加密之後的密碼串(即密碼是加密後的密碼串,不能使明文密碼)

   -r 建立系統用戶,1-499

建立用戶是默認目錄的文件/etc/default/useradd

 

設定密碼:passwd [option] [用戶名]

option:

   -l 鎖定用戶

   -u 解鎖用戶

   --stdin 標準輸入,例如:echo "hello" | passwd --stdin wingkeung > /dev/null

查看用戶信息:

   id [option] 用戶名

   -g 基本組GID

   -G 用戶全部組的GID

   finger 用戶名

   who、w、whoami

修改用戶屬性:

usermod [用戶名]

option:

   -u

   -g

   -a -G

   -c

   -s

   -m -d

   -l

   -L 鎖定用戶

   -U 解鎖用戶

chage [option] [用戶名]

   chfn [用戶名],改用戶的finger(註釋)信息

   chsh [用戶名],改用戶的shell

刪除用戶:

userdel [option] 用戶名

option:

   -r 刪除用戶的家目錄

 

組:

   /etc/group

組名:組密碼佔位符:GID:以此組爲其額外組用戶的用戶列表::::::

   /etc/gshadow

建立組:groupadd [option]…… 組名

option:

   -g 指定GID

   -r 建立系統組,1-499

修改組:groupmod [option] 組名

刪除組:groupdel 組名

設定組密碼:gpasswd 組名

newgrp 組名,切換基本組

 

權限:

 

屬主 屬組 其餘

u    g    o

r-x rwx r-- 574

rwx:

---,000,0

--x,001,1

-w-,010,2

-wx,011,3

r--,100,4

r-x,101,5

rw-,110,6

rwx,111,7

 

更改文件權限:

chmod [option] perm FILE………

option:

   -R 遞歸權限

perm的指定方法:

例如:chmod 660 /tmp/a.txt

chmod u=rx /tmp/a.txt

chmod a=r /tmp/a.txt

 

更改文件屬主,屬組:

只有管理員纔有權限改變文件的屬主、屬組

chown [option] 屬主:屬組 FILE……

chgrp [option] 屬組 FILE……

用戶切換命令:su

   su 用戶名非登陸時切換

   su - 用戶名登陸時切換

   su -l 用戶名登陸時切換

   su 用戶名 -c ‘COMMAND’

sudo:

顯示信息:

echo:

   -n

   -e

   \n

   \t

   \033[3(1-7) 例如:echo -e "\033[3mabc\033[0m";echo -e "Time is \033[31m`date`\033[0m"

   echo -e "\033[1;5;31mWarning\033[0m,change the password"

printf:

 

附加權限:

set位權限:s,只對文件有意義,多用於給可執行的程序或腳本文件進行設置,例如paaawd

粘滯位權限:t,對目錄(公共目錄,例如/tmp)有意義,設置粘滯位權限後,即便用戶對該目錄有寫入權限,也不能刪除該目錄中其餘用戶的文件數據。

 

練習一:

 

一、建立一個帳戶jack,其ID爲2002,基本組爲hdpos(GID爲3003),附加組爲linux

二、建立一個用戶fedora,其全名爲Fedora Community,默認shell爲csh

三、修改jack的ID號爲4004,基本組爲linux,附加組爲hdpos和fedora

四、給fedora加密碼,並設定其密碼最短使用期限爲2天,最長爲50天

五、將jack的默認shell改成/bin/bash

 

練習2、

 

一、新建用戶jerry,而後複製/etc/skel目錄到/tmp,並重名爲jerry,要求爲/tmp/jerry目錄指定權限,要求以下:

(1)、屬主數組均爲jerry,包含內部的全部文件

(2)、/tmp/jerry及其內部的全部文件的屬組沒有任何權限,其餘用戶也沒有任何權限

(3)、將jerry的家目錄修改成/tmp/jerry,並經過登陸驗證

 

df、du、fdisk:Linux磁盤管理三板斧

 

df命令:用於檢查文件系統磁盤佔用狀況

df命令能夠獲取硬盤被佔用了多少空間,目前還剩下多少空間等信息,它也能夠顯示全部文件系統對i節點和磁盤塊的使用狀況。

選項:

 -a:顯示全部文件系統的磁盤使用狀況,包括0塊(block)的文件系統,如/proc文件系統。

 -k:以k字節爲單位顯示。

 -i:顯示i節點信息,而不是磁盤塊。

 -t:顯示各指定類型的文件系統的磁盤空間使用狀況。

 -x:列出不是某一指定類型文件系統的磁盤空間使用狀況(與t選項相反)。

 -T:顯示文件系統類型。

 -P:顯示時不自動換行。

 -h: 進行單位換算顯示。

舉例:

一、列出各文件系統的磁盤空間使用狀況

#df

Filesystem           1k-blocks      Used   Available Use% Mounted on

/dev/hda5               381139     332921     28540  93% /

/dev/hda1                46636      6871     37357  16% /boot

/dev/hda3             10041144   6632528   2898556  70% /home

none                    127372         0    127372   0% /dev/shm

/dev/hda2             27474876  24130460   1948772  93% /usr

/dev/hda6               256667    232729     10686  96% /var

二、列出各文件系統的i節點使用狀況

#df -ia

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/hda5              98392   23919   74473   25% /

none                       0       0       0    -  /proc

/dev/hda1              12048      38   12010    1% /boot

none                       0       0       0    -  /dev/pts

/dev/hda3            1275456  355008  920448   28% /home

none                   31843       1   31842    1% /dev/shm

/dev/hda2            3489792  133637 3356155    4% /usr

/dev/hda6              66264    9876   56388   15% /var

三、列出文件系統的類型

#df -T

Filesystem    Type   1k-blocks      Used Available Use% Mounted on

/dev/hda5     ext3      381139    332921     28540  93% /

/dev/hda1     ext3       46636      6871     37357  16% /boot

/dev/hda3     ext3    10041144   6632528   2898556  70% /home

none         tmpfs      127372         0    127372   0% /dev/shm

/dev/hda2     ext3    27474876  24130460   1948772  93% /usr

/dev/hda6     ext3      256667    232729     10686  96% /var2

 

du命令:檢查磁盤空間佔用狀況

du的英文原義爲「disk usage」,含義爲顯示磁盤空間的使用狀況,統計目錄(或文件)所佔磁盤空間的大小。該命令的功能是逐級進入指定目錄的每個子目錄並顯示該目錄佔用文件系統數據塊(1024字節)的狀況。若沒有給出指定目錄,則對當前目錄進行統計。

選項:

   -s:對每一個Names參數只給出佔用的數據塊總數。

   -a:遞歸地顯示指定目錄中各文件及子目錄中各文件佔用的數據塊數。若既不指定-s,也不指定-a,則只顯示Names中的每個目錄及其中的各子目錄所佔的磁盤塊數。

   -b:以字節爲單位列出磁盤空間使用狀況(系統默認以k字節爲單位)。

   -k:以1024字節爲單位列出磁盤空間使用狀況。

   -c:最後再加上一個總計(系統默認設置)。

   -l:計算全部的文件大小,對硬連接文件,則計算屢次。

   -x:跳過在不一樣文件系統上的目錄不予統計。

   -h: 進行單位換算顯示。

舉例:

一、查看/mnt目錄佔用磁盤空間的狀況

#du –abk /mnt

1       /mnt/cdrom

1       /mnt/floppy

3       /mnt

二、列出各目錄所佔的磁盤空間,但不詳細列出每一個文件所佔的空間

#du

3684    ./log

84      ./libnids-1.17/doc

720     ./libnids-1.17/src

32      ./libnids-1.17/samples

1064    ./libnids-1.17

4944    .

輸出清單中的第1列是以塊爲單位計的磁盤空間容量,第2列列出目錄中使用這些空間的目錄名稱。

三、列出全部文件和目錄所佔的空間(使用a選項),並以字節爲單位(使用b選項)來計算大小

#du –ab /root/mail

6144    mail/sent-mail

1024    mail/saved-messages

8192    mail

四、這多是一個很長的清單,有時只須要一個總數。這時可在du命令中加-s選項來取得總數

#du –s /mnt

3       /mnt

 

fdisk命令:用於磁盤分區

 

下面給出使用Fdisk命令進行磁盤分區的操做幫助

 

#fdisk /dev/had    //使用/dev/had做爲默認的分區設備

Command (m for help): m  //選擇命令選項,用戶經過提示鍵入「m」,能夠顯示Fdisk命令各個參數的說明

Command action

  a   toggle a bootable flag

  b   edit bsd disklabel

  c   toggle the dos compatibility flag

  d   delete a partition

  l   list known partition types

  m   print this menu

  n   add a new partition

  o   create a new empty DOS partition table

  p   print the partition table

  q   quit without saving changes

  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)

 

 

 

正則表達式及linux文本處理三劍客(grep,sed,awk):

 

 

 

 

 

正則表達式(RE):

 

 

 

Basic RE(基本正則表達式):

 

 

 

.:匹配任意單個字符

 

[]:匹配指定範圍內的任意單個字符

 

[^]:匹配指定範圍外的任意單個字符

 

*:匹配其前的字符0,1或屢次(次數匹配,貪婪模式下),例如:ab*c,abbc,ac,abbbc

 

?:匹配其前的字符0或1次(次數匹配),例如:ab?c

 

.*:匹配任意長度的任意字符

 

\{m,n\}:匹配其前m到n次(次數匹配),例如:a[a-z]\{0,2\}c

 

   \{m,\}:至少m次

 

   \{0,n\}:最多n次

 

   \{m\}:精確匹配m次

 

錨定符:

 

單詞錨定

 

   \<:錨定詞首,例如\<r..t,root

 

   \>:錨定詞尾,例如root\>

 

   ^:行首錨定,例如^root,^[[:space:]]*root

 

   $:行尾錨定,例如root$,root[[:punct:]]\{0,1\}$

 

分組:

 

例如xa*b*y,xay,xby,xy,xaby

 

\(\),x\(ab\)*y

 

前向引用,\1,\2,\3

 

例如:grep.txt

 

he love his lover

 

she like her liker

 

he love his liker

 

she like her lover

 

grep --color=auto 'l..e.*l..er' grep.txt

 

grep --color=auto '\(l..e\).*\1(數字1)r' grep.txt

 

 

 

Extended RE(擴展正則表達式)

 

 

 

元字符

 

   .

 

   []

 

   [^]

 

   個數

 

   *

 

   \?

 

   + 至少一次

 

   {m,n}

 

錨定符

 

   同基本正則表達式相同

 

或者:

 

|: 例如:a|b

 

分組:

 

()

 

 

 

linux文本處理三劍客:grep,sed,awk

 

 

 

grep命令:

 

 

 

Global RE(Regular Expression) Printing,文本過濾工具,可以實現根據指定的模式(pattern)逐行搜索文件內容,並將匹配到的行顯示出來。

 

 

 

格式:

 

grep [option]……'PATTERN' FILE

 

模式:是由正則表達式的元字符,其它字符組成的匹配條件

 

選項:

 

   -v 取反

 

   --color=auto 顏色自動

 

   -i 不區分字符大小寫

 

   -o 只顯示匹配到的串,例如:ifconfig | grep -o 'inet addr:[[:space:]]*' | cut -d: -f2 | grep -v '127.0.0.1'

 

   -A 2 匹配行向後多2行

 

   -B 2 匹配行向前多2行

 

   -C 2 匹配行先後多2行

 

   -E 把元字符解釋到擴展正則表達式

 

egrep 等同於 grep -E

 

舉例:ifconfig | egrep -o '\<[1-9] | [1-9][0-9]\>'

 

fgrep 快速grep,不解析正則表達式,直接搜索文本

 

 

 

sed命令:

 

 

 

流式編輯器,行編輯器,不會更改源文件

 

 

 

格式:sed [option] 'script' input_file

 

sed -f 'script_file' input_file

 

 

 

命令:

 

   d:刪除 例如:sed '1d' /etc/fstab 刪除/etc/fstab的第一行

 

   p:打印、顯示 例如:sed '1,3p' /etc/fstab 打印/etc/fstab的1到3行

 

   a:追加,附加 例如:sed '/^\/a \# this is a / line' /etc/fstab

 

   i:插入,和a相反,即在行前插入 例如:sed '/^\/i \# this is a /line. \n# hello world' /etc/fstab

 

   c:和a、i相似,只是替換

 

   r:/path/to/somefile

 

   w:/path/to/somefile

 

   s/PATTERN/string/,s@@@,s###

 

   g:全局修改

 

   i:不區分字符大小寫

 

前向引用:

 

   &

 

   \1,\2

 

   =:用於顯示指定行的行號 例如:sed '/^\//=' /etc/fstab

 

   y/source/dest/:逐個字符對應替換,相似於tr 'a-z' 'A-Z'

 

 

 

選項:

 

   -n:靜默模式 例如:sed  -n '1,3p' /etc/fstab 只顯示fstab的1到3行

 

   -i:直接修改源文件

 

   -e:一次性處理屢次 例如:sed -e 's/^[[:space:]]\{1,\}\([^[:space:]]\{1,\}\)/\1/' -e 's/default/DEFAULT/' /boot/grup/grub.conf

 

   -f /path/to/script_file 例如:sed -f sedscript /boot/grup/grup.conf (sedscript文件中存放-e後面的那兩個編輯命令)

 

   -r:支持擴展正則表達式

 

 

 

awk命令:

 

 

 

awk:是一種能夠處理數據、產生格式化報表的語言,功能至關強大。awk的工做方式是讀取數據文件,將每一行數據視爲一條記錄,每筆記錄以字段分隔符分紅若干字段,而後輸出各個字段的值。

 

 

 

格式: awk [options' 'script' FILE1,FILE2……

 

awk [options] 'PATTERN {ACTION}' FILE1,FILE2……

 

舉例:awk '{print $1}' a.txt

 

模式:

 

   一、Regexp:正則表達式,格式爲/regular expression/

 

   二、expresssion:表達式,其值非0或爲非空字符時知足條件,如:$1 ~ /foo或$1 == "magedu" ,用運算符~{匹配}和!~{不匹配}

 

   三、Ranges:指定的匹配範圍,格式爲pat1,pat2

 

   四、BEGIN/END:特殊模式,僅在awk命令執行前運行一次貨結束前運行一次

 

   五、Empty{空模式}:匹配任意輸入行

 

常見的ACTION:

 

   一、Expressions

 

   二、control statements

 

   三、compound statements

 

   四、Input statements

 

   五、Output statements

 

1、print:

 

 

 

選項:

 

   -F 字段分隔符  例如:awk -F:'{print $1}' /etc/passwd

 

   -v 聲明一個變量 例如:awk -v FS=: '{print $NF}' /etc/passwd

 

內置變量:

 

   NF 顯示每行的最後一個字段 例如:awk '{print $NF}' /etc/passwd

 

   FS 指定讀入時的分隔符 例如: awk -v FS=: '{print $NF}' /etc/passwd

 

   OFS 指定輸出時的分隔符,則只能分隔原本以空白字符分隔的文本 例如:awk -v OFS=: '{print $1,$2}' /tmp/a.txt

 

 

 

2、printf

 

 

 

格式:printf format item1,item2,……

 

要點:

 

   一、其與print命令的最大不一樣時,printf須要指定format

 

   二、format用於指定後面的每一個item的輸出格式

 

   三、printf語句不會自動打印換行符\n

 

format格式的指示符是以%開頭,後跟一個字符,以下

 

   %c 顯示字符的ASCII碼

 

   %d,%i 十進制整數

 

   %e,%E 科學計數法表示數值

 

   %f 顯示浮點數

 

   %g,%G 以科學計數法的格式或浮點數的格式顯示數值

 

   %s 顯示字符串

 

   %u 無符號整數

 

   %% 顯示%自身

 

修飾符:

 

   N 顯示寬度(數字)

 

   - 左對齊(默認右對齊)

 

   + 顯示數值符號

 

舉例:awk -F: '{printf "%-10s%s\n",$1,$2}' /etc/passwd

 

awk -F: '{printf "%-15S %i\n,$1,$3" > "/dev/stderr"} /etc/passwd

 

awk -F: '/bash/{print $1}' /etc/passwd

 

awk -F: '$3>=500{print $1,$3}' /etc/passwd

 

awk -F: 'BEGIN{print "Username      UID"}{printf "%-15s%s\n",$1,$3}END{print "Over"}' /etc/passwd

 

 

 

練習一:

 

一、顯示/proc/meminfo文件中以不區分大小的a開頭的行

 

二、顯示/etc/passwd中以nologin結尾的行

 

三、顯示/etc/inittab中以#開頭,且後面限一個或多個空白字符,然後又跟了任意非空白字符的行

 

四、顯示/etc/inittab中包含了:一個數字:即兩個 冒號中間一個數字的行

 

五、顯示/boot/grub/grub.conf文件中以一個或多個空白字符開頭的行

 

六、顯示/etc/inittab文件中以一個數字開頭並以一個與開頭數字相同的數字結尾的行

 

練習二:

 

一、找出某文件中的,1位數,或2位數:/proc/cupinfo,/proc/meminfo

 

二、找出ifconfig命令結果中的1-255之間的整數

 

三、查找當前系統上名字爲student(必須出如今行首)的用戶的帳號的相關信息,文件爲/etc/passwd

 

練習三:

 

分析/etc/inittab文件中以下文本中前兩行的特徵(每一行中出現的數字必須相同),請寫出能夠精確找出相似兩行的模式

 

11:1:wait:/etc/rc.d/rc 1

 

13:3:wait:/etc/rc.d/rc 3

 

11:1:wait:/etc/rc.d/rc 3

13:1:wait:/etc/rc.d/rc 3

相關文章
相關標籤/搜索