介紹課程:
中級:
初級:系統基礎
中級:系統管理、服務安全及服務管理、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的哲學思想:
一、一切皆文件
把幾乎全部資源,包括硬件設備都組織爲文件格式
二、由衆多單一目的的小程序組成;一個程序只實現一個功能,並且要作好;組合小程序完成複雜任務;
三、儘可能避免跟用戶交互;
目標:實現腳本編程,以自動完成某些功能;
四、使用純文本文件保存配置信息;
目標:一款合用的文本編輯器即能完成系統配置工做
如何獲取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
一、文件名嚴格區分大小寫
二、文件名可以使用除/之外的任意字符,不建議使用特殊字符:
/:根目錄,路徑分隔符
三、文件名長度最長不能超過255個字符
四、全部以.開始的文件都是隱藏文件
路徑:
絕對路徑:從根目錄起始的路徑
相對路徑:當前位置起始的路徑
當前位置的表示方式:
./
省略上述符號
..:上級目錄
當前目錄: 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
外部命令:
一、COMMAND --help COMMAND -h
二、使用手冊(manual)
man COMMAND
三、信息頁
info COMMAND
四、程序自身的幫助文檔
README
INSTALL
ChangeLog
五、程序官方文檔
官方站點:documentation
六、發行版的官方文檔
七、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,$*,$@,$#
本地變量:
變量賦值: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個字符串
$@:傳遞給腳本的全部參數,把每一個參數當作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:全局替換.默認狀況下,每行只替換第一次出現
查找替換中的分隔符/可替換爲其餘字符,例如
s@@@
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