- show databases; 顯示數據庫
- use mysql; 進入數據庫
- show tables; 顯示數據庫中的表
- desc user; 查看user表的數據結構
- flush privileges; 刷新數據庫信息
- select host.user,password from user; 查詢user表中的host,user,password字段
mysql的密碼都在mysql這個庫裏面,有一張表叫user,這裏管理了可以登陸數據庫的用戶
Linux
Linux內核官網:www.kernel.org
分區類型:
1.主分區:最多只能有4個
2.擴展分區:最多只能有1個;主分區加擴展分區最多有4個;不能寫入數據,只能包含邏輯分區
3.邏輯分區:
格式化(高級格式化):又稱邏輯格式化,他指根據用戶的文件系統(如FAT16、FAT32、NTFS、EXT2、EXT3、EXT4等),在磁盤的特定區域寫入特定的數據,在分區中劃出一片用於存放文件分配表、目錄表等用於文件管理的磁盤空間。
一個sector是512bytes,一個block是4kb
硬件 |
設備文件名 |
IDE硬盤 |
/dev/hd[a-d] |
SCSI/SATA/USB硬盤 |
/dev/sd[s-p] |
光驅 |
/dev/cdrom或/dev/sr0 |
軟盤 |
/dev/fd[0-1] |
打印機(25針) |
/dev/lp[0-2] |
打印機(USB) |
/dev/usb/lp[0-15] |
鼠標 |
/dev/mouse |
設備文件名:
/dev/hda1(IDE硬盤接口)
/dev/sda1(SCSI硬盤接口、SATA硬盤接口)
掛載:
必須掛載
/(根分區)
Swap分區(交換分區、內存2倍,不超過2G)
推薦分區
/boot(啓動分區,200)
文件系統結構
/
|
/boot /etc /home
/ | \
/ | \
passwd shadow group
設置Linux的IP地址:ifconfig ens33 192.168.10.225
通過secureCRT遠程連接Linux,首先將虛擬機的網絡設置改爲橋接,然後將Linux的網絡地址設爲真實機地址同一網段,比如真實機地址是192.168.10.25,再通過SecureCrt連接
Winscp用於windows與linux之間進行數據拷貝
Linux嚴格區分大小寫
Linux中的所有內容以文件形式保存,包括硬件
硬盤文件是/dev/ds[a-p]
光盤文件是/dev/sr0等
Linux不靠擴展名區分文件類型
壓縮包:“*.gz”、“*.bz2”、“*.tar.bz2”、“*.tgz”等
二進制軟件包:“.rpm”
網頁文件:“*.html”、“*.php”
腳本文件:“*.sh”
配置文件:“*.conf”
Linux的所有存儲設備都必須掛載之後用戶才能使用,包括硬盤、U盤和光盤
Windows下的程序不能直接在Linux中安裝和運行
Linux各目錄的作用
/bin/ 存放系統命令的目錄,普通用戶和超級用戶都可以執行。不過放在/bin下的命令在單用戶模式下也可以執行
/sbin/保存和系統環境設置相關的命令,只有超級用戶可以使用這些命令進行系統環境的設置,但有些命令可以允許普通用戶查看
/usr/bin/存放系統命令的目錄,普通用戶和超級用戶都可以執行,但這些命令和系統啓動無關,在單用戶模式下不能執行
/usr/sbin/存放根目錄系統不必要的系統管理命令,例如多數服務器程序,只有超級用戶可以使用
/boot/系統啓動目錄,保存系統啓動相關的文件,如內核文件和啓動引導程序(grub)文件等
/dev/設備文件保存位置,用來保存所有硬件設備文件
/etc/配置文件保存位置。系統內所有采用默認安裝方式(rmp安裝)的服務的配置文件全部都保存在這個目錄中,如用戶賬戶和密碼,服務的啓動腳本,常用服務的配置文件等。
/home/普通用戶的家目錄,建立每個用戶時,每個用戶有一個默認的登錄位置,這個位置就是這個用戶的家目錄,所有普通用戶的家庭目錄就是在/home下建立一個和用戶名相同的目錄,如用戶user1的家目錄就是/home/user1
/lib/系統調用的函數庫保存位置
/lost+fount/當系統意外崩潰或者關機,而產生一些文件碎片放在這裏,當系統啓動過程中fsck工具會檢查這裏,並修復已經損壞的文件系統,這個目錄只在每個分區中出現,例如/lost+found就是根分區的備份恢復目錄,/boot/lost_found就是/boot分區的備份恢復目錄
/media/掛載目錄。系統建議用來掛載媒體設備的,例如軟盤和光盤
/mnt/掛載目錄,這個目錄系統建議掛載額外的設備,如U盤,移動硬盤和其他操作系統的分區
/misc/掛載目錄,系統建議用來掛載NFS服務的共享目錄
/opt/第三方安裝的軟件保存位置,這個目錄就是安置和安裝其他軟件的位置,手工安裝的源碼包軟件都可以安裝到這個目錄當中,但是/usr/local/目錄也可以用來安裝軟件
/proc/虛擬文件系統,該目錄中的數據並不保存到硬盤中,而是保存到內存當中,主要保存系統的內核、進程、外部設備狀態和網絡狀態燈。如/proc/cpuinfo保存的是cpu信息,/proc/devices是保存設備驅動的列表,/proc/filesystems是保存文件系統列表的,/proc/net/是保存網絡協議信息的
/sys/虛擬文件系統,和/proc目錄類似,都是保存在內存當中,主要保存內核相關信息
/root/超級用戶的家目錄,普通用戶家目錄在/home下,超級用戶家目錄直接在/下
/srv/服務數據目錄,一些系統啓動服務之後,可以再這個目錄中保存所需要的數據
/tmp/臨時目錄,系統存放臨時文件的目錄,該目錄下所有用戶都可以訪問和寫入,此目錄不能保存重要的數據,最好每次開機都把該目錄清空
/usr/系統軟件資源目錄,“Unix Software Resource”,系統中安裝的軟件大多數保存在這裏
/var/動態數據保存位置,主要保存緩存、日誌以及軟件運行所產生的文件
服務器注意事項
遠程服務器不允許關機,只能重啓
重啓時應該關閉服務
不要在服務器訪問高峯運行高負載命令
遠程配置防火牆時不要把自己踢出服務器
指定合理的密碼規範並定期更新
合理分配權限
定期備份重要數據和日誌
命令格式
命令 [-選項] [參數]
如: ls -al tec
Ctrl + l 清屏或者clear命令
目錄處理命令
命令名稱:ls
命令原意:list
命令所在路徑:/bin/ls
執行權限:所有用戶
功能描述:顯示目錄文件
語法:ls [-ald] [文件或目錄]
-a 顯示所有文件,包括隱藏文件
-l 詳細信息顯示
-d 查看目錄屬性
-rw-r--r--
- 文件類型(-二進制文件d目錄l軟鏈接文件)
命令名稱:mkdir
命令原意:make directories
命令所在路徑:/bin/mkdir
執行權限:所有用戶
語法:mkdir -p [目錄名]
功能描述:創建新目錄
-p 遞歸創建
命令名稱:cd
命令原意:change directory
命令所在路徑:shell內置命令
執行權限:所有用戶
語法:cd [目錄]
範例:cd /tmp/Japan/boduo 切換到指定目錄
cd .. 返回到上一級目錄
命令名稱:pwd
命令原意:print working directory
命令所在路徑:/bin/pwd
執行權限:所有用戶
語法:pwd
功能:顯示當前目錄
命令名稱:rmdir
命令原意:remove empty directories
命令所在路徑:/bin/rmdir
執行權限:所有用戶
語法:rmdir [目錄名]
功能:刪除空目錄
命令名稱:cp
命令原意:copy
命令所在路徑:/bin/cp
執行權限:所有用戶
語法:cp -rp [原文件或目錄] [目標目錄]
-r 複製目錄
-p 保留文件屬性
範例:cp -r /tmp/Japan/cangjing /root將目錄複製到/root目錄下
cp -rp/tmp/Japan/boduo /tmp/Japan/longze /root
將cangjing和longze複製到/root目錄下,保持目錄屬性
命令名稱:mv
命令原意:move
命令所在路徑:/bin/mv
執行權限:所有用戶
語法:mv [原文件或目錄] [目標目錄]
功能描述:剪切文件、改名
命令名稱:rm
命令原意:remove
命令所在路徑:/bin/rm
執行權限:所有用戶
語法:rm -rf [文件或目錄]
-r 刪除目錄
-f 強制執行
功能描述:刪除文件
命令名稱:touch
命令所在路徑:/bin/touch
執行權限:所有用戶
語法:touch [文件名]
功能描述:創建空文件
範例:touch JapanloveStory.list
命令名稱:cat
命令所在路徑:/bin/cat
執行權限:所有用戶
語法:cat[文件名]
功能描述:顯示文件內容
-n 顯示行號
命令名稱:tac
命令所在路徑:/bin/tac
執行權限:所有用戶
語法:tac [文件名]
命令名稱:more
命令所在路徑:/bin/more
命令權限:所有用戶
語法:more [文件名]
(空格)或f 翻頁
(enter) 換行
Q或q 退出
功能描述:分頁顯示文件內容
命令名稱:less
命令所在路徑:/usr/bin/less
執行權限:所有用戶
語法:less [文件名]
功能描述:分頁顯示內容(可上下翻頁)
在用less瀏覽文件內容時,按住/加上關鍵字,就可以搜索,然後按住n(next)就可以向下搜索
命令名稱:head
命令所在路徑:/usr/bin/less
執行權限:所有用戶
語法:head [文件名]
功能描述:顯示文件前幾行
-n 指定行數
範例:head -n 20 /etc/services
命令名稱:tail
命令所在路徑:/usr/bin/tail
執行權限:所有用戶
語法:tail [文件名]
功能描述:顯示文件後幾行
-n 指定行數
-f 動態顯示文件末尾內容
tail -f/var/log/messages
給網卡綁定多個ip地址:inconfig ens330:192.168.10.226
命令名稱:ln
命令原意:link
命令所在路徑:/bin/ln
執行權限:所有用戶
語法:ln -s [原文件] [目標文件]
-s 創建軟鏈接
功能描述:生成鏈接文件
通過inode辨別硬軟鏈接
lrwxrwxrwx:軟鏈接文件:類似windows的快捷方式 l:指軟鏈接 可以跨分 區鏈接,可以針對目錄設置 ln -s/tmp /tmp.soft
-wr-r--r--:硬鏈接文件的inode是相同的,所以可以同步更新。但是不能誇分區鏈 接,而且不能針對目錄使用
軟鏈接與硬鏈接:軟鏈接只是創建一個指向原文件的符號,硬鏈接類似於拷貝,但是可以同步更新。
命令名稱:chmod
命令原意:change the permissions mode of a file
命令所在路徑:/bin/chmod
執行權限:所有用戶
語法:chmod [{ugoa}{+-=}{rwx}] [文件或目錄]
[mode=421] [文件或目錄]
-R 遞歸修改 修改一個目錄下所有文件和目錄的權限
功能描述:改變文件或目錄權限
命令名稱:useradd passwd 添加用戶和密碼
命令名稱:groupadd 添加組
命令名稱:chown
命令原意:changefile ownership
命令所在路徑:/bin/chown
執行權限:所有用戶
語法:chown [用戶] [文件或目錄]
功能描述:改變文件或目錄的所有者
範例:chown userfileordir 改變文件fileordir的所有者爲user
命令名稱:chgrp
命令原意:changefile group ownership
命令所在路徑:/bin/chgrp
執行權限:所有用戶
語法:chown [用戶組] [文件或目錄]
功能描述:改變文件或目錄的所有者
範例:chgrpgroup fileordir 改變文件fileordir的所有組爲group
命令名稱:umask
命令原意:the userfile-creation mask
命令所在路徑:Shell內置命令
執行權限:所有用戶
語法:umask [S]
-S 以rwx形式顯示新建文件缺省權限
功能描述:顯示、設置文件的缺省權限
範例:umask -S
命令名稱:find
命令原意:find
命令所在路徑:/bin/find
執行權限:所有用戶
語法:find [搜索範圍] [匹配條件]
功能描述:文件搜索
範例:find /etc -name [*?]init[*?] 在目錄/etc中查找文件init
-iname 不區分大小寫
*:多個字符,?單個字符
Find / -size +204800 在根目錄/下查找大於100M的文件
Find /home -user lyg 在家目錄下查找所有者爲lyg的文件
Find /home -group lyg 根據所屬組查找
Find /etc -cmin -5 在/etc下查找5分鐘內被修改過屬性的文件和目錄
-amin訪問時間access
-cmin 文件屬性change
-mmin 文件內容 modify
Find /etc -size +163840 -a[-o] -size -204800
-a:表示同時滿足條件 and
-o:表示滿足任意一個條件 or
Find /etc-name inittab -exec ls -l {} \ 在/etc目錄下查找inittab文件並顯示其詳細信息 -exec/-ok(多了詢問確認的環節) 命令{}\;對搜索結果進行操作
Find /etc -typef[文件,d目錄,l軟鏈接文件]
-inum根據i節點進行查找
命令名稱:locate
命令原意:locate
命令所在路徑:/usr/bin/locate
執行權限:所有用戶
語法:locate [文件名]
-i 不區分大小寫 locate -i filename
功能描述:在文件資料庫中查找文件,文件資料庫並不是實時更新,會導致剛建立的文件無法被locate到,用updatedb更新資料庫就可以使用locate
如果創建一個文件touch/tmp/yangmi因爲/tmp目錄並不在locate維護的資料庫中,所以找不到
範例:locateinittab
命令名稱:which
命令原意:which
命令所在路徑:/usr/bin/which
執行權限:所有用戶
語法:which命令
功能描述:搜索命令所在目錄及別名信息
範例:which Is
命令名稱:whereis
命令所在路徑:/usr/bin/whereis
執行權限:所有用戶
語法:whereis
功能描述:搜索命令所在目錄及幫助文檔路徑
範例:whereis ls
命令名稱:grep
命令所在路徑:/bin/grep
執行權限:所有用戶
語法:grep -iv [指定字串] [文件]
功能描述:在文件中搜尋字串匹配的行並輸出
-i 不區分大小寫
-v 排除指定字符串
把行首的#去掉,要加上表示行首的^#,比如:grep -v ^# /etc/inittab
範例:grep myslq/root/install.log
命令名稱:man
命令原意:manual
命令所在路徑:/usr/bin/man
執行權限:所有用戶
語法:man [命令或配置文件]
功能描述:獲得幫助信息
範例:manls 查看ls命令的幫助信息 1:表示命令的幫助 5:配置文件的 幫助
man services 查看配置文件services的幫助文件
進入文檔後,用/+關鍵字就可以快速瀏覽到關鍵字那裏
命令名稱:whatis
功能描述:返回命令的名稱和用途
命令名稱:apropos services
功能描述:查看配置文件的簡短的相關信息
命令名稱:命令+ --help
功能描述:返回命令的參數信息
命令名稱:help
命令所在路徑:Shell內置命令
執行權限:所有用戶
語法:help命令
功能描述:獲得Shell內置命令的幫助信息
範例:helpumask 查看umask命令的幫助信息
命令名稱:useradd
命令所在路徑:/usr/sbin/useradd
執行權限:root
語法:useradd用戶名
功能描述:添加新用戶
範例:useraddlyg
命令名稱:passwd
命令所在路徑:/usr/bin/passwd
執行權限:所有用戶
語法:passwd用戶名
功能描述:設置用戶密碼
範例:passwd lyg
命令名稱:who
命令所在路徑:/usr/bin/who
執行權限:所有用戶
語法:who
功能描述:查看登錄用戶信息
user tty1 2017-08-03 16:46
user pts/0 2017-08-03 18:04 (192.168.10.25)
user pts/1 2017-08-03 20:28 (192.168.10.25)
user pts/2 2017-08-03 20:51 (192.168.10.25)
user pts/3 2017-08-03 21:24 (192.168.10.25)
Tty:表示本地終端登錄 pts表示遠程終端登錄
命令名稱:w
命令所在路徑:/usr/bin/w
執行權限:所有用戶
語法:w
功能描述:查看登錄用戶詳細信息
範例:w
命令名稱:gzip 不能壓縮目錄,不能保留原文件
命令原意:GNU zip
命令所在路徑:/bin/gzip
執行權限:所有用戶
語法:gzip [文件]
功能描述:壓縮文件
壓縮後文件格式:.gz
rm -rf * 刪除目錄下所有文件
命令名稱:gunzip
命令原意:GNU unzip
命令所在路徑:/bin/gunzip
執行權限:所有用戶
語法:gunzip [壓縮文件]
功能描述:解壓縮.gz的壓縮文件
範例:gunzip boduo.gz
命令名稱:tar
命令所在路徑:/bin/tar
執行權限:所有用戶
語法:tar 選項 [-zcf] [壓縮後文件名] [目錄]
-c 打包
-v 顯示詳細信息
-f 指定文件名
-z 打包同時壓縮
功能描述:打包目錄
壓縮後文件格式:.tar.gz
範例:tar -cvf Japan.tar Japan 將Japan目錄打包成Japan.tar
tar -zcfJapan.tar.gz Japan 將Japan打包並亞壓縮爲tar.gz文件
tar命令解壓縮語法:
-x:解包
-v:顯示詳細信息
-f:指定解壓文件
-z:解壓縮
範例:tar -zxvf Japan.tar.gz
命令名稱:zip 解壓縮:unzip
命令所在路徑:/usr/bin/zip
執行權限:所有用戶
語法:zip 選項 [-r] [壓縮後文件名] [文件或目錄] unzip [壓縮文件]
-r 壓縮目錄
功能描述:壓縮文件或目錄
壓縮後文件格式:.zip
命令名稱:bzip2 比較大的文件壓縮上使用
命令所在路徑:/usr/bin/bzip2
執行權限:所有用戶
語法:bzip2 選項 [-k] [文件]
-k 產生壓縮文件後保留原文件
功能描述:壓縮文件
壓縮後文件格式:.bz2
範例:bzip2 -k boduo
tar -cjfJapan.tar.bz2 Japan
命令名稱:bunzip2
命令所在路徑:/usr/bin/bunzip2
執行權限:所有用戶
語法:bunzip2 選項 [-k] [壓縮文件]
-k 解壓縮後保留原文件
範例:bunzip2 -k boduo.bz2
tar -xjf Japan.tar.bz2
網絡命令
命令名稱:write
指令所在路徑:/usr/bin/write
執行權限:所有用戶
語法:write <用戶名>
功能描述:給用戶發送消息,以ctrl + D保存結束
範例:write linzhiling
命令名稱:wall
英文原意:write all
指令所在路徑:/usr/bin/wall
執行權限:所有用戶
語法:wall [message]
功能描述:發廣播信息
範例:wall helloworldlinux
命令名稱:ping
命令所在路徑:/bin/ping
執行權限:所有用戶
語法:ping 選項 IP地址
-c 指定發送次數
功能描述:測試網絡連通性
範例:ping 192.168.10.2
命令名稱:ifconfig
英文原意:interface configure
命令所在路徑:/sbin/ifconfig
執行權限:root
語法:ifconfig 網卡名稱 IP地址
功能描述:查看和設置網卡信息
範例:ifconfig ess33 192.168.10.2
命令名稱:mail 通過mail查看
英文原意:mail
命令所在路徑:/bin/mail
執行權限:所有用戶
語法:mail [用戶名]
功能描述:查看發送電子郵件
範例:mail root
查看郵件:help後按郵件序號:如1 查看開頭:h 刪除郵件:d + 郵件序號(如1) 退出:q
命令名稱:last
命令所在路徑:/usr/bin/last
執行權限:所有用戶
語法:last
功能描述:列出目前與過去登入系統的用戶信息
範例:last
命令名稱:lastlog
命令所在路徑:/usr/bin/lastlog
執行權限:所有用戶
語法:lastlog
功能描述:檢查某特定用戶上次登錄的時間
範例:lastlog
Lastlog -u 502(用戶id)
命令名稱:traceroute
命令所在路徑:/bin/traceroute
執行權限:所有用戶
語法:traceroute
功能描述:顯示數據包到主機之間的路徑
範例:traceroute www.baidu.com
命令名稱:netstat
命令所在路徑:/bin/netstat
執行權限:所有用戶
語法:netstat [選項]
功能描述:顯示網絡相關信息
選項: -t TCP協議
-u UDP協議
-l 監聽
-r 路由
-n 顯示IP地址和端口號
範例:netstat -tlun 查看本機監聽的端口
-an 查看本機所有的網絡連接
-rn 查看本機路由表
命令名稱:setup
命令所在路徑:/usr/bin/setup
執行權限:root
語法:setup
功能描述:配置網絡
範例:setup
重啓網絡:service network restart
掛載命令
命令名稱:mount umount:卸載
命令位置:/bin/mount
執行權限:所有用戶
命令語法:mount [-t 文件系統] 設備文件名 掛載點
範例:mount -t iso9660 /dev/sr0 /mnt/cdrom
關機重啓命令
Shutdown [選項] 時間 (now 或者指定時間 20:30)
-c 取消前一個關機命令
-h 關機
-r 重啓
其他關機命令:halt poweroff init 0
其他重啓命令:reboot init 6
系統運行級別:
0 關機
1 單用戶:一種安全模式,啓動最小的核心程序,修復
2 不完全多用戶,不含NFS服務:linux和unix實現文件共享的服務,但不是太安全
3 完全多用戶
4 未分配
5 圖形界面
6 重啓
通過 cat /etc/inittab 查看幫助
修改系統默認運行級別
id:3:initdefault:
runlevel
查詢系統運行級別
logout
用戶登出
文本編輯器vim
Vim是一個功能強大的全屏幕文本編輯器,是linux/UNIX上最常用的文本編輯器,她的作用是建立、編輯、顯示文本文件
Vim沒有菜單,只有命令
Vim工作模式:
進入:vi filename
退出::wq
插入模式:輸入iao esc鍵
編輯模式:輸入“:”進入編輯模式命令以回車結束運行
設置行號:set num
插入命令:
命令 |
作用 |
A |
在光標所在字符後插入 |
a |
在光標所在尾行插入 |
I |
在光標所在字符前插入 |
i |
在光標所在行行首插入 |
O |
在光標下插入新行 |
o |
在光標上插入新行 |
命令 |
作用 |
:set nu |
設置行號 |
:set nonu |
取消行號 |
gg G |
到第一行 到最後一行 |
n G |
到第n行 |
:n |
到第n行 |
$ |
移至行尾 |
0 |
移至行首 |
命令 |
作用 |
X |
刪除光標所在處字符 |
Nx |
刪除光標所在處後n個字符 |
Dd |
刪除光標所在行,ndd刪除n行 |
dG |
刪除光標所在行到文件末尾內容 |
D |
刪除光標所在處到行尾的內容 |
:n1,n2d |
刪除指定範圍的行 |
命令 |
作用 |
Yy |
複製當前行 |
n yy |
複製當前行以下n行 |
Dd |
剪切當前行 |
n dd |
剪切當前行一下n行 |
p、P |
粘貼在當前光標所在行下或行上 |
命令 |
作用 |
R |
取代光標所在處字符 |
R |
從光標所在處開始替換字符,按esc結束 |
U |
取消上一步操作 |
搜索和搜索替換
命令 |
作用 |
/string |
搜索指定字符串 搜索時忽略大小寫:set ic 或set noic |
n |
搜索指定字符串的下一個出現位置 |
:%s/old/new/g |
全文替換指定字符串 |
:n1,n2s/old/new/g |
在一定範圍內替換指定字符串 g:表示不詢問 c:表示詢問 |
保存和退出命令
命令 |
作用 |
:w |
保存修改 |
:w new_filename |
另存爲指定文件 |
:wq |
保存修改並退出 |
ZZ |
快捷鍵,保存修改並退出 |
:q! |
不保存修改退出 |
:wq! |
保存修改並退出(文件所有者及root可使用) |
導入文件: :r /etc/issue 導入文件到當前文件中
查看命令路徑: :!which ls 查看ls命令所在路徑
導入命令執行結果::r !date 將命令執行的結果導入到文件中
定義快捷鍵:map 快捷鍵 觸發命令
範例: :map ^P(ctrl+v+p) I# <ESC>
:map ^B 0x
連續行註釋: :n1,n2s/^/#/g ^ 代表行首::n1,n2s/#//g會把帶有#的行刪掉
:n1,n2s/^#//g 將以#開頭的行替換爲空字符
:n1,n2s/^/ \ / \//g \:代表轉義符
替換:ab mymail [email protected]
生成配置文件保存命令 vi /root/vimrc 這樣纔可以在重啓後保存命令
配置文件保存在 /root/.vimrc 或者/home/username/.vimrc
軟件包分類:
源碼包:(c語言源代碼軟件包)
腳本安裝包(不需要手工安裝)
二進制包:(RPM包、系統默認包)(廠商進行再開發的,加快安裝速度,簡化安裝操作,但看不到源代碼了)
源碼包的優點:
開源,可以修改源代碼
可以自由選擇所需的功能
軟件是編譯安裝,所以更加適合自己的系統,更加穩定,效率也高
卸載方便
缺點:
安裝步驟較多,尤其安裝較大的軟件集合時(如LAMP環境搭建),容易出現拼寫錯誤
編譯過程時間較長,安裝比二級制包安裝時間長
因爲是編譯安裝,安裝過程中一旦報錯新手很難解決
RPM包的優點:
包管理系統簡單,只通過幾個命令就可以實現包的安裝、升級、查詢和卸載
安裝速度比源碼包安裝快的多
缺點:
經過編譯,不再可以看到源代碼
功能選擇不如源碼包靈活
依賴性
RPM包命名規則
httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd 軟件包名
2.2.15 軟件版本
15 軟件發佈次數
el6.centos 適合的Linux平臺
i686 適合的硬件平臺
rmp rmp包的擴展名
RPM包依耐性
樹形依賴:a -> b->c
環形依賴:a->b->c->a
模塊依賴:模塊依賴查詢網站:www.rmpfind.net
光盤掛載: mkdir /mnt/cdrom 創建掛載點
mount /dev/sr0/mnt/cdrom 進行掛載
rpm命令管理
rpm -ivh mysql-connector-odbc-5.1.5r1144-7.e16.i686.rpm
yum在線管理
包全名與包名
包全名:操作的包是沒有安裝的軟件包時,使用包全名,而且要注意路徑
包名:操作的是已經安裝的軟件包時,使用包名。是搜索/var/lib/rpm/中的數據庫
RPM安裝
rpm -ivh 包全名
選項:-i(install) 安裝
-v(verbose)顯示詳細信息
-h(hash) 顯示進度
--nodeps 不檢測依賴性
RPM包升級
rpm -Uvh 包全名
選項: -U update 升級
RPM包卸載
rmp -e 包名
選項: -e(erase) 卸載
--nodeps 不檢查依賴性
rpm -q 包名
功能:查詢是否安裝
選項: -q 查詢(query)
-a 所有(all)
rpm -qi 包名
選項: -i 查詢軟件信息(information)
-p 查詢未安裝包信息(package)包全名
查詢包中文件安裝位置
rpm -ql 包名
選項: -l 列表(list)
-p 查詢未安裝包信息(package)
查詢系統文件屬於哪個RPM包
rpm -qf 包名
選項: -f 查詢系統文件屬於哪個軟件包(file)
查詢軟件包的依賴性
rpm -qR 包名
選項: -R 查詢軟件包的依賴性(requires)
-p 查詢未安裝包信息(package)
rpm -V 已安裝的包名
選項: -V 校驗指定RPM包中的文件(verify)
驗證內容中的8個信息的具體內容:
S 文件大小是否改變
M 文件類型或文件的權限(rwx)是否被改變
5 文件MD5校驗和是否改變(可以看成文件內容是否改變)
D 設備的中,從代碼是否改變
L 文件路徑是否改變
U 文件的屬主(所有者)是否改變
G 文件的屬組是否改變
T 文件的修改時間是否改變
文件類型
c 配置文件(config file)
d 普通文檔(documentation)
g “鬼”文件(goast file),很少見,就是該文件不應該被這個RPM包包含
l 授權文件(license file)
r 描述文件(read me)
RPM包中文件提取
rpm2cpio 包全名 | (\:代表換行)
cpio -idv .文件絕對路徑
-i:copy-in模式,還原
-d:還原時自動新建文檔
-v:顯示還原過程
rpm2cpio:將rpm包轉換爲cpio格式的命令
cpio:一個標準工具,用於創建軟件檔案文件和從檔案文件中提取文件
rpm/mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm|cpio -idv ./bin/ls
提取RPM包中ls命令到當前目錄的/bin/ls下
IP地址配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
把ONBOOT=“no”改爲“yes”
啓動網卡
service network restart重啓網絡服務
網絡yum源
vi /etc/yum.repo.d/CentOS-Base.repo
[base] 容器名稱,一定要放在[]中
name容器說明,一定要放在[]中
mirrorlist鏡像站點,這個可以註釋掉
baseurlyum源服務器的地址,默認是CentOS官方的yum源服務器,是可以使用的,可以改成自己喜歡的yum源地址
enabled此容器是否生效,如果不寫或寫成enable=1都是生效,寫成enable=0就是不生效
gpgcheck如果是1是指RPM的數字證書生效,如果是0則不生效
gpgkey數字證書的公鑰文件保存位置。不用修改
yum常用命令
查詢:yum list 查詢所有可用軟件包列表
yum search 關鍵字
搜索服務器上所有和關鍵字相關的包
安裝 yum-y install 包名
選項: install 安裝
-y 自動回答yes
升級 yum-y update 包名
選項: update 升級
卸載 yum-y remove 包名
選項: remove 卸載
安裝:最小化安裝
卸載:儘量不卸載,不用yum卸載和升級軟件包
yum軟件組管理命令
yumgrouplist 列出所有可用的軟件組列表
yum groupinstall 軟件組名
安裝指定軟件組,組名可以由grouplist查詢出來
yum groupremove 軟件組名
卸載指定軟件組
光盤yum源搭建步驟
1.掛載光盤 mount /dev/sr0 /mnt/cdrom/
2.讓網絡yum源文件失效
cd/etc/yum.repos.d/
mv /CentOS-Base.repo CentOS-Base.repo.bak
mvCentOS-Debuginfo.repo CentOS-debuginfo.repo.bak
mvCentOS-Vault.repo CentOS-Vault.repo.bak
3.修改光盤yum源文件
vimCentOS-Media.repo
[c7-media]
name=CentOS-$releasever-Media
baseurl=file:///mnt/cdrom
#地址爲自己的光盤掛在地址
#file:///media/cdrom/
#file:///media/cdrecorder/
#註釋掉這兩個不存在的地址
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-pgp/RPM-GPG-KEY-CentOS-7
RPM包安裝位置
是安裝在默認位置中
/etc/ |
配置文件安裝目錄 |
/usr/bin/ |
可執行的命令安裝目錄 |
/usr/lib/ |
程序所使用的函數庫保存位置 |
/usr/share/doc/ |
基本的軟件使用手冊保存位置 |
/usr/share/man/ |
幫助文件保存位置 |
源碼包安裝位置
安裝在指定位置當中,一般是
/usr/local/軟件名/
RPM包安裝的服務可以使用系統服務管理命令(service)來管理,例如RPM包安裝的apache的啓動方法是:
/etc/rc.d/init.d/httpdstart
service httpdstart service只能在RPM包默認安裝位置中去尋找包,因此service不能啓動源碼包
源碼包啓動服務方法:/usr/local/apache2/bin/apachectl start 只能通過絕對路徑來管理
Httpd源碼包:http://mirror.bit.edu.cn/apache/httpd/
安裝注意事項:源代碼保存位置:/usr/local/src/
軟件安裝位置:/usr/local/
如何確定安裝過程報錯:安裝過程停止並出現error、warning、no 的提示
源碼包安裝過程:下載源碼包,
解壓縮下載的源碼包(tar -zxvf httpd-2.2.9.tar.gz)(查看文 件大小:du -sh httpd-2.2.9)
進入解壓縮目錄 cd httpd-2.2.9
./configure 軟件配置與檢查
定義需要的功能選項
./configure--prefix=/usr/local/apache2 定義安裝路徑和名稱
檢測系統環境是否符合安裝要求
把定義好的功能選項和檢測系統環境的信息都寫入Makefile文件,用於後續 的編輯
make 編譯
make clean(如果報錯,清空臨時文件)
make install 安裝編譯
service httpd stop 停止rpm包的apache服務
卸載:rm -rf /usr/local/apache2/
腳本安裝包(常見的是驅動)
腳本安裝包不是獨立的軟件包類型,常見安裝的是源碼包
是認爲把安裝過程寫成了自動安裝的腳本,只要執行腳本,定義簡單的參數,就可以完成安裝
非常類似windows下軟件的安裝方式
Webmin
是一個基於web的linux系統管理界面,可以通過圖形化的方式設置用戶賬號、apache、DNS、文件共享等服務
安裝過程:
下載軟件:http://sourceforge.net/projects/webadmin/files/webmin/
解壓縮,並進入壓縮目錄
執行安裝腳本 ./setup.sh
用戶和用戶組管理
用戶信息文件/etc/passwd
Linux中主要是通過用戶配置文件來查看和修改用戶信息
/etc/passwd
第一字段:用戶名稱
第二字段:密碼標誌
第三字段:UID(用戶ID)
0: 超級用戶
1-499: 系統用戶(僞用戶)
500-65535:普通用戶
第四字段:GID(用戶初始組ID)
初始組:指用戶一登錄就立刻擁有這個初始組的相關權限,每個用戶的 初始組只能有一個,一般就是和這個用戶的用戶名相同的組名作爲 這個用戶的初始組
附加組:指用戶可以加入多個其他的用戶,並擁有這些組的權限,附加 組可以有多個
第五字段:用戶說明
第六字段:家目錄
普通用戶:/home/用戶名/
超級用戶:/root/
第七字段:登錄之後的Shell
Shell是什麼:linux的命令解釋器
在/etc/passwd當中,除了標準shell是/bin/bash之外,還可以寫如/sbin/nologin
影子文件:/etc/shadow,保存得失passwd的密碼串
是/etc/passwd的影子文件
第一字段:用戶名
第二字段:加密密碼
加密算法升級爲SHA512散列加密算法
如果密碼位是“!!”或者“*”代表沒有密碼,不能登錄
第三字段:密碼最後一次修改的日期
使用1970年1月1日作爲標準時間,每過一天時間戳加1
第四字段:兩次密碼修改的時間間隔(和第三字段相比)
第五字段:密碼的有效期(和第三字段相比)
第六字段:密碼修改到期前的警告天數(和第五字段相比)
第七字段:密碼過期之後的寬限天數(和第五字段相比)
0:代表密碼過期後立即失效
-1:代表密碼永遠不會失效
第八字段:賬號失效時間
要用時間戳表示
第九字段:保留
時間戳換算
把時間戳換算成日期 date -d “1970-01-01 16066 days”
把日期換算成時間戳 echo $(($(date --date=”2014/.1/.6” +%s)/86400+1))
組信息文件/etc/group
第一字段:組名
第二字段:組密碼標誌
第三字段:GID
第四字段:組中附加用戶
組密碼文件/etc/gshadow
第一字段:組名
第二字段:組密碼
第三字段:組管理員用戶名
第四字段:組中附加用戶
用戶的家目錄
普通用戶:/home/用戶名/,所有者和所屬組都是此用戶,權限是700
超級用戶:/root/,所有者和所屬組都是root用戶,權限是550
用戶的郵箱
/var/spool/mail/用戶名
用戶模板目錄
/etc/skel/
useradd命令格式
useradd [選項] 用戶名
選項:
-u UID:手工指定用戶的UID
-d 家目錄:手工指定用戶的家目錄
-c 用戶說明:手工指定用戶的說明
-g 組名:手工指定用戶的初始組
-G 組名:指定用戶的附加組
-s shell:手工指定用戶的登錄shell,默認是/bin/bash
添加默認用戶
grep lyg /etc/passwd
lyg/etc/shadow(group或者gshadow)
指定選項添加用戶
useradd -u 550 -G root,bin -d /home/lamp \
-c “test user” -s/bin/bash lyg
用戶默認值文件
/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
PASS_MAX_DAYS 99999 #密碼有效期(5)
PASS_MIN_DAYS 0 #密碼修改間隔(4)
PASS_MIN_LEN 5 #密碼最小位(PAM)
PASS_WARN_AGE 7 #密碼到期警告
UID_MIN 500 #最小和最大UID範圍
GID_MAX 60000
ENCRYPT_METHOD SHA512 #加密模式
passwd命令格式
passwd [選項] 用戶名
選項:
-S 查詢用戶密碼的密碼狀態,僅root用戶可用
-l 暫時鎖定用戶,僅root用戶可用
-u 解鎖用戶,僅root用戶可用
--stdin 可以通過管道符輸出的數據作爲用戶的密碼
使用字符作爲用戶的密碼
echo “123” | passwd --stdin lamp
修改用戶信息usermod
usermod [選項] 用戶名
選項:
-u UID: 修改用戶的UID
-c 用戶說明:修改用戶的說明信息
-G 修改用戶的附加組
-L 臨時鎖定用戶(lock)
-U 解鎖用戶的鎖定(Unlock)
修改用戶密碼狀態chage
chage [選項] 用戶名
選項:
-l:列出用戶的詳細信息狀態
-d:修改密碼最後一次更改日期(shadow3字段)
Chage -d 0 lyg 把密碼修改日期歸0,這樣用戶一登錄就要修改密碼
-m:兩次密碼修改間隔(4字段)
-M:密碼有效期(5字段)
-W:密碼過期前警告天數(6字段)
-I(大寫的i):密碼過後寬限天數(7字段)
-E:賬號失效時間(8字段)
刪除用戶userdel
userdel [-r] 用戶名
選項:-r 刪除用戶的同時刪除用戶家目錄
切換用戶身份su
su [選項] 用戶名
選項:
- :選項只使用“-”代表連帶用戶環境變量一起切換
-c命令:僅執行一次命令,而不切換用戶身份
su -root -c “useradduser3”:不切換成root,但是執行useradd命令 添加user用戶
查看分區ACL權限是否開啓
dumpe2fs -h /dev/sda3 :dumpe2fs是查詢指定分區詳細文件系統信息的命令
選項:-h 僅顯示超級塊中信息,而不顯示磁盤塊組的詳細信息
臨時開啓分區ACL權限
mount -o remount,acl / #重新掛載根分區,並掛載加入acl權限
永久開啓分區ACL權限
vi /etc/fstab
在default後加上(,acl) 加入acl
mount -o remount /
重新掛載文件系統或重啓系統,是修改生效
查看ACL命令
getfacle 文件名 #查看acl權限
設定ACL權限
setfacle 選項 文件名
選項: -m 設定ACL權限
-x 刪除指定的ACL權限
-b 刪除所有的ACL權限
-d 設定默認ACL權限
-k 刪除默認ACL權限
-R 遞歸設定ACL權限
setfacl -mu:st:rx /project/ 給用戶st賦予rx權限,使用“u:用戶名:權限”格式
查看ACL命令
getfacl 文件名 查看acl權限
將用戶加到組中
gpasswd -ausername groupname
最大有效權限mask
mask用來指定最大有效權限,如果給用戶賦予了ACL權限,需要和mask的權限“相與(兩邊都爲真,則爲真,否則爲假)”才能得到用戶的真正權限
修改最大有效權限:setfacl -m m:rx 文件名
刪除ACL權限
setfacl -x u:用戶名 文件名 刪除指定用戶的ACL權限
setfacl -x g:組名文件名 刪除指定用戶組的ACL權限
setfacl -b 文件名 刪除文件的所有的ACL權限
遞歸ACL權限
遞歸是父目錄在設定ACL權限時,所有的子文件和子目錄都會擁有相同的ACL權限
setfacl -m u:用戶名:權限 -R 文件名
默認ACL權限
默認ACL權限的作用是如果給父目錄設定了ACL權限,那麼父目錄中所有新建的子文件都會繼承父目錄的ACL權限
setfacl -m d:u:用戶名:權限文件名
文件特殊權限
SetUID功能
只有可以執行的二進制程序才能設定SUID權限
命令執行者要對該程序擁有x(執行)權限
命令執行者在執行該程序時獲得該程序文件屬主身份
SetUID權限只在該程序執行過程中有效
passwd命令擁有SetUID權限,所以普通用戶可以修改自己的密碼
ll /usr/bin/passwd
cat命令沒有SetUID權限,所以普通用戶不能查看/etc/shadow文件內容
ll /bin/cat
設定SetUID的方法
4代表SUID
chmod 4755 文件名
chmod u+s 文件名
危險的SetUID
關鍵目錄應該嚴格控制寫權限,比如”/”、”/usr”等
用戶的密碼設置要嚴格遵守密碼三原則
對系統中默認應該具有SetUID權限的文件作一列表,定時檢查有沒有這之外的文件設置了SetUID權限
SetGID針對文件的作用
只有可執行的二進制程序才能設置SGID
命令執行者要對該程序擁有x(執行)權限
命令在執行的時候,組身份升級爲該程序文件的屬組
SetGID權限只在該程序執行過程中有效
/usr/bin/locate是可執行二進制程序,可以賦予SGID,普通用戶可以使用locate命令查詢mlocate.db數據庫
SetGID針對目錄的作用
普通用戶必須對此目錄擁有r和x權限,才能進入此目錄
普通用戶在此目錄中的有效組會變成此目錄的屬組
若普通用戶對此目錄擁有w權限時,新建的文件的默認屬組是這個目錄的屬組
設定SetGID
2代表SGID chmod 2755文件名 chmod g+s 文件名
Sticky BIT(SBIT)黏着位作用
黏着位目前只對目錄有效
普通用戶對該目錄擁有w和x權限,即普通用戶可以在此目錄擁有寫入權限
如果沒有黏着位,因爲普通用戶擁有w權限,所以可以刪除此目錄下所有文件,包括其他用戶建立的文件。一旦賦予黏着位權限,除了root可以刪除所有的文件,普通用戶就算擁有了w權限,也只能刪除自己建立的文件
設置黏着位 chmod 1755 目錄名 chmod o+t 目錄名
取消黏着位 chmod 777 目錄名 chmod o-t 目錄名
文件系統屬性chattr權限
chattr [+-=] [選項] 文件或目錄名
+ 增加權限
- 刪除權限
= 等於某權限
選項:
i:如果對文件設置i屬性,那麼不允許對文件進行刪除、改名,也不能添加和修改數據,如果對目錄設置i屬性,那麼只能修改目錄下文件的數據,但不允許建立和刪除文件。
a:如果對文件設置a屬性,那麼只能在文件中增加數據,但是不能刪除也不能刪除和修改數據;如果對目錄設置a屬性,只允許在目錄中建立和修改文件,但是不允許刪除
查看文件系統屬性
lsattr 選項 文件名
選項:-a 顯示所有文件和目錄
-d 若目標是目錄,僅列出目錄本身的屬性,而不是子文件
echo 內容 >> 目標文件 將內容寫入目標文件中
系統命令權限sudo
sudo權限
roo把原來只能超級用戶執行的命令賦予普通用戶執行
sudo的操作對象是系統命令
sudo的使用
visudo:實際修改的是/etc/sudoers文件
root All=(ALL) ALL
#用戶名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
授權lyg用戶可以重啓服務器
visudo
lyg ALL=/sbin/shutdown -r now
su - lyg
sudo -l 查看可用的sudo命令
sudo/sbin/shutdown -r now
%wheel ALL=(ALL) ALL
#組名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
文件系統查看命令df
df [選項] [掛載點]
選項:-a 顯示所有的文件系統信息,包括特殊文件系統如/proc、/sysfs
-h 使用習慣單位顯示容量,如KB、MB或GB等
-T 顯示文件系統類型
-m 以MB爲單位顯示容量
-K 以KB爲單位顯示容量,默認就是KB爲單位
統計目錄或文件大小
du [選項] [目錄或文件名]
選項:-a 顯示每個子文件的磁盤佔有量,默認只統計子目錄的磁盤佔 有量
-h 使用習慣單位顯示磁盤佔有量,如KB、MB、GB等
-s 統計總佔有量,而不列出子目錄和子文件的佔有量
df與du命令的區別
df命令是從文件系統考慮的,不光要考慮文件佔用的空間,還要統計被命令或者程序佔用的空間(最常見的就是文件已經刪除,但是程序並沒有釋放空間)
du命令是面向文件的,只會計算文件或目錄佔用的空間
文件系統修復命令fsck
fsck [選項] 分區設備文件名
選項:
-a 不用顯示用戶提示,自動修復文件系統
-y 自動修復。和-a作用一致,不過有些文件系統只支持-y
顯示磁盤狀態命令dumpe2fs
dumpe2fs 分區設備文件名
查詢與自動掛載
mount [-l] 查詢系統中已經掛載的設備,-l會顯示卷標名稱
mount -a 依據配置文件/etc/fstab的內容,自動掛載
掛載命令格式
mount [-t 文件系統] [-L 卷標名] [-o特殊選項] 設備文件名 掛載點
選項:-t 文件系統:加入文件系統類型類指定掛載的類型,可以ext3、ext4、 iso9660等文件系統
-L 卷標名:掛載指定卷標的分區,而不是安裝設備文件名掛載
-o 特殊選項:可以指定掛載的額外選項
remount:重新掛載已經掛載的文件系統,一般用於指定修改特殊權 限
exec/noexec:執行,設定是否允許在文件系統中執行可執行文件, 默認是exec允許
mount -oremount,noexec /home #重新掛載/boot分區,並使用noexec權限
cd /home
vi hello.sh
chmod 755hello.sh
./hello.sh
mount -oremount,exec /home
掛載光盤
mkdir /mnt/cdrom/ #建立掛載點
mount -t iso9660 /dev/cdrom /nmt/cdrom/ #掛載光盤
mount /dev/sr0 /mnt/cdrom
卸載命令
umount 設備文件名或掛載點
umount /mnt/cdrom
掛載U盤
fdisk -l #查看U盤設備文件名
mount -t vfat /dev/sdb1 /mnt/usb #Linux默認是不支持NTFS文件系統的
使用fdisk命令分區
fdisk /dev/sdb
fdisk交互指令說明 |
|
命令 |
說明 |
A |
設置可引導標記 |
B |
編輯bsd磁盤標籤 |
C |
設置DOS操作系統兼容標記 |
D |
刪除一個分區 |
L |
顯示已知的文件系統類型,82爲Linux swap分區,83爲Linux分區 |
M |
顯示幫助菜單 |
N |
建立分區 |
O |
建立空白DOS分區表 |
P |
顯示分區列表 |
Q |
不保存退出 |
S |
新建空白SUN磁盤標籤 |
T |
改變一個分區的系統ID |
U |
改變顯示記錄單位 |
V |
驗證分區表 |
W |
保存退出 |
X |
附加功能(僅專家) |
重新讀取分區表信息
partprobe
格式化分區
mkfs -t ext4 /dev/sdb1
建立掛載點並掛載 #需要重新掛載
mkdir /disk1
mount /dev/sdb1 /disk1/
分區自動掛載與fstab文件修復
/etc/fstab文件
第一字段:分區設備名或UUID(硬盤通用唯一識別碼)
第二字段:掛載點
第三字段:文件系統名稱
第四字段:掛載參數
第五字段:指定分區是否被dump備份,0代表不備份,1代表每天備份,2 代表不定期備份
第六字段:指定分區是否被fsck檢測,0代表不檢測,其他數字代表檢測的 優先級,那麼當然1的優先級比2高
vi /etc/fstab
/dev/sdb1 /disk1 ext4 defaults 1 2
mount -a #依據配置文件/etc/fstab的內容,自動掛載
/etc/fstab文件修復
mount -o remount,rw /
free命令
#查看內存與swap分區使用狀況
cached(緩存):是指把讀取出來的數據保存在內存中,但在此讀取時,不用讀取硬盤而直接從內存中讀取,加速了數據的讀寫過程
buffer(緩衝):是指在寫入數據時,先把分散的寫入操作保存到內存當中,當發到一定程度再集中寫入硬盤,減少磁盤碎片和硬盤的反覆尋道,加速了數據的寫入過程
新建swap分區
fdisk /dev/sdb 記得把分區ID改爲82
格式化
mkswap /dev/sdb6 #sdb6是掛載的swap分區
加入swap分區
swapon /dev/sdb6 #加入swap分區
swapoff /dev/sdb6 #取消swap分區
swap分區開機自動掛載
vi /etc/fstab
/dev/sdb6 swap swap defaults 0 0
shell是什麼
shell是一個命令行解釋器,它爲用戶提供了一個像Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用shell來啓動、掛起、停止甚至是編寫一些程序
shell還是一個功能強大的編程語言,易編寫,易調試,靈活性較強。shell是解釋執行的腳本語言,在shell中可以直接調用linux系統命令
shell的分類
Bourne shell 從1979起Unix就開始使用
Bourne shell的主文件名爲sh
Bash:Bash與sh兼容,現在使用的Linux就是使用Bash作爲用戶的基本Shell
Linux支持的Shell
/etc/shells
echo輸出命令
echo [選項] [輸出內容]
選項:-e 支持反斜線控制的字符轉換
控制字符 |
作用 |
\\ |
輸出\本身 |
\a |
輸出警告信息 |
\b |
退格鍵,也就是向左刪除鍵 |
\c |
取消輸出行末的換行符。和“-n”選項一致 |
\e |
ESCAPE鍵 |
\f |
換行業 |
\n |
換行符 |
\r |
回車鍵 |
\t |
製表符,也就是Tab鍵 |
\v |
垂直製表符 |
\0nnn |
按照八進制ASCII碼錶輸出字符,其中0位數字零,nnn是三位8進制數 |
\xhh |
按照十六進制ASCII碼錶輸出字符,其中hh是兩位十六進制數 |
echo -e “a\tb\tc\nd\te\tf”
vim hello.sh
#!/bin/bash
腳本執行
1.賦予執行權限,直接運行
chmod 755helle.sh
./hello.sh
2.通過Bash調用執行腳本
Bash hello.sh
dos2unix hello.sh 將windows環境下編輯的文檔轉換爲unix語義的文檔
歷史命令
history [選項] [歷史命令保存文件]
選項: -c 清空歷史記錄
-w 把緩存中的歷史命令寫入歷史命令保存文件
家目錄下/.bash_history
歷史命令默認會保存1000條,可以在環境變量配置文件/etc/profile中進行 修改
歷史命令的調用:
使用上、下箭頭調用以前的歷史命令
使用“!n”重複執行第n條歷史命令
使用“!!”重複執行上一條命令
使用“!字串”重複執行最後一條以該字串開頭的命令
命令與文件補全
在Bash中,命令與文件補全是非常方便與常用的功能,只要在輸入命令或文件時,按“tab”鍵就會自動進行補全
命令別名
alias 別名=‘原命令’
alias 查詢命令別名
命令執行順序
第一順位執行用絕對路徑或相對路徑執行的命令
第二順位執行別名
第三順位執行Bash的內部命令
第四順位執行按照$PATH環境變量定義的目錄查找順序找到的第一個命令
讓別名永久生效
vi /家目錄/.bashrc
Bash常用快捷鍵
快捷鍵 |
作用 |
ctrl+A |
把光標移動到命令行開頭,如果輸入的命令過長,想要把光標移動到命令行開頭時使用 |
ctrl+E |
把光標移動到命令行結尾 |
ctrl+C |
強制終止當前命令 |
ctrl+L |
清屏,相當於clear命令 |
ctrl+U |
刪除或剪切光標之前的命令,輸入一個很長的命令,不用使用退格鍵一個一個字符的刪除 |
ctrl+K |
刪除或剪切光標之後的內容 |
ctrl+Y |
粘貼ctrl+U或ctrl+K剪切的內容 |
ctrl+R |
在歷史命令中搜索,按下ctrl+R之後,就會出現搜索界面,只要輸入內容就會從歷史命令中搜索 |
ctrl+D |
退出當前終端 |
ctlr+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中 |
輸入重定向
wc [選項] [文件名]
選項: -c 統計字節數
-w 統計單詞數
-l 統計行數
結束後輸出ctrl+d
或者 命令 < 文件 把文件作爲命令的輸入
多命令執行順序
多命令執行符 |
格式 |
作用 |
; |
命令1;命令2 |
多個命令順序執行,命令之間沒有任何邏輯聯繫 |
&& |
命令1&&命令2 |
邏輯與 當命令1執行正確時,命令2執行,否則命令2不執行 |
|| |
命令1||命令2 |
邏輯或 當命令1執行不正確時,命令2纔會執行,否則命令2不執行 |
dd if=輸入文件 of=輸出文件 bs=字節數 count=個數 dd:複製磁盤
選項: if=輸入文件 指定源文件或源設備
of=輸出文件 指定目標文件或目標設備
os=字節數 指定一次輸入/輸出多少字節,即把這些字節看作是 一個數據塊
count=個數 指定輸入/輸出多少個數據塊
例子:date;dd if=/dev/zero of=/root/testfile bs=1kcount=10000;date
管道符
命令格式:命令1 | 命令2 命令1的正確輸出作爲命令2的 操作對象
grep命令
grep [選項] “搜索內容” 文件名
選項: -i 忽略大小寫
-n 輸出行號
-v 反向查找
--color=auto 搜索出關鍵字用顏色顯示
netstat -an| grep “ESTABLISHED”
通配符
通配符 |
作用 |
? |
匹配一個任意字符 |
* |
匹配0個或任意多個字符 |
[] |
匹配括號中任意一個字符 |
[-] |
匹配括號中任意一個字符,-代表範圍 |
[^] |
邏輯非,表示匹配不是括號內的一個字符 |
Bash中的其他特殊符號
符號 |
作用 |
‘’ |
單引號,在單引號中所有的特殊符號,如“$”和“`”反引號都沒有特殊意義 |
“” |
在雙引號中特殊符號沒有特殊含義,但是“$”、“`”和“\”是例外,擁有“調用變量的值”、“引用命令”和“轉義符”的特殊含義 |
`` |
反引號,反引號括起來的內容是系統命令,在Bash中會先執行它,和$()作用一樣,不過推薦使用$(),因爲反引號容易看錯 |
$() |
和反引號作用一樣,用來引用系統命令 |
# |
在shell腳本中,#開頭的行代表註釋 |
$ |
用於調用該變量的值,如需要調用變量 |
\ |
轉義符,跟在\之後的特殊符號都將失去特殊含義,變爲普通字符,如\$將輸出爲”$”符號,而不是當做變量引用 |
變量
計算機內存的單元,其中存放的值可以改變。當shell腳本需要保存一些信息時,就把他存放在一個變量中,每個變量都有一個名字,所以很容易引用他。使用變量可以保存有用的信息,使系統獲知用戶相關設置,變量也可以用於保存暫時信息
變量設置規則
變量名稱可以由字母、數字和下劃線組成,但不能以數字開頭
在bash中,變量的默認類型都是字符串型,如果要進行數值運算,則必須指定變量類型爲數值型
變量用等號連接值,等號左右兩側不能有空格,如果有要用雙引號或單引號
變量的值種,可以使用“\”轉義符
如果需要增加變量的值,那麼可以進行變量值的疊加。不過變量需要用雙引號包括“$變量名”或者${變量名}包括
如果是把命令結果作爲變量值賦予給變量,則需要使用反括號或者$()包括命令
環境變量名建議大寫,便於區分
變量分類
用戶自定義變量
環境變量:這種變量中主要用來保存的是和系統操作環境相關的數據
位置參數變量:這種變量主要用來向腳本當中傳遞參數或數據,變量名不能自定義,變量作用是固定的
預定義變量:是Bash中已經定義好的變量,變量名不能自定義,變量作用也是固定的
自定義變量
name = “lyg”
變量疊加
aa = 123
aa = “$aa”456
aa = ${aa}789
變量調用
echo $name
變量查看
set
變量刪除
unset name
環境變量
用戶自定義變量只在當前的shell中生效,而環境變量會在當前shell和這個shell的所有子shell中生效。如果把環境變量寫入相應的配置文件,那麼這個變量就會在所有的shell中生效
設置環境變量
export 變量名=變量值 聲明變量
env 查詢變量
unset 變量名 刪除變量
系統常見環境變量
PATH:系統查找命令的路徑
echo $PATH
PATH=”$PATH”:/root/sh PATH變量疊加
PS1:定義系統提示符的變量
\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]\$’
PS1=’[\u@\@ \h \#\W]\$’
位置參數變量
位置參數變量 |
作用 |
$n |
n爲數字,$0代表命令本身,$1-$9代表第一到第九個參數,十以上的參數需要用大括號包括,如${10} |
$* |
表示命令行中所有的參數,$*把所有的參數看成一個整體 |
$@ |
代表命令行中所有的參數,不過$@把每個參數區分對待 |
$# |
這個變量代表行中所有參數的個數 |
例子:
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2)) 變量sum的和是num1加num2
echo $sum 打印變量sum的值
預定義變量
預定義變量 |
作用 |
$? |
最後一次執行的命令的返回狀態,如果這個變量的值爲0,證明上一個命令正確執行;如果這個變量的值爲非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確 |
$$ |
當前進程的進程號(PID) |
$! |
後臺運行的最後一個進程的進程號(PID) |
接收鍵盤輸入
read [選項] [變量名]
選項: -p “提示信息” :在等待read輸入時,輸出提示信息
-t 秒數 :read命令會一直等待用戶數據,使用此選項可以指定等待時間
-n 字符數 :read命令只接受指定的字符數,就會執行
-s :隱藏輸入的數據,適用於機密信息的輸入
例子:read -t 30 -p “please input your name” name
#提示“請輸入姓名”並等待30秒,把用戶的輸入保存到變量name中
echo “name is$name”
read -s -t 30 -p “pleaseinput your age:” age
echo -e “\n”
echo “age is $age”
read -n 1 -t 30-p “please input your gender[M/F]:” gender
echo -e “\n”
echo “sex is$gender”
declare聲明變量類型
declare [+/-] [選項] 變量名
選項: -: 給變量設定類型屬性
+: 取消變量的類型屬性
-i: 將變量聲明爲整數型(integer)
-x: 將變量聲明爲環境變量
-p: 顯示指定變量的被聲明的類型
數值運算-方法1
aa=11
bb=22
declare -i cc=$aa+$bb
方法2
dd=$(expr $aa + $bb) 注意:“ + ”左右兩邊必須有空格
方法3
ff=$(($aa+$bb))
gg=$[$aa+$bb]
變量測試與內容替換
變量置換方式 |
變量y沒有設值 |
變量y爲空值 |
變量y設置值 |
x=${y-新值} |
x=新值 |
x爲空 |
x=$y |
x=${y:-新值} |
x=新值 |
x=新值 |
x=$y |
x=${y+新值} |
x爲空 |
x=新值 |
x=新值 |
x=${y:+新值} |
x爲空 |
x爲空 |
x=新值 |
x=${y=新值} |
x=新值 y=新值 |
x爲空 y值不變 |
x=$y y值不變 |
x=${y:=新值} |
x=新值 y=新值 |
x=新值 y值不變 |
x=$y y值不變 |
x=${y?新值} |
新值輸出到標準錯誤輸出(就是屏幕) |
x爲空 |
x=$y |
x=${y:?新值} |
新值輸出到標準錯誤輸出 |
新值輸出到標準錯誤輸出 |
x=$y |
source命令
source 配置文件
或
.配置文件
環境變量配置文件簡介
環境變量配置文件中主要是對系統的操作環境生效的系統默認環境變量,比如PATH、HISTSIZE、PS1、HOSTNAME等默認環境變量
系統默認中有以下這些環境變量配置文件
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
/etc目錄下文件對任何用戶登錄都會生效,而家目錄下的只對登錄用戶生效
/etc/profile的作用
USER變量
LOGNAME變量
MAIL變量
PATH變量
HOSTNAME變量
HISTSIZE變量
umask
調用/etc/profile.d/*.sh文件
/etc/bashrc的作用
PS1變量
umask
PATH變量
調用/etc/profile.d/*.sh文件
註銷時生效的環境變量配置文件
~/.bash_logout
其他配置文件
~/bash_history
shell登錄信息
本地終端歡迎信息:/etc/issue
轉義符 |
作用 |
\d |
顯示當前系統日期 |
\s |
顯示操作系統名稱 |
\l |
顯示登錄的終端號,常用 |
\m |
顯示硬件體系結構,如i386、i686 |
\n |
顯示主機名 |
\o |
顯示域名 |
\r |
顯示內核版本 |
\t |
顯示當前系統時間 |
\u |
顯示當前登錄用戶的序列號 |
遠程登錄歡迎信息:/etc/issue.net
轉義符在/etc/issue.net文件中不能使用
是否顯示此歡迎信息,由ssh的配置文件/etc/ssh/sshd_config決定,加入“Banner/etc/issue.net”行才能顯示(記得重啓SSH服務)
登陸後歡迎信息:/etc/motd
不管是本地登錄還是遠程登錄,都可以顯示此歡迎信息
正則表達式與通配符
grep、awk、sed等命令可以支持正則表達式
ls、find、cp這些命令不支持正則表達式,只能使用shell自己的通配符來進行匹配
元字符 |
作用 |
* |
前一個字符匹配0次或任意多次 |
. |
匹配除了換行符以外的一個字符 |
^ |
匹配行首,如^hello匹配以hello開頭的行 |
$ |
匹配行尾,如hello$匹配以hello結尾的行 |
[] |
匹配括號中指定的任意一行 |
[^] |
匹配除了括號中字符以外的任意一行 |
\ |
轉義符,取消特殊符號的含義 |
\{n\} |
表示其前面的字符敲好出現n次,如[0-9]\{4\}匹配4位數字 |
\{n,\} |
前面的字符出現不小於n次 |
\{n,m\} |
前面的字符最少出現n次,最多出現m次 |
cut字段提取命令
cut [選項] 文件名
選項: -f 列號 提取第幾列
cut -f 2student.txt
cut -f 2,3student.txt
-d分隔符 按照指定分隔符分割列
cut -d “:” -f 1,3/etc/passwd
printf命令
printf ‘輸出類型輸出格式’ 輸出內容
輸出類型:
%ns:輸出字符串。n是數字只帶輸出幾個字符
printf %s 123456
printf ‘%s %s %s’123345
printf ‘%s %s%s\n’ 123456
不調整輸出格式
printf ‘%s’ $(catstudent.txt)
調整輸出格式
printf ‘%s\t %s\t%s\t %s\t \n’ $(cat student.txt)
%ni:輸出整數。n是數字只帶輸出第幾行
%m.nf:輸出浮點數。m和n是數字,指代輸出的整數位數和小數位數,如%8.2f代表輸出8位數,其中2位是小數,6位是整數
輸出格式:
\a: 輸出警告聲音
\b: 輸出退格鍵,就是backspace
\f: 清除屏幕
\n: 換行
\r: 回車,也就是enter鍵
\t: 水平輸出退格鍵,也就是tab鍵
\v: 垂直輸出退格鍵,也就是tab鍵
在awk命令的輸出中支持print和printf命令
print:會在每個輸出後自動加入一個換行符(Linux默認沒有print命令)
printf:printf是標準格式輸出命令,並不會自動加入換行符
awk命令
awk ‘條件1{動作1} 條件2{動作2}...’ 文件名
條件(Pattern):
一般使用關係表達式作爲條件
x>10 判斷變量x是否大於0
x>=10 大於等於
x<=10 小於等於
動作(Action)
格式化輸出
流程控制語句
例子:awk ‘{printf $2 “\t” $6 “\n”}’ student.txt $2:文件第二列
awk ‘BEGIN {printf “this is a transcript \n”}{printf $2 “\t” $6 “\n”}’ student.txt
FS內置變量
cat /etc/passwd | grep “/bin/bash” | awk ‘BEGIN{FS=”:”} {printf $1 “\t” $3 “\n”}’
END 和BEGIN作用一樣
關係運算符:
awk ‘$6>=87 {printf $2 “\n”}’
sed命令
sed是一種幾乎包括在所有UNIX平臺(包括LINUX)的輕量級流編輯器。sed主要是用來將數據進行選取、替換、刪除、新增的命令
set [選項] ‘動作’ 文件名
選項: -n 一般sed命令會把所有數據都輸出到屏幕,如果加入此選項,則只會把經過sed命令處理的行輸出到屏幕
-e 允許對輸入數據應用多條sed命令編輯
-i 用sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出
動作:
a \: 追加,在當前行後添加一行或多行。添加多行時,除最後一行外,每行末需要用“\”代表數據未完結。
sed ‘2a hello’ student.txt 在第二行後追加hello
c \: 行替換。用c後面的字符串替換原數據行,替換多行時,除最後一行外,每行末尾需用“\”代表數據未完結
sed ‘2c No such person’ student.txt
i \: 插入,在當前行前插入一行或者多行。插入多行時,除最後一行外,每行末尾需用“\”代表數據未完結
sed ‘2i hello \ world’ student.txt 在第二行前插入兩行數據
d : 刪除,刪除指定的行
p: 打印,輸出指定的行
s: 字串替換,用一個字符串替換另外一個字符串。格式爲“行範圍s/舊字串/新字串/g” (和vim中的替換格式類似)
sed ‘3s/73/99/g’student.txt 第三行的74換成99
sed -i‘3s/74/99/g’student.txt sed操作的數據直接寫入文件
sed -e ‘s/lyg//g;s/ge//g’ student.txt 同時把lyg和ge替換爲空
字符處理命令
排序命令sort
sort [選項] 文件名
選項: -f 忽略大小寫
-n 以數值型進行排序,默認使用字符串排序
-r 反向排序
-t 指定分隔符,默認的分隔符是製表符
-k n[,m] 按照指定的字段範圍排序,從第n字段開始,m字段結束(默認到行尾)
sort -r /etc/passwd
sort -t “:” -k 3,3 /etc/passwd 指定分隔符是“:”,用第三字段開頭,第三字段結尾排序,就是隻用第三字段排序
sort -n -t “:” -k 3,3 /etc/passwd
統計命令wc
wc [選項] 文件名
選項: -l 只統計行數
-w 只統計單詞數
-m 只統計字符數
條件判斷
按照文件類型進行判斷
測試選項 |
作用 |
-b 文件 |
判斷該文件是否存在,並且是否爲塊設備文件(是塊設備文件爲真) |
-c 文件 |
判斷該文件是否存在,並且是否爲字符設備文件(是字符設備文件爲真) |
-d 文件 |
判斷該文件是否存在,並且是否爲目錄文件(是目錄爲真) |
-e 文件 |
判斷該文件是否存在(存在爲真) |
-f 文件 |
判斷該文件是否爲真,並且是否是普通文件(是普通文件爲真) |
-L 文件 |
判斷該文件是否存在,並且是否爲符號連接文件(是符號連接文件爲真) |
-p 文件 |
判斷該文件是否存在,並且是否爲管道文件(是管道文件爲真) |
-s文件 |
判斷該文件是否存在,並且是否爲空(非空爲真) |
-S 文件 |
判斷該文件是否存在,並且是否爲套接字文件(是套接字文件爲真) |
test -e /root/install.log
[-e /root/install.log] 常用
[-d /root] && echo “yes” || echo “no”
按照文件權限進行判斷
測試選項 |
作用 |
-r 文件 |
判斷該文件是否存在,並且該文件是否具有讀權限(有讀權限爲真) |
-w 文件 |
判斷該文件是否存在,並且該文件是否具有寫權限(有寫權限爲真) |
-x 文件 |
判斷該文件是否存在,並且該文件是否具有執行權限(有執行權限爲真) |
-u 文件 |
判斷該文件是否存在,並且該文件是否具有SUID權限(有SUID權限爲真) |
-g 文件 |
判斷該文件是否存在,並且該文件是否具有SGID權限(有SGID權限爲真) |
-k 文件 |
判斷該文件是否存在,並且該文件是否具有SBit權限(有SBit權限爲真) |
兩個文件之間進行比較
測試選項 |
作用 |
文件1 -nt 文件2 |
判斷文件1的修改時間是否比文件2的新(如果新則爲真) |
文件1 -ot 文件2 |
判斷文件1的修改時間是否比文件2的舊(如果舊則爲真) |
文件1 -ef 文件2 |
判斷文件1是否和文件2的inode號一致,即兩個文件是否爲同一個文件,這是判斷硬鏈接很好的方法 |
兩個整數之間的比較
測試選項 |
作用 |
整數1 -eq 整數2 |
判斷兩個整數是否相等(相等則爲真) |
整數1 -ne 整數2 |
判斷兩個整數是否不相等(不相等爲真) |
整數1 -gt 整數2 |
|
整數1 -lt 整數2 |
|
整數1 -ge 整數2 |
判斷整數1是否大於等於整數2(大於等於則爲真) |
整數1 -le 整數2 |
|
字符串的判斷
測試選項 |
作用 |
-z 字符串 |
判斷字符串是否爲空(爲空返回真) |
-n 字符串 |
判斷字符串是否爲非空(非空返回真) |
字串1==字串2 |
判斷字串1和字串2相等(相等返回真) |
字串1!=字串2 |
|
多重條件判斷
測試選項 |
作用 |
判斷1 -a 判斷2 |
邏輯與,判斷1和判斷2都成立,最終結果才爲真 |
判斷1 -o 判斷2 |
邏輯或,判斷1和判斷2有一個成立,最終結果就爲真 |
!判斷 |
邏輯非,是原始的判斷式取反 |
aa=11
[-n “$aa” -a “$aa” -gt 23] $$ echo “yes” || echo “no”
單分支if條件語句
if [條件判斷式] ; then
程序
fi
或者
if [條件判斷式]
then
程序
fi
rate=$(df -h | grep “/dev/sda3” | awk ‘{print $5}’ |cut -d “%” -f1)
if [$rage -ge 80]
then
echo “warning!!!”
fi
備份mysql數據庫
#!/bin/bash
ntpdate asia.pool.ntp.org &>/dev/null
#同步系統時間
date=$(date +%y%m%d)
#把當前系統時間按照“年月日”格式賦予變量date
size=$(du -sh /var/lib/mysql)
#統計mysql數據庫的大小,並把大小賦予size變量
if [ -d /tmp/dbbak ]
then
echo “Date :$date!” > /tmp/dbbak/dbinfo.txt
echo “Date size :$size” >> /tmp/dbbak/dbinfo.txt
cd /tmp/dbbak
tar -zcfmysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt&>/dev/null
rm -rf/tmp/dbbak/dbinfo.txt
else
mkdir /tmp/dbbak
echo “Date :$date!” > /tmp/dbbak/dbinfo.txt
echo “Date size :$size” >> /tmp/dbbak/dbinfo.txt
cd /tmp/dbbak
tar -zcfmysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt&>/dev/null
rm -rf/tmp/dbbak/dbinfo.txt
fi
判斷apache是否啓動
#!/bin/bash
port=$(nmap -sT 192.168.10.1 | grep tcp | grep http |awk ‘{print $2}’)
#使用nmap命令掃描服務器,並截取apache服務的狀態,賦予變量port
if [ “$port” == “open” ]
then
echo “$(date)httpd is ok” >> /tmp/autostart-acc.log
else
/etc/tc.d/init.d/httpdstart &>/dev/null
echo “$(date)restart httpd” >> /tmp/autostart-err.log
fi
if [ ! -e “$file” ] #判斷file的值是否存在
then
echo “your inputis not a file”
exit 2
elif [ -d “$file” ] #判斷file是否是普通文件
then
echo “$file is aregular file”
fi
case判斷
case $變量名 in
“值1”)
程序
;;
“值2”)
程序
;;
*)
程序
;;
esac
for循環
語法一: for 變量 in 值1 值2 值3..
do
程序
done
#!/bin/bash
#批量解壓縮腳本
cd /lamp
ls *.tar.gz > ls.log
for i in $(cat ls.log)
do
tar -zxf $i&>/dev/null
done
rm -rf /lamp/ls.log
#!/bin/bash
#從1加到100
s=0
for (( i=0;i<=100;i=i+1 ))
do
s=$(( $s+$i ))
done
echo “the sum of 1+2+...+100is:$s”
while循環與until循環
while [ 條件判斷式 ]
do
程序
done
#!/bin/bash
#從1加到100
i=1
s=0
while [ $i -le 100]
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo “the sum is : $s”
#!/bin/bash
i=1
s=0
until [ $i -gt 100 ]
do
s=$(( $s+$i ))
i=$(( $i+i ))
done
echo “the sum is:$s”
linux服務的分類
Linux服務
RPM包默認安裝的服務
獨立的服務
基於xinetd服務
源碼包安裝的服務
查詢已安裝的服務
RPM包安裝的服務,安裝在默認位置中
配置文件安裝在/etc/下
啓動腳本會裝在/etc/rc.d/init.d/下
chkconfig --list
#查看服務自啓動狀態,可以看到所有RPM包安裝的服務
ps aux 查看系統當中所有運行的進程
源碼包安裝的服務
查看服務安裝位置,一般是/usr/local/下
刪除源碼包只需要刪除/usr/local/下的文件刪除
獨立服務管理
/etc/init.d/: 啓動腳本位置
/etc/sysconfig/: 初始化環境配置文件位置
/etc/: 配置文件位置
/etc/xinetd.conf: xinetd配置文件
/etc/xinetd.d/: 基於xinetd服務的啓動腳本
/var/lib/: 服務產生的數據放在這裏
/var/log/: 日誌
獨立服務的啓動
/etc/init.d/獨立服務名 start|stop|status|restart|
service 獨立服務名 start|stop|restart||status
獨立服務的自啓動
chkconfig [--level 運行級別] [獨立服務名] [on|off]
修改/etc/rc.d/rc.local文件(標準方法)
使用ntsysv命令管理自啓動
基於xinetd服務管理
安裝xinetd與telnet
yum -y install xinetd
yum -y install telnet-server
xinetd服務的啓動
vi /etc/xinetd.d/telnet
service telnet <-服務的名稱爲telnet
{
flags =REUSE <-標誌爲REUSE,設定TCP/IP socket可重用
socket_type =stream <-使用TCP協議數據包
wait =no <-允許多個連接同時連接
user =root <-啓動服務的用戶爲root
server =/usr/sbin/in.telnetd <-登錄的啓動程序
log_on_failure +=USERID <-登錄失敗後,記錄用戶的ID
disable =no <-服務不啓動
}
xinetd服務的自啓動
chkconfig telnet on
ntsysv
源碼包安裝服務的啓動
使用絕對路徑,調用啓動腳本來啓動。不同貴的源碼包的啓動腳本不同。
/usr/local/apache2/bin/apachectl start|stop
源碼包服務的自啓動
vi /etc/rc.d/rc.local
加入
/usr/local/apache2/bin/apachectl start
讓源碼包服務被服務管理命令識別
讓源碼包的apache服務能被service命令管理啓動
ln -s /usr/local/apache2/bin/apachectl//etc/init.d/apache
讓源碼包的apache服務能被chkconfig與ntsysv命令管理自啓動
vi /etc/init.d/apache
#chkconfig:35 86 76
#指定httpd腳本可以被chkconfig命令管理。格式是
#chkconfig:運行級別 啓動順序 關閉順序
#description: source package apache
#說明,內容隨意
chkconfig --add apache 把apache服務加入chkconfig的管理序列
進程查看
進程管理的作用
判斷服務器健康狀態
查看系統中所有進程
殺死進程
查看系統中所有進程
ps aux 查看系統中所有進程,使用BSD操作系統格式
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 秒數 指定top命令每隔幾秒更新。默認是3秒,在top命令的交互模式中可以執行的命令:
?或h:顯示交互模式的幫助
P: 以CPU使用率排序,默認就是此項
M: 以內存的使用率排序
N: 以PID排序
q: 退出top
查看進程樹
pstree [選項]
選項: -p 顯示進程的PID
-u 顯示進程的所屬用戶
終止進程
kill -l 查看可用的進程信號
信號代號 |
信號名稱 |
說明 |
1 |
SIGHUP |
改信號讓進程立刻關閉,然後重新讀取配置文件之後重啓 |
2 |
SIGNIT |
程序終止信號,用於終止前臺進程,相當於輸出ctrl+c快捷鍵 |
8 |
SIGFPE |
在發生致命的算術運算錯誤時發出,不僅包括浮點運算錯誤,還包括溢出及除數爲0等其他所有的算術的錯誤 |
9 |
SIGKILL |
用來立即結束程序的運行,本信號不能被阻塞、處理和忽略。一般用於強制終止進程 |
14 |
SIGALRM |
時鐘定時信號,計算的是實際的時間或鐘錶時間,alarm函數使用該信號 |
15 |
SIGTERM |
正常結束進程的信號,kill命令的默認信號,有時如果進程已經發生問題,這個信號是無法正常終止進程的,我們才嘗試SIGKILL信號,也就是信號9 |
18 |
SIGNOT |
該信號可以讓暫停的進程恢復執行,本信號不能被阻斷 |
19 |
SIGSTOP |
該信號可以暫停前臺進程,相當於輸入ctrl+z快捷鍵。本信號不能被阻斷 |
kill -1 22354 重啓進程
kill -9 22368 強制殺死進程
killall命令
killall [選項][信號] 進程名 按照進程名殺死進程
選項: -i 交互式,詢問是否要殺死某個進程
-I 忽略進程名的大小寫
pkill命令
pkill [選項][信號] 進程名 按照進程名終止進程
選項: -t 終端號: 按照終端號踢出用戶
按照終端號踢出用戶
w #使用w命令查詢本機已經登錄的用戶
pkill -t -9 pts/1 #強制殺死從pts/1虛擬終端登錄的進程
工作管理
把進程放入後臺
tar -zcf etc.tar.gz /etc & #放入後臺後仍然在運行
top #在top命令執行的過程中,按下ctrl+z快捷鍵 #放入後臺後暫停了
查看後臺的工作
jobs [-l]
選項:-l 顯示工作的PID
注:+代表最近一個放入後臺的工作,也是工作回覆時,默認恢復的工作,-代表倒數第二個放入後臺的工作
將後臺暫停的工作恢復到前臺執行
fg %工作號
參數: %工作號:%可以省略,但是注意工作號和PID的區別
把後臺暫停的工作恢復到後臺執行
bg %工作號
注:後臺恢復執行的命令,不能喝前臺交互,否則不能恢復到後臺執行
vmstat命令監控系統資源
vmstat [演示刷新 刷新次數]
例如:vmstat 1 3 #每個1秒查看系統資源,查看3次
dmesg開機時內核檢測信息
dmesg
dmesg | grep CPU
free命令查看內存使用狀態
free[-b|-k|-m|-g]
選項:
-b: 以字節爲單位顯示
-k: 以KB爲單位顯示,默認就是以KB爲單位顯示
-m: 以MB爲單位顯示
-g: 以GB爲單位顯示
查看CPU信息
cat/proc/cpuinfo
uptime命令
uptime
#顯示系統的啓動時間和平均負載,也就是top命令的第一行,w命令也可以看到這個數據
查看系統與內核相關信息
uname [選項]
選項:-a 查看系統所有相關信息
-r 查看內核版本
-s 查看內核名稱
判斷當前系統的位數
file /bin/ls
查詢當前Linux系統的髮型版本
lsb_release -a
列出進程打開或使用的文件信息
lsof [選項] #列出進程調用或打開的文件的信息
選項:-c 字符串 :只列出以字符串開頭的進程打開的文件
-u用戶名 :只列出某個用戶的進程打開的文件
-p pid :列出某個PID進程打開的文件
系統定時任務
crond服務管理與訪問控制
sevice crond restart
chkconfig crond on
用戶的crontab設置
crontab [選項]
選項:-e 編輯crontab定時任務
-l 查詢crontab任務
-r 刪除當前用戶所有的crontab任務
項目 |
含義 |
範圍 |
第一個“*” |
一小時當中的第幾分鐘 |
0-59 |
第二個“*” |
一天當中的第幾個小時 |
0-23 |
第三個“*” |
一個月當中的第幾天 |
1-31 |
第四個“*” |
一年當中的第幾月 |
1-12 |
第五個“*” |
一週當中的星期幾 |
0-7(0和7都代表星期天) |
特殊符號 |
含義 |
* |
代表任何時間。比如第一個”*”代表一個小時中每分鐘都執行一次 |
‘ |
代表不連續的時間。如“0,8,12,16***”代表每天的8點0分,12點0分都執行一次命令 |
- |
代表連續的時間範圍。如“0 5 * * 1-6命令”代表在週一到週六的凌晨5點0分執行命令 |
*/n |
代表每個多久執行一次命令。比如“*/10 * * * *命令”代表每隔10分鐘就執行一次命令 |
時間 |
含義 |
45 22 * * * 命令 |
在22點45分執行命令 |
0 17 * * 1 命令 |
每週1的17點0分執行命令 |
0 5 1,15 * * 命令 |
每月1號和15號的凌晨5點0分執行命令 |
40 4 * * 1-5 命令 |
每週一到週五的凌晨4點40分執行命令 |
*/10 4 * * * 命令 |
每天的凌晨4點,每隔10分鐘執行一次命令 |
0 0 1,15 * 1 命令 |
每月1號和15號,每週一的0點0分執行命令。注意:星期幾和幾號最好不要同時出現,因爲他們定義的都是天,容易讓管理員混亂 |
舉例:*/5 * * * /bin/echo “11” >> /tmp/test
5 5 * * 2/bin/shutdown -r now
0 5 1,10,15 * */root/sh/autobak.sh
rsyslogd的新特點:
基於TCP網絡傳輸協議日誌信息
更安全的網絡傳輸方式
有日誌消息的及時分析框架
後臺數據庫
配置文件中可以寫簡單的邏輯判斷
與syslog配置文件相兼容
確定服務啓動
ps aux | grep rsyslogd #查看服務是否啓動
chkconfig --list | grep rsyslog #查看服務是否自啓動
日誌服務
在centos6.X中日誌服務已經由rsyslogd取代了原先的syslogd服務。rsyslogd日誌服務更加先進,功能更多,但是不論該服務如何使用,還是日誌文件的格式其實都是和syslogd服務相兼容的,所以學習起來基本和 syslogd服務一致。
常見日誌的作用
日誌文件 |
說明 |
/var/log/cron |
記錄了系統定時任務相關的日誌 |
/var/log/cups |
記錄了打印信息的日誌 |
/var/log/dmesg |
記錄了系統在開機時內核自檢的信息。也可以使用dmesg命令直接查看內核自檢信息 |
/var/log/btmp |
記錄錯誤登錄的日誌。這個文件是二級制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog |
記錄系統中所有用戶最後一次的登錄時間的日誌。這個文件也是二進制文件。不能直接vi,而要使用lastlog命令查看 |
/var/log/mailog |
記錄郵件信息 |
/var/log/message |
記錄系統重要信息的日誌,這個日誌文件會記錄linux系統的絕大多數重要信息,如果系統出現問題,首先要檢查的就是這個日誌文件 |
/var/log/secure |
記錄驗證和授權方面的信息,只要涉及賬戶和密碼的程序都會記錄。比如說系統的登錄,ssh的登錄,su切換用戶,sudo授權,甚至添加用戶和修改用戶密碼都會記錄在這個日誌文件中 |
/var/log/wtmp |
永久記錄所有用戶的登錄,註銷信息,同時記錄系統的啓動,重啓,關機事件。這個文件也是一個二進制文件,不能直接vi,而需要用last命令來查看 |
/var/run/utmp |
記錄當前已經登陸的用戶信息。這個文件會隨着用戶的登錄和註銷而不斷變化,只記錄當前登錄用戶的信息,同樣這個文件不能直接vi,而要使用w,who,users等命令來查詢 |
除了系統默認的日誌之外,採用RPM方式安裝的系統服務也會默認把日誌記錄在/var/log目錄中(源碼包安裝的服務日誌是在源碼包指定的目錄中)。不過這些日誌不是由rsyslogd服務來記錄和管理的,而是各個服務使用自己的日誌管理文檔來記錄自身日誌
日誌文件 |
說明 |
/var/log/httpd/ |
RPM包安裝的apache服務的默認日誌目錄 |
/var/log/mail/ |
RPM包安裝的郵件服務的額外日誌目錄 |
/var/log/mail/ |
RPM包安裝的samba服務的日誌目錄 |
/var/log/sssd/ |
守護進程安全服務目錄 |
rsyslogd日誌服務
日誌文件格式
基本日誌格式包含以下四列
時間產生的時間
發生事件的服務器的主機名
產生事件的服務名或程序名
事件的具體信息
/etc/rsyslog.conf配置文件
authpriv.* /var/log/secure
#服務名稱[連接符號]日誌等級 日誌記錄位置
#認證相關服務.所有日誌等級 記錄在/var/log/secure日誌中
服務名稱
服務名稱 |
說明 |
Auth |
安全和認證相關消息(不推薦使用authpriv替代) |
Authpriv |
安全和認證相關消息(私有的) |
Cron |
系統定時任務cront和at產生的日誌 |
Daemon |
和各個守護進程相關的日誌 |
ftp |
ftp守護進程產生的日誌 |
kern |
內核產生的日誌(不是用戶進程產生的) |
local0-local7 |
爲本地使用預留的服務 |
lpr |
打印產生的日誌 |
連接符號
連接符號可以識別爲:
“*”代表所有日誌等級,比如:“authpriv.*”代表autopriv認證信息服務產生的日誌,所有的日誌等級都記錄
“.”代表只要比後面的等級高的(包含該等級)日誌都記錄下來,比如:“cron.info”代表cron服務產生的日誌,只要日誌等級大於等於info級別,就記錄
“.=”代表只記錄所需要等級的日誌,其他等級的都不記錄。比如:“*.=emerg”代表任何日誌服務產生的日誌,只要等級是emerg等級就記錄(瞭解)
“.!”代表不等於,也就是除了該等級的日誌外,其他等級的日誌都記錄.
日誌等級
登記名稱 |
說明 |
debug |
一般的調試信息說明 |
info |
基本的通知信息 |
notice |
普通信息,但有一定的重要性 |
warning |
警告信息,但是還不會影響到服務或系統運行 |
err |
錯誤信息,一般達到err等級的信息已經可以影響到服務或系統的運行了 |
crit |
臨界狀況信息,比err等級還要嚴重 |
alert |
警告狀態信息,比crit還要嚴重,必須立即採取行動 |
emerg |
疼痛等級信息,系統已經無法使用 |
日誌記錄位置
日誌文件的絕對路徑,如/var/log/secure
系統設備文件,如/dev/lp0
用戶名,如root
忽略或丟棄日誌,如~
日誌輪替
日誌文件的命令規則
如果配置文件中擁有“dateext”參數,那麼日誌會用日期來作爲日誌文件的後綴,例如“secure-20170814”。這樣的話日誌文件名就不會重疊,所以也就不需要日誌文件的改名,只需要保存指定的日誌個數,刪除多餘的日誌文件即可
如果配置文件沒有“dateext”參數,那麼日誌文件就需要進行改名了。當第一次進行日誌輪替時,當前的“secure”日誌會自動改名爲“secure.1”,然後新建“secure”日誌,用來保存新的日誌,當第二次進行日誌輪替時,“secure.1”會自動改名爲“secure.2”,當前的“secure”日誌會自動改名叫“secure.1”,然後也會新建“secure”日誌,用來保存新的日誌
把apache日誌加入輪替
vi /etc/logrotate.conf
/usr/local/apache2/logs/access_log {
daily
create
rotate 30
}
logrotate配置文件
參數 |
參數說明 |
daily |
日誌的輪替週期是每天 |
weekly |
日誌的輪替週期是每週 |
monthly |
日誌的輪替週期是每月 |
rotate 數字 |
保留的日誌文件的個數,0指沒有備份 |
compress |
日誌輪替時,舊的日誌進行壓縮 |
create mode owner group |
建立新日誌,同時指定新日誌的權限與所有者和所屬組。如create 0600root utmp |
mail address |
當日志輪替時,輸出內容通過郵件發送到指定的郵件地址,如mail [email protected] |
missingok |
如果日誌不存在,則忽略該日誌的警告信息 |
notifempty |
如果日誌爲空文件,則不進行日誌輪替 |
minsize 大小 |
日誌輪替的最小值,也就是日誌一定要達到這個最小值纔會輪替,否則就算時間達到也不輪替 |
size 大小 |
日誌只有大於指定大小才進行日誌輪替,而不是按照時間輪替,如size 100k |
dateext |
使用日期作爲日誌輪替文件的後綴,如secure-20170814 |
logrotate命令
logrotate [選項] 配置文件名
選項:如果此命令沒有選項,則會按照配置文件中的條件進行日誌輪替
-v 顯示日誌輪替過程,加了-v選項,會顯示日誌的輪替過程
-f 強制進行日誌輪替,不管日誌輪替的條件是否已經符合,強制配置文件中的所有日誌進行輪替
系統運行級別
運行級別 |
含義 |
0 |
關機 |
1 |
單用戶模式,可以想象爲windows的安全模式,主要用於系統修復 |
2 |
不完全的命令行模式,不含NFS服務 |
3 |
完全的命令行模式,就是標準字符界面 |
4 |
系統保留 |
5 |
圖形模式 |
6 |
重啓動 |
運行級別命令
runlevel #查看運行級別命令
init 運行級別 #改變運行級別命令
系統默認運行級別
vim /etc/inittab
id:3:initdefault: #系統開機後直接進入哪個運行級別
調用/etc/init/rcS.conf配置文件
主要功能有兩個:
先調用/etc/rc.d/rc.sysinit,然後由/etc/rc.d/rc.sysinit配置文件進行Linux系統初始化
然後調用/etc/inittab,然後由/etc/inittab配置文件確定系統的默認運行級別
grub中分區表示
硬盤 |
分區 |
Linux中設備文件名 |
Grup中設備文件名 |
第一塊SCSI硬盤 |
第一個主分區 |
/dev/sda1 |
hd(0,0) |
第二個主分區 |
/dev/sda2 |
hd(0,1) |
|
擴展分區 |
/dev/sda3 |
hd(0,2) |
|
第一個邏輯分區 |
/dev/sda5 |
hd(0,4) |
|
第二塊SCSI硬盤 |
第一個主分區 |
/dev/sdb1 |
hd(1,0) |
第二個主分區 |
/dev/sdb2 |
hd(1,1) |
|
擴展分區 |
/dev/sda3 |
hd(1,2) |
|
第一個邏輯分區 |
/dev/sdb5 |
hd(1,4) |
grub配置文件
vi /etc/grub/grub.conf
default=0 默認啓動第一個系統
timeout 等待時間,默認是5秒
splashimage=(hd0,0)/grub/splash.xpm.gz
這裏是指定grub啓動時的背景圖像文件的保存位置
hiddenmenu 隱藏菜單
系統修復模式
單用戶模式
常見修復錯誤:遺忘root密碼、修改系統默認運行級別
光盤修復模式
重要文件丟失,導致系統無法啓動
bash-4.1# chroot /mnt/sysimage
#改變主目錄
sh-4.1# cd /root
sh-4.1# rpm -qf /etc/inittab
#查詢下/etc/inittab文件屬於哪個包
sh-4.1# mkdir /mnt/cdrom
#建立掛載點
sh-4.1# mount /dev/sr0 /mnt/cdrom
#掛載光盤
Linux系統更需要備份的數據
/root/目錄
/home/目錄
/var/spool/mail/目錄
/etc/目錄
其他目錄
安裝服務的數據
apache需要備份的數據
配置文件
網頁主目錄
日誌文件
mysql需要備份的數據
源碼包安裝的mysql:/usr/local/mysql/date/
RPM包安裝的mysql:/var/lib/mysql/
dump與resotre命令
dump命令
dump [選項] 備份之後的文件名原文件或目錄
選項:
-level 就是我們所說的0-9十個備份等級
-f 文件名 指定備份之後的文件名
-u 備份成功之後,把備份時間記錄在/etc/dumpdates文件
-v 顯示備份過程中更多的輸出信息
-j 調用bzlib庫壓縮備份文件,其實就是把備份文件壓縮成.bz2格式
-W 顯示允許被dump的分區的備份等級及備份時間
備份分區
dump -0uj -f /root/boot.bak.bz2 /boot/
#備份命令,先執行一次完全備份,並壓縮和更新備份時間
cat/etc/dumpdates
#查看備份時間文件
cpinstall.log /boot/
#複製日誌文件到/boot分區
dump -l uj -f /root/boot.bak1.bz2 /boot/
#增量備份/boot分區,並壓縮
dump -W
#查詢分區的備份時間以及備份級別
備份文件或目錄
dump -0j -f /root/etc.dump.bz2 /etc/
#完全備份/etc/目錄,只能使用0級別進行完全備份,不支持增量備份
restore命令
restore [模式選項] [選項]
模式選項:restore命令常用的模式有以下四種,這四種模式不能混用
-C 比較備份數據和實際數據的變化
-i 查看交互模式,手工選擇需要恢復的文件
-t 查看模式,用於查看備份文件中擁有哪些數據
-r 還原模式,用於數據還原
選項:-f 指定備份文件的文件名
比較備份數據和實際數據的變化
mv/boot/vmlinuz-2.6.32-279.el6.i686 /boot/vmlinuz-2.6.32-279.el6.i686.bak
#把/boot目錄內中內核鏡像文件改個名字
restore -C -f /root/boot.bak.bz2
#restore發現內核鏡像文件丟失
還原模式
#還原boot.bak.bz2分區備份
#先還原完全備份的數據
mkdir boot.test
cdboot.test/
restore -r -f /root/boot.bak.bz2
#解壓縮
restore -r -f /root/boot.bak1.bz2
#恢復增量備份數據