發現自己的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 [email protected]
這些設定重啟失效 要永久生效 要寫入對應用戶的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 備份與恢復

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

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



目錄不支持增量備份



轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/160497.html
標籤:Linux
