發現自己的linux水平楞個瓜皮,找個視屏教程學習一哈1 linux系統簡介1.1 UNIX和Linux發展史unix發展歷史:1969年,美國貝爾實驗室的肯.湯普森開發出unix系統,1971年丹尼斯·里奇發明C語言,1973年,unix用c重寫硬體平臺的概念 也就是cpu架構PowerPC IB... ...
發現自己的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 整