天天看點

馬哥Linux base學習筆記

 介紹課程: 中級: 初級:系統基礎 中級:系統管理、服務安全及服務管理、shell腳本 進階: MySQL資料庫: Cache & storgae 叢集: Cluster lb: 4layer 7layer ha: 分布式: zockeeper 分布式檔案系統 虛拟化技術: xen kvm OpenStack:IaaS雲 運維工具: ansible puppet(ruby)、saltstack(python) 監控工具: zabbix 大資料處理: Hadoop spark,strom elk:elasticsearch,logstash、kibana docker: Python: 一萬小時定律: 4-5年 認證: Redhat: RHCSA RHCE RHCA 教育訓練: 加速知識擷取過程 有人監督、環境 部落格: 5w1h: what、why、when、where、who how VMware Workstation的使用: 現代計算機裝置的組成部分: 運算器、控制器、存儲器、輸入裝置、輸出裝置 CPU bus:總線 memory:編址儲存設備 read ahead IO:與外部部件互動 磁盤: 網卡: 虛拟機:虛拟計算機 CPU:運算器、控制器 CPU指令:指令集 特權指令:OS運作特權指令 普通指令:應用程式運作 程式員: OS:operating system 軟體程式 通用目的 硬體驅動 程序管理 記憶體管理 網絡管理 安全管理 system call syscall:系統調用 程式設計層次: 硬體規格:hardware specification 系統調用: 庫調用::library call UI: GUI:graphic user interface CLI:command line interface ABI:application binary interface API:application programing interface CPU架構類型: x86 x64 arm m6800,m68k power powerpc ultrasparc alpha 安騰 Windows Linux: Linus --> Linux Unix: System (bell lib) AIX (IBM) Solaris (SUN) HP-UX (HP) BSD:(BSRG)Berkeley system distribution NetBSD OpenBSD FreeBSD MIT: Richard Stallman GNU:GNU is Not Unix; GPL:General Public License 《奇點臨近》 計算機的基礎知識: CPU、memory、I/O 程式運作模式: 使用者空間:user space , us 核心空間:system space POS: Protable operating system POSIX API:程式設計接口 運作程式格式: Windows:EXE,dll(dynamic link library) Linux:ELF,so(shared object) 程式:指令+資料 指令:隻讀 資料:讀寫 程式:算法+資料結構 庫調用,系統調用:允許被調用的程式 malloc(),free() 程式設計語言: 彙編語言:微碼程式設計 系統中某些與硬體相關的特有代碼、驅動程式開發 進階語言C,C++: 系統級應用、驅動程式 進階語言Java,Python,PHP 應用程式 unix-like Linux發行版: Slackware: suse openSUSE Debian: Ubuntu mint Redhat: RHEL:Redhat enterprise linux 每18個月發行一個新版本 CentOS:相容rhel的格式 Fedora:6個月發行一個新版本 ArchLinux Gentoo LFS:Linux From scratch Android:kernel+busybox+java虛拟機 GNU:GPLv2,GPLv3,LGPL(lesser) Apache:apache BSD:bsd 問題1:CentOS和Linux是什麼關系?CentOS和RHEL是什麼關系? 問題2:各種開源協定的具體細節? GPL、LGPL、Apache、BSD 程式包管理器: rpm: RHEL、Fedora、S.U.S.E,CentOS dpt: Debian、Ubuntu 自由軟體: 自由使用;自由學習和修改;自由分發;自由建立衍生版; Linux的哲學思想: 1、一切皆檔案 把幾乎所有資源,包括硬體裝置都組織為檔案格式 2、由衆多單一目的的小程式組成;一個程式隻實作一個功能,而且要做好;組合小程式完成複雜任務; 3、盡量避免跟使用者互動; 目标:實作腳本程式設計,以自動完成某些功能; 4、使用純文字檔案儲存配置資訊; 目标:一款合用的文本編輯器即能完成系統配置工作 如何擷取CentOS的發行版: http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com 終端: 使用者與主機互動 實體終端:直接接入本機的顯示器和鍵盤裝置:console 虛拟終端:附加在實體終端之上的以軟體方式虛拟實作的終端,CentOS 6預設啟動6個虛拟終端 ctrl+alt+f#:[1,6] 圖形終端:附加在實體終端之上的以軟體方式虛拟實作的終端,但額外會提供桌面環境 裝置檔案路徑:/dev/pts/#[0,] 模拟終端: 圖形界面下打開的指令行接口,基于ssh或telnet協定等遠端打開的界面 檢視目前的終端裝置:tty 互動式接口:啟動終端後,在終端裝置附加一個互動式應用程式 GUI: X protocol,window manager,desktop desktop: GNOME (C,gtk) KDE (C++,qt) XFCE (輕量級桌面) CLI: shell程式: sh (bourn) csh tcsh ksh (korn) bash (bourn again shell),GPL zsh 顯示目前使用的shell: #echo $SHELL 顯示目前系統使用的所有shell #cat /etc/shells 指令提示符:prompt PS1 # 管理者 $ 普通使用者 指令: 輸入指令,回車: 提醒shell程式找到鍵入指令所對應的可執行程式或代碼,并由其分析後送出給核心配置設定資源将其運作起來;表現為一個或多個程序 在shell可執行的指令有兩類: 内建指令:由shell自帶的,而且通過某指令形式提供 外部指令:在目前系統的某檔案系統路徑下有對應的可執行程式檔案 which,whereis 差別内部或外部指令: type COMMAND 運作指令: 指令格式: COMMAND [OPTIONS...] [ARGUMENTS....] 選項:用于啟用或關閉某個或某些功能 短選項: -c,例如-h -l 多個段選項可以連續使用,例如-lh 長選項:--word,例如 --long,--human-readable,長選項一般不能合并 參數:指令的作用對象 向指令提供資料: 注意: 1.多選項,以及多參數和指令之間都應該使用空白字元分隔 2.取消指令執行,Ctrl+c 檔案系統: 檔案有兩類資料: 中繼資料:metadata 資料:data 1、檔案名嚴格區分大小寫 2、檔案名可使用除/以外的任意字元,不建議使用特殊字元: /:根目錄,路徑分隔符 3、檔案名長度最長不能超過255個字元 4、所有以.開始的檔案都是隐藏檔案 路徑: 絕對路徑:從根目錄起始的路徑 相對路徑:目前位置起始的路徑 目前位置的表示方式: ./ 省略上述符号 ..:上級目錄 目前目錄: current directory,也稱作working directory pwd:printing working directory LSB:Linux standard base 指令總結:ls、cd、type、tty、cat、which、whereis、pwd、echo 指令: 1.檔案系統相關 目錄管理 檔案管理 檔案檢視 檔案程式設計 2.系統管理相關: Linux指令幫助的擷取 格式:COMMAND [OPTIONS...] [ARGUMENTS....] 外部指令:都有一個可執行程式,位于檔案系統某目錄下: which,whereis shell程式搜尋可執行程式檔案的路徑定義在PATH環境變量中: echo $PATH 自左至右 内部指令: help COMMAND 外部指令: 1、COMMAND --help   COMMAND -h 2、使用手冊(manual) man COMMAND 3、資訊頁 info COMMAND 4、程式自身的幫助文檔 README INSTALL ChangeLog 5、程式官方文檔 官方站點:documentation 6、發行版的官方文檔 7、Google 内部指令幫助: help COMMAND hash指令: shell搜尋到的外部指令的路徑結果會緩存至kv(key-value)存儲中: history指令: 管理指令曆史: 登入shell時,會讀取指令曆史檔案中記錄下的指令: ~/.bash_history 登入shell後新執行的指令隻會記錄在緩存中:這些指令會在使用者退出時追加至指令曆史檔案中 history: -a:追加本次會話新執行的指令曆史清單至曆史檔案中 -d:删除曆史中指定的指令 -c:清空指令曆史 快捷操作: !#:調用曆史中第#條指令 !string:調用曆史中最近一個以string開始的指令 !!:上一條指令 外部指令幫助擷取: man COMMAND 手冊頁: /usr/share/man man1..man8  whatis read:檢視read指令的man分類 man1:使用者指令 man2:系統調用 man3:C庫調用 man4:裝置及特殊檔案 man5:配置檔案格式 man6:遊戲 man7:雜項 man8:管理類的指令  注意:有些關鍵在不止一個章節中存在幫助手冊: 要檢視指定章節中的手冊:man # COMMAND man指令的配置檔案:/etc/man.config MANPATH /PATH/TO/SOMEWHERE:指明新的手冊檔案搜尋位置 #man -M /PATH/TO/SOMEWHERE COMMAND : 到指定位置下搜尋COMMAND指令的手冊頁并顯示之 幫助手冊中的段落說明: NAME SYNOPSIS DESCRIPTION OPTIONS EXAMPLES AUTHOR REPORTING BUGS SEE ALSO SYNOPSIS: []:可選内容 <>:必選内容 a|b:二選一 ...:同一内容可出現多次 {}:輔助性定界符 man指令的操作方法: space,^V,^f,^F :向檔案尾翻屏操作 b,^B:向檔案首部翻屏 d,^D:向檔案尾翻半屏 u,^U:向檔案首翻半屏 RETURN or ^N or e or ^E or j or ^J:向檔案尾部翻一行 y or ^Y or ^P or k or ^K:向檔案首部翻一行 q:退出 #:跳轉至第#行 1G:回到檔案首部 G:翻至檔案尾部 文本搜尋: /KEYWORD 以KEYWAORD指定的字元串為關鍵字,從目前位置向檔案尾部搜尋,不區分字元大小寫 n:下一個 N:上一個 ?KEYWORD 向首部搜尋 n:跟搜尋指令同方向下一個 N:跟搜尋指令同方向上一個 info: info COMMAND 程式自身的幫助文檔: /usr/share/doc/COMMAND-VERSION 程式官方文檔: 發行版官方文檔: http://www.redhat.com/docs Google https://www.slideshare.net/ 基礎指令: date: date [OPTION] [FORMAT]:顯示 date [MMDDhhmm[CC]YY[.ss]]:設定 MM:月份 DD:幾号 hh:小時 mm:分鐘 YY:兩位年份 CCYY:四位年份 .ss:秒 Linux的兩種時鐘: 系統時鐘:由Linux核心通過CPU的工作頻率進行的計時 硬體時鐘: hwclock:顯示硬體時鐘 -s ,--hctosys -w ,--systohc cal:月曆 目錄相關的指令: 目前目錄或工作目錄 主目錄:家目錄 HOME root:/root 普通使用者:/home/USERNAME /home/tom ~:使用者的主目錄 cd: cd 或 cd ~:回目前使用者的主目錄 cd ~USERNAME:切換至指定使用者的主目錄 cd -:在上一個目錄和目前目錄來回切換 . .. 相關的環境變量: PWD:儲存了目前目錄路徑 OLDPWD:上一次所在目錄路徑 pwd:顯示目前目錄 ls:list 顯示指定路徑下的檔案清單 ls [OPTION]... [DIR]... -a,--all:顯示所有檔案,包括隐藏檔案 -l:長格式 -rw-r--r-- 1 root root 44800 Aug 14 14.32 install.log -rw-r--r--: 最左側的第一位:檔案類型 -,d,l,b,c,p,s 後面的9位:通路權限perm 數字:檔案被硬連結的次數 左root:檔案所有者 右root:檔案的group 44800:檔案的size Aug 14 14:32:檔案的最近一次被修改的時間 install.log:檔案名 -h,--human-readable:機關換算 -d:顯示目錄自身的相關屬性,通常要與-l一起使用 -r:--reverse:逆序顯示 -R,--recursive:遞歸顯示 stat /PATH/TO/SOMEFILE:擷取指定檔案的中繼資料 檔案檢視指令:cat  tac cat [OPTION] [FILE] -E:顯示行結束符$ -n:對顯示出的每一行進行編号 檔案内容類型檢視指令:file file /PATH/TO/SOMEWHERE 回顯指令:echo -n:禁止自動添加換行符号 -e:允許使用轉義符 \n:換行 \t:制表符 echo "$VAR_NAME":變量會替換,雙引号表弱引用 echo "$VAR_NAME":變量不會替換,強引用 which:顯示指令對應的程式檔案路徑 which [OPTION] COMMAND --skip-alias:禁止顯示别名 whatis: 使用mkwhatis指令可将目前系統上所有幫助手及與之對應的關鍵字建立成一個資料庫: 系統管理類指令: 關機: halt,poweroff,shutdown,init 0 重新開機: reboot,shutdown,init 6 跟使用者登入相關: who,whoami,w Linux的檔案系統: 根檔案系統(rootfs): root filesystem LSB,FHS:(FileSystem Heirache Standard) /ect,/usr,/var,/root,/home,/dev /boot:引導檔案存放目錄,核心檔案(vmlinuz)、引導加載器(bootloader,grub)都存放于此目錄 /bin:供所有使用者使用的基本指令:不能關聯至獨立分區,OS啟動即會用到的程式; /sbin:管理類的基本指令;不能關聯至獨立分區,OS啟動即會用到的程式; /lib:基本共享庫檔案,以及核心子產品檔案(/lib/modules); /lib64:專用于x86_64系統上的輔助共享庫檔案存放位置; /etc:配置檔案目錄(純文字配置檔案) /home/USERNAME:普通使用者家目錄 /root:管理者家目錄 /media:便攜式移動裝置挂載點 cdrom usb /mnt:臨時檔案系統挂載點 /dev:裝置檔案及特殊檔案存放位置 b:block device,随機通路 c:character device,線性通路 /opt:第三方應用程式的安裝位置; /srv:系統上運作的服務用到的資料 /tmp:臨時檔案存儲位置 /usr:universal shared,read-only data: bin:保證系統擁有完整功能而提供的應用程式 sbin: lib: lib64: include:C程式的頭檔案(header files): share:結構化獨立的資料,例如doc,man等 local:第三方應用程式的安裝位置 bin,sbin,lib,lib64,etc,share /var:variable data files cache:緩存資料目錄 lib:應用程式狀态資訊資料 local:專用于為/usr/local下的應用程式存儲可變資料 lock:鎖檔案 log:日志目錄及檔案 opt:專用于為/opt下的應用程式存儲可變資料 run:運作中的程序相關的資料,通常用于存儲程序的pid檔案 spool:應用程式資料池 tmp:儲存系統兩次重新開機之間産生的臨時資料 /proc:用于輸出核心與程序資訊相關的虛拟檔案系統 /sys:用于資料目前系統上硬體裝置相關資訊的虛拟檔案系統 /selinux:security enhanced Linux,SELinux相關的安全政策等資訊的存儲位置; Linux上的應用程式的組成部分: 二進制程式:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin 庫檔案:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64 配置檔案:/etc,/ect/DIRDECTRY,/usr/local/etc 幫助檔案:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc Linux下的檔案類型: -(f):普通檔案 d:目錄檔案 b:塊裝置 c:字元裝置 l:符号連結檔案 p:管道檔案 s:套接字檔案,socket 系統管理類指令: 關機: halt,poweroff,shutdown,init 0 重新開機: reboot,shutdown,init 6 跟使用者登入相關: who,whoami,w 關機或重新開機: halt,poweroff reboot -f:強制,不調用shutdown -p:切斷電源 shutdown: shutdown [OPTION] TIME [MESSAGE] -r: reboot -h: halt -c: cancel TIME: now:立刻 +m:相對時間表示法,從指令送出開始多久後,例如+3; hh:mm:絕對時間表示,指明具體時間; 使用者登入資訊檢視: whoami:顯示目前登入有效使用者 who:系統目前所有的登入會話 w:系統目前所有的登入會話及所做的操作 bash的基礎特性: 1.指令曆史 history 環境變量: HISTSIZE:指令曆史記錄的條數 HISTFILE:~/.bash_history HISTFILESIZE:指令曆史檔案記錄曆史的條數 history -d OFFSET -c history #:顯示曆史中最近的#條指令 -a:手動追加目前會話緩沖區的指令曆史至曆史檔案中 調用曆史中的指令: !#:重複執行第#條指令 !!:上一條 !string:最近一個以指定字元串開頭的指令 調用上一條指令的最後一個參數: !$ ESC,. ALT+. 控制指令曆史的記錄方式: 環境變量:HISTCONTROL ignoredups:忽略重複的指令,連續且相同為"重複" ignorespace:忽略所有以空白開頭的指令 ignoreboth:ignoredups,ignorespace 修改環境變量值得方式:export 變量名="值" 變量指派:把指派符号後面的資料存儲于變量名指向記憶體空間 2.指令補全: bash執行指令: 内部指令: 外部指令:bash根據PATH環境變量定義的路徑,自左而右在每個路徑搜尋以給定指令名命名的檔案,第一次找到即為要執行的指令 直接補全:tab,使用者給定的字元串隻有一條唯一對應的指令: 以使用者給定的字元串為開頭對應的指令不唯一,再次tab會給出清單 3.路徑補全: 把使用者給出的字元串當做路徑擡頭,并在其指定上級目錄下搜尋以指定的字元串開頭的檔案名 如果唯一:直接補全 否則:兩次tab,給出清單 4.指令行展開: ~:展開為使用者的主目錄 ~USERNAME:展開為指定使用者主目錄 {}:可承載一個以逗号分隔的清單,并将其展開為多個路徑 /tmp/{a,b} = /tmp/a,/tpm/b  5. 指令的執行結果狀态 成功 失敗 bash使用特殊變量$?儲存最近一條指令的執行狀态結果 0:成功 1-255:失敗 程式執行有兩類結果: 程式的傳回值 程式的執行狀态結果 目錄管理類指令: cd、pwd、ls mkdir,rmdir mkdir [options] /path/to/somewhere -p:存在于不報錯,可自動建立所需的各目錄 -v:顯示建立詳細資訊 -m MODE:建立目錄時直接指定權限 tree: -d:隻顯示目錄 -L level:指定顯示的層級數 -p pattern:至顯示由指定pattern比對到的路徑 rmdir:删除目錄 rmdir [options]  DIRECTORY -v:顯示過程 練習: 1.如何建立/tmp/x/y1 /tmp/x/y2 /tmp/x/y1/a /tmp/x/y1/b /tmp/x/y2/b /tmp/x/y2/b mkdir /tmp/x/{y1,y2}/{a,b} 2.如何建立x_m,y_m,x_n,y_n mkdir {x,y}_{m,n} 3.如何建立/tmp/bin /tmp/sbin /tmp/usr /tmp/usr/bin /tmp/usr/sbin mkdir /tmp/{bin,sbin,usr/{bin,sbin}} 文本檔案檢視類指令: cat,tac more,less,tail,head more more [OPTION] FILE... -d:顯示翻頁及退出提示 less less [option] FILE... head head [option] [file] -c #:指定擷取前#位元組 -n #:指定擷取前#行 -#:指定擷取前#行 tail tail [option] [file] -c #:指定擷取後#位元組 -n #:指定擷取後#行 -#:指定擷取後#行 -f:跟蹤顯示檔案新追加的内容 檔案的時間戳管理工具: touch 檔案:metadata,data 檢視檔案狀态:stat 三個時間戳: access time:通路時間,簡寫為atime,讀取檔案内容 modify time:修改時間,mtime,改變檔案内容(資料) change time:改變時間,ctime,中繼資料發生改變 touch指令: touch [OPTION]... FILE... -a:only atime -m:only mtime -t STAMP: [[CC]YY]MMDDhhmm[.ss] -c:如果檔案不存在,則不建立 回顧: 檔案系統,bash的基礎特性,目錄管理及檔案檢視 檔案系統 boot,bin,sbin,lib,lib64,dev,home,root,mnt,media,etc,proc,sys bash的基礎特性: 指令補全 路徑補全 指令曆史 指令行展開 ~,{} 指令的狀态結果 成功:0 失敗:1-255 目錄管理:mkdir,rmdir 檔案檢視:more,less,tail,head 時間戳管理:touch -a -m -t -c 檔案管理: cp,mv,rm cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... cp SRC DEST SRC是檔案 如果目标不存在:建立DEST,并将SRC中内容填充至DEST中 如果目錄存在: 如果DEST是檔案:将SRC中的内容覆寫至DEST中 建議為cp指令使用-i選項 如果DEST是目錄:在DEST下建立與源檔案同名的檔案,并将SRC中内容填充至新檔案中 cp SRC... DEST SRC...:多個檔案 DEST必須存在,且為目錄,其他情形均會出錯 cp SRC DEST SRC是目錄: 使用專用選擇:-r 如果DEST不存在:則建立指定目錄,複制SRC目錄中所有檔案至DEST中 如果DEST存在: 如果DEST是檔案:報錯 如果DEST是目錄: 建立目标目錄 常用選項: -i:互動式 -r,-R:遞歸複制目錄及内部的所有内容 -a:歸檔複制,相當于-dR --preserv=all -d,--mp-dereference --preserv-links --preserv=[ATTR_LIST] mode:權限 ownership:屬主屬組 timestamp links xattr context all -p:--preserve=mode,ownership,timestamp保留權限、屬主屬組、時間戳 -v:--verbose mv:move,移動檔案 mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE... 常用選項: -i:互動式 -f:強制 rm:remove 删除 rm [OPTION]... FILE... 常用選項: -i:互動式 -f:強制删除 -r:遞歸 rm -rf 文本編輯器:nano 全屏編輯器 bash的基礎特性2: 1.指令别名(alias) 通過alias指令實作: 1.alias 顯示目前shell程序所有可用的指令别名 2.alias NAME="VALUE" 定義别名NAME,其相當于執行指令VALUE 注意:在指令行中定義的别名,僅對目前shell程序有效,如果想永久有效,要定義在配置檔案中 僅對目前使用者:~/.bashrc 對所有使用者有效:/etc/bashrc 注意:編輯配置給出的新配置不會立即生效 bash程序重新讀取配置檔案: source /path/to/config_file . /path/to/config_file 撤銷别名:unalias unalias [-a] name [name ...] 注意:如果别名同原指令的名菜,則如果要執行圓明路,可使用"\COMMAND" 2.glob (globbing) bash中用于檔案名"通配" 通配符:*,?,[] 1.* 任意長度的任意字元 a*b 2.? 任意單個字元 3.[] 比對指定範圍内單個字元 [0-9] [a-z]:不區分大小寫 [A-Z]隻能大寫 4.[^] 比對指定範圍外的任意字元 [^0-9a-z] 專用字元集合: [:digit:]:任意數字,相當于0-9 [:lower:]:任意小寫字母 [:upper:]:任意大寫字母 [:alpha:]:任意大小寫字母 [:alnum:]:任意數字或字母 [:space:]  [:punct:]:标點符号 3.bash的快捷鍵 ctrl+l:清屏,相當于clear ctrl+a:光标跳至指令首部 ctrl+e:跳轉至指令結尾 ctrl+c:取消指令執行 ctrl+u:删除指令行首至光标所在處的所有内容 ctrl+k:删除光标所在處至指令行尾部的所有内容 4.bash的I/O重定向及管道: 程式:指令+資料 讀入資料:input 輸出資料:output 打開的檔案都有一個fd:file descriptor(檔案描述符) 标準輸入:keyboard,0 标準輸出:monitor,1 标準錯誤輸出:monitor,2 I/O重定向:改變标準位置 輸出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS >:覆寫重定向,目标檔案中的内容會被清除 >>:追加重定向,新内容會追加至目标檔案尾部 set -C:禁止将内容覆寫輸出至已有檔案中: 強制覆寫:>| set +C:允許 2>:覆寫重定向錯誤輸出資料流 2>>:追加重定向錯誤輸出資料流 标準輸出和錯誤輸出各種定向至不同位置: COMMAND > /path/to/file.out 2> /path/to/error.out 合并标準輸出和錯誤輸出為同一個資料流進行重定向: &>:覆寫重定向 &>>:追加重定向 COMMAND > /path/to/file.out 2>&1 COMMAND >> /path/to/file.out 2>&1 輸入重定向:< tr指令:轉換或删除字元 tr [OPTION]... SET1 [SET2] HERE Documentation:<< cat << EOF cat > /path/to/somefile << EOF 管道: COMMAND1 | COMMAND2 | COMMAND3 |... cat /etc/fstab | tr 'a-z' 'A-Z' 注意:最後一個指令會在目前shell程序的子shell程序中執行 tee指令: tee [OPTION]... [FILE]... 文本處理工具:wc,cut,sort,uniq wc指令: wc [OPTION]... [FILE]... wc [OPTION]... --files0-from=F -l:lines -w:words -c:characters cut指令: cut OPTION... [FILE]... -d:delimiter 指明分隔符 -f FILEDS: #:第#個字段 #,#[,#]:離散的多個字段,例如,1,3,6 #-#:連續的多個字段,例如1-6 混合使用:1-3,7 --output-delimiter=STRING:指明輸出的分隔符 sort指令:排序 sort [OPTION]... [FILE]... -f:忽略字元大小寫 -r:逆序 -t DELIMITER:字段分隔符 -k #:以指定字段為标準排序 -n:以數值大小排序 -u:uniq,排序并去重 uniq指令: uniq [OPTION]... [FILE]... -c:顯示每行重複出現的次數 -d:僅顯示重複過的行 -u:僅顯示未曾重複的行 注意:連續且完全相同方為重複 練習:以冒号分隔,取出/etc/passwd檔案的第6行至第10行,并将這些資訊按第3個字段的數值大小進行排序,最後僅顯示各自的第1個字段 回顧: 檔案管理指令,bash的基礎特性,文本處理指令 檔案管理指令:cp mv rm bash基礎特性:alias/unalias glob(*,?,[],[^]),快捷鍵 IO重定向,管道: 标準輸出重定向:>,>> 标準錯誤重定向:2>,2>> &>,&>> COMMAND > /path/to/somefile.out 2> &1 輸入重定向:< 顯示使用:tr 隐式使用:... 管道:COMMAND1|COMMAND2|... 文本處理指令:wc,cut,sort,uniq 使用者群組管理: 資源分派: authentication:認證 authorization:授權 accouting:審計 audition token,identity(username/password) Linux使用者:username/UID 管理者:root,0 普通使用者:1-65535 系統使用者:1-499,1-999 守護程序擷取資源進行權限配置設定 登入使用者:500+,1000+ 互動式登入 Linux組:groupname/GID 管理者組:root,0 普通組: 系統組:1-499,1-999 普通組:500+,1000+ Linux安全上下文: 運作中的程式:程序(process) 以程序發起者的身份運作: root:cat tom:cat 程序所能夠通路的所有資源的權限取決于程序的發起者的身份 Linux組的類别: 使用者的基本組(主組): 組名同使用者名,且僅包含一個使用者:私有組 使用者的附加組(額外組): Linux使用者群組相關的配置檔案: /etc/passwd:使用者及其屬性資訊(名稱,UID,基本組ID等) /etc/group:組及其屬性資訊 /etc/shadow:使用者密碼及其相關屬性 /etc/gshadow:組密碼及其相關屬性 /etc/passwd name:password:UID:GID:GECOS:directory:shell 使用者名:密碼:UID:GID:GECOS:主目錄:預設shell /etc/group: group_name:passwd:GID:user_list  組名:組密碼:GID:以目前組為附加組的使用者清單(分隔符為:) /etc/shadow: 使用者名:加密了的密碼:最近一次更改密碼的日期:密碼的最短使用期限:密碼的最長使用期限:密碼警告時間段:密碼禁用期:賬号的過期日期:保留字段 加密機制: 加密:明文--->密文 解密:密文--->明文 單項加密:提取資料指紋 md5:message digest,128bits sha1:secure hash algorithm,160bits sha224:224bits sha256:256bits sha384:384bits sha512:512bits 雪崩效應:初始條件的微小改變,将會引起結果的巨大改變 密碼的複雜性政策: 1.使用數字,大寫字母,小寫字母及特殊字元中至少3種 2.足夠長 3.使用随機密碼 4.定期更換,不要使用最近使用過的密碼 使用者群組相關的管理指令: 使用者建立:useradd useradd [options] LOGIN -u UID:[UID_MIN,UID_MAX],定義在/etc/login.defs -g GID:指明使用者所屬基本組,可為組名,也可以GID -c "COMMENT":使用者的注釋資訊 -d /PATH/TO/HOME_DIR:以指定的路徑為家目錄 -s SHELL:指定預設shell,可用清單在/etc/shell中 -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指定使用者所屬的附加組 -r:建立系統使用者 CentOS 6:ID<500 CentOS 7:ID<1000 預設值設定:/etc/default/useradd中 useradd -D [OPTIONS] -s SHELL 組建立:groupadd groupadd [OPTION]... group_name -g GID:指明GID号[GID_MIN,GID_MAX] -r:建立系統組 CentOS 6:ID<500 CentOS 7:ID<1000 檢視使用者相關的ID資訊:id id [OPTION]... [USER] -u:UID -g:GID -G:groups -n:name 切換使用者或以其他使用者身份執行指令:su su [OPTION]... [-] [USER [ARG]...] 切換使用者的方式: su username:非登入式切換,即不會讀取目标使用者的配置檔案 su - username:登入式切換,會讀取目标使用者的配置檔案,完全切換 注意:root su至其他使用者無需密碼,非root使用者切換需要密碼 換身份執行指令: su [-] username -c 'COMMAND' 選項: -l:"su -l username",相當于"su - username" 使用者屬性修改:usermod usermod [options] LOGIN -u UID:新UID -g GID:新基本組 -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:新的附加組,原來的附加組将會被覆寫,如果想保留原有,則要同時使用-a選項,表示append -s SHELL:新的預設SHELL -c 'COMMENT':新的注釋資訊 -d HOME:新的家目錄,原有家目錄中的檔案不會同時移動至新的家目錄,若要移動,則同時使用-m選項 -l login_name:新的登入名 -L:lock指定使用者 -U:unlock指定使用者 -e YYYY-MM-DD:指明使用者賬戶過期時間 -f INACTIVE:設定非活動期限 給使用者添加密碼:passwd passwd [OPTIONS] username:修改指定使用者的密碼,僅root使用者權限 passwd:修改自己的密碼 常用選項: -l:鎖定指定使用者 -u:解鎖指定使用者 -n mindays:指定密碼最短使用期限 -x maxdays:指定密碼最大使用期限 -w warndays:提前多少天進行警告 -i inactivedays:非活動期限 --stdin:從标準輸入接收使用者密碼 echo "PASSWORD" | passwd --stdin USERNAME 注意:/dev/null,bit buckets /dev/zero 删除使用者userdel: userdel [OPTION]... login -r:删除使用者家目錄 組屬性修改groupmod: groupmod [OPTION] GROUP -n group_name:新名字 -g GID:新的GID 組删除:groupdel groupdel GROUP 組密碼:gpasswd gpasswd [OPTION] GROUP -a user:将user添加至指定組中 -d user:删除使用者user的以目前組為組名的附加組 -A user1,user2...:設定有管理權限的使用者清單 newgrp指令:臨時切換基本組 如果使用者本不屬于此組,則需要組密碼 修改使用者屬性:chage chage [options] LOGIN -d LAST_DAY -E, --expiredate  -I, --inactive -m, --mindays -M, --maxdays -W, --warndays 其他:chfn,chsh,finger 指令總結:useradd,groupadd,su,id,usermod,userdel,groupmod,groupdel,passwd,newgrp,pwck,gpasswd,chage,chsh,finger 權限管理: 檔案的權限主要針對三類對象定義: owner:屬主 u group:屬組 g other:其他 o 每個檔案針對每類通路者都定義了三種權限: r:readable w:writeable x:excutable 檔案: r:可使用檔案檢視類工具擷取内容 w:可修改其内容 x:可以把此檔案提請核心啟動為一個程序 目錄: r:可以使用ls檢視此目錄中檔案清單 w:可在此目錄中建立檔案,也可删除此目錄中的檔案 x:可以使用ls -l檢視此目錄中的檔案清單,可以cd進入此目錄 --- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 例如: 640:rw-r----- 修改檔案權限:chmod chmod [OPTION]... OCTAL-MODE FILE... -R:遞歸修改權限 chmod [OPTION]... MODE[,MODE]... FILE... MODE: 修改一類使用者的所有權限: u= g= o= ug= a= #所有 u=,g= 修改一類使用者某位或某些位權限 u+ u- chmod [OPTION]... --reference=RFILE FILE... 參考RFILE檔案的權限,将FILE的修改為同RFILE 修改檔案的屬主和屬組: 僅root可用 修改檔案的屬主:chown chown [OPTION]... [OWNER][:[GROUP]] FILE... 用法: OWNER OWNER:GROUP :GROUP 注意:指令中的冒号可用.替換 -R:遞歸 chown [OPTION]... --reference=RFILE FILE... 修改檔案的屬組:chgrp chgrp [OPTION]... GROUP FILE... chgrp [OPTION]... --reference=RFILE FILE... 檔案或目錄建立時的遮罩碼:umask FILE:666-umask 注意:如果某類的使用者的權限減得的結果中存在x權限,則将其權限+1 DIR:777-umask umask:檢視 umask #:設定 僅對目前使用者的目前shell程序有效 bash基礎特性: 指令行展開:~,{} 指令别名:alias/unalias 指令曆史:history 指令和路徑補全:$PATH glob:*,?,[],[^] 快捷鍵:ctrl+{a,e,l,c,u,k} 指令hash:hash bash的基礎特性3: 1.提供了程式設計環境 程式:指令+資料 程式程式設計風格: 過程式:以指令為中心,資料服務于指令 對象式:以資料為中心,指令服務于資料 shell程式:提供了程式設計能力,解釋執行 程式的執行方式: 計算機:運作二進制指令 程式設計語言: 低級:彙編 進階: 編譯:進階語言->編譯器->目标代碼 C,C++ 解釋:進階語言->解釋器->機器代碼 shell,perl,python 過程式程式設計: 順序執行 循環執行 選擇執行 shell程式設計:過程式、解釋執行 程式設計語言的基本結構: 資料存儲:變量、數組 表達式 語句 shell腳本:文本檔案 #!/bin/bash #!/usr/bin/python shebang: magic number:魔數 運作腳本: 1.給予執行權限,通過具體的檔案路徑指定檔案執行 ./a.sh 2.直接運作解釋器,将腳本作為解釋器程式的參數運作 sh a.sh 變量: 命名的記憶體空間: 資料存儲方式: 字元串:   數值: 整形 浮點型 變量:變量類型 作用: 1.資料存儲格式 2.參與的運算 3.表示的資料範圍 類型: 字元 數值: 整形 浮點型 程式設計程式語言: 強類型: 弱類型:bash 把所有要存儲的資料到當做字元進行 不支援浮點數 邏輯運算: true,false 與 或 非 短路運算: 與: 第一個為0,結果必定為0 第一個為1,第二個必須參與運算 或: 第一個為1,結果必定為1 第一個為0,第二個必須參與運算 grep: Linux上文本處理三劍客: grep:文本過濾(模式:pattern)工具 grep,egrep,fgrep sed:stream editor,文本編輯工具 awk:Linux的實作gawk,文本報告生成器 grep:Global search REgular expression and Print out the line. 作用:文本搜尋工具,根據使用者指定的模式對目标文本逐行進行比對檢查,列印比對到的行 模式:由正規表達式字元及文本字元所編寫的過濾條件 REGEXP:由一類特殊字元及文本字元所編寫的模式,其中有些字元不表示字元字面意義,而表示控制或通配的功能 分兩類: 基本正規表達式:BRE  擴充正規表達式:ERE group -e,egrep 正規表達式引擎: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] 選項: --color=auto 把比對到的文本着色顯示 -v:顯示不能夠被pattern比對到的行 -i:忽略字元大小寫 -o:僅顯示比對到字元串本身 -q:靜默模式,不輸出任何資訊 -A #:after,後#行 -B #:before,前#行 -C #:context,前後各#行 -E:使用ERE 基本正規表達式元字元: 字元比對: .:比對任意單個字元 []:比對指定範圍内的任意單個字元 [^]:比對指定範圍外的任意單個字元 [:digit:]... 比對次數:用在要指定次數的字元後面,用于指定前面的字元要出現的次數 *:比對前面的字元任意次 例如:grep "x*y" .*:任意長度的任意字元 \?:比對前面的字元0或1次,即前面的可有可無(\轉義成?) \+:比對前面的字元至少1次 \{m\}:比對前面的字元m次 貪婪模式 \{m,n\}:比對前面的字元至少m次,至多n次 {0,n} {m,} 位置錨定: ^:行首錨定,用于模式的最左側 $:行尾錨定,用于模式的最右側 ^PATTERN$:用于模式比對整行 ^$:空行 \<或\b:詞首錨定,用于單詞模式的左側 \>或\b:詞尾錨定,用于單詞模式的右側 \<PATTERN\>:比對整個單詞 分組符号: \(\):将一個或多個字元捆綁在一起,當做一個整體進行處理 \(xy\)* 注意:分組括号中的模式比對到的内容會被正規表達式引擎記錄于内部的變量中,這些變量的命名方式為:\1,\2,\3..... \1:從左側起,第一個左括号以及與之比對右括号之間的模式所比對到的字元 後向引用:引用前面的分組括号中的模式所比對字元(而非模式本身) 練習: 1.顯示/proc/meminfo檔案中以大小s開頭的行(使用兩種方式) cat /proc/meminfo | grep "^[Ss]" cat /proc/meminfo | grep -i "^s" grep -i "^s" /proc/meminfo  2.顯示/etc/passwd檔案中不以/bin/bash結尾的行 grep -v "/bin/bash$" /etc/passwd 3.顯示/etc/passwd檔案中ID号最大使用者的使用者名 cat /etc/passwd | sort -t: -k 3 -n | tail -1 | cut -d: -f1 4.如果root使用者存在,顯示其預設的shell程式 id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7 5.找出/etc/passwd中的兩位或三位數 grep -o "\<[0-9]\{2,3\}\>" /etc/passwd 6.顯示/etc/rc.d/rc.sysinit檔案中,至少以一個空白字元開頭的且後面存非空白字元的行: grep "^[[:space:]]\+[^[:space:]]" /etc/rc.d/rc.sysinit 7.找出"netstat -tan"指令的結果以"LISTEN"後跟0,1或多個空白字元結尾的行 netstat -tan | grep "LISTEN[[:space:]]*$" 練習: 1.寫一個腳本,實作如下功能 如果user1使用者存在,就顯示其存在,否則添加 顯示添加的使用者的id号等資訊 2.如果root使用者登入了系統,就顯示root使用者線上,否則說明未登入 w | grep "^root\>" &> /dev/null && echo "success" || echo "no" egrep及擴充的正規表達式: egrep = grep -E egrep [OPTIONS] PATTERN [FILE...] 擴充正規表達式的元字元: 字元比對: . [] [^] 次數比對: * ?:0或1此 +:1次或多次 {m}:比對m次 {m,n}:至少m次,至少n次 錨定: ^ $ \<,\b \>,\b 分組: () 後向引用:\1,\2 或者: a|b C|cat:C或cat (C|c)at:Cat或cat 練習: 1.顯示目前系統root,centos或user1使用者的預設shell和UID 2.找出/etc/rc.d/init.d/functions檔案中某單詞後面跟一個小括号的行 3.使用echo輸出一個路徑,使用egrep取出基名 4.找出ifconfig指令結果中1-255之間的數值 5.找出ifconfig指令結果中的IP位址 fgrep:不支援正規表達式搜尋 bash基礎特性4: 變量類型: 資料存儲格式,存儲空間大小,參與運算種類 字元型: 數值型: 整型 浮點型 強類型:定義變量時必須指定類型,參與運算必須符合類型要求,調用未聲明變量會産生錯誤 弱類型:無須指定類型,預設均為字元型,參與運算會自動進行隐式類型轉換,變量無須事先定義可以直接調用 定義環境變量:declare -x  bash中的變量的種類: 根據變量的生效範圍等标準: 本地變量:生效範圍為目前shell程序,對目前shell之外的其他shell程序,包括目前shell的子shell程序均無效 環境變量:生效範圍為目前shell程序,及其子程序. 局部變量:生效範圍為目前shell程序中某代碼片段(通常指函數) 位置變量:$1,$2....用于讓腳本在腳本代碼中調用通過指令行傳遞給它的參數 特殊變量:$?,$0,$*,[email protected],$# 本地變量: 變量指派:name='value' 可以使用引用: value: 可以是直接字元串:name="username" 變量引用:name="$username" 指令引用:name=`COMMAND`,name=$(COMMAND) 變量引用:${name},$name "":弱引用,其中的變量引用會被替換為變量值 '':強引用,其中的變量引用不會被替換為變量值,而保持原字元串 顯示已定義的所有變量: set 銷毀變量: unset name 環境變量: 變量聲明,指派 export name=VALUE declare -x name=VALUE 變量引用:$name,${name} 顯示所有環境變量: export env printenv 銷毀: unset name bash有許多内建的環境變量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,HISTFILE,PS1 變量命名法則: 1.不能使程式中的保留字,如if,for 2.隻能使用數字,字母及下劃線,且不能以數字開頭 3.見名知義 隻讀變量: readonly name declare -r name 位置變量: 在腳本代碼中調用通過指令行傳遞給腳本的參數 $1,$2...:對應調用第1,第2...等參數 shift [n]:換崗操作,會剔除shift n $0:指令本身 $*:傳遞給腳本的所有參數,把所有參數當做1個字元串 [email protected]:傳遞給腳本的所有參數,把每個參數當做1個字元串 $#:傳遞給腳本的參數個數 bash的配置檔案: 按生效範圍劃分,兩類: 全局配置: /etc/profile /etc/profile.d/*.sh /ect/bashrc 個人配置 ~/.bash_profile ~/.bashrc 按功能劃分,兩類: profile類:為互動式登入的shell提供配置 全局:/etc/profile   /etc/profile.d/*.sh 個人:~/.bash_profile 功用: 定義環境變量 運作指令或腳本 bashrc類:為非互動式登入的shell提供配置 全局:/ect/bashrc   個人:~/.bashrc 功用: 定義指令别名 定義本地變量 shell登入: 互動式: 直接通過終端輸入賬号密碼登入 使用su - username 或su -l username切換的使用者 /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc 非互動式: su username 圖形界面下打開的終端 執行腳本 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 編輯配置檔案定義的新配置的生效方式: 1.重新啟動shell程序 2.使用source或.指令 問題: 1.定義對所有使用者都生效的别名 2.讓使用者的PATH環境變量的值多出一個路徑,例如/usr/bin/local/apache2/bin 管理者:~/.bash_profile 使用者: bash中算數運算: +,-,*,/,%, 實作算數運算: 1. let var=算數表達式 2. var=$[算數表達式] 3. var=$((算數表達式)) 4. var = $(expr arg1 arg2 arg3 ...) 乘法符合有些場景中需要轉義 bash有内建随機數生成器:$RANDOM 增強型指派: +=,-=,*=... let varOPERvalue 例如:let count+=1 自增,自減: let var+=1 let var++ let var -=1 let var-- 練習1:寫一個腳本 計算/etc/passwd檔案中的第10個使用者和第20使用者的ID之和 head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3 練習2:寫一個腳本 傳遞兩個檔案路徑作為參數給腳本,計算這兩個檔案中所有空白行之和 練習3:統計/etc,/var,/usr目錄共有多少個一級子目錄和檔案 條件測試: 判斷某需求是否滿足,需要有測試機制來實作: 注意:專用的測試表達式需要由測試指令輔助完成測試過程 測試指令: test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 注意:EXPRESSION前後必須有空格存在,否則文法錯誤 bash的測試類型: 數值測試: -gt:是否大于 -ge:大于等于 -eq:等于 -ne:不等于 -lt:小于 -le:小于等于 字元串測試: ==:等于 >:大于 <:小于 !=:不等于 =~:左側字元串是否能被右側PATTERN所比對 注意:此種表達式一般用于[[]] -z "STRING":測試字元串是否為空,空則為真,不空為假 -n "string":是否不為空 注意:用于字元串比較時用到的操作數都應該使用引号 檔案測試 bash自定義退出狀态碼 exit [n]:自定義退出狀态碼 注意:腳本中遇到exit指令,腳本會立即終止,終止退出狀态取決于exit指令後面的數字 注意:如果未給腳本指定退出狀态碼,整個腳本的退出狀态碼取決于腳本中執行的最後一條指令的狀态碼 練習:寫一個腳本 接受一個檔案路徑作為參數: 如果參數個數小于1,則提示使用者至少應該給一個參數,并立即退出 如果參數個數不小于1,則顯示第一個參數所指向的檔案空白行數 [ $# -lq 1] && echo "at least one agrument." && exit 1 vim編輯器: 簡介: vi:Visual Interface 文本:ASCII,Unicode 文本編輯: 行編輯器:sed 全屏編輯器:nano,vi VIM:VI IMproved 使用: vim:格式化編輯 基本模式: 編輯模式,指令模式 輸入模式  末行模式: 内置的指令行接口 打開檔案: # vim [OPTION]... FILE... +#:打開檔案後,直接讓光标處于第#行的行首 +/PATTERN:打開檔案後,直接讓光标處于第一個被PATTERN比對到的行的行首 模式轉換: 編輯模式 -->輸入模式 i:insert,在光标所在處輸入 a:append,在光标所在處的後面插入 o:open,直接在目前光标所在行的下方打開一個新行 I:在目前光标所在行的行首輸入 A:在目前光标所在行的行尾輸入 O:在目前光标所在行的上方打開一個新行 c: C: 輸入模式-->編輯模式 ESC 編輯模式-->末行模式 : 末行模式-->編輯模式 ESC 關閉檔案: :q 退出 :q! 強制退出,丢棄做出的修改 :wq 保持退出 :x 儲存退出 :w /PATH/TO/SOMEWHERE ZZ:儲存退出 光标跳轉: 字元間跳轉: h,j,k,l h:左 l:右 j:下 k:上 #COMMAND:跳轉由#指定的個數的字元 單詞間跳轉: w:下一個單詞的詞首 e:目前或下一個單詞的詞尾 b:目前或前一個單詞的詞首 #COMMAND:由#指定一次跳轉的單詞數 行首行尾: ^:跳轉至行首的第一個空白字元 0:跳轉至行首 $:跳轉至行尾 行間移動: #G:跳轉至#指定的行 G:最後一行 1G,gg:第一行 句間移動: ) ( 段落間: } { vim的編輯指令: 字元編輯: x:删除光标處的單個字元 #x:删除光标所在處向後#字元 xp:交換光标所在處的字元及其後面字元的位置 替換(r,replace): r:替換光标所在處的字元 删除指令: d:删除指令,可結合光标跳轉字元,實作範圍删除 d$: d^: d0: dw: de: db: #COMMAND: dd:删除光标所在的行 #dd:多行删除 粘貼指令p:put,paste p:緩沖區存的如果為整行,則粘貼目前光标所在行的下方,否則,粘貼至目前光标所在處的後面 P:緩沖區存的如果為整行,則粘貼目前光标所在行的上方,否則,粘貼至目前光标所在處的前面 複制指令(y,yank): y:複制,工作行為與d相似 y$ y0 y^ ye yw yb #COMMAND yy:複制行 #yy:複制多行 改變指令:(c,change) c:修改 編輯模式-->輸入模式 c$ c^ c0 cb ce cw #COMMAND cc:删除并輸入新内容 #cc: 其他編輯操作: 可視化模式: v:按字元標明 V:按行標明 注意:經常結合編輯指令 撤銷此前的編輯: u:undo,撤銷此前的操作 #u:撤銷指定次數的操作 撤銷此前的撤銷: ctrl+r 重複前一個編輯操作: . 翻屏操作: ctrl+f:向檔案尾部翻一屏 ctrl+b:向檔案首部翻一屏 ctrl+d:向檔案尾部翻半屏 ctrl+u:向檔案首部翻半屏 vim自帶的練習教程: vimtutor vim中的末行模式: 内建的指令行接口 1.位址定界 :start_pos,end_pos #:具體第#行,例如2表示第2行 #,#:從左側#表示的行開始,到右側#表示行結尾 #,+#:從左側#表示的行開始,加上右側#表示的行數 .:目前行 $:最後一行 .,$-1 %:全文,相當于1,$ /pattern1/,/pattern2/: 從第一次被pat1模式比對到的行開始,一直到第一次被pat2比對到的行結束 #,/pat/ /pat/,$ 使用方式: 後跟一個編輯指令 d y w /PATH/TO/SOMEWHERE 将範圍内的行另存至指定檔案中 r /PATH/FORM/SOMEWHERE 在指定位置插入指定檔案中的所有内容 2.查找 /PATTERN 從目前光标所在處向檔案尾部查找 ?PATTERN 從目前光标所在處向檔案首部查找 n:與指令同方向 N:與指令反方向 3.查找并替換 s:末行模式下完成查找替換操作 s/要查找的内容/要替換為的内容/修飾符 要查找的内容:可使用模式 替換為的内容:不能使用模式,但可以使用\1,\2...;還可以使用&引用前面查找到的整個内容 修飾符: i:忽略大小寫 g:全局替換.預設情況下,每行隻替換第一次出現 查找替換中的分隔符/可替換為其他字元,例如 [email protected]@@ s### 練習: 1.複制/etc/grub2.cfg至/tmp/目錄,用查找替換指令删除/tmp/grub2.cfg檔案的行首的空白字元 :%s/^[[:space:]]\+// 2.複制/etc/rc.d/init.d/functions檔案至/tmp目錄,用查找替換指令為/tmp/functionas的每行開頭為空白字元的行的行首添加一個#号 :%s/^[[:space:]]/#&/ 多檔案模式: vim FILE1 FILE2 FILE3 ... :next 下一個 :prev 上一個 :first 第一個 :last 最後一個 :wall 儲存所有 :qall 退出所有 視窗分隔模式: vim -o|-O FILE1 FILE2 FILE3... -o:水準分隔 -O:垂直分隔 在視窗間切換:ctrl+w,Arrow 單檔案視窗分割: ctrl+w,s:split,水準分割 ctrl+w,v:vertical,垂直分割 定制vim的工作特性: 配置檔案:永久有效 全局:/etc/vimrc 個人:~/.vimrc 末行:目前vim程序有效 1.行号 顯示:set number,簡寫為set nu 取消顯示:set nonumber,簡寫set nonu 2.括号比對 比對:set showmatch,簡寫為set sm 取消:set nosm 3.自動縮進 啟用:set ai 禁用:set noai 4.高亮搜尋 啟用:set hlsearch 禁用:set nohlsearch 5.文法高亮 啟用:syntax on 禁用:syntax off 6.忽略字元大小寫 啟用:set ic 禁用:set noic 擷取幫助: :help 問題:如何設定tab縮進為4字元   bash條件測試: 測試方式: test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 測試表達式的類别: 數值比較 字元串測試 檔案測試 存在性測試 -a FILE -e FILE:檔案存在性測試,存在為真,不存在為假 存在性及類别 -b FILE:是否存在且為塊裝置檔案 -c FILE:是否存在且為字元裝置檔案 -d FILE:是否存在且為目錄檔案 -f FILE:是否存在且為普通檔案 -h FILE 或 -l FILE:存在且為符号連結檔案 -p FILE:是否存在且為命名管道檔案 -S FILE:是否存在且為套接字檔案 檔案權限測試: -r FILE:是否存在且擁有讀權限 -w FILE:是否存在且擁有可寫權限 -x FILE:是否存在且可執行 檔案特殊權限測試: -g FILE:是否存在且擁有sgid權限 -u FILE:是否存在且擁有suid權限 -k FILE:是否存在且擁有sticky權限 檔案大小測試: -s FILE:是否存在且非空 檔案是否打開: -t fd:fd表示檔案描述符,是否以及打開且與某終端相關 -N FILE:檔案自從上一次被讀取後是否被修改過 -O FILE:目前有效使用者是否為檔案屬主 -G FILE:目前有效使用者是否為檔案數組 雙目測試: FILE1 -ef FILE2:FILE1和FILE2是否執行同一個裝置上的相同iNode FILE1 -nt FILE2:FILE1是否新于FILE2 FILE1 -ot FILE2:FILE1是否舊于FILE2 組合測試條件: 邏輯運算: 第一種方式: COMMAND1 && COMMAND2 COMMAND1 || COMMAND2 ! COMMAND [ -e FILE ] && [ -r FILE ] 第二種方式: [ EXPRESSION1 -a EXPRESSION2 ] [ EXPRESSION1 -o EXPRESSION2 ] [ ! EXPRESSION ] 必須使用測試指令進行: [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab 檔案查找: 在檔案系統上查找符合條件的檔案: 檔案查找:locate,find 非實時查找(資料庫查找):locate 實時查找:find locate: 依賴于實作建構的索引:索引的建構是在系統較為空閑時自動進行(周期性任務);手動更新資料庫(updatedb); 索引建構過程需要周遊整個根檔案系統,極消耗資源 工作特點: 查找速度快 模糊查找 非實時查找 locate KEYWORD find: 實時查找工具,通過周遊指定路徑下的檔案系統完成檔案查找 工作特點: 查找速度略慢 精确查找 實時查找 文法: find [OPTION]... [查找路徑] [查找條件] [處理動作] 查找路徑:指定具體目标路徑,預設為目前目錄 查找條件:指定的查找标準,可以檔案名,大小,類型,權限,屬主屬組等标準進行,預設為找出指定路徑下的所有檔案 處理動作:對符合條件的檔案做什麼操作;預設輸出至螢幕 查找條件: 根據檔案名查找: -name "檔案名稱":支援使用glob *,?,[],[^] -iname "檔案名稱":忽略大小寫 -regex "PATTERN":以PATTERN比對整個檔案路徑字元串,而不僅僅是檔案名 根據屬主屬組查找: -user USERNAME:查找屬主為指定使用者的檔案 -group GROUPNAME:查找屬組為指定組的檔案 -uid UserID:查找屬主為指定UID号的檔案 -gid GroupID:查找屬組為指定GID号的檔案 -nouser:查找沒有屬主的檔案 -nogroup:查找沒有屬組的檔案 根據檔案類型查找: -type TYPE: f:普通檔案 d:目錄 l:符号連結 s:套接字 b:塊裝置 c:字元裝置 p:管道 組合條件: 與:-a 或:-o 非:!或-notvv23 !A -a !B = !(A -o B) !A -o !B = !(A -a B) 找出/tmp目錄下,屬主不是root,且檔案名不是fstab的檔案 find /tmp \( -not -user root -a -not -name 'fstab' \) -ls find /tmp -not \( -user root -o -name 'fstab' \) -ls 根據檔案大小: -size [+|-]#UNIT 常用機關:k,M,G #UNIT:(#-1,#],大于#-1,小于等于# -#UNIT:[0,#-1] +#UNIT:(#,oo) 根據時間戳: 以天為機關: -atime [+|-]# #:[#,#+1) +#:[#+1,oo] -#:[0,#) -mtime -ctime 以分組為機關: -amin -mmin -cmin 根據權限查找: -perm [/|-]MODE MODE:精确權限比對 /MODE:任何一類對象(u,g,o)的權限中,隻要能一位比對即可 -MODE:每一類對象都必須同時擁有為其指定的權限标準 -666: 處理動作: -print:預設的處理動作,顯示至螢幕 -ls:類似于ls -l -delete:删除查找到的檔案' -fls /path/to/somefile :查找到的所有檔案的長格式資訊儲存至指定檔案 -ok COMMAND {} \;對查到的每個檔案執行由COMMAND指定的指令 對每個檔案執行指令之前,都會互動式要求使用者确認 -exec COMMAND {} \;對查找到的每個檔案執行由COMMAND指定的指令 {}:用于引用查找到的檔案名稱自身 find /tmp -cmin -5 -exec mv {} {}.new \;  #改檔案名 注意:find傳遞查找到的檔案至後面指定的指令時,查找到所有符合條件的檔案一次性傳遞給後面的指令 有些指令不能接受過多參數,此時指令執行可能會失敗,另一種方式可規避此問題 find | xagrs COMMAND  練習: 1.查找/var目錄下屬主為root且屬組為mail的所有檔案或目錄 find /var -user root -a -group mail  find /var -user root -group mail  #-a可以省略 2.查找/usr目錄下不屬于root,bin,hadoop的所有檔案或目錄 find /usr -not \( -user root -o -user bin -o -user hadoop \) find /usr -not -user root -a -not -user bin -a -not -user hadoop 3.查找/etc目錄下最近一周内其内容修改過,同時屬主不為root,也不是Hadoop的檔案或目錄 find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)  4.查找目前系統上沒有屬主或屬組,且最近一個周内未曾被通路過的檔案 find / -nouser -a -nogroup -a -atime -7 5.查找/etc目錄下大于1M且類型為普通檔案的所有檔案 find /etc -size +1M -type f 6.查找/etc目錄下所有使用者都沒有寫權限的檔案 find /etc -not -perm +222 7.查找/etc目錄下至少有一類使用者沒有執行權限的檔案 find /etc -not -perm -111 8.查找/etc/init.d目錄下,所有使用者都有執行權限,且其他使用者有些權限的檔案 find /etc/init.d -perm -113 Linux檔案系統上的特殊權限: SUID,SGID,Stikcy 1.權限 r,w,x user group other 2.安全上下文 前提:程序有屬主和屬組,檔案有屬主和屬組 1.任何一個可執行檔案能不能啟動為程序,取決于發起者對程式檔案是否擁有執行權限 2.啟動為程序之後,其程序的屬主為發起者,屬組為發起者所屬的組 3.程序通路檔案時的權限,取決于程序的發起者 1.程序的發起者,同檔案的屬主,則應用檔案屬主權限 2.程序的發起者,屬于檔案的屬組,則應用檔案屬組權限 3.應用檔案其他權限 3.SUID 1.任何一個可執行檔案能不能啟動為程序,取決于發起者對程式檔案是否擁有執行權限 2.啟動為程序之後,其程序的屬主仍為原程式檔案的屬主 權限設定: chmod u+s FILE... chmod u-s FILE... 4.SGID 預設情況下,使用者建立檔案時,其數組為此使用者所屬的基本組 一旦某目錄被設定了SGID,則對此目錄具有寫權限的使用者在此目錄中建立的檔案所屬的組為此目錄的屬組 權限設定: chmod g+s DIR... chmod g-s DIR... 5.Sticky 對于一個多人可寫的目錄,如果設定了sticky,則每個使用者僅能删除自己的檔案 權限設定: chmod o+t DIR... chmod o-t DIR... SUID SGID STICKY 000 0 ... . 111 7 chmod 1777 /tmp/a.txt 幾個權限位映射: SUID:user占據屬主的執行權限位 s:屬主擁有x權限 S:屬主沒有x權限 SGID:group占據屬主的執行權限位 s:group擁有x權限 S:group沒有x權限 sticky:other占據屬主的執行權限位 s:other擁有x權限 S:other沒有x權限 bash腳本編輯: 過程式變成語言: 順序執行 選擇執行 循環執行 選擇執行: if 判斷條件 then 條件為真時分支代碼 fi if 判斷條件;then 條件為真時分支代碼 else 條件為假時分支代碼 fi

轉載于:https://www.cnblogs.com/redheat/p/7069799.html

繼續閱讀