1. 程式人生 > >關於Linux,用戶,組,權限,文本處理工具,正則表達式,vim文本編輯器

關於Linux,用戶,組,權限,文本處理工具,正則表達式,vim文本編輯器

rtx 元字符 否則 權限 tdi 行編輯 directory e2fs 登錄

一、 用戶

??在Linux系統中,可以創建多個用戶,每一個用戶都有一個與其對應的ID號,就像每一個人都有一個×××號一樣,這就是用戶的UID,
??在Linux中管理員 root的默認UID為0,普通用戶為1-65535,而普通用戶又分為系統用戶和登錄用戶,系統用戶是不可登錄的,對守護進程獲取資源進行權限分配使用,其默認UID是1-499(在centos7中是1-1000),普通用戶的UID為500-65535(centos7中為1000-65535)

?1、 用戶及其屬性信息

??/etc/passwd
技術分享圖片
???例:root:x:0:0:root:/root:/bin/bash
????以:分隔
????root 用戶名(普通用戶或系統用戶或組名)

????x 用戶的密碼(映射到etc/shadow)
????0 UID 用戶的ID號
????0 GID用戶所屬組的ID號(主組,私有組)
????root 用戶所屬組組名
?? ? ?/root 用戶的家目錄
?? ? ?/bash 用戶的登錄shell(/bash:表示可登錄用戶,/nologin:表示不可登錄用戶)
?? /etc/shadow
技術分享圖片 ??root:$6$4a0qWypn588Lf5ey$pCPLZaQa0bt/SEUnWVczNwxlA1xsjW2UrPnjsS2RXumSqDUtJaNe.qB7oNoGEI.zZmFt/644AmKLV.yB4Rs6L/:17540:0:99999:7:::
?? 以:分隔
?? Root:用戶名
??6 : sha512加密
??4a0qWypn588Lf5ey:加密算法數據
??pCPLZaQa0bt/SEUnWVczNwxlA1xsjW2UrPnjsS2RXumSqDUtJaNe.qB7oNoGEI.zZmFt/644AmKLV.yB4Rs6L/:這一串字符是加密後的數據
? ?17540:從1970年1月1日起到密碼最近一次被更改的時間
? ? 0:密碼再過幾天可以被變更,0表示隨時可被變更
? ?99999:密碼再過幾天必須被變更,99999表示永不過期
? ?7:密碼過期前幾天系統提醒用戶,默認是7天,一周
? ?倒數第三位:密碼過期幾天後被鎖定
? ?倒數第二位:從1970年1月1日算起,多少天後賬號失效
? ?最後一位:為擴展而有的,目前沒意義

?2、 用戶管理命令

??1.用戶創建:useradd(adduser)

???語法:useradd 選項 參數 用戶名
????-u UID :指定uid默認從1000開始往後
????-o :與 -u 配合,不檢查UID的唯一性(用於所創建的用戶UID已被使用的情況下)
????-g GID或組名: 指定用戶的主要組為某個已存在的組,可以指定GID也可以指定組名
????-G :指定附加組 以逗號為間隔可以同時指定多個,組必須事先存在,可以指定GID也可以指定組名。
????-c “...”:註釋信息
????-d 用戶家目錄:指定用戶家目錄,如不指定默認在/home下與用戶同名。指定時註意,目錄名需已存在,基名不存在。
????-s shell:指定登錄shell如下
????useradd -s /sbin/nologin test 創建shell為不可交互式登錄的用戶
????-N :不創建私用組做主組,默認使用UID為100的組為主組
????-r :創建系統用戶 (centos 6及之前的版本 < 500, centos 7 < 1000)

??2.用戶密碼的修改passwd

???語法:passwd 選項 (用戶名指定要修改密碼的用戶名,僅在root運行時,不用輸入原密碼,可直接更改,)
??? ?-l 鎖定用戶 實際就是在密碼位前加!!
??? ?-u 取消用戶鎖定
??? ?-e 強制用戶下次登錄時更改密碼
??? ?-n mindays: 指定最短使用期限
??? ?-x maxdays:最大使用期限
??? ?-w warndays:提前多少天開始警告
??? ?-i inactivedays:非活動期限
??? ?--stdin 從標準輸入接收用戶密碼

??3.更改密碼的默認設置

?? ?chage 選項 用戶名
??? ?-d 日期:上一次的更改日期(LAST_DAY)
??? ?-E 具體日期(例:2017-09-08) : 賬戶過期過期時間過了這天,賬戶將不可用(expiredate EXPIRE_DATE)
??? ?-I 天數 : 密碼過期幾天後此賬戶將不可用 (inactive INACTIVE)
??? ?-m 天數 :密碼的最小存活期(mindays MIN_DAYS)
??? ?-M 天數:密碼的最大存活期(maxdays MAX_DAYS)
??? ?-W 天數:密碼過期前,提前警告的信息的天數(--warndays WARN_DAYS)
??? ?–l 顯示密碼策略
?例:
??? ?chage -d 0 tom 下一次登錄強制重設密碼
??? ?chage -m 0 –M 42 –W 14 –I 7 tom 更改tom的密碼的最小存活期為0天,最大存活期為42天,在過期前14天提示警告的信息,過期7天後賬戶不可用
??? ?chage -E 2016-09-10 tom 當到了這一天時賬戶不可用

??4.用戶屬性修改

???Usermod 選項 參數 用戶名
????-u UID:新UID
????-g GID: 新主組
????-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加組,原來的 附加組將會被覆蓋;若保留原有,則要同時使用-a選項
????-a 與-G 結合 使用可以增加用戶的附加組,而不會影響之前的附加組
????-s SHELL:新的默認SHELL
????-c ‘COMMENT‘:新的註釋信息
????-d HOME: 新家目錄不會自動創建;若要創建新家目錄並移 動原家數據,同時使用-m選項
??? ?-l login_name: 修改用戶名;
??? ?-L: lock指定用戶,在/etc/shadow 密碼欄的增加 ! 相當於passwd -l
??? ?-U: unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
??? ?-e YYYY-MM-DD: 指明用戶賬號過期日期
??? ?-f INACTIVE: 設定非活動期限

??5.用戶的刪除

?? ? Userdel 選項 用戶名
? ? ? -r:刪除用戶的家目錄,

??6.查看用戶相關的ID信息

??? ID 選項 用戶名
??? ?-u: 顯示UID
??? ?-g: 顯示GID
??? ?-G: 顯示用戶所屬的組的ID
??? ?-n: 顯示名稱,需配合ugG使用

??7.用戶切換

???su [options...] [-] [user [args...]]
???切換用戶的方式:
? ???su UserName:非登錄式切換,即不會讀取目標用戶的 配置文件,不改變當前工作目錄
??? ?su - UserName:登錄式切換,會讀取目標用戶的配置 文件,切換至家目錄,完全切換
???root su至其他用戶無須密碼;
???非root用戶切換時需要密碼
???換個身份執行命令: su [-] UserName -c ‘COMMAND‘
選項:??-l –login
???? su -l UserName 相當於 su – UserName

??8. 手工創建家目錄的方法

            mkdir /home/machao
            chmod 700 /home/machao/
            cp -r /etc/skel/.[^.]*  /home/machao/
            chown -R machao.machao /home/machao  

二、組

?組是為了方便對普通用戶的權限的管理,組內成員平等而獨立

?1、 Linux組的類別

???用戶的主要組(primary group):
???用戶必須屬於一個且只有一個主組
???組名同用戶名,且僅包含一個用戶:私有組
???用戶的附加組(supplementary group): 一個用戶可以屬於零個或多個輔助組

?2、 用戶和組的配置文件

??1./etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)

???/etc/group:組及其屬性信息
技術分享圖片
??? ?群組名稱:就是群組名稱
??? ?群組密碼:通常不需要設定,密碼是被記錄在/etc/gshadow
??? ?GID:就是群組的ID
??? ?以當前組為附加組的用戶列表(分隔符為冒號)
???/etc/shadow:用戶密碼及其相關屬性
???/etc/gshadow-:組密碼及其相關屬性
????組名
????組密碼
????管理員:更改組密碼和成員
????組成員:功能同/etc/group中的第四列

??2.pwconv 將passwd當中的密碼映射到了/etc/shadow

??? pwunconv 取消映射,密碼仍然放在/etc/passwd當中
??? grpconv 將組密碼映射到了/etc/gshadow
??? grpunconv 取消組密碼的映射

??3.vipw = vim /etc/passwd

???vipw -s = vim /etc/shadow
???vigr = vim /etc/group
???vigr -s = vim /etc/gshadow
???pwck 檢查/etc/passwd語法
???grpck 檢查/etc/group語法

??4. /etc/default/useradd 創建用戶的默認配置文件

技術分享圖片
GROUP=100 :表示使用useradd -N時默認使用的組為GIP為100的組
HOME=/home: 自動創建家目錄時,從哪個目錄下創建與用戶同名的家目錄
INACTIVE=-1 :用戶是否設置密碼過期後,多少天帳戶過期,為-1時,不會觸發帳戶過期
EXPIRE= :是否指定一個帳戶過期時間,為空表示帳戶默認永不過期
SHELL=/bin/bash: 使用useradd創建用戶時,如不使用-s 指定則默認的用戶shell為/bin/bash
SKEL=/etc/skel :自動創建家目錄時,從哪個目錄拷貝模板文件
CREATE_MAIL_SPOOL=yes : 創建用戶時是否在/var/spool/mail下為用戶與用戶同名的郵箱文件。

?3、 創建組

?? groupadd 選項 參數 groupname
?? ? -g GID:指明GID號;
?-r :創建系統組

?4、組修改

??Groupmod 選項 參數 groupname
?? ?-n newname 組名:修改組名
??? -g newGID:修改組ID

?5、設置組密碼及組的管理

?? 1.Gpasswd 組名 設置組密碼

???管路員可以執行:
????-a 用戶名 組名:將某用戶以附加組方式加入某組中,
????-d 用戶名 組名:將某用戶從指定組踢出
僅root執行
????-M用戶名[,用戶名…] 組名:設置某組的用戶列表
????-A 用戶名[,用戶名…] 組名:設置某組的管理員列表
(管理員在不是組成員的情況下,僅能修改密碼,和將其他人加入和踢出組,並不具有組成員的權限)
(newgrp 組名 “普通用戶執行”,非附加組成員的普通用戶在正確輸入組密碼後可以使用該命令臨時變更主要組)
(附加組成員的普通用戶無需輸入密碼可以使用該命令臨時變更主組,原主組臨時變成附加組)

??2.Groupmems -g 組名 選項 用戶名 (僅root執行)

            -g 組名 -a 用戶名:將某用戶以附加組方式加入到某組中
            -g 組名 -d 用戶名:將某用戶從指定組踢出
            -g 組名 -p 清空所有成員
            -g 組名 -l 查看指定組有哪些成員(僅顯示附加組)

??3.groups 用戶名 查看用戶屬於哪些組(包含主組和附加組,普通用戶也可用)

??4.組刪除 groupdel

???Groupdel 組名:刪除組

三、 文件權限

?1、 文件屬性

技術分享圖片

?2、 修改文件的屬主和屬組

??1.文件的權限主要針對三類對象進行定義:

????owner: 屬主, u
????group: 屬組, g
????other: 其他, o

??2.修改文件的屬主 chown(僅root才能更改文件所屬人)

          Chown 選項 owner:group filename(:和.可以互換著用)
               -R:遞歸修改目錄下所有文件
               Owner  只修改屬主
               Owner.group或owner:group 同時修改屬主和屬組
               :group或.group 只修改屬組(.或:不能省略)
                --reference=file1 file2 將file1的group信息復制給file2

??3.使用chgrp修改文件的group(文件的owner可以使用chgrp更改文件的group,前提是owner一定要屬於目標group)

            Chgrp 組名 filename
             -R 遞歸
             --reference=file1 file2 將file1的group信息復制給file2

?3、權限設置

??1.每個文件針對每類訪問者都定義了三種權限:

????r: Readable 可讀
????w: Writable 可寫
????x: eXcutable 可執行
???文件:
????r: 可使用文件查看類工具獲取其內容
????w: 可修改其內容
????x: 可以把此文件提請內核啟動為一個進程
???目錄:
????r: 可以使用ls查看此目錄中文件列表
????w: 可在此目錄中創建文件,也可刪除此目錄中的文件
????x: 可以使用ls -l查看此目錄中文件列表,可以cd進入此
???目錄 X:只給目錄x權限,不給文件x權限

??2.當rwx分別或組合作用在文件上時

???當僅r權限作用在文件上的時候,用戶可以讀取該文件的內容:cat less more head tail
???當僅w權限作用在文件上的時候,用戶可以修改文件的內容:>>
???當僅x權限作用在文件上的時候,無作為.
???當rw權限作用在文件上的時候,用戶即能讀與能修改:cat less more head tail vim nano > >>
???當rx權限作用在文件上的時候,用戶可以執行該文件
???當wx權限作用在文件上的時候,權限等同於僅w權限.
???文件的常見權限是r-- rw- rwx

??3.當rwx分別或組合在目錄上時

???當僅r權限作用在目錄上的時候,用戶可以短列出目錄下的文件名.
???當僅w權限作用在目錄上的時候,無作為.
???當僅x權限作用在目錄上的時候,用戶可以進入該目錄,並且在知道具體文件名且具有相關權限的情況下,可以訪問子文件.
???當rw權限作用在目錄上的時候,權限等同於僅r權限
???當rx權限作用在目錄上的時候,用戶進入,長列出.
???當wx權限作用在目錄上的時候,用戶可以進入且可以創建及刪除文件.但不能使用文件名通配符
???目錄的常見權限r-x rwx

??4.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

??5.修改文件權限 chmod

???Chmod 選項 權限 filename
????-R:遞歸
???? --reference file1 file2: 將file1的權限復制給file2
???權限表達式:
????u/g/o/a= :指定給u,g,o或全部的權限
????u/g/o/a+ :給u,g,o或全部添加某個權限
????u/g/o/a- :給u,g,o或全部減去某個權限
(當使用a給全部加x權限時,只給目錄及已有部分x權限的文件加上x權限,不給三個權限位完全沒有x權限的文件加x權限)

四、 特殊權限

?1、 前提:進程有屬主和屬組;文件有屬主和屬組

??1.任何一個可執行程序文件能不能啟動為進程,取決發起者 對程序文件是否擁有執行權限

??2.啟動為進程之後,其進程的屬主為發起者,進程的屬組為 發起者所屬的組

??3.進程訪問文件時的權限,取決於進程的發起者

???(a) 進程的發起者,同文件的屬主:則應用文件屬主權限
???(b) 進程的發起者,屬於文件屬組;則應用文件屬組權限
???(c) 應用文件“其它”權限

?2、 三種常用的權限:r, w, x user, group, other

??三種不常用的特殊權限:SUID, SGID, Sticky

?3、 SUID 權限

??任何一個可執行程序文件能不能啟動為進程:取決發起者對 程序文件是否擁有執行權限。
??啟動為進程之後,其進程的屬主為原程序文件的屬主
??SUID只對二進制可執行程序有效
??SUID設置在目錄上無意義

??1.權限設定:

???chmod u+s 文件路徑 :給某個二進制文件添加SUID權限
???chmod u-s 文件路徑 :給某個二進制文件減去SUID權限

??2.SUID 權限的作用

任何一個可執行程序文件能不能啟動為進程:取決發起者對 程序文件是否有執行權限
啟動為進程之後,其進程的屬主為原程序文件的屬主

?4、 SGID權限

??1. 當SGID 作用在一個二進制程序上時

???(1)SGID 的作用

????任何一個可執行程序文件能不能啟動為進程:取決發起者對 程序文件是否擁有執行權限
????啟動為進程之後,其進程的屬主為原程序文件的屬組

???(2)權限設定

????Chmod g+s 文件路徑
????Chmod g-s 文件路徑

??2.當SGID作用在一個目錄上時

???(1) SGID的作用

????默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
????一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此 目錄中創建的文件所屬的組為此目錄的屬組
????通常用於創建一個協作目錄

???(2) 權限設定

????chmod g+s 目錄路徑 :給某個目錄添加SGID 權限
????chmod g-s 目錄路徑:給某個目錄上SGID權限取消

?5、 Sticky位

??具有寫權限的目錄通常用戶可以刪除該目錄中的任何 文件,無論該文件的權限或擁有權
??在目錄設置Sticky 位,只有文件的所有者或root可 以刪除該文件 ?sticky
??設置在文件上無意義
??權限設定:
???chmod o+t 目錄路徑
???chmod o-t 目錄路徑

?6、 特殊權限數字法

技術分享圖片
???例:chmod u+s =chmod 4xxx
????Chmod g+s=chmod 2xxx
????Chmod o+t=chmod 1xxx
????即有suid又有sgid 6xxx
????即有suid又有sticky 5xxx
????即有sgid又有Sticky 3xxx
????全有7xxx
(權限位原本有x(執行權限)的,加上特殊權限後,顯示為小寫,原本沒有,顯示為大寫)

?7、 文件特定權限

???Chattr +a 文件路徑 :不能刪除,不能改名,不能修改,可以追加
???chattr +i 不能刪除,不能改名,不能修改,不能追加
???lsattr 查看文件特定權限

?8、 權限的優先級

???owner > acl user > group 與 acl group 誰的權限多,誰優先 > other

?9、 umask,用戶新建文件或目錄時的默認權限

???umask值 可以用來保留在創建文件權限
???新建文件權限: 666-umask
???如果所得結果某位存在執行(奇數)權限,則將其權限+1
???新建目錄權限: 777-umask
???非特權用戶umask是 002
???root的umask 是 022
???umask:查看當前用戶的umask值
???umask #:設定當前用戶的umask值,(臨時,當切換用戶再切換回來時會失效)
???umask –S :以u/g/o=rwx顯示當前用戶的umask值,後跟具體值也可以更改用戶umask值
???umask -p:輸出可被調用,
???全局設置: /etc/bashrc
???用戶設置:~/.bashrc

五、 Acl擴展訪問列表

???ACL:Access Control List,實現靈活的權限管理
???除了文件的所有者,所屬組和其他人,可以對更多的用戶設置權限
???centos7中的所有文件系統以及Centos6隨著操作系統安裝是劃分的文件系統均已默認開啟acl。

?1、 centos6當中對新建分區開啟acl的過程

??1. 創建分區

???fdisk /dev/sda
? ???n 回車
? ???回車
????+2G回車
????W回車

??2.同步分區表

???partx -a /dev/sda

??3.創建文件系統

???mkfs.ext4 /dev/sda6

??4.開啟acl支持

???tune2fs -o acl /dev/sda6

??5.查看acl

???tune2fs -l /dev/sda6 |grep option

?2、訪問控制列表的設置

???為多用戶或者組的文件和目錄賦予訪問權限rwx (通過ACL賦予目錄默認x權限,目錄內文件也不會繼承x權限)
???setfacl -m u:用戶名:rwx 目錄路徑 給某個文件或目錄添加一條acl user的權限
???setfacl -Rm g:sales:rwX directory 遞歸
???setfacl -M file.acl file|directory 提前寫一個acl的文件,然後把文件的acl設置賦給該文件或目錄
???setfacl -m g:salesgroup:rw file| directory給某個文件或目錄添加一個acl group的權限
???setfacl -m d:u:wang:rx directory
???setfacl -x u:wang file |directory 刪除一條acl
???setfacl -X file.acl directory刪除賦給某個文件或目錄的acl文件
???setfacl -m m:r-x file |directory 設置上限閥值 或chmod g=r-x
???setfacl -d -m u/g:username/groupname file |directory 設置默認權限
???setfacl -k file |directory 清除默認acl權限
???setfacm -b file |directory 清除所有acl屬性
???mount -o acl /directory

?3、 Getfacl 查看特殊權限

技術分享圖片
???ACL文件上的group權限是mask 值(自定義用戶,自定義組 ,擁有組的最大權限),而非傳統的組權限

?4、 Mask

???mask只影響除所有者和other的之外的人和組的最大權限 Mask需要與用戶的權限進行邏輯與運算後,才能變成有限的 權限(Effective Permission)
???用戶或組的設置必須存在於mask權限設定範圍內才會生效
???setfacl -m mask::rx file
???--set選項會把原有的ACL項都刪除,用新的替代,需要註 意的是一定要包含UGO的設置,不能象-m一樣只是添加 ACL就可以
???? setfacl --set u::rw,u:wang:rw,g::r,o::- file1

?5、 備份和恢復ACL

???getfacl -R /tmp/dir1 > acl.txt 把文件的acl生成一個ACL表文件,保存起來
???setfacl -R -b /tmp/dir1 清空文件上所有的acl屬性
???setfacl --restore acl.txt 加載 acl文件
???getfacl -R /tmp/dir1 查看特殊權限

六、 文本處理工具

?1、 Cat文件查看命令

???cat 選項 文件路徑
????-E: 顯示行結束符
????-n: 對顯示出的每一行進行編號
????-A:顯示所有控制符
????-b:非空行編號
????-s:壓縮連續的空行成一行
????-v 顯示^M
????-T 顯示^I即tab

?2、 more:分頁查看工具

???more 選項 文件路徑
????-d :顯示翻頁及退出提示

?3、 less 一頁一頁地查看文件或STDIN輸出

???查看時有用的命令包括: /
???文本 搜索 文本
???n/N 跳到下一個 或 上一個匹配
???less 命令是man命令使用的分頁器

?4、 head

???head 選項 文件路徑(n代表一個數字)
???? -c n :顯示前n個字節
???? -n n:顯示前n行
???? -n:顯示前n行

?5、 tail

???tail 選項 文件路徑
????-c n:顯示文件倒數n字節
????-n n: 顯示文件內容倒數n行
????-n : 顯示文件內容倒數n行
????-f:動態顯示,實時顯示文件新添加的內容,常用日誌監控

?6、 cut

???cut 選項 文件路徑
????-d : :指定分隔符為:,默認tab
????-f 列數:顯示指定的第幾列,也可以跟多個列數
?????N :第n列
?????1,3,6:離散的多個列
?????1-4:連續的多個列,
????-c n:按字符切割,顯示第n個字符那一列
????--output-delimiter=STRING指定輸出分隔符

?7、 paste 合並兩個文件的內容同時顯示,行號相同的在同一行顯示

???paste 選項 file1 file2
????-d分隔符:指定分隔符,默認用tab
????-s:所有行合成一行顯示
???? Paste file1 file2
????paste -s f1 f2

七、 分析文本的工具

?1、 收集文本統計數據wc

???計數單詞總數、行總數、字節總數和字符總數
???可以對文件或STDIN中的數據運行
???wc 文件路徑:顯示該文件的行數,字數,字符數以及文件名
????-l:只計數行數
????-w:只計數單詞總數
????-c:只計數字節總數
????-m:只計數字符總數

?2、文本排序sort

??把整理過得文本顯示在終端上,不改變原始文件的
??Sort 選項 文件路徑
???-r :執行反方向(由上至下)整理
???-n :執行按數字大小整理
???-f :忽略(fold)字符串中的字符大小寫
???-u :(獨特,unique)刪除輸出中的重復行
???-t c :使用c做為字段界定符
???-k X :按照使用c字符分隔的X列來整理能夠使用多次

?3、 Unip

???從輸入中刪除前後相接的重復的行
???Unip 選項 文件路徑
????-c顯示每行重復出現的次數
????-d: 僅顯示重復過的行
????-u: 僅顯示不曾重復的行 (連續且完全相同方為重復)
???常和sorrt命令一起使用
??? Sort userlist.txt | unip -c

?4、 比較文件diff

???比較兩個文件之間的區別,不同之處
????Diff file1 file2
技術分享圖片
???註明第6行不一樣
???diff 命令的輸出被保存在一種叫做“補丁”的文件中
???使用 -u 選項來輸出“統一的(unified)”diff格式文 件,最適用於補丁文件。
???diff -u foo.conf-broken foo.conf-works > foo.patch
???patch 復制在其它文件中進行的改變(要謹慎使用)
???使用 -b 選項來自動備份改變了的文件
???? patch -b foo.conf-broken foo.patch

八、 文本處理命令

???Grep :文本過濾工具
???Sed:文本編輯工具
???Awk:文本報告生成器

?1、 grep文本過濾工具

???grep,egrep,fgrep(不支持正則表達式搜索)
????egrep=grep -E
???作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查,打印匹配到的行
???模式:由正則表達式字符及文本字符所編寫的過濾條件
????grep root /etc/passwd 在該文件中搜索有root的行並顯示
????grep "$USER" /etc/passwd 使用正則表達式時要用“”或‘’引起來,表示不是匹配這段字符,而是匹配正則表達式的結果,或在表達式前加\也可以
????grep ‘$USER‘ /etc/passwd
????grep `whoami` /etc/passwd 在文本中搜索命令結果的行
???grep 選項 參數 文件路徑
????--color=auto: 對匹配到的文本著色顯示
????-v: 顯示不被pattern匹配到的行
????-i: 忽略字符大小寫
????-n:顯示匹配的行號
????-c: 統計匹配的行數
????-o: 僅顯示匹配到的字符串
????-q: 靜默模式,不輸出任何信息
????-A #: after, 後#行
????-B #: before, 前#行
????-C #:context, 前後各#行
????-e:實現多個選項間的邏輯or關系 grep –e ‘cat ’ -e ‘dog’ file
????- w:匹配整個單詞
????- E:使用ERE
????- F:相當於fgrep,不支持正則表達式

九、 正則表達式

??Regexp正則表達式,:由一類特殊字符及文本字符所編寫的模式,其中有 些字符(元字符)不表示字符字面意義,而表示控制或通配 的功能
??程序支持:grep,sed,awk,vim, less,nginx,varnish等
??正則表達式分為兩類,
???基本正則表達式:BRE
???擴展正則表達式:ERE
元字符分類:字符匹配、匹配次數、位置錨定、分組

?1、 字符匹配

??. 匹配任意單個字符
??[] 匹配指定範圍內的任意單個字符
??[^] 匹配指定範圍外的任意單個字符
??[:alnum:] 字母和數字
??[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
??[:lower:] 小寫字母
??[:upper:] 大寫字母
??[:blank:] 空白字符(空格和制表符)
??[:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣)
??[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
??[:digit:] 十進制數字
??[:xdigit:]十六進制數字
??[:graph:] 可打印的非空白字符
??[:print:] 可打印字符
??[:punct:] 標點符號

?2、 匹配次數:用在指定次數的字符後面,用於指定前面的字符出現的次數

??\ 匹配前面的字符任意次,包括0次
???貪婪模式:盡可能長的匹配
??.
任意長度的任意字符
??\? 匹配其前面的字符0或1次
??\+ 匹配其前面的字符至少1次
??\{n\} 匹配前面的字符n次
??\{m,n\} 匹配前面的字符至少m次,至多n次
??\{,n\} 匹配前面的字符至多n次
??\{n,\} 匹配前面的字符至少n次

?3、 位置錨定:定位出現的位置

??^ 行首錨定,用於模式的最左側
??$ 行尾錨定,用於模式的最右側
??^PATTERN$ 用於模式匹配整行
???^$ 空行
???^[[:space:]]*$ 空白行
??\< 或 \b 詞首錨定,用於單詞模式的左側
??\> 或 \b 詞尾錨定;用於單詞模式的右側
??\ <PATTERN\>匹配整個單詞

?4、 分組

??() 將一個或多個字符捆綁在一起,當作一個整體進 行處理,如:(root)+
??分組括號中的模式匹配到的內容會被正則表達式引擎記錄於 內部的變量中,這些變量的命名方式為: \1, \2, \3, ...
??\1 表示從左側起第一個左括號以及與之匹配右括號之間的 模式所匹配到的字符
??示例:
??? \(string1+\(string2\)\)
???\1 :string1\+\(string2\)

???\2 :string2
??後向引用:引用前面的分組括號中的模式所匹配字符,而非 模式本身
??或者:\|
???示例:a\|b: a或b ?C\|cat: C或cat? \(C\|c\)at:Cat或cat

十、 擴展正則表達式

?1、擴展正則表達式的元字符

??1.字符匹配:

??? . 任意單個字符
???[] 指定範圍的字符
???[^] 不在指定範圍的字符

??2.次數匹配

??? *:匹配前面字符任意次
????: 0或1次 +:1次或多次
???{m}:匹配m次
???{m,n}:至少m,至多n次

??3.位置錨定

   ^ :行首
???$ :行尾
???\<,\b:詞首
???\>, \b :語尾

??4.分組

???()
???後向引用:\1,\2,……

??5.或

???a|b: a 或 b
???C|cat: C 或cat
???(C|c )at:Cat 或cat

十一、 VIM編輯器

??Vi:Visual Interface,文本編輯器
??文本:ASCII, Unicode
??文本編輯種類:
??行編輯器: sed
??全屏編輯器:nano, vi
;???vim - Vi Improved
??其他編輯器
???gedit 一個簡單的圖形編輯器
???gvim 一個Vim編輯器的圖形版本

?1、 vim 選項 文件路徑

??+#: 打開文件後,讓光標處於第#行的行首,
??+默認行尾
??+/PATTERN:打開文件後,直接讓光標處於第一個被 PATTERN匹配到的行的行首
??–b file 二進制方式打開文件
??–d file1 file2… 比較多個文件
??-m file 只讀打開文件

?2、 ex file或vim -e file 直接進入ex模式

??使用vim打開一個文件時,如果文件存在,文件被打開並顯示內容
??如果文件不存在,當編輯後第一次存盤時創建它

?3、 vim的模式

??有三種主要模式

??1. 命令模式:默認模式,移動光標,剪切/粘貼文本

???插入模式:修改編輯文本
???命令行模式:保存退出

??2. 模式轉換

???插入模式 --------> 命令模式
????????ESC
???命令模式 --------> 擴展命令模式
????????:
???擴展命令模式 --------> 命令模式
????????ESC,enter

??3. 命令模式(default):移動光標,復制,剪切,粘貼,刪除、撤銷,重做,搜索,進入其他模式

???移動光標:
????h向左移動一個字符
????l向右移動一個字符
????j向下移動一個字符
????k向上移動一個字符 配合#h,#l,#j,#k可一次性移動#個字符
????w跳到下一個單詞的詞首
????b跳到上一個單詞的詞首
????H跳到當前頁首
????M跳到當前頁中
????L跳到當前頁尾
????gg跳到整個文件的首行
????G跳到整個文件的末行
????^移到非空格開頭的行首
????$移到行尾
????#G跳到指定行,或退出模式下:#
????Ctrl+f: 向文件尾部翻一屏
????Ctrl+b: 向文件首部翻一屏
????Ctrl+d: 向文件尾部翻半屏
????Ctrl+u:向文件首部翻半屏
???? r替換一個字符
???d剪切
???? dd剪切當前行
????#dd剪切#行
????dw剪切光標後一個單詞
????db 剪切光標前一個單詞
????de 剪切當前光標處一個字符
????d^從光標所在處剪切到行首
????d$或D從光標所在處剪切到行尾
???y復制
????yy或Y復制當前行
????#yy復制#行
????yw復制一個單詞
????y^從光標所在處復制到行首
????y$從光標所在處復制到行尾
???? ye復制光標處一個字符
????yw復制光標後一個單詞
????yb復制光標處前一個單詞
???p粘貼
????小寫p當前行向下粘貼或光標所在處向後粘貼
????大寫P當前行向上粘貼或光標所在處向前粘貼
????小寫p:緩沖區存的如果為整行,則粘貼當前光標所在行的下 方;否則,則粘貼至當前光標所在處的後面
????大寫P:緩沖區存的如果為整行,則粘貼當前光標所在行的上 方;否則,則粘貼至當前光標所在處的前面
???x刪除
???? x: 刪除光標處的字符
????#x: 刪除光標處起始的#個字符
????xp: 交換光標所在處的字符及其後面字符的位置
????~:轉換大小寫
????J:刪除當前行後的換行符
???替換
????r: 替換光標所在處的字符
????R:切換成REPLACE模式
??? 撤銷
???? u撤銷最近的更改
????#u撤銷之前多次更改
????U 撤消光標落在這行後所有此行的更改
???重做
????按Ctrl - r重做最後的“撤消”更改
????. 重復前一個操作
????n.重復前一個操作n次
??? 退出
???? ZZ: 保存退出
????ZQ:不保存退出
???改變命令(c,change)
????c: 修改後進入插入模式
????命令模式---> 插入模式
???? c$ :從光標處刪除到行尾
????c^ :從光標處刪除至行首
????c0 :等同於c^
????cb :從光標處刪除到單詞首
????ce :從光標處刪除到單詞尾
????cw :刪除光標處單詞
????#cc:刪除當前行並輸入新內容
????C:等同於c^
???檢索
????\ #:在全文中檢索出當前光標處的單詞並高亮顯示

??4. 擴展命令行模式

???:q 退出
???w 保存
???:q! 強制退出,丟棄做出的修改
???:wq 保存退出
???:x 保存退出
???r filename 讀取另一個文件的內容並將輸出結果寫入文件
???w filename 另存為(確認當前用戶對該路徑中的最後一級目錄有wx權限)
???!command 執行命令,將輸出結果顯示在終端上
???r!command 執行某條命令,在光標所在的當前行向下插入新行並將輸出結果輸入
???.! command 執行某條命令,替換光標所在的當前行並將輸出結果輸入
???搜索
????/關鍵字
?????n向下找
?????N向上找
?????關鍵字
????? n向上找
????? N向下找
???按ESC或enter進入命令模式

??5.插入模式

??常用於編輯文本內容,按ESC鍵退出進入命令模式
??從命令模式進入插入模式
???i: insert, 在光標所在處輸入
???I:在當前光標所在行的行首輸入
???a: append, 在光標所在處後面輸入
???A:在當前光標所在行的行尾輸入
???o: 在當前光標所在行的下方打開一個新行
???O:在當前光標所在行的上方打開一個新行

關於Linux,用戶,組,權限,文本處理工具,正則表達式,vim文本編輯器