老師在講shell中穿插講了硬盤分區和格式化
磁盤的分區格式化
分區: fdisk -l 列出分區表
fdisk 磁盤而不是某分區 (/dev/had)
command :p 看分區
n 新建分區
d 刪除分區
q 不保存退出
w 保存退出
生成文件系統(格式化)
mkfs (make file system)
mkfs -t ext2 /dev/hda5
mkfs -t ext2 –j /dev/hda5 :格式化成ext3格式
掛接:mount /dev/hda5
shell 腳本本身就是程序,是用shell命令構成的,小規模、結構化、模塊化、程序設計。
命令: echo 輸出信息用
read 輸入信息 read+ 變量名
sleep 休眠 sleep+ 秒數
在終端上算數表達式寫法: echo $ ((1x2x3))這是整數運算不能帶小數點。
/ :除
% :余
shell腳本格式:
第一行必須是 #!/bin/sh
有三種結構 順序結構 分支結構 循環結構
順序結構
wait 命令 保證進程同步 等待一個子進程結束 多個並發就用多個wait
例如: #!/bin/sh
echo “1”
sleep 5&
echo “3”
echo “4”
wait
echo”5”
分支結構
if 判斷 ; then
T塊
Else
F塊
fi
判斷 test語句 test 表達式 = [表達式]
表達式進行文件判斷 -f 文件名(檢測該文件是否存在且為普通文件
-d 目錄名
-r 可讀
-w 可寫
-x 可執行
這些例子由於年久失修(筆記上標注不完備,過後有忘了的地方)錯誤之處請多多包涵
例如:
#!/bin/sh
echo “file”
read FileName
if [-f $FileName]; then
echo “yes”
else
echo “no”
fi
字符串比較 相等 串A =串B
不等 串A!=串B
-z 判斷字符串是否為零 空為真 非空為假
數值比較: 大於 等於 小於 不等於
a > b $A –gt $B
a≥b $A –ge $B
a≤b $A –lt $B
a=b $A –le $B
a≠b $A –ne $B
邏輯比較: 條件A –a 條件B(與)
條件A-o 條件B (或)
!條件 (非)
例如:
#!/bin/sh
read MARK < /proc/sys/net/ipv4/ip_forward
echo $MARK
if [ $MARK = “0” ]; then
else echo “host”
echo “GATEWAY”
fi
‘ ‘ 反單引號: 如果反單引號後面有語句則將裡面的語句運行完後將結果替換此處
例如:
#!/bin/sh
u=id –u
if [$u = ‘0’] ; then
echo “hello”
else
echo “permission denied”
fi
再例如:
#!/bin/sh
echo “username”
read userNAME
MARK = ‘cat /etc/passwd | grep ‘$userNAME:’
積極if [ -z $ MARE] ; then
echo “NO”
else
echo “YES”
fi
多分支結構
case 字符串 in
串1) 塊1
;;
串2) 塊2
;;
.
.
.
*)
esac
例如:
#!/bin/sh
echo “command”
read CMD
case $CMD in
start)
/etc/rc.d/init.d/named start
;;
stop)
/etc/rc.d/init.d/named stop
;;
estart)
/etc/rc.d/init.d/named stop
/etc/rc.d/init.d/named start
;;
*)
echo “usage : $0 {start|stop|restart}
;;
esac
*知識點: . 腳本 讓shell不打開子進程,在當前shell進程中運行腳本
看腳本切忌一行一行的看,要一層一層的看,就像剝玉米.
Shell腳本
循環 1)當形循環
2)條件循環
while 判斷; do
循環體
done
例如:
#!/bin/sh
i = 0
while [ $i –lt $n] ; do
j=0
while [ $j –lt $ (($i+1))] ; do
echo “\*”
j=$(($j+1))
done
echo
i=$(($i+1))
done
定時循環 00:00:00: 1970-01-01 utc 稱之為unix元年
data +%s 是取從unix元年至少過了多少秒
date +%H:%M:%S 顯示時分秒格式
例如:
#!/bin/sh
intime = ‘date +%S’ –le $ [ (intime+5)] ; do
echo “.” ##echo後面加-n 輸出就不回車了,橫向輸出
done
利用date命令可以方便的實現定時循環
shell風格的循環 for 循環 (枚舉循環)
格式 for 變量名 in 值列表 ; do
循環體
done
##值列表:核心部分,一系列由空格分開的字符串
例如: #!/bin/sh
for n in asd 4r3 56h er34 657 tr ger ; do
echo $n
done
要自動下載列表中的東西編shell的
#!/bin/sh
cd /tmp/dl
for url in cat /etc/urls ; do
wget $url
done
>/etc/urls
補充知識: 參數傳遞
命令 參數1 參數2 …………
例如:
#!/bin/sh
n=$1
i=0
while ($i-lt $n); do
echo “xxxx”
ii= $ (($$+1))
done
$0 $0就是命令本身
編後:此處講的都是基本的shell應用,老師推薦看《bash編程》
Linux系統管理
1. 用戶管理
添加賬戶 useradd 用戶名
passwd 用戶名
groupadd 組名 usedel -r 用戶名
/etc/group /etc/passwd /etc/shadow 三個重要文件
group 文件 格式: 組名:x :組ID:組成員
passwd文件 格式: 用戶名:x:用戶ID:組ID::用戶目錄:shell
用戶在passwd文件中體現的組關系稱為用戶組屬組,而在group組中體現的是額外組。
false:運行起來就是個恆假。正確利用false給用戶,將false添加到/etc/false下用戶名字後這樣用戶就被拒之門外。如mail用戶 通過修改用戶的shell來限制用戶登陸提高網絡安全性。
top命令:察看機器負載情況
which命令:查看外部命令的路徑
top被弄成用戶shell時切記在linux下可用,因在linux下top是安全模式的,而在其他unix中並不一定安全,通過敲擊熱鍵可能會打出一shell。
shadow文件 shadow裡面的口令是散列,散列是不可逆的
批量添加150個用戶 u001—u150
#!/bin/sh
i=1
while [$i–le 150] ; do
if [ $i -lt 10] ; then
uname =u00$i
else
uname=u$i
fi
useradd $uname
i = $(($i+1))
done
passwd 命令規定只能在終端上手動輸入,只有用stdin參數便可解決
作業: 從一表中將已知用戶名導入useradd
2.網絡配置
linux 下有兩套網絡配置,第一套為BSD方式,另一套是linux方式。linux中高級網絡功能只能用linux方式。
BSD方式:1.查看 ifconfig 網卡名 BSD中必須指定網卡名
注釋:
collisions 沖突 txqueuden 發送包的長度
網卡工作模式 mii-tool 媒體無關接口
ethtool+網卡名 查看命令更詳細(需要網卡驅動支持)
netstat –r 查看路由
查看網絡連接狀態
netstat -ant 查看TCP的所有網絡連接
-anu 查看UDP的所有套接字
一條TCP連接會產生兩個套接字,兩台機器均開。
ARP -n -n意思是不要進行反解 不轉成名字
查看DNS cat /etc/resolv.conf
2.配置IP
ifconfig 網卡名 ip地址
配置路由 route add -net 網絡地址 netmast x.x.x.x gw 網關
route add -host 網絡地址 netmast x.x.x.x dev 網卡
route del -net 網絡地址 netmast x.x.x.x gw 網關
route del -net 網絡地址 netmast x.x.x.x dev 網卡
缺省寫法: route add default gw 網關
route add default dev網卡
靜態ARP arp -s IP地址 MAC地址
linux 方式:
ip 命令
ip addr show 查看IP地址 簡寫為 ip ad sh
ip route sh 查看路由 簡寫為 ip ro sh
ip neigh sh 查看靜態ARP 簡寫為 ip ne sh
ipv6中取消了ARP 改用ICMP
具體配置:
ip ad add dev ip地址/掩碼長度
ip route add ip地址/掩碼長度 dev 網卡
ip route add ip地址/掩碼長度 via 網關地址
激活/禁止某網卡
ifconfig dev down/up
linux下的:
ip link set up dev eth0
ip link set down dev eth0
此設置都是臨時的,固化網絡配置,在linux下 主機名/缺省網關: 修改路徑
/etc/sysconfig/network
如果修改主機名順便把hosts文件也得改 /etc/hosts否則有時服務會啟動時掛起死等~~~~~~~~~~~~~~~~
固化IP 地址 /etc/sysconfig/network-scripts下的ifcfg-網卡名
例如: /etc/sysconfig/network-scripts/ifcfg-eth0
bootprotocol= static ##如果用動態IP則改成DHCP
ONBOOT=yes ##啟動時激活,設置思想:作為外網網卡應該為NO,因防火牆啟動之前將網卡先期啟動會有被攻擊的危險
靜態ARP固化
/etc/ethers
寫法: mac ip 例如 : 01:02:03:04:05:06 10.0.0.2
(小知識點:
萬用腳本:/etc/rc.local 不管什麼命令只要加在此,下次開機後便會自動運行,相當於autoexec.bat。在用戶登陸之前便已經運行,注:在此文件中加命令時不可阻塞,如果命令執行時間過長則加“$”將其弄到後台執行。
3.計劃任務 在linux和unix下是cron服務來實現的,每隔一分鐘檢查一次任務列表。
/etc/crontab
crontab 命令 -l (list)
-e (edit)
寫時間格式:時分日月周 命令
例如:
05 5 * * 1,3,5 ##每周一三五運行
技巧:計劃任務可用”,”“_””/”給分開
如果計劃任務不執行此時主要原因是路徑不對,看crontab便可知,PATH寫的便是,第二原因是終端:不能讀標准輸入和寫標准輸出,但可用重定向往文件中寫可以,不能使用終端如果要修改crontab文件則需要先停止cron服務。
/etc/rc.d/init.d/crond stop
修改~~~~~~~~~~~~~~~~~
/etc/rc.d/init.d/crond start
linux配置:4.top 命令詳解&進程管理
top 命令查看系統的資源狀況
load average 表示在過去的一段時間內有多少個進程企圖獨占CPU
zombie 進程 :不是異常情況。一個進程從創建到結束在最後那一段時間遍是僵屍。留在內存中等待父進程取的東西便是僵屍。任何程序都有僵屍狀態,它占用一點內存資源,僅僅是表象而已不必害怕。如果程序有問題有機會遇見,解決大批量僵屍簡單有效的辦法是重起。kill是無任何效果的
stop模式:與sleep進程應區別,sleep會主動放棄cpu,而stop是被動放棄cpu ,例單步跟蹤,stop(暫停)的進程是無法自己回到運行狀態的。
cpu states :
nice: 讓出百分比 irq :中斷處理占用
idle:空間占用百分比 iowait:輸入輸出等待(如果它很大說明外存有瓶頸,需要升級硬盤(SCSI))
Mem: 內存情況
設計思想:把資源省下來不用便是浪費,如添加內存後free值會不變,buff值會增大。 判斷物理內存夠不夠,看交換分區的使用狀態。
ps命令 列進程。列出所有進程
ps ax :tty值為“?”是守護進程,叫deamon 無終端,大多系統服務是此進程,內核態進程是看不到的,例木馬
看進程樹,以樹形方式現實進程列表敲 ps axf
init是1號進程,系統所有進程都是它派生的,殺不掉
ps axm :會把線程列出來
在linux下進程和線程是統一的,是輕量級進程的兩種方式。
ps axu :顯示進程的詳細狀態。
vsz:說此進程一共占用了多大物理內存。
rss:請求常駐內存多少
終止進程: kill pid 本質是協商退出!(並不是強制退出)
全: kill -信號 pid
kill –KILL pid 是強制退出。
例如編寫一kill殺不掉的程序
#!/bin/sh
while true j do
echo –n “.”
sleep 1
done
#!/bin/sh
trap “”15 ##捕獲15號進程,kill就是15號進程
while true j do
echo -n “.”
sleep 1
done
修改進程優先級:
nice 命令 每個進程都有優先權,權值越小優先級越高。
nice –調整值 命令 ##范圍“-20~19”
linux圖形界面的優先級並不是最高的,它僅是一進程
nice命令在root下可隨意調整,在普通用戶狀態下只能調低不能提高,不過還是可以恢復回去的。
局限性:必須敲命令之前敲nice ,它無法更改已經運行的程序的優先級。
如果要更改已經運行的用 renice 調整值 pid
即在線調整。
killall 命令: 殺死一系列進程,即殺死一系列由一個相同命令產生的進程例如killall fam
killall是根據命令名來殺的,kill以pid 來區別。
在top 裡面可以直接殺死進程,按“K“輸入PID可殺
按“R“可調整優先級
BSDunix 定義了32個信號 linux定義了64個信號。
5. 啟動管理
啟動順序: BIOS -> MBR -> 啟動扇區
MBR : 掃描分區表看哪個是可啟動分區,再將那個扇區放入內存。
GRUB有兩種裝法: 1. MBR 2.啟動扇區
GRUB有兩個基本技巧:
(1). 單用戶啟動模式: 見到GRUB啟動菜單時按“e“選”“kernel“打頭的那一行,再按“e”,然後在/ rhg後面加空格+“1” 再按“b”便以單用戶模式啟動了,輸入init 3便進入正常啟動模式。
在單用戶模式下可以更改root口令,有很大危險。
防護方法: 給grub加口令
vi /etc/grub.conf ##在timeout後添加一行
password=1234567 ##密碼
使生效:敲grub回車 等待一會 再敲quit
(2). GRUB—> linux內核 -> init進程 ->
1.進程指令運行級
2./etc/rc.local
3.虛擬終端
init配置文件 /etc/inittab
裡面有一說明 0 –halt
1- single
3- full mutiluser
5- X11
id:5:initdefault ##缺省進入5 X11模式
si::sysinit:/etc/rc.d/rc.sysinit ##系統啟動以後調用的第一個腳本,即init進程所調用的
trap ctrl – alt –delete
ca:ctrlaltdel:/bin/
在文字界面下敲init –q 來使配置 立即生效
注:屏蔽三鍵熱啟動是非常重要的
虛擬終端的添加/減少也在此修改(數量修改)
如果想把linux弄成指紋識別的替換掉getty和bgin即可。
6.文件包管理
文件包有 RPM包 源碼包 二進制包
rpm包格式: 軟件名-版本.平台.rpm
在http://rpmfind.net幾乎可以搜索到所有的rpm包
rpm包的安裝: rpm - i 軟件名.rpm
rpm -i –nodeps 軟件名.rpm ##不考慮依賴關系的安裝
檢查某個rpm包是否安裝用此命令: rpm –qa | grep 包名
刪除已安裝rpm rpm -e
強制刪除: rpm –e –nodeps 軟件名
源碼包:
格式: 軟件名-版本.tar.gz/軟件名-版本.tar.bz2
在進行源碼處理的時候都要將源碼拷在此處:/usr/load/src
解包:
tar –zxf 名稱 ##gz解壓
tar –jxf 名稱 ##bz2的解壓
運用:
進源碼包 à第一步 ./configure ##配置
第二步 make ##編譯
第三步 makeinstall ##安裝
大多書軟件都安裝到了/usr/local下
二進制包:
大多數都給制成一可執行文件,直接運行即可,而大多數都要求在X11下安裝
例:java虛擬機的安裝 (不是開放源碼的包)
7.GUI
linux下的圖形界面和windows圖形界面的區別有哪些
linux X是一協議,規定了unix下圖形終端,至今為X11R6 用XFree86軟件包來實現的,分為圖形終端和圖形主機,圖形終端為X服務器
大寫X回車便啟動一個圖形終端,監聽6000端口
X協議是可以基於TCP工作的,也可不基於TCP工作
XFree86提供了一個完整的服務器和幾個常用的基本程序
主機配置à在系統設置->登陸屏幕->把XDMCP啟用,注銷一次
主機 netstat –anu 查看177/udp
終端上敲: X –query 10.0.0.1回車
如廣播域中有好幾台X主機則用X –broadcast
在文字界面想進如圖形界面敲 init5
快捷鍵
ctrl + alt + “ +”
“-”可動態調整分辨率
ctrl + alt + “←”可強制退出圖形界面,在linux下X也僅僅是一個進程。
ctrl + alt + “F1~~~F6”回到文字界面
8硬件管理
查看CPU類型: /proc/cpuinfo
查看pci設備: lspci 表中能看到但linux不一定能驅動
查看usb設備: lsusb -v 顯示詳細列表,甚至電壓都有
設備驅動情況: dmesg
在proc目錄下有很多常用命令,在此還有以進程號為名的目錄,可在目錄中查看進程路徑,在純unix中僅有以進程名的子目錄,在linux中多些系統配置
9.磁盤配額
基本要點:1.針對某個分區(ext2、ext3、reiser、…fat不支持)2.對於塊的使用/文件個數限額
步驟:1.不考慮限額情況下把分區掛好
2.進入掛接點 做 : 目的: 對u1限10M 1000個文件。
對兩個文件 touch aquota.user aquota.group 加個“a”即高級
將兩個文件屬性改成600 chmod 600 aquota.user aquota.group
3.修改etc下的fstab vi /etc/fstab
在hda5這一行的defaults後面加一逗號寫上usrquota,grpquota ##基於用戶和組的限額。
4.重新掛接該點 mount - o remount /home ##不關機的前提下重新掛接一次
5.啟用限額 quotacheck –u –g /home ##意思是啟用之前檢查此點的使用情況(經驗:做限額要拿新分區來做)
quotaon -u –g /home(前五步是一次性的做完即好)
6.設置限額 edquota –u u1 回車後出現一表
解釋表:
block – 以塊為單位,已用了多少
soft/hard 軟/硬限額
inodes 文件實體
修改後存盤退出即可。
edquota命令還有一種非交互性的
edquota –p 原型用戶 -u 用戶名 ##即將原型擁護的限額復制給新用戶。
10.日志管理
1./var/bg/messages 此為主日志文件。注:出現服務器異常時要去看日志文件,調試服務器失敗第一反應應去查看日志,而不是重裝系統
2.syslog服務 命令: logger 例如:logger hello 便向日志文件添加一行“hello”
日志配置文件:/etc/syslog.conf
格式: 消息分類 消息去向
來源.級別 /var/log/
常用技巧:就地打印日志 將日志寫到/dev/lp0 行式打印機打印出去
*遠程日志: syslog服務器
配置syslog服務器
例如: 10.0.0.1為syslog服務器 10.0.0.111 為客戶機
步驟: 1.服務端配置
vi /etc/sysconfig/syslog
sysLOGD_OPTIONS = “-r –m 0” ## -r 意思是接受遠程的日志
重起/etc/rc.d/init.d/syslog restart
2.客戶端配置
vi /etc/syslog.conf
在消息去向處添加 @10.0.0.1
存盤退出重起服務
/etc/rc.d/init.d/syslog restart
(知識點:直接查看日志尾部: tail /var/log/messages)
日志服務使用的端口是:514/udp
syslog日志服務器端不能根據源地址過濾,為了防止外網向日志服務器寫垃圾信息要在網絡拓撲中解決,網關上做限制外網訪問514端口。
摘自:chinaunix.net