第四天:
<:標準輸入
例:bc < f1.txt
將f1文件中的內容輸入到bc中
*標準輸入和標準輸出不可以在同一文件中。
單行重定向:
例:cat >f2.txt
多行重定向:
例:cat <<!
歎號是開始結束符建議用EOF,必須成對,如果EOF前面必須加空格對齊前面加-
例:cat <<EOF >a.txt
將輸入的多行命令輸入到文件中
mail:發郵件:查看郵件
-s:發郵件:mail -s 【標題】 【用戶名】
tr 轉換和刪除字符
tr [OPTION]... SET1 [SET2]
選項:
-c –C --complement:取字符集的補集
-d --delete:刪除所有屬於第一字符集的字符
-s --squeeze-repeats:把連續重複的字符以單獨一個字符表示
-t --truncate-set1:將第一個字符集對應字符轉化爲第二字符集對應的字符
[:alnum:]:字母和數字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符
[:digit:]:數字 [:graph:]:圖形字符 [:lower:]:小寫字母 [:print:]:可打印字符
[:punct:]:標點符號 [:space:]:空白字符 [:upper:]:大寫字母
[:xdigit:]:十六進制字符
tr -d `\r` < win.txt > win2.txt
修改文本格式
|:管道符
例如:who | tr `[:lower:]` `[:upper:]`
將who的輸出輸入到tr中並轉換
管道符左邊必須是標準輸出,要不就在管道左邊加&。老版本就在管道符右邊加2>&1
less :一頁一頁地查看輸入
ls -l /etc | less
mail: 通過電子郵件發送輸入
echo "test email" | mail -s "test" [email protected]
lpr:把輸入發送給打印機
echo "test print" | lpr -P printer_name
示例:
將 /home 裏面的文件打包,但打包的數據不是記錄到文件,而是傳送到 stdout,經過管道後,將 tar -cvf - /home 傳送給後面的 tar -xvf - , 後面的這個 - 則是取前一個命令的 stdout, 因此,就不需要使用臨時file了
tar -cvf - /home | tar -xvf -
命令1 | tee [-a ] 文件名 | 命令2
把命令1的STDOUT保存在文件中,做爲命令2的輸入
-a 追加
使用:
保存不同階段的輸出
複雜管道的故障排除
同時查看和記錄輸出
用戶、組和權限管理:
安全3A:
Authentication:認證
Authorization:授權
Accouting|Audition:審計
getent passwwd:查看所有用戶信息
Linux用戶和組的主要配置文件:
/etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等)
/etc/group:組及其屬性信息
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬性
etc/skel:創建新用戶默認的配置文件
chpasswd :批量修改用戶口令
su:臨時切換用戶
-:永久切換
-c:後邊跟要查看的命令
文件權限
文件:
r 可使用文件查看類工具獲取其內容
w 可修改其內容
x 可以把此文件提請內核啓動爲一個進程
目錄:
r 可以使用ls查看此目錄中文件列表
w 可在此目錄中創建文件,也可刪除此目錄中的文件
x 可以使用ls -l查看此目錄中文件元數據(須配合r),可以cd進入此目錄
X 只給目錄x權限,不給文件x權限
7rwx 6rw- 5r-x 4r--
r=4 w=2 x=1
第五天:
修改文件的默認權限:
umask+default=dir(文件夾)777/file(文件)666
umask值+文件權限值=dir(文件夾)777/file(文件)666
放到用戶家目錄中/.bashrc
umask 0 :表示不檢查 1 將對應有權限位去除
文件默認權限:666-umask,如果結果有奇數,就+1,偶數不變
目錄默認權限:777-umask。
(umask 066;touch f10)臨時建不一樣權限使用
Suid:特權只能作用在二進制文件上
sgid:特權只能作用在二進制的可執行文件中
在此目錄中的新文件的所屬組,自動繼承目錄的所屬組
Sticky:特權只能用於文件夾上
chattr +i 不能刪除,改名,更改
chattr +a 只能追加內容
lsattr 顯示特定屬性
ACL:Access Control List,實現靈活的權限管理
加了ACL之後所屬組權限顯示至不在顯示所屬組權限
getfacl 可看到特殊權限:flags
setfacl -m u:wang:rwx file|directory加權限
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:salesgroup:rw file| directory
setfacl -m d:u:wang:rx directory默認文件夾中新建的文件繼承目錄的ACL權限
setfacl -x u:wang file |directory刪權限
setfacl -X file.acl directory
setfacl -k dir 刪除默認ACL權限
setfacl –b file1清除所有ACL權限
getfacl file1 | setfacl --set-file=- file2 複製file1的acl權限給file2
權限執行順序:先看是不不是所屬人,不是的話就看ACL
在ACL內部先看用戶後看組最後看其餘人
如果一個人屬於多個組,而且多個組都在ACL權限中,則該用戶繼承所有組的累加權限。
文本處理工具和證則表達式:
cat:看文件,不要看二進制文本
-E:顯示行結束符$
-n:可以表明行號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
tac:每行倒序顯示文本文件
rev:同一行倒敘顯示
more:分頁查看文件
-d: 顯示翻頁及退出提示
less:一頁一頁地查看文件或STDIN輸出
head [OPTION]... [FILE]...:查看文本的指定幾行
-c # 指定獲取前#字節
-n # 指定獲取前#行
-# 指定行數
tail [OPTION]... [FILE]...:顯示文件內容
-c # 指定獲取後#字節
-n # 指定獲取後#行
-# 同上
-f 跟蹤顯示文件fd新追加的內容,常用日誌監控
相當於 --follow=descriptor
-F 跟蹤文件名,相當於--follow=name --retry
tailf 類似tail –f,當文件不增長時並不訪問文件
cat /dev/urandom |tr -dc '[:a:]' | head -c8:隨機取字節
cut:篩選
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定輸出分隔符
例如:取ifconfig中的ens33的IP地址
ifconfig ens33 |head -2 |tail -1 |tr -s " " : |cut -d: -f3
paste 合併兩個文件同行號的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示
wc:收集文本統計數據
-l 只計數行數
-w 只計數單詞總數
-c 只計數字節總數
-m 只計數字符總數
-L 顯示文件中最長行的長度
sort:把整理過的文本顯示在STDOUT,不改變原始文件
-r 執行反方向(由上至下)整理
-R 隨機排序
-n 執行按數字大小整理
-f 選項忽略(fold)字符串中的字符大小寫
-u 選項(獨特,unique)刪除輸出中的重複行
-t c 選項使用c做爲字段界定符
-k X 選項按照使用c字符分隔的X列來整理能夠使用多次
uniq命令:從輸入中刪除前後相接的重複的行
-c: 顯示每行重複出現的次數
-d: 僅顯示重複過的行
-u: 僅顯示不曾重複的行
注:連續且完全相同方爲重複
diff:命令的輸出被保存在一種叫做“補丁”的文件中(不可以看二進制文本)
-u 選項來輸出“統一的(unified)”diff格式文件,最適用於補丁文件
patch:複製在其它文件中進行的改變(要謹慎使用)
-b 選項來自動備份改變了的文件
cmp:和diff效果一樣,但可以看二進制文件
grep:文本過濾(模式:pattern)工具;文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行
grep, egrep, fgrep(不支持正則表達式搜索)
grep [OPTIONS] PATTERN [FILE...]
--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,不支持正則表達式
-f file: 根據模式文件處理
sed:stream editor,文本編輯工具
awk:Linux上的實現gawk,文本報告生成器
*正則表達式:
基本正則表達式:BRE
擴展正則表達式:ERE
例如:grep -E
元字符分類:字符匹配、匹配次數、位置錨定、分組
字符匹配:
. 匹配任意單個字符
[] 匹配指定範圍內的任意單個字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定範圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母 [:upper:] 大寫字母
[:blank:] 空白字符(空格和製表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
[:digit:] 十進制數字 [:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
匹配次數:用在要指定次數的字符後面,用於指定前面的字符要出現的次數
* 匹配前面的字符任意次,包括0次
貪婪模式:儘可能長的匹配
.* 任意長度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
位置錨定:定位出現的位置
^ 行首錨定,用於模式的最左側
$ 行尾錨定,用於模式的最右側
^PATTERN$ 用於模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 詞首錨定,用於單詞模式的左側
\> 或 \b 詞尾錨定,用於單詞模式的右側
\<PATTERN\> 匹配整個單詞
分組:\(\) 將一個或多個字符捆綁在一起,當作一個整體處理,如:\(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
egrep = grep -E:擴展的正則表達式
字符匹配:
. 任意單個字符
[] 指定範圍的字符
[^] 不在指定範圍的字符
次數匹配:
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m,至多n次
位置錨定:
^ 行首
$ 行尾
\<, \b 語首
\>, \b 語尾
分組:
()
後向引用:\1, \2, ...
或者:
a|b a或b
C|cat C或cat
(C|c)at Cat或cat
第六天:
egrep = grep -E:擴展的正則表達式
字符匹配:
. 任意單個字符
[] 指定範圍的字符
[^] 不在指定範圍的字符
次數匹配:
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m,至多n次
位置錨定:
^ 行首
$ 行尾
\<, \b 語首
\>, \b 語尾
分組:
()
後向引用:\1, \2, ...
或者:
a|b a或b
C|cat C或cat
(C|c)at Cat或cat
vim:文本編輯器
文本編輯種類:
行編輯器: sed
全屏編輯器:nano, vi
vim - Vi Improved
其他編輯器:
gedit 一個簡單的圖形編輯器
gvim 一個Vim編輯器的圖形版本
+# 打開文件後,讓光標處於第#行的行首,+默認行尾
+/PATTERN 讓光標處於第一個被PATTERN匹配到的行的行首
–b file 二進制方式打開文件
–d file1 file2… 比較多個文件
-m file 只讀打開文件
vim -e file 或 ex file 直接進入ex模式
命令模式=>i=>插入模式(a(行首),A(行尾),O(下一行),o(上一行))
i insert, 在光標所在處輸入
I 在當前光標所在行的行首輸入
a append, 在光標所在處後面輸入
A 在當前光標所在行的行尾輸入
o 在當前光標所在行的下方打開一個新行
O 在當前光標所在行的上方打開一個新行
插入模式 --------> 命令模式
ESC
命令模式 --------> 擴展命令模式
:
擴展命令模式 --------> 命令模式
ESC,enter
擴展命令模式:
:q 退出
:q! 強制退出,丟棄做出的修改
:wq 保存退出
:x 保存退出
命令模式:
ZZ 保存退出
ZQ 不保存退出
常見命令
w 寫(存)磁盤文件
wq 寫入並退出
x 寫入並退出
q 退出
q! 不存盤退出,即使更改都將丟失
r filename 讀文件內容到當前文件中
w filename 將當前文件內容寫入另一個文件
!command 執行命令
r!command 讀入命令的輸出
字符間跳轉:
h: 左 l: 右 j: 下 k: 上
#COMMAND:跳轉由#指定的個數的字符
單詞間跳轉:
w:下一個單詞的詞首
e:當前或下一單詞的詞尾
b:當前或前一個單詞的詞首
#COMMAND:由#指定一次跳轉的單詞數
當前頁跳轉:
H:頁首 M:頁中間行 L:頁底
zt:將光標所在當前行移到屏幕頂端
zz:將光標所在當前行移到屏幕中間
zb:將光標所在當前行移到屏幕底端
行首行尾跳轉:
^ 跳轉至行首的第一個非空白字符
0 跳轉至行首
$ 跳轉至行尾
行間移動:
#G 或者擴展命令模式下:# 跳轉至由第#行
G 最後一行
1G, gg 第一行
句間移動:
) 下一句 ( 上一句
段落間移動:
} 下一段 { 上一段
字符編輯:
x 刪除光標處的字符
#x 刪除光標處起始的#個字符
xp 交換光標所在處的字符及其後面字符的位置
~ 轉換大小寫
J 刪除當前行後的換行符
替換命令(r, replace)
r 替換光標所在處的字符
R 切換成REPLACE模式
刪除命令:
d 刪除命令,可結合光標跳轉字符,實現範圍刪除
d$ 刪除到行尾
d^ 刪除到非空行首
d0 刪除到行首
dw 刪除下一個整個單詞
de
db
#COMMAND
dd:刪除光標所在的行
#dd 多行刪除
D:從當前光標位置一直刪除到行尾,等同於d$
複製命令(y, yank):
y 複製,行爲相似於d命令
y$
y0
y^
ye
yw
yb
#COMMAND
yy:複製行
#yy 複製多行
Y:複製整行
粘貼命令(p, paste):
p 緩衝區存的如果爲整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的後面
P 緩衝區存的如果爲整行,則粘貼當前光標所在行的上方;否則,則粘貼至當前光標所在處的前面
改變命令(c, change)
c: 修改後切換成插入模式
cc:刪除當前行並輸入新內容,相當於S
#cc
C:刪除當前光標到行尾,並切換成插入模式
常見Command
y 複製、d 刪除、gU 變大寫、gu 變小寫
例如: 0y$ 命令
0 → 先到行頭
y → 從這裏開始拷貝
$ → 拷貝到本行最後一個字符
di" 光標在”“之間,則刪除”“之間的內容
yi( 光標在()之間,則複製()之間的內容
vi[ 光標在[]之間,則選中[]之間的內容
dtx 刪除字符直到遇見光標之後的第一個 x 字符
ytx 複製字符直到遇見光標之後的第一個 x 字符
可視化模式:
允許選擇的文本塊
v 面向字符
V 面向行
ctrl-v 面向塊
可視化鍵可用於與移動鍵結合使用
w ) } 箭頭等
突出顯示的文字可被刪除,複製,變更,過濾,搜索,替換等
多文件模式:
vim FILE1 FILE2 FILE3 ...
:next 下一個
:prev 前一個
:first 第一個
:last 最後一個
:wall 保存所有
:qall 退出所有
:wqall
多文件分割
vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O: 垂直分割
在窗口間切換:Ctrl+w, Arrow
單文件窗口分割
Ctrl+w,s:split, 水平分割
Ctrl+w,v:vertical, 垂直分割
ctrl+w,q:取消相鄰窗口
ctrl+w,o:取消全部窗口
:wqall 退出
擴展模式:當前vim進程有效
配置文件:永久有效
全局:/etc/vimrc
個人:~/.vimrc
(1) 行號
顯示:set number,簡寫 set nu
取消顯示:set nonumber, 簡寫 set nonu
(2) 忽略字符的大小寫
啓用:set ignorecase,簡寫 set ic
不忽略:set noic
(3) 自動縮進
啓用:set autoindent,簡寫 set ai
禁用:set noai
(4) 複製保留格式
啓用:set paste
禁用:set nopaste
(5) 智能縮進
啓用:smartindent ,簡寫 set si
禁用:set nosi
(6) 高亮搜索
啓用:set hlsearch
禁用:set nohlsearch
(7) 語法高亮
啓用:syntax on
禁用:syntax off
(8) 文件格式
啓用windows格式:set fileformat=dos
啓用unix格式:set fileformat=unix
簡寫 set ff=dos|unix
(9) 設置文本寬度
set textwidth=65 (vim only)
set wrapmargin=15
(10) 設置光標所在行的標識線
啓用:set cursorline,簡寫 set cul
禁用:set no cursorline
(11) 顯示Tab和換行符 ^I 和$顯示
啓用:set list
禁用:set nolist
bash -n:檢查語法錯誤
bash -x:顯示執行過程
Shell中變量命名法則:
1、不能使程序中的保留字:例如if, for
2、只能使用數字、字母及下劃線,且不能以數字開頭
3、見名知義
4、統一命名規則:駝峯命名法
Shell中命名建議規則:
1、變量名大寫
2、局部變量小寫
3、函數名小寫
4、用英文名字,並體現出實際作用
變量賦值:name=‘value’
可以使用引用value
(1) 可以是直接字串:name=“root"
(2) 變量引用:name="$USER"
(3) 命令引用:name=`COMMAND`
name=$(COMMAND)
unset:銷燬變量
變量聲明、賦值:
export name=VALUE
declare -x name=VALUE
顯示所有環境變量:
env
printenv
export
declare -x
刪除變量:
unset name
bash內建的環境變量
PATH
SHELL
USER
UID
HOME
PWD
SHLVL
LANG
HOSTNAME
HISTSIZE
_ 下劃線
進程使用退出狀態來報告成功或失敗
0 代表成功,1-255代表失敗
$? 變量保存最近的命令退出狀態
bash中的算術運算:help let
+, -, *, /, %取模(取餘), **(乘方),乘法符號有些場景中需要轉義
實現算術運算:
(1) let var=算術表達式
(2) var=$[算術表達式]
(3) var=$((算術表達式))
(4) var=$(expr arg1 arg2 arg3 ...)
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc
增強型賦值:
+=, -=, *=, /=, %=