溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)運維常用命令及常識

發(fā)布時間:2021-09-09 09:51:34 來源:億速云 閱讀:149 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Linux系統(tǒng)運維常用命令及常識”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

1 文件管理2 軟件管理3 系統(tǒng)管理
4 服務(wù)管理5 網(wǎng)絡(luò)管理6 磁盤管理
7 用戶管理8 腳本相關(guān)9 服務(wù)配置
==================================

----------------------------------
1 文件管理
----------------------------------
創(chuàng)建空白文件
touch
不提示刪除非空目錄
rm -rf 目錄名
(-r:遞歸刪除-f 強制)
##################################
恢復(fù)rm 刪除的文件(ext3)
查看磁盤分區(qū)格式
df -T
卸載掛載
umount /data/
ext3grep /dev/sdb1 --ls --inode 2
記錄信息繼續(xù)查找目錄下文件inode 信息
ext3grep /dev/sdb1 --ls --inode 131081 # 此處是inode
記錄下inode 信息開始恢復(fù)目錄
ext3grep /dev/sdb1 --restore-inode 49153
##################################
windows 文本轉(zhuǎn)linux 文本
dos2unix
linux 文本轉(zhuǎn)windows 文本
unix2dos
轉(zhuǎn)換編碼
iconv -f gbk -t utf8 原.txt > 新.txt
查看md5 值
md5sum
硬鏈接
ln
符號連接
ln -s
查看上下翻頁且顯示行號
cat ? | nl |less
q 退出
結(jié)束狀態(tài)
ctrl+z
查看文件開頭內(nèi)容
head
查看文件結(jié)尾內(nèi)容
tail -f # 監(jiān)視日志文件
檢查文件類型
file
重命名
rename
rename source_pattern target_pattern source_files
更改默認權(quán)限
umask
按數(shù)字排序
sort -n
按數(shù)字倒敘
sort -nr
過濾重復(fù)行
sort -u
刪除重復(fù)的行
uniq
重復(fù)的行出現(xiàn)次數(shù)
uniq -c
只顯示不重復(fù)行
uniq -u
將兩個文件合并用tab 鍵分隔開
paste a b
將兩個文件合并指定'+'符號隔開
paste -d'+' a b
將多行數(shù)據(jù)合并到一行用tab 鍵隔開
paste -s a
設(shè)置隱藏屬性
chattr [+-=] [ASacdistu] 文件或目錄
向下分面器
more
搜索
locate 字符串
查看行數(shù)
wc -l
實時某個目錄下查看最新改動過的文件
watch -d -n 1 'df; ls -FlAt /path'
快速備份一個文件
cp filename{,.bak}
##################################
配置編輯器
gconf-editor
vi 配置文件
vi /etc/vimrc
編輯文件
vim
打開行號
:set nu
取消行號
:set nonu
跳轉(zhuǎn)到200
200G
取消高亮
:nohl
設(shè)置自動縮進
:set autoindent
查看文本格式
set ff
改為unix 格式
set binary
向前翻頁
ctrl+ U
向后翻頁
ctrl+ D
全部替換
g/字符1/s//字符2/g
%s/字符1/字符2/g
# 普通用戶打開文檔不能保存
# tee 是一個把stdin 保存到文件的小工具,而%,是vim 當中一個只讀寄存器的名字,總保存著當
前編輯文件的文件路徑
:w !sudo tee %
##################################
按文件名查找
find /etc -name http
查找某一類型文件
find . -type f
按照文件權(quán)限查找
find / -perm
按照文件屬主查找
find / -user
按照文件所屬的組來查找文件
find / -group
文件使用時間在N 天以內(nèi)
find / -atime -n
文件使用時間在N 天以前
find / -atime +n
文件內(nèi)容改變時間在N 天以內(nèi)
find / -mtime -n
文件內(nèi)容改變時間在N 天以前
find / -mtime +n
文件狀態(tài)改變時間在N 天前
find / -ctime +n
文件狀態(tài)改變時間在N 天內(nèi)
find / -ctime -n
# linux 文件無創(chuàng)建時間
# Access 使用時間
# Modify 內(nèi)容修改時間
# Change 狀態(tài)改變時間(權(quán)限、屬主)
查找文件長度大于1M 字節(jié)的文件
find / -size +1000000c -print
按名字查找文件傳遞給-exec 后命令
find /etc -name "passwd*" -exec grep "xuesong" {} \;
查找文件名,不取路徑
find . -name 't*' -exec basename {} \;
##################################
====================================================================
----------------------------------
2 軟件管理
----------------------------------
解包tar
tar xvf 1.tar -C 目錄
打包tar
tar -cvf 1.tar *
查看tar
tar tvf 1.tar
給tar 追加文件
tar -rvf 1.tar 文件名
解包gz
tar zxvpf gz.tar.gz
打包gz
tar zcvpf gz.tar.gz
查看gz
tar ztvpf gz.tar.gz
解壓bzip2
bzip2 -dv 1.tar.bz2
解壓gzip 到tar
gzip -dv 1.tar.gz
壓縮tar 到gz
gzip -v 1.tar
bzip2 壓縮
bzip2 -v 1.tar
查看bzip2
bzcat
rpm 安裝
rpm -ivh
卸載
rpm -e lynx
強制卸載
rpm -e lynx --nodeps
測試
rpm --test lynx
查看所有安裝的rpm 包
rpm -qa
查找包是否安裝
rpm -qa | grep http
解壓zip
unzip zip.zip
壓縮zip
zip zip.zip *
rar3.6 下載地址
https://cache.yisu.com/upload/information/20210312/310/132911.jpg
解壓rar 包
unrar x rar.rar
7z 壓縮
7z a 7z.7z *
7z 解壓
7z e 7z.7z
查看字符行
zgrep 字符1.gz
打包/home, /etc ,但排除/home/dmtsai
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
在/home 當中,比2005/06/01 新的文件才備份
tar -N "2005/06/01" -zcvf home.tar.gz /home
下載
wgetrc
文本上網(wǎng)
lynx
制作鏡像
cp -v /dev/dvd /software/rhel4.6.iso9660
清除編譯結(jié)果
make clean
源碼安裝
./configure --help |less
./configure --prefix=/usr/local/
make
make install
perl 程序編譯
perl Makefile.PL
make
make test
make install
perl 程序編譯
python file.py
編譯c 程序
gcc -g hello.c -o hello
====================================================================
----------------------------------
3 系統(tǒng)管理
----------------------------------
終端鎖屏Ctrl+S
解鎖屏Ctrl+Q
PS1 環(huán)境變量控制提示顯示
PS1='[\u@ \H \w \A \@#]\$'
開機啟動模式
vi /etc/inittab
查找命令的目錄
whereis
查看當前要執(zhí)行的命令所在的路徑
which
讓部命令后臺運行
命令&
將前臺放入后臺(暫停)
ctrl+z
查看后臺運行程序
jobs
啟動后臺暫停進程
bg 2
調(diào)回后臺進程
fg 2
后臺運行不受shell 退出影響
nohup cmd &
清空整個屏幕
clear
重新初始化屏幕
reset
查詢用過的命令默認1000 條
history
清楚記錄命令
history -c
cat /root/.bash_history
查看登陸過的用戶信息
last
last -n user
who /var/log/wtmp
列出登錄系統(tǒng)失敗的用戶相關(guān)信息
lastb -a
/var/log/btmp
防火墻日志
tail -f /var/log/messages
ssh 日志
tail -f /var/log/secure
隨機生成密碼
mkpasswd
-l 位數(shù)-C 大小-c 小寫-d 數(shù)字-s 特殊字符
mkpasswd -l 8 -C 2 -c 2 -d 4 -s 0
當前在線用戶
who
w
查看當前用戶名
whoami
查看登陸用戶名
logname
顯示月歷
cal
查看服務(wù)器啟動時間
uptime
設(shè)日期
date -s 20091112
設(shè)時間
date -s 18:30:50
同步時間
/usr/sbin/ntpdate stdtime.gov.hk
7 天前日期
`date -d "7 days ago" +%Y%m%d`
日期格式轉(zhuǎn)換
`date +%Y-%m-%d -d '20110902'`
日期和時間
date +%Y-%m-%d_%X
查看時間
hwclock
賬戶影子文件
/etc/shadow
列出所有語系
locale -a
修改語言
LANG=en
修改編碼
vi /etc/sysconfig/i18n
utf-8 <---> GBK
強制字符集
export LC_ALL=C
查詢靜態(tài)主機名
vi /etc/hosts
最大連接
/etc/security/limits.conf
grub 開機啟動項添加
/etc/grub.conf
title ms-dos
rootnoverify (hd0,0)
chainloader +1
別名
alias
監(jiān)測命令
watch
查看Linux 版本信息
uname -a
cat /proc/version
cat /etc/issue
lsb_release -a
查看cpu 信息
more /proc/cpuinfo
查看cpu 型號和邏輯核心數(shù)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cpu 運行的位數(shù)
getconf LONG_BIT
物理cpu 個數(shù)
cat /proc/cpuinfo | grep physical | uniq -c
結(jié)果大于0 支持64 位
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
查看cpu 是否支持虛擬化
cat /proc/cpuinfo|grep flags
pae 支持半虛擬化Intel VT 支持全虛擬化
查看內(nèi)存信息
more /proc/meminfo
查看全面硬件信息
dmidecode
查看服務(wù)器型號
dmidecode | grep "Product Name"
查看軟raid 信息
cat /proc/mdstat
查看硬raid 信息
cat /proc/scsi/scsi
查看硬件信息
lspci
查看是否支持raid
lspci|grep RAID
顯示開機信息
dmesg
進程樹
pstree
每隔一秒報告虛擬內(nèi)存統(tǒng)計信息9 次
vmstat 1 9
把180 號進程的優(yōu)先級加1
renice +1 180
終止某個PID 進程
kill -9 PID
指定三天后下午5:00 執(zhí)行/bin/ls
at 5pm + 3 days /bin/ls
編輯周期任務(wù)
crontab -e
分鐘小時天月星期命令或腳本
01 1-3/2 * * * 命令或腳本
直接將命令寫入周期任務(wù)
echo "40 7 * * 2 /root/sh">>/var/spool/cron/root
查看自動周期性任務(wù)
crontab -l
刪除自動周期性任務(wù)
crontab -r
禁止或允許用戶使用周期任務(wù)
cron.deny 和cron.allow
啟動自動周期性服務(wù)
service crond 啟動|停止|重啟|狀態(tài)>
是否打開了某個端口
netstat -anlp | grep 端口號
查看監(jiān)聽
netstat -anlp
sudo 命令權(quán)限添加
visudo
用戶別名(可用all)=NOPASSWD:命令1,命令2
wangming linuxfan=NOPASSWD:/sbin/apache start,/sbin/apache restart
UserName ALL=(ALL) ALL
制作補丁
diff suzu.c suzu2.c > sz.patch
安裝補丁
patch suzu.c < sz.patch
顯示打開指定文件的所有進程
lsof 文件
查看端口的進程
lsof -i :32768
顯示消耗內(nèi)存最多的10 個運行中的進程,以內(nèi)存使用量排序.cpu +3
ps aux |grep -v USER | sort -nk +4 | tail
查看內(nèi)核模塊
lsmod
yum 擴展源
http://download.fedoraproject.org/pub/epel
wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5-4.noarch.rpm
升級所有包版本,依賴關(guān)系,系統(tǒng)版本內(nèi)核都升級
yum -y update
升級指定的軟件包
yum -y update 軟件包名
不改變軟件設(shè)置更新軟件,系統(tǒng)版本升級,內(nèi)核不改變
yum -y upgrade
yum 搜索相關(guān)包
yum search mail
會改變配置文件,改變舊的依賴關(guān)系,改變系統(tǒng)版本
dist-upgrade
編輯啟動項
/boot/grub/grub.conf
開機啟動腳本順序
/etc/profile
/etc/profile.d/*.sb
~/bash_profile
~/.bashrc
/etc/bashrc
--------------------------------------------------------------------
top
前五行是系統(tǒng)整體的統(tǒng)計信息。
第一行是任務(wù)隊列信息,同uptime 命令的執(zhí)行結(jié)果。其內(nèi)容如下:
01:06:48 當前時間
up 1:22 系統(tǒng)運行時間,格式為時:分
1 user 當前登錄用戶數(shù)
load average: 0.06, 0.60, 0.48 系統(tǒng)負載,即任務(wù)隊列的平均長度。
三個數(shù)值分別為1 分鐘、5 分鐘、15 分鐘前到現(xiàn)在的平均值。
第二、三行為進程和CPU 的信息。當有多個CPU 時,這些內(nèi)容可能會超過兩行。內(nèi)容如下:
Tasks: 29 total 進程總數(shù)
1 running 正在運行的進程數(shù)
28 sleeping 睡眠的進程數(shù)
0 stopped 停止的進程數(shù)
0 zombie 僵尸進程數(shù)
Cpu(s): 0.3% us 用戶空間占用CPU 百分比
1.0% sy 內(nèi)核空間占用CPU 百分比
0.0% ni 用戶進程空間內(nèi)改變過優(yōu)先級的進程占用CPU 百分比
98.7% id 空閑CPU 百分比
0.0% wa 等待輸入輸出的CPU 時間百分比
0.0% hi
0.0% si
最后兩行為內(nèi)存信息。內(nèi)容如下:
Mem: 191272k total 物理內(nèi)存總量
173656k used 使用的物理內(nèi)存總量
17616k free 空閑內(nèi)存總量
22052k buffers 用作內(nèi)核緩存的內(nèi)存量
Swap: 192772k total 交換區(qū)總量
0k used 使用的交換區(qū)總量
192772k free 空閑交換區(qū)總量
123988k cached 緩沖的交換區(qū)總量。
內(nèi)存中的內(nèi)容被換出到交換區(qū),而后又被換入到內(nèi)存,但使用過的交換區(qū)尚未被覆蓋,
該數(shù)值即為這些內(nèi)容已存在于內(nèi)存中的交換區(qū)的大小。
相應(yīng)的內(nèi)存再次被換出時可不必再對交換區(qū)寫入。
進程信息區(qū)
統(tǒng)計信息區(qū)域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。
序號列名含義
a PID 進程id
b PPID 父進程id
c RUSER Real user name
d UID 進程所有者的用戶id
e USER 進程所有者的用戶名
f GROUP 進程所有者的組名
g TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為?
h PR 優(yōu)先級
i NI nice 值。負值表示高優(yōu)先級,正值表示低優(yōu)先級
j P 最后使用的CPU,僅在多CPU 環(huán)境下有意義
k %CPU 上次更新到現(xiàn)在的CPU 時間占用百分比
l TIME 進程使用的CPU 時間總計,單位秒
m TIME+ 進程使用的CPU 時間總計,單位1/100 秒
n %MEM 進程使用的物理內(nèi)存百分比
o VIRT 進程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
p SWAP 進程使用的虛擬內(nèi)存中,被換出的大小,單位kb。
q RES 進程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
r CODE 可執(zhí)行代碼占用的物理內(nèi)存大小,單位kb
s DATA 可執(zhí)行代碼以外的部分(數(shù)據(jù)段+棧)占用的物理內(nèi)存大小,單位kb
t SHR 共享內(nèi)存大小,單位kb
u nFLT 頁面錯誤次數(shù)
v nDRT 最后一次寫入到現(xiàn)在,被修改過的頁面數(shù)。
w S 進程狀態(tài)。
D=不可中斷的睡眠狀態(tài)
R=運行
S=睡眠
T=跟蹤/停止
Z=僵尸進程
x COMMAND 命令名/命令行
y WCHAN 若該進程在睡眠,則顯示睡眠中的系統(tǒng)函數(shù)名
z Flags 任務(wù)標志,參考sched.h
##################################
iptables
內(nèi)建三個表:nat mangle 和filter
filter 預(yù)設(shè)規(guī)則表,有INPUT、FORWARD 和OUTPUT 三個規(guī)則鏈
INPUT 進入
FORWARD 轉(zhuǎn)發(fā)
OUTPUT 出去
ACCEPT 將封包放行
REJECT 攔阻該封包
DROP 丟棄封包不予處理
-A 在所選擇的鏈(INPUT 等)末添加一條或更多規(guī)則
-D 刪除一條
-E 修改
-p tcp、udp、icmp 0 相當于所有all !取反
-P 設(shè)置缺省策略(與所有鏈都不匹配強制使用此策略)
-s IP/掩碼(IP/24) 主機名、網(wǎng)絡(luò)名和清楚的IP 地址!取反
-j 目標跳轉(zhuǎn),立即決定包的命運的專用內(nèi)建目標
-i 進入的(網(wǎng)絡(luò))接口[名稱] eth0
-o 輸出接口[名稱]
-m 模塊
--sport 源端口
--dport 目標端口
#配置文件
vi /etc/sysconfig/iptables
#將防火墻中的規(guī)則條目清除掉
iptables -F
#注意:iptables -P INPUT ACCEPT
#導(dǎo)入防火墻規(guī)則
iptables-restore <規(guī)則文件
#保存防火墻設(shè)置
/etc/init.d/iptables save
#重啟防火墻服務(wù)
/etc/init.d/iptables restart
#查看規(guī)則
iptables -L -n
iptables -L -n --line-numbers
#從某個規(guī)則鏈中刪除一條規(guī)則
iptables -D INPUT --dport 80 -j DROP
iptables -D INPUT 8
#取代現(xiàn)行規(guī)則
iptables -R INPUT 8 -s 192.168.0.1 -j DROP
#插入一條規(guī)則
iptables -I INPUT 8 --dport 80 -j ACCEPT
#查看轉(zhuǎn)發(fā)
iptables -t nat -nL
#在內(nèi)核里打開ip 轉(zhuǎn)發(fā)功能
echo 1 > /proc/sys/net/ipv4/ip_forward
##################################
#允許本地回環(huán)
iptables -A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
#允許已建立的或相關(guān)連的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#開放對外訪問
iptables -P OUTPUT ACCEPT
#指定某端口針對IP 開放
iptables -A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
#允許的IP 或IP 段訪問
iptables -A INPUT -s 192.168.10.37 -p tcp -j ACCEPT
#開放對外開放端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#關(guān)閉入口
iptables -P INPUT DROP
#關(guān)閉轉(zhuǎn)發(fā)
iptables -P FORWARD DROP
##################################
iptables 規(guī)則文件
# Generated by iptables-save v1.2.11 on Fri Feb 9 12:10:37 2007
*filter
:INPUT DROP [637:58967]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5091:1301533]
#允許的IP 或IP 段訪問
-A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
-A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT
#開放對外開放端口
-A INPUT -p tcp --dport 80 -j ACCEPT
#指定某端口針對IP 開放
-A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
#拒絕所有協(xié)議(INPUT 允許的情況)
#-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
# 允許已建立的或相關(guān)連的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#拒絕ping
-A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Fri Feb 9 12:10:37 2007
##################################
常用實例
#允許在IP 訪問指定端口
iptables -A INPUT -s 192.168.62.1 -p tcp --dport 22 -j ACCEPT
#禁止使用某端口
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 31 -j REJECT
#禁止QQ 端口
iptables -D FORWARD -p udp --dport 8000 -j REJECT
#禁止icmp 端口
#除192.168.62.1 外,禁止其它人ping 我的主機
iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP
#其它情況不允許
iptables -A INPUT -i eth0 -j DROP
#禁止指定IP 訪問
iptables -A INPUT -p tcp -s IP -j DROP
#禁止指定IP 訪問端口
iptables -A INPUT -p tcp -s IP --dport port -j DROP
#阻止所有沒有經(jīng)過你系統(tǒng)授權(quán)的TCP 連接
iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP
#添加網(wǎng)段轉(zhuǎn)發(fā)
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
#IP 包流量限制
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -j DROP
#端口映射
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.62.0/24 --dport 80 -j REDIRECT --to-ports
3128
#列出某規(guī)則鏈中的所有規(guī)則
iptables -L INPUT
#刪除某個規(guī)則鏈,不加規(guī)則鏈,清除所有非內(nèi)建的
iptables -X allowed
#將封包計數(shù)器歸零
iptables -Z INPUT
#定義新的規(guī)則鏈
iptables -N allowed
#定義過濾政策
iptables -P INPUT DROP
#修改某自訂規(guī)則鏈的名稱
iptables -E allowed disallowed
#比對通訊協(xié)議類型是否相符
#-p ! tcp 排除tcp 以外的udp、icmp。-p all 所有類型
iptables -A INPUT -p tcp
#比對封包的來源IP
#192.168.0.0/24 ! 反向?qū)Ρ?br/>iptables -A INPUT -s 192.168.1.1
#比對封包的目的地IP
iptables -A INPUT -d 192.168.1.1
#比對封包是從哪片網(wǎng)卡進入
#eth+表示所有的網(wǎng)卡
iptables -A INPUT -i eth0
#比對封包要從哪片網(wǎng)卡送出
iptables -A FORWARD -o eth0
#比對某段時間內(nèi)封包的平均流量
#例子是用來比對:每小時平均流量是否超過一次3 個封包。除了每小時平均次外,也可以每
秒鐘、每分鐘或每天平均一次,默認值為每小時平均一次,參數(shù)如后: /second、/minute、/day。
除了進行封數(shù)量的比對外,設(shè)定這個參數(shù)也會在條件達成時,暫停封包的比對動作,以避免因
駭客使用洪水攻擊法,導(dǎo)致服務(wù)被阻斷。
iptables -A INPUT -m limit --limit 3/hour
#比對瞬間大量封包的數(shù)量
#例子是用來比對一次同時涌入的封包是否超過5 個(這是默認值),超過此上限的封包將被直
接丟棄。使用效果同上。
iptables -A INPUT -m limit --limit-burst 5
#比對來自本機的封包
#是否為某特定使用者所產(chǎn)生的,這樣可以避免服務(wù)器使用root 或其它身分將敏感數(shù)據(jù)傳送出,
可以降低系統(tǒng)被駭?shù)膿p失??上н@個功能無法比對出來自其它主機的封包。
iptables -A OUTPUT -m owner --uid-owner 500
#比對來自本機的封包
iptables -A OUTPUT -m owner --gid-owner 0
iptables -A OUTPUT -m owner --pid-owner 78
iptables -A OUTPUT -m owner --sid-owner 100
#用來比對聯(lián)機狀態(tài)
iptables -A INPUT -m state --state RELATED,ESTABLISHED
聯(lián)機狀態(tài)共有四種:INVALID、ESTABLISHED、NEW 和RELATED。
#-j 參數(shù)指定進行的處理動作,處理動作包括: ACCEPT、REJECT、DROP、REDIRECT、
MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,說明:
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
#可以傳送的封包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset
REDIRECT 將封包重新導(dǎo)向到另一個端口(PNAT)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
MASQUERADE 改寫封包來源IP 為防火墻NIC IP
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
LOG 將封包相關(guān)訊息紀錄在/var/log 中
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
SNAT 改寫封包來源IP 為某特定IP 或IP 范圍
iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source
194.236.50.155-194.236.50.160:1024-32000
DNAT 改寫封包目的地IP 為某特定IP 或IP 范圍
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination
192.168.1.1-192.168.1.10:80-100
MIRROR 鏡射封包
QUEUE 中斷過濾程序
RETURN 結(jié)束在目前規(guī)則煉中的過濾程序
MARK 將封包標上某個代號
##################################
iptables 配置實例
允許某段IP 訪問任何端口
iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT
設(shè)定預(yù)設(shè)規(guī)則(拒絕所有的數(shù)據(jù)包,再允許需要的,如只做WEB 服務(wù)器.還是推薦三個鏈都是
DROP)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
(注:意直接設(shè)置這三條完已經(jīng)掉線了)
開啟22 端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果OUTPUT 設(shè)置成DROP 的,要寫上下面一條
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
(注:,不寫導(dǎo)致無法SSH.其他的端口一樣,OUTPUT 設(shè)置成DROP 的話,也要添加一條鏈)
如果開啟了web 服務(wù)器,OUTPUT 設(shè)置成DROP 的話,同樣也要添加一條鏈
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
做WEB 服務(wù)器,開啟80 端口,其他同理
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
做郵件服務(wù)器,開啟25,110 端口
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
允許icmp 包通過,允許ping
iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT 設(shè)置成DROP 的話)
iptables -A INPUT -p icmp -j ACCEPT (INPUT 設(shè)置成DROP 的話)
允許loopback!(不然會導(dǎo)致DNS 無法正常關(guān)閉等問題)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
====================================================================
----------------------------------
4 服務(wù)管理
----------------------------------
啟動sendmail 服務(wù)
./sendmail start
/etc/init.d/sendmail start
關(guān)閉sendmail 服務(wù)
./sendmail stop
查看sendmail 服務(wù)當前狀態(tài)
./sendmail status
發(fā)送郵件
echo 內(nèi)容| /bin/mail -s "標題" 收件箱
打開服務(wù)列表需要打*
ntsysv
讓某個服務(wù)不自動啟動35 指的是運行級別
httpd:chkconfig --level 35 httpd off
讓某個服務(wù)自動啟動
httpd:chkconfig --level 35 httpd on
查看所有服務(wù)的啟動狀態(tài)
chkconfig --list
查看某個服務(wù)的啟動狀態(tài)
chkconfig --list |grep httpd
查看服務(wù)的狀態(tài)
chkconfig –-list [服務(wù)名稱]
設(shè)置非獨立服務(wù)啟狀態(tài)
chkconfig 服務(wù)名on|off|set
開啟mysql 后臺運行
/usr/local/mysql/bin/mysqld_safe --user=mysql &
開機啟動執(zhí)行
vi /etc/rc.d/rc.local
開機啟動和關(guān)機關(guān)閉服務(wù)連接
/etc/rc.d/rc3.d/S55sshd
# S 開機start K 關(guān)機stop 55 級別后跟服務(wù)名
ln -s -f /usr/local/httpd/bin/apachectl /etc/rc.d/rc3.d/S15httpd
====================================================================
----------------------------------
5 網(wǎng)絡(luò)管理
----------------------------------
##################################
本機網(wǎng)絡(luò)配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
HWADDR=00:0C:29:3F:E1:EA
IPADDR=192.168.1.55
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
TYPE=Ethernet
GATEWAY=192.168.1.1
##################################
增加邏輯IP 地址
ifconfig eth0:0 192.168.1.221 netmask 255.255.255.0
查看路由表
route
添加路由表
route add default gw 192.168.1.1 dev eth0
設(shè)置DNS
vi /etc/resolv.conf
禁用網(wǎng)卡
ifconfig eth0 down
啟用網(wǎng)卡
ifconfig eth0 up
ifup eth0:0 up
測試跳數(shù)
traceroute www.baidu.com (linux)
tracert www.baidu.com (windows)
根據(jù)IP 和主機最大數(shù)計算掩碼
ipcalc -m "$ip" -p "$num"
用wget 的遞歸方式下載整個網(wǎng)站
wget --random-wait -r -p -e robots=off -U Mozilla www.example.com
通過DNS 來讀取Wikipedia 的hacker 詞條
dig +short txt hacker.wp.dg.cx
host -t txt hacker.wp.dg.cx
rz ssh 小文件上傳
sz ssh 小文件下載
從linux ssh 登錄另一臺linux
ssh -p 22 wang@192.168.1.209
利用ssh 操作遠程主機
ssh -p 22 root@192.168.1.209 環(huán)境變量中腳本
把本地文件拷貝到遠程主機
scp -P 22 文件root@ip:/目錄
ssh 連接不提示yes
ssh -o StrictHostKeyChecking=no 192.168.70.130
把遠程指定文件拷貝到本地
scp root@192.168.1.209:遠程目錄本地目錄
通過SSH 掛載遠程主機上的文件夾
sshfs name@server:/path/to/folder /path/to/mount/point
卸載的話使用fusermount 命令
fusermount -u /path/to/mount/point
用DIFF 對比遠程文件跟本地文件
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
用SSH 創(chuàng)建端口轉(zhuǎn)發(fā)通道
ssh -N -L2001:remotehost:80 user@somemachine
嵌套使用SSH
ssh -t host_A ssh host_B
密鑰信任
ssh-keygen –t rsa
vi 用戶/.ssh/authorized_keys
遠程關(guān)掉一臺WINDOWS 機器
net rpc shutdown -I IP_ADDRESS -U username%password
禁ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
##################################
先ping 在掃描主機開放端口
nmap -PT 192.168.1.1-111
掃描出系統(tǒng)內(nèi)核版本
nmap -O 192.168.1.1
掃描端口的軟件版本
nmap -sV 192.168.1.1-111
半開掃描(通常不會記錄日志)
nmap -sS 192.168.1.1-111
不支持windows 的掃描(判斷是否是windows)
nmap -sF 192.168.1.1-111
nmap -sX 192.168.1.1-111
nmap -sN 192.168.1.1-111
不ping 直接掃描
nmap -P0 192.168.1.1-111
詳細信息
nmap -d 192.168.1.1-111
無法找出真正掃描主機(隱藏IP)
nmap -D 192.168.1.1-111
端口范圍
nmap -p 20-30,139,60000-
表示:掃描20 到30 號端口,139 號端口以及所有大于60000 的端口
組合掃描(不ping、軟件版本、內(nèi)核版本、詳細信息)
nmap -P0 -sV -O -v 192.168.30.251
##################################
====================================================================
----------------------------------
6 磁盤管理
----------------------------------
查看硬盤容量
df -h
查看磁盤分區(qū)格式
df -T
修改只讀文件系統(tǒng)為讀寫
mount -o remount,rw /
查看卷標
e2label /dev/sda5
創(chuàng)建卷標
e2label /dev/sda5 new-label
NTFS 添加卷標
ntfslabel -v /dev/sda8 new-label
ext2 分區(qū)轉(zhuǎn)ext3 分區(qū)
tune2fs -j /dev/sda
格式化分區(qū)
mkfs -t ext3 /dev/hda3
指定索引塊大小
mke2fs -b 2048 /dev/sda5
對文件系統(tǒng)修復(fù)
fsck -y /dev/sda6
查看超級塊的信息
dumpe2fs -h /dev/sda5
查看當前系統(tǒng)支持文件系統(tǒng)
cat /proc/filesystems
檢測硬盤狀態(tài)
smartctl -H /dev/sda
檢測硬盤信息
smartctl -i /dev/sda
檢測所有信息
smartctl -a /dev/sda
檢測目錄下所有文件大小
du -h 目錄
顯示當前目錄中子目錄的大小
du -h --max-depth=1
掛載光驅(qū)
mount -t iso9660 /dev/dvd /mnt
掛載鏡像文件
mount -o loop /software/rhel4.6.iso /mnt/
##################################
磁盤grub 開機引導(dǎo)項添加
/etc/grub.conf
title ms-dos
rootnoverify (hd0,0)
chainloader +1
##################################
建立軟RAID1
兩塊硬盤分區(qū)一樣,分別新建分區(qū)文件類型為software RAID
創(chuàng)建兩個就點擊raid 合并為RAID1,這里的掛載點為正常linux 目錄
查看raid 工作狀態(tài)
cat /proc/mdstat
兩個盤都加grub 引導(dǎo)
查看
cat /boot/grub/grub.conf
grub
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
修改grub 啟動項配置文件
vi /boot/grub/grub.conf
復(fù)制title CentOS 到最后的四行
在下面粘貼修改為剛才新加的引導(dǎo)(hd1,0)。
查看分區(qū)
sfdisk -d /dev/hda
導(dǎo)出A 盤分區(qū)列表
sfdisk -d /dev/hda > fq.hda
將分區(qū)列表導(dǎo)入到新加的硬盤
sfdisk /dev/hdb < fq.hda
恢復(fù)新掛載的硬盤分區(qū)
mdadm /dev/md1 -a /dev/hdb5
# raid5 可利用lvm 擴容
##################################
新硬盤掛載
fdisk /dev/sdc
p # 打印分區(qū)
d # 刪除分區(qū)
n # 創(chuàng)建分區(qū),(一塊硬盤最多4 個主分區(qū),擴展占一個主分區(qū)位置。p 主分區(qū)e 擴展)
w # 保存退出
mkfs -t ext3 -L 卷標/dev/sdc1 # 格式化相應(yīng)分區(qū)
mount /dev/sdc1 /mnt # 掛載
添加開機掛載分區(qū)
vi /etc/fstab
用卷標掛載
LABEL=/data /data ext3 defaults 1 2
用真實分區(qū)掛載
/dev/sdb1 /data4 ext3 defaults 1 2
第一個數(shù)字"1"該選項被"dump"命令使用來檢查一個文件系統(tǒng)應(yīng)該以多快頻率進行轉(zhuǎn)儲,若不需
要轉(zhuǎn)儲就設(shè)置該字段為0
第二個數(shù)字"2"該字段被fsck 命令用來決定在啟動時需要被掃描的文件系統(tǒng)的順序,根文件系統(tǒng)
"/"對應(yīng)該字段的值應(yīng)該為1,其他文件系統(tǒng)應(yīng)該為2。若該文件系統(tǒng)無需在啟動時掃描則設(shè)置該
字段為0
##################################
====================================================================
----------------------------------
7 用戶管理
----------------------------------
建立用戶
useradd xuesong
修改密碼
passwd 用戶
echo "xuesong" | passwd xuesong --stdin
查找用戶顯示信息
finger
添加組
groupadd
修改文件擁有者(R 遞歸)
chown -R
修改所有者用戶中包含點"."
chown y\.li:mysql
修改用戶組
chgrp
修改用戶名
usermod -l 新用戶名老用戶名
修改用戶所屬組
usermod -g user group
修改用戶家目錄
usermod -d 目錄-m 用戶
將用戶添加到附加組
usermod -G user group
刪除帳號及家目錄
userdel -r
指定組并不允許登錄的用戶
useradd -g www -M -s /sbin/nologin www
切換用戶執(zhí)行
su - user -c "
#命令1
"
====================================================================
----------------------------------
8 腳本相關(guān)
----------------------------------
##################################
正則表達式
^ 行首定位
$ 行為定位
. 匹配除換行符以外的任意字符
* 匹配0 或多個重復(fù)字符
+ 重復(fù)一次或更多次
? 重復(fù)零次或一次
[] 匹配一組中任意一個字符
[^] 匹配不在指定組內(nèi)的字符
\ 用來轉(zhuǎn)義元字符
\< 詞首定位符(支持vi 和grep)
\<love
\> 詞尾定位符(支持vi 和grep)
love\>
x\{m\} 重復(fù)出現(xiàn)m 次
x\{m,\} 重復(fù)出現(xiàn)至少m 次
x\{m,n\} 重復(fù)出現(xiàn)至少m 次不超過n 次
X? 匹配出現(xiàn)零次或一次的大寫字母X
X+ 匹配一個或多個字母X
(abc|def)+ 匹配一連串的(最少一個) abc 或def;abc 和def 將匹配
\d 匹配任意一位數(shù)字
\D 匹配任意單個非數(shù)字字符
\w 匹配任意單個字母數(shù)字字符,同義詞是[:alnum:]
\s 匹配任意的空白符
\b 匹配單詞的開始或結(jié)束
[:alpha:] 代表所有字母不論大小寫
[:lower:] 表示小寫字母
[:upper:] 表示大寫字母
[:digit:] 表示數(shù)字字符
() 括號內(nèi)的字符為一組
##################################
基本流程結(jié)構(gòu)
if [ $a == $b ]
then
echo "等于"
else
echo "不等于"
fi
##################################
case $xs in
0) echo "0" ;;
1) echo "1" ;;
*) echo "其他" ;;
esac
##################################
num=1
# while true 等同while :
while [ $num -lt 10 ]
do
echo $num
((num=$num+2))
done
##################################
grep a a.txt | while read a
do
echo $a
done
##################################
w=`awk -F ":" '{print $1}' c`
for d in $w
do
$d
done
##################################
for ((i=0;i<${#o[*]};i++))
do
echo ${o[$i]}
done
##################################
until 循環(huán)# 當command 不為0 時
until command
do
body
done
##################################
流程控制
break N # 跳出幾層循環(huán)
continue N # 跳出幾層循環(huán),循環(huán)次數(shù)不變
continue # 重新循環(huán)次數(shù)不變
##################################
變量
將變量A 賦值為字串
A="a b c def"
A=`命令`
間接調(diào)用
eval a=\$$a
將變量A 定義為組數(shù)
A=(a b c def)
set a1 a2 a3 a4
$1 $2 $*
在子shell 中運行
(a=bbk)
定義變量類型
declare 或者typeset
-r 只讀(readonly 一樣)
-i 整形
-a 數(shù)組
-f 函數(shù)
-x export
declare -i n=0
env # 查看環(huán)境變量
env | grep "name" # 查看定義的環(huán)境變量
set # 查看環(huán)境變量和本地變量
read name # 輸入變量
readonly name # 把name 這個變量設(shè)置為只讀變量,不允許再次設(shè)置
readonly # 查看系統(tǒng)存在的只讀文件
export name # 變量name 由本地升為環(huán)境
export name="RedHat" # 直接定義name 為環(huán)境變量
export Stat$nu=2222 # 變量引用變量賦值
unset name # 變量清除
export -n name # 去掉只讀變量
shift # 用于移動位置變量,調(diào)整位置變量,使$3 的值賦給$2.$2 的值賦予$1
name + 0 # 將字符串轉(zhuǎn)換為數(shù)字
number " " # 將數(shù)字轉(zhuǎn)換成字符串
常用系統(tǒng)變量
$0 # 腳本啟動名(包括路徑)
basename $0 # 只取腳本名
$n # 當前程式的第n 個參數(shù),n=1,2,…9
$* # 當前程式的所有參數(shù)(不包括腳本本身)
$# # 當前程式的參數(shù)個數(shù)(不包括腳本本身)
$$ # 當前程式的PID
$! # 執(zhí)行上一個指令的PID
$? # 執(zhí)行上一個指令的返回值
變量引用技巧${}
${name:+value} # 如果設(shè)置了name,就把value 顯示,未設(shè)置則為空
${name:-value} # 如果設(shè)置了name,就顯示它,未設(shè)置就顯示value
${name:?value} # 未設(shè)置提示用戶錯誤信息value
${name:=value} # 如未設(shè)置就把value 設(shè)置并顯示<寫入本地中>,
${#A} # 可得到變量中字節(jié)
${#A[*]} # 數(shù)組個數(shù)
${A[2]} # 腳本的一個參數(shù)
${A:4:9} # 取變量中第4 位到后面9 位
${A/www/http} # 取變量并且替換每行第一個關(guān)鍵字
${A//www/http} # 取變量并且全部替換每行關(guān)鍵字
定義了一個變量為:
file=/dir1/dir2/dir3/my.file.txt
${file#*/} # 去掉第一條/ 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/} # 去掉最后一條/ 及其左邊的字串:my.file.txt
${file#*.} # 去掉第一個. 及其左邊的字串:file.txt
${file##*.} # 去掉最后一個. 及其左邊的字串:txt
${file%/*} # 去掉最后條/ 及其右邊的字串:/dir1/dir2/dir3
${file%%/*} # 去掉第一條/ 及其右邊的字串:(空值)
${file%.*} # 去掉最后一個. 及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*} # 去掉第一個. 及其右邊的字串:/dir1/dir2/dir3/my
# # 是去掉左邊(在鍵盤上# 在$ 之左邊)
# % 是去掉右邊(在鍵盤上% 在$ 之右邊)
# 單一符號是最小匹配﹔兩個符號是最大匹配
##################################
test 條件判斷
# 符號[ ] 等同test
expression 為字符串操作
-n str # 字符串str 是否不為空
-z str # 字符串str 是否為空
expression 為文件操作
-b # 是否塊文件
-p # 文件是否為一個命名管道
-c # 是否字符文件
-r # 文件是否可讀
-d # 是否一個目錄
-s # 文件的長度是否不為零
-e # 文件是否存在
-S # 是否為套接字文件
-f # 是否普通文件
-x # 文件是否可執(zhí)行,則為真
-g # 是否設(shè)置了文件的SGID 位
-u # 是否設(shè)置了文件的SUID 位
-G # 文件是否存在且歸該組所有
-w # 文件是否可寫,則為真
-k # 文件是否設(shè)置了的粘貼位
-t fd # fd 是否是個和終端相連的打開的文件描述符(fd 默認為1)
-O # 文件是否存在且歸該用戶所有
! # 取反
expression 為整數(shù)操作
expr1 -a expr2 # 如果expr1 和expr2 評估為真,則為真
expr1 -o expr2 # 如果expr1 或expr2 評估為真,則為真
兩值比較
整數(shù)字符串
-lt <: # 小于
-gt >: # 大于
-le <=: # 小于或等于
-ge >=: # 大于或等于
-eq ==: # 等不等
-ne !=: # 不等于
判斷大小,0 為真,1 為假
test 10 -lt 5
echo $?
1
判斷字符串長度是否為0
test -n "hello"
0
##################################
重定向
# 標準輸出stdout 和標準錯誤stderr 標準輸入stdin
cmd 1> fiel # 把標準輸出重定向到file 文件中
cmd > file 2>&1 # 把標準輸出和標準錯誤一起重定向到file 文件中
cmd 2> file # 把標準錯誤重定向到file 文件中
cmd 2>> file # 把標準錯誤重定向到file 文件中(追加)
cmd >> file 2>&1 # 把標準輸出和標準錯誤一起重定向到file 文件中(追加)
cmd < file >file2 # cmd 命令以file 文件作為stdin(標準輸入),以file2 文件作為標
準輸出
cat <>file # 以讀寫的方式打開file
cmd < file cmd # 命令以file 文件作為stdin
cmd << delimiter
cmd; #從stdin 中讀入,直至遇到delimiter 分界符。
delimiter
>&n # 使用系統(tǒng)調(diào)用dup (2) 復(fù)制文件描述符n 并把結(jié)果用作標準輸出
<&n # 標準輸入復(fù)制自文件描述符n
<&- # 關(guān)閉標準輸入(鍵盤)
>&- # 關(guān)閉標準輸出
n<&- # 表示將n 號輸入關(guān)閉
n>&- # 表示將n 號輸出關(guān)閉
##################################
運算符
$[]等同于$(()) # $[]表示形式告訴shell 求中括號中的表達式的值
~var # 按位取反運算符,把var 中所有的二進制為1 的變?yōu)?,為0 的變?yōu)?
var\<<str # 左移運算符,把var 中的二進制位向左移動str 位,忽略最左端移出的各位,最
右端的各位上補上0 值,每做一次按位左移就有var 乘2
var>>str # 右移運算符,把var 中所有的二進制位向右移動str 位,忽略最右移出的各位,
最左的各位上補0,每次做一次右移就有實現(xiàn)var 除以2
var&str # 與比較運算符,var 和str 對應(yīng)位,對于每個二進制來說,如果二都為1,結(jié)果為1.
否則為0
var^str # 異或運算符,比較var 和str 對應(yīng)位,對于二進制來說如果二者互補,結(jié)果為1,
否則為0
var|str # 或運算符,比較var 和str 的對應(yīng)位,對于每個二進制來說,如二都該位有一個1
或都是1,結(jié)果為1,否則為0
運算符的優(yōu)先級
級別運算符說明
1 =,+=,-=,/=,%=,*=,&=,^=,|=,<<=,>>== # 賦值運算符
2 || # 邏輯或前面不成功執(zhí)行
3 && # 邏輯與前面成功后執(zhí)行
4 | # 按位或
5 ^ # 按異位與
6 & # 按位與
7 ==,!= # 等于/不等于
8 <=,>=,<,> # 大于或等于/小于或等于/大于/小于
9 \<<,>> # 按位左移/按位右移(無轉(zhuǎn)意符號)
10 +,- # 加減
11 *,/,% # 乘,除,取余
12 ! ,~ # 邏輯非,按位取反或補碼
13 -,+ # 正負
##################################
數(shù)學(xué)運算
$(( )) 整數(shù)運算符號大致有這些:
+ - * / **:分別為"加、減、乘、除、密運算"
& | ^ !:分別為"AND、OR、XOR、NOT" 運算
% :余數(shù)運算
運算
let
let x=16/4
let x=5**5
手工命令行計數(shù)器
expr
SUM=`expr 2 \* 3`
計算字串長度
expr length "bkeep zbb"
抓取字串
expr substr "bkeep zbb" 4 9
抓取第一個字符數(shù)字串出現(xiàn)的位置
expr index "bkeep zbb" e
整數(shù)運算
expr 14 % 9
expr 30 / 3 / 2 # 運算符號有空格
增量計數(shù)(加循環(huán)即可)
LOOP=0
LOOP=`expr $LOOP + 1`
數(shù)值測試(如果試圖計算非整數(shù),則會返回錯誤。)
rr=3.4
expr $rr + 1
expr: non-numeric argument
rr=5
expr $rr + 1
6
模式匹配(可以使用expr 通過指定冒號選項計算字符串中字符數(shù))
.* 意即任何字符重復(fù)0 次或多次
expr bkeep.doc : '.*'
在expr 中可以使用字符串匹配操作,這里使用模式抽取.doc 文件附屬名。
expr bkeep.doc : '\(.*\).doc'
次方計算
echo "m^n"|bc
##################################
grep 用法
-c 顯示匹配到得行的數(shù)目,不顯示內(nèi)容
-h 不顯示文件名
-i 忽略大小寫
-l 只列出匹配行所在文件的文件名
-n 在每一行中加上相對行號
-s 無聲操作只顯示報錯,檢查退出狀態(tài)
-v 反向查找
-e 使用正則表達式
-A1 打印匹配行和下一行
-wc 匹配出現(xiàn)次數(shù)
grep 可用于if 判斷,找到$?為then
過濾關(guān)鍵字符行
grep -v "a" txt
精確匹配字符串
grep 'a\>' txt
大小寫敏感
grep -i "a" txt
同時匹配大小寫
grep "a[bB]" txt
查找0-9 重復(fù)三次的所在行
grep '[0-9]\{3\}' txt
任意條件匹配
grep -E "word1 | word2 | word3" file
同時匹配三個
grep word1 file | grep word2 |grep word3
##################################
tr 用法
-c 用字符串1 中字符集的補集替換此字符集,要求字符集為ASCII。
-d 刪除字符串1 中所有輸入字符。
-s 刪除所有重復(fù)出現(xiàn)字符序列,只保留第一個;即將重復(fù)出現(xiàn)字符串壓縮為一個字符串。
[a-z] a-z 內(nèi)的字符組成的字符串。
[A-Z] A-Z 內(nèi)的字符組成的字符串。
[0-9] 數(shù)字串。
\octal 一個三位的八進制數(shù),對應(yīng)有效的ASCII 字符。
[O*n] 表示字符O 重復(fù)出現(xiàn)指定次數(shù)n。因此[O*2]匹配OO 的字符串。
tr 中特定控制字符的不同表達方式
速記符含義八進制方式
\a Ctrl-G 鈴聲\007
\b Ctrl-H 退格符\010
\f Ctrl-L 走行換頁\014
\n Ctrl-J 新行\(zhòng)012
\r Ctrl-M 回車\015
\t Ctrl-I tab 鍵\011
\v Ctrl-X \030
將所有大寫轉(zhuǎn)換成小寫字母
tr A-Z a-z
將空格替換為換行
tr " " "\n"
刪除空行
tr -s "[\012]" < plan.txt
tr -s ["\n"] < plan.txt
刪除文件中的^M,并代之以換行
tr -s "[\015]" "[\n]" < file
tr -s "[\r]" "[\n]" < file
替換passwd 文件中所有冒號,代之以tab 鍵
tr -s "[:]" "[\011]" < /etc/passwd
tr -s "[:]" "[\t]" < /etc/passwd
增加顯示路徑可讀性
echo $PATH | tr ":" "\n"
tr 在vi 內(nèi)使用,在tr 前加處理行范圍和感嘆號('$'表示最后一行)
1,$!tr -d '\t'
Mac -> UNIX
tr "\r" "\n"<macfile > unixfile
UNIX -> Mac
tr "\n" "\r"<unixfile > macfile
DOS -> UNIX
Microsoft DOS/Windows 約定,文本的每行以回車字符(\r)并后跟換行符(\n)結(jié)束
tr -d "\r"<dosfile > unixfile
UNIX -> DOS:在這種情況下,需要用awk,因為tr 不能插入兩個字符來替換一個字符
awk '{ print $0"\r" }'<unixfile > dosfile
##################################
awk 用法
\b 退格
\f 換頁
\n 換行
\r 回車
\t 制表符Tab
\c 代表任一其他字符
-F 改變FS 值(分隔符)
~ 匹配
= 賦值
== 匹配
+= 疊加
[:alnum:] 字母數(shù)字字符
[:alpha:] 字母字符
[:cntrl:] 控制字符
[:digit:] 數(shù)字字符
[:graph:] 非空白字符(非空格、控制字符等)
[:lower:] 小寫字母
[:print:] 與[:graph:]相似,但是包含空格字符
[:punct:] 標點字符
[:space:] 所有的空白字符(換行符、空格、制表符)
[:upper:] 大寫字母
[:xdigit:] 十六進制的數(shù)字(0-9a-fA-F)
內(nèi)建變量
$n 當前記錄的第n 個字段,字段間由FS 分隔
$0 完整的輸入記錄
ARGC 命令行參數(shù)的數(shù)目
ARGIND 命令行中當前文件的位置( 從0 開始算)
ARGV 包含命令行參數(shù)的數(shù)組
CONVFMT 數(shù)字轉(zhuǎn)換格式( 默認值為%.6g)
ENVIRON 環(huán)境變量關(guān)聯(lián)數(shù)組
ERRNO 最后一個系統(tǒng)錯誤的描述
FIELDWIDTHS 字段寬度列表( 用空格鍵分隔)
FILENAME 當前文件名
FNR 同NR ,但相對于當前文件
FS 字段分隔符( 默認是任何空格)
IGNORECASE 如果為真(即非0 值),則進行忽略大小寫的匹配
NF 當前記錄中的字段數(shù)(列)
NR 當前行數(shù)
OFMT 數(shù)字的輸出格式( 默認值是%.6g)
OFS 輸出字段分隔符( 默認值是一個空格)
ORS 輸出記錄分隔符( 默認值是一個換行符)
RLENGTH 由match 函數(shù)所匹配的字符串的長度
RS 記錄分隔符( 默認是一個換行符)
RSTART 由match 函數(shù)所匹配的字符串的第一個位置
SUBSEP 數(shù)組下標分隔符( 默認值是/034) 。
BEGIN 先處理(可不加文件參數(shù))
END 結(jié)束時處理
[[:digit:][:lower:]] 數(shù)字和小寫字母(占一個字符)
-F"[ ]+|[%]+" 已多個空格或多個%為分隔符
[a-z]+ 多個小寫字母
[a-Z] 代表所有大小寫字母(aAbB...zZ)
[a-z] 代表所有大小寫字母(ab...z)
打印匹配到得行
awk '/Tom/' 文件
如果第三個字段值小于4000 才打印
awk '$3 <4000' 文件
匹配Tom 開頭的行打印第一個字段
awk '/^Tom/{print $1}'
顯示所有第一個字段不是以ly 結(jié)尾的行
awk '$1 !~ /ly$/' 文件
條件判斷(如果$1 大于$2,max 值為為$1,否則為$2)
awk '{max=($1 > $2) ? $1 : $2; print max}' 文件
awk '{print ($1>$2)?"第一排"$1:"第二排"$2}' e.txt
(括號代表if 語句判斷"?"代表then ":"代表else)
算術(shù)運算(第三個字段和第四個字段乘積大于500 則顯示)
awk '$3 * $4 > 500' 文件
打印tom 到suz 之間的行
awk '/tom/,/suz/' 文件
去掉前三行
awk '{$1="";$2="";$3="";print}' a.sh
將date 值賦給d,并將d 設(shè)置為數(shù)組mon,打印mon 數(shù)組中第2 個元素
awk 'BEGIN{ "date" | getline d; split(d,mon) ; print mon[2]}' 文件
以空格、:、制表符Tab 為分隔符
awk -F'[ :\t]' '{print $1,$2}'
取關(guān)鍵字下第幾行
awk '/關(guān)鍵字/{a=NR+2}a==NR {print}'
awk 中引用變量
a=22aa &&echo 88:99:44|awk -F":" '{print $1,"'"$a"'",$2,$3}'
指定類型(%d 數(shù)字,%s 字符)
/sbin/ifconfig |awk '{printf("line %d,%s\n",NR,$0)}'
awk -v RS=# 'NF{for(i=1;i<=NF;i++)if($i) printf $i;print ""}' 文件
awk 加if 判斷
awk '{if ( $6 > 50) print $1 " Too high" ;\
else print "Range is OK"}' file
awk '{if ( $6 > 50) { count++;print $3 } \
else { x+5; print $2 } }' file
awk 加循環(huán)
awk '{i = 1; while ( i <= NF ) { print NF, $i ; i++ } }' file
awk '{ for ( i = 1; i <= NF; i++ ) print NF,$i }' file
提取時間,空格不固定
ll | awk -F'[ ]+|[ ][ ]+' '/^$/{print $8}'
查看磁盤空間
df|awk -F"[ ]+|%" '$5>14{print $5}'
取出第四列等于90 的第五列
awk '$4==90{print $5}'
打印所有以模式no 或so 開頭的行
awk '/^(no|so)/' test
排列打印
awk 'END{printf
"%-10s%-10s\n%-10s%-10s\n%-10s%-10s\n","server","name","123","12345","234","1234"}' txt
awk 'BEGIN{printf
"|%-10s|%-10s|\n|%-10s|%-10s|\n|%-10s|%-10s|\n","server","name","123","12345","234","1234"}'
awk 'BEGIN{
print " *** 開始*** ";
print "+-----------------+";
printf "|%-5s|%-5s|%-5s|\n","id","name","ip";
}
$1!=1 && NF==4{printf "|%-5s|%-5s|%-5s|\n",$1,$2,$3" "$11}
END{
print "+-----------------+";
print " *** 結(jié)束*** "
}' txt
awk 中計算(求余數(shù))
echo list|awk '{ i=($1%100);if ( $i >= 0 ) {print $0,$i}}'
sub 匹配第一次出現(xiàn)的符合模式的字符串,相當于sed 's//'
awk '{sub(/Mac/,"Macintosh");print}' urfile
#用Macintosh 替換Mac
gsub 匹配所有的符合模式的字符串,相當于sed 's//g'
awk '{sub(/Mac/,"MacIntosh",$1); print}' file
#第一個域內(nèi)用Macintosh 替換Mac
處理sql 語句
cat 1.txt|awk -F" # " '{print "insert into user
(user,password,email)values(""'\''"$1"'\'\,'""'\''"$2"'\'\,'""'\''"$3"'\'\)\;'"}' >>insert_1.txt
引用外部變量
awk '{print "'"$a"'","'"$b"'"}'
在END 塊里面把數(shù)組內(nèi)容寫到文件
awk -F: '{name[x++]=$1};END{for(i=0;i<NR;i++)print i,name[i]}' data >tmp
將$1 的值疊加后賦給sum
awk 'sum+=$1{print sum}' <<EOF
1 11 111
2 22 222
8 33 333
10 44 444
EOF
加入END 只打印最后的結(jié)果
awk '{sum2+=$2;count=count+1}END{print sum2,sum2/count}' <<EOF
1324236000: 4.8726625090e+06 1.4806911317e+07
1324236300: 3.1952608823e+05 1.3144868085e+07
1324236600: 5.0792587262e+05 1.4931600767e+07
EOF
#結(jié)果中第一個值是$2 的總和第二個值是$3 的總和第三個值是$2 總和除個數(shù)(平均值) 第
四個值是$3 總和除個數(shù)(平均值)
#e+06 是科學(xué)計數(shù)法,表示乘以10 的6 次方
awk '{sum2+=$2;count=count+1}END{print sum2,sum2/count}' <<EOF
1: 3 30
2: 6 60
3: 9 90
EOF
列求和
cat txt |awk '{a+=$1}END{print a}'
列求平均值
cat txt |awk '{a+=$1}END{print a/NR}'
列求最大值
cat txt |awk 'BEGIN{a=0}{if ($1>a) a=$1 fi}END{print a}'
#設(shè)定一個變量開始為0,遇到比該數(shù)大的值,就賦值給該變量,直到結(jié)束
求最小值
cat txt |awk 'BEGIN{a=11111}{if ($1<a) a=$1 fi}END{print a}'
判斷$1 是否整除(awk 中定義變量引用時不能帶$ )
cat txt |awk '{ i=$1%10;if ( i == 0 ) {print i}}'
##################################
sed 用法
-n 輸出由編輯指令控制(取消默認的輸出,必須與編輯指令一起配合)
-i 直接對文件操作
-e 多重編輯
p 打印
d 刪除
s 替換
g 配合s 全部替換
i 行前插入
a 行后插入
r 讀
y 轉(zhuǎn)換
q 退出
\(..\) 保存..作為標簽1(\1)
& 代表查找的串內(nèi)容
* 前導(dǎo)符
.* 匹配任意多個字符
模式空間(兩行兩行處理)
N 將第二行追加到第一行將換行符\n 替換空極為一行
n 將第二行覆蓋到第一行
h 把模式空間里的行拷貝到暫存空間
H 把模式空間里的行追加到暫存空間
g 用暫存空間的內(nèi)容替換模式空間的行
G 把暫存空間的內(nèi)容追加到模式空間的行后
x 將暫存空間的內(nèi)容于模式空間里的當前行互換
! 對所選行以外的所有行應(yīng)用命令。
注意:暫存空間里默認存儲一個空行。
sed 命令替換并打印出替換行( -i 改變文本)
sed -n -e "{s/文本(正則表達式)/替換的文本/p}"
打印并刪除正則表達式的那部分內(nèi)容
sed -n -e "{s/^ *[0-9]*//p}"
刪除含關(guān)鍵的一行
sed -i "/^$f/d" a
直接對文本替換
sed -i "s/=/:/" c
找到pearls 開頭在行尾加jcui
sed -i "/^pearls/s/$/jcui/" ab.txt
標簽(保存\(mar\)作為標簽1)
sed -n 's/\(mar\)got/\1ianne/p' 文件
echo "margot"|sed -n 's/\(mar\).*\(t\)/\1\2/p'
sed -e 's/^\([a-zA-Z]\+\) \([a-zA-Z]\+\)\(.*\)/\2 \1\3/g' file
在以[0-9][0-9]結(jié)尾的行后加5
sed 's/[0-9][0-9]$/&5' 文件
打印從第5 行到以no 開頭行之間的所有行
sed -n '5,/^no/p' 文件
修改west 和east 之間的所有行,在結(jié)尾處加*VACA*
sed '/west/,/east/s/$/*VACA*/' 文件
多重編輯(先刪除1-3 行,在將1 替換成2)
sed -e '1,3d' -e 's/1/2/' 文件
找到含suan 的行,在后面加上讀入的文件內(nèi)容
sed '/suan/r 讀入文件' 文件
找到含no 的行,寫入到指定文件中
sed -n '/no/w 寫入文件' 文件
取出第一組數(shù)字,并且忽略掉開頭的0
sed 's/[^1-9]*\([0-9]\+\).*/\1/'
打印1 和3 之間的行
sed '/1/,/3/p' file
取出指定行
sed -n '1p' 文件
在第5 行之前插入行
sed '5i\aaa' file
在第5 行之后抽入行
sed '5a\aaa' file
在匹配行前插入一行
echo a|sed -e '/a/i\b'
在匹配行后插入一行
echo a|sed -e '/a/a\b'
echo a|sed 's/a/&\nb/g'
引用外部變量
sed -n ''$a',10p'
sed -n ""$a",10p"
取用戶家目錄(匹配不為/的字符和匹配:到結(jié)尾的字符全部刪除)
sed -n '{s/^[^\/]*//;s/\:.*//;p}' /etc/passwd
將換行符轉(zhuǎn)換為換行
echo abcd\\nabcde |sed 's/\\n/@/g' |tr '@' '\n'
刪除掉@后面所有字符,和空行
sed -e 's/@.*//g' -e '/^$/d'
將幾行合并成一行
echo $(cat file)|sed 's/ //g'
取一列最大值
cat tmp|awk '{print $1}'|sort -n|sed -n '$p'
查找屬主權(quán)限為7 的文件
ls -l|sed -n '/^.rwx.*/p'
在a 前面加#號
echo a|sed -e 's/a/#&/g'
##################################
圖形dialog
多選界面[方括號]
dialog --title "Check me" --checklist "Pick Numbers" 15 25 3 1 "one" "off" 2 "two" "on" 3 "three"
"off" 2>tmp
多選界面(圓括號)
dialog --title "title" --radiolist "checklist" 20 60 14 tag1 "item1" on tag2 "item2" off 2>tmp
單選界面
dialog --title "title" --menu "MENU" 20 60 14 tag1 "item1" tag2 "item2" 2>tmp
進度條
dialog --title "Installation" --backtitle "Star Linux" --gauge "Linux Kernel" 10 60 50
選擇yes/no
dialog --title "標題" --backtitle "Dialog" --yesno "說明" 20 60
公告
dialog --title "公告標題" --backtitle "Dialog" --msgbox "內(nèi)容" 20 60
顯示訊息后立即離開
dialog --title "hey" --backtitle "Dialog" --infobox "Is everything okay?" 10 60
輸入對話框
dialog --title "hey" --backtitle "Dialog" --inputbox "Is okay?" 10 60 "yes"
顯示文檔內(nèi)容
dialog --title "Array 30" --backtitle "All " --textbox /root/txt 20 75
多條輸入對話框
dialog --title "Add a user" --form "Add a user" 12 40 4 "Username:" 1 1 "" 1 15 15 0 "Full
name:" 2 1 "" 2 15 15 0 2>tmp
星號顯示輸入--insecure
dialog --title "Password" --insecure --passwordbox "請輸入密碼" 10 35
選擇日期
dialog --stdout --title "日歷" --calendar "請選擇" 0 0 9 1 2010
##################################
腳本頭# sh 為當前系統(tǒng)默認shell,可指定為bash 等
#!/bin/sh
臨時文件定義
errtmp=/tmp/$$`date +%s%N`.errtmp
outtmp=/tmp/$$`date +%s%N`.outtmp
true > $outtmp
隨機數(shù)
$RANDOM
進程號
$$
納秒
date +%N
在當前bash 環(huán)境下讀取并執(zhí)行FileName 中的命令
source file-name # 等同. FileName
間隔睡眠5 秒
sleep 5
在接收到信號后將要采取的行動
trap
當前目錄
$PWD
之前一個目錄的路徑
$OLDPWD
返回上一個目錄路徑
cd -
重復(fù)打印
yes
自動回答y 或者其他
yes |rm -i *
查看目錄所有文件夾
ls -p /home
查看匹配完整路徑
ls -d /home/
命令替換xargs
#將前面的內(nèi)容,作為后面命令的參數(shù)
find / -perm +7000 | xargs ls -l
不換行執(zhí)行下一句話
echo -n aa;echo bb
使轉(zhuǎn)義生效
echo -e "s\tss\n\n\n"
取字符串中字元
echo $a | cut -c2-6
排列組合(括號內(nèi)一個元素分別和其他括號內(nèi)元素組合)
echo {a,b,c}{a,b,c}{a,b,c}
返回目錄名
pwd | awk -F/ '{ print "目錄名:" ,$2 }'
替換上一條命令中的(foo)一個短語(bar)
^foo^bar^
!!:s/foo/bar/
!!:gs/foo/bar
##################################
shell 例子
判斷參數(shù)是否為空-空退出并打印null
#!/bin/sh
echo $1
name=${1:?"null"}
echo $name
##################################
循環(huán)數(shù)組
for ((i=0;i<${#o[*]};i++))
do
echo ${o[$i]}
done
##################################
判斷路徑
if [ -d /root/Desktop/text/123 ];then
echo "找到了123"
if [ -d /root/Desktop/text ]
then echo "找到了text"
else echo "沒找到text"
fi
else echo "沒找到123 文件夾"
fi
##################################
匹配替換密碼
#!/bin/sh
cat mailpassword > temp.txt
sed -i "s/:/ = /" temp.txt
w=`awk -F " = " '{print $1}' temp.txt`
for d in $w
do
grep -w $d svnpassword >/dev/null
if [ $? -eq 0 ]
then
sed -i "/^$d/d" svnpassword
grep "^$d" temp.txt >> svnpassword
#替換到轉(zhuǎn)義就出問題
#sed -i "/^$d/c $(grep "^$d" temp.txt)" svnpassword
fi
done
rm temp.txt
##################################
多行合并
將兩行并為一行(去掉換行符)
sed '{N;s/\n//}' file
將4 行合并為一行(可擴展)
awk '{if (NR%4==0){print $0} else {printf"%s ",$0}}' file
將所有行合并
awk '{printf"%s ",$0}'
##################################
shift 用法
./cs.sh 1 2 3
#!/bin/sh
until [ $# -eq 0 ]
do
echo "第一個參數(shù)為: $1 參數(shù)個數(shù)為: $#"
#shift 命令執(zhí)行前變量$1 的值在shift 命令執(zhí)行后不可用
shift
done
##################################
給腳本加參數(shù)getopts
#!/bin/sh
while getopts :ab: name
do
case $name in
a) aflag=1
;;
b) bflag=1
bval=$OPTARG
;;
\?) echo "USAGE:`basename $0` [-a] [-b value]"
exit 1
;;
esac
done
if [ ! -z $aflag ] ; then
echo "option -a specified"
echo "$aflag"
echo "$OPTIND"
fi
if [ ! -z $bflag ] ; then
echo "option -b specified"
echo "$bflag"
echo "$bval"
echo "$OPTIND"
fi
echo "here $OPTIND"
shift $(($OPTIND -1))
echo "$OPTIND"
echo " `shift $(($OPTIND -1))` "
##################################
判斷腳本參數(shù)是否正確
./test.sh -p 123 -P 3306 -h 127.0.0.1 -u root
#!/bin/sh
if [ $# -ne 8 ];then
echo "USAGE: $0 -u user -p passwd -P port -h host"
exit 1
fi
while getopts :u:p:P:h: name
do
case $name in
u)
mysql_user=$OPTARG
;;
p)
mysql_passwd=$OPTARG
;; P)
mysql_port=$OPTARG
;;
h)
mysql_host=$OPTARG
;;
*)
echo "USAGE: $0 -u user -p passwd -P port -h host"
exit 1
;;
esac
done
if [ -z $mysql_user ] || [ -z $mysql_passwd ] || [ -z $mysql_port ] || [ -z $mysql_host ]
then
echo "USAGE: $0 -u user -p passwd -P port -h host"
exit 1
fi
echo $mysql_user $mysql_passwd $mysql_port $mysql_host
#結(jié)果root 123 3306 127.0.0.1
##################################
dialog 取值接值退出
outtmp=/tmp/outtmp
dialog --no-shadow --backtitle "雪松制作" --title "請選擇" --ok-label "提交" --cancel-label "取消"
--menu "請選擇" 10 60 0 \
1 "[目錄]" \
q "[退出]" \
2> $outtmp
#判斷提交取消
if [ $? == "1" ]
then
break
#continue
fi
#只判斷退出
pt=`awk '{print}' $outtmp`
if [ $pt == q ]
then
break
fi
#判斷操作
case $pt in
1)
#操作
;;
q)
exit #break
;;
esac
##################################
dialog 輸入對話框加判斷
while :
do
outtmp=/tmp/outtmp
dialog --title "雪松制作" --form "請輸入" 20 60 10 "用戶:" 1 2 "" 1 15 35 0 "ID:" 2 2 "" 2
15 35 0 "" 6 2 "" 6 0 0 0 "輸入格式如下" 7 2 "" 7 0 0 0 "說明" 8 2 "" 8 0 0
0 2> $outtmp
yh=`sed -n '1p' $outtmp`
id=`sed -n '2p' $outtmp`
if echo $yh | grep -e '^[1-9][0-9]\{0,2\}' > /dev/null 2>&1
then
if echo $id | grep -e '^[1-9][0-9]\{0,12\}' > /dev/null 2>&1
then
break
else
echo "您輸入的不合法,請從新輸入!"
fi
else
echo "您輸入的不合法,請從新輸入!"
fi
done
##################################
打印表格
#!/bin/sh
clear
awk 'BEGIN{
print "+--------------------+--------------------+";
printf "|%-20s|%-20s|\n","Name","Number";
print "+--------------------+--------------------+";
}'
a=`grep "^[A-Z]" a.txt |sort +1 -n |awk '{print $1":"$2}'`
#cat a.txt |sort +1 -n |while read list
for list in $a
do
name=`echo $list |awk -F: '{print $1}'`
number=`echo $list |awk -F: '{print $2}'`
awk 'BEGIN{printf "|%-20s|%-20s|\n","'"$name"'","'"$number"'";
print "+--------------------+--------------------+";
}'
done
awk 'BEGIN{
print " *** The End *** "
print " "
}'
##################################
判斷日期是否合法
#!/bin/sh
while read a
do
if echo $a | grep -q "-" && date -d $a +%Y%m%d > /dev/null 2>&1
then if echo $a | grep -e '^[0-9]\{4\}-[01][0-9]-[0-3][0-9]$'
then
break
else
echo "您輸入的日期不合法,請從新輸入!"
fi
else
echo "您輸入的日期不合法,請從新輸入!"
fi
done
echo "日期為$a"
##################################
打印日期段所有日期
#!/bin/bash
qsrq=20010101
jsrq=20010227
n=0
>tmp
while :;do
current=$(date +%Y%m%d -d"$n day $qsrq")
if [[ $current == $jsrq ]];then
echo $current >>tmp;break
else
echo $current >>tmp
((n++))
fi
done
rq=`awk 'NR==1{print}' tmp`
##################################
打印提示
cat <<EOF
#內(nèi)容
EOF
登陸遠程執(zhí)行命令(特殊符號需要\轉(zhuǎn)義)
ssh root@ip << EOF
#執(zhí)行命令
EOF
登陸mysql 執(zhí)行命令
mysql -uroot -ppasswd -S mysql.sock --default-character-set=gbk -A<<EOF>outtmp
#mysql 命令
EOF
##################################
數(shù)學(xué)計算的小算法
#!/bin/sh
A=1
B=1
while [ $A -le 10 ]
do
SUM=`expr $A \* $B`
echo "$SUM"
if [ $A = 10 ]
then
B=`expr $B + 1`
A=1
fiA
=`expr $A + 1`
done
##################################
豎行轉(zhuǎn)橫行(三種)
cat file|tr '\n' ' '
echo $(cat file)
#!/bin/sh
for i in `cat file`
do
a=${a}" "${i}
done
echo $a
##################################
取用戶的根目錄
#! /bin/bash
#showhome.sh
IFS=:
while read name pass uid gid gecos home shell
do
echo $home
done
執(zhí)行./showhome.sh < /etc/passwd
##################################
把漢字轉(zhuǎn)成encode 格式:
echo 論壇| tr -d "\n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,\n"
%c2%db%cc%b3
大寫的:
echo 論壇| tr -d "\n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,\n" | tr "[a-f]" "[A-F]"
%C2%DB%CC%B3
##################################
把帶有大寫字母的文件名改為全部小寫
#!/bin/bash
for f in *;do
mv $f `echo $f |tr "[A-Z]" "[a-z]"`
done
##################################
查找連續(xù)多行,在不連續(xù)的行前插入
#/bin/bash
lastrow=null
i=0
cat incl|while read line
do
i=`expr $i + 1`
if echo "$lastrow" | grep "#include <[A-Z].h>"
then
if echo "$line" | grep -v "#include <[A-Z].h>"
then
sed -i ''$i'i\\/\/All header files are include' incl
i=`expr $i + 1`
fi
fi
lastrow="$line"
done
##################################
====================================================================
----------------------------------
9 服務(wù)配置
----------------------------------
samba
修改配置文
/etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = sambaserver
security=share
hosts allow=網(wǎng)絡(luò)主機
[file]
comment=home directories
path=/etc/samba/xuesong
public=yes
writable=yes
browseable=yes
重啟
service smb restart
linux 訪問windows 共享
smbclient -L //ip 地址或計算機名
##################################
DNS 服務(wù)器
DNS 主配置文件,moon.com 域名,zone.moon.com 域的配置文件
vi /etc/named.conf
zone "moon.com" IN {
type master;
file "zone.moon.com";
allow-update { none; };
};
測試主配置文件
named-checkconf
新建域的配置文件zone.moon.com
vi /var/named/chroot/var/named/zone.moon.com
$TTL 86400
@ IN SOA xs. quanzhou722.163.com. (
20102014
3H
15M
1W
1D
)
IN NS xs.
IN MX 5 mail.
www IN A 192.168.1.209
ftp IN A 192.168.1.209
mail IN A 192.168.1.209
測試moon.com 域配置文件
named-checkzone moon.com /var/named/chroot/var/named/zone.moon.com
建立域配置文件的軟連接
ln -s /var/named/chroot/var/named/zone.moon.com /var/named/zone.moon.com
重啟named 服務(wù)
service named restart
設(shè)置DNS
vi /etc/resolv.conf
測試解析是否成功
host www.moon.com
nslookup www.moon.com
##################################
ftp 配置
查看vsftp 是否安裝
rpm -qa | grep vsftp
主配置文件
vi /etc/vsftpd/vsftpd.conf
啟動VSFTPD 服務(wù)
service vsftpd restart
查看21 端口是否開放
netstat -atln |grep 21
1、匿名用戶是否允許訪問
anonymous_enable=YES
anon_mkdir_write_enable=YES
2、本地用戶管理
local_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
將用戶添加到vsftpd.chroot_list 文件中允許訪問
cat /etc/passwd |grep ":5[0-9][0-9]:" | awk -F : '{print $1}' > /etc/vsftpd.chroot_list
3、虛擬用戶管理
(1)要用到文件數(shù)據(jù)庫db4
rpm -qa |grep db4
(2)將帳戶放入文本:(奇數(shù)行)用戶名(偶數(shù)行)密碼
vi zhanghu.dat
(3)生成帳戶的文件數(shù)據(jù)庫
db_load -T -t hash -f zhanghu.dat /etc/vsftpd/vsftpd_zhanghu.db
(4)修改文件數(shù)據(jù)庫訪問權(quán)限
chmod 600 /etc/vsftpd/vsftpd_zhanghu.db
(5)手工建立虛擬用戶所需的PAM 配置文件
vi /etc/pam.d/vsftpd.zhanghu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu
(6)添加一個虛擬用戶的入口帳戶
useradd -d /var/ZhanDian -s /sbin/nologin XuNiRuKou
(7)在主配置文件中添加虛擬用戶的配置內(nèi)容
虛擬用戶的新添加配置
chroot_local_user=YES
guest_enable=YES
guest_username=XuNiRuKou
pam_service_name=vsftpd.zhanghu
(8)在vsftpd.conf 配置文件中指定用戶配置文件的目錄
user_config_dir=/etc/vsftpd/vsftpd_zhandian
(9)建立配置文件中指定用戶配置文件的目錄
mkdir /etc/vsftpd/vsftpd_zhandian
(10)因為入口帳戶是一個本地帳戶,所以要指定虛擬用戶具有本地帳戶的權(quán)限,才能讀寫自
己空間中的文件
虛擬用戶就可以就擁有寫權(quán)限
virtual_use_local_privs=YES
(11)
touch /etc/vsftpd/vsftpd_zhandian/xuesong
echo "local_root=/var/ZhanDian/xuesong" >> /etc/vsftpd/vsftpd_zhandian/xuesong
(12)
mkdir /var/ZhanDian/xuesong
(13)
chown -R XuNiRuKou:XuNiRuKou /var/ZhanDian/
(14)重啟服務(wù)
/etc/init.d/vsftpd restart
(15)客戶端虛擬賬號測試
建立用戶腳本。最好在加上判斷用戶名是否存在
#!/bin/sh
echo 請輸入用戶名
read y
echo $y >> zhanghu.dat
echo 請輸入密碼
read m
echo $m >> zhanghu.dat
db_load -T -t hash -f zhanghu.dat /etc/vsftpd/vsftpd_zhanghu.db
chmod 600 /etc/vsftpd/vsftpd_zhanghu.db
touch /etc/vsftpd/vsftpd_zhandian/$y
echo "local_root=/var/ZhanDian/$y" >> /etc/vsftpd/vsftpd_zhandian/$y
mkdir /var/ZhanDian/$y
chown -R XuNiRuKou:XuNiRuKou /var/ZhanDian/$y
/etc/init.d/vsftpd restart
##################################
httpd 安裝
tar zxvf httpd-2.2.12.tar.gz
cd httpd-2.2.12
./configure --prefix=/usr/local/httpd \
--enable-rewrite
make && make install
ls /usr/local/
groupadd www
useradd -g www -M -s /sbin/nologin www
cd /usr/local/httpd/
vi conf/httpd.conf
服務(wù)器開啟在軟件安裝目錄的bin 中
./apachectl start
網(wǎng)頁放在的htdocs 中
開機啟動
vi /etc/rc.d/rc.local
/usr/local/httpd/bin/apachectl start
如果啟動提示
httpd: Could not reliably determine the server fully qualified domain name, using 127.0.0.1 for
ServerName
修改/etc/hosts 計算機名
在httpd.conf 中開啟
ServerName 127.0.0.1:80
編碼設(shè)置
AddDefaultCharset UTF-8
AddDefaultCharset GB2312
##################################
mysql 源碼安裝
groupadd mysql
useradd mysql -g mysql -M -s /bin/false
tar zxvf mysql-5.0.22.tar.gz
cd mysql-5.0.22
./configure --prefix=/usr/local/mysql \
--with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static \
--with-mysqld-user=mysql \
--with-extra-charsets=all \
--with-unix-socket-path=/var/tmp/mysql.sock
make && make install
生成mysql 用戶數(shù)據(jù)庫和表文件,在安裝包中輸入。
scripts/mysql_install_db --user=mysql
vi ~/.bashrc
export PATH="$PATH: /usr/local/mysql/bin"
配置文件,有l(wèi)arge,medium,small 三個,根據(jù)機器性能選擇
cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
cd /usr/local
chmod 750 mysql -R
chgrp mysql mysql -R
chown mysql mysql/var -R
cp /usr/local/mysql/libexec/mysqld mysqld.old
ln -s /usr/local/mysql/bin/mysql /sbin/mysql
ln -s /usr/local/mysql/bin/mysqladmin /sbin/mysqladmin
ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc3.d/S15mysql5
ln -s -f /usr/local/mysql/bin/mysqld_safe /etc/rc.d/rc0.d/K15mysql5
##################################
mysql rpm 安裝
到http://www.mysql.com/downloads/mysql 下載mysql RPM(service 和client),
MySQL-server-community-5.1.51-1.rhel5.i386.rpm 安裝服務(wù)端
MySQL-client-community-5.1.51-1.rhel5.i386.rpm 安裝客戶端
MySQL-devel-community-5.1.51-1.rhel5.i386.rpm 用于php 的mysql 安裝
rpm –ivh MySQL-server-community-5.1.51-1.rhel5.i386.rpm
rpm –ivh MySQL-client-community-5.1.51-1.rhel5.i386.rpm
rpm –ivh MySQL-devel-community-5.1.51-1.rhel5.i386.rpm
/etc/init.d/mysqld start
mysqladmin -u root password 'xuesong'
mysql -u root -S /var/lib/mysql/mysql.sock -p
數(shù)據(jù)目錄/var/lib/mysql
chkconfig --list |grep mysqld
chkconfig --level 3 mysqld on
配置文件(日志\pid)
/etc/my.cnf
ll /usr/bin/mysql*
##################################
mysql 常用命令
啟動mysql 服務(wù)
./mysql/bin/mysqld_safe --user=mysql &
登錄mysql 的命令
格式: mysql -h 主機地址-u 用戶名-p 用戶密碼
mysql -h210.110.110.110 -P3306 -uroot -p
mysql -uroot -p -S /data1/mysql5/data/mysql.sock -A --default-character-set=GBK
刷新
flush privileges;
顯示所有數(shù)據(jù)庫
show databases;
打開數(shù)據(jù)庫
use dbname;
顯示選中數(shù)據(jù)庫中所有的表
show tables;
查看表結(jié)構(gòu)
desc tables;
刪除數(shù)據(jù)庫
drop database name;
刪除表
drop table name;
創(chuàng)建數(shù)據(jù)庫
create database name;
mysqladmin -h myhost -u root -p create dbname
創(chuàng)建表
create table ka(ka_id varchar(6),qianshu int);
插入字段
alter table name add column accountid(列名) int(11) NOT NULL(字段不為空);
不登陸mysql 插入字段
mysql -uroot -p -S mysql.sock -e "use db;alter table gift add column accountid int(11) NOT
NULL;flush privileges;"
查詢
select 列名稱from 表名稱;
select host,user,password from user;
備份數(shù)據(jù)庫
mysqldump -h host -u root -p dbname >dbname_backup.sql
mysqlhotcopy 只能備份MyISAM 引擎
/bin/mysqlhotcopy -u root -p
還原數(shù)據(jù)庫
mysql -h host -u root -p dbname < dbname_backup.sql
登陸mysql 后還原sql 文件
source 路徑.sql
賦予查詢權(quán)限(沒有用戶,直接創(chuàng)建)
grant select on db.* to log@"%" Identified by "123456";
賦予所有權(quán)限(沒有用戶,直接創(chuàng)建)
grant all privileges on db.* to log@"IP" identified by '123456' with grant option;
更改密碼
update user set password=password('新密碼') where user='root'
mysqladmin -u root password 'xuesong'
mysql 查看所有用戶的語句
select user();
刪除用戶
delete from user where user='sss' and host='localhost' ;
查看主從
show slave status\G;
查看主從復(fù)制進程
show processlist;
添加索引解決停mysql 速度慢
ALTER TABLE player ADD INDEX weekcredit_faction_index (weekcredit, faction);
創(chuàng)建主從復(fù)制用戶
grant replication slave on *.* to '用戶'@'%' identified by '密碼';
備份表
mysqldump -u root -p -S mysql.sock --default-character-set=utf8 --hex-blob db table1 table1 >
/data/db.sql
查看系統(tǒng)的字符集和排序方式的設(shè)定
SHOW VARIABLES LIKE 'character_set_%';
查看mysql 所有參數(shù)
show variables;
刪除空用戶
delete from user where user='';
創(chuàng)建表指定存儲引擎的類型:
CREATE TABLE innodb (id int, title char(20)) ENGINE = INNODB
CREATE TABLE myisam (id int, title char(20)) ENGINE = MyISAM
改變現(xiàn)有的表使用的存儲引擎:
ALTER TABLE mytable ENGINE = MyISAM
查詢表引擎
SHOW TABLE STATUS from 數(shù)據(jù)庫庫名where Name='表名';
SHOW TABLE STATUS from db where Name='innodb';
查看mysql 變量
SHOW VARIABLES;
查詢用戶權(quán)限
select host,user,password from user;
查看表的引擎狀態(tài)
show table status
##################################
gd 安裝
分別安裝組件libxml、zlib、freetype、libpng、jpegsrc、gd
libxml2-2.6.24.tar.bz2
zlib-1.2.3.tar.gz
freetype-2.2.1.tar.gz
libpng-1.2.10.tar.gz
jpegsrc.v6b.tar.gz
gd-2.0.33.tar.gz
libxml 安裝
tar xzvf libxml2-2.6.24.tar.bz2
tar xvf libxml2-2.6.24.tar
cd libxml2-2.6.24
./configure
make
make install
zlib 安裝
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make
make install
freetype 安裝
tar xzvf freetype-2.2.1.tar.gz
cd freetype-2.2.1
./configure --prefix=/usr/local/php/modules/freetype
make
make install
libpng 安裝
tar xzvf libpng-1.2.10.tar.gz
cd libpng-1.2.10
./configure --prefix=/usr/local/php/modules/libpng
jpeg 安裝
mkdir /usr/local/php/modules/jpeg6
mkdir /usr/local/php/modules/jpeg6/bin
mkdir /usr/local/php/modules/jpeg6/lib
mkdir /usr/local/php/modules/jpeg6/include
mkdir /usr/local/php/modules/jpeg6/man
mkdir /usr/local/php/modules/jpeg6/man/man1
一句創(chuàng)建
mkdir -pv /usr/local/jpeg/{,bin,lib,include,man/man1,man1}
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --prefix=/usr/local/php/modules/jpeg6 \
--enable-shared \
--enable-static
make
make install
gd 安裝
tar zxvf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure --prefix=/usr/local/gd2 \
--with-jpeg=/usr/local/php/modules/jpeg6 \
--with-png=/usr/local/php/modules/libpng \
--with-zlib \
--with-freetype=/usr/local/php/modules/freetype
修改Makefile 文件231 行,重復(fù)的第二個freetype 改為libpng
make
make install
php 安裝
tar xvf php-5.1.6.tar
cd php-5.1.bz2.6
./configure --prefix=/usr/local/php \
--sysconfdir=/etc \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-config-file-path=/usr/local/php/lib \
--with-libxml-dir=/usr/local/libxml2 \
--with-zlib \
--with-jpeg-dir=/usr/local/php/modules/jpeg6 \
--with-freetype-dir=/usr/local/php/modules/freetype \
--with-gd=/usr/local/gd2 \
--with-openssl \
--with-regex=php \
--with-gnu-ld \
--with-tsrm-pthreads \
--with-bz2 \
--with-gettext \
--with-db4=/usr \
--enable-ftp \
--enable-bcmath \
--enable-dba \
--enable-sockets \
--enable-soap \
--enable-zend-multibyte \
--enable-mbstring \
--with-curlwrappers \
--with-curl=/usr/local/curl \
--with-pdo-mysql=/usr/local/mysql \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config
make
make install
cp php.ini-recommended /usr/local/php/lib/php.ini
vi /usr/local/php/lib/php.ini
在PHP.IN 添加
[eaccelerator]
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/usr/local/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
完成后在/usr/local/httpd/conf/httpd.conf 文件上添加如下一行:
AddType application/x-httpd-php .php .php5
ln -s /usr/local/php/bin/php /sbin/php
vi index.php
<? php
phpinfo();
?>
重啟httpd
/usr/local/httpd/bin/apachectl restart
最后一步重新啟動apache 報如下錯誤:
httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load
/usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore
segment prot after reloc: Permission denied
不關(guān)閉SELINUX 的方法:
# setenforce 0
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache/modules/libphp5.so
# service httpd restart
# setenforce 1
##################################
LINUX 集群
LVS-- ipvsadm 命令參考
ipvsadm 的用法和格式如下: ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p
[timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C ipvsadm -R ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight] ipvsadm -d -t|u|f
service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] ipvsadm
--stop-daemon
ipvsadm -h
命令選項解釋:有兩種命令選項格式,長的和短的,具有相同的意思。在實際使用時,兩種都
可以。
-A --add-service 在內(nèi)核的虛擬服務(wù)器表中添加一條新的虛擬服務(wù)器記錄。也就是增加一臺新的
虛擬服務(wù)器。
-E --edit-service 編輯內(nèi)核虛擬服務(wù)器表中的一條虛擬服務(wù)器記錄。
-D --delete-service 刪除內(nèi)核虛擬服務(wù)器表中的一條虛擬服務(wù)器記錄。
-C --clear 清除內(nèi)核虛擬服務(wù)器表中的所有記錄。
-R --restore 恢復(fù)虛擬服務(wù)器規(guī)則
-S --save 保存虛擬服務(wù)器規(guī)則,輸出為-R 選項可讀的格式
-a --add-server 在內(nèi)核虛擬服務(wù)器表的一條記錄里添加一條新的真實服務(wù)器記錄。也就是在一個
虛擬服務(wù)器中增加一臺新的真實服務(wù)器
-e --edit-server 編輯一條虛擬服務(wù)器記錄中的某條真實服務(wù)器記錄
-d --delete-server 刪除一條虛擬服務(wù)器記錄中的某條真實服務(wù)器記錄
-L|-l --list 顯示內(nèi)核虛擬服務(wù)器表
其他的選項:-t --tcp-service service-address 說明虛擬服務(wù)器提供的是tcp 的服務(wù)[vip:port] or
[real-server-ip:port]
-u --udp-service service-address 說明虛擬服務(wù)器提供的是udp 的服務(wù)[vip:port] or
[real-server-ip:port]
-f --fwmark-service fwmark 說明是經(jīng)過iptables 標記過的服務(wù)類型。
-s --scheduler scheduler 使用的調(diào)度算法,有這樣幾個選項rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,-p
--persistent [timeout] 持久穩(wěn)固的服務(wù)。這個選項的意思是來自同一個客戶的多次請求,將被同
一臺真實的服務(wù)器處理。timeout 的默認值為300 秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真實的服務(wù)器[Real-Server:port]
-g --gatewaying 指定LVS 的工作模式為直接路由模式(也是LVS 默認的模式)
-i --ipip 指定LVS 的工作模式為隧道模式
-m --masquerading 指定LVS 的工作模式為NAT 模式
-w --weight weight 真實服務(wù)器的權(quán)值
--mcast-interface interface 指定組播的同步接口
-c --connection 顯示LVS 目前的連接如:ipvsadm -L -c
##################################
VS-NAT 模式
內(nèi)容服務(wù)器的容量10~20
使用保留地址的LAN
雙向重寫
安裝ipvsadm 軟件
內(nèi)核做個連接
ln -s /usr/src/kernels/2.6.18-53.e15-i686/ /usr/src/linux
安裝軟件
查看ipvsadm 版本
ipvsadm --version
建立腳本/etc/rc.d/lvs
echo "1" > /proc/sys/net/ipv4/ip_forward
#清除ipvsadm 一系列規(guī)則
ipvsadm -C
ipvsadm -A -t 外網(wǎng)IP:端口-s rr
ipvsadm -a -t 外網(wǎng)IP:端口-r 內(nèi)網(wǎng)1 服務(wù)器IP:端口-m -w 1
ipvsadm -a -t 外網(wǎng)IP:端口-r 內(nèi)網(wǎng)2 服務(wù)器IP:端口-m -w 1
修改內(nèi)網(wǎng)服務(wù)器ip 和網(wǎng)關(guān),開啟httpd,建立不同頁面測試
缺點不能排除宕機的web 服務(wù)器,可使用LVS+Keepalived 組合
##################################
heartbeat 心跳檢測(雙機熱備)
安裝heartbeat 的rpm 包
需要先裝heartbeat-pils 和heartbeat-stonith 兩個包
主節(jié)點的配置
安裝完解壓配置文件
rpm -q heartbeat -d
cd /etc/ha.d
cp /usr/share/doc/heartbeat-2.1.3/ha.cf .
cp /usr/share/doc/heartbeat-2.1.3/authkeys .
cp /usr/share/doc/heartbeat-2.1.3/haresources .
查看計算機名,記錄下來
uname -n
vi ha.cf
打開日志記錄文件
logfile /var/log/ha-log
打開心跳檢測
keepalive 2
死亡時間
deadtime 30
warntime 10
initdead 120
用什么協(xié)議端口(udp)
udpport 694
使用哪個網(wǎng)卡作為心跳檢測
bcast eth2
備用的IP
ucast eth2 192.168.1.20
主節(jié)點服務(wù)器
node 主節(jié)點計算機名
node 另一個計算機名
ping 外網(wǎng)測試
ping 一個外網(wǎng)的IP
配置驗證模式
vi authkeys
打開
auth2
1 crc
配置虛擬服務(wù)
vi haresources
加上一條名稱和IP
計算機名IP httpd
sev1.example.com 222.90.88.88 httpd
hosts 文件要配置上兩個機器的機器名和IP
vi /etc/hosts
222.90.88.10 sev1.example.com sev2
192.168.1.10 sev1
222.90.88.20 sev1.example.com sev2
192.168.1.20 sev1
chmod 600 authkeys
service heartbeat start
在配置備用節(jié)點
直接拷貝主節(jié)點的文件修改
安裝完進入安裝目錄
cd /etc/ha.d
用sftp 登陸主機
sftp 222.90.88.10
cd /etc/ha.d
get ha.cf
get authkeys
get hare*
bye
只需要修改ha.cf 文件
vi ha.cf
ucast eth2 192.168.1.10
啟動備用節(jié)點
service heartbeat start
測試
主節(jié)點和負節(jié)點建立不同index 頁面
主節(jié)點虛擬出外網(wǎng)ip eth0:0
停掉主節(jié)點任務(wù)
重新訪問
啟動后在訪問
##################################
DR 直接路由模式
同一網(wǎng)段的LAN
內(nèi)容服務(wù)器的容量20 以上
降低LVF 的負載
VIP 服務(wù)器的配置腳本
vi /etc/init.d/vip.sh
ifconfig eth0:0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up
route add -host 222.90.88.88 dev eth0:0
ipvsadm -C
ipvsadm -A -t 222.90.88.88:80 -s rr
ipvsadm -a -t 222.90.88.88:80 -r 222.90.88.10 -g
ipvsadm -a -t 222.90.88.88:80 -r 222.90.88.20 -g
ipvsadm
chmod 777 /etc/init.d/vip.sh
/etc/init.d/vip.sh
服務(wù)器配置腳本
vi /etc/init.d/lvs.sh
ifconfig lo:0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up
route add -host 222.90.88.88 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
chmod 777 /etc/init.d/lvs.sh
/etc/init.d/lvs.sh
第二臺服務(wù)器
sftp 222.90.88.10
get /etc/init.d/lvs.sh
bye
mv lvs.sh /etc/init.d/
/etc/init.d/lvs.sh
測試兩個服務(wù)器測試頁面寫入不同內(nèi)容
分別啟動httpd
真是IP 可以分別訪問不同服務(wù)器,訪問虛擬IP88,則互相倫叫
##################################
IP 隧道模式
WAN(或LAN 也可)
內(nèi)容服務(wù)器的容量能到100
vip-server
vi /etc/init.d/vip.sh
ifconfig tunl0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up
route add -host 222.90.88.88 dev tunl0
ipvsadm -C
ipvsadm -A -t 222.90.88.88:80 -s rr
ipvsadm -a -t 222.90.88.88 :80 -r 222.90.88.10 -i
ipvsadm -a -t 222.90.88.88 :80 -r 222.90.88.20 -i
ipvsadm
chmod -R 777 /etc/init.d/vip.sh
/etc/init.d/vip.sh
1web 服務(wù)器
ifconfig runl0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up
route add -host 222.90.88.88 dev tunl0
echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_annaunce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_annaunce
sysctl -p
chmod 777 /etc/init.d/lvs.sh
/etc/init.d/lvs.sh
2web 服務(wù)器
sftp 222.90.88.10
get /etc/init.d/lvs.sh
bye
mv lvs.sh /etc/init.d/
/etc/init.d/lvs.sh
測試兩個服務(wù)器測試頁面寫入不同內(nèi)容
分別啟動httpd
真是IP 可以分別訪問不同服務(wù)器,訪問虛擬IP88,則互相倫叫
##################################
sendmail 郵件服務(wù)器
配置DNS 服務(wù)器為mail 服務(wù)器IP 解析
在配置文件中添加
IN MX 5 mail.
mail IN A 192.168.1.209
重啟服務(wù)service named restart
測試
ping mail.xuesong.com
nslookup mail.xuesong.com
mail 服務(wù)器上設(shè)置DNS 服務(wù)器
vi /etc/resolv.conf
安裝軟件
sendmail-8.13.8-8.el5.i386.rpm
sendmail-cf-8.13.8-8.el5.i386.rpm
sendmail-doc-8.13.8-8.el5.i386.rpm
yum install dovecot
m4
sendmail 配置文件目錄:/etc/mail
vi local-host-names
添加xuesong.com
vi sendmai.mc
去掉前面兩個dnl
dnl TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
修改IP
DAEMON_OPTIONS('Port=smtp,Addr=192.168.1.209, Name=MTA')dnl
生成sendmail 配置文件sendmail.cf
m4 sendmail.mc > sendmail.cf
查看啟動級別
chkconfig --list |grep sas
開啟啟動級別3
chkconfig --level 3 saslauthd on
makemap hash access.db < access
vi /etc/dovecot.conf
打開下面一句話
protocols = imap imaps pop3 pop3s
service sendmail restart
service dovecot restart
group mail
useradd -g mail -M -s /sbin/nologin 用戶名
##################################
JDK 安裝
rpm -qa|grep jdk
確認gcj 的版本號
rpm -qa | grep gcj
卸載gcj
yum -y remove java-1.4.2-gcj-compat
從SUN 下載jdk-1_5_0_14-linux-i586-rpm.bin 或jdk-1_5_0_14-linux-i586.bin
mkdir /usr/java
cd /usr/java
1. jdk-1_5_0_14-linux-i586-rpm.bin 文件安裝
chmod 777 jdk-1_5_0_14-linux-i586-rpm.bin
rpm -ivh jdk-1_5_0_14-linux-i586.rpm
2. jdk-1_5_0_14-linux-i586.bin 文件安裝
chmod u+x jdk-1_5_0_14-linux-i586.bin
./jdk-1_5_0_14-linux-i586.bin
添加環(huán)境變量
vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.6.0_23
export
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
reboot 重啟生效
##################################
xen 管理
查看虛擬主機列表
xm list
使用文本方式連接虛擬系統(tǒng)
xm console test
啟動虛擬主機
xm create test
虛擬機和主機切換
ctrl+]
關(guān)閉虛擬主機
xm shutdown 主機名
虛擬機克隆(關(guān)閉后克隆)
virt-clone -o test -n test1 -f /data/xen/test1.img
虛擬機增加硬盤
dd if=/dev/zero of=/data/xen/test.img bs=1M count=8
編輯原來配置文件,添加新磁盤文件
vi /etc/xen/vm11
name = "vm11"
uuid = "91b0200b-eb41-46d3-1e11-ee2a87035f24"
maxmem = 128
memory = 128
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1,keymap=en-us" ]
disk = [ "tap:aio:/data/vm11.img,xvda,w", "tap:aio:/data/vm11b.img,xvdb,w" ]
vif = [ "mac=00:16:36:75:8a:ea,bridge=virbr0,script=vif-bridge" ]
啟動XEN 虛擬機并登陸測試新加的磁盤
增加虛擬機網(wǎng)卡
cat /etc/xen/vm11
name = "vm11"
uuid = "91b0200b-eb41-46d3-1e11-ee2a87035f24"
maxmem = 512
memory = 128
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1,keymap=en-us" ]
disk = [ "tap:aio:/data/vm11.img,xvda,w" ]
vif = [ "mac=00:16:36:75:8a:ea,bridge=xenbr0,script=vif-bridge",
"mac=00:16:36:75:8a:eb,bridge=xenbr0,script=vif-bridge" ]

“Linux系統(tǒng)運維常用命令及常識”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI