時間php |
事件html |
1965年node |
美國麻省理工學院(MIT),通用電氣公司(GE),貝爾實驗室AT&T,協力開發mnltics系統,沒有成功mysql |
1969年linux |
肯.湯普森在DEC PDP-7機器上開發出Unix系統ios |
1971年nginx |
肯.湯普森和其同時丹尼斯里奇發明C語言web |
1973年正則表達式 |
Unix絕大部分用C語言重寫,提升了可移植性redis |
1987年 |
譚寧邦教授開發了minix系統,並開發源代碼 |
1991年 |
李納斯開發Linux系統 |
Unix發行版本
操做系統 |
公司 |
硬件平臺 |
AIX |
IBM |
PowerPC |
HP-UX |
HP |
PA-RISC |
Solaris |
SUN |
SPARC |
Linux版本分類
內核版 www.bemel.org |
2.6.32版本 |
RHEL 6 |
|
3.10.x版本 |
RHEL 7 |
||
發行版 |
Redhat系列 |
我的版 |
fedoras桌面版 |
企業版 |
RHEL(Redhat Enterprise Linux)其中包括(turbo Linux,mandriva,centos,suse,fedora,gentoo Linux) |
||
Debian系列 |
Ubuntu(開發人員經常使用,軟件多,圖形界面好看)還有KNOPPIX |
開源軟件
軟件名 |
做用 |
Apache |
web服務器 |
Nginx |
web服務器 |
MySQL |
數據庫 |
MongoDB |
NOSQL數據庫(用於提高MySQL數據庫性能還有redis) |
PHP |
腳本語言 |
Python |
腳本語言 |
Ruby |
腳本語言 |
Samba |
Linux和Windows之間內網文件服務器 |
Sphinx |
中文分詞 |
# GPL:使用的軟件是開源的,作出的軟件也必須開源 |
分區 |
1."/"根分區(工做中通常分200G左右) |
2."swap"交換分區(也就是虛擬分區)真實內存小於4G,swap分區分2倍大小,真實內存大於4G,swap分區份內存同樣大小 |
|
3."boot"啓動分區,建議200M大小 |
|
格式化 |
寫入文件系統 |
設備文件名 |
/dev/sda等 |
掛載點 |
/mnt /media /misc訪問分區的路口,使用已創建的空目錄做爲掛載點 |
IP地址配置步驟
vim /etc/sysconfig/network-scripts/ifcfg-eth0 |
|
ONBOOT= |
開機啓動網卡配置,默認no,須要改成yes |
BOOTPROTO= |
默認IP獲取方式,默認dhcp,更改成none或static(靜態) |
IPADDR= |
ip |
NETMASK= |
子網掩碼 |
GATEWAY= |
網關 |
DNS1= |
DNS |
Root目錄默認文件
文件名 |
做用 |
install.log |
安裝了哪些軟件包記錄 |
install.log.syslog |
增長的用戶和用戶組 |
Anaconda-ks.cfg |
系統安裝步驟(批量安裝模板) |
1 |
Linux中嚴格區分大小寫,沒有大小命令,有大寫選項 |
2 |
Linux下因此內容都是以文件形式保存 |
3 |
Linux不靠擴展名區分文件類型 |
4 |
全部存儲設備必須掛着以後才能使用 |
5 |
Windows的程序不能直接在Linux下安裝 |
6 |
修改配置文件,永久生效 |
服務器注意事項
1 |
遠程服務不容許關機,只能重啓(服務器大多在異地) |
2 |
服務器重啓時應該關閉服務(保護硬盤) |
3 |
不要在服務器訪問高峯運行高負載命令(最好在凌晨4-5點) |
4 |
遠程配置防火牆時不要把本身踢出服務器(配置時,寫定時任務,定時清除防火牆配置) |
5 |
指定合理的密碼並定時更新 |
6 |
合理分配權限 |
7 |
按期備份重要數據和日誌(異地屢次分佈保存) |
連接命令注意事項
命令 |
ln 選項源文件鏈接文件名 |
硬連接 |
1.擁有相同的inode和block,能夠看出相同文件 |
2.修改任何一個文件,另外一個文件也會改變 |
|
3.刪除其中一個文件,另外一個文件還能使用 |
|
4.不能連接目錄 |
|
5.不能跨分區連接 |
|
6.兩個文件特徵不明顯,不推薦使用 |
|
軟連接 |
1.有自減的iNode和block,但block中不記錄實際數據,只寫入源文件的文件名和inode號 |
2.修改任何一個文件,另外一個文件也會改變 |
|
3.刪除源文件,軟連接沒法使用 |
|
4.不管源文件多大,軟連接大小不變 |
|
5.軟連接擁有最大權限,但訪問受源文件權限限制 |
|
6.能跨分區連接 |
|
7.能連接目錄 |
|
8.特徵明顯,推薦使用 |
/bin/ 存放系統命令,普通用戶和超級用戶均可以執行
/sbin/ 存放系統命令,只有超級用戶能夠執行
/usr/bin/ 存放系統命令,普通用戶和超級用戶能夠執行
/usr/sbin 存放系統命令,只有超級用戶能夠執行
/boot/ 系統啓動目錄
/dev/ 設備文件保存位置
/etc/ 配置文件保存位置
/home/ 普通用戶家目錄
/lib/ 函數庫保存位置
/lost+found/ 系統崩潰或意外關機,數據修復用。
/media/ 掛載目錄
/mnt/ 掛載目錄(習慣)
/misc/ 掛載目錄
/opt/ 軟件安裝位置,習慣用/usr/local/目錄
/proc/ 虛擬文件系統,該目錄中的數據不是保存在硬盤中,而是保存在內存中
/sys/ 虛擬文件系統,該目錄中的數據不是保存在硬盤中,而是保存在內存中
/root/ 超級用戶保存位置
/srv/ 服務數據目錄
/tmp/ 臨時目錄(若是安裝mysql,則有兩個文件在這個目錄,重要)
/usr/ 系統軟件資源目錄
/usr/lib/ 函數庫保存位置
/usr/x11R6 圖形界面系統保存位置
/usr/local/ 軟件安裝位置(習慣)
/usr/local/src 源程序保存位置(下載的源代碼包)
/usr/src/kernels 內核源碼保存位置(學習或重編用的)
/usr/share/ 幫助,說明文檔保存位置
/var/ 動態數據保存位置
/var/log/ 系統日誌保存位置
/var/lib/mysql (rpm包安裝) mysql數據庫保存位置(用於數據庫備份)
/var/www/html (rpm包安裝) 網頁保存位置
/var/spool/ 放置隊列數據的目錄
/var/spool/mail/ 用戶名 放置用戶的郵箱
/var/spool/cron/ 存放系統定時任務
/var/run/ 一些服務和程序運行後,他們的PID(進程ID)保存在這
- - - - - - - - - - .文件權限行
第一位表示文件類型
第二位到第四位一組表示U因此者權限
第五位到第七位一組表示G所屬組權限
第八位到第十位一組表示O其餘人權限
第11位表示seLinux保護文件
對文件的意義
r 讀取文件內容
w 編輯,新增,修改文件內容,但不包括刪除(只有上級目錄有w權限,才能夠刪除目錄下文件)
x 可執行
注:目錄下的文件中,文件名和inode節點號是存儲在當前目錄中的
對目錄的意義
r 能夠查詢目錄下文件
w 具備修改目錄結構的權限
x 訪問
最大權限:最大權限具備安全風險,須要當心使用
文件:x權限最大
目錄:w權限最大
目錄可用權限
r---4 w---2 x---1
0:最小權限
5:標準權限
7:最大權限
(其餘權限沒有意義)
umask:文件和目錄的默認權限
umask 022 臨時生效
文件最大默認權限:666 (x權限是文件最大權限,不能默認)
/etc/profile環境變量配置文件,umask權限永久生效
配置文件決定
超級管理員:0022
普通用戶:0002/0022
locate 文件名 (在文件名數據庫中查找,快速)
Updatedb 強制更新數據庫(使用locate時須要更新下數據庫)
/var/lib/mlocate/mlocate.db文件名數據庫位置
/etc/updatedb.conf 配置文件,用於定義locate命令查找位置
通配符(find)
* 任意內容
? 任意一個內容
[] 中括號內任意一個內容 [abc] [0-9] [A-Z] [A-Za-z]
正則表達式(grep)
* 前一個字符重複任意屢次
? 前一個字符重複0次或1次(要用egrep命令使用)
[] 中括號內任意一個內容
^ 行首符
$ 行尾符
find命令:在系統中,搜索符合條件的文件名,若是須要匹配,則徹底匹配
格式:find 目錄路徑 -name 文件名
grep命令:在系統中,搜索符合 條件的字符串,若是須要匹配,則使用包含匹配
格式:grep "字符串" 文件名
tty1-tty6:本地登入終端,共6個,alt+F1-F6(切換)
tty7:本地圖形終端ctrl+atl+F7
pts/0:0-255,遠程終端鏈接,支持256個
~/.vimrc配置文件
注:~/.vimrc配置文件不存在,需手工創建,用於配置vim
雙文件打開方式
vim -o 文件名 文件名 同時打開上下窗口,ctrl+w 上下鍵切換
vim -O 文件名 文件名 同時打開左右窗口,ctrl+w 左右鍵切換
進入插入模式
a 追加 A 行尾
i 插入 I 行首
o 下行打開 O 上行打開
退出與保存
:q在沒有修改時,退出
:q!強制不保存退出,全部用戶均可以用,用於放棄修改
:wq!用於強制保存退出,只有root可使用,強行寫入數據
刪除
x:刪除光標所在字符
nX:刪除n個字符
dd:刪除整行(具備粘貼功能)
:n,nd 刪除指定範圍行(具備粘貼功能)
dG:刪除刪除光標所在行到結尾(具備粘貼功能)
dd 刪除行
字體顏色
:syntax on/off 開啓或關閉vim顏色
查找
/ 查找字符 n:下一行 N:上一行
替換
r:替換光標所在處字符
R:從光標所在處開始替換,按esc結束
:1,10s/old/new/g 替換1到10行的old內容爲new
:%s/old/new/g 替換全文本內容
:1,10s/^/#/g 添加1到10行行首註釋
:1,10s/^#//g 取消註釋
:1,10s/^/\/\//g 添加//註釋,\轉移符,取消特殊字符意義
:1,10s/^\/\///g 取消註釋
粘貼
p:光標所在向下粘貼
大寫P:光標所在向上複製
複製
yy:複製光標當前行
nyy:複製光標當前行如下n行
調用文件內容
:r 文件名 在vim中寫入文件內容
調用命令結果
:r !命令 在vim中寫入輸入的命令內容
:r 命令 執行命令,以後繼續編輯
編輯快捷命令
:map ^p I#<ESC>
:map ^b ^x
:map ^p I#<ESC> "^p"先按ctrl+v後按ctrl+p,按ctrl+p添加註釋
:map ^B ^x 刪除註釋
:ab 源字符 替換爲字符
:ab mymail shenchao@lampbrother.net #輸入mymail時替換爲shenchao@lampbrother.net
鍵盤符: h:左 j:下 k:上 l:右
命令模式快捷操做
gg:光標移動到行首
G:光標移動到行尾
^:行首符
$:行尾符
u:撤銷
ctrl+r:反撤銷
顯示行號
:set nu 顯示行號
:set nonu 關閉行號
1、源碼包
2、二進制包(RPM包)
源碼包:編譯安裝(C語言,Java語言)
優勢:
1、開源,有能力能夠本身修改
2、能夠自由選擇所須要功能
3、軟件是編譯安裝,更適合,更高效,更穩定
4、卸載方便
缺點:
1、安裝步驟較多,容易出錯
2、編譯時間太長
3、由於是編譯,報錯新手難以解決
二進制包
二進制包分類:直接安裝(PHP,Python,shell)
1、deb包
2、RPM包
優勢:
1、包管理簡單,只經過幾個命令就能夠實現包的安裝,升級,查詢和卸載
2、安裝速度比源碼包安裝快的多
缺點:
1、通過編譯,不能再看到源代碼
2、選擇不如源碼包靈活
3、依賴性,樹狀依賴,環形依賴,模塊依賴
語言分類(根據安裝方式)
編譯語言:C語言,Java語言
腳本語言:shell,php,Python
軟件包選擇原則
1、若是軟件是有大量客戶端訪問的,選擇源碼包安裝,效率高,穩定
2、若是軟件訪問量少或本機使用,選擇rpm包,安裝簡單
包名使用
1、若是操做系統已經安裝的軟件包,使用包名,由於包名存在RPM包數據庫中,不須要路徑查找,數據庫位置\var\lib\rpm\
2、若是操做系統未安裝的軟件包,使用包全名,須要絕對路徑
RPM -V 包名 #檢驗已安裝包的信息 |
|
S |
安裝包大小是否改變 |
M |
文件類型或權限是否改變 |
5 |
MD5是否改變 |
D |
設備中,從代碼是否改變 |
L |
文件路徑是否改變 |
U |
文件全部者是否改變 |
G |
文件所屬組是否改變 |
T |
文件修改時間是否改變 |
c |
配置文件 |
d |
普通文檔 |
g |
鬼文件,不該該存在的文件 |
l |
受權文件 |
r |
描述文件 |
對稱加密:加密和解密密碼同樣
非對稱加密:加密和解密不同,互相不用知道密碼,加密度高
公鑰:用於訪問或接受加密文件用的
私鑰:用於本身解密本身加密的文件
數字證書(重要,用於檢測安裝的rpm包是否改動)
包名:RPM-GPG-KEY-CentOS-6
原廠公鑰文件位置與數字證書導入
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
rpm包文件提取(cpio備份恢復命令,不經常使用)
rpm2cpio 包全名 | cpio -idv .絕對路徑(文件提取到當前目錄)
補丁
只能使用在未安裝的源程序上,已安裝的程序是升級
定義:舊文件與新文件的不一樣
生成補丁: diff -Naur 舊文件 新文件 > 補丁文件
補丁導入舊文件: patch -pn < 補丁名 (-n:數字 -p:取消路徑等級)
網絡yum源搭建
wget 網址 (網址:www.mirrors.163.com下載網絡文件)
yum clean all (清空原來yum源緩存)
yum makecache (創建新的緩存,能夠不用)
yum list (從新加載yum源,下載快速)
光盤yum源
一、裝入光驅
二、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
三、vim /etc/yum.repos.d/CentOS-Media.repo
#修改:baseurl=file:///mnt/dvd/
#修改:enabled=1
#修改:gpgcheck=1
本地yum源
服務端:
yum -y install vsftpd
mount /dev/sr0 /var/ftp/
service vsftpd start
客戶端:
yum -y install ftp
vim /etc/yum.repos.d/CentOS-Media.repo
baseurl=ftp://192.168.10.100
刪除多餘的條件
yum list
測試安裝
yum注意事項
命令不區分包名,能夠都使用包名
安裝時裝依賴包,卸載時卸被依賴的包,儘可能不要卸載
在RHEL6.3之前,update所有升級會包括內核,使系統沒法開機
能夠安裝同一個服務的源碼包與rpm包,但只能運行一個
yum -y install xorg*
yum -y groupinstall "X Window System"
yum -y groupinstall Desktop
yum -y groupinstall "Chinese Support"
startx #啓動圖形界面
init 5 #進入桌面
ctrl+alt+F1 #桌面終端
ctrl+alt+F2 #字符終端
安裝源碼包以前先用yum -y install gcc*
一、執行命令.configure --prefix=絕對路徑(指定安裝位置),檢測系統環境是否適合安裝需求,不進行實際安裝,信息會寫入makefile文件裏,真正安裝時會讀取
二、執行命令make,若是以前安裝過,先執行make clean清除編譯過程當中的緩存和臨時文件,也是不進行實際安裝,信息會寫入makefile文件裏,真正安裝時會讀取
三、執行命令make install,編譯安裝,過程較長
四、絕對路徑 start,啓動服務(啓動文件能夠查看install文件)
五、卸載時直接刪除安裝的目錄
函數庫: so函數庫對應軟件程序
ko模塊函數庫對應硬件
防火牆關閉(對外部應用)
iptables -F (臨時生效,清空防火牆配置)
service iptables stop(永久生效,中止防火牆服務)
chkconfig iptables off(永久生效,防火牆服務開機不啓動)
selinux(行爲控制工具,對內部應用)
注:由於seLinux是內核等級設置,須要重啓系統才能生效
配置文件位置:/etc/selinux/config
setenforce 0 (臨時關閉防禦,0是半關閉,1是開啓)
SELINUX=enforcing(開啓防禦)
SELINUX=disabled(關閉防禦)
SELINUX=permissive(清空規則設置)
linux驅動介紹
一、經常使用驅動直接放入內核(必備硬件驅動)
二、把不太經常使用,絕大多數驅動以模塊方式放入硬盤中(/lib/modules/內核版本/kernel/fs)
三、系統認爲不經常使用,以模塊方式放入硬盤中,默認沒有安裝,需從新編譯內核,加載
四、Linux完全不識別的驅動,需手工安裝(驅動廠家提供)
Linux是基於用戶身份對系統資源進行管理的操做系統
用戶分類UID:用戶惟一標示符
超級用戶:能夠調用一切系統資源
系統用戶:不能登陸系統,是給應用程序所需權限(限制權限)
普通用戶:權限較小,只能管理本用戶的相關信息
用戶 ID範圍RHEL6.* UID範圍RHEL7.*
超級管理員 0 0
系統用戶 1-499 1-999
普通用戶 500-65535 1000-65535
其中有些特殊用戶不遵照這個規則
例:nlsnoboby UID:65534 是系統用戶
組分類GID:組惟一標示符
組自己沒有分類,是根據該組所對應的用戶進行管理確認
初始組:用戶建立時所指定的組
附加組:除用戶初始組之外加入的組
相關配置文件
/etc/passwd(用戶信息文件,共七例)
一、用戶名
二、密碼站位符:"!!""*"標示密碼失效,不能登陸
三、UID
四、GID
五、用戶描述
六、家目錄
七、登陸shell類型
/bin/bash:能夠登陸
/sbin/nologin:不能登陸
/etc/shadow(用戶密碼文件配置,共九列)
一、用戶名
二、加密密碼符,"!!""*"標示密碼失效,不能登陸
三、最近一次修改密碼時間,顯示爲時間戳,1970.01.01開始 計算,是unix元年
四、能修改密碼的時間間隔
五、密碼最長有效期
六、密碼到期前警告天數
七、密碼到期後的寬限天數
八、密碼失效時間,爲時間戳
九、保留
時間戳轉換命令
#時間戳轉日期
date -d "1970-01-01 時間戳 days"
#日期轉時間戳
計算器
/etc/group(組信息配置文件,共四列)
一、組名
二、密碼站位符
三、GID
四、組成員列表,成員之間用","號隔開
/etc/gshadow(組密碼文件,共四列)
一、組名
二、組密碼
三、組管理員
四、組成員列表
注:密碼配置文件在RHEL6.*以前,默認權限爲400,在RHEL6.*以後默認權限爲000
/etc/skel(用戶模板文件,用於添加新建用戶家目錄下的默認文件)
/etc/default/useradd(是建立用戶時調用的文件參數,大部分關於 用戶文件的配置)
/etc/login.defs(是建立用戶時調用的文件參數,大部分關於密碼 文件的配置)
私有組機制
在建立用戶時,先建立一個與用戶同名的組,將該組做爲初始組
公共組機制
先建立一個的組,以後建立的用戶的初始組都是該組
加密類型:SHA512:散列模式加密
初始組:建立用戶時所指定的第一個組
注:每個用戶有且只有一個初始組,並非用戶建立的文件屬於哪一個組,哪一個組就是初始組
有效組:決定用戶建立文件時,文件的所屬組
注:newgrp 切換用戶的有效組,用戶的初始組就是默認的有效組
切換有效組的條件
1. 用戶要先加入該組,才能將該組設置爲有效組
2. 若事先未加入,則能夠經過密碼方式加入再設置(提早設置好組密碼)
訪問控制列表,爲單一的用戶或者組設置對文件或者目錄的獨立權限
開啓ACL
一、確認文件系統(分區)是否支持ACL
dumpe2fs 分區 | grep acl
二、開啓(激活)ACL權限
手動:mount -o remount,acl / #臨時生效
自動:a、修改/etc/fstab,在default後天就acl
b、mount -o remount / #永久生效
三、查看ACL
getfacl 文件名(獲取文件的ACL權限列表)
四、設置ACL
setfacl -m u:用戶名:權限 文件名(增長ACL權限)
setfacl -x u:用戶名 文件名(刪除ACL權限)
setfacl -b 文件名(清空ACL權限,包括mask)
setfacl -m m:權限(防止acl權限過大)
setfacl -R -m u:用戶名:權限 文件名(遞歸設置)
setfacl -d -m u:用戶名:權限 目錄名(目錄權限繼承)
普通用戶使用sudo,/etc/passwd其餘人權限必須有r權限
受權:將受權的信息記錄到配置文件中
visudo:專門用於修改受權配置文件
/etc/sudoers:受權配置文件
配置文件內容:
ALL ALL=(ALL) ALL
被受權者 可管理主機=(受權者身份) 命令位置
例:zhangsan ALL=(root) /sbin/shutdown -r now
sudo驗證受權
sudo shutdown -r now(受權命令前須要sudo)
須要普通用戶密碼
驗證成功執行命令(借用root身份)
注: 1)受權時,不能賦予單一命令,須要命令+選項+參數
2)僅受權所須要權限
給組受權須要在受權用戶前加%號
passwd命令受權
passwd命令會驗證用戶UID,若爲0,則能夠加任何參數
若非0,則不能加參數
受權別名
做用:簡化受權記錄
例:
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping
zhangsan ALL=(root) NETWORKING
EUID:應用程序執行文件所持有的身份
SUID(SetUID)
定義:在命令的全部者位置有s權限
做用:一個普通用戶在執行具備SUID權限的命令時,該命令的執行者會臨時變動爲命令的全部者
注:
1)普通用戶須要對文件有執行權限
2)SUID只能設置在執行文件或腳本上
SGID(SetGID)
定義:在命令所屬組位置有s權限
做用:
針對文件
一個普通用戶在執行具備SGID權限的命令時,該用戶會臨時加入到命令的所屬組內,以組成員的身份查看文件
針對目錄
一個普通用戶在一個具備SGID權限的目錄下建立文件時,該用戶的有效組臨時變動爲了該目錄的所屬組·
SBIT(STICKY BIT)
定義:在其餘人位置具備權限
做用:黏着位:在具備SBIT權限的目錄下,普通用戶只能刪除本身建立的文件(root除外)
設置特殊權限
chmod ugo +- s file
chmod 4755 file #suid(可執行文件)
chmod 2755 file #sgid(可執行文件&目錄)
chmod 1755 file #sbit(目錄)
umask 0022 0002
第一個位置的 0 表明該數值是一個八進制的數值
SUID : 4755
取消 : 00755
文件系統屬性
格式:chattr [+-] [選項] 文件或目錄
選項:
-i
對文件設置i屬性,那麼不容許對文件進行刪除、更名,也不能添加和修改數據
對目錄設置i屬性,那麼只能修改目錄下文件的數據,但不容許創建和刪除文件
-a
對文件設置a屬性,那麼只能在文件中增長數據,可是不能刪除也不能修改數據
對目錄設置a屬性,那麼只容許在目錄中創建和修改文件,可是不容許刪除
-e
Linux中絕大多數的文件都默認擁有e屬性。表示該文件是使用ext文件系統進行存儲的,並且不能使用"chattr -e"命令取消e屬性
查看文件系統屬性
格式:lsattr 選項 文件名
選項:
-a 顯示全部文件和目錄(顯示隱藏文件)
-d 若目標是目錄,僅列出目錄自己屬性
磁盤管理
1. 開機-加電自檢
2. 主板上的CMOS芯片的BIOS程序-加載到內存中運行
3. 根據BIOS程序所記錄的啓動設備的順序進行引導啓動設備(U盤、硬盤、光盤)
4. 加載硬盤的第一個扇區(MBR)-加載到內存中運行
5. 經過引導記錄引導操做系統
數據存儲:
表示層:文件名
邏輯層:文件系統(data-block:4k) super-block
物理層:扇區(512byte) 分區表(MBR-64byte)
文件系統:
super block:超級塊記錄每一個分區的block的大小、數量;塊位圖(已使用和未使用的inode和block的數量);文件系統掛載時間,最後修改時間,最近檢查時間
data block:數據塊保存真實數據的位置,block的大小和數量在格式化成文件系統時已經固定,除非從新格式化,不然不能修改。單個文件佔用小於一個block的大小時,單獨佔用一個block,剩餘空間不會被利用
MBR(主引導記錄)512byte
1. 主引導程序(Boot Loader):446byte
安裝操做系統後,446字節內就寫入了引導程序
2. 分區表:64byte
每一個分區的信息:16byte進行記錄
最多能記錄幾個分區:4個分區(主+拓<=4)
拓展分區再劃分的邏輯分區不記錄在此位置,單獨記錄在一個扇區中
3. 有效標識符:2byte
55AAH表明着MBR分區表是有效的,GPT分區表(18EB)
GPT:全局惟一標示分區表,又叫giud
LBA:邏輯區塊地址,尋址方式LBA0,LBA1,LBA2.....
LBA0:存儲MBR分區表和GPT指針,由於兼容性
LBA1:存儲硬盤總大小,以及GPT分區表信息,每一個GPT分區表信息佔128字節
LBA2-LBA33:每一個分區信息存放位置共32個扇區,大小是32*512=16384,16384/128=128個分區
分區(MBR分區):
添加新硬盤不重啓
ls /sys/class/scsi_host/ #查看主機總線號
依次掃描總線號
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
fdisk -l 磁盤名 #查看分區信息
fdisk 磁盤名 #進入分區交互模式
m 獲取幫助:顯示可執行的命令
p 查看分區狀態,分區表
n 建立分區
主:n--p--1--起始點--結束點
拓:n--e--2--起始點--結束點
邏輯:n--l--起始點--結束點
d 刪除分區
q 退出不保存
w 保存並退出
格式化(寫入文件系統類型):
mkfs -t ext4 /dev/sdb1
mke2fs -t ext3 -b4096 -i16384 設備分區
mkfs.* 設備分區
掛載分區使用
mount /dev/sdb1 iso/
df -ahT #查看分區文件系統,只有掛載的才能查看
報錯問題
分區表被佔用
partprobe 從新加載分區表(強制-先解鎖分區表)
解決文件系統配置問題
若/etc/fstab文件錯誤,沒法開機,根據提示輸入root密碼
mount -o remount,rw / #從新掛載rw權限
修改錯誤內容
GPT分區步驟
parted 設備 #進入分區交互模式
p #查看分區狀態,分區表
mkladel gpt/msdos #更改分區表類型
mkpart #建立分區
rm #刪除分區
quit #退出,並執行mkfs格式化分區
注:
一、parted中執行都是當即生效
二、parted自帶mkfs命令版本過低,沒法寫入ext2以上文件系統
三、GPT不支持fdisk查看,須要直接進分區模式查看
swap分區步驟
fdisk分出一個分區
fdisk中執行t命令更改分區類型,83普通,82swap
保存退出,執行mkswap格式化分區
swapon 啓用swap分區(臨時)
添加:/etc/fstab 永久更改,開機啓動
/dev/sdb1 swap swap defaults 0 0
注:swap超過8G就沒什麼意義了
爲何要學習shell腳本?
將較爲複雜的實驗操做流程和重複度很高的實驗流程 變爲腳本執行
提升執行效率、減小了錯誤的發生(遺漏、單詞錯誤)
將本來人手動操做的流程,寫成腳本,按照人執行的順序自動執行
將數值、名稱、命令的結果、文本內容、等傳遞到腳本內(變量)
shell的表現形式:
history
-c #清空歷史命令(清空緩存;默認:1000條)
-w #將緩存中的歷史命令保存到配置文件中
~/.bash_history #永久保存歷史命令(默認:1000條)
! 數值 #調用指定條數的歷史命令
↑↓ 光標鍵 #調用原來執行過的歷史命令
!關鍵詞 #調用最近一次以此關鍵詞開頭的歷史命令
!! #執行上一次命令
命令別名
查看:alias
設置:alias 別名='真實命令 -選項'
永久保存:
單個用戶:~/.bashrc
全部用戶:/etc/bashrc
須要從新加載配置文件別名才能馬上生效:
source ~/.bashrc
命令執行順序:
1. /bin/ls
2. ls='ls --color=auto'
3. shell 內置命令
4. 根據環境變量查詢命令所在位置(PATH) /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin
緩存:系統自動爲已存在的命令設置了緩存,當目錄發生變化時,緩存和實際位置不一致,致使找不到命令
標準輸入(鍵盤): /dev/stdin [設備標識號:0] 經過鍵盤向服務器發送指令
標準正確輸出: /dev/stdout [設備標識號:1] ls命令輸出的結果
標準錯誤輸出: /dev/stderr [設備標識號:2] lss命令輸出的結果
模擬標準輸入:echo "123456" | passwd --stdin username 非交互式修改密碼
1. 輸入重定向
① "<"
wc < 統計行數 (常規寫法:wc abc)
cpio -idvcu < *.cpio
patch -pin < *patch
② " << "
# wc << abc
> aside 7y8 hbm,.dd k,2 '
> asked 'd 2 dazed '
> abc
2 10 44
wc "<<" abc 統計指定關鍵詞範圍內的信息標準輸出(顯示器)
2. 輸出重定向
定義:將本來打印到顯示器上的信息,寫入指定的文本或設備中(打印機)
① > 覆蓋式寫入
② >> 追加式寫入
ll > a.txt 會將結果寫入文本
lll > b.txt 不會將報錯寫入文本
經常使用方式:
ifconfig eth0 192.168.88.110/24 &> /dev/null
#將正確和錯誤輸出都傳到/dev/null
ifconfig eth0 192.168.88.110/24 2> /dev/null
#將錯誤輸出都傳到/dev/null
實際應用:
ifconfig eth0 192.168.88.110/24 1> /dev/null
#將正確輸出都傳到/dev/null
ls >/dev/null 2>&1
#將正確和錯誤輸出都傳到/dev/null,效率更高
echo $?
ifconfig eth0 192.168.88.110/24
#若結果不爲0,則再執行一次,打印在屏幕上
選項鍊接符:
-a :find /etc -name "init*" -a -type f
-o :find /etc -size -4K -o -size +10M 不取從4K到10M大小的文件
命令鏈接符:
-exec :find /etc -name "init*" -a -type f -exec ls -l {} \;
-ok :find /tmp -name "init*" -a -type f -ok rm -rf {} \;
| :ls -l /etc/ | more 分頁顯示/etc/目錄下的全部文件的長格式信息
echo "--help" | cat
echo "--help" |xargs cat
#將echo --help 當作cat命令的選項執行
find /etc -name "init*" -a -type f |xargs ls -l
#將find所查詢到的命令結果(任務流方式)使用|xargs傳遞給後面的命令
; :無邏輯關係鏈接符
&& :有邏輯關係,符號前的命令必須執行成功,才執行符號後的命令
|| :有邏輯關係,符號前的命令若執行成功,則不執行符號後的命令
符號前的命令若執行不成功,則執行符號後的命令
[ "$a" == "abc" ] && echo yes || echo no
當a=abc時,輸出yes,不然,輸出no
grep 提取包含關鍵詞的行 (行提取命令)
grep "關鍵詞" 文本文件或文本流
正則表達式
-An 在關鍵詞行向下顯示n行
-Bn 在關鍵詞行向上顯示n行
find 在指定範圍(目錄)內查詢符合條件的文件名&路徑
-name
-type
-user -group
-nouser 查詢沒有全部者的文件
-[acm]time -[acm]min
-size
-perm
-a -o
默認精確查詢 -name abc.txt
模糊查詢:通配符
-name "*abc.txt" 用到通配符的須要用雙引號引用
echo [選項] [輸出內容]
-e 支持反斜線控制的字符轉換
-n 取消輸出後行尾的換行符號
通配符
在進行字符匹配時,實現模糊匹配,find ls cp rm默認匹配的對象是具體的操做對象(精確匹配)
* 匹配任意多個任意字符
? 匹配 一個 任意字符
[] 在指定範圍內匹配任意一個字符
[a-z] [A-Z] [0-9] 連續的範圍
[aoe] 不連續的範圍
[^] 取反,匹配除了括號內的全部字符
Bash特殊符號
1 |
'' |
其內的只是一個普通字符,原來的特殊含義失效 |
2 |
"" |
其內的幾乎是全部字符爲一個普通字符,原來的特殊含義失效 |
3 |
`` |
調用指定命令的結果 |
4 |
$() |
調用指定命令的結果 |
5 |
() |
其內執行的命令都在新開的子shell中執行 |
6 |
[] |
條件判斷公式 |
7 |
{} |
其內執行的全部命令,與當前shell中無異,但格式更嚴謹 |
8 |
# |
註釋 |
9 |
$ |
在bash shell中調用變量 |
10 |
\ |
針對命令的轉意符 |
文字顏色 |
30黑 |
31紅 |
32 綠 |
33黃 |
34藍 |
35 紫 |
36青 |
37白 |
底紋顏色 |
40黑 |
41紅 |
42 綠 |
43黃 |
44藍 |
45 紫 |
46青 |
47白 |
特殊顯示 |
0關閉 |
1高亮 |
4下劃線 |
5閃爍 |
7 反顯 |
8 消影 |
顏色設置:如 \e[1;41;33m \e[0m
'' 全部被單引號所引用的字符,都只是一個普通字符,原來的特殊含義失效
echo '$PATH' $在單引號中沒有調用變量的功能了
"" 幾乎是全部被雙引號引用的字符,都只是普通字符,原來的特殊含義失效,除($ \ ``)
echo "$PATH" $在雙引號中被調用時,是有效的
`` 和 $() 調用指定命令的結果
time=$(date)
abc=`ls *`
() 全部在小括號內執行的命令,都是在新開啓的子shell中執行的,不會影響當前shell,當小括號內的命令執行完成時,新開啓的子shell自動結束消失
{} 全部在大括號中執行的命令,都是在當前shell中執行的,與不加括號無異。大括號要嚴格遵循格式: { name=lisi;echo $name;}
a、大括號的左括號和第一條命令之間須要留一個空格
b、大括號內最後一條命令結尾須要使用;結束
# { name=lisi;echo $name;}
# (name=zhangsan;echo $name) 在子shell中執行
[] 條件判斷公式
① [ "$abc" != "10" ] #在進行 == 和 != 進行判斷時,必須遵循如下a、b兩個原則
# == 和 != 是用來判斷字符和字符串,不是用來判斷數值的。
a、括號兩側必須留有一個空格
b、判斷符號兩側必須留有空格
② [ -f /etc/bashrc ]
-f 判斷指定對象是否存在,判斷該文件是不是普通文件
[ -f /etc/bashrc ] && source /etc/bashrc
# 在shell中是註釋的意思,在文本內不生效,做爲備註和註解
拓展:並非全部的註釋都是不生效的,有些註釋表明默認就生效(/etc/ssh/sshd_config)
;
//
<!-- -->
/* */
$ 調用指定變量的值,在bash shell中是這樣的,其餘shell中不必定
echo "$PATH"
\ 將全部的特殊字符和字符串轉義爲普通字符和字符串(針對命令)
(1) 變量的定義規範:
1. 字母、數字、下劃線(不能以數字開頭、不能有空格、不能使用除下劃線之外的符號)
2. 賦值符號:= (等號左側不能有空格)
a、變量的名稱不能帶空格
b、變量的值能夠有空格(帶空格的必須使用雙引號,引用做爲一個總體)
3. 變量的值:無特殊要求(有空格使用雙引號)
4. 變量的類型有多種,某些變量要求變量名必須是大寫的!(環境變量)
(2) 變量的分類:
1. 用戶自定義變量
聲明:x=100
調用:echo $x
set #查看當前shell中全部生效了的變量
-u #設置後,再調用未聲明變量時,會報錯。
-x #設置後,執行命令時,每次都會先把命令打印一遍,而後再輸出結果
2. 環境變量
根據登陸用戶身份所設置的變量就叫環境變量(值隨着用戶身份變化)
使用 export 命令聲明的變量就叫環境變量
如:export CON
PATH="$PATH:/usr/local/apache2/bin"
/etc/bashrc /etc/profile 針對全部用戶
~/.bashrc ~/.bash_profile 針對單個用戶
source file
LOGNAME= 當前用戶名
PATH= 保存了命令所在位置的變量
PS1= 決定了命令提示符格式的變量
LANG= 決定了當前shell中的語系類型的變量
echo $LANG 當前shell中的語系變量
默認語系變量/etc/sysconfig/i18n #默認加載的語系變量
3. 位置參數變量(變量名不能夠修改)
按照預設位置將指定位置的值傳遞到腳本內等待被處理
$n:n爲數字,$0表明命令自己,$1-$9表明帶一個到第九個參數,大於10要用大括號,如${10}
$*:表明命令行中全部的參數,但把全部的參數當作一個總體
$@:表明命令行中全部的參數,但把每一個參數區分對待
$#:表明命令行中全部參數的個數
按照預設位置將指定位置的值傳遞到腳本內等待被處理
#!/bin/bash
x=0 #定義一個變量初始值爲0,並設置變量自增幅度爲1
for a in "$*" #使用for循環將$*或$@的值賦給變量a,
do
let x+=1 #變量自增,幅度爲1,實現指定第幾個參數
echo "第$x個參數的值是$a"
done
echo "一共有$#個參數"
4. 預約義變量(變量名不能夠修改)
echo $? #獲取上一條命令的返回值(0:正常 非0:報錯)
exit 定義命令執行後的返回值是多少,經過返回值判斷故障點
[ -f /etc/ssh/sshd_config ] || exit 6
# -f :判斷該文件是否存在且爲普通文件
$$ 當前進程的進程號
$! 最後一個後臺的進程號
(3) 變量聲明
命令:declare [+/-] [選項] 變量
- : 給變量設定類型
+ : 取消變量的類型
-a : 將變量聲明成數組型
-i : 將變量聲明成整數型
-r : 將變量聲明成只讀(變量值不能修改,也不能刪除,更不能取消只讀選項)
-x : 將變量聲明成環境變量
-p : 顯示指定變量的類型及內容
read 獲取鍵盤輸入(變量賦值)
多個變量時,會依次取值,變量不夠時,最後一個變量會取全部值。
read -p "顯示的提示信息" 變量
$(($a+$b))
$[$a+$b]
let xx=$a+$b let數值運算
declare -i c=$a+$b 聲明變量爲整型,進行數值運算
expr: 數值運算,該公式會自動將數字識別爲數值
expr $a + $b
#運算符兩側必須有空格
#注意變量自增的時間點(程序執行前自增 或 程序執行後自增)
正則表達式
(1) 正則表達式:
* |
前一個字符任意屢次(*前邊必須有一個字符) |
基礎正則表達式 |
. |
匹配任意一個字符 |
基礎正則表達式 |
^ |
限制行首 |
基礎正則表達式 |
$ |
限制行尾 |
基礎正則表達式 |
[] |
其內任意一個字符,[A-Za-z][0-9][^0-9][abc][a-cdf] |
基礎正則表達式 |
\{n\} |
前一個字符重複n次 |
基礎正則表達式 |
\{,n\} |
前一個字符重複0到n次 |
基礎正則表達式 |
\{n,\} |
前一個字符至少重複n次及以上 |
基礎正則表達式 |
\{n,m\} |
前一個字符重複n次以上m次如下 |
基礎正則表達式 |
+ |
前一個字符一次或屢次 |
egrep |
? |
前一個字符0次或一次 |
egrep |
| |
分支符號(或者) |
egrep |
() |
其內爲一個總體匹配一個字符, |
egrep |
注:當用到egrep時"\{\}"中的反斜槓取消
(2) 基礎正則表達式:
* 匹配前一個字符任意屢次(連續)
*前一個字符連續出現了多少次(*前邊必須有一個字符)
. 匹配任意一個字符(除去換行符之外)
若某文本要過濾包含. 的行,則須要使用轉義符將.的特殊含義取消
grep "\." /sh/passwd
^ 匹配行首
$ 匹配行尾
grep "\.$" /sh/passwd #過濾以.結尾的行
grep -v "^$" /sh/passwd #取消文本的空白行
[] 匹配括號內的任意一個字符
[0-9] [a-zA-Z] [^0-9] #儘可能不要使用[a-Z]
注:除了鏈接符 - 之外,不可使用其餘符號
\{n\} # 過濾必須出現指定次數的行
\{n,\}
# grep "a\{0,\}" passwd | wc -l
# grep "a*" passwd | wc -l
\{,n\}
\{n,m\}
# grep "o\{2,3\}" /sh/passwd
(3) 擴展正則表達式:
指定匹配的前一個字符出現的次數(相似於*)
在使用egrep 或 grep -E 時,不須要使用轉義符
+ 匹配前一個字符一次或任意屢次
? 匹配前一個字符0次或1次
| 分支符號(或者)
(4) 正則表達式過濾手機號碼和ip
1. 中國手機號碼:
以1開頭,11位連續的數字
grep "1[0-9]\{10\}" sj.txt
每行中只有手機號的:
grep "^1[0-9]\{10\}$" sj.txt
中國聯通:130、13一、13二、 14五、 15五、15六、 18五、186
拆分:
13[012][0-9]{8}
145[0-9]{8}
1[58][56][0-9]{8}
組裝:
1(3[012]|45|[58][56])[0-9]{8}
2.IP範圍0-255
拆分(怎麼容易寫正則匹配怎麼拆分):
0-9 [0-9]
10-99 [1-9][0-9]
100-199 1[0-9][0-9]
200-249 2[0-4][0-9]
250-255 25[0-5]
組裝:egrep "[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]" b
過濾IP
^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$
cut 列提取命令(行操做命令:逐行提取指定列)
默認的分隔符是:tab ;還能夠手動指定分割符:(空格、冒號、百分號、@)
-f #指定提取的列號
-d 分隔符 #指定分割符
-c #座標提取,字符範圍:不依賴分割符來分割,而是經過字符範圍進行字段提取("-m"表示從第一個字符提取到第m個,"n-m"表示從第n提取到第m個字符,"n-"表示從第n個字符開始提取到結尾。
提取2到10列中的字符,當使用-c時,則不能用-d
cut -c "2-10" /etc/passwd
提取以":"做爲分隔符的第一列
cut -d ":" -f 1 /etc/passwd
awk #行提取,並處理
awk爲列提取&行提取 (逐行操做)
awk '條件{動做}' 參數
命令 | awk '條件{動做}'
動做:
print 標準輸出 (自動套用原格式)
printf 標準格式化輸出 (取消全部的格式輸出;能夠人爲指定輸出格式)
\t #tab
\n #換行
awk 處理下列文本時的處理流程:
ID NAME AGE SEX
1 lanc 18 man
2 sans 19 man
3 sc 38 oman
a) 讀取該文本的第一行(逐行)
根據第一行中 列的數量 設置位置參數變量
讀完第一行後,$0-$4都有了本身的值
$0 當前的整行
$1 第一個列的值
$n 第n個列的值
b) 當第一行處理完成後,去查看'條件{動做}'
使用printf 輸出符合條件的$n,而且不顯示"%"
do -h | grip "\/$" | awk '{printf $5"\n"}' | cut -d "%" -f 1
指定的分隔符號
awk默認識別的分隔符:tab 和 空格
打印/etc/passwd文件中第一列和第七列:
awk -F ":" '{printf $1"\t"$7"\n"}' /etc/passwd
awk 'BEGIN{FS=":"}{printf $1"\t"$7"\n"}' /etc/passwd
BEGIN 在未讀取文本以前 就先執行的條件和動做,指定該文件中的分隔符爲";"。
條件設置
awk的條件
BEGIN和END 條件只執行一次!
awk保留字 |
BEGIN |
在未讀取文本以前就先執行的條件和動做 |
END |
在處理文本完成後,再執行的命令 |
|
關 系 運 算 符 |
> |
大於 |
< |
小於 |
|
>= |
大於等於 |
|
<= |
小於等於 |
|
== |
等於,判斷相等 |
|
!= |
不等於 |
|
A~B |
A包含B |
|
A!~B |
A不包含B |
|
正則 |
/正則/ |
在"//"中支持正則表達式 |
打印文件中以":"分隔的第一列和第七列
# awk 'BEGIN{FS=":"}{printf $1"\t"$7"\n"}' /etc/passwd
打印文件中第一列,並在最後打印"OK"字符
# awk 'END{printf "ok\n" }{printf $1"\n"}' /etc./passwd
打印文件中以":"分隔的第一列和第七列,並在最後打印"OK"字符
# awk 'BEGIN{FS=":"}END{printf "ok\n" }{printf $1"\t"$7"\n"}' /etc./passwd
打印file文件中第二列中包含"chao"且第三列大於"35"的值
# awk '$2~chao{動做1} $3>35{動做2}' file
兩個條件動做之間用空格做爲分隔符
# awk '$2>30{動做1;動做2;動做3}' file
一個條件多個動做時,使用";"分隔
變量:
awk內置變量 |
做用 |
$0 |
表明awk讀入的一整行數據 |
$n |
表明awk讀入的當前行的第n列數據 |
NR |
表明當前awk正在處理的行的行號 |
NF |
表明當前awk讀取數據總字段數(列) |
FS |
用來聲明awk的分隔符,如BEGIN{FS=":"} |
從第二行開始提取
# awk 'NR>1{printf $3"\n"}'
awk NF 變量的特殊使用方式:
# head -3 /etc./passwd|awk -F ":" '{printf $(NF=5)"\n"}'
# head -3 /etc./passwd|awk -F ":" '{printf $(NF-2)"\n"}'
awk編程
在awk編程中,由於命令語句很是長,輸入格式時須要注意如下內容:
多個條件{動做}能夠用空格分割,也能夠用回車分割。
在一個動做中,若是須要執行多個命令,須要用";"分割,或用回車分割。
在awk中,變量的賦值與調用都不須要加入"$"符。
條件中判斷兩個值是否相同,使用"==",以便和變量賦值進行區分。
Sed #文本修改
非交互式文本修改工具(提取、替換、刪除、新增)
選項:
-n sed命令會把全部數據都輸出到屏幕,-n會把通過sed命令處理的行打印。
sed -n '2p'文件名 #顯示第二行的信息
-e :容許對輸入數據應用多條sed命令編輯。
-f : 腳本文件名:從sed腳本中讀入sed操做。和awk命令的-f很是相似。
-r :在sed中支持擴展正則表達式。
-i :用sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出
# sed -i '2c No such person' 文件名
動做:
p :打印,輸出指定的行。
打印的二行數據
# sed '2p' file
a :在當前行後添加一行或多行。添加多行時,除最後一行外,每行末尾須要用"\"表明數據未完結。
# sed '2a new' file
i :在當前行前插入一行或多行。插入多行時,除最後一行外,每行末尾須要用"\"表明數據未完結。
# sed '2i new' file
c :替換
整行替換,c後面的字符替換原行,替換多行時,除最後一行外,每行末尾需用"\"。
# sed '2c No such person' file
替換含有IPADDR=的行爲IPADDR=10.10.10.100
# sed -i "s/IPADDR=.*/IPADDR=10.10.10.100/g" file
d :刪除指定的行。
刪除2到4行數據
# sed '2,4d' file
刪除行首含有'#'號的行
# sed '/^#/d' file
e :用一個字符串替換另一個字符串。格式爲"行範圍s/ 舊字串/新字串/g"
替換第n行的old爲new
# sed 'ns/old/new/g' file n表明第幾行
其中"g"是將整行全部的都替換,若不加,只替換第一個old
sed 要進行多行操做時,只能經過-e 寫多條操做語句,用";"或回車分隔。
如:刪除文件中空行和註釋
# sed -i -e '/^$/d;/^#/d' config_file
Sort 排序命令
sort [] 文件名
-f 忽略大小寫
-b 忽略每行前的空白部分
-n 以數值型進行排序,默認使用字符串類型排序
-r 反向排序
-u 刪除重複行(=下面的uniq)
-t 指定分隔符,默認分割符是製表符
-k n[,m] 按照指定字段範圍排序,從n字段開始到m字段結束。
sort 命令默認使用每行開頭第一個字符進行排序
以":"爲分隔符。對第三列進行數值排序
sort -n -t ":" -k 3 /etc/passwd
假如 要進行反向排序則須要加-r 選項按照指定的排序字段進行排序,使用-t 指定分割符 , 而且使用-k 指定段號,加上-n 以後成爲了數值排序。指定範圍時咱們能夠寫 –k 3,5 也能夠寫3,3 == 3
取消重複行uniq
uniq用來取消重複行,與sort –u 是同樣的,格式:
uniq [] 文件名
-i 忽略大小寫
-c 在行首顯示出現的次數
-d 僅顯示顯示重複行
-u 僅顯示不重複的行
須要注意的是,當重複行不連續時,uniq是不生效的,須要先排序,再執行
提取文件中的IP,排序並打印訪問量最高的前10行
awk -F " " '{print $1}' /root/sh/logfile.log | sort | uniq -c | sort -nr | head
按照文件類型進行判斷
-b |
判斷文件是否存在,且是否爲塊設備文件 |
-c |
判斷文件是否存在,且是否爲字符設備塊文件 |
-d |
判斷文件是否存在,且是否爲目錄文件 |
-e |
判斷文件是否存在,存在爲真 |
-f |
判斷文件是否存在,且是否爲普通文件 |
-L |
判斷文件是否存在,且是否爲軟鏈接文件 |
-p |
判斷文件是否存在,且是否爲管道文件 |
-s |
判斷文件是否存在,且是否爲非空 |
-S |
判斷文件是否存在,且是否爲套接字文件 |
按照文件權限進行判斷
-r |
判斷文件是否存在,且有r權限 |
-w |
判斷文件是否存在,且有w權限 |
-x |
判斷文件是否存在,且有x權限 |
-u |
判斷文件是否存在,且有SUID權限 |
-g |
判斷文件是否存在,且有SGID權限 |
-k |
判斷文件是否存在,且有SBIT權限 |
兩個文件之間進行比較
a -nt b |
判斷a文件的修改是否比b文件新 |
a -ot b |
判斷a文件的修改是否比b文件舊 |
a -ef b |
判斷a文件和b文件的Inode號是否同樣 |
字符串的判斷
-z |
判斷字符串是否爲空(變量) |
-n |
判斷字符串是否爲非空(變量) |
a == b |
判斷字符串a和b是否相等 |
a !== b |
判斷字符串a和b是否不相等相等 |
兩個整數之間進行比較
[ a -eq b ] |
a=b |
[ a -ne b ] |
a!=b |
[ a -gt b ] |
a>b |
[ a -lt b ] |
a<b |
[ a -ge b ] |
a>=b |
[ a -le b ] |
a<=b |
多重條件判斷
判斷1 -a 判斷2 |
邏輯與,判斷1和判斷2,都成立爲真 |
判斷1 -o 判斷2 |
邏輯或,判斷1和判斷2,有一個成立爲真 |
!判斷 |
邏輯非,取反原判斷式, [ ! 2 -eq 3 ] |
if [];then
語句
fi
if [];then
語句
else
語句
fi
if [];then
語句
elif
語句
elif
語句
....
else
語句
fi
for i in 資源池
do
語句
done
for ((;;))
do
語句
done
while [](成立循環)
do
語句
done
nutil [] (不成立循環)
do
語句
done
while true(無限循環)
do
語句
done
while : (無限循環)
do
....
done
exit 退出腳本
break 退出循環
contnue 結束當次循環
shell計算:
echo $(seq 1 10) 取1-10範圍內的整數(可直接應用於for的循環結構中)
浮點運算
c=$(echo "5.01-4*2.0"|bc)
echo $c
-2.99
c=$(awk 'BEGIN{print 7.01*5-4.01 }')
echo $c
31.04
數組
數組聲明:
declare -a abc
abc[0]=1,abc[1]=2
unset abc
unset abc[1]
數組賦值:
a、
abc=(1 2 3) a[0]=1;a[1]=2;a[2]=3
b、
a="1 2 3"
abc=($a)
調用數組全部值:
echo ${abc[*]}
echo ${abc[@]}
數組長度獲取:
數組長度(元素數=值的個數):
${#abc[@]}
元素長度:
echo ${abc[1]} | wc -L
echo -n ${abc[1]} | wc -L
#去掉換行符再統計
數組遍歷:
abc=(1 2 3)
a=0
for i in ${abc[@]}
do
echo "下標爲$a的元素的值爲:$(i)"
let a++
done
數組元素修改:
abc=(1 2 3)
abc[3]=10
abc=(1 2 3)
bcd=(${abc[*]} 4)
echo $(bcd[*])
數組切片:
abc=(1 2 3 4 5 6 7)
${abc[@]}
${abc[@]:1}
#從下標爲1的位置開啓取值,取全部
${abc[@]::3}
#從下標爲0的位置連續取3個值
${abc[@]:2:3}
#從下標爲2的位置連續取3個值
${abc[@]:(-2):2}
#從倒數第二個下標位連續取2個值
bcd=(${abc[@]:(-2):2})
#將以前的處理結果賦值給新的數組變量
元素切片:
abc=(zhangsan lisi laowang laosong)
${abc[0]}
##取第一個元素的全部字符
${abc[0]:1}
#從第一個元素的下標爲1位置開始,取剩餘全部字符
${abc[0]::3}
#從第一個元素的下標爲0位置開始,連續取三個字符串
${abc[0]:2:3}
#從第一個元素的下標爲2位置開始,連續取三個字符串
數組替換:
abc=(one two three four)
${abc[@]/e/E}
#每一個被匹配元素只替換一次
${abc[@]//e/E}
#每一個被匹配元素替換屢次
${abc[@]/e/}
#每一個被匹配元素只刪除一個字符
${abc[@]//e/}
#每一個被匹配元素刪除多個字符
abc=(zhangsan lisi laowang laosong)
${abc[0]/#z/Z}
#將數組內第一個元素的首字符z替換成Z
${abc[0]/%n/N}
#將數組內第一個元素的尾字符n替換成N
#若想實現每個都智能替換,要使用很複雜的循環,暫不建議如今編寫
將1個字符串拆分爲多個字符串(sed替換時,有空格)
a=`echo 2018-04-28_12:15:30_ABC.log |awk -F "." '{printf $1}'| sed -r 's/[-_:]/ /g' | tr -d "[a-zA-Z]"`
abc=(${a})
for i in ${abc[@]}
do
echo $i
done
利用數組求最大值
a=(34 78 3 95 62 59 100)
max=${a[0]}
len=${#a[@]}
for ((i=1;i<$len;i++))
do
if [[ ${a[i]} -gt ${max} ]]
then
max=${a[i]}
fi
done
echo "數組中最大值爲:$max"
字符串反轉輸出:
(a=$(seq 1 9);echo $a|rev)
定義:限制用戶和組在指定分區上的使用空間和文件數目(inode號數量)
實驗規劃
1. 建立足夠大的分區
根據用戶額度的需求建立分區(10G)
分區、格式化、掛載(/movie)
2. 建立用戶和組
用戶要指定thot做爲初始組
[root@localhost ~]# groupadd thot
[root@localhost ~]# useradd -g thot cj
[root@localhost ~]# useradd -g thot bd
[root@localhost ~]# useradd -g thot xz
3. 配額的規劃
thot 軟:400M 硬:500M 軟:8 硬:15
cj 軟:40M 硬:50M 軟:6 硬:10
bd 軟:200M 硬:250M 軟:4 硬:8
xz 軟:200M 硬:250M 軟:4 硬:8
實驗流程
1. 檢查操做系統是否支持磁盤配額
grep "CONFIG_QUOTA" /boot/config-*****
CONFIG_QUOTA=Y #若查詢結果中爲y證實支持配額
2. 查看配額相關設置工具是否安裝
rpm -q quota #驗證quota是否安裝
3. 分區的建立:
建立足夠大小的分區
建立用戶和組:
建立用戶時指定thot做爲初始組
4. 開啓磁盤配額
vim /etc/fstab #自動掛載
/dev/sdb1 /movie ext4 default,usrquota,grpquota,acl 0 0
mount -a #從新加載/etc/fstab文件,使新增的掛載生效
#若以前已經手動掛載了/dev/sdb1,則在執行mount -a 以前先卸載掉以前的掛載
驗證是否掛載成功:mount
/dev/sdb1 on /movie type ext4 (rw,usrquota,grpquota,acl)
5. 生成磁盤配額配置文件 #必須先關閉SELinux!!!!!!!!
quotacheck -avug
-a 自動掃描/etc/mtab,根據掛載屬性,爲全部開啓了磁盤配額的分區建立配額文件
-v 顯示過程
-u 建立用戶配置文件
-g 建立組配置文件
-c 清除原配置文件,生成新的配置文件
驗證是否生成配置文件的方式:
在指定分區的掛載點下:是否生成下列的兩個文件
aquota.group
aquota.user
#必須先關閉SELinux!!!!!!!
6. 編輯配置文件,寫入限制(默認單位是K,可使用K,M,G,T)
edquota
-u 用戶名 #給指定用戶設置配額
-g 組名 #給指定組設置配額
-t #設置寬限天數
-p #將已設置的額度複製給指定用戶
edquota -p bd -u xz
7. 啓用設置好的配額
quotaon
-avug #啓用配額
quotaoff
-avug #關閉配額
8. 查看設置的磁盤配額的額度(查看)
quota
-uvs 用戶名 #查看指定用戶的配額(全部磁盤對此用戶的限制)
-gvs 組名 #查看指定組的配額
repquota
-ugvs 分區名 #查看指定分區上,限制了哪些用戶和組,以及額度
9. 驗證額度是否生效
使用普通用戶執行驗證命令
dd if=/dev/zero of=/movie/* bs=1M count=40
dd if=數據來源地址
of=數據目標地址
bs=每次寫入指定目標時,所寫入的塊的大小(最好用4096-保證和block大小一致)
count=所寫入的塊的個數
/dev/zero :擁有無限個0的設備
/dev/null :黑洞,能夠接收任何數據(不限大小)回收站
/dev/urandom :隨機設備文件,輸出隨機字符
1. 數據銷燬:
dd if=/dev/zero of=/dev/sdb
2. 測試磁盤的讀寫效率
dd if=/dev/zero of=/movie/aaa bs=4096 count=512 #測試寫入效率
dd if=/movie/aaa of=/dev/null bs=4096 #測試讀取速度
make >> /dev/null
echo $?
將命令的執行過程重定向到/dev/null中,簡化執行過程當中的顯示
磁盤陣列分類:一是外接式磁盤陣列櫃、二是內接式磁盤陣列卡,三是利用軟件來仿真
Raid(磁盤陣列)
Raid 0 帶區卷
Raid 1 鏡像卷
Raid 5 在每塊硬盤中分出一個區,寫入奇偶校驗值
Raid 10 先作鏡像卷,再作帶區卷
Raid 01 先作帶區卷,再作鏡像卷
硬件Raid纔有實際用途,軟Raid沒有實際用途(可否開機問題)
卷名 磁盤數量 硬盤容量 動態擴容 磁盤容錯 速度
簡單卷 只能1塊 / 用於 不支持 /
跨區卷 至少2塊 能夠不一致 用於 不支持 /
帶區卷 至少2塊 必須一致 / 不支持 最快
鏡像卷 只能2塊 必須一致 利用率50% 支持 最慢
Raid 5 至少3塊 必須一致 利用率N-1 支持 較快
raid 10
基礎:/dev/sdb /dev/sdc /dev/sdd /dev/sde
熱備:/dev/sdf /dev/sdg
mdadm -Cv 邏輯磁盤名稱(md*) -l10 -n 基礎磁盤(4個) -x 熱備(2)
mdadm -S /dev/md127 #中止運行raid
mdadm --zero-superblock /dev/sdb #清空raid數據
mdadm -sD 設備名 #查看raid信息
mdadm -D 設備名 #查看更詳細信息
mdadm /dev/md127 -f 設備名 #標記某塊磁盤損壞
熱備磁盤
全局熱備:對陣本服務器上的全部raid陣列進行熱備
局部熱備:針對指定的raid陣列進行熱備
定義:融合成一個或幾個大的虛擬磁盤存儲池,按照咱們的需求去存儲池劃分空間來使用
物理卷(PV,Physical Volume):由磁盤或分區轉化而成
卷組(VG,Volume Group):將多個物理卷組合在一塊兒組成了卷組
格式:vgcreate 選項 卷組名 物理卷名(能夠寫多個,空格分開)
-s 大小:指定VG的PE大小
格式:vgextend 卷組名 物理卷名
格式:vgreduce 卷組名 物理卷名
vgreduce –a 卷組
#刪除指定卷組內全部空的物理卷
邏輯卷(LV,Logical Volume):把卷組理解爲硬盤的話,那麼咱們的邏輯卷則是硬盤上的分區,邏輯卷能夠進行格式化,存儲數據
格式:lvcreate 選項 -n 邏輯卷名 卷組名
-L 容量:指定建立的邏輯卷大小,單位:MB,GB,TB等
-l(小) 個數:按照PE個數來指定邏輯卷大小
-n 邏輯卷名:指定邏輯卷叫什麼名
注:由於邏輯卷至關因而分區,因此須要進行格式化和掛載才能使用,及自啓動
注:修改lv及文件系統的大小,必須先將lv及文件系統卸載(umount)
lvextend -L +10G /dev/testvg/testlv #先增長lv的大小
resize2fs -f /dev/testvg/testlv 30G #再修改文件系統的大小
注:減小lv空間的操做是有風險的,操做以前必定要作好備份,以避免數據丟失。
e2fsck -f /dev/vg/lv #檢查文件系統
resize2fs /dev/vg/lv newsize #減小後文件系統大小
lvreduce -L newsize /dev/vg/lv #減小後lv大小
物理擴展(PE,Physical Extend):PE卷組的最小存儲單元,PE所在的位置是VG卷組,即硬盤上,那麼咱們能夠把PE理解爲硬盤上的扇區,默認是4MB,可自由配置
lvextend -L 15G /dev/clustervg/clusterlv #從10G增長到15G
服務的分類(CentOS 6.*):
RPM安裝的服務:獨立式服務:在/etc/init.d/有獨立腳本的叫獨立服務
手動啓動:
1. service 服務名 start|stop|restart.....
2. /etc/init.d/服務名 start|stop|restart....
開機自啓動:
1. chkconfig --level 2345 服務名 on|off
2. /etc/rc.d/rc.local #藉助自啓動腳本執行服務的啓動命令
集中管理式服務:經過一個大的服務(xinetd)管理一些小的服務的模式
1.、安裝xinetd大服務yum -y install xinetd
二、安裝telnet-server小服務yum -y install telnet-server
3.、/etc/xinetd.d/*有全部的小服務的配置文件
修改小服務的配置文件(開關:disabled=yes 修改成no)
四、重啓xinetd服務service xinetd start
五、經過windows使用telnet鏈接Linux
telnet 192.168.10.100 23(使用非root用戶登陸)
源碼包安裝的服務:(默認:沒法使用service和chkconfig管理)
手動:
1. 絕對路徑:/usr/local/apache2/bin/apachectl start|stop|restart....
二、別名:alias str='/usr/local/apache2/bin/apachectl start'
三、連接:ln -s /usr/local/apache2/bin/* /usr/local/bin
四、寫個管理腳本:./http start|stop|restart
自動:
1. /etc/rc.d/rc.local #寫入源碼包啓動管理命令(case語句)
2. 實現使用chkconfig管理:
a、在實現了service的基礎上,修改腳本,添加兩句話便可:
# chkconfig: 2345 55 25
#第一串數字表明以什麼等級啓動,第二第三串數字表明軟鏈接時以什麼方式命名
# description: SSH is a protocol for secure remote shell access.
b、chkconfig --add 腳本名
#偶然會出現報錯:由於兩個數值超過了99
c、檢查是否添加成功
chkconfig --list 腳本名
基本上runlevel分爲0-6 ,7個等級:
0:關機,shutdown
1:單用戶模式(sigle user),root用戶,無須認證;維護模式
2:多用戶模式(multi user),會啓動網絡功能,但不會啓動NFS;維護模式
3:多用戶模式(multi user),徹底功能模式;文本界面
4:預留級別:目前無特別使用目的,但習慣同3級別使用
5:多用戶模式(multi user),徹底功能模式,圖形界面
6:重啓模式
啓動流程
加電BIOS自檢
一、主要檢測主機硬件設備如:CPU、內存、硬盤、顯卡等是否正常
二、BIOS中設置的系統啓動順序來搜索可啓動的磁盤設備(光盤、硬盤、U盤)
三、搜到第一個可啓動的設備後就讀取該設備的第一個扇區的內容並執行
系統引導
以MBR爲例:
一、Boot Loader(446b)查找內核位置
GRUB經過hd0,0找到了存放grub.conf的位置
經過grub.conf所聲明的根(root (hd0,0)獲取了內核和內核擴展文件的位置
二、識別分區表(64b)
查看全部分區的大小和結構
GRUB功能
一、選擇要啓動的內核或系統
二、提供交互式接口(e編輯模式)
三、提供密碼保護
kenrel啓動
一、加載vmlinuz:壓縮的kenrel程序,即內核,
二、一部分驅動程序會被直接編譯進內核文件中
三、另外一部分驅動程序會以模塊的形式放在initrd中
四、initrd包含根文件系統所在設備驅動和相關程序,是kenrel可以識別並加載根的橋樑
六、內核被加載到內存中當即初始化系統中的設備,包括CPU、I/O、存儲等
七、內核會以只讀的方式掛載根文件系統,而且運行第一個程序/sbin/init
init啓動(系統守護進程)
/sbin/init進程是系統第一個啓動的程序,它是其餘全部進程的父進程。首先會去讀取/etc/inittab文件來執行相應的腳本進行系統初始化,如設置鍵盤、字體,裝載模塊,設置網絡等,在niittab中有一個很重要的設置選項runlevel。根據runlevel的不一樣啓動不一樣的服務,讓Linux的使用環境不一樣
一、執行系統初始化腳本(/etc/rc.d/rc.sysinit),對系統進行基本的配置,以讀寫方式 掛載 根文件系統及其它文件系統,到此係統算是基本運行起來了,後面須要進行運行級別的肯定及相應服務的啓動
/etc/rc.d/rc.sysinit功能:
設置主機名
打印文本歡迎信息
激活selinux和udev
激活swap
掛載/etc/fstab中定義的本地文件系統
檢測根文件系統並以讀寫方式從新掛載
設置系統時鐘
裝載鍵盤映射
根據/etc/sysctl.conf設置內核參數
激活軟RAID和VM設備
清理操做
二、執行/etc/rc.d/rc腳本,該文件定義了服務啓動的順序是先K後S,而具體的每一個運行級別的服務狀態是放在/etc/rc.d/rc*.d(*=0~6)目錄下,全部的文件均是指向/etc/init.d下相應文件的符號連接。rc.sysinit經過分析/etc/inittab文件來肯定系統的啓動級別,而後纔去執行/etc/rc.d/rc*.d下的文件
三、執行用戶自定義引導程序/etc/rc.d/rc.local完成了系統全部的啓動任務後,linux會啓動終端或X-Window來等待用戶登陸
四、最後一步輸入用戶名及密碼就能夠登入系統了
grub.conf是grub的主配置文件,經過這個配置文件,grub才能找到kernel
default:定義默認啓動的操做系統
timeout:定義選擇操做系統菜單的等待時間
splashimage:指定咱們選擇kernel或操做系統菜單後面那張圖片
hiddenmenu:表示隱藏選擇k操做系統的菜單,只有出現等待界面後按下enter鍵纔會出現。若是沒有這個字段,則每次系統啓動都會出現這個選擇菜單。
title identify:指定一個操做系統,linux中能夠有多個title;identify是這個操做系統的識別符,能夠隨意寫。
root:用於指定grub所能識別的根,而不是根文件系統。
kernel:用於指定系統的內核文件的位置
initrd:幫助kernel完成系統的啓動,例如加載根文件系統所在分區的驅動等。若是kernel自己有相應強大的功能,則不須要initrd
password:設定密碼。放在title外表示進入操做系統等待菜單的編輯模式須要密碼,而放在title內表示啓動對應的操做系統須要密碼,密碼能夠是明文或是用MD5進行加密過的。能夠防止其餘人進入編輯kernel菜單進入單用戶模式啓動咱們的系統
背景圖片的位置:splashimage=(hd0,0)/grub/splash.xpm.gz
grub是以hd來識別磁盤的,第一磁盤爲hd0,第二個磁盤爲hd1...,而hd0,0表示第一個磁盤的第一個分區,hd0,1表示第一個磁盤的第二個分區...,而且grub是直接讀分區來找到對應的文件;而個人系統上只有一塊硬盤,而且/boot是一個單獨的分區,而且爲系統的第一個分區,grub等文件在這個分區上。(若是你的系統上/是一個獨立分區,而且boot,grub和其中的文件都在/這個分區中,則這段應該是: splashimage=(hd0,0)/boot/grub/splash.xpm.gz)因此它的意思是:grub在第一個分區中找到grub這個目錄,再找到這個圖片文件做爲背景.
圖片的特色爲:
1,必須是xpm的格式
2,必須用gzip壓縮
3,最多使用14位的顏色位數
4,分辨率640*480
修改背景圖片:
yum -y install ImageMagick
convert -resize 640x480 -colors 14 153067412492.jpg splash.xpm
gzip splash.xpm
將生成的文件導入到/boot/grub/下(導入前先將源文件備份)
vim /boot/grub/grub.conf
添加:
password=123456
a. 密碼添加在title前面
將密碼放在這個位置時,在選擇grub菜單時就須要輸入密碼了。
b. 密碼添加在title後面
密碼在這個位置時,選擇完操做系統後,在進入系統引導時才須要輸入密碼。
設置MD5加密密碼
grub-md5-crypt #生成MD5密碼串
vim /boot/grub/grub.conf
添加:
password --md5 MD5密碼串
grub密碼破解
使用光盤啓動
進入修復模式
chroot /mnt/sysimage #將/mnt/sysimage 從新掛載爲可讀寫的/
vim /boot/grub/grub.conf
刪除:
password=****
exit #只能使用exit退出
reboot
a. 重啓系統後出現GRUB界面在引導裝載程序菜單上,用上下方向鍵選擇你忘記密碼的那個系統鍵入"e" 來進入編輯模式
b. 接下來你能夠看到以下圖所示的畫面,而後你再用 上下鍵選擇最新的內核(這裏是第二行,kernel..),而後繼續按"e"鍵。
而後在編輯界面rhgb quiet後面加"空格",而後鍵入"single",或者直接輸入數字的"1"並回車肯定。
回車後,按"b"鍵啓動進入單用戶模式,在這裏修改root的密碼。
通常在grub被覆蓋的狀況下咱們須要進行手動的安裝grub到咱們的MBR中,那如今的問題是grub已經損壞了,咱們沒有一個能夠交互寫命令的地方了,應該怎麼設置呢?so…咱們要藉助光盤上的拯救模式。
根據提示加載光盤上的虛擬系統後,咱們須要手動安裝下grub
a. chroot /mnt/sysimage
因爲是光盤啓動的救援模式,so….它的根目錄是虛擬的,咱們須要用chroot命令將真根目錄掛載回來
b. 執行grub 進入交互界面
root (hd0,0) #設置grub的主目錄
setup (hd0) #直接將grub安裝到MBR中,不須要指定分區(硬盤開頭)
quit
c. 重啓
模塊位置:
/lib/modules/2.6******/kernel/
模塊名保存文件:
/lib/modules/2.6******/modules.dep
depmod #模塊同步到modules.dep中
-a #掃描全部,並寫入*.dep
-A #掃描新模塊,並寫入*.dep
-n #顯示到屏幕,不寫入*.dep
查看內核模塊
lsmod #查詢全部模塊的信息
modinfo #查詢某模塊的簡單信息
添加刪除內核模塊
modprobe [選項] 模塊
a. 下載到相應的模塊
b. 複製到指定位置,通常/ib/modules/2.6******/kernel/
c. 用depmod進行掃描,將新模塊寫入modules.dep文件中
d.用modprobe進行安裝
日誌管理:/var/log/
服務: rsyslogd(必須開機自啓)
做用:分析日誌是由哪一個服務產生的,根據rsyslogd配置文件,決定哪些服務的日誌保存位置
包含的服務
日誌文件 |
說明 |
/var/log/cron |
記錄了系統定時任務相關的日誌 |
/var/log/cups |
記錄打印信息的日誌 |
/var/log/dmesg |
記錄了系統開機時內核自檢的信息,也可使用dmesg命令 |
/var/log/btmp |
記錄錯誤登入日誌,只能用lastb命令查看 |
/var/log/wtmp |
永久記錄全部用戶的登入,註銷信息,和系統啓動,重啓關鍵事件,last查看 |
/var/log/utmp |
記錄用戶當前登入信息,用w,who,users等命令查看 |
/var/log/lastlog |
記錄系統全部用戶最後一次登入時間的日誌,只能用lastlog查看 |
/var/log/maillog |
記錄郵件信息,啓動時間,版本,配置文件位置,開機自啓動, |
/var/log/message |
記錄系統重要的日誌,系統出錯,先查這個日誌 |
/var/log/secure |
記錄驗證和受權信息,只要涉及帳號和密碼的程序都會記錄 |
rsyslog所管理的一些服務
服務名稱 |
說明 |
auth |
安全和認證相關信息,不推薦使用 |
authpriv |
安全和認證相關信息,私有 |
cron |
系統定時任務cront和at產生的日誌 |
daemon |
和各守護進程相關日誌 |
ftp |
ftp守護進程產生的日誌 |
kern |
內核產生的日誌,不是永恆進程產生的 |
local0-7 |
爲本地使用預留服務 |
lpr |
打印產生的日誌 |
|
郵件收發信息 |
news |
與新聞服務器相關日誌 |
syslog |
syslogd服務產生的日誌信息, |
user |
用戶等級類別的日誌信息 |
uucp |
uucp子系統的日誌信息,早期指數據傳遞協議,現經常使用在新聞組服務中 |
/etc/rsyslog.conf
日誌等級
注:none等級,不記錄任何信息
設置方式
收信服務器:
vim /etc/rsyslog.conf
取消註釋:
$ModLoad imtcp #開啓tcp鏈接,也能夠選擇開啓UDP
$InputTCPServerRun 514 #指定鏈接端口
tail -f /var/log/secrue
發信服務器:
vim /etc/rsyslog.conf
添加:
authpriv.* @@192.168.10.101:514 #添加服務
useradd huang #測試
做用:事先爲日誌設定規則,經過大小,時間進行輪替
原理:logrotate主要是針對rsyslog服務所管理的日誌,也包含如下RPM包服務日誌
/etc/logrotate.conf #主配置文件中的設置進行輪替規則
/etc/logrotate.d/* #一些rpm包的日誌管理文件輪替規則
/etc/cron.daily/* #天天運行,查看輪替規則,達到標準,進行輪替,在/etc/cron.*還有其餘時間目錄也是同樣功能
vim /etc/logrotate.conf
添加:
/usr/local/apache2/logs/access_log {
daily
create
rotate 30
}
logrotate /etc/logrotate.conf #手動執行,達到標準的日誌輪替,能夠測試是否成功
logrotate -vf /etc/logrotate.conf #強制執行日誌輪替,不管是否達到條件
注:{}中規則沒有填寫的根據/logrotate.conf 的規則執行,若是沒有設置dateext命名規則,則文件根據file.1,file.2以此類推設置
做用:過後發現日誌過大,經過腳本進行日誌切割
方法
split -l 100 install.log -d -a 3 文件名
-d 切割後文件的前綴
-a 切割後文件後綴,以數字表示 3 diabetes三位數
-l 指定切割行數
須要備份哪些數據
日誌、用戶配置文件、服務配置文件
備份策略
同端備份:在同一個主機的不一樣目錄下備份(安全等級較低,恢復快速)
多端備份:將數據存放在不一樣的設備上備份(安全等會較高)
異地備份:災備(異地容災備份)在不一樣的地域進行數據備份(安全等級較高,備份和恢復難度較大)
雲端備份:安全等級特別高,數據安全性不是很高,對象存儲:AWS: s3 ali:OSS騰訊:COS
備份類型
原則:在不影響正常的業務的運行狀況下進行備份
冷備:在數據中止寫入後,進行數據備份
溫備:中止某一部分的數據的寫入,進行備份
熱備:數據在持續讀寫過程當中進行備份
備份方式
完整備份:將全部數據都複製一份
增量備份:
備份等級0-9,每次備份前一次數據增長量,備份壓力很小,恢復過程複雜(按照指定順序)
差別備份:
備份等級0-1,每次備份前一次備份數據和增長的數據,備份壓力逐漸增大,可是安全等級較高
差別備份+輪詢機制:
實現指定0等級備份的時間範圍,從新開始差別備份
yum -y install dump
增量:level 0-1-2-3-4-5-6-..
差別:level 0-1-1-1-1-1-1-..
dump -0uj -f /root/boot.dump.bz2 /boot
-level #0-9十個備份級別
-f #指定文件名
-u #備份分區是把備份時間記錄在/etc/dumpdates
-v #顯示詳細信息
-j #備份後壓縮
增量備份與恢復:
備份:只能備份0-9個級別
dump -0uj -f /root/boot.dump.bz2 /boot
dump -1uj -f /root/boot1.dump.bz2 /boot
dump -2uj -f /root/boot2.dump.bz2 /boot
..........
恢復:恢復順序與備份順序一致
restore -r -f /root/boot.dump.bz2
restore -r -f /root/boot1.dump.bz2
restore -r -f /root/boot2.dump.bz2
..........
差別備份:
備份:只備份0-1等級
dump -0uj -f /root/boot.dump.bz2 /boot
dump -1uj -f /root/boot1.dump.bz2 /boot
dump -1uj -f /root/boot1.dump.bz2 /boot
...........
恢復:只要恢復兩次
restore -r -f /root/boot.dump.bz2
restore -r -f /root/boot1.dump.bz2
查看命令
dump -W #查看dump備份記錄,只要掛載分區是纔有記錄
cat /etc/dumpdates #查看dump備份記錄,只要掛載分區是纔有記錄
restore -C -f 備份文件 #必定要在須要恢復的路徑下執行
-C #比較備份數據和實際數據的變化。若是實際數據中的現有數據發生了變化,這個選項可以檢測這個變化。可是若是實際數據新增了數據,這個選項是不能檢測到變化
-r #還原數據
-i #交互模式,通常進行恢復時文件選擇
-t #查看模式,查看備份文檔中的內容
-f #指定備份文件的名稱
restore -i -f 備份文件 #交互模式下,有選擇性的恢復數據
ls #列出該備份包中的全部文件
cd #切換到指定目錄中
add #將須要恢復的數據進行標記
delete #將標記的文件取消標記
extract #將標記了的文件恢復到當前目錄下
輸入:
1(數字) #確認進行文件恢復
n #不從新設置要恢復數據的權限和歸屬
quit 退出交互模式
程序:永久存在的!
進程:程序運行的過程
線程:程序具體用來處理每個任務的過程
程序(配置文件) --> 進程(主進程) --> 進程(子進程) --> 線程(處理任務)
ps #查看進程的靜態信息
top #查看進程的動態信息
進程優先級:數值越小,優先級越高
PRI(最終值)=PRI(初始值)+NI
靜態查看系統中的進程,查詢的是命令執行一瞬間的進程的狀態。
aux 以BSD操做系統的格式輸出
-le 以Linux標準格式輸出
選項詳解:
a #顯示一個終端的全部進程
u #顯示進程的歸屬用戶及內存的使用狀況
x #顯示沒有控制終端的進程
l #長格式顯示,更加詳細的信息
e #顯示全部進程 與a的做用一致
結果分析:
USER #該進程的運行用戶,或者理解爲產生進程的用戶
PID #進程的PID號
%CPU #進程佔用的cpu的百分比
%MEM #進程佔用物理內存的百分比
VSZ #佔用的虛擬內存的大小(KB)
RSS #佔用物理內存的大小(KB)
tty #登陸終端(Alt+F1-F6)
STAT #進程狀態
D #沒法中斷的休眠狀態(一般 IO 的進程)
R #正在運行的進程
S #處於休眠狀態
T #中止或被追蹤
W #進入內存交換(從內核2.6開始無效)
X #死掉的進程(基本不多見 )
Z #殭屍進程,沒運行但存在
< #優先級高的進程
N #優先級較低的進程
L #被鎖進內存的進程
s #進程的領導者(在它之下有子進程)
l #多進程的
+ #位於後臺的進程組
START #進程啓動時間
TIME #進程運行的時間(總時間),非系統時間
COMMAND #產生此進程的命令
ps -le 結果分析
F #進程標誌,說明進程有那些權限
1 #進程能夠複製
4 #進程使用超級用戶權限
S #進程狀態
PPID #進程的父進程ID號
C #cpu佔比 %
PRI #進程優先級,數字越小優先級越高,越快被調用執行
NI #進程優先級,數字越小越先被調用
ADDR #進程存在內存的位置
SZ #進程佔用的內存大小
WCHAN #進程是否運行(-表明正在運行)
top [選項] [參數]
-d 秒數 #指定刷新頻率
-b #使用批處理模式,和-n結合將top的結果重定向到文本
-n 次數 #指定top 次數,和-b結合
-p #指定查看某的PID的進程
-s #使top在安全模式下運行,避免在交互模式下出現錯誤
-u 用戶名 #只查看(監聽)某一個用戶的進程
在交互模式下使用的命令:
?或h #幫助信息
P #按照CPU使用率排序
M #按照內存使用率排序
N #按照PID號排序
T #按照cpu運算時間排序
k #按照PID號給予某一個進程信發送指令,可用於殺死進程
r #按照PID給某個進程重設優先級(Nice)值
q #退出交互模式
top 結果分析
第一行信息:top - 23:49:08 up 1:21, 1 user, load average: 0.00, 0.01, 0.05
top系統時間 up系統運行時間 user在線用戶 load average CPU負載
第二行信息:Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie
total全部進程 running正在運行進程數 睡眠進程數 中止進程數 殭屍進程數
第三行信息:Cpu(s): 0.2%us, 0.3%sy, 0.0%ni, 98.7%id, 0.7%wa, 0.0%hi, 0.1%si
CUP使用 us已使用 sy未使用
第四行信息:Mem: 493952k total, 301832k used, 192120k free, 18568k buffers
內存使用 total內存總大小 buffers緩存大小
第五行信息:Swap: 2047996k total, 0k used, 2047996k free, 188072k cached
swap內存
#剩下的選項基本和咱們的PS是相同的。
拓展:pstree 進程樹
-p #顯示PID
-u #顯示運行用戶
kill 進程號
kill -l #查看kill 所支持的信號
經常使用的信號:
HUP(1) #復位,從新加載配置,至關於reload
#kill -hup 2244
#kill -1 2244
INT (2) #中斷(同 Ctrl + C)
TERM(15) #終止(正常退出)
KILL(9) #強制終止,產生交換文件(vim)
CONT(18) #繼續(與STOP相反)
STOP(19) #暫停(同 Ctrl + Z)
killall 進程名
killall -i #交互式,詢問是否殺死
killall -I(大) #忽略大小寫
pkill 終端號
pkill -9 -t 終端號 #強制殺死某登陸終端
一、只有root用戶能夠減少優先級值,可調整範圍(-20)-19,普通用戶只能增長(0-19)範圍
二、修改PRI只是臨時生效,須要永久生效寫腳本
ps –le 能夠查看到進程的優先級
#PRI(最終值)=PRI(初始值)+NI
#PRI(初始值)大小固定不變的,要想修改進程的優先級,能夠經過修改NI來改變
#如何修改NI值?可調整範圍(-20)-19
#值容許root用戶將進程的優先級調高(數值調小)
1. TOP的交互模式下,r調整指定PID號的進程的優先級(+-數值)
2. nice
nice -n 數值(+/-) service 服務名 start|restart
#只能藉助啓動或重啓的過程來實現NI值的修改
#PRI(最終值)的數值越小,優先級越高,優先級越高越優先獲取資源
3. renice
renice 數值(+/-) PID號
#改啓動狀態進程的NI值,經過指定PID號實現優先級的修改
PID(進程號):
#全部的程序在同一個操做系統中運行時,所分配到的一個惟一的身份標識(不區分終端)
工做號:
#在同一個終端上,位於後臺的進程,會被單獨分配一個工做號,方便快速的調用後臺進程
#不一樣終端的後臺任務,互相不可見
#工做號能夠理解爲是一種特殊的進程號
#進程裏包含了全部的工做號
#在將某進程放入後臺時(無論執行仍是暫停),會順序顯示該進程的工做號和進程號
相關命令
bg 工做號 #將位於後臺的暫停的任務,恢復到後臺接着執行
fg 工做號 #將位於後臺的暫停的任務,恢復到前臺接着執行
jobs #查看全部後臺任務
-l #顯示工做進程PID
命令 & #將工做到到後臺,並持續執行
ctrl + z #將工做放到後臺,並暫停執行
讓後臺的工做脫離終端進行運行
一、/etc/rc.local 文件
二、定時計劃任務(下邊)
三、nohup 命令 選項 操做對象 &
#查看到exit 表示命令沒有執行成功,會生成nohup.job文件能夠查錯
查看CPU數量
cat /proc/cpuinfo | grep "processor" | wc -l
#邏輯CPU個數,即爲全部物理CPU上的core的個數
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
#物理CPU個數
cat /proc/cpuinfo | grep "cpu cores" | uniq | awk -F: '{print $2}'
#每一個物理CPU中Core的個數
cat /proc/cpuinfo | grep "core id" | uniq | wc -l
#查看core id的數量,即爲全部物理CPU上的core的個數
查詢進程或命令調用的資源
ldd 命令路徑 #查看該命令運行時所須要調用的函數文件
lsof 進程 #查看進程在運行過程當中,所調用的全部資源
-p PID #根據PID號查詢
-u 用戶名 #根據用戶名查詢
vmstat #監控系統資源
Procs(進程):
r: 正在運行進程
b: 阻塞的進程
Memory(內存):
swpd: 虛擬內存已使用的大小
free: 空閒的物理內存的大小
buff: 用做緩衝的內存大小(系統)
cache: 用做緩存的內存大小(被調用資源)
Swap:
si: 每秒從磁盤讀入虛擬內存的大小
so: 每秒虛擬內存寫入磁盤的大小
注:若是這個值大於0,表示物理內存不夠用
IO: (如今的Linux版本塊的大小爲1024bytes)
bi: 從系統寫入硬盤的塊數
bo: 從硬盤讀入系統的塊數
system:
in: 每秒CPU中斷數,包括時鐘中斷。
cs: 每秒上下文切換數(資源調用的次數,如:函數)。
CPU(以百分比表示):
us: 用戶進程執行消耗cpu時間(user time)
sy: 系統進程消耗cpu時間(system time)
id: 空閒時間(包括IO等待時間)
wa: 等待IO時間
st: 虛擬機偷取時間(不爲0則表明cpu被其餘虛擬機所調用)
dmesg #查看開始是內核的檢測信息(/var/log/dmesg)
free #查看內存使用狀況
-b 以字節爲單位顯示
-k 以KB爲單位(默認)
-m 以MB爲單位
-g 以GB爲單位
顯示信息解釋:
第一行:
total: 總計物理內存的大小
used: 已使用內存大小
free: 空閒內存大小
shared: 共享內存,通常系統不會用到
Buffers/cached: 未使用的緩存大小
第二行:(-/+ buffers/cached)
(-buffers/cache)used內存數:第一部分Mem行中的 used – buffers – cached
(+buffers/cache)free內存數:第一部分Mem行中的 free + buffers + cached
注:可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是空閒的內存總數
uptime #系統啓動時間和平均負載(通常用top)
uname #查看系統與內核相關信息
-a 查看全部相關信息
-r 查看內核版本
-s 查看內核名稱
lsb_release -a #查看當前發行版
單次計劃任務:只執行一次的定時任務
命令:at
服務:atd(必須開機自啓)
格式:at [-選項] 時間
格式一:
at 12:00 2018-07-18 #在指定的精確的時間點執行任務
>shutdown -h now #要執行的命令
>ctrl+d #保存並退出
格式二:
at now+10(minutes, hours, days, weeks) #在通過指定的時間後執行任務(倒計時)
>shutdown -h now #要執行的命令
>ctrl+d #保存並退出
at -m #讓指定的計劃任務在執行完成後,給任務的執行者發送郵件通知
atq #查看計劃任務的列表(只顯示未執行的),顯示每個任務的任務號
atrm 任務號 #刪除指定任務號的計劃任務
at -c 任務號 #查看指定任務號的詳細信息(要執行的內容)
at 的黑白名單
at.allow(默認不存在)
at.deny(默認存在)
#當白名單不存在,黑名單爲空時:全部用戶均可以使用at設置定時任務
#當前狀況下:若黑名單中有用戶,則只有該用戶沒法執行定時任務
#白名單的優先級高於黑名單(有了白名單文件,黑名單文件失效)
#當黑白名單都存在,但都爲空時:只有root用戶能指定定時任務
#當黑白名單都存在,白名單爲空,黑名單有用戶:只有root用戶能指定定時任務
#當白名單存在時,因爲白名單優先級高於黑名單,只有在白名單中寫入用戶時,纔是放行某用戶,不然全部的普通用戶都沒法執行定時任務
循環計劃任務:
按照給定的時間規則,在指定的時間循環內執行任務
命令:crontab
服務:crond(必須開機自啓)
crontab -e #編輯定時計劃任務
crontab -l #查看設定好的任務
crontab -r #刪除全部的計劃任務(慎重執行,全部的任務都寫在了同一個文件中)
編輯配置文件時的格式:
分 時 日 月 周 #日期和星期通常不一樣時設置(取其一)
* * * * * #要執行的任務(命令、腳本)
分:0-59
時:0-23
日:1-31
月:1-12
周:0-7 #0和7都是周天
* #表示該範圍內的任意時間
, #表示間隔的多個不連續時間點
- #表示一個連續的時間範圍
/ #指定間隔的時間頻率
例子:
0 17 * * 1-5 #週一到週五天天17:00
30 8 * * 1,3,5 #每週1、3、五的8點30分
0 8-18/2 * * * #8點到18點之間每隔2小時
0 * */3 * * #每隔3天
頻率:
在指定的時間內,每隔多久執行一次任務
0 12 */3 * * /bin/bash /sh/a.bash
默認是最小到分鐘,能夠經過sleep命令實現秒級定時循環
* * * * * bash a.bash
* * * * * sleep 30 && bash a.bash
#每隔30s執行一次任務
/etc/cron.daily #放入到該目錄下的腳本會天天指定一次
cron黑白名單
cron.allow(默認不存在)
cron.deny
#使用限制和at服務的限制是同樣的!
linux配置
臨時配置:
使用命令調整網絡參數簡單、快速,可直接修改運行中的網絡參數通常只適合在調試網絡的過程當中使用,系統重啓之後所作的修改將會失效
永久配置:配置文件修改,重載服務或者重啓之後纔會生效
協議分類
網絡層協議:IP協議、ICMP、ARP等
傳輸層協議:TCP、UDP等 TCP/IP 協議簇
應用層協議:DHCP、DNS、FTP、HTTP、SSH等
常見端口
20 21 ftp服務 #文件共享
22 ssh服務 #安全遠程網絡管理
23 telnet服務 #明文遠程鏈接
25 smtp: #簡單郵件傳輸協議(發信)
465 smtp(ssl) #發信
110 pop3: #郵局協議(收信)
143 Imap4 #收信
993 imap4(ssl) #收信
80 www #網頁服務(http://)
443 https://
3306 mysql端口
53 DNS端口
IP地址配置
臨時:ifconfig 網卡 IP地址 子網掩碼
例:
ifconfig eth0 192.168.12.250 netmask 255.255.255.0
ifconfig eth0 192.168.12.250/24
ifconfig eth0:0 192.168.12.254/24 #添加子端口
永久:修改/etc/sysconfig/network-scripts/ifcfg-eth0
重啓網絡服務:service network restart #針對全部網絡服務
啓動關閉網卡:ifdown eth0;ifup eth0 #針對單個網卡
主機名配置
查看主機名:hostname
linux能夠重複主機名,windows不能緣由:
linux:不須要考慮wins
windows:須要考慮wins
wins服務:IP與主機轉換功能,使用netbios協議底層協議
centos6中修改主機名
臨時設置主機名:hostname 主機名
永久設置:修改/etc/sysconfig/network文件
centos7中修改主機名
hsotnamectl set-hsotname xx.xx.xx(FQDN)
注:區別 /etc/rc.d/rc.sysinit 和 /etc/sysconfig/network
1./etc/hosts 域名解析文件
2.優先級比dns服務高
3.主機名有可能被hosts更改,規則在/etc/rc.d/rc.sysinit
4.若是主機名未修改,而且hosts文件中有一條針對本機IP的解析記錄,則結果做爲該解析的結果,若是主機名已經修改過,則不會變化
網關配置
網關:應用在末梢網絡中,默認路由,用於特殊環境
路由:應用於任何環境,跟精確匹配
route -n 查看系統中的路由表信息
臨時:
默認網關:
添加:route add default gw ip
刪除:route del default gw ip
指定路由:
添加:route add -net 網段 gw ip
刪除:route del -net 網段 #實際配置路由條目
永久:
網關:
/etc/sysconfig/network-scripts/ifcfg-eth0
路由:
/etc/rc.local
DNS配置
注:配置DNS時,理論上不須要重啓服務,過段時間會自動刷新。
域名解析測試命令:nslookup
1./etc/sysconfig/network-scripts/ifcfg-eth0 #針對eth0的網卡配置dns
DNS1=IP
2./etc/resolv.conf #全局的dns配置
主機映射文件:/etc/hosts #優先級比dns服務高
用於保存主機名和IP地址的映射記錄,但這種映射只是本地機的映射,也就是說每臺機器都是獨立的
主機映射文件和DNS服務器的比較:
默認狀況下,系統首先從hosts文件查找解析記錄
hosts文件只對當前的主機有效
hosts文件可減小DNS查詢過程,從而加快訪問速度
netstat 查看系統的網絡鏈接狀態、路由信息、接口等
例:
netstat -antp
netstat -tlun
-a:顯示全部活動鏈接
-n:以數字形式顯示
-t:查看TCP協議相關信息
-u:查看UDP協議相關信息
-p:顯示PID和進程名
-l: 監聽
traceroute測試命令
原理:TTL網絡生存週期,逐漸增長TTL跳數,直到到達目標端口
做用:測試從當前主機到目的主機之間通過的網絡節點,用於追蹤數據包在網絡上的傳輸時的所有路徑,它默認發送的數據包大小是40字節,默認使用UDP協議進行傳輸,返回值爲ICMP
顯示:從第一個路由到其餘路由的時間
例:traceroute 網址或IP #linux用
tracert 網址或IP #windows用
-I (大) #使用ICMP協議進行測試,Linux中默認使用UDP。
-p 3 #指定測試時發送的數據包個數(即測試次數)
-n #以IP的方式進行鏈接測試,避開DNS的解析,減小延時
注意:1當返回值中間出現*號時,通常狀況是中間節點防火牆封掉了ICMP的返回值。
2當返回值從中間到結束都是*號時,通常狀況爲目標服務器拒絕接收UDP數據包或禁止了ICMP的返回包
ping測試網絡連通性
使用ICMP協議
-i #指定間隔時間
-c #指定ping的次數
-s #指定數據包的大小
arp 地址解析協議
例:arp -a
-a 查看全部
-d ip地址 #刪除某條ARP記錄
-s ip地址、MAC地址 #綁定ip地址
nmap網絡探測掃描命令
做用:查詢網絡中有哪些主機,嘗試跟端口進行鏈接
處理殭屍進程:根據http狀態碼,查詢
-sP #探測某網段內有哪些主機是存活的
-sT IP #探測某主機上開啓了哪些TCP端口
-sS IP #同上,可是是安全掃描,被掃描主機將記錄不多的日誌
-O IP #掃描對方的操做系統類型
遠程管理
Windows à Linux : VNC
1 yum –y install tigervnc tigervnc-server
2 vncpasswd--windows
3 vncserver--linux
Linux à Windwos : rdesktop
1 yum –y install rdesktop
2 rdesktop –f –u 用戶名 –p 密碼 –a 16 IP
#linux須要時桌面模式
遠程傳輸工具
scp 進行文件的上傳和下載
例:
scp ./install.log root@192.168.88.20:/root/ #以本地做爲源
scp root@192.168.88.20:/root/install.log ./ #以其餘機子做爲本地
上傳:scp 本機文件 用戶名@IP地址:目錄
下載:scp 用戶名@IP地址:文件 本地位置
指定端口:-P (大) #不是默認端口須要指定端口
sftp 安全的ftp傳輸
登陸: sftp 用戶名@ip地址
指定端口: -oPort=端口
經常使用命令:遠程主機ls cd pwd put get
本地 lls lpwd
telnet遠程鏈接
服務端安裝:telnet-server
客戶端安裝:telnet
客戶端鏈接:telnet 服務端IP 23
SSH遠程鏈接
使用的軟件:openssh
ssh 遠程登陸命令
登陸:ssh 用戶@ip地址
指定端口:-p(小)
ls 顯示目錄文件
選項:-d 顯示當前目錄
-i 顯示inode號
-h 常見單位顯示
-a 顯示全部文件包括隱藏文件
cd 切換目錄(shell內置命令)
cd - 進入上一次目錄
cd ~ 進入家目錄
cd .. 進入上級目錄
pwd 顯示當前路徑
mkdir 創建目錄
例:mkdir -p /huang/xiao/qi 遞歸創建
rm 刪除文件
選項:-r遞歸,刪除目錄
-f強制
例:rm -rf 文件和目錄
tree 顯示目錄下全部目錄樹(要安裝的命令)
touch 建立新文件或修改文件時間
cat 查看文件內容
選項:-n顯示行號
例:cat -n 文件名
more 分頁顯示文件內容
空格鍵:下翻 n鍵:上翻 q鍵:退出
less 分行顯示文件內容
空格鍵或pgdn:下翻 pgup鍵:上翻 q鍵:退出
head 顯示文件頭,默認10行
選項:-n 指定顯示文件頭幾行
tail 顯示文件後幾行,默認10行
選項:-n 指定顯示文件頭幾行
-f 監聽文件尾部
cp 複製文件(若是複製連接文件,則複製原文件)
選項:-r 複製目錄(包括目錄內文件數據)
-p 連帶文件屬性複製
-d 若源文件是連接文件,則複製連接屬性
-a 至關於-rpd
例:cp -pdr 源文件位置 目的位置
mv 剪切或更名
例:mv 源文件 目的文件位置
type 區分命令類型
例:type 命令
ln 生成連接文件(硬連接)
選項:-s 生成軟連接
例:ln -s 源文件 目的文件
chmod 修改權限
例:chmod 775 文件或目錄
選項:-R 遞歸設置,將設置到該目錄上的權限遞歸設置到該目錄下的全部子文件上
chown 修改全部者
例:chown 用戶:用戶組 文件或目錄名 (同時修改全部者和所屬組)
選項:-R 遞歸設置,將設置到該目錄上的全部者遞歸設置到該目錄下的全部子文件上
chgrp 修改所屬組
例:chgrp 所屬組 文件名或目錄
umask 查看文件和目錄默認權限
man 查看命令幫助
例: man -f 命令
選項:-f 查看命令等級
0-9 命令等級
help 查看內部命令幫助
例:help 內部命令
--help 查看經常使用命令選項幫助
例:命令 --help
命令 --version 查看命令做者
info查看幫助頁
例:info 命令
選項:n進入下一小節
p進入上一小節
q退出
enter確認
which查找存儲命令路徑與alias別名
例:which 命令
whereis查找存儲命令路徑與man幫助存儲位置
例:whereis 命令
whatis 查詢命令幫助等級
例:whereis 命令
locate按文件名查找系統中的文件(包含匹配,在系統數據庫中查找)
例:locate 文件名
配置文件:/etc/updatedb.conf
配合命令:updatedb強制更新數據庫/var/lib/mlocate/mlocatedb位置
find 查詢符合條件的文件名(徹底匹配,可用通配符)
例:find 查找位置 選項 文件名
選項:-name 按文件名查找
-iname 不區分大小寫
-size 按文件大小查找
-type 按文件類型查找(f:文件d:目錄l:連接)
-ctime 按權限修改時間查找,如+4,-4,4天
-mtime按數據修改時間查找
-atime 按訪問時間查找
-nouser按沒有屬主的文件查找
-user 按用戶名查找
-group 按用戶組查找
-uid 按用戶ID查找
-gid 按屬組組ID查找
-inum 按i節點查找
-perm 按權限查找,如775
-exec {} \;管道符做用
grep 查找符合條件的字符串,文件中查找數據,包含匹配
例:grep "字符串" 文件名
選項:-i 不區分大小寫
-v 反向
-c 統計符合條件的行數
-A 數字 #列出符合條件的行,並連續列出後面n行
-B 數字 #列出符合條件的行,並連續列出前面n行
--colour=auto 查找字符顯示紅色
"|" 管道符,命令1的結果做爲命令2的條件
例:ls -l | grep "^-"
netstat 查看系統網絡狀態
例:netstat -tuln
選項:-t 顯示tcp
-u 顯示udp
-l 監聽
-n 顯示IP和端口
tar 打包壓縮命令
例:tar -zcvf 壓縮文件名 源文件
選項:-z:gz格式 -j:bz2格式
-c:解壓 -x:壓縮
-t:顯示壓縮文件不解壓
-C:解壓到指定位置
tar -zxvf 123.tar.gz 123/aaa -C /root/ 解壓其中一個文件
w 查看當前在線用戶(顯示用戶登入時間,在線持續時間,1,5,15分鐘前的cpu負載,來源IP)
who查看當前在線用戶(在線持續時間,來源IP)
last 列出登入相關信息(顯示用戶開始登入時間,退出登入時間,在線時間,系統重啓時間)
文件位置:/var/run/wtmp
lastlog顯示帳戶最後一次登入時間
文件位置:/var/run/utmp
write 給在線用戶寫信息
wall對全部在線用戶說話
mail郵件命令
例:mail 用戶名 (寫信ctrl+d:保存退出)
選項:1 2 查看對於郵件 h列出郵件標題 q退出
郵件保存位置:/var/spool/mail/root
ping網絡探測
選項:-c 指定次數
-s 指定數據包大小
ifconfig查看網卡配置
例:ifconfig etho0 配置臨時生效網卡
netstat查看網絡狀態
例:netstat -tuln
選項:-t tcp
-u udp
-l listen
-n 顯示IP和端口
配置文件:/etc/services
telnet 測試端口連通性
例:telnet IP 端口
sync數據同步,強制把內存數據保存到硬盤
shutdown關機重啓命令
例:shutdown -r now重啓(能夠指定時間,建議使用)
shutdown -h now關機
mount掛載命令(直接執行能夠查看已經掛載的掛載點)
例:mount [-t iso9660] /dev/sr0 掛載點
選項:-t 文件系統 光盤iso9660 U盤fat:16或vfat:32
-L 卷標名 掛載指定卷標的分區
-o 特殊選項 能夠指定掛載的額外選項
經常使用掛載
掛載光盤
例:mount 【-t iso9660】 /dev/sr0 /mnt/cdrom
卸載掛載
例:umount /mnt/cdrom
指定字符編碼掛載
例:mount -o iocharset=utf8 /dev/sr0 /mnt/cdrom/
掛載特殊指定項
mount -o remount,exec 掛載點(remount針對已掛載)
掛載本地鏡像
mount -o loop 鏡像文件 掛載點
查看分硬盤區
例:fdisk -l
顯示當前系統字符編碼
例:echo $LANG
修改字符編碼
例: $LANG=zh_CN.UTF-8
$LANG=en_US.UTF-8
強制把內存數據保存到硬盤中(建議重啓前使用)
例:sync
重啓命令(建議使用)
例:shutdown -r now 或指定時間 05:30
umount 卸載掛載點
例:umount 掛載點或設備文件名
rpm二進制包安裝命令
例:rpm -ivh 包全名
選項:-i:安裝
-v:顯示更詳細信息
-h:顯示安裝進度
-q:查詢包是否安裝
-a:查詢全部安裝包
-qi:查詢安裝包的信息
-qip:查詢未安裝包的信息
-ql:查詢包中,文件的安裝位置
-qf:查詢系統文件屬於哪一個安裝包
-qR:查詢軟件包所依賴的軟件包
-qRp:查詢沒有安裝的軟件包的依賴包
-e:卸載
-V:檢驗安裝包有沒有修改過
-U:升級安裝包,若是沒有安裝,就安裝
-F:升級安裝包,若是沒有安裝,就不安裝
--force:強制安裝,用於文件丟失
--import:用於導入數字證書,安裝包在
date修改時間命令
例:date -s 20180613或15:12:11
選項:-s:指定時間
lrzsz安裝包,用於xshell上傳或下載文件的
例:先安裝lrzsz安裝包,
選項:rz:下載
sz:上傳
dos2unix和Unix2dos安裝包,須要安裝,用於Windows和Linux系統之間的文件轉換
例:dos2unix 文件名 或 unix2dos 文件名
yum在線安裝
例:yum -y install 包名
選項:install安裝
remove卸載
update升級(若是不指定包名,就所有軟件升級,當心使用)
list查看yum源全部能夠安裝的rpm包,能夠指定包名
search查看yum源中全部與關鍵字相關的包
info查看包的信息
grouplist查看全部軟件組
groupinstall安裝指定組包
groupinfo查看組包中的軟件
groupremove卸載組包
LANG查看系統當前語言
例:LANG=zh_CN.UTF-8
選項:echo $LANG 查看當前使用語言
uname -r 查看系統內核版本
du 統計目錄大小(統計文件大小是準確的)
例:du -sh 目錄
選項:-h 人性化顯示
-s 和
-a 顯示每一個子文件磁盤佔用量
df 查看分區大小(查看硬盤剩餘空間是準確的)
例:df -h
選項:-h 人性化顯示
-a 顯示全部文件系統
-T 顯示掛着的文件系統類型
diff 生成補丁
例:diff -Naur 舊文件 新文件 > 補丁文件
patch導入補丁命令
例:patch -pn < 補丁名 (-n:數字 -p:取消路徑等級)
防火牆關閉
例:iptables -F (臨時生效,清空防火牆配置)
service iptables stop(永久生效,中止防火牆服務)
chkconfig iptables off(永久生效,防火牆服務開機不啓動)
useradd添加用戶
例:useradd 選項 參數 用戶名
選項: -u:UID
-g:指定初始組
-d:指定家目錄,目錄不須要事先建立
-s:指定登陸shell
-G:指定附加組
-r:建立系統用戶,默認密碼失效,沒有家目錄,與-s一塊兒使用,指定shell爲/sbin/nologin
passwd修改密碼
例:passwd 選項 用戶
選項: -l:鎖定用戶密碼
-u:解鎖用戶密碼
-U:查看密碼狀態
usermod用戶信息修改
例:usermod 選項 用戶名
usermod -m -d /home/已更更名 用戶名
選項: -u:修改UID
-g:修改初始組
-d:修改家目錄與-m一塊兒使用
-L:鎖定密碼
-U:解鎖密碼
-G:修改附加組
-l 新用戶名 舊用戶名 修改用戶名
-s:修改登陸的shell
userdel刪除用戶
例:userdel 選項 用戶名
選項:-r:連家目錄一塊兒刪除
groupadd增長組
例:groupadd 組名
groupdel刪除組
例:groupdel 組名(儘可能空組)
gpasswd向組內添加成員
例:gpasswd 選項 用戶名 組名
選項:-a:指定一個用戶添加到組
-d:刪除組內成員
-M:批量添加組成員
echo $?(上次命令是否執行成功,0表示成功,非0表示錯誤)
id顯示用戶的UID,初始組,附加組
例:id 用戶名
su切換用戶
例:su 用戶名
例:su - 用戶名 連帶環境變量一塊兒切換
newgrp切換有效組
例:newgrp 組
dumpe2fs查看ACL權限
例:dumpe2fs 分區 | grep acl
setfacl設置ACL權限
例:setfacl -m u:用戶名:權限 文件名(添加ACL權限rwx)
setfacl -x u:用戶 文件名(刪除ACL權限)
setfacl -b 文件名(清空ACL權限,包括mask)
setfacl -m u:權限(設置mask權限)
setfacl -R -m u:用戶名:權限 文件名(遞歸設置)
setfacl -d -m u:用戶名:權限 文件名(默認權限設置)
getfacl查看文件權限
例:getfacl 文件名或目錄
chattr 文件屬性設置
例:chattr +i 文件或目錄
選項:i:對文件,不容許任何操做修改
對目錄,那麼只能修改目錄下文件的數據
a:對文件,那麼只能在文件中增長數據
對目錄,那麼只容許在目錄中創建和修改文件
e:表示該文件是使用ext文件系統進行存儲的,並且不能使用"chattr -e"命令取消e屬性
lsattr 查看文件屬性
例:lsattr -a 文件名
選項:-a 顯示全部
-d 若是目標是目錄,僅顯示目錄自己
77.fsck文件系統修復命令
例:fsck -y 分區名
dumpe2fs 顯示磁盤狀態
例:dumpe2fs -h 分區名
#卷標,掛載點,UUID,掛載參數,文件系統狀態,inode總量/空閒,block總量/空閒,單個block大小
stat顯示文件詳細信息
例:stat 文件名
#文件名,文件大小,佔用的block的大小,所在設備編號,硬連接數,屬組,屬主,權限,訪問時間,數據修改時間,狀態時間
file判斷文件類型
例:file 文件名
type判斷命令是不是內部或外部命令
例:tpye 命令
fdisk分區命令MBR
例:fdisk -l 查看磁盤分區
選項:fdisk 進入分區交互模式
-m 操做菜單
-n 新建分區
-p 查看分區
-d 刪除分區
-q 退出不保存
-w 退出保持
-t 修改分區屬性(能夠更改swap分區用)
-L 查看分區屬性
82. partprobe強制讀取全部分區
例:若分區報錯,可以使用此命令,若沒安裝,parted-2*安裝包
mkfs格式化分區
例:mkfs -t ext4 分區名
mkfs -t ext4 -b4096 -i4096 分區
mkfs.ext4 分區
84. parted分區命令GPT
例:parted 分區 #進入交互模式
選項:p 打印分區表
mklabel 更改分區表類型gpt/msdos
mkpart 建立分區
rm 刪除分區
q 退出(修改實時生效)
85. swap分區命令
例:1.fdisk分區
2.更改分區屬性爲swap
3.mkswap 格式化分區
4.swapon 開啓swap分區
5.free查看swap分區狀態
86. quota磁盤配額相關命令
選項:quotacheck -avgu 生產磁盤配額文件
-a #掃描全部磁盤
-v #顯示掃描過程
-c #清楚原有文件從新生成行動文件
-g #生成組文件
-u #生成用戶文件
edquota -u 用戶名 #指定用戶限制設置
-g 組名 #指定組限制設置
-t #用戶寬限天數設置
-T #組寬限天數設置
-p #複製設置
quota -uvs #查看此用戶在全部磁盤的配額
quota -hvs #查看此組在全部磁盤的配額
repquota -ugvs 分區 #查看該分區的全部配額設置
quotaon -guav 分區 #開啓指定分區磁盤配額設置
quotaoff -guav 分區 #關閉指定分區磁盤配額設置
87. dd用指定大小的塊拷貝一個文件
if=指定源文件
of=指定目的文件
bs=bytes:同時設置讀入/輸出的塊大小爲bytes個字節
count=blocks:僅拷貝blocks個塊,塊大小等於ibs指定的字節
dd應用實例
1.將本地的/dev/hdb整盤備份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
2.將/dev/hdb全盤數據備份到指定路徑的image文件
dd if=/dev/hdb of=/root/image
3.將備份文件恢復到指定盤
dd if=/root/image of=/dev/hdb
4.備份/dev/hdb全盤數據,並利用gzip工具進行壓縮,保存到指定路徑
dd if=/dev/hdb | gzip > /root/image.gz
5.將壓縮的備份文件恢復到指定盤
gzip -dc /root/image.gz | dd of=/dev/hdb
6.備份與恢復MBR
a.備份磁盤開始的512個字節大小的MBR信息到指定文件:
dd if=/dev/hda of=/root/image count=1 bs=512
count=1指僅拷貝一個塊;bs=512指塊大小爲512個字節。
b.恢復:
dd if=/root/image of=/dev/had
將備份的MBR信息寫到磁盤開始部分
7.拷貝內存內容到硬盤
dd if=/dev/mem of=/root/mem.bin bs=1024 (指定塊大小爲1k)
8.拷貝光盤內容到指定文件夾,並保存爲cd.iso文件
dd if=/dev/cdrom(sr0) of=/root/cd.iso
9.增長swap分區文件大小
第一步:建立一個大小爲256M的文件:
dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把這個文件變成swap文件:
mkswap /swapfile
第三步:啓用這個swap文件:
swapon /swapfile
第四步:編輯/etc/fstab文件,使在每次開機時自動加載swap文件:
/swapfile swap swap default 0 0
10.銷燬磁盤數據
dd if=/dev/urandom of=/dev/hda1
注意:利用隨機的數據填充硬盤,在某些必要的場合能夠用來銷燬數據。
11.測試硬盤的讀寫速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
12.肯定硬盤的最佳塊大小:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
88. LVM邏輯卷管理命令
選項: pvcreate 磁盤設備名 #建立物理卷
pvscan或pvdisplay #查看物理卷
pvremove #刪除物理卷
vgcreate -s PE大小 卷組名 物理卷名 #建立卷組
vgscan或vgdisplay #查看卷組
vgremove 卷組名 #刪除卷組
vgextend 卷組名 物理卷名 #增長物理卷
vgreduce 卷組名 物理卷名 #刪除物理卷
lvcreate -L 大小 -n lv名 卷組名 #創邏輯卷
lvscan或lvdisplay #查看邏輯卷
lvremove 邏輯卷名 #刪除邏輯卷
lvextend -L +大小 分區名 #增長邏輯卷容量,只修改MBR表
resize -f 分區名 分區實際大小 #修改superblock大小 e2fsck -f 分區名 #檢查文件系統
resize -f 分區名 減小到大小 #與增長大小反着來
lvreduce -L 實際大小 分區名
89. RAID設置命令
例:mdadm -Cv md* -l10 -n4 磁盤 -x2 熱備 #建立RAID10
mdadm -D 查看RAID10狀態
mdadm -f cip #指定磁盤損壞
mdadm 設備名md* --remove 磁盤 #移除磁盤
mdadm 設備名md* --add 磁盤 #添加磁盤
mdadm -S 設備名md* #中止RAID
mdadm --zero-superblock 設備名md* #刪除RAID
90. set查詢當前全部生效的變量
例:set -u #設置後,被調用的無效變量報錯
set -x #設置後,每次執行命令,打印一次命令
unset 變量名 #取消變量
91. env只查詢環境變量
92. echo 輸出到屏幕
例:echo -e "字符或格式"
選項:-e 支持反斜線控制的字符轉換
-n 取消輸出後行尾的換行符
93. history歷史命令
例:history -c #清空歷史命令
-w #把緩存的歷史命令保存到配置文件中
dd命令詳解
做用
dd:用指定大小的塊拷貝一個文件
格式
dd if=/dev/zero of=/指定目錄 bs=1M count=1000
if=文件名:輸入文件名,缺省爲標準輸入。即指定源文件。< if=input file >
of=文件名:輸出文件名,缺省爲標準輸出。即指定目的文件。< of=output file >
bs=bytes:同時設置讀入/輸出的塊大小爲bytes個字節。
count=blocks:僅拷貝blocks個塊,塊大小等於ibs指定的字節數。
dd應用實例
將本地的/dev/hdb整盤備份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
將/dev/hdb全盤數據備份到指定路徑的image文件
dd if=/dev/hdb of=/root/image
將備份文件恢復到指定盤
dd if=/root/image of=/dev/hdb
備份/dev/hdb全盤數據,並利用gzip工具進行壓縮,保存到指定路徑
dd if=/dev/hdb | gzip > /root/image.gz
將壓縮的備份文件恢復到指定盤
gzip -dc /root/image.gz | dd of=/dev/hdb
6. 備份與恢復MBR
a.備份磁盤開始的512個字節大小的MBR信息到指定文件:
dd if=/dev/hda of=/root/image count=1 bs=512
count=1指僅拷貝一個塊;bs=512指塊大小爲512個字節。
b.恢復:
dd if=/root/image of=/dev/had
將備份的MBR信息寫到磁盤開始部分
拷貝內存內容到硬盤
dd if=/dev/mem of=/root/mem.bin bs=1024 (指定塊大小爲1k)
拷貝光盤內容到指定文件夾,並保存爲cd.iso文件
dd if=/dev/cdrom(sr0) of=/root/cd.iso
增長swap分區文件大小
第一步:建立一個大小爲256M的文件:
dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把這個文件變成swap文件:
mkswap /swapfile
第三步:啓用這個swap文件:
swapon /swapfile
第四步:編輯/etc/fstab文件,使在每次開機時自動加載swap文件:
/swapfile swap swap default 0 0
銷燬磁盤數據
dd if=/dev/urandom of=/dev/hda1
注意:利用隨機的數據填充硬盤,在某些必要的場合能夠用來銷燬數據。
11. 測試硬盤的讀寫速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
經過以上兩個命令輸出的命令執行時間,能夠計算出硬盤的讀、寫速度。
/dev/zero,是一個輸入設備,你可你用它來初始化文件。該設備無窮盡地提供0,可使用任何你須要的數目——設備提供的要多的多。他能夠用於向設備或文件寫入字符串0。
/dev/null——它是空設備,也稱爲位桶(bit bucket)。任何寫入它的輸出都會被拋棄。若是不想讓消息以標準輸出顯示或寫入文件,那麼能夠將消息重定向到位桶。外號叫無底洞,你能夠向它輸出任何數據,它通吃,而且不會撐着!
12. 肯定硬盤的最佳塊大小:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
經過比較以上命令輸出中所顯示的命令執行時間,便可肯定系統最佳的塊大小。