【學習筆記】兄弟連LINUX視屏教程(沈超 李明)
發現自己的linux水平楞個瓜皮,找個視屏教程學習一哈
1 linux系統簡介
1.1 UNIX和Linux發展史
unix發展歷史:1969年,美國貝爾實驗室的肯.湯普森開發出unix系統,1971年丹尼斯·里奇發明C語言,1973年,unix用c重寫
硬件平臺的概念 也就是cpu架構
PowerPC IBM AIX
PA-RISC HP HP-UX
SPARC Sun Solaris
IA(Intel、AMD、Cyrix、RISE…) Red Hat Linux、Ubuntu… linux
AIX和HP-UX是不能安裝在pc中,必須在特定的服務器上,Solaris可以
freebsd 加州大學伯克利分校
mac也是由unix演變來的
linux發展歷史:1991年,Linus Torvalds和其他眾多愛好者開發完成
Linux是開源軟件,源碼開放的UNIX
內核官網:www.kernel.org
版本號如 2.6.18
目前最新 4.18.4
次版本是偶數是穩定版奇數是開發版,這種說法在主版本更新到3就沒了
發行版:redhat系列(yum)和debian系列(apt-get)
fedora是rhel的實驗版本,要收費
centos完全免費 社區維護
gentoo linux不適合初學者
SUSE在歐洲用的多,界面都快趕上unbuntu
KNOPPIX不用安裝,類似livecd
ubuntu界面漂亮,桌面用戶多點,server端并不多
1.2 開源軟件簡介
商業軟件是收費的
開源軟件免費但是可以收服務費

使用、研究、散布及改良的自有
1.3 Linux應用領域
基于Linux的企業服務器
www.netcraft.com 掃描和踩點網站
嵌入式應用
安卓、手機、平板、智能家電、航空、銀行、卡拉OK點歌系統、樹莓派
1.4 學習方法
善用工具
英文
忘掉windows思維方式
2 Linux系統安裝
磁盤分區
分區類型
主分區:最多4個
擴展分區:最多1個,不能寫入數據,只能掛載邏輯分區
主分區+擴展分區 最多4個
邏輯分區
格式化(高級格式化)又稱為邏輯格式化,是要在硬盤中寫入文件系統
ext4 4k 數據塊 block
i節點 inode列表
低級格式化是硬盤操作不是操作系統操作
硬件設備文件名:
IDE硬盤 hd[a-d]
SCSI/SATA/USB硬盤 sd[a-p]
光驅 cdrom或sr0
鼠標 mouse
打印機(25針) lp[0-2]
打印機(USB) /dev/usb/lp[0-15]
ide 133MB 最古老, scsi都淘汰了 200MB貴服務器
SATA3 串口硬盤 500MB/s 現在一般都是這個
邏輯分區不能占用1 2 3 4編號 5一定是第一個邏輯分區
掛載:
/ 根分區
swap分區 交換分區 內存1.5-2倍 不超過2G
推薦分區/boot 啟動分區 200m即可 太大無用,系統啟動都要有空閑空間,防止系統寫滿導致無法啟動,寫完之后永遠不會往這個分區再寫入數據,他永遠有空閑空間 boot分區一定是sda1第一個分區
掛載點必須是空目錄
安裝日志:
/root/install.log:存儲了安裝在系統中的軟件包及其版本信息
/root/install.log.syslog 存儲安裝過程中留下的事件記錄
/root/anaconda-ks.cfg 已Kickstart配置文件的格式記錄安裝過程的選項設置 作為無人值守安裝的模板
linux 嚴格區分大小寫
命令全是小寫
文件名區分大小寫
tab鍵自動補全
linux中一切皆文件 設備文件是特殊的文件
永久生效都要寫入文件 寫入內存的都是臨時生效
linux不通過擴展名區分文件類型
linux存儲設備都必須掛載后才能使用
目錄作用
/bin 存放系統命令,普通用戶和root都可以執行
/sbin 保存和系統環境設置相關的命令,只有root能執行
/usr/bin
/usr/sbin
/boot 系統啟動目錄
/dev 設備文件
/etc 配置文件
/home 宿主目錄
/lib 系統函數庫
/lost+found/ 當系統崩潰或意外關機而產生的文件碎片。當系統啟動過程fsck工具會檢查這里,并修復系統 每個分區都有自己的這個目錄
/media 掛載目錄 多媒體設備 光盤
/mnt 掛載目錄 u盤移動硬盤或其他操作系統分區
/misc 掛載目錄 系統建議用來掛載nfs服務的共享目錄
/opt 第三方軟件保存位置 用處不多,現在外部軟件一般放/usr/local目錄
/proc 虛擬文件系統 放內存中 當前系統的進程和硬件信息
/sys 虛擬文件系統 放內存中 存放內核相關信息
/root root家目錄
/srv 服務數據目錄
/tmp 臨時
/usr 系統軟件資源目錄
/var 動態數據保存位置。保存緩存、日志及軟件運行產生的文件
usr unix system resource
服務器不允許關機,只能重啟
重啟時應該關閉服務
不要在服務器訪問高峰運行高負載命令
遠程配置防火墻時不要把自己踢出服務器
合理分配權限
定期備份重要數據和日志
mint 默認不啟用root用戶,sudo passwd root來啟用
mint也默認不啟用ssh,sudo apt-get install openssh-server然后修改配置文件vi /etc/ssh/sshd_config 修改PermitRootLogin yes行,來允許root用戶ssh遠程登陸
3 常用命令
3.1 文件處理命令
命令格式 命令 [-選項] [參數] ls -al /etc 中括號表示可選
個別命令不遵守此格式 多個選項可以寫一起 簡化選項和完整選項 -a –all
目錄處理命令:
ls list /bin/ls -aldh
所有者 所屬組 其他人 ugo rwx 讀寫執行權限 777 軟鏈接 硬鏈接
-表示文件 d表示文件 l表示link
.開頭的文件表示隱藏文件 .當前目錄 ..父目錄
mkdir /bin 創建目錄 -p 表示遞歸創建 -m=mode 可以同時創建多個目錄 空格分割
cd 切換目錄 change directory shell內置命令
pwd /bin 顯示當前目錄
rmdir remove empty directories /bin 刪除空目錄
cp copy /bin -rp r表示遞歸 p保留文件屬性 可以復制多個文件
mv move /bin 剪切、改名 可以剪切多個
clear ctl+l 清屏
rm 刪除文件 remove /bin -rf f表示強制執行
文件處理命令:
touch /bin 創建空文件 文件名如果是有空格 加雙引號 不建議
cat 查看文件 /bin -n 顯示行號
tac 導致顯示
more 分頁顯示文件內容 /bin 空格或f 翻頁 q或Q退出 enter換行
less 同more不過可以向上翻頁 pageup 上箭頭 還可以搜索 /詞兒 高亮顯示搜索到的 n顯示下個搜索到的
head 查看前幾行 -n 默認10行
tail -fn 查看后幾行 -f實時監控
鏈接命令:
ln link /bin ln -s [原文件] [目標文件] -s表示軟連接 不加表示硬鏈接
軟連接類似win快捷方式,l標記權限全是777 軟連接很小
硬鏈接和原文件的i節點相同
硬鏈接刪除源文件,目標文件依然可以使用。軟鏈接一旦刪除源文件,目標文件不可用
和cp -p的不同處 修改一處后,另外一處也會同時更新。
硬鏈接不能跨分區 硬鏈接不能對目錄使用
3.2 權限管理命令
chmod root和所有者可以改權限
change the permissions mode of a file
/bin
-R 遞歸修改 mode=421 {ugoa}+-={rwx}
可以同時進行多個授權
更多的是用數字方式 777 表示擁有全部權限
對目錄 r表示可以列出目錄內容 w表示可以在目錄中創建 刪除文件 x可以進入目錄
刪除文件的權限是對所在目錄有寫權限
對目錄有r權限就一般有x權限
chown 只有root可以改
change file ownership
chgrp
useradd
groupadd
一般誰創建的文件 誰就是所有者
一個用戶有多個組 單有個缺省組 文件的創建者的缺省組就是文件的所屬組
umask -S 缺省權限 u=rwx,g=rx,o=rx
創建目錄的權限和缺省權限一樣
創建文件的權限是缺省權限去除x權限 防木馬病毒
umask 0022 0 特殊權限 022 真正的權限是777-022=755
umask 023
3.3 文件搜索命令
find 搜索會占用大量資源 不要在服務高峰期使用 window中everything挺好用的,不過沒有linux版本,并且只支持ntfs分區
/bin find [搜索范圍] [匹配條件]
-name 根據文件名搜索 find /etc -name init
通配符 *匹配任意字符 ?匹配單個字符
-iname 忽略大小寫
搜索范圍越小越好 能不在根目錄下就不要全局搜索 嚴重耗費資源
-size 指定文件大小 +- linux一個數據塊512B 就是0.5k 查找大于100M的文件find / -size +204800
-user 找所有者的文件
-group 找所屬組的文件
根據時間屬性查找
-amin 訪問時間 access
-cmin 文件屬性 change
-mmin 文件內容 modify
find /etc -cmin -50 查找50分鐘以內修改過文件屬性的文件 +-
連接選項 -a兩個條件同時滿足 -o兩個條件滿足任一 find / -size +163840 -a -size -204800
find /etc -name init -exec ls -l {} \; -exec/-ok 命令 {} \; 對搜索結果執行操作 -ok有確認詢問
-type 根據文件類型 f文件 d目錄 l軟連接
-inum 根據i節點查找 可以找硬鏈接
locate命令
/usr/bin 在文件資料庫中查找
yum install -y mlocate
會定期更新
速度快
updatedb 初始化
locate -i 不區分大小寫
/tmp目錄不被收錄 某些目錄不被收錄
which 命令搜索 which ls 還能搜到命令別名
whereis 還能搜到幫助文件
grep -i 不區分大小寫 -v排除指定字符串 ^表示行首 反向查找 屏蔽
3.4 幫助命令
man manual /usr/bin
可以查命令幫助 也可以查配置的幫住
man ls
man services 不可以寫絕對路徑
可以 /內容 查找
man passwd 優先查命令 1一般是命令的幫住 5一般是配置文件的幫住
man 5 passwd 是查配置
whatis 可以查到命令的簡短介紹 就是幫助文檔的name部分
apropos 可以查配置文件的簡短介紹 也不要加絕對路徑
–help 只看選項 不會man那么長
info 和man大同小異
help 可以查看shell內置命令的幫助
shell內置命令找不到路徑
3.5 用戶管理命令
useradd 加用戶
passwd 改密碼 普通用戶改自己密碼需要滿足復雜度要求
who 查看哪些用戶登錄 tty表示本地登錄 pts表示遠程終端
w 查看登錄用戶及正在干嘛
3.6 壓縮解壓命令
絕大多數病毒很難感染壓縮文件
常用壓縮格式
.gz linux中常用格式 命令gzip gunzip解壓縮 或者gzip -d
壓縮比很驚人 差不多5倍
不過gzip只能壓縮文件 不能目錄
壓縮解壓均不保留源文件
.zip linux和win通用格式
zip命令 保留源文件 -r壓縮目錄
壓縮比差于gzip
unzip解壓縮 不區分文件和目錄
.tar .tar.gz可以壓縮目錄
tar命令 -z 打包同時壓縮格式為gz -c打包 -v verbose詳細 -f 指定文件名 -x解包 -j打包同時壓縮格式為bz2
.bz2 gzip的升級版
bzip2命令 -k可以保留原文件 壓縮比驚人
bunzip2 解壓縮.bz2文件 -k可以保留源文件 bzip2 -d也可以解壓
tar -xjf 可以解壓.tar.bz2文件
3.7 網絡命令
write 發信息給服務器上其他用戶,登錄了的用戶才能發信息 最初的及時通訊 ctrl+d結束
wall 給所有在線用戶發信 , writeall的意思
ping 給遠程用戶發送icmp包,檢測目標是否存在,每經過一個路由節點ttl減少1 不同系統ttl初始值不一樣 可以大概判斷對方操作系統類型 linux是64
ifconfig 查看當前網絡 eth0是初始網卡 lo是回環網卡用戶檢測tcpip是否通暢,mac地址是固話在網卡的只讀存儲器中的地址不可變
ifconfig eth0 192.0.0.0 可以臨時更改ip
mail 郵件命令 用戶不在線也可以 mail用戶名發信 mail啥都不跟收信 輸入help查看幫助 輸入序列號查看信 h可以看到信列表 d 1 刪除郵件
last 重啟信息都有 所有用戶登錄信息 非常有效 常用的命令
lastlog 同last只記錄最后一次登錄 lastlog -u 502指定用戶
traceroute 顯示數據包到主機間的路徑 凡走過必留痕跡 結果顯示**是被該節點屏蔽了
netstat 顯示網絡相關信息 -t tcp協議 -u udp協議 -l 監聽 -r路由 -n 顯示ip端口
netstat -tlun 查看本機監聽的端口
netstat -an 查看本機所有的網絡連接
netstat -rn 查看本機路由
tcp 傳輸控制協議 有三次握手協議 更可靠 類似打電話
udp 用戶數據報協議 更快 類似發短信
tcp才可以監聽端口 udp不可以 udp可以直接發送
發起端口是隨機的 目標端口才是22 80等端口
setup 修改網絡, 是redhat中特有的 其他版本沒有 永久生效
yum install -y setuptool
安裝工具組件如 ntsysv(系統服務)system-config-networktui(網絡服務)iptables(防火墻配置)
yum install system-config-securitylevel-tui
yum install iptables
yum install ntsysv
yum install system-config-network-tui centos7,已經setup已經無法配置網絡了,該命令中無法找到,推薦使用nmtui命令
service network restart 重啟網卡
mount 掛載
mount -t iso9660 /dev/sr0 /mnt/cdrom
/dev/cdrom 是/dev/sr0的軟連接
-t iso9660 可以不寫 默認就是
umount /dev/sr0
如果正在掛載目錄中,是卸載不了提示設備忙,要退出掛載目錄
3.8 關機重啟命令
shutdown
shutdown -h now
shutdown -h 8:30
shutdown -r now
shutdown -r 8:30
最早期只有shutdown 可以正確保存服務,目前其他命令也可以不過推薦使用shutdown
-c 取消前一個關機命令
-h 關機
-r 重啟
服務器不能關機 只能重啟 謹記
halt
poweroff 相當于直接斷電 比較危險
init 0
上面3個命令也可以關機
reboot重啟
init 6也可以重啟
系統運行級別:表示linux啟動時候可以進入的級別號
0 關機
1 單用戶 類似win啟動f8安全模式,啟動最小服務,啟動最小核心程序,用戶修復系統,只能root登陸,沒有圖形界面和win安全模式不一樣
2 不完全多用戶,不含nfs服務 nfs驗證機制弱,不建議用這個文件共享
3 完全多用戶
4 未分配
5 圖形界面
6 重啟
cat /etc/inittab 是init的配置文件 別改0或6 改錯就不好了
X11代表圖形界面 X表示X-window
runlevel 查詢系統運行級別
logout 注銷 做完操作一定要退出 防止安全隱患
4 Vim文本編輯器
vim是vi的增強版
vim是功能非常強大的全屏幕文本編輯器,是linux/unix中最常用的編輯器
vim沒有菜單只有命令
命令模式
插入模式 iao進入 esc退出
編輯模式 輸入: 進入編輯模式 命令以回車結束 :set nu 顯示行號 :wq保存退出
插入命令
a 在后面插入
A 在行尾插入
i 在前面插入
I 在行首插入
o 在下行插入
O 在上行插入
定位命令:
:set nu 顯示行號
:set nonu 取消行號
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
$ 移到行尾
0 移到行首
刪除命令:
x 刪除光標出字符
nx 刪除光標所在處后n字符
dd 刪除當前行
dG 刪除光標所在行到文件尾
D 刪除光標所在處到文件尾
:n1,n2d刪除指定范圍行
復制和剪切命令:
yy 復制當前行
nyy 復制n行
dd 剪切當前行
ndd 剪切多行
p、P 粘貼到當前行下或者行上
替換和取消命令
r 替換單個字符
R 多個字符替換,esc結束
u 取消上一步操作 undo
搜索和搜索替換命令:
/string 搜索字符串 搜索時候忽略大小寫:set ic 取消 :set noic n下一個
:%s/old/new/g 全文替換 %s表示全文替換
:n1,n2s/old/new/g 范圍替換 g可以換c 表示需要詢問
不加g表示只對搜索字符串的首次出現進行替換
保存退出命令:
:w 保存
:w new_filename 另存為
:wq 保存退出
ZZ 是:wq的快捷鍵
:q! 不保存退出
:wq! 強制保存退出 文件所有者和root可以操作
導入命令執行結果 :r !命令 :r 文件名
定義快捷鍵 :map 快捷鍵 觸發命令
:map ^P I#<ESC> ^P 是ctrl+v+p 來輸入 顏色不一樣 代表快捷鍵ctrl+p
連續注釋 :n1,n2s/^/#/g
:n1,n2s/^#//g
:n1,n2s/^/\/\//g 避免轉義符 可以用#或者其他字符來表示分割
ls是別名 \ls 轉義符可以使用ls本來命令
自動替換 :ab mymail yongestcat@126.com
這些設置重啟失效 要永久生效 要寫入對應用戶的home目錄下的vim配置文件 /root/.vimrc 這里面只能放編輯模式的命令 不用加:
5 軟件包管理
軟件包分類:
源碼包(看到源碼 安裝慢 但是更加穩定執行效率高 系統高度適配 卸載方便 可以自由選擇所需功能,安裝步驟多,編輯時間長,安裝一旦報錯新手工解決)
>腳本安裝包 特殊的源碼包 一般是install.sh安裝 給初學者用的
二進制包(經過編譯 安裝快 資源利用率稍低 包管理簡單 源碼不可見 功能選擇不如源碼包靈活 依賴性):rpm包、系統默認包
rpm命令管理
httpd-2.2.15-15.el6.centos.l.i686.rpm
軟件包名 軟件版本 軟件發布次數 適合的linux平臺 適合的硬件平臺 noarch表示適合任何硬件平臺 沒寫linux平臺表示適用所有linux平臺
包名 安裝過的 /var/lib/rpm/中的數據庫
包全名 未安裝過的 絕對路徑
rpm包依賴性
典型的是樹形依賴 a->b->c
環形依賴 a->b->c->a abc用一條命令安裝可以解決
模塊依賴 模塊依賴查詢網站 www.rpmfind.net
1.安裝軟件:執行rpm -ivh rpm包名,如:
#rpm -ivh apache-1.3.6.i386.rpm -i install 安裝 -v 詳細 -h 顯示進度 –nodeps 不檢測依賴性,一般不用
2.升級軟件:執行rpm -Uvh rpm包名。
3.反安裝:執行rpm -e rpm包名。
4.查詢軟件包的詳細信息:執行rpm -qpi rpm包名 可以查未安裝的包
5.查詢某個文件是屬于那個rpm包的:執行rpm -qf rpm包名
6.查該軟件包會向系統里面寫入哪些文件:執行 rpm -qpl rpm包名
rpm -qa|grep
rpm -qi 包名
rpm -qf 文件名
rpm -qRp 包名 查依賴
rpm -V 校驗
S 文件大小是否改變
M 文件的類型或權限是否被改變
5 MD5校驗是否改變
D 代碼是否改變
L 文件路徑是否改變
U 文件的屬主是否改變
G 文件的屬組是否改變
T 文件的修改時間是否改變
文件類型:
c 配置文件
d 普通文件
g ghost文件,就是該文件不應該被rpm包含,很少見
l 授權文件
r 描述文件
rpm包文件提取:
rpm2cpio 包全名 | \ 將rpm格式改為cpio格式
cpio -idv .文件絕對路徑 i copy-in模式,還原 d還原時自動新建目錄 v詳細 cpio是一個標準工具,它用于創建軟件檔案文件和從檔案文件中提取文件
yum在線管理
自動解決依賴性問題,不能上網 可以用光盤作為yum源
yum在redhat中需要收費
網絡yum源 vi /etc/yum.repos.d/CentOS-Base.repo
[base] 容器名稱
name 容器說明,自己隨便寫
mirrorlist 鏡像站點 可以注釋掉
baseurl yum源服務器地址
enabled 是否有效 不寫默認是1 表示有效
gpgcheck 1表示rpm的數字證書生效
gpgkey 數字證書的公鑰文件保存位置。不用修改
yum命令
yum list 查詢可用軟件包
yum search 包名 查詢
yum中沒有包全名概念,全用包名
yum install -y 包名 安裝包
yum -y update 包名 升級 如果沒寫包名就是全部升級包括內核 會導致服務器崩潰 因為需要本地配置些 慎用
yum -y remove 卸載 會把依賴的包也卸載 這些卸載的依賴包可能被別的軟件依賴 卸載命令不安全
安裝的時候最小化安裝 盡量不卸載 不全局升級
yum grouplist 查詢軟件組
yum groupinstall 軟件包組
yum groupremove 軟件包組
光盤yum源搭建:
掛載
網絡yum源失效 enable=0或者改名其他yum源文件
修改 CentOS-Media.repo enable=1 地址改為file:///mnt/cdrom
源碼包安裝是人為手工指定安裝位置 而rpm是默認位置
rpm默認安裝位置
/etc/ 配置文件安裝目錄
/usr/bin 可執行文件安裝位置
/usr/lib 庫文件位置
/usr/share/doc 手冊位置
/usr/share/man 幫助文件位置
源碼包一般安裝在 /usr/local/軟件名 這是系統給準備的第三方軟件位置
安裝位置不同帶來的影響 服務的管理
rpm包安裝的服務可以用系統服務管理命令service來管理,例如rpm包安裝的apache啟動方法/etc/rc.d/init.d/httpd start 或 service httpd start
service 命令是紅帽專有命令 別的linux發行版不一定有
service命令不能管理源碼包安裝的服務
源碼安裝:
需要gcc編譯器
下載源碼包
解壓 進入目錄
./configure –prefix=/usr/local/apache2 定制功能、檢測系統環境是否符合、將定義的功能和檢測的信息寫入Makefile文件,用戶后續的編輯
make && make install 編譯 編譯安裝 make clean
報錯:安裝停止且出現warning、error、no等提示
腳本安裝:
自動安裝的源碼包 適合新手 下一步下一步那種
debian系列中apt是apt-get、apt-cache、apt-config的集合
apt 命令 取代的命令 命令的功能
apt install apt-get install 安裝軟件包
apt remove apt-get remove 移除軟件包
apt purge apt-get purge 移除軟件包及配置文件
apt update apt-get update 刷新存儲庫索引
apt upgrade apt-get upgrade 升級所有可升級的軟件包
apt autoremove apt-get autoremove 自動刪除不需要的包
apt full-upgrade apt-get dist-upgrade 在升級軟件包時自動處理依賴關系
apt search apt-cache search 搜索應用程序
apt show apt-cache show 顯示安裝細節
當然也有apt獨有的命令
新的apt命令 命令的功能
apt list 列出包含條件的包(已安裝,可升級等)
apt edit-sources 編輯源列表
6 用戶和用戶組管理
相關配置文件
/etc/passwd 用戶信息文件 7個字段
用戶名 密碼標志x表示有密碼 如果沒有的話 不校驗密碼登陸不過只能本機登陸 不能遠程
UID 0:超級用戶 1-499 系統用戶(偽用戶 不能登陸不能刪除) 500-65535 普通用戶
root不一定是管理員 uid=0的一定是管理員 普通用戶改為uid0就變成管理員了
GID:初始組id
用戶說明
家目錄
登陸之后的shell
初始組:有且只有一個一般和用戶名相同 能改 但是不推薦改
附加組:可以有多個
影子文件 /etc/shadow 權限000 9個字段
用戶:
密文密碼sha512散列加密 比之前的md5更安全(同一個密碼加密出來的也不一樣)如果!!或者*表示沒有密碼表示不能登陸:
密碼最后一次修改日期 時間戳 1970年1月1日 沒過1天 加1算出來的時間戳
兩次密碼的修改間隔
密碼有效期
密碼到期前的告警天數
密碼到期后的寬限天數 0表示過期后立即失效 -1表示密碼永遠不失效
賬號失效時間 時間戳表示
保留
時間戳換算
date -d “1970-01-01 16066 days”
echo $(($(date–date=”2014/01/06″+%s)/86400+1))
組信息文件/etc/group
組名
組密碼標志
GID
組中附加用戶
添加用戶會生成一個同名組作為用戶主組
/etc/gshadow 組名 組密碼 組管理員用戶名 組中附加用戶
用戶的郵箱
/var/spool/mail/用戶名/
用戶模板目錄
/etc/skel/
用戶管理命令
useradd 選項 用戶名
-u UID? 手工指定uid
-d 家目錄
-c 用戶說明
-g 組名
-G 附加組
-s shell
用戶默認值文件/etc/default/useradd
GROUP=100 #用戶默認組 公有模式 私有模式
HOME=/home #用戶家目錄
INACTIVE=-1 #密碼寬限天數(shadow文件7字段)
EXPIRE= #密碼失效時間(8)
SHELL=/bin/bash #默認shell
SKEL=/etc/skel #模板目錄
CREATE_MAIL_SPOOL=yes #是否建立郵箱
/etc/login.defs 定義了shadow文件中7 8字段之外的字段
PASS_MAX_DAYS 9999 # 5字段
PASS_MIN_DAYS # 4
PASS_MIN_LEN 5???#最小8位 這個5 沒用 現在pam文件生效
PASS_WAR_AGE 7 #6
UID_MIN 500
UID_MAX 60000
ENCRYPT_METHOD SHA512
添加用戶默認值都靠上面兩個文件
passwd命令
-S 查詢用戶密碼狀態 僅root可用
-l 暫時鎖定用戶 僅root shadow文件密碼暗文前面加雙!!
-u 解鎖用戶 僅root
–stdin 可通過管道符輸出的數據作為用戶的密碼
echo “123” | passwd –stdin lamp 一般用與shell編程
whoami
usermod 修改用戶信息
-u 修改uid
-c 說明 有空格用雙引號
-G 加入附加組
-L 鎖定
-U 解鎖
chage 修改用戶密碼狀態
-l 列出用戶的詳細密碼狀態
-d 日期:修改密碼最后一次更改日期(shadow 3字段)
-m 天數: 兩次密碼修改間隔(4字段)
-M 天數: 密碼有效期(5字段)
-W 天數: 密碼過期前警告天數(6字段)
-I 天數: 密碼過期后寬限天數(7字段)
-E 日期: 賬號失效是加(8字段)
chage -d 0 king 要求用戶一登陸必須改密碼 其他的基本都不用記 直接修改shadow文件更直觀
userdel命令 刪除用戶
-r 同時刪除家目錄
手工刪除用戶
vi /etc/passwd
vi /etc/shadow
vi /etc/group
vi /etc/gshadow
rm -rf /var/spool/mail/lamp
rm -rf /home/lamp
id user1 查看用戶信息
su 切換用戶
– 選項表示同時切換環境變量 su root 和su – root env命令可以查看環境變量
-c 僅執行一次命令 不切換身份 su – root -c “useradd user3”
groupadd 添加組
-g GID 指定組id
groupmod 修改組
-g GID 改組id
-n 新組名 改組名
groupdel 刪除組
如果組中有用戶,組中有初始用戶 不能刪,如果是附加組 可以刪除
gpasswd 把用戶添加組或者從組中移除
-a 用戶名
-d 用戶名
7 權限管理
ACL權限 解決身份不足問題 所有者所屬組其他人 不夠用
查看分區ACL權限是否開啟
dumpe2fs -h /dev/sda1 默認支持acl Default mount options: user_xattr acl
-h 僅顯示超級塊中信息,而不顯示磁盤組的詳細信息
臨時開啟分區ACL權限
mount -o remount,acl / #重新掛載根分區,并掛載加入acl權限
永久開啟ACL
vi /etc/fstab 文件 系統開機自動掛載 寫錯了的話 系統可能崩潰 一定小心
defaults,acl 萬一默認不支持 后面,acl 重啟生效
查看acl命令
getfacl 文件名 不支持絕對路徑 報錯但是不影響
設定acl權限
setfacl命令
-m 設定ACL
-x 刪除指定ACL
-b 刪除所有acl
-d 設定默認acl
-k 刪除默認acl
-R 遞歸設置acl
chown root:tgroup /project
chmod 770 /project
setfacl -m u:st:rx /project u表示用戶 g表示組
給用戶st賦予r-x權限,u:用戶名:權限
setfacl -m g:group2:rx /project
drwxr-xr-x+ 2 root root 4096 Sep 6 11:41 king 多個+號表示有acl權限
最大有效權限mask
如果給用戶賦予了acl權限,是需要和mask的權限相與才能得到真正權限
不影響所有者的權限 但是影響acl和所屬組的權限
setfacl -m m:rx 文件名 設置mask
setfacl -b 文件
setfacl -x g:tgroup2 /project/
遞歸acl權限 -R選項 注意只能放后面 老的文件都要遞歸設置下
默認acl權限 如果給父目錄設定了默認ACL權限,那么父目錄中所有新建的子文件都會,只針對新文件 -R可以不取消
setfactl -m d:u:用戶名:權限 文件名
文件特殊權限
SetUID的功能:(危險)
只有可以執行的二進制程序才可以設定SUID權限
命令執行者要對該程序有x權限
命令執行者在執行該程序時獲得該程序文件的屬主的身份(在執行程序的過程中靈魂附體為文件的屬主)
SetUID權限只在該程序執行過程中有效,也就是說身份改變只在程序執行過程中有效
passwd命令有SUID權限 在執行期間可暫時獲得root身份得以改寫shadow文件
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
cat沒有SUID權限,所以普通用戶不能查看/etc/shadow文件內容
設定方法 4代表SUID
chmod 4755 文件
chmod u+s 文件名
用戶必須對他有執行權限,否則顯示大寫S,表示報錯
危險的SUID權限,系統一些SUID權限的是迫不得已,輕易不能設置,并且定期巡檢
比如給vim加SUID權限,那么普通用戶,紅色表示危險,系統警告,然后vim普通用戶也能改系統關鍵信息比如shadow文件等
SGID也可以針對目錄:(不那么危險)(用處不大)
普通用戶必須對此目錄有rx權限,才能進入此目錄
普通用戶在此目錄中的有效組會變成此目錄的屬組
若普通用戶對目錄有w權限時候,新建的文件的默認屬組是這個目錄的屬組
SGID針對文件:(危險)
只有二進制可執行文件可以設置SGID
命令執行者要有x權限
命令執行時候組身份升級為該程序屬組
只在執行程序時候有效
locate命令就是這樣的 有SGID權限 臨時提升為slocate用戶組
/var/lib/mlocate/mlocate.db數據庫
SGID 在所屬組中有s權限 2代表
chmod 2755 文件
chmod g+s 文件名
SBIT權限 黏著位權限 對root無效(不危險)
只對目錄有效
普通母對該目錄有wx權限,即普通用戶可以在此目錄擁有寫入權限
如果沒有黏著位,因為木桶用戶有w權限,所以可以刪除此目錄下所有文件,包括其他用戶建立的文件。一旦賦予黏著位,除了root可以刪除所有文件,普通用戶就算擁有w權限,也只能刪除自己建立的文件,不能刪除其他用戶建立的文件
chmod 1755 目錄
chmod o+t 目錄
chmod 7755 文件 特殊權限位 7沒有作用 根據需要賦予
文件系統屬性chattr權限: 對root也能限制
chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files…
+-=權限
i:針對文件,那么不允許對文件刪除改名,也不能添加和修改數據 相當于鎖起來了;針對目錄,那么只能修改目錄下文件的數據 單不允許建立和刪除文件
a:針對文件,那么只能在文件中增加數據,但是不能刪除也不能修改數據;針對目錄,那么只能在目錄中建立和修改文件,不能刪除文件
lsattr命令: 文件系統屬性查看 -a -d
這也不能限制到root 只是防止誤操作
selinux可以限制root
sudo權限 su指的是switch user,并不是super do
root把本來只能超級用戶執行的命令賦予普通用戶執行
sudo的對象是系統命令
visudo #實際修改的是/etc/sudoers文件
root ALL=(ALL) ALL
用戶或者組(%組名) 被管理的主機=(可使用的身份) 命令 (絕對路徑)
man 5 sudoers
8 文件系統管理
分區和文件系統
主分區:總共最多4個
擴展分區:只能有1個,并且也算主分區的一種,主分區+擴展分區最多4個。但是擴展分區不能存儲數據和格式化,必須再劃分為邏輯分區才能使用
邏輯分區:邏輯分區是在擴展分區中劃分的,如果是IDE硬盤,linux最多支持59個邏輯分區,入股歐式scsi硬盤linux最多支持11個邏輯分區
邏輯分區從sda5開始編號,就算主分區不足4個,sd表示sata硬盤,hd表示ide硬盤,也就是第一個邏輯分區一定是5
文件系統:
ext2:是ext文件系統升級版本,red hat linux 7.2版本以前系統默認都是ext2文件系統。1993年發布,最大支持16TB的分區和最大2TB的文件
ext3:和ext2支持大小一樣,區別是支持日志功能
ext4(現在主流分區):centos6以后的主流分區,最大支持1EB和單個16TB文件,在性能、伸縮性、可靠性方便大量改進,ext4的變化是翻天覆地的,向下兼容ext3,無限數量子目錄、extents連續數據塊概念、多塊分配、延遲分配、持久預分配、快速FSCK、日志校驗、無日志模式、在線碎片整理、inode增強、默認啟動barrier等
常用命令:
df 統計文件系統的占用情況
-h 人性化顯示
du 統計目錄大小
du -sh /etc/
-h
-s 統計和
df和du統計根分區不一樣大小,df是從文件系統考慮,不僅考慮文件占用的空間,還要統計唄命令或程序占用的空間(最常見的就是文件已經刪除但是程序并沒有釋放空間),定期重啟還原系統狀態
df看到的剩余空間才是真正的空間
du命令是面向文件的,只會計算文件或目錄占用的空間
fsck 文件系統修復命令
-a 不用顯示用戶提示,自動修復文件系統
-y 自動修復,和-a一致,不過有些系統只支持-y
該命令不需要人工執行,系統啟動的時候自動檢測,知道就好
dump2fs 顯示磁盤狀態命令,最主要是的看分區數據塊大小和是否支持acl
mount 掛載命令
mount [-l] 查詢系統中已經掛載的設備,-l會顯示卷標名稱 這些輸出內容又叫超級塊的內容
mount -a 根據配置文件/etc/fstab的內容,自動掛載
命令格式
mount [-t 文件系統] [-L 卷標名] [-o 特殊選項] 設備文件名 掛載點
fat32識別vfat fat16 識別fat
-t 文件系統:加入文件系統類型來指定掛載的類型,可以ext3,ext4,iso9660等文件系統
-L 卷標名:掛載指定卷標的分區,而不是安裝設備文件名掛載 沒啥用處 起個別名的意思
-o 特殊選項:可以指定掛載的額外選項
atime/noatime 更新訪問時間/不更新訪問時間。訪問分區文件時,是否更新文件的訪問時間,默認更新
async/sync 異步/同步,默認為異步
auto/noauto 自動/手動,mount -a命令執行時,是否會自動安裝/etc/fstab文件內容掛載,默認為自動
defaults 定義默認值,相當于rw,suid,dev,exec,auto,nouser,async這7個選項
exec/noexec 執行/不執行,設定是否允許在文件系統中執行可執行文件,默認exec允許 有時候程序不能運行不一定是權限的事情
remount 重新掛載已掛載的文件系統,一般用戶指定修改特殊權限 比較常用
rw/ro 讀寫/只讀,文件系統掛載時,是否具有讀寫權限,默認是rw
suid/nosuid 具有/不具有SUID權限,設定文件系統是否具有SUID和SGID的權限,默認是具有
user/nouser 允許/不允許普通用戶掛載,設定文件系統是否允許普通用戶掛載,默認不允許只有root可以
usrquota 寫入代表文件系統支持用戶磁盤配額,默認不支持
grpquota 寫入代表文件系統支持組磁盤配額,默認不支持
umount 設備文件名或者掛載點 –先卸載才能彈出光盤 真機器中不卸載 不能在光盤目錄中卸載會報錯正忙
掛載u盤
fdisk -l
mount -t vfat /dev/sdb1 /mnt/usb
linux默認不支持ntfs格式
如何支持ntfs格式 :手工編譯內核 將新的驅動加進來;下載ntfs-3g插件 http://www.tuxera.com/community/ntfs-3g-download
手工分區fdisk
fdisk /dev/sdb
m 幫助
n 新建
l 顯示
d 刪除
w 保存
partprobe命令重新讀取分區表 有時候分區表正在被占用需要重啟才能下一步,那就直接用這個命令 當做分區之后必定執行的命令
+2G
格式化分區
mkfs -t ext4 /dev/sdb1
然后創建掛載點掛載即可
自動掛載
/etc/fstab配置文件6個字段
第一字段:分區設備文件名或者UUID(硬盤通用唯一識別碼) UUID防止分區改順序 dumpe2fs -h /dev/sdb1能查到UUID
第二字段:掛載點
第三字段:分區類型
第四字段:掛載參數,和mount的掛載權限一致
第五字段:指定分區是否被dump備份,0代表不備份,1每天備份,2 不定期備份 lost+found是自動備份位置
第六字段:指定分區是否被fsck檢測,0代表不檢測,其他數字代表檢測的優先級,那么當然1的優先級比2高
如果弄錯,系統啟動崩潰 所以不應該先重啟 應該mount -a
如果崩潰 恢復 啟動時候輸入root密碼可以操作 不過根分區是只讀的 remount下掛為讀寫 然后重新編輯這個文件修復錯誤
mount -o remount,rw /
分配swap分區
free命令 查看內存與swap分區使用狀況 -m 以兆顯示 -h
cached(緩存):是指把讀取出來的數據保存在內存當中,當再次讀取時,不用讀取硬盤而直接從內存中讀取,加速了數據的讀取過程
buffer(緩沖):是指在寫入數據時,先把分散的寫入操作保存到內存中,當達到一定程度再集中寫入硬盤,減少磁盤碎片和硬盤的反復尋道,加速了數據的寫入過程
fdisk /dev/sdb 建立個邏輯分區 83標準分區 t來改變分區id 改為82 就是swap分區 partprobe
格式化 mkswap /dev/sdb6
swapon /dev/sdb6 加入swap
swapoff /dev/sdb6 取消swap
swap開機自動掛載 /etc/fstab 和普通一樣 掛載點是swap
9 SHELL 基礎
Shell是一個命令行解釋器,它為用戶提供了一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用Shell來啟動掛起停止甚至編寫一些程序。
硬件–>內核–>Shell–>外層應用程序
window圖形交互界面也是shell
Shell還是一個功能強大的編程語言,易編寫,易調試,靈活性較強。Shell是解釋執行的腳本語言,在Shell中可以直接調用Linux系統命令。
分類:Bourne Shell(linux識別為sh),C Shell(主要用在BSD版)
Shell的兩種主要語法類型:Bourne和C 兩個語法結構完全不同
Bourne家族主要包括:sh(單用戶模式用的是這個)、ksh、Bash(主流,和sh兼容)、psh、zsh
C家族主要:csh、tcsh
/etc/shells 可以查詢到系統支持哪些shell
Shell腳本的執行方式:
echo輸出命令 -e 支持反斜線控制的字符轉換
\\ 輸出\本身
\a 輸出警告音
\b 退格鍵
\c 取消輸出行末的換行符。和“-n”選項一致
\e ESCAPE鍵
\f 換頁符
\n 換行符
\r 回車
\t 制表符 tab
\v 垂直制表符
\0nnn 按照8進制ASCII碼表輸出字符。其中0為數字0零,nnn是三位八進制數
\xhh 按照16進制ASCII碼表輸出字符。其中hh是兩位16進制數
echo -e “\e[1;31m abcd \e[0m”
\e[1;開啟顏色輸出
\e[0m關閉顏色輸出
30m=黑色 31m=紅色 32m=綠色 33m=黃色 34m=藍色 35m=洋紅 36m=青色 37m=白色
第一個腳本
vi hello.sh
#!/bin/bash 這不是注釋 不寫不影響運行 單要求必須寫
#The first program
#Author:king
echo -e “hello world”
sh hello.sh
cat -A顯示包括隱藏
win和linux的回車符不一樣
dos2unix來轉換文件
bash基本功能
歷史命令和補全
歷史命令history -c 清空歷史命令 -w 把緩存保存~/.bash_history 正常登陸退出才寫入
默認保存1000條 /etc/profile 可以更改
上下箭頭可以調用歷史命令 !n可以可以重復第n條命令 !!重復執行上一條命令 !字符串 執行最后一條字符串開頭的命令
ctrl+r 可以反查歷史命令
命令 文件 目錄 都可以tab補全 多個的話 tab兩次列出可執行的
命令別名和常用快捷鍵
alias 別名=’原命令’
命令執行順序:
1.絕對路徑或者相對路徑
2.別名
3.bash內部命令
4 按照$PATH環境變量定義的目錄查找順序找到的第一個命令
unalias 別名 刪除別名
永久別名生效.bashrc修改
bash常用快捷鍵:
ctrl+a 把光標移動到命令行開頭。如果我們輸入的命令過長
ctrl+e 把光標移動到命令行結尾
ctrl+c 強制終止當前命令
ctrl+l 清屏 相當于clear
ctrl+u 刪除或者剪切光標之前的命令
ctrl+k 刪除或者剪切光標之后的內容
ctrl+y 粘貼ctrl+u或者k的內容
ctrl+r 在歷史命令中搜索,命令反查
ctrl+d 退出當前終端
ctrl+z 暫停,并放入后臺。這個快捷鍵牽扯工作管理的內容
ctrl+s 暫停屏幕輸出
ctrl+q 恢復屏幕輸出
輸入輸出重定向:
標準輸入輸出:
設備 設備文件名 文件描述符 類型:
鍵盤 /dev/stdin 0 標準輸入
顯示器 /dev/sdtout 1 標準輸出
顯示器 /dev/sdterr 2 標準錯誤輸出
輸出重定向:
標準輸出重定向 命令>文件 命令>>文件 分別是覆蓋和追加,把命令的輸出輸出到指定的文件或設備中
標準錯誤輸出重定向 錯誤命令 2>文件 錯誤命令 2>>文件
正確輸出和錯誤輸出同時保存:
命令>文件 2>&1
命令>>文件 2>&1
命令 &>文件
命令 &>>文件 這四個命令都是把正確輸出和錯誤輸出放到同一個文件
命令 >> 文件1 2>> 文件2 正確放1,錯誤放2
ls &>/dev/null 不管正確錯誤 只管執行就好
輸入重定向:用的不多 一般只給源碼包打補丁時候用
wc [選項] [文件名]
-c 統計字節數
-w 統計單詞數
-l 統計行數
命令<文件
命令<<符號 。。。。 符號 常見的符號用EOF
多命令順序執行與管道符:
命令1 ; 命令2 多個命令順序執行,命令之間無任何邏輯聯系
命令1 && 命令2 當命令1執行正確,命令2才會執行,1執行錯誤 2不執行
命令1 || 命令2 當命令1執行不正確,則命令2才會執行 命令1執行正確,2就不執行
dd命令 磁盤對拷命令
dd if=輸入文件 of=輸出文件 bs=字節數 count=個數
選項:if=輸入文件 制定源文件或源設備
of=輸出文件 指定目標文件或者目標設備
bs=字節數 指定一次輸入/輸出多少字節,即把這些字節看做一個數據塊
count=個數 指定輸入/輸出多少個數據塊
例子:date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date 可以看命令執行多長時間
ls && echo yes
./configure && make && make install
命令 && echo yes || echo no
管道符 |
命令1 | 命令2
命令1的正確輸出作為命令2的操作對象
ll -a /etc/ | more
netstat -an |grep ESTABLISHED
命令1必須執行正確否則命令2不執行
grep -i 忽略大小寫 -n輸出行號 -v反向查找 –color=auto 搜索出的關鍵字用顏色顯示
通配符:
? 匹配一個任意字符
* 匹配0個或任意多個任意字符,也就是可以匹配任何內容
[] 匹配中括號中任意一個字符。[abc] a或者b或者c
[-] 匹配中括號中任意一個字符。-代表一個范圍。[a-z]代表匹配任意一個小寫字母
[^] 邏輯非,表示匹配不是中括號內的一個字符。[^0-9]代表匹配一個不是數字的字符
bash中其他特殊符號
” 單引號。在單引號中所有的特殊符號,如”$”、”"(反引號)都沒有特殊符號
"" 雙引號。 在雙引號中特殊符號都沒有特殊含義,但是"$"、"“和”\”是例外,擁”調用變量的值”、”引用命令”和”轉義符”的特殊含義
反引號。反引號括起來的內容是系統命令,在bash中會先執行他。和$()作用一樣,不過推薦使用$(),因為反引號很容易看錯
$() 和反引號一樣,用來引用系統命令
# 在shell腳本中 #開頭的行代表注釋
$ 用戶調用變量的值,如需要調用變量name的值,需要用$name的方式得到變量的值
\ 轉義符,跟在\后面的特殊符號將失去特殊含義,變為普通字符。如\$將輸出$符號,而不是當做變量引用
bash變量:
用戶自定義變量、
環境變量、
位置參數變量(這種變量主要是用來向腳本當中傳遞參數或數據的,變量名不能自定義,變量作用是固定的)(其實是預定義變量的一種,因為較多單獨分類)、
預定義變量(是bash中已經定義好的變量,不能自定義,變量作用也是固定的)
變量設置規則:
變量名稱可以由字母、數字、下劃線但是不能是數字開頭
bash中變量的默認類型都是字符串型,如果要進行數值運算,則必指定變量類型為數值型
變量用等號連接值,等號左右兩側不能有空格
變量的值有空格,需要用單引號或者雙引號包括
在變量的值中,可以使用\轉義符
如果需要增加變量的值,那么可以進行變量值的疊加。不過變量需要用雙引號包含”$變量名”或用${變量名}包含
可以把命令結果賦予變量,用反引號或$()
環境變量名建議大寫,便于區分
本地變量 就是用戶自定義變量
變量定義 name=”king kong”
變量疊加 aa=123 aa=”$aa”456 aa=${aa}789
變量調用 echo $name
變量查看set
變量刪除unset name
環境變量 :系統環境變量、自由定義的環境變量
用戶自定義變量又稱作本地變量,因為只在當前的shell中生效,而環境變量會在當前shell和這個shell的子shell中生效。如果把環境變量寫入相應的配置文件,那么這個環境變量就會在所有shell生效
設置 export 變量名=變量值 #申明變量
env #查詢環境變量
unset 變量名 #刪除變量
命令pstree 確定進程樹
PATH :分割的一個個路徑,是用于系統查找命令的路徑
PATH變量疊加 PATH=”$PATH”:/root/sh
PS1 (嚴格來說不是環境變量不能用env查看只能用set 他是系統預留專門用作定義系統環境的變量 對系統有特殊含義)
定義系統提示符的變量
\d:顯示日期,格式為“星期 月 日”
\h:顯示簡寫主機名。如默認主機名“localhost”
\t:顯示24小時制時間,格式為“HH:MM:SS”
\T:顯示12小時制時間,格式為“HH:MM:SS”
\A:顯示24小時制時間,格式為“HH:MM”
\u:顯示當前用戶名
\w:顯示當前所在目錄的完整名稱
\W:顯示當前所在目錄的最后一個目錄
\#:執行的第幾個命令
\$:提示符。如果是root用戶為#普通用戶$
PS1='[\u@\t \w]\$’
位置參數變量:
$0 $1..0表示命令本身 1 2 表示1 2的參數,10以上用括號${10},用于從命令行傳遞參數到腳本中
$* 代表命令行所有參數,吧所有的參數看做一個整體
$@ 代表命令行所有參數,所有的參數區分對待
$# 代表命令行中所有參數的個數
$*和$@不是很常用 能看懂即可,可以在執行命令同時輸入參數
預定義變量:
$? 上一次命令的結果的返回狀態 0正確執行 非0表示不正確執行 具體是哪個數字由寫命令的人決定
$$ 當前進程的進程號PID
$! 后臺運行的最后一個進程的進程號PID
命令后跟&符號 放入后臺執行 類似window最小化窗口
接收鍵盤輸入(較位置參數變量更常用):
read [選項] [變量名]
-p “提示信息”
-t 秒數 等待時間
-n 字符數 只接收指定的字符數,就會執行 (不加的話回車結束)
-s: 隱藏輸入的數據 適用于機密信息
數值運算與運算符:
declare -p aa 可以查看變量屬性
-:給變量設定類型屬性
+:取消變量的類型屬性
-i 將變量生命為整數型(integer)
-x: 將變量生命為環境變量
-p:顯示變量的被聲明類型
數值運算
方法1:定義變量類型declare -i cc=$aa+$bb
方法2:expr或者let數值運算工具 dd=$(expr $aa + $bb) +左右兩側空格不能省略
方法3(推薦):$((運算式))或者$[運算式]
運算符:
優先級(數值越高優先級越高) 運算符 說明
13 -,+??單目正,單目負
12 !,~ 邏輯非、按位取反或補碼
11??*,/,% 乘,除,取模
10 +,-???加減
9???<<,>>??按位左移,按位右移
8 <=,>=,<,>?小于或等于、大于或等于、小于、大于
7 ==,!=???等于,不等于
6??&????按位與
5??^????按位異或
4??|???? 按位或
3 &&???邏輯與
2 ||????邏輯或
1 =,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>= 賦值、運算且賦值
可以用小括號改變優先級
變量測試與內容替換:

通過判斷x得到y的情況
變量測試是通過顯示x的值,判斷y的值;程序執行時用于判斷,可以用 if 判斷同樣實現
環境變量配置文件:
source 配置文件
或
. 配置文件
強制讓配置文件直接生效 避免重登陸過程 .就是source的縮寫
環境變量配置文件中主要是定義對系統的操作環境生效的系統默認環境變量,比如PATH,HISTSIZE,PS1,HOSTNAME等默認環境變量
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile –只對當前用戶生效 隱藏文件
~/.bashrc
/etc/bashrc

/etc/profile的作用:
USER變量:
LOGNAME變量:
MAIL變量:
PATH變量:
HOSTNAME變量:
HISTSIZE變量:
umask:
調用/etc/profile.d/*.sh文件
其他配置文件和登陸信息:
注銷時生效的環境變量配置文件 ~/.bash_logout
歷史命令~/.bash_history 是重要的配錯手段 給mysql設置密碼是明文放在這兒不安全 需要清空 其他情況不推薦清空
Shell登陸信息 不要寫歡迎的,寫警告信息比較好 法律問題
本地終端歡迎信息:/etc/issue \反斜杠
\d 顯示當前系統日期
\s 顯示操作系統名稱
\l 顯示登陸的終端號,比較常用
\m 顯示硬件體系結構,如i386,i686
\n 顯示主機名
\o 顯示域名
\r 顯示內核版本
\t 顯示當前系統時間
\u 顯示當前登陸用戶的序列號
alt+f1 f6切換6個登陸終端
遠程終端歡迎信息:/etc/issue.net
轉義符在/etc/issue.net不能使用
是否顯示歡迎信息,由ssh的配置文件/etc/ssh/sshd_config決定,假如”Banner /etc/issue.net”行才能顯示(記得重啟ssh服務)
登陸后歡迎信息:/etc/motd 是登陸后的 之前兩個是登陸前的 不管遠程還是本地都生效
正則表達式:
基礎正則表達式:
grep、awk、sed等命令可以支持正則表達式,正則是包含匹配,在文件中匹配符合條件的字符串
通配符和正則在linux中有不小的區別 ,其他語言中大概是一致的, 通配符是完全匹配,ls、find、cp不認識正則,只識別shell自己的通配符
正則和通配符有些符號通用但是含義完全不同
元字符??????作用
*??前一個字符匹配0次或者任意多次
.??匹配除了換行符外任意一個字符
^??匹配行首。例如^hello會匹配以hello開頭的行
$??匹配行尾
[] 和通配符一樣,匹配中括號中指定的任意一個字符,只匹配一個字符。
[^] 匹配除中括號的字符以外的任意字符。如[^0-9]匹配任意一位非數字字符
\??轉義符
\{n\} 表示其前面的字符恰好出現n次。例如:[0-9]\{4\}匹配4位數字
\{n,\} 表示其前面的字符出現不小于n次。例如:[0-9]\{2,\}表示兩位及以上的數字
\{n,m\} 表示其前面的字符至少出現n次,最多出現m次
linux中() + ?是屬于擴展正則表達式,用的不多
字符截取命令:
cut:提取列 字段提取命令 和grep結合使用 行列提取
-f 列號 : 提取第幾列
-d 分隔符:?指定分隔符 (默認制表符 而不要用空格)
cat /etc/passwd |grep /bin/bash|grep -v root|cut -d “:” -f 1
命令局限 分隔符不定的時候不好使
printf 格式化打印命令 常用在下面awk命令
printf ‘輸出類型輸出格式’ 輸出內容
%ns:輸出字符串,n是數字指代輸出幾個字符
%ni:輸出整數。n是數字指代輸出幾個數字
%m.nf:輸出浮點數。m n是數字,指代整數位和小數位
輸出格式:
\a 輸出警告聲音
\b 輸出退格鍵
\f?清屏
\n?換行
\r?回車
\t?水平輸出退格鍵,也就是tab鍵
\v 垂直輸出退格鍵,也就是tab鍵
printf ‘%s’ $(cat student.txt) #不調整輸出格式
printf ‘%s\t %s\t %s\t %s\t %s\t %s\t \n’ $(cat student.txt) #調整輸出格式
print命令會在每個輸出后加換行符,linux默認沒有這個命令
printf是標準格式輸出命令,并不會自動加入換行符,如果需要換行,需要手工加入換行符
awk:提取列 都不叫命令了 awk編程 相對復雜太多
awk ‘條件1{動作1}條件2{動作2}…’ 文件名
條件 (Pattern):
一般使用關系表達式作為條件
動作(Action):
格式化輸出
流程控制語句
awk ‘{printf $2 “\t” $6 “\n”}’ student.txt
df -h|awk ‘{print $1 “\t” $3}’
print在awk內部默認是有的,在linux系統中默認沒有
awk默認是空格和制表符作為分隔符
BEGIN命令 awk ‘BEGIN{printf “This is a test\n”}{print $2} ‘ student.txt
FS內置變量 指定分隔符 awk ‘BEGIN{FS=”:”}{print $1 “\t” $3}’ /etc/passwd
END命令 所有數據讀取完后執行END動作
支持關系運算符
cat student.txt | grep -v Name | awk ‘$6 >= 87 {printf $2 “\n”}’
sed命令:是一種幾乎在所有unix平臺的輕量級流編輯器,主要是用來將數據進行選取替換刪除新增的命令,可以用管道符接收數據
和vi不同的是,vi只能修改文件
選項:
sed [選項] ‘[動作]’ 文件名
-n 一般sed命令會把所有數據輸出到屏幕,如果加入此選項,則只會把經過sed命令處理的行輸出到屏幕
-e 允許應用多條sed命令編輯 多個動作之間用;分割
-i 同時更新源數據
動作:
不加行號表示整個文檔
a \:?追加,在當前行后添加一行或多行。添加多行時,除最后一行外,每行行尾需要用”\”代表數據未完結。
c \:?行替換,用c后面的字符串替換原數據行,替換多行時,除最后一行外,每行行尾需要用”\”代表數據未完結。
i \:?插入,在當期行前插入一行或者多行。插入多行時,除最后一行外,每行行尾需要用”\”代表數據未完結。
d:?刪除,刪除指定行
p:?打印,輸出指定的行
s:?字符替換,格式為”行范圍s/舊字串/新字串/g” 類似vi中的替換
sed ‘2p’ student.txt
sed -n ‘2p’ student.txt
df -h|sed -n ‘2p’
sed ‘2,4d’ student.txt
sed ‘2a hello’ student.txt
sed ‘2i hello \
word’ student.txt
sed ‘2c no such person’ student.txt
字符處理命令:
排序命令sort 可從管道符接收
sort [選項] 文件名
-f 忽略大小寫
-n 以數值型排序,默認使用字符串型排序
-r 反序
-t?指定分隔符,默認是制表符
-k n,[m] 按照指定的字段范圍排序。從第n字段開始,m字段結束(默認到行尾)
sort /etc/passwd
sort -r /etc/passwd
sort -t “:” -k 3,3 /etc/passwd
sort -n -t “:” -k 3,3 /etc/passwd
統計命令wc 可從管道符接收
-l:只統計行數
-w:只統計單詞數
-m:只統計字符數
條件判斷:
按照文件類型進行判斷:
LINUX中的七種文件類型
d 目錄文件。
l 符號鏈接(指向另一個文件,類似于瘟下的快捷方式)。
s 套接字文件。
b 塊設備文件,二進制文件。
c 字符設備文件。
p 命名管道文件。
– 普通文件,或更準確地說,不屬于以上幾種類型的文件

-d -e -f 這三個最常用
兩種判斷格式
test -e /root/install.log
[ -e /root/install.log ] 前后有空格
echo $?判斷命令執行狀態 或者 [ -d /root ] && echo “yes” || echo “no”
按照文件權限進行判斷:

不會分那么細 只有所有者所屬組其他人有一個人有寫權限 就認為真
兩個文件之間進行比較:
測試選項 作用
文件1 -nt 文件2???判斷文件1的修改時間是否比文件2的新,如果新則真
文件1 -ot 文件2 判斷文件1的修改時間是否比文件2的舊,如果舊則true
文件1 -ef 文件2 判斷文件1是否和文件2的inode號一致,可以判斷是否為同一文件,判斷硬鏈接是很好的辦法
兩個整數之間比較
測試選項?????作用
整數1 -eq 整數2 相等則true
整數1 -ne 整數2?不相等則true
整數1 -gt 整數2 大于則true
整數1 -lt 整數2??小于則true
整數1 -ge 整數2 大于等于
整數1 -le 整數2??小于等于
字符串比較:
-z 字符串 空則true
-n 字符串??非空則true
字串1 == 字串2 等等則true
字串1 != 字串2?不等則true
多重判斷:
判斷1 -a 判斷2???邏輯與
判斷1 -o 判斷2?? 邏輯或
! 判斷 邏輯非 注意有空格
流程控制if語句:
1、單分支if條件語句
if [ 條件判斷 ]; then
程序
fi
或者
if [ 條件判斷 ]
then
程序
fi
注意點:if語句使用fi結尾,和一般語言使用大括號結尾不同
[ 條件判斷 ] 空格不能省略
then后面跟符合條件之后執行的程序,可以放在[]之后要用;分割,也可以換行寫入就不需要;了
例子:判斷分區使用率
#!/bin/bash
#統計根分區使用率
#Author:king
rate=$(df -h | grep “/dev/mapper/centos-root” | awk ‘{print $5}’ | cut -d “%” -f1)
#把根分區使用率作為變量賦值給變量rate
if [ $rate -ge 80 ]
then
echo “warning! root si full”
fi
10 服務管理

啟動與自啟動
查詢已安裝的服務
rpm包安裝的服務
chkconfig –list #查看服務自啟動狀態可以看到所有rpm包安裝的服務
ps aux 查看進程
netstat -tlun 查看端口
源碼包安裝的服務 查看服務安裝位置 一般是/usr/local/下
rmp包安裝在默認位置/etc /etc/rc.d/init.d/
rpm 獨立服務的管理:
/etc/init.d/ 獨立服務的啟動腳本 /etc/rc.d/init.d/是一個 鏈接
/etc/sysconfig/?初始化環境配置文件位置
/etc/?配置文件位置
/etc/xinetd.d/?基于xinetd服務的啟動腳本
/var/lib/?服務產生的數據放在這里
/var/log 日志
獨立服務的啟動 /etc/init.d/獨立服務名 start|stop|status|restart
service 獨立服務名 start|stop|status|restart #紅帽專有命令
獨立服務自啟動3中方法:
1:chkconfig –list
chkconfig –level 2345 httpd on #off
chkconfig httpd off #默認就是2345 可以省略
2: vi /etc/rc.d/rc.local #系統啟動輸入賬戶密碼之前 所有程序啟動完之后 就執行這個文件 環境變量是在輸入密碼之后,所以這個文件中沒有環境變量,只能輸入絕對路徑, 把啟動標準命令放入 即可自啟動,推薦該方法
3:使用ntsysv命令管理自啟動 不僅可以管理獨立服務 也可以管理基于xinetd的服務,但是同樣不能管理源碼包的服務(不推薦,是紅毛專有命令)
基于xinetd服務的管理:了解下 基本不常用
xinetd 超級守護進程 這個服務本身需要安裝 隨著linux版本,現在基于xinetd的服務越來越少,現在只有不太安全的telnet和少數其他的使用
yum -y install xinetd
yum -y install telnet-server
xinetd本身是常駐內存的服務
xinetd服務的啟動
vi /etc/xinetd.d/telnet

xinetd服務的自啟動
chkconfig telnet on
ntsysv
xinetd服務的啟動和自啟動是通用的 和獨立服務不一樣 ,這很反人類
源碼包服務的管理:
啟動:使用絕對路徑啟動 不同服務的啟動腳本不同 查看安裝說明得知
自啟動:vi /etc/rc.d/rc.local
讓service命令能識別源碼包服務
在/etc/init.d/中加入軟連接即可
讓源碼包的服務能被chkconfig與ntsysv命令管理

chkconfig –add apache
雖然可以,但是不推薦這么干

11 系統管理
進程管理:
監控服務器 當服務器數量比較多的時候用
ps aux #查看系統中所有進程 使用BSD操作系統格式 a前臺進程 x后臺進程 u顯示命令是誰執行
ps -le #使用Linux標準命令格式
USER 用戶
PID 進程id
%CPU 占用cpu
%MEM 占用內存
VSZ 占用虛擬內存大小 kb
RSS 占用實際物理內存大小kb
TTY 終端,tty1-tty7本地終端 tty1-tty6是本地的字符界面終端,tty7是圖形終端 pts/0-255代表虛擬終端 ?表示內核直接產生的
STAT:進程狀態。常見狀態:R運行S睡眠T停止s包含子進程+位于后臺
START:進程啟動時間
TIME:該進程占用cpu的運算時間,注意不是系統時間
COMMAND 命令名
查看系統健康狀態 TOP
-d 秒數 指定更新秒數 默認3秒
在top命令的交互模式中可執行的命令:
?或h 顯示幫助
P?以cpu使用率排序,默認就是
M?以內存使用率排序
N 以PID排序
q 退出top
第一行信息為任務隊列信息

第二行為進程信息

第三行為cpu信息

第四行為物理內存

第五行是交換分區

內存空閑率 cpu負載和系統壓力這三個是重要指標
查看進程樹
pstree
-p 顯示進程pid
-u 顯示進程所屬用戶
進程終止:
kill -l #查看可用的進程信號
常用的 1 9 15

kill pid 默認是15
kill -1 2332 #重啟進程
kill -9 2332 #強制終止
killall [選項][信號] 進程名
#按照名稱殺死進程
-i 交互式
-I 忽略大小寫
pkill [選項][信號] 進程名 不是標準終止命令
#按照進程名終止進程 和killall一樣
-t 終端號:按照終端號提出用戶
pkill -9 -t tty1
工作管理:
把程序放入后臺 win中最小化就是放入后臺
tar -zcf etc.tar.gz /etc & #命令后加&放入后臺
ctrl+z放入后臺暫停
查看后臺工作
jobs [-l]
-l 顯示job的pid
+表示最近一個放入后臺的工作,也是工作恢復時,默認恢復的工作。-表示倒數第二個放入后臺的job
將后臺暫停的工作恢復到前臺執行
fg %工作號
%工作號:%可以省略但是注意工作號和pid區別
將后臺暫停的工作恢復到后臺執行
bg %工作號
top恢復到后臺還是stop狀態 因為這個命令必須和前臺交互
后臺恢復執行的命令,是不能和前臺有交互的,否則不能恢復到后天執行
系統資源查看:
vmstat命令監控系統資源
vmstat [刷新延時 刷新次數]
如:vmstat 1 3
dmesg開機時內核檢測信息
dmesg | grep CPU
free 查看內存使用狀態
-b -k -m -g
cache加速讀取 緩存
buffer加速吸入 緩沖
查看cpu信息
cat /proc/cpuinfo
uptime
實際是top w命令的第一行
查看系統與內核相關信息:
uname [選項]
-a 查看系統所有相關信息
-r 查看內核版本
-s 查看內核名稱
file /bin/ls #判斷當前系統位數 linux沒有直接命令查看位數命令 隨便file一個外部命令即可
查看當前系統發行版
lsb_release -a
列出進程打開或者使用的文件信息
lsof [選項]
-c 字符串:只列出以字符串開頭的進程打開的文件
-u 用戶名
-p pid
系統定時任務:
crond服務管理與訪問控制:service crond restart
chkconfig crond on
服務后面的d代表守護進程
crontab -e #進入crontab編輯界面。會打開vim編輯你的job
crontab -l
crontab -r
* * * * * command #前面5個*代表日期



12 日志管理
centos6.x中日志服務已經由rsyslogd取代了原先的syslogd服務
rsyslogd的新特點:
基于TCP網絡協議傳輸日志信息;
更安全的網絡傳輸方式;
有日志消息的及時分析框架;
后臺數據庫;
配置文件中可以寫簡單的判斷邏輯
與syslog配置文件相兼容
確定服務啟動
ps aux|grep rsyslogd
chkconfig –list|grep rsyslog


除了系統默認日志,rpm安裝的系統服務也會默認把日志記錄在/var/log目錄(源碼安裝的服務日志是在源碼包指定的目錄中)。不過這些日志不是由rsyslogd服務來記錄和管理,而是各個服務使用自己的日志管理文檔來記錄自身日志
常見的

rsyslogd日志服務:
基本日志格式包含四列:
時間產生的時間
主機名
服務名或程序名
時間的具體信息
配置文件 /etc/rsyslog.conf






日志輪替:舊日志被新日志替換
日志文件的命名規則:如果配置文件中擁有dateext參數,那么日志會用日期來作為日志文件的后綴,例如 secure-20130605,這樣的話日志文件名不會重疊,所以也就不需要日志文件名的改名,只需要保存指定的日志個數,刪除多余的日志文件即可。
如果沒有dateext參數,那么日志文件就需要改名了。當第一次進行日志輪替時,當前的secure日志會自動改名為secure.1等,以此類推。
大多數以第一種方法
logrotate /etc/logrotate.conf



所有rpm包安裝的都會自動輪替,源碼包安裝的要按照上面的方法加入輪替,實際上是變成了系統定時任務
logrotate命令
logrotate [選項] 配置文件名
如果此命令沒有選項,則會按照配置文件中的條件進行日志輪替
-v 顯示日志輪替過程
-f 強制進行日志輪替。不管輪替條件是否符合,強制配置文件中所有的日志進行輪替
13 啟動管理
系統運行級別:

runlevel 查看當前運行級別
init 運行級別 #改變運行級別 如果切換錯誤 運行級別也會改變 可以欺騙系統
系統默認運行級別 vim /etc/inittab 這個文件在centos7中已經淘汰
id:3:initdefault:
系統啟動過程:






啟動引導程序Grub配置文件

vi /boot/grub/grub.conf 或者etc下目錄的軟連接


grub加密:
grub-md5-crypt #生成加密密碼串 還是md5 用戶密碼是sha512

純字符界面分辨率調整:
grep “CONFIG_FRAMEBUFFER_CONSOLE” /boot/config-2.6.32-279.el6.i686 #查詢內核是否支持修改分辨率



有些不支持10進制 要改為16進制 redhat系列是支持10進制的
系統修復模式:
grub界面按b鍵進入單用戶模式:修復
遺忘root密碼
修改系統默認運行級別
光盤修復模式:理論可以修復一切問題
可以修復grub密碼



服務器安全指的是網絡安全,如果你拿到了真實機器,那么就認為你有它所有權
14 備份與恢復

雞蛋不要放在同一個籃子
企業數據要異地備份

備份策略:
完全備份
增量備份
差異備份



目錄不支持增量備份



博客出處:http://www.rzrgm.cn/yongestcat/
歡迎轉載,轉載請標明出處。
如果你覺得本文還不錯,對你的學習帶來了些許幫助,請幫忙點擊右下角的推薦

浙公網安備 33010602011771號