1. 程式人生 > >Linux第二周筆記

Linux第二周筆記

suid con 描述 scrip 示例 code 所有 mod zcat

擴展命令提示符

按“:”進入Ex模式
w:寫(存)磁盤文件
wq 寫入並退出
x 寫入並退出
q 退出
q!不存盤退出,即使更改都將丟失
r filename 讀文件內容到當前文件中、
w filename 將當前文件寫入另一個文件
!commmand 執行命令
r!commmand 讀入命令的輸入

              命令模式光標跳轉

字符跳轉:
h:左;l:右;j:下;k:上
#COMMAND 跳轉由#制定的個數的字符
單詞間跳轉:
w:下個單詞的詞首
e:當前或下一單詞的詞首
b:當前或前一個單詞的詞首
#COMMAND:由#指定一次跳轉的單詞數
當前頁跳轉:
H:頁首 M:頁中間行 L:頁底
zt:將光標所在行移到屏幕頂端

zz:將光標所在當前行移到屏幕中間
zb:將光標所在當前行移到屏幕低端

                     命令模式翻屏操作

                      命令模式操作

字符編輯:
x:刪除光標處的字符
#x: 刪除光標處的#個字符
xp:交換光標處所在處的字符及其後面的位置
~ 轉換大小寫
j:刪除當前行後的換行符
替換命令(r,replace)
r:替換光標所在處的字符
R:切換成REPLACE模式

                        shell腳本編程

變量賦值:name=‘value‘
變量引用:${name}或者$name "" 弱引用,其中的變量會被替換為變量值

‘‘強引用,其中的變量引用不會被替換為變量值,而保持原來字符串
顯示已定義的所有變量:set
刪除變量:unset name

                        bash的數值測試

-v 變量VAR是否設置
數值測試:
-gt 是否大於
-ge 是否大於等於
-eq 是否等於
-ne 是否不等於
-lt 是否小於
-le 是否小於等於

                       bash的字符串測試

= 是否等於

ascii碼是否大於ascii碼
<是否小於
!=是否不等於
=~左側字符串是否能夠被右側的PATTERN所匹配 一般用於[[]]中;擴展的正則表達式
-z “string” 字符串是否為空 空為真,不空為假

-n “string”字符串是否不空,不空為真,空為假

                        bash的文件測試

存在性測試
-e FILE:文件存在性測試,存在為真,否則為假
-a FILE:同-e
存在性及類別測試
-b FILE:是否存在且為塊設備文件
-c FILE:是否存在且為字符設備文件
-d FILE:是否存在且為目錄文件
-f FILE:是否存在且為普通文件
-h FILE 或-L FILE:存在且為符號鏈接文件
-p FILE:是否存在且為命名管道文件
-S FILE:是否存在且為套接文件

                       bash的文件權限測試

文件權限測試:
-r FILE:是否存在且可讀
-w FILE:是否存在且可寫
-x FILE:是否存在且可執行
文件特殊權限測試
-u FILE:是否存在且擁有suid權限
-g FILE:是否存在且擁有sgid權限
-k FILE:是否存在且擁有sticky權限

                       bash的文件屬性測試

文件大小測試:-s FILE:是否存在且非空
文件是否打開:
-t fd:fd 文件描述符是否在某終端已經打開
-N FILE:文件自從上一次被讀取之後是否被修改過
-O FILE:當前有效用戶是否為文件屬主
-G FILE:當前有效用戶是否為文件屬組
雙目測試:
FILE1 -ef FILE2:FILE1是否是FILE2的硬鏈接
FILE1 -nt FILE2:FILE1是否新於FILE2
FILE1 -ot FILE2:FILE1是否舊於FILE2
-a:並且 -o:或者
&& 並且,短路與,代表性的AND THEN
|| 或者,短路或,代表性的OR ELSE
! COMMAND 非

                    使用read命令來接受輸入

-p 指定要顯示的提示
-s 靜默輸入,一般用於密碼
-n N 制定輸入的字符長度N
-d ‘字符’輸入結束符
-t N TIMEOUT為N 秒

                    條件選擇if語句

if語句可嵌套
單分支:
if 判斷條件;then
fi
雙分支
if判斷條件;then
條件為真的分支代碼
else
條件為假的分支代碼
fi
多分支
if判斷條件1;then
條件1為真的分支代碼
elif 判斷條件2;then
條件2為真的分支代碼
elif 判斷條件3
條件3為真的分支代碼
else
以上都為假的分支代碼
fi

                條件判斷:case語句

case 變量引用 in
PAT1)
分支1
..
‘‘
PAT2)
分支2
..
‘‘

...
*)
默認分支
..
‘‘
esac

                 防止擴展

反斜線()會使隨後的字符按願意解釋
加引號來防止擴展
單引號(‘ ’)防止所有擴展
雙引號(“ ”)也可防止擴展,但以下情況例外:
$(美元符號) 變量擴展
``(反引號) 命令替換
(反斜線) 禁止單個字符擴展
!(嘆號) 歷史命令替換

                  bash的配置文件

分為兩類:全局配置和個人配置
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc

                   shell登錄兩種方式

交互式登錄:
(1)直接通過終端輸入賬號密碼登陸
(2)使用“su -UserName”切換的用戶

  • 執行順序:/etc/profile -->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc-->/etc/bashrc

非交互式登錄
(1)su UserName
(2)圖形界面下打開的終端
(3)執行腳本
(4)任何其他的bash實例
執行順序:/etc/profile.d/*.sh-->/etc/bashrc-->~/.bashrc

類型分為兩類
Profile類和Bashrc類

Profile類:為交互式登錄的shell提供配置
全局:/etc/profile, /etc/profile.d/*.sh
個人:~/.bash_profile
功能和用處:
(1)用於定義環境變量
(2)運行命令或腳本

Bashrc類
bashrc類:為非交互式和交互式登錄的shell提供配置
全局::/etc/bashrc
個人::~/.bashrc
功能和用處
(1):定義命令別名和函數
(2):定義本地變量

                            編輯配置文件生效

修改profile和bashrc文件後需生效
兩種方法:
1重新啟動shell進程
2.或source
例如:.~/.bashrc

                            bash推出任務

保存在~/.bash_logout文件中(用戶)
在推出登錄shell時運行
用於: 1.創建自動備份 2.清除臨時文件

                            set命令

$-變量
h:打開這個選項後,shell會將命令所在的路徑hash下來,避免每次都要查詢。通過set+h選項關閉
i:包含這個選項說明當前的shell是一個交互式的shell。所謂的交互式shell,在腳本中,i選項是關閉的。
m:打開監控模式,就可以通過Job control來控制進程的停止、繼續,後臺或者前臺執行等。
B:大括號擴展
H:可以展開歷史列表中的命令,可以通過!來完成
set命令
-u 在擴展一個沒有設置的變量時,顯示錯誤信息
-e 如果一個命令返回一個非0推出狀態值(失敗)就退出

                                                            文件查找

文件查找:locate,find
非實時查找:locate
實時查找:find

locate:查詢系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
依賴於實現構建的索引:是在系統較為空閑時自動進行,管理員手動更新數據庫
命令:
-i 不區分大小寫的搜索
-n N 只列舉前N個匹配項目
-r
使用基本正則表達式

find:實時查找工具,通過遍歷指定路徑完成文件查找
查找條件
指搜索層級
-maxdepth level 最大搜索目錄深度,指定目錄下的文件為第1級
-mindepth level 最小搜索目錄深度
先處理目錄內的文件,在處理指定目錄: -depth
根據文件名和 incode查找
-name “文件名稱“:支持使用glob*,?,[],[^]
-iname “文件名稱”:不區分字母大小寫
-inum n 按incode號查找
-samefile name 相同incode號的文件
-links n 鏈接數為n的文件
-regex "PATTERN":以PATTERN匹配整個文件路徑,而非文件名稱

                                             查找條件

根據主、屬組查找
-user username :查找屬主為指定用戶(UID)的文件
-group groupname:查找屬組為指定組(GID)的文件
-uid userid :查找屬主為指定的UID號的文件
-gid geoupid:查找屬組為指定為的GID號的文件
-nouser 查找沒有屬主的文件
-nogroup:查找沒有屬組的文件

根據文件類型查找
-type TYPE
f:普通文件
d:目錄文件
l:符號鏈接文件
s:套接字文件
b:塊設備文件
p:管道文件
空文件或目錄
-empty
示例:find/app -type d -empty

組合條件:
與:-a
或:-o
非:-not
排除目:-path
根據文件大小來查找:-size[+|-]#UNIT 常用單位:k,M,G,c(byte)

根據時間戳:
以天為單位
-atime[+|-]#
-mtime
-ctime
以分鐘為單位
-amin
-mmin
-cmin

根據權限查找:
-perm [/]MODE
MODE:精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,
-MODE:每一類對象都必須同時擁有指定權限,與關系
0表示不關註
find -perm 755 會匹配權限模式恰好是755的文件
只要當任意人有寫權限時,find -perm +222就會匹配
只有當每個人都有寫權限時,find -perm -222才會匹配
只有當其它人(other)有寫權限時,find -perm -002才會匹配

-print:默認的處理動作,顯示至屏幕
-ls:類似與對查找到的文件執行"ls-l"命令
-delete:刪除查找到的文件
-fls file:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND{}\;對查找到的每個文件執行由COMMAND指定的命令,對於每個文件執行命令之前,都會交互式要求用戶確認
-exec COMMAND{}\;對查找到的每個文件執行由COMMAND指定的命令
{}:用於引用查找到的文件名稱自身

                                               參數替換xargs

                                              壓縮、解壓縮及歸檔工具

compress/uncompress
compress[-dfvcVr] [-b maxbits] [file...]
-d 解壓縮,相當於uncompress
-c 結果輸出至標準輸出,不刪除原文件
-v 顯示詳情
uncompress file.Z 解壓縮
zcat file.Z 不顯示解壓縮的前提下查看文本文件內容

gzip/gunzip
gzip [OPPTION]..FILE
-d 解壓縮,
-c 結果輸出至標準輸出,保留原文件不改變
-# 指定壓縮比,#取值為1-9,值越大壓縮比越大
gunzip file.gz 解壓縮
zcat file.gz 不顯示解壓縮的前提下查看文本文件內容

bzip2/bunzip2/bzcat
bzip2[OPTION]...FILE...
-k 保持原文件
-d 解壓縮
-# 1-9,壓縮比,默認為9
bunzip2 file.bz2 解壓縮
bzcat file.bz2 不顯示解壓縮的前提下查看文本文件的內容

xz/unxz/xzcat
xz [OPTION]...FILE...
-k 保留原文件
-d 解壓縮
-# 壓縮比,取值1-9,默認為6
unxz file.xz 解壓縮
xzcat file.xz 不顯示壓縮的前提下查看文本文件內容

zip/unzip
打包壓縮
zip -r /backup/sysconfig /etc/sysconfig/
解包解壓縮
unzip sysconfig.zip
cat /var/log/messages | zip messages -
unzip -p message > message

                  tar工具

tar:磁帶歸檔的縮寫
tar [OPTION]
(1)創建歸檔,保留權限
tar -cpvf /PATH/FILE.tar FILE...
(2)追加文檔至歸檔:(不支持對壓縮文件追加)
tar -r -f /PATH/FILE.tar FILE
(3)查看歸檔文件中的文件列表
tar -t -f /PATH/FILE.tar
(4)展開歸檔
tar -x -f /PATH/FILE.tar
tar -x -f /PATH/FILE.tar -C /PATH/
(5)結合壓縮工具實現:歸檔並壓縮
-j:bzip2,-z:gzip,-J:xz

-exclude 排除文件
-T 選項指定輸入文件 -X 選項指定包含要排除的文件列表
split:分割一個文件為多個文件

合並:
cat mybackup-parts*>mybackup.tar.gz

                         cpio

功能:復制文件從或到歸檔
cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以".cpio"或".tar"結尾的文件
cpio[選項] >文件名或者設備名
cpio[選項] < 文件名或者設備名
選項
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-O filename 輸出到指定的歸檔文件名
-A 向已存在的歸檔文件中追加文件
-i 解包,將打包文件解壓獲獎設備上的備份還原到系統
-I filename 對制定的歸檔文件名解壓
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-F filename 使用指定的文件名替代標準輸入或輸出
-d 解包生成目錄,在cpio還原時,自動的建立目錄
-v 顯示打包過程中的文件名稱

                            文本三劍客sed

sed[option]...‘script‘ inputfile
常用選項:
-n 不輸出模式空間內容到屏幕,即不自動打印
-e 多點編輯
-f /PATH/SCRIP_FILE 從指定文件中讀取編輯腳本
-r 支持使用擴展正則表達式
-i.bak 備份文件並原處編輯
script
‘地址命令’

                             sed工具

地址定界
(1)不給地址:對全文進行處理
(2)單地址:
#:指定的行,$:最後一行
/pattern/:被此處模式所能夠匹配到的每一行
(3)地址範圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4)~:步進
1~2 奇數行
2~2 偶數行
編輯命令
d 刪除模式空間匹配的行,並立即啟用下一輪循環
p 打印當前模式空間內容,追加到默認輸出之後
a[]text 在指定行後面追加文本,支持使用\n實現多行追加
i[]text 在行前面插入文本
c[]text 替換行為單行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 讀取指定文件的文本至模式空間中匹配到的行後
= 為模式空間中的行打印行號
! 模式空間中匹配行取反處理
s/// 查找替換,支持使用其他分隔符,s@@@,s###
替換標記
g 行內全局替換
p 顯示替換成功的行
w /PATH/FILE 將替換成功的行保存至文件中

Linux第二周筆記