筆記 1

完整的計算機分層



程序程序程序程序程序程序程序程序
library 庫(沒有入口的程序僅供調用)(庫調用)
內核(進程管理 內存管理 文件系統管理 網絡功能管理  硬件驅動 安全機制)(上層可以通過系統調用獲取功能)
硬件組成(提供各種硬件功能如:運算 網絡 存儲 I/O)






關於linux操作系統

linux的基本原則

1    由單一的程序組成:組合小程序完成複雜的任務

2    一切皆文件

3    儘量避免捕獲用戶接口

4    配置文件保存爲純文本



命令實現過程:

命令  ->shell   ->內核


密碼設置的規則

1    使用4種類別字符中的3種

2    足夠長度 至少7位

3    使用隨機字符串

4    定期更換

5    循環週期夠長



ls
-l:長格式
 文件類型:
  -:普通文件 (f)
  d: 目錄文件
  b: 塊設備文件 (block)
  c: 字符設備文件 (character)
  l: 符號鏈接文件(symbolic link file)
  p: 命令管道文件(pipe)
  s: 套接字文件(socket)
 文件權限:9位,每3位一組,每一組:rwx(讀,寫,執行), r--
 文件硬鏈接的次數
 文件的屬主(owner)
 文件的屬組(group)
 文件大小(size),單位是字節
 時間戳(timestamp):最近一次被修改的時間
  訪問:access
  修改:modify,文件內容發生了改變
  改變:change,metadata,元數據
-h:做單位轉換
-a: 顯示以.開頭的隱藏文件
 . 表示當前目錄
 .. 表示父目錄
-A
-d: 顯示目錄自身屬性
-i: index node, inode
-r: 逆序顯示
-R: 遞歸(recursive)顯示

cd: change directory
家目錄,主目錄, home directory
cd ~USERNAME: 進入指定用戶的家目錄
cd -:在當前目錄和前一次所在的目錄之間來回切換


1:用戶命令(/bin, /usr/bin, /usr/local/bin)
2:系統調用
3:庫用戶
4:特殊文件(設備文件)
5:文件格式(配置文件的語法)
6:遊戲
7:雜項(Miscellaneous)
8: 管理命令(/sbin, /usr/sbin, /usr/local/sbin)



目錄管理:
ls、cd、pwd、mkdir、rmdir、tree

文件管理:
touch、stat、file、rm、cp、mv、nano

日期時間:
date、clock、hwclock、cal


cut:
-d: 指定字段分隔符,默認是空格
-f: 指定要顯示的字段
 -f 1,3
 -f 1-3

文本排序:sort
-n:數值排序
-r: 降序
-t: 字段分隔符
-k: 以哪個字段爲關鍵字進行排序
-u: 排序後相同的行只顯示一次
-f: 排序時忽略字符大小寫

uniq:
-c: 顯示文件中行重複的次數
-d: 只顯示重複的行

文本統計:wc (word count)
-l
-w
-c
-L

查看文本:
cat、tac、more、less、head、tail



命令行編輯:
光標跳轉:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+u: 刪除光標至命令行首的內容
Ctrl+k: 刪除光標至命令行尾的內容
Ctrl+l: 清屏

命令歷史:
查看命令歷史:history
-c:清空命令歷史
-d OFFSET [n]: 刪除指定位置的命令
-w:保存命令歷史至歷史文件中


環境變量
PATH:命令搜索路徑
HISTSIZE: 命令歷史緩衝區大小

命令歷史的使用技巧:
!n:執行命令歷史中的第n條命令;
!-n:執行命令歷史中的倒數第n條命令;
!!: 執行上一條命令;
!string:執行命令歷史中最近一個以指定字符串開頭的命令
!$:引用前一個命令的最後一個參數;
Esc, .
Alt+.



文件名通配, globbing
*: 任意長度的任意字符
?:任意單個字符
[]:匹配指定範圍內的任意單個字符
[abc], [a-m], [a-z], [A-Z], [0-9], [a-zA-Z], [0-9a-zA-Z]
[:space:]:空白字符
[:punct:]:標點符號
[:lower:]:小寫字母
[:upper:]: 大寫字母
[:alpha:]: 大小寫字母
[:digit:]: 數字
[:alnum:]: 數字和大小寫字母.





/etc/passwd
account: 登錄名
password: 密碼
UID:
GID:基本組ID
comment: 註釋
HOME DIR:家目錄
SHELL:用戶的默認shell



用戶管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage

組管理:
groupadd, groupdel, groupmod, gpasswd

權限管理:
chown, chgrp, chmod, umask


/etc/passwd:
用戶名:密碼:UID:GID:註釋:家目錄:默認SHELL

/etc/group:
組名:密碼:GID:以此組爲其附加組的用戶列表

/etc/shadow:
用戶名:密碼:最近一次修改密碼的時間:最短使用期限:最長使用期限:警告時間:非活動時間:過期時間:






useradd  [options]  USERNAME
-u UID
-g GID(基本組)
-G GID,...  (附加組)
-c "COMMENT"
-d /path/to/directory
-s SHELL
-m -k
-M
-r: 添加系統用戶



/etc/login.defs

環境變量:
PATH
HISTSIZE
SHELL


/etc/shells:指定了當前系統可用的安全shell

userdel:
userdel [option] USERNAME
-r: 同時刪除用戶的家目錄

id:查看用戶的帳號屬性信息
-u
-g
-G
-n

finger: 查看用戶帳號信息
finger USERNAME

修改用戶帳號屬性:
usermod
-u UID
-g GID
-a -G GID:不使用-a選項,會覆蓋此前的附加組;
-c
-d -m:
-s
-l
-L:鎖定帳號
-U:解鎖帳號

chsh: 修改用戶的默認shell

chfn:修改註釋信息



密碼管理:
passwd [USERNAME]
--stdin
-l
-u
-d: 刪除用戶密碼

pwck:檢查用戶帳號完整性


組管理:
創建組:groupadd
groupadd
-g GID
-r:添加爲系統組

groupmod
-g GID
-n GRPNAME

groupdel

gpasswd:爲組設定密碼



chage
-d: 最近一次的修改時間
-E: 過期時間
-I:非活動時間
-m: 最短使用期限
-M: 最長使用期限
-W: 警告時間



chown: 改變文件屬主(只有管理員可以使用此命令)
# chown USERNAME file,...
-R: 修改目錄及其內部文件的屬主
--reference=/path/to/somefile file,...

chown USERNAME:GRPNAME file,...
chown USERNAME.GRPNAME file,...

# chgrp GRPNAME file,...
-R
--reference=/path/to/somefile file,...

chmod: 修改文件的權限
修改三類用戶的權限:
chmod MODE file,...
-R
--reference=/path/to/somefile file,...

rwxr-x---

修改某類用戶或某些類用戶權限:
u,g,o,a
chmod 用戶類別=MODE file,...

修改某類用戶的某位或某些位權限:
u,g,o,a
chmod 用戶類別+|-MODE file,...





站在用戶登錄的角度來說,SHELL的類型:
登錄式shell:
正常通常某終端登錄
su - USERNAME
su -l USERNAME

非登錄式shell:
su USERNAME
圖形終端下打開命令窗口
自動執行的shell腳本

bash的配置文件:
全局配置
/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
個人配置
~/.bash_profile, ~/.bashrc

profile類的文件:
設定環境變量
運行命令或腳本

bashrc類的文件:
設定本地變量
定義命令別名

登錄式shell如何讀取配置文件?
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非登錄式shell如何配置文件?
~/.bashrc --> /etc/basrc --> /etc/profile.d/*.sh




grep, egrep, fgrep

grep: 根據模式搜索文本,並將符合模式的文本行顯示出來。
Pattern: 文本字符和正則表達式的元字符組合而成匹配條件

grep [options] PATTERN [FILE...]
-i
--color
-v: 顯示沒有被模式匹配到的行
-o:只顯示被模式匹配到的字符串


*: 任意長度的任意字符
?: 任意單個字符
[]:
[^]:

正則表達式:REGular EXPression, REGEXP
元字符:
.: 匹配任意單個字符
[]: 匹配指定範圍內的任意單個字符
[^]:匹配指定範圍外的任意單個字符
字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]

匹配次數(貪婪模式):
*: 匹配其前面的字符任意次
a, b, ab, aab, acb, adb, amnb
a*b, a?b
a.*b

.*: 任意長度的任意字符
\?: 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{1,\}
\{0,3\}

位置錨定:
^: 錨定行首,此字符後面的任意內容必須出現在行首
$: 錨定行尾,此字符前面的任意內容必須出現在行尾
^$: 空白行

\<或\b: 錨定詞首,其後面的任意字符必須作爲單詞首部出現
\>或\b: 錨定詞尾,其前面的任意字符必須作爲單詞的尾部出現

分組:
\(\)
\(ab\)*
後向引用
\1: 引用第一個左括號以及與之對應的右括號所包括的所有內容
\2:
\3:



bash變量類型:
環境變量
本地變量(局部變量)
位置變量
特殊變量

本地變量:
set VARNAME=VALUE: 作用域爲整個bash進程;

局部變量:
local VARNAME=VALUE:作用域爲當前代碼段;

環境變量:作用域爲當前shell進程及其子進程;
export VARNAME=VALUE
VARNAME=VALUE
export VARNAME
“導出”

位置變量:
$1, $2, ...

特殊變量:
$?: 上一個命令的執行狀態返回值;




撤消變量:
unset VARNAME

查看當shell中變量:
set

查看當前shell中的環境變量:
printenv
env
export


bash中如何實現條件判斷?
條件測試類型:
整數測試
字符測試
文件測試

條件測試的表達式:
[ expression ]
` expression `
test expression

整數比較:
-eq: 測試兩個整數是否相等;比如 $A -eq $B
-ne: 測試兩個整數是否不等;不等,爲真;相等,爲假;
-gt: 測試一個數是否大於另一個數;大於,爲真;否則,爲假;
-lt: 測試一個數是否小於另一個數;小於,爲真;否則,爲假;
-ge: 大於或等於
-le:小於或等於

命令的間邏輯關係:
邏輯與: &&
 第一個條件爲假時,第二條件不用再判斷,最終結果已經有;
 第一個條件爲真時,第二條件必須得判斷;
邏輯或: ||


shell中如何進行算術運算:
1、let 算術運算表達式
let C=$A+$B
2、$[算術運算表達式]
C=$[$A+$B]
3、$((算術運算表達式))
C=$(($A+$B))
4、expr 算術運算表達式,表達式中各操作數及運算符之間要有空格,而且要使用命令引用
C=`expr $A + $B`





if 條件測試格式

測試方法:
[ expression ]
` expression `
test expression




文件測試:
-e FILE:測試文件是否存在
-f FILE: 測試文件是否爲普通文件
-d FILE: 測試指定路徑是否爲目錄
-r FILE: 測試當前用戶對指定文件是否有讀取權限;
-w
-x



練習:寫一個腳本
給定一個文件:
如果是一個普通文件,就顯示之;
如果是一個目錄,亦顯示之;
否則,此爲無法識別之文件;




定義腳本退出狀態碼

exit: 退出腳本
exit #
如果腳本沒有明確定義退出狀態碼,那麼,最後執行的一條命令的退出碼即爲腳本的退出狀態碼;


測試腳本是否有語法錯誤:
bash -n 腳本

bash -x 腳本:單步執行


bash變量的類型:
本地變量(局部變量)
環境變量
位置變量:
 $1, $2, ...
 shift
特殊變量:
 $?
 $#:參數的個數
 $*: 參數列表
 $@:參數列表





grep, sed(流編輯器), awk  

sed基本用法:
sed: Stream EDitor
行編輯器 (全屏編輯器: vi)

sed: 模式空間
默認不編輯原文件,僅對模式空間中的數據做處理;而後,處理結束後,將模式空間打印至屏幕;


sed [options] 'AddressCommand' file ...
-n: 靜默模式,不再默認顯示模式空間中的內容
-i: 直接修改原文件
-e SCRIPT -e SCRIPT:可以同時執行多個腳本
-f /PATH/TO/SED_SCRIPT
 sed -f /path/to/scripts  file
-r: 表示使用擴展正則表達式


Address:
1、StartLine,EndLine
比如1,100
$:最後一行
2、/RegExp/
/^root/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的所有行
4、LineNumber
指定的行
5、StartLine, +N
從startLine開始,向後的N行;

Command:
d: 刪除符合條件的行;
p: 顯示符合條件的行;
a \string: 在指定的行後面追加新行,內容爲string
 \n:可以用於換行
i \string: 在指定的行前面添加新行,內容爲string
r FILE: 將指定的文件的內容添加至符合條件的行處
w FILE: 將地址指定的範圍內的行另存至指定的文件中;
s/pattern/string/修飾符: 查找並替換,默認只替換每行中第一次被模式匹配到的字符串
 加修飾符
 g: 全局替換
 i: 忽略字符大小寫
s///: s###, s@@@
 \(\), \1, \2

l..e: like-->liker
   love-->lover

   like-->Like
   love-->Love

&: 引用模式匹配整個串


grep, egrep, fgrep: 文本查找

文件查找:
locate:
非實時,模糊匹配,查找是根據全系統文件數據庫進行的;
# updatedb, 手動生成文件數據庫
速度快

find:
實時
精確
支持衆多查找標準
遍歷指定目錄中的所有文件完成查找,速度慢;

find 查找路徑 查找標準 查找到以後的處理運作
查找路徑:默認爲當前目錄
查找標準:默認爲指定路徑下的所有文件
處理運作:默認爲顯示

匹配標準:
-name 'FILENAME':對文件名作精確匹配
 文件名通配:
  *:任意長度的任意字符
  ?
  []
-iname 'FILENAME': 文件名匹配時不區分大小寫
-regex PATTERN:基於正則表達式進行文件名匹配

-user USERNAME: 根據屬主查找
-group GROUPNAME: 根據屬組查找

-uid UID: 根據UID查找
-gid GID: 根據GID查找

-nouser:查找沒有屬主的文件
-nogroup: 查找沒有屬組的文件

-type
 f: 普通文件
 d
 c
 b
 l
 p
 s

-size [+|-]
 #k
 #M
 #G

組合條件:
-a
-o
-not

/tmp目錄,不是目錄,並且還不能套接字類型的文件
/tmp/test目錄下,屬主不是user1,也不是user2的文件;

-mtime
-ctime
-atime
 [+|-]#
-mmin
-cmin
-amin
 [+|-]#

-perm MODE:精確匹配
 /MODE: 任意一位匹配即滿足條件
 -MODE: 文件權限能完全包含此MODE時才符合條件

 -644
 644: rw-r--r--
 755: rwxr-xr-x
 750: rwxr-x---
find ./ -perl -001


運作:
-print: 顯示
-ls:類似ls -l的形式顯示每一個文件的詳細
-ok COMMAND {} \; 每一次操作都需要用戶確認
-exec COMMAND {} \;



特殊權限
passwd:s

SUID: 運行某程序時,相應進程的屬主是程序文件自身的屬主,而不是啓動者;
chmod u+s FILE
chmod u-s FILE
 如果FILE本身原來就有執行權限,則SUID顯示爲s;否則顯示S;
SGID: 運行某程序時,相應進程的屬組是程序文件自身的屬組,而不是啓動者所屬的基本組;
chmod g+s FILE
chmod g-s FILE
 develop team, hadoop, hbase, hive
 /tmp/project/
  develop
Sticky: 在一個公共目錄,每個都可以創建文件,刪除自己的文件,但不能刪除別人的文件;
chmod o+t DIR
chmod o-t DIR


字符測試:
==:測試是否相等,相等爲真,不等爲假
!=: 測試是否不等,不等爲真,等爲假
>
<
-z string: 測試指定字符串是否爲空,空則真,不空則假
-n string: 測試指定字符串是否不空,不空爲真,空則爲假



vim編輯器

文本編輯器,字處理器
ASCII

nano, sed

vi: Visual Interface
vim: VI iMproved

全屏編輯器,模式化編輯器

vim模式:
編輯模式(命令模式)
輸入模式
末行模式

模式轉換:
編輯-->輸入:
i: 在當前光標所在字符的前面,轉爲輸入模式;
a: 在當前光標所在字符的後面,轉爲輸入模式;
o: 在當前光標所在行的下方,新建一行,並轉爲輸入模式;

I:在當前光標所在行的行首,轉換爲輸入模式
A:在當前光標所在行的行尾,轉換爲輸入模式
O:在當前光標所在行的上方,新建一行,並轉爲輸入模式;

輸入-->編輯:
ESC

編輯-->末行:

末行-->編輯:
ESC, ESC

一、打開文件
# vim /path/to/somefile
vim +# :打開文件,並定位於第#行
vim +:打開文件,定位至最後一行
vim +/PATTERN : 打開文件,定位至第一次被PATTERN匹配到的行的行首

默認處於編輯模式

二、關閉文件
1、末行模式關閉文件
:q  退出
:wq 保存並退出
:q! 不保存並退出
:w 保存
:w! 強行保存
:wq --> :x
2、編輯模式下退出
ZZ: 保存並退出

三、移動光標(編輯模式)
1、逐字符移動:
h: 左
l: 右
j: 下
k: 上
#h: 移動#個字符;

2、以單詞爲單位移動
w: 移至下一個單詞的詞首
e: 跳至當前或下一個單詞的詞尾
b: 跳至當前或前一個單詞的詞首

#w:

3、行內跳轉:
0: 絕對行首
^: 行首的第一個非空白字符
$: 絕對行尾

4、行間跳轉
#G:跳轉至第#行;
G:最後一行

末行模式下,直接給出行號即可

四、翻屏
Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏

Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏

五、刪除單個字符
x: 刪除光標所在處的單個字符
#x: 刪除光標所在處及向後的共#個字符

六、刪除命令: d
d命令跟跳轉命令組合使用;
#dw, #de, #db

dd: 刪除當前光標所在行
#dd: 刪除包括當前光標所在行在內的#行;

末行模式下:
StartADD,EndADDd
.: 表示當前行
$: 最後一行
+#: 向下的#行

七、粘貼命令 p
p: 如果刪除或複製爲整行內容,則粘貼至光標所在行的下方,如果複製或刪除的內容爲非整行,則粘貼至光標所在字符的後面;
P: 如果刪除或複製爲整行內容,則粘貼至光標所在行的上方,如果複製或刪除的內容爲非整行,則粘貼至光標所在字符的前面;

八、複製命令 y
用法同d命令

九、修改:先刪除內容,再轉換爲輸入模式
c: 用法同d命令

十、替換:r
R: 替換模式

十一、撤消編輯操作 u
u:撤消前一次的編輯操作
連續u命令可撤消此前的n次編輯操作
#u: 直接撤消最近#次編輯操作

撤消最近一次撤消操作:Ctrl+r

十二、重複前一次編輯操作
.

十三、可視化模式
v: 按字符選取
V:按矩形選取

十四、查找
/PATTERN
?PATTERN
n
N

十五、查找並替換
在末行模式下使用s命令
ADDR1,ADDR2s@PATTERN@string@gi
1,$
%:表示全文


十六、使用vim編輯多個文件
vim FILE1 FILE2 FILE3
:next 切換至下一個文件
:prev 切換至前一個文件
:last 切換至最後一個文件
:first 切換至第一個文件

退出
:qa 全部退出

十七、分屏顯示一個文件
Ctrl+w, s: 水平拆分窗口
Ctrl+w, v: 垂直拆分窗口

在窗口間切換光標:
Ctrl+w, ARROW

:qa 關閉所有窗口

十八、分窗口編輯多個文件
vim -o : 水平分割顯示
vim -O : 垂直分割顯示

十九、將當前文件中部分內容另存爲另外一個文件
末行模式下使用w命令
:w
:ADDR1,ADDR2w /path/to/somewhere

二十、將另外一個文件的內容填充在當前文件中
:r /path/to/somefile

二十一、跟shell交互
:! COMMAND

二十二、高級話題
1、顯示或取消顯示行號
:set number
:set nu

:set nonu

2、顯示忽略或區分字符大小寫
:set ignorecase
:set ic

:set noic

3、設定自動縮進
:set autoindent
:set ai
:set noai

4、查找到的文本高亮顯示或取消
:set hlsearch
:set nohlsearch

5、語法高亮
:syntax on
:syntax off

二十三、配置文件
/etc/vimrc
~/.vimrc



FACL:Filesystem Access Control List
利用文件擴展保存額外的訪問控制權限

jerry: rw-

setfacl
-m: 設定
 u:UID:perm
 g:GID:perm
-x:取消
 u:UID
 g:GID

getfacl



幾個命令:
w
who
每隔5秒鐘,就來查看hadoop是否已經登錄,如登錄,顯示其已經登錄,並退出;
sleep

whoami

last,顯示/var/log/wtmp文件,顯示用戶登錄歷史及系統重啓歷史
-n #: 顯示最近#次的相關信息
lastb,/var/log/btmp文件,顯示用戶錯誤的登錄嘗試
-n #:
lastlog: 顯示每一個用戶最近一次的成功登錄信息;
-u USERNAME: 顯示特定用戶最近的登錄信息

basename
$0: 執行腳本時的腳本路徑及名稱


hostname: 顯示主機名




面向過程
控制結構
 順序結構
 選擇結構
 循環結構

選擇結構:
if: 單分支、雙分支、多分支
if CONDITION; then
 statement
 ...
fi

if CONDITION; then
 statement
 ...
else
 statement
 ...
fi

if CONDITION1; then
 statement
 ...
elif CONDITION2; then
 statement
 ...
esle
 statement
 ...
fi


case語句:選擇結構

case SWITCH in
value1)
 statement
 ...
 ;;
value2)
 statement
 ...
 ;;
*)
 statement
 ...
 ;;
esac

rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm

yum repolist

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章