終端:
使用者與主機交互,必然用到的裝置;
實體終端:直接存取本機的顯示器和鍵盤裝置;/dev/console
#虛擬終端:附加在物理終端機之上的以軟體方式虛擬實作的終端,CentOS 6預設啟動6個虛擬終端
#Ctrl+Alt+F#: [1,6]
#圖形終端:附加在實體終端之上的以軟體方式虛擬實現的終端,但額外會提供桌面環境;
設備文件路徑:/dev/tty
#模擬終端:
#圖形介面下開啟的命令列接口,基於ssh協定或telnet協定等遠端開啟的介面
「裝置檔案:/dev/pts/# [0,oo)
查看目前的終端設備: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
##[root@localhost ~ ]
#[root@localhost ~]:PS1
#prompt:
管理員:
#一般使用者:$
##輸入命令,回車:
提請shell程式找到鍵入命令所對應的可執行程式或程式碼,並由其分析後提交給內核分配資源將其運行起來;
表現為一個或多個流程;
#在shell中可執行的命令有兩類:
內建指令:由shell自帶的,而且透過某指令形式提供;
外部指令:在目前系統的某一檔案系統路徑下有對應的可執行程式檔案;
which,whereis
###############區別內部或外部命令:### ########## type COMMAND###################執行指令:############指令格式:## ##########COMMAND [OPTIONS...] [ARGUMENTS...]#############選項:用於啟用或關閉指令的某個或某些功能;############短選項:-c, 例如:-l, -h#############多個短選項可命令使用,例如-l - h, 可寫-lh;############長選項:--word,例如:--長, --human-readable###########參數:指令的作用對象############向指令提供資料;###################:######### ####1、多選項,以及多參數和指令之間都應該使用空白字元分隔####
2、取消指令執行:Ctrl+c
#檔案系統:
## C:\Program files\office11\word\word.exe
#/etc/sysconfig/network-scripts/ifcfg-eth0
#檔案有兩類資料:
元資料:metadata
資料:data
1、檔案名稱嚴格區分字元大小寫;file1, File1, FILE1是不同的檔案;
2、檔案名稱可使用除/以外的任意字符,不建議使用特殊字符;
/: 根目錄,路徑分隔符號;
3.文件名長度最長不能超過255個字元;
4、所以.開頭的文件,皆為隱藏文件;
路徑:
絕對路徑:從根目錄起始的路徑;
相對路徑:對目前位置起始的路徑;
目前位置的表示方式:
#(1) ./: ./sysconfig/network-scripts
#(2) 省略上述符號: sysconfig/network-scripts
#..:表示目前目錄的上一層目錄
目前目錄:current directory, 也稱為working directory;
pwd: printing working directory
LSB: Linux Standard Base
#指令總結:ls, cd, type, tty, cat , which, whereis, pwd, echo
#指令:
(1) 檔案系統相關:
目錄管理
檔案管理
#檔案檢視
檔案編輯
(2) 系統管理相關:
#Linux指令幫助的取得
外部指令:都有一個可執行程序,位於檔案系統某目錄下;
#which, whereis
##shell程式搜尋執行程式檔案的路徑定義在PATH環境變數中;
## echo $PATH
注意:由左至右
#格式:COMMAND [OPTIONS...] [ARGUMENTS...]
內部指令:
##外部指令:
(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開頭的指令;
!!: 上一條指令
外部指令幫助取得:
#(2) man COMMAND
手冊頁:/usr/share/man
man1 ... man8
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, ^N, e, ^E or j or ^J: 向檔案尾部翻一行;
y or ^Y or ^P or k or ^K:向檔案首部翻一行;
q: 退出;
#:跳到第#行;
1G: 回到檔案首部
G:翻至檔案尾
#文字搜尋:
/KEYWORD:
以KEYWORD指定的字串為關鍵字,從目前位置搜尋檔案尾部;不區分字元大小寫;
n: 下一個
###N:上一個############?KEYWORD:############以KEYWORD指定的字串為關鍵字,從目前位置向文件首部搜尋;不區分字元大小寫;############n: 跟搜尋指令同方向,下一個###
N:跟搜尋指令反方向,上一個
(3) info
#info COMMAND
(4) 程式本身的說明文件
/usr/share/doc/ COMMAND-VERSION
(5) 程式官方文件
(6) 發行版的官方文件
#(7) Google
(8) slideshare
#基礎指令:
##date:
date [OPTION]... [+FORMAT]:顯示
FORMAT:格式符號
##%D
%F
%T
date [MMDDhhmm[[CC] YY][.ss]]:設定
#MM: 月分
#DD:幾個編號
#DD:幾個編號 1
##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: 檔案的owner
右rootroot : 檔案的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)
/etc, /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:系統上執行的服務用到的資料;
/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, /etc/DIRECTORY, /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):
(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, /tmp/b
/tmp/{tom,jerry}/hi = /tmp/tom/hi, / tmp/jerry/hi
(5) 指令的執行結果狀態
成功
失敗
bash使用特殊變數$?儲存最近一條指令的執行狀態結果:
0:成功
1-255:失敗
#程式執行有兩類結果:
程式的回傳值;
程式的執行狀態結果;
#目錄管理類別指令:
cd, pwd, ls
mkdir, rmdir, tree
mkdir [options] /path/to/somewhere
-p: 存在於不報錯,且可自動建立所需的各目錄;
-v : 顯示詳細資料
-m MODE: 建立目錄時直接指定權限;
##tree:
#-d: 只顯示目錄
-L level:指定顯示的層級數目
-P pattern: 只顯示由指定pattern匹配到的路徑;
#rmdir:刪除空白目錄
##rmdir [OPTION ]... DIRECTORY...
-v: 顯示過程;
文字檔案檢視類別指令:
cat, tac
more, less, tail, head
more
more [OPTIONS...] FILE...
#-d: 顯示翻頁及退出提示
less
less [OPTIONS...] 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: 若檔案不存,則不予建立
檔案系統:
##boot, bin, sbin, lib, lib64, dev, home, root, mnt, media, etc, proc, sys
usr
#var
bash的基礎特性:
指令補全
路徑補全
命令歷史
#命令列展開:
~, {}
指令的狀態結果
#成功:0
## 失敗: 1-255
目錄管理:mkdir, rmdir
檔案檢視:more, less, tail, head
時間戳管理:touch
##-a, -m, -t
###-c############檔案管理:###
cp, mv, rm
#複製指令:cp
cp [ OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
cp SRC DEST
# SRC是檔案:
##如果存在新目標並將SRC中內容填入DEST;
如果目錄存在:
如果DEST是檔案:將SRC中的內容覆寫至在DEST中;
此時建議為cp指令使用-i選項;
#如果DEST是目錄:DEST下新建與原始檔案同名的文件,並將SRC內容填入新文件中;
cp SRC... DEST
SRC...:多重檔案
DEST必須存在,且為目錄,其它情況皆會出錯;
cp SRC DEST
## cp SRC DEST
cp SRC DEST
cp SRC DEST
SRC是目錄:
此時使用選項:-r
如果DEST不存在:則建立指定目錄,複製SRC目錄中所有檔案至DEST中;
如果DEST存在:
如果DEST是檔案:錯誤回報
如果DEST是目錄:
## 常用選項:
##-i:互動式
-r, -R: 遞歸複製目錄及內部的所有內容;
-a: 歸檔,相當於-dR -- preserv=all
-d:--no-dereference --preserv=links
#--preserv[=ATTR_LIST]
mode: 權限
ownership: 屬主屬群組
##timestamp:#of##timest
links
xattr
#context
context
all
#context
#' ##
-p: --preserv=mode,ownership,timestamp
#-v: --verbose
## -f: --force
mv: move,移動檔案
mv [OPTION]... [-T] SOURCE DEST# mvv [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
Note:編輯配置給出的新配置不會立即生效;
bash進程重新讀取設定檔:
## source /path/to/config_file
. /path/to/config_file
##撤銷別名:unalias
unalias [-a] name [name ...]
#Note: 如果別名同原指令的名稱,則如果要執行原始命令,可使用"\COMMAND";
#2、glob (globbing)
# bash中用來實作檔名「通配」
通配符:*, ?, []
(1) *
任意長度的任一字元
a*b:
aab, ab, a123b,
abc
(2) ?
任一單一字元
a?b:
#aab
ab, a12b, abc
(3) []
#符合指定範圍內的任意單一字元
#[0-9]
[a-z]:不區分字元大小寫
( 4) [^]
符合指定範圍外的任意單一字元
[^0-9]
#專用字元集合:
[: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 (檔案描述子)##################標準輸入: keyborad, 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 |...
#Note:最後一個指令會在目前shell進程的子shell進程中執行;
tee指令:
#tee [OPTION]... [FILE]...
#文字處理工具:wc, cut, sort, uniq
#wc指令:
wc [OPTION]... [FILE]...
-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: 只顯示不曾重複的行;
###Note: 連續且完全相同方為重複###################使用者與群組管理############資源分派:###
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:password: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/shells檔案中;
-G GROUP1[,GROUP2,... [,GROUPN]]]:為使用者指明附加群組;群組必須事先存在;
-r: 建立系統使用者
##CentOS 6 : ID<500
CentOS 7: ID<1000
預設值設定:/etc/default/ useradd檔案中
useradd -D
#-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 [options...] [-] [user [args...]]
切換使用者的方式:
su UserName:非登入式切換,即不會讀取目標使用者的設定檔;
su - UserName:登入式切換,會讀取目標使用者的設定檔;完全切換;
#Note:root su至其他使用者無須密碼;非root用戶切換時需要密碼;
換個身分執行指令:
su [-] UserName -c 'COMMAND'
選項:
#-l:「su -l UserName」相當於「su - UserName」
使用者屬性修改:usermod
usermod [OPTION] login
-u UID: 新UID
-g GID: 新基本群組
-G 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
#Note: /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 [OPTION]... LOGIN
-d LAST_DAY
-E, --expiredate EXPIRE_DATE
#-I, --inactive INACTIVE
-m, --mindays MIN_DAYS
-M, --maxdays MAX_DAYS
-W, --warndays WARN_DAYS
#其它指令:chfn, chsh, finger
#指令總結:useradd, groupadd, su, id, usermod, userdel, groupmod, groupdel, passwd, newgrp, pwck, gpasswd, chage, chsh, chfn, finger
## 權限管理:
# 權限管理:
檔案的權限主要針對三類物件定義:
#owner: 屬主, u
group: 屬組, g
other: 其他, o
每個檔案針對每類訪問者都定義了三種權限:
r: Readable
#w: Writable
## 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-----
rwxr-xr-x: 755
修改檔案權限: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
Note: 指令中的冒號可用.替換;
-R: 遞歸
#chown [OPTION]... --reference=RFILE FILE...
修改文件的屬組:chgrp
#chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R
檔案或目錄建立時的遮罩碼:umask
FILE: 666-umask
Note: 若某類別的使用者的權限減得的結果中存在x權限,則將其權限+1
DIR: 777-umask
umask: 查看
umask #: 設定
# 指令總結:chmod, chown, chgrp, umask
#檔案管理、使用者管理、權限管理、bash的基礎特性
#檔案管理:cp, mv, rm
使用者管理:
useradd, usermod, chsh, chfn, chage, userdel
groupad, groupmod, groupdel
passwd, gpasswd, pwck
id, finger, who, whoami, w
su
#設定檔:/etc/passwd, /etc/shadow, /etc/group, /etc/gshadow
權限管理:
perm: mode(rwxrwxrwx), ownership
chmod
chown
#chgrp
-R, --reference=RFILE
FILE: 666-umask
DIR: 777-umask
#umask [UMASK]
#bash基礎特性:
命令列展開:~, {}
命令別名:alias/unalias
指令歷史:history
指令與路徑補全:$PATH
glob: *, ? , [], [^]
快速鍵:Ctrl+{a,e,l,c,u,k}
指令hash :hash
bash的基礎特性(3)
1、提供了程式設計環境
程式:指令+資料
程式程式設計風格:
過程式:以指令為中心,資料服務於指令
物件式:以資料為中心,指令服務於資料
shell程式:提供了程式設計能力,解釋執行
程式的執行方式:
電腦:執行二進位指令;
程式語言:
低階:彙編
進階:
編譯:高階語言-->編譯器-->目標程式碼
#C、C++, java
解釋:高階語言-->解釋器-->機器碼
shell, perl, python
過程式編程:
順序執行
#循環執行
選擇執行
shell程式設計:過程式、解釋執行
#程式語言的基本架構:
#資料儲存:變數、陣列
#表達式
#語句
shell腳本:文字檔案
shebang:
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
magic number: 魔數
#執行腳本:
1、給予執行權限,透過具體的檔案路徑指定檔案執行;
2、直接執行解釋器,將腳本作為解釋器程式的參數運行;
變數:
命名的記憶體空間;
資料儲存方式:ASCII
字元:110:24
數值:110 --> 8
## 整數
浮點型
#變數:變數類型
作用:
1、資料儲存格式;
#2、參與的運算;
##3 、表示的資料範圍;
類型:
字元
數值:
整數
浮點數型
##程式語言:
強型別:
##Nar
把所有要儲存的資料統統當作字元進行
不支援浮點數;
邏輯運算:
true, false
1, 0
######## ########1 && 1 = 1############1 && 0 = 0###
0 && 1 = 0
0 && 0 = 0
或:
1 || 1 = 1
1 || 0 = 1
0 || 1 = 1
0 || 0 = 0
#:
! 1 = 0
! 0 = 1
短路運算:
#短路運算:
與:
第一個為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
grep -E, egrep
正規表示式引擎
#grep [OPTIONS] PATTERN [FILE...]
選項:
--color=auto: 對符合到的文字著色顯示;
#-v: 顯示不能夠被pattern匹配到的行;
-i: 忽略字元大小寫;
-o: 僅顯示符合的字串;
-q: 靜默模式,不輸出任何訊息;
-A #: after, 後#行
-B #: before, 前#行
-C #:context, 前後各#行
-E:使用ERE;
#基本正規表示式元字元:
字元符合:
.: 符合任意單一字元;
[]: 符合指定範圍內的任意單一字元
[^]:符合指定範圍外的任意單一字元
[:digit:]、[:lower: ]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
符合次數:用在要指定次數的字元後面,用於指定前面的字元要出現的次數;
##*:符合前面的字元任意次;
例如: grep "x*y"
#abxy
xay
xxxxxxy
#########貪婪模式############.*:任意長度的任意字元;# ###########\?:符合其前面的字元0或1次;即前面的可有可無;############\+:符合其前面的字元至少1次;###
\{m\}:符合前面的字元m次;
#\{m,n\}:符合前面的字元至少m次,至多n次;
\{0,n\}:將前面的字元配對至多n次;
\{m,\} :匹配前面的字元至少m次;
位置錨定:
^:行首錨定;用於模式的最左側;
$:行尾錨定;用於模式的最右側;
##^PATTERN$ : 用於模式匹配整行;
^$: 空行;
^[[:space:]]*$
\< 或\b:詞首錨定;用於單字模式的左邊;
\> ; 或\b:詞尾錨定;用於單字模式的右邊;
分組:
\(\):將一個或多個字元捆綁在一起,當作一個整體進行處理;
#\(xy\)*ab
#Note: 分組括號中的模式所符合的內容會被正規表示式引擎記錄於內部的變數中,這些變數的命名方式為: \1, \2, \3, ...
#\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字元;
\(ab\+\(xy\)*\):
#\1: ab\+\(xy\)*
\2: xy
後向引用:引用前面的分組括號中的模式所匹配字符,(而非模式本身)
#如果用戶root存在,顯示其預設的shell程式;
# id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7
#找出/etc/passwd中的兩位或三位數;
## grep "\<[0-9]\ {2,3\}\>" /etc/passwd
#顯示/etc/rc.d/rc.sysinit檔案中,至少以一個空白字元開頭的且後面存非空白字元的行;
# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2 .cfg
找出"netstat -tan"命令的結果中以'LISTEN'後跟0、1或多個空白字元結尾的行;
# netstat -tan | grep "LISTEN[[:space:]]*$"
新增使用者bash、 testbash、basher以及nologin(其shell為/sbin/nologin);而後找出/etc/passwd檔案中用戶名同shell名的行;
grep "^\([ [:alnum:]]\+\>\).*\1$" /etc/passwd
#寫一個腳本,實作如下功能
如果user1使用者存在,就顯示其存在,否則新增之;
顯示新增的使用者的id號等資訊;
#!/bin/bash
id user1 &> /dev/null && echo "user1 exists." || useradd user1
#id user1
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
1、顯示目前系統root、centos或user1使用者的預設shell和UID;
# grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d : -f1,3,7
2、找出/etc/rc.d/init.d/functions檔案(centos6)中某單字後面跟一個小括號的行;
# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d /functions
3、使用echo輸出一絕對路徑,使用egrep取出其基底名稱;
# echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1
進一步地:使用egrep取出路徑的目錄名,類似dirname指令的結果;
#4、找出ifconfig指令結果中1-255之間的數值;
5、找出ifconfig指令結果中的IP位址;
##fgrep :不支援正規表示式搜尋;
bash的基礎特性(4)
##bash的基礎特性(4)
變數類型:
資料儲存格式、儲存空間大小、參與運算種類;
字元型別
數值型:
#整數
浮點型
強型別:定義變數時必須指定型別、參與運算必須符合型別要求;呼叫未宣告變數會產生錯誤;
#弱型別:無須指定類型,預設皆為字元型;參與運算會自動進行隱含型別轉換;變數無須事先定義可直接呼叫;
bash
bash中的變數的種類:
#根據變數的生效範圍等標準:
本地變數:生效範圍為目前shell進程;對目前shell以外的其它shell進程,包含目前shell的子shell進程均無效;
環境變數:生效範圍為目前shell進程及其子進程;
局部變數:生效範圍為目前shell進程中某程式碼片段(通常指函數);
#位置變數:$1, $2, ...來表示,用於讓腳本在腳本程式碼中呼叫透過命令列傳遞給它的參數;
特殊變數:$ ?, $0, $*, $@, $
#本機變數:
變數賦值:name= 'value'
可以使用參考:
value:
(1) 可以是直接字符串; name="username"
(2) 變數引用:name="$username"
(3) 指令引用: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]
$0: 指令本身;
$*: 傳遞給腳本的所有參數;
$@: 傳遞給腳本的所有參數;
#$#: 傳遞給腳本的參數的數量;
範例:判斷給出的檔案的行數
#!/bin/bash
linecount="$(wc -l $1| cut -d' ' -f1)"
#echo "$1 has $linecount lines."
#bash的設定檔:
#以生效範圍劃分,有兩類:
全域設定:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人設定:
##~~/.bash_profile
#~/.bashrc
#依函數劃分,有兩個類別:
profile類別:提供互動式登入的shell
全域:/etc/profile, /etc/profile.d/*.sh
個人:~/.bash_profile
用:
(1) 用來定義環境變數;
(2) 執行指令或腳本;
#bashrc類別:為非互動式登入的shell提供設定
全域:/etc/bashrc
個人:~/.bashrc
功能:
(1) 定義指令別名;
(2) 定義本機變數;
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/local/apache2/bin
管理員?
所有?
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- -
計算/etc/passwd檔案中的第10個使用者和第20個使用者的ID總和;
#!/bin/bash
userid1=$(head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3 )
userid2=$(head -n 20 /etc/passwd | tail -n 1 | cut -d: -f3)
#useridsum=$[$userid1+$userid2]
echo "uid sum: $useridsum"
#將兩個檔案路徑傳遞給腳本,計算這兩個檔案中所有空白行總和;
# !/bin/bash
spaceline1=$(grep "^[[:space:]]*$" $1 |wc - l)
spaceline2=$(grep "^[[:space:]]*$" $2 |wc -l)
echo "The sum of space line: $[$spaceline1+$spaceline2]"
Lex/etc, / var, /usr目錄共有多少個一級子目錄和檔案;
#條件測試:
#判斷某需求是否滿足,需要由測試機制來實現;
#Note: 專用的測試表達式需要由測試指令輔助完成測試過程;
測試指令:
test EXPRESSION
##[ EXPRESSION ]
[[ EXPRESSION ]]
#Note: EXPRESSION前後必須有空白字元;
bash的測試型別:
數值測試:
-gt: 是否大於;
-ge: 是否大於等於;
#-eq: 是否等於;
## -ne: 是否不等於;############-lt: 是否小於;############-le: 是否小於等於;###### ######字串測試:############==:是否等於;###
>: 是否大於;
<: 是否小於;
!=: 是否不等於;
=~: 左側字串是否能夠被右側的PATTERN所匹配;
Note: 此表達式一般用於[[ ]]中;
-z "STRING":測試字串是否為空,空則為真,不空則為假;
-n "STRING":測試字串是否不空,不空則為真,空則為假;
Note:用於字串比較時的用到的運算元都應該使用引號;
#檔案測試
bash自訂退出狀態碼
exit [n]:自訂退出狀態碼;
注意:腳本中一旦遇到exit指令,腳本會立即終止;終止退出狀態取決於exit指令後面的數字;
#注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決於腳本中執行的最後一條指令的狀態碼;
#接受一個檔案路徑作為參數;
##如果參數個數小於1,則提示使用者“至少應該給一個參數”,並立即退出;
如果參數個數不小於1,則顯示第一個參數所指向的檔案中的空白行數;
egrep, 擴充的正規表示式, 變數, 設定檔, 算術運算, 條件測試, 退出狀態碼
ERE:
字元符合:., [], [^]
#次數符合:*, ?, +, {m,n}
位置錨定:^, $, \<, \>, \b
分組:(), \1, \2, ..
或: a|b
##變數:
本地變數
#環境變數
局部變數
位置變數
特殊變數
不能使用保留字;
指令:unset, export, declare -x, set, env, printenv, readonly
設定檔:
profile, bashrc
#算術運算:
##let, $[], $(()), expr
+=, -=, *=, /=
++, --
#條件測試:
test, [], [[]]
三種:
##數值:-lt, - le, -gt, -ge, -ne, -eq
字串:==, !=, >, <, =~, -z, -n
檔案
#自訂退出碼:
exit [n]
[ $# -lt 1 ] && echo "At least one argument." && exit 1####### #####vim編輯器##################簡介#############vi: Visual Interface,文字編輯器### ###############文字:ASCII, Unicode###################文字編輯類型:######## ####行編輯器: sed############全螢幕編輯器:nano, vi##################VIM - Vi IMproved ##################使用#############vm:模式化的編輯############# #####基本模式:###
編輯模式,指令模式
輸入模式
#結束模式:
##內建的命令列介面
開啟檔案:
# vim [OPTION]. .. FILE...
+#: 開啟檔案後,直接讓遊標處於第#行的行首;
+/ PATTERN:開啟檔案後,直接讓遊標處於第一個被PATTERN配對到的行的行首;
##模式轉換:
編輯模式--> 輸入模式
i: insert, 在遊標所在輸入;
a: append, 在遊標所在處後面輸入;
o: 在目前遊標所在行的下方開啟一個新行;
##I:在目前遊標所在行的行首輸入;
A:在目前遊標所在行的行尾輸入;
O:在目前遊標所在行的上方開啟一個新行;
c
#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:依行行定
Note:常結合編輯指令;
#d, c, y
撤銷先前的編輯:
u(undo):撤銷先前的操作;
#u: 撤銷指定次數的操作;
撤銷先前的撤銷:
Ctrl+r
# 重複前一個編輯操作:
##.
翻轉螢幕操作:
#Ctrl+f: 將一螢幕從檔案尾翻;
#########Ctrl+f: 將一螢幕向檔案;###### ######Ctrl+b: 向檔案首部翻一螢幕;###################Ctrl+d: 向檔案尾部翻半螢幕;##### ########Ctrl+u:向檔案首部翻半螢幕;###################vim中的末行模式:###### ######內建的命令列介面##################(1) 位址定界############:start_pos ,end_pos#############: 具體第#行,例如2表示第2行;#############,#: 從左邊#表示行起始,到右側#表示行結尾;#############,+#: 從左側#表示的行開始,加上右側#表示的行數;## ##########.: 目前行############$: 最後一行###########.,$-1###
%:全文, 相當於1,$
#/pat1/,/pat2/:
從第一次被pat1模式配對到的行開始,一直到第一次被pat2配對到的行結束;
#,/pat/
/pat/,$
#使用方式:
後跟一個編輯指令
d
y
w /PATH/TO/SOMEWHERE: 將範圍內的行另存至指定檔案;
r /PATH/FROM/SOMEFILE:在指定位置插入指定檔案中的所有內容;
(2) 尋找
/PATTERN:從目前遊標所在處向檔案尾部尋找;
? PATTERN:從目前遊標所在處向檔案首部尋找;
n:與指令同方向;
N:與指令反方向;
(3) 尋找並取代
s: 在末行模式下完成尋找取代操作
s/要尋找的內容/已替換為的內容/修飾符
要尋找的內容:可使用模式
#替換為的內容:不能使用模式,但可以使用\1, \2, ...等後向引用符號;也可以使用「&」引用前面查找時查找到的整個內容;
修飾符:
i: 忽略大小寫
g: 全域替換;預設情況下,每一行只替換第一次出現;
查找替換中的分隔符號/可替換為其它字符,例如
#s@@@
s
#1、複製/etc/grub2. cfg至/tmp/目錄,用查找取代指令刪除/tmp/grub2.cfg檔案中的行首的空白字元;
%s/^[[:space:]] \+//g
2、複製/etc/rc.d/init.d/functions檔案至/tmp目錄,用查找取代指令為/tmp /functions的每行開頭為空白字元的行的行首加上一個#號;
#:%s/^[[:space:]]/#&/
多檔案模式:
vm FILE1 FILE2 FILE3 ...
## :next 下一個
:prev 前一個
#:first 第一個
: last 最後一個
:wall 儲存所有
:qall 退出所有
##視窗分隔模式:
vim -o|-O FILE1 FILE2 ...
-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
:help subject
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:是否存在且可讀
##-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
必須使用測試指令進行;
## [ -z "$hostName" -o "$hostName"= ="localhost.localdomain" ] && hostname www.madu.com
# [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
#vim:
#編輯模式、輸入模式、末行模式、視覺化模式
跳轉:h,j,k,l,w,b,e,),(,},{, G, ^, 0, $
編輯:x, r, c, d, y, p, u, ctrl+r
找: /, ?, n, N
尋找替換: s
s///
g:
i:
末行定界:
#m,n
m,+
##.
##$
#/pat1/
/pat1/,/pat2/
%
檔案測試:
單目:-e, -f, -d, -b, -c, -L, - P, -S, -r, -w, -x, -s
雙目:-nt, -ot
#組合測試:-a, -o, !
#檔案尋找:
在檔案系統上尋找符合條件的檔案;
檔案查找:locate, find
非即時尋找(資料庫查找) :locate
即時尋找:find
#locate:
依賴事先建構的索引;索引的建構是在系統較為空閒時自動進行(週期性任務);手動更新資料庫(updatedb);
索引建置過程需要遍歷整個根檔案系統,極消耗資源;
工作特點:
##找出速度快;
模糊查找;
非即時尋找;
##locate KEYWORD
find:
#即時尋找工具,透過遍歷指定路徑下的檔案系統完成檔案尋找;
工作特點:
#找出速度略慢;
精確尋找;
即時尋找;
#語法:
##find [OPTION]... [尋找路徑] [尋找條件] [處理動作]
尋找路徑:指定特定目標路徑;預設為目前目錄;
##查找條件:指定的查找標準,可以檔案名稱、大小、類型、權限等標準進行;預設找出指定路徑下的所有檔案;
處理動作:對符合條件的檔案做什麼操作;預設輸出至螢幕;
#找出條件:
根據檔案名稱查找:
-name "檔案名稱":支援使用glob
*, ?, [], [^]
-iname "檔案名稱":不區分字母大小寫
####-regex "PATTERN":以PATTERN配對整個檔案路徑字串,而不僅僅是檔案名稱;##################根據屬主、屬群組查找:###
-user USERNAME:尋找屬主為指定使用者的檔案;
#group GRPNAME: 尋找屬群組為指定群組的檔案;
-uid UserID:尋找屬主為指定的UID號碼的檔案;
-gid GroupID:尋找屬組為指定的GID號碼的檔案;
-nouser:尋找沒有屬主的檔案;
-nogroup:尋找沒有屬群組的檔案;
根據檔案類型尋找:
##-type TYPE:
f: 普通檔案
d: 目錄檔案
l: 符號連結檔案
s:套接字檔案
b: 區塊裝置檔案
c: 字元裝置檔案
p: 管道檔
# 組合條件:
與:-a
或:-o
非:-not, !
!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, #]
-#UNIT:[0,#-1]
+#UNIT:(#,oo)
根據時間戳記:
以「天」為單位;
#-atime [+|-]#,
#: [#,#+1)
+#: [#+1,oo]
- #: [0,#)
-mtime
#-ctime
##以「分鐘」為單位:
-amin
-mmin
## -cmin
根據權限尋找:
#-perm [/|-]MODE
MODE: 精確權限符合
/MODE:任何一類(u,g,o)物件的權限中只要能一位符合即可;
-MODE:每一類物件都必須同時擁有為其指定的權限標準;
處理動作:
-print:預設的處理動作,顯示至畫面;
#-ls:類似對查找到的檔案執行「ls -l 」指令;
-delete:刪除所有查找到的文件;
-fls /path/to/somefile:查找到的所有文件的長格式資訊儲存至指定檔案;
-ok COMMAND {} \; 對查找到的每個檔案執行由COMMAND指定的命令;
對於每個檔案執行指令之前,都會互動式要求使用者確認;
-exec COMMAND {} \; 對查找到的每個檔案執行由COMMAND指定的指令;
{}: 用來引用查找到的檔案名稱本身;
##注意:find傳遞當查找到的文件至後面指定的指令時,查找到所有符合條件的文件一次傳遞給後面的指令;
有些指令不能接受過多參數,此時指令執行可能會失敗;另一種方式可規避此問題:
find | xargs COMMAND
1、尋找/var目錄下屬主為root,且屬群組為mail的所有檔案或目錄;
# find /var -user root -group mail
#2、查找/usr目錄下不屬於root、bin或hadoop的所有檔案或目錄;
# find /usr -not -user root -a -not -user bin -a -not -user hadoop
# find / usr -not \( -user root -o -user bin -o -user hadoop \)
#3、查找/etc目錄下最週一週內其內容修改過,同時屬主不為root,也不是hadoop的檔案或目錄;
## find /etc -mtime -7 -a -not -user root -a -not -user 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, Sticky
1 權限
#r, w, x
##user, group, other
2 安全性上下文
前提:行程有屬主和屬群組;檔案有屬主和屬群組;
(1) 任何可執行程式檔案能不能啟動為流程:取決發起者對程式檔案是否擁有執行權限;
(2) 啟動為進程之後,其進程的屬主為發起者;進程的屬組為發起者所屬的群組;
(3) 進程存取檔案時的權限,取決於進程的發起者:
(a) 進程的發起者,同檔案的屬主:則套用檔案屬主權限;
(b) 程序的發起者,屬於檔案的屬組;則套用檔案屬組權限;
(c) 應用檔案「其它」權限;
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
001 1
#010 2
011 3
100 4
101 5
110 6
111 7
chmod 4777 /tmp/ a.txt
幾個權限位元映射:
#SUID: user, 佔據屬主的執行權限位;
s: 屬主擁有x權限
S:屬主沒有x權限
# #SGID: group, 佔據group的執行權限位元;
s: group擁有x權限
S:group沒有x權限
Sticky: other, 佔據ohter的執行權限位元;
##t: other擁有x權限
T:other沒有x權限
bash腳本編程:
過程式編程語言:
順序執行
選擇執行
##迴圈執行
#選擇執行:
if 判斷條件
##then
條件為真的分支代碼
fi
if 判斷條件; then
條件為真的分支代碼
else
#條件為假的分支代碼
fi
##
##################### ########################################################### ########################################################### #######################################
####################################
以上是Linux系統基礎篇(一)的詳細內容。更多資訊請關注PHP中文網其他相關文章!
陳述:本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn