主頁(yè) > 知識(shí)庫(kù) > 很實(shí)用的Linux 系統(tǒng)運(yùn)維常用命令及常識(shí)(超實(shí)用)

很實(shí)用的Linux 系統(tǒng)運(yùn)維常用命令及常識(shí)(超實(shí)用)

熱門標(biāo)簽:鶴崗400電話申請(qǐng) 怎么在百度地圖標(biāo)注公司的位置 百度地圖標(biāo)注直線距離 外呼電話系統(tǒng)怎么操作 商機(jī)地圖標(biāo)注 智能電銷機(jī)器人有用嗎 天津電話外呼系統(tǒng)排名 測(cè)繪地圖標(biāo)注名稱 德陽(yáng)400電話申請(qǐng)

作為L(zhǎng)inux運(yùn)維,需要了解Linux操作系統(tǒng)的基本使用和管理知識(shí),下面腳本之家小編給大家介紹下Linux運(yùn)維需要掌握的命令,想成為L(zhǎng)inux運(yùn)維的朋友可以來學(xué)習(xí)一下。

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 強(qiáng)制)
##################################
恢復(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
符號(hào)連接
ln -s
查看上下翻頁(yè)且顯示行號(hào)
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
更改默認(rèn)權(quán)限
umask
按數(shù)字排序
sort -n
按數(shù)字倒敘
sort -nr
過濾重復(fù)行
sort -u
刪除重復(fù)的行
uniq
重復(fù)的行出現(xiàn)次數(shù)
uniq -c
只顯示不重復(fù)行
uniq -u
將兩個(gè)文件合并用tab 鍵分隔開
paste a b
將兩個(gè)文件合并指定'+'符號(hào)隔開
paste -d'+' a b
將多行數(shù)據(jù)合并到一行用tab 鍵隔開
paste -s a
設(shè)置隱藏屬性
chattr [+-=] [ASacdistu] 文件或目錄
向下分面器
more
搜索
locate 字符串
查看行數(shù)
wc -l
實(shí)時(shí)某個(gè)目錄下查看最新改動(dòng)過的文件
watch -d -n 1 'df; ls -FlAt /path'
快速備份一個(gè)文件
cp filename{,.bak}
##################################
配置編輯器
gconf-editor
vi 配置文件
vi /etc/vimrc
編輯文件
vim
打開行號(hào)
:set nu
取消行號(hào)
:set nonu
跳轉(zhuǎn)到200
200G
取消高亮
:nohl
設(shè)置自動(dòng)縮進(jìn)
:set autoindent
查看文本格式
set ff
改為unix 格式
set binary
向前翻頁(yè)
ctrl+ U
向后翻頁(yè)
ctrl+ D
全部替換
g/字符1/s//字符2/g
%s/字符1/字符2/g
# 普通用戶打開文檔不能保存
# tee 是一個(gè)把stdin 保存到文件的小工具,而%,是vim 當(dāng)中一個(gè)只讀寄存器的名字,總保存著當(dāng)
前編輯文件的文件路徑
:w !sudo tee %
##################################
按文件名查找
find /etc -name http
查找某一類型文件
find . -type f
按照文件權(quán)限查找
find / -perm
按照文件屬主查找
find / -user
按照文件所屬的組來查找文件
find / -group
文件使用時(shí)間在N 天以內(nèi)
find / -atime -n
文件使用時(shí)間在N 天以前
find / -atime +n
文件內(nèi)容改變時(shí)間在N 天以內(nèi)
find / -mtime -n
文件內(nèi)容改變時(shí)間在N 天以前
find / -mtime +n
文件狀態(tài)改變時(shí)間在N 天前
find / -ctime +n
文件狀態(tài)改變時(shí)間在N 天內(nèi)
find / -ctime -n
# linux 文件無創(chuàng)建時(shí)間
# Access 使用時(shí)間
# Modify 內(nèi)容修改時(shí)間
# Change 狀態(tài)改變時(shí)間(權(quán)限、屬主)
查找文件長(zhǎng)度大于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
強(qiáng)制卸載
rpm -e lynx --nodeps
測(cè)試
rpm --test lynx
查看所有安裝的rpm 包
rpm -qa
查找包是否安裝
rpm -qa | grep http
解壓zip
unzip zip.zip
壓縮zip
zip zip.zip *
rar3.6 下載地址
http://www.rarsoft.com/rar/rarlinux-3.6.0.tar.gz
壓縮文件為rar 包
rar a rar.rar *.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 當(dāng)中,比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 \@#]\$'
開機(jī)啟動(dòng)模式
vi /etc/inittab
查找命令的目錄
whereis
查看當(dāng)前要執(zhí)行的命令所在的路徑
which
讓部命令后臺(tái)運(yùn)行
命令
將前臺(tái)放入后臺(tái)(暫停)
ctrl+z
查看后臺(tái)運(yùn)行程序
jobs
啟動(dòng)后臺(tái)暫停進(jìn)程
bg 2
調(diào)回后臺(tái)進(jìn)程
fg 2
后臺(tái)運(yùn)行不受shell 退出影響
nohup cmd
清空整個(gè)屏幕
clear
重新初始化屏幕
reset
查詢用過的命令默認(rèn)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
隨機(jī)生成密碼
mkpasswd
-l 位數(shù)-C 大小-c 小寫-d 數(shù)字-s 特殊字符
mkpasswd -l 8 -C 2 -c 2 -d 4 -s 0
當(dāng)前在線用戶
who
w
查看當(dāng)前用戶名
whoami
查看登陸用戶名
logname
顯示月歷
cal
查看服務(wù)器啟動(dòng)時(shí)間
uptime
設(shè)日期
date -s 20091112
設(shè)時(shí)間
date -s 18:30:50
同步時(shí)間
/usr/sbin/ntpdate stdtime.gov.hk
7 天前日期
`date -d "7 days ago" +%Y%m%d`
日期格式轉(zhuǎn)換
`date +%Y-%m-%d -d '20110902'`
日期和時(shí)間
date +%Y-%m-%d_%X
查看時(shí)間
hwclock
賬戶影子文件
/etc/shadow
列出所有語(yǔ)系
locale -a
修改語(yǔ)言
LANG=en
修改編碼
vi /etc/sysconfig/i18n
utf-8 ---> GBK
強(qiáng)制字符集
export LC_ALL=C
查詢靜態(tài)主機(jī)名
vi /etc/hosts
最大連接
/etc/security/limits.conf
grub 開機(jī)啟動(dòng)項(xiàng)添加
/etc/grub.conf
title ms-dos
rootnoverify (hd0,0)
chainloader +1
別名
alias
監(jiān)測(cè)命令
watch
查看Linux 版本信息
uname -a
cat /proc/version
cat /etc/issue
lsb_release -a
查看cpu 信息
more /proc/cpuinfo
查看cpu 型號(hào)和邏輯核心數(shù)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cpu 運(yùn)行的位數(shù)
getconf LONG_BIT
物理cpu 個(gè)數(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ù)器型號(hào)
dmidecode | grep "Product Name"
查看軟raid 信息
cat /proc/mdstat
查看硬raid 信息
cat /proc/scsi/scsi
查看硬件信息
lspci
查看是否支持raid
lspci|grep RAID
顯示開機(jī)信息
dmesg
進(jìn)程樹
pstree
每隔一秒報(bào)告虛擬內(nèi)存統(tǒng)計(jì)信息9 次
vmstat 1 9
把180 號(hào)進(jìn)程的優(yōu)先級(jí)加1
renice +1 180
終止某個(gè)PID 進(jìn)程
kill -9 PID
指定三天后下午5:00 執(zhí)行/bin/ls
at 5pm + 3 days /bin/ls
編輯周期任務(wù)
crontab -e
分鐘小時(shí)天月星期命令或腳本
01 1-3/2 * * * 命令或腳本
直接將命令寫入周期任務(wù)
echo "40 7 * * 2 /root/sh">>/var/spool/cron/root
查看自動(dòng)周期性任務(wù)
crontab -l
刪除自動(dòng)周期性任務(wù)
crontab -r
禁止或允許用戶使用周期任務(wù)
cron.deny 和cron.allow
啟動(dòng)自動(dòng)周期性服務(wù)
service crond 啟動(dòng)|停止|重啟|狀態(tài)>
是否打開了某個(gè)端口
netstat -anlp | grep 端口號(hào)
查看監(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
制作補(bǔ)丁
diff suzu.c suzu2.c > sz.patch
安裝補(bǔ)丁
patch suzu.c sz.patch
顯示打開指定文件的所有進(jìn)程
lsof 文件
查看端口的進(jìn)程
lsof -i :32768
顯示消耗內(nèi)存最多的10 個(gè)運(yùn)行中的進(jìn)程,以內(nèi)存使用量排序.cpu +3
ps aux |grep -v USER | sort -nk +4 | tail
查看內(nèi)核模塊
lsmod
yum 擴(kuò)展源
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
升級(jí)所有包版本,依賴關(guān)系,系統(tǒng)版本內(nèi)核都升級(jí)
yum -y update
升級(jí)指定的軟件包
yum -y update 軟件包名
不改變軟件設(shè)置更新軟件,系統(tǒng)版本升級(jí),內(nèi)核不改變
yum -y upgrade
yum 搜索相關(guān)包
yum search mail
會(huì)改變配置文件,改變舊的依賴關(guān)系,改變系統(tǒng)版本
dist-upgrade
編輯啟動(dòng)項(xiàng)
/boot/grub/grub.conf
開機(jī)啟動(dòng)腳本順序
/etc/profile
/etc/profile.d/*.sb
~/bash_profile
~/.bashrc
/etc/bashrc
--------------------------------------------------------------------
top
前五行是系統(tǒng)整體的統(tǒng)計(jì)信息。
第一行是任務(wù)隊(duì)列信息,同uptime 命令的執(zhí)行結(jié)果。其內(nèi)容如下:
01:06:48 當(dāng)前時(shí)間
up 1:22 系統(tǒng)運(yùn)行時(shí)間,格式為時(shí):分
1 user 當(dāng)前登錄用戶數(shù)
load average: 0.06, 0.60, 0.48 系統(tǒng)負(fù)載,即任務(wù)隊(duì)列的平均長(zhǎng)度。
三個(gè)數(shù)值分別為1 分鐘、5 分鐘、15 分鐘前到現(xiàn)在的平均值。
第二、三行為進(jìn)程和CPU 的信息。當(dāng)有多個(gè)CPU 時(shí),這些內(nèi)容可能會(huì)超過兩行。內(nèi)容如下:
Tasks: 29 total 進(jìn)程總數(shù)
1 running 正在運(yùn)行的進(jìn)程數(shù)
28 sleeping 睡眠的進(jìn)程數(shù)
0 stopped 停止的進(jìn)程數(shù)
0 zombie 僵尸進(jìn)程數(shù)
Cpu(s): 0.3% us 用戶空間占用CPU 百分比
1.0% sy 內(nèi)核空間占用CPU 百分比
0.0% ni 用戶進(jìn)程空間內(nèi)改變過優(yōu)先級(jí)的進(jìn)程占用CPU 百分比
98.7% id 空閑CPU 百分比
0.0% wa 等待輸入輸出的CPU 時(shí)間百分比
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)存再次被換出時(shí)可不必再對(duì)交換區(qū)寫入。
進(jìn)程信息區(qū)
統(tǒng)計(jì)信息區(qū)域的下方顯示了各個(gè)進(jìn)程的詳細(xì)信息。首先來認(rèn)識(shí)一下各列的含義。
序號(hào)列名含義
a PID 進(jìn)程id
b PPID 父進(jìn)程id
c RUSER Real user name
d UID 進(jìn)程所有者的用戶id
e USER 進(jìn)程所有者的用戶名
f GROUP 進(jìn)程所有者的組名
g TTY 啟動(dòng)進(jìn)程的終端名。不是從終端啟動(dòng)的進(jìn)程則顯示為?
h PR 優(yōu)先級(jí)
i NI nice 值。負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí)
j P 最后使用的CPU,僅在多CPU 環(huán)境下有意義
k %CPU 上次更新到現(xiàn)在的CPU 時(shí)間占用百分比
l TIME 進(jìn)程使用的CPU 時(shí)間總計(jì),單位秒
m TIME+ 進(jìn)程使用的CPU 時(shí)間總計(jì),單位1/100 秒
n %MEM 進(jìn)程使用的物理內(nèi)存百分比
o VIRT 進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
p SWAP 進(jìn)程使用的虛擬內(nèi)存中,被換出的大小,單位kb。
q RES 進(jìn)程使用的、未被換出的物理內(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 頁(yè)面錯(cuò)誤次數(shù)
v nDRT 最后一次寫入到現(xiàn)在,被修改過的頁(yè)面數(shù)。
w S 進(jìn)程狀態(tài)。
D=不可中斷的睡眠狀態(tài)
R=運(yùn)行
S=睡眠
T=跟蹤/停止
Z=僵尸進(jìn)程
x COMMAND 命令名/命令行
y WCHAN 若該進(jìn)程在睡眠,則顯示睡眠中的系統(tǒng)函數(shù)名
z Flags 任務(wù)標(biāo)志,參考sched.h
##################################
iptables
內(nèi)建三個(gè)表:nat mangle 和filter
filter 預(yù)設(shè)規(guī)則表,有INPUT、FORWARD 和OUTPUT 三個(gè)規(guī)則鏈
INPUT 進(jìn)入
FORWARD 轉(zhuǎn)發(fā)
OUTPUT 出去
ACCEPT 將封包放行
REJECT 攔阻該封包
DROP 丟棄封包不予處理
-A 在所選擇的鏈(INPUT 等)末添加一條或更多規(guī)則
-D 刪除一條
-E 修改
-p tcp、udp、icmp 0 相當(dāng)于所有all !取反
-P 設(shè)置缺省策略(與所有鏈都不匹配強(qiáng)制使用此策略)
-s IP/掩碼(IP/24) 主機(jī)名、網(wǎng)絡(luò)名和清楚的IP 地址!取反
-j 目標(biāo)跳轉(zhuǎn),立即決定包的命運(yùn)的專用內(nèi)建目標(biāo)
-i 進(jìn)入的(網(wǎng)絡(luò))接口[名稱] eth0
-o 輸出接口[名稱]
-m 模塊
--sport 源端口
--dport 目標(biāo)端口
#配置文件
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
#從某個(gè)規(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
#開放對(duì)外訪問
iptables -P OUTPUT ACCEPT
#指定某端口針對(duì)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
#開放對(duì)外開放端口
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
#開放對(duì)外開放端口
-A INPUT -p tcp --dport 80 -j ACCEPT
#指定某端口針對(duì)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
##################################
常用實(shí)例
#允許在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 我的主機(jī)
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
#刪除某個(gè)規(guī)則鏈,不加規(guī)則鏈,清除所有非內(nèi)建的
iptables -X allowed
#將封包計(jì)數(shù)器歸零
iptables -Z INPUT
#定義新的規(guī)則鏈
iptables -N allowed
#定義過濾政策
iptables -P INPUT DROP
#修改某自訂規(guī)則鏈的名稱
iptables -E allowed disallowed
#比對(duì)通訊協(xié)議類型是否相符
#-p ! tcp 排除tcp 以外的udp、icmp。-p all 所有類型
iptables -A INPUT -p tcp
#比對(duì)封包的來源IP
#192.168.0.0/24 ! 反向?qū)Ρ?br /> iptables -A INPUT -s 192.168.1.1
#比對(duì)封包的目的地IP
iptables -A INPUT -d 192.168.1.1
#比對(duì)封包是從哪片網(wǎng)卡進(jìn)入
#eth+表示所有的網(wǎng)卡
iptables -A INPUT -i eth0
#比對(duì)封包要從哪片網(wǎng)卡送出
iptables -A FORWARD -o eth0
#比對(duì)某段時(shí)間內(nèi)封包的平均流量
#例子是用來比對(duì):每小時(shí)平均流量是否超過一次3 個(gè)封包。除了每小時(shí)平均次外,也可以每
秒鐘、每分鐘或每天平均一次,默認(rèn)值為每小時(shí)平均一次,參數(shù)如后: /second、/minute、/day。
除了進(jìn)行封數(shù)量的比對(duì)外,設(shè)定這個(gè)參數(shù)也會(huì)在條件達(dá)成時(shí),暫停封包的比對(duì)動(dòng)作,以避免因
駭客使用洪水攻擊法,導(dǎo)致服務(wù)被阻斷。
iptables -A INPUT -m limit --limit 3/hour
#比對(duì)瞬間大量封包的數(shù)量
#例子是用來比對(duì)一次同時(shí)涌入的封包是否超過5 個(gè)(這是默認(rèn)值),超過此上限的封包將被直
接丟棄。使用效果同上。
iptables -A INPUT -m limit --limit-burst 5
#比對(duì)來自本機(jī)的封包
#是否為某特定使用者所產(chǎn)生的,這樣可以避免服務(wù)器使用root 或其它身分將敏感數(shù)據(jù)傳送出,
可以降低系統(tǒng)被駭?shù)膿p失??上н@個(gè)功能無法比對(duì)出來自其它主機(jī)的封包。
iptables -A OUTPUT -m owner --uid-owner 500
#比對(duì)來自本機(jī)的封包
iptables -A OUTPUT -m owner --gid-owner 0
iptables -A OUTPUT -m owner --pid-owner 78
iptables -A OUTPUT -m owner --sid-owner 100
#用來比對(duì)聯(lián)機(jī)狀態(tài)
iptables -A INPUT -m state --state RELATED,ESTABLISHED
聯(lián)機(jī)狀態(tài)共有四種:INVALID、ESTABLISHED、NEW 和RELATED。
#-j 參數(shù)指定進(jìn)行的處理動(dòng)作,處理動(dòng)作包括: 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
#可以傳送的封包有幾個(gè)選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset
REDIRECT 將封包重新導(dǎo)向到另一個(gè)端口(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)訊息紀(jì)錄在/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 將封包標(biāo)上某個(gè)代號(hào)
##################################
iptables 配置實(shí)例
允許某段IP 訪問任何端口
iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT
設(shè)定預(yù)設(shè)規(guī)則(拒絕所有的數(shù)據(jù)包,再允許需要的,如只做WEB 服務(wù)器.還是推薦三個(gè)鏈都是
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!(不然會(huì)導(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ù)管理
----------------------------------
啟動(dòng)sendmail 服務(wù)
./sendmail start
/etc/init.d/sendmail start
關(guān)閉sendmail 服務(wù)
./sendmail stop
查看sendmail 服務(wù)當(dāng)前狀態(tài)
./sendmail status
發(fā)送郵件
echo 內(nèi)容| /bin/mail -s "標(biāo)題" 收件箱
打開服務(wù)列表需要打*
ntsysv
讓某個(gè)服務(wù)不自動(dòng)啟動(dòng)35 指的是運(yùn)行級(jí)別
httpd:chkconfig --level 35 httpd off
讓某個(gè)服務(wù)自動(dòng)啟動(dòng)
httpd:chkconfig --level 35 httpd on
查看所有服務(wù)的啟動(dòng)狀態(tài)
chkconfig --list
查看某個(gè)服務(wù)的啟動(dòng)狀態(tài)
chkconfig --list |grep httpd
查看服務(wù)的狀態(tài)
chkconfig –-list [服務(wù)名稱]
設(shè)置非獨(dú)立服務(wù)啟狀態(tài)
chkconfig 服務(wù)名on|off|set
開啟mysql 后臺(tái)運(yùn)行
/usr/local/mysql/bin/mysqld_safe --user=mysql
開機(jī)啟動(dòng)執(zhí)行
vi /etc/rc.d/rc.local
開機(jī)啟動(dòng)和關(guān)機(jī)關(guān)閉服務(wù)連接
/etc/rc.d/rc3.d/S55sshd
# S 開機(jī)start K 關(guān)機(jī)stop 55 級(jí)別后跟服務(wù)名
ln -s -f /usr/local/httpd/bin/apachectl /etc/rc.d/rc3.d/S15httpd
====================================================================
----------------------------------
5 網(wǎng)絡(luò)管理
----------------------------------
##################################
本機(jī)網(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
測(cè)試跳數(shù)
traceroute www.baidu.com (linux)
tracert www.baidu.com (windows)
根據(jù)IP 和主機(jī)最大數(shù)計(jì)算掩碼
ipcalc -m "$ip" -p "$num"
用wget 的遞歸方式下載整個(gè)網(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 登錄另一臺(tái)linux
ssh -p 22 wang@192.168.1.209
利用ssh 操作遠(yuǎn)程主機(jī)
ssh -p 22 root@192.168.1.209 環(huán)境變量中腳本
把本地文件拷貝到遠(yuǎn)程主機(jī)
scp -P 22 文件root@ip:/目錄
ssh 連接不提示yes
ssh -o StrictHostKeyChecking=no 192.168.70.130
把遠(yuǎn)程指定文件拷貝到本地
scp root@192.168.1.209:遠(yuǎn)程目錄本地目錄
通過SSH 掛載遠(yuǎn)程主機(jī)上的文件夾
sshfs name@server:/path/to/folder /path/to/mount/point
卸載的話使用fusermount 命令
fusermount -u /path/to/mount/point
用DIFF 對(duì)比遠(yuǎn)程文件跟本地文件
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
遠(yuǎn)程關(guān)掉一臺(tái)WINDOWS 機(jī)器
net rpc shutdown -I IP_ADDRESS -U username%password
禁ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
##################################
先ping 在掃描主機(jī)開放端口
nmap -PT 192.168.1.1-111
掃描出系統(tǒng)內(nèi)核版本
nmap -O 192.168.1.1
掃描端口的軟件版本
nmap -sV 192.168.1.1-111
半開掃描(通常不會(huì)記錄日志)
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
詳細(xì)信息
nmap -d 192.168.1.1-111
無法找出真正掃描主機(jī)(隱藏IP)
nmap -D 192.168.1.1-111
端口范圍
nmap -p 20-30,139,60000-
表示:掃描20 到30 號(hào)端口,139 號(hào)端口以及所有大于60000 的端口
組合掃描(不ping、軟件版本、內(nèi)核版本、詳細(xì)信息)
nmap -P0 -sV -O -v 192.168.30.251
##################################
====================================================================
----------------------------------
6 磁盤管理
----------------------------------
查看硬盤容量
df -h
查看磁盤分區(qū)格式
df -T
修改只讀文件系統(tǒng)為讀寫
mount -o remount,rw /
查看卷標(biāo)
e2label /dev/sda5
創(chuàng)建卷標(biāo)
e2label /dev/sda5 new-label
NTFS 添加卷標(biāo)
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
對(duì)文件系統(tǒng)修復(fù)
fsck -y /dev/sda6
查看超級(jí)塊的信息
dumpe2fs -h /dev/sda5
查看當(dāng)前系統(tǒng)支持文件系統(tǒng)
cat /proc/filesystems
檢測(cè)硬盤狀態(tài)
smartctl -H /dev/sda
檢測(cè)硬盤信息
smartctl -i /dev/sda
檢測(cè)所有信息
smartctl -a /dev/sda
檢測(cè)目錄下所有文件大小
du -h 目錄
顯示當(dāng)前目錄中子目錄的大小
du -h --max-depth=1
掛載光驅(qū)
mount -t iso9660 /dev/dvd /mnt
掛載鏡像文件
mount -o loop /software/rhel4.6.iso /mnt/
##################################
磁盤grub 開機(jī)引導(dǎo)項(xiàng)添加
/etc/grub.conf
title ms-dos
rootnoverify (hd0,0)
chainloader +1
##################################
建立軟RAID1
兩塊硬盤分區(qū)一樣,分別新建分區(qū)文件類型為software RAID
創(chuàng)建兩個(gè)就點(diǎn)擊raid 合并為RAID1,這里的掛載點(diǎn)為正常linux 目錄
查看raid 工作狀態(tài)
cat /proc/mdstat
兩個(gè)盤都加grub 引導(dǎo)
查看
cat /boot/grub/grub.conf
grub
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
修改grub 啟動(dòng)項(xiàng)配置文件
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 擴(kuò)容
##################################
新硬盤掛載
fdisk /dev/sdc
p # 打印分區(qū)
d # 刪除分區(qū)
n # 創(chuàng)建分區(qū),(一塊硬盤最多4 個(gè)主分區(qū),擴(kuò)展占一個(gè)主分區(qū)位置。p 主分區(qū)e 擴(kuò)展)
w # 保存退出
mkfs -t ext3 -L 卷標(biāo)/dev/sdc1 # 格式化相應(yīng)分區(qū)
mount /dev/sdc1 /mnt # 掛載
添加開機(jī)掛載分區(qū)
vi /etc/fstab
用卷標(biāo)掛載
LABEL=/data /data ext3 defaults 1 2
用真實(shí)分區(qū)掛載
/dev/sdb1 /data4 ext3 defaults 1 2
第一個(gè)數(shù)字"1"該選項(xiàng)被"dump"命令使用來檢查一個(gè)文件系統(tǒng)應(yīng)該以多快頻率進(jìn)行轉(zhuǎn)儲(chǔ),若不需
要轉(zhuǎn)儲(chǔ)就設(shè)置該字段為0
第二個(gè)數(shù)字"2"該字段被fsck 命令用來決定在啟動(dòng)時(shí)需要被掃描的文件系統(tǒng)的順序,根文件系統(tǒng)
"/"對(duì)應(yīng)該字段的值應(yīng)該為1,其他文件系統(tǒng)應(yīng)該為2。若該文件系統(tǒng)無需在啟動(dòng)時(shí)掃描則設(shè)置該
字段為0
##################################
====================================================================
----------------------------------
7 用戶管理
----------------------------------
建立用戶
useradd xuesong
修改密碼
passwd 用戶
echo "xuesong" | passwd xuesong --stdin
查找用戶顯示信息
finger
添加組
groupadd
修改文件擁有者(R 遞歸)
chown -R
修改所有者用戶中包含點(diǎn)"."
chown y\.li:mysql
修改用戶組
chgrp
修改用戶名
usermod -l 新用戶名老用戶名
修改用戶所屬組
usermod -g user group
修改用戶家目錄
usermod -d 目錄-m 用戶
將用戶添加到附加組
usermod -G user group
刪除帳號(hào)及家目錄
userdel -r
指定組并不允許登錄的用戶
useradd -g www -M -s /sbin/nologin www
切換用戶執(zhí)行
su - user -c "
#命令1
"
====================================================================
----------------------------------
8 腳本相關(guān)
----------------------------------
##################################
正則表達(dá)式
^ 行首定位
$ 行為定位
. 匹配除換行符以外的任意字符
* 匹配0 或多個(gè)重復(fù)字符
+ 重復(fù)一次或更多次
? 重復(fù)零次或一次
[] 匹配一組中任意一個(gè)字符
[^] 匹配不在指定組內(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+ 匹配一個(gè)或多個(gè)字母X
(abc|def)+ 匹配一連串的(最少一個(gè)) abc 或def;abc 和def 將匹配
\d 匹配任意一位數(shù)字
\D 匹配任意單個(gè)非數(shù)字字符
\w 匹配任意單個(gè)字母數(shù)字字符,同義詞是[:alnum:]
\s 匹配任意的空白符
\b 匹配單詞的開始或結(jié)束
[:alpha:] 代表所有字母不論大小寫
[:lower:] 表示小寫字母
[:upper:] 表示大寫字母
[:digit:] 表示數(shù)字字符
() 括號(hào)內(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)# 當(dāng)command 不為0 時(shí)
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 中運(yùn)行
(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 這個(gè)變量設(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 # 用于移動(dòng)位置變量,調(diào)整位置變量,使$3 的值賦給$2.$2 的值賦予$1
name + 0 # 將字符串轉(zhuǎn)換為數(shù)字
number " " # 將數(shù)字轉(zhuǎn)換成字符串
常用系統(tǒng)變量
$0 # 腳本啟動(dòng)名(包括路徑)
basename $0 # 只取腳本名
$n # 當(dāng)前程式的第n 個(gè)參數(shù),n=1,2,…9
$* # 當(dāng)前程式的所有參數(shù)(不包括腳本本身)
$# # 當(dāng)前程式的參數(shù)個(gè)數(shù)(不包括腳本本身)
$$ # 當(dāng)前程式的PID
$! # 執(zhí)行上一個(gè)指令的PID
$? # 執(zhí)行上一個(gè)指令的返回值
變量引用技巧${}
${name:+value} # 如果設(shè)置了name,就把value 顯示,未設(shè)置則為空
${name:-value} # 如果設(shè)置了name,就顯示它,未設(shè)置就顯示value
${name:?value} # 未設(shè)置提示用戶錯(cuò)誤信息value
${name:=value} # 如未設(shè)置就把value 設(shè)置并顯示寫入本地中>,
${#A} # 可得到變量中字節(jié)
${#A[*]} # 數(shù)組個(gè)數(shù)
${A[2]} # 腳本的一個(gè)參數(shù)
${A:4:9} # 取變量中第4 位到后面9 位
${A/www/http} # 取變量并且替換每行第一個(gè)關(guān)鍵字
${A//www/http} # 取變量并且全部替換每行關(guān)鍵字
定義了一個(gè)變量為:
file=/dir1/dir2/dir3/my.file.txt
${file#*/} # 去掉第一條/ 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/} # 去掉最后一條/ 及其左邊的字串:my.file.txt
${file#*.} # 去掉第一個(gè). 及其左邊的字串:file.txt
${file##*.} # 去掉最后一個(gè). 及其左邊的字串:txt
${file%/*} # 去掉最后條/ 及其右邊的字串:/dir1/dir2/dir3
${file%%/*} # 去掉第一條/ 及其右邊的字串:(空值)
${file%.*} # 去掉最后一個(gè). 及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*} # 去掉第一個(gè). 及其右邊的字串:/dir1/dir2/dir3/my
# # 是去掉左邊(在鍵盤上# 在$ 之左邊)
# % 是去掉右邊(在鍵盤上% 在$ 之右邊)
# 單一符號(hào)是最小匹配﹔兩個(gè)符號(hào)是最大匹配
##################################
test 條件判斷
# 符號(hào)[ ] 等同test
expression 為字符串操作
-n str # 字符串str 是否不為空
-z str # 字符串str 是否為空
expression 為文件操作
-b # 是否塊文件
-p # 文件是否為一個(gè)命名管道
-c # 是否字符文件
-r # 文件是否可讀
-d # 是否一個(gè)目錄
-s # 文件的長(zhǎng)度是否不為零
-e # 文件是否存在
-S # 是否為套接字文件
-f # 是否普通文件
-x # 文件是否可執(zhí)行,則為真
-g # 是否設(shè)置了文件的SGID 位
-u # 是否設(shè)置了文件的SUID 位
-G # 文件是否存在且歸該組所有
-w # 文件是否可寫,則為真
-k # 文件是否設(shè)置了的粘貼位
-t fd # fd 是否是個(gè)和終端相連的打開的文件描述符(fd 默認(rèn)為1)
-O # 文件是否存在且歸該用戶所有
! # 取反
expression 為整數(shù)操作
expr1 -a expr2 # 如果expr1 和expr2 評(píng)估為真,則為真
expr1 -o expr2 # 如果expr1 或expr2 評(píng)估為真,則為真
兩值比較
整數(shù)字符串
-lt : # 小于
-gt >: # 大于
-le =: # 小于或等于
-ge >=: # 大于或等于
-eq ==: # 等不等
-ne !=: # 不等于
判斷大小,0 為真,1 為假
test 10 -lt 5
echo $?
1
判斷字符串長(zhǎng)度是否為0
test -n "hello"
0
##################################
重定向
# 標(biāo)準(zhǔn)輸出stdout 和標(biāo)準(zhǔn)錯(cuò)誤stderr 標(biāo)準(zhǔn)輸入stdin
cmd 1> fiel # 把標(biāo)準(zhǔn)輸出重定向到file 文件中
cmd > file 2>1 # 把標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤一起重定向到file 文件中
cmd 2> file # 把標(biāo)準(zhǔn)錯(cuò)誤重定向到file 文件中
cmd 2>> file # 把標(biāo)準(zhǔn)錯(cuò)誤重定向到file 文件中(追加)
cmd >> file 2>1 # 把標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤一起重定向到file 文件中(追加)
cmd file >file2 # cmd 命令以file 文件作為stdin(標(biāo)準(zhǔn)輸入),以file2 文件作為標(biāo)
準(zhǔn)輸出
cat >file # 以讀寫的方式打開file
cmd file cmd # 命令以file 文件作為stdin
cmd delimiter
cmd; #從stdin 中讀入,直至遇到delimiter 分界符。
delimiter
>n # 使用系統(tǒng)調(diào)用dup (2) 復(fù)制文件描述符n 并把結(jié)果用作標(biāo)準(zhǔn)輸出
n # 標(biāo)準(zhǔn)輸入復(fù)制自文件描述符n
- # 關(guān)閉標(biāo)準(zhǔn)輸入(鍵盤)
>- # 關(guān)閉標(biāo)準(zhǔn)輸出
n- # 表示將n 號(hào)輸入關(guān)閉
n>- # 表示將n 號(hào)輸出關(guān)閉
##################################
運(yùn)算符
$[]等同于$(()) # $[]表示形式告訴shell 求中括號(hào)中的表達(dá)式的值
~var # 按位取反運(yùn)算符,把var 中所有的二進(jìn)制為1 的變?yōu)?,為0 的變?yōu)?
var\str # 左移運(yùn)算符,把var 中的二進(jìn)制位向左移動(dòng)str 位,忽略最左端移出的各位,最
右端的各位上補(bǔ)上0 值,每做一次按位左移就有var 乘2
var>>str # 右移運(yùn)算符,把var 中所有的二進(jìn)制位向右移動(dòng)str 位,忽略最右移出的各位,
最左的各位上補(bǔ)0,每次做一次右移就有實(shí)現(xiàn)var 除以2
varstr # 與比較運(yùn)算符,var 和str 對(duì)應(yīng)位,對(duì)于每個(gè)二進(jìn)制來說,如果二都為1,結(jié)果為1.
否則為0
var^str # 異或運(yùn)算符,比較var 和str 對(duì)應(yīng)位,對(duì)于二進(jìn)制來說如果二者互補(bǔ),結(jié)果為1,
否則為0
var|str # 或運(yùn)算符,比較var 和str 的對(duì)應(yīng)位,對(duì)于每個(gè)二進(jìn)制來說,如二都該位有一個(gè)1
或都是1,結(jié)果為1,否則為0
運(yùn)算符的優(yōu)先級(jí)
級(jí)別運(yùn)算符說明
1 =,+=,-=,/=,%=,*=,=,^=,|=,=,>>== # 賦值運(yùn)算符
2 || # 邏輯或前面不成功執(zhí)行
3 # 邏輯與前面成功后執(zhí)行
4 | # 按位或
5 ^ # 按異位與
6 # 按位與
7 ==,!= # 等于/不等于
8 =,>=,,> # 大于或等于/小于或等于/大于/小于
9 \,>> # 按位左移/按位右移(無轉(zhuǎn)意符號(hào))
10 +,- # 加減
11 *,/,% # 乘,除,取余
12 ! ,~ # 邏輯非,按位取反或補(bǔ)碼
13 -,+ # 正負(fù)
##################################
數(shù)學(xué)運(yùn)算
$(( )) 整數(shù)運(yùn)算符號(hào)大致有這些:
+ - * / **:分別為"加、減、乘、除、密運(yùn)算"
| ^ !:分別為"AND、OR、XOR、NOT" 運(yùn)算
% :余數(shù)運(yùn)算
運(yùn)算
let
let x=16/4
let x=5**5
手工命令行計(jì)數(shù)器
expr
SUM=`expr 2 \* 3`
計(jì)算字串長(zhǎng)度
expr length "bkeep zbb"
抓取字串
expr substr "bkeep zbb" 4 9
抓取第一個(gè)字符數(shù)字串出現(xiàn)的位置
expr index "bkeep zbb" e
整數(shù)運(yùn)算
expr 14 % 9
expr 30 / 3 / 2 # 運(yùn)算符號(hào)有空格
增量計(jì)數(shù)(加循環(huán)即可)
LOOP=0
LOOP=`expr $LOOP + 1`
數(shù)值測(cè)試(如果試圖計(jì)算非整數(shù),則會(huì)返回錯(cuò)誤。)
rr=3.4
expr $rr + 1
expr: non-numeric argument
rr=5
expr $rr + 1
6
模式匹配(可以使用expr 通過指定冒號(hào)選項(xiàng)計(jì)算字符串中字符數(shù))
.* 意即任何字符重復(fù)0 次或多次
expr bkeep.doc : '.*'
在expr 中可以使用字符串匹配操作,這里使用模式抽取.doc 文件附屬名。
expr bkeep.doc : '\(.*\).doc'
次方計(jì)算
echo "m^n"|bc
##################################
grep 用法
-c 顯示匹配到得行的數(shù)目,不顯示內(nèi)容
-h 不顯示文件名
-i 忽略大小寫
-l 只列出匹配行所在文件的文件名
-n 在每一行中加上相對(duì)行號(hào)
-s 無聲操作只顯示報(bào)錯(cuò),檢查退出狀態(tài)
-v 反向查找
-e 使用正則表達(dá)式
-A1 打印匹配行和下一行
-wc 匹配出現(xiàn)次數(shù)
grep 可用于if 判斷,找到$?為then
過濾關(guān)鍵字符行
grep -v "a" txt
精確匹配字符串
grep 'a\&;' txt
大小寫敏感
grep -i "a" txt
同時(shí)匹配大小寫
grep "a[bB]" txt
查找0-9 重復(fù)三次的所在行
grep '[0-9]\{3\}' txt
任意條件匹配
grep -E "word1 | word2 | word3" file
同時(shí)匹配三個(gè)
grep word1 file | grep word2 |grep word3
##################################
tr 用法
-c 用字符串1 中字符集的補(bǔ)集替換此字符集,要求字符集為ASCII。
-d 刪除字符串1 中所有輸入字符。
-s 刪除所有重復(fù)出現(xiàn)字符序列,只保留第一個(gè);即將重復(fù)出現(xiàn)字符串壓縮為一個(gè)字符串。
[a-z] a-z 內(nèi)的字符組成的字符串。
[A-Z] A-Z 內(nèi)的字符組成的字符串。
[0-9] 數(shù)字串。
\octal 一個(gè)三位的八進(jìn)制數(shù),對(duì)應(yīng)有效的ASCII 字符。
[O*n] 表示字符O 重復(fù)出現(xiàn)指定次數(shù)n。因此[O*2]匹配OO 的字符串。
tr 中特定控制字符的不同表達(dá)方式
速記符含義八進(jìn)制方式
\a Ctrl-G 鈴聲\007
\b Ctrl-H 退格符\010
\f Ctrl-L 走行換頁(yè)\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 文件中所有冒號(hào),代之以tab 鍵
tr -s "[:]" "[\011]" /etc/passwd
tr -s "[:]" "[\t]" /etc/passwd
增加顯示路徑可讀性
echo $PATH | tr ":" "\n"
tr 在vi 內(nèi)使用,在tr 前加處理行范圍和感嘆號(hào)('$'表示最后一行)
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,因?yàn)閠r 不能插入兩個(gè)字符來替換一個(gè)字符
awk '{ print $0"\r" }'unixfile > dosfile
##################################
awk 用法
\b 退格
\f 換頁(yè)
\n 換行
\r 回車
\t 制表符Tab
\c 代表任一其他字符
-F 改變FS 值(分隔符)
~ 匹配
= 賦值
== 匹配
+= 疊加
[:alnum:] 字母數(shù)字字符
[:alpha:] 字母字符
[:cntrl:] 控制字符
[:digit:] 數(shù)字字符
[:graph:] 非空白字符(非空格、控制字符等)
[:lower:] 小寫字母
[:print:] 與[:graph:]相似,但是包含空格字符
[:punct:] 標(biāo)點(diǎn)字符
[:space:] 所有的空白字符(換行符、空格、制表符)
[:upper:] 大寫字母
[:xdigit:] 十六進(jìn)制的數(shù)字(0-9a-fA-F)
內(nèi)建變量
$n 當(dāng)前記錄的第n 個(gè)字段,字段間由FS 分隔
$0 完整的輸入記錄
ARGC 命令行參數(shù)的數(shù)目
ARGIND 命令行中當(dāng)前文件的位置( 從0 開始算)
ARGV 包含命令行參數(shù)的數(shù)組
CONVFMT 數(shù)字轉(zhuǎn)換格式( 默認(rèn)值為%.6g)
ENVIRON 環(huán)境變量關(guān)聯(lián)數(shù)組
ERRNO 最后一個(gè)系統(tǒng)錯(cuò)誤的描述
FIELDWIDTHS 字段寬度列表( 用空格鍵分隔)
FILENAME 當(dāng)前文件名
FNR 同NR ,但相對(duì)于當(dāng)前文件
FS 字段分隔符( 默認(rèn)是任何空格)
IGNORECASE 如果為真(即非0 值),則進(jìn)行忽略大小寫的匹配
NF 當(dāng)前記錄中的字段數(shù)(列)
NR 當(dāng)前行數(shù)
OFMT 數(shù)字的輸出格式( 默認(rèn)值是%.6g)
OFS 輸出字段分隔符( 默認(rèn)值是一個(gè)空格)
ORS 輸出記錄分隔符( 默認(rèn)值是一個(gè)換行符)
RLENGTH 由match 函數(shù)所匹配的字符串的長(zhǎng)度
RS 記錄分隔符( 默認(rèn)是一個(gè)換行符)
RSTART 由match 函數(shù)所匹配的字符串的第一個(gè)位置
SUBSEP 數(shù)組下標(biāo)分隔符( 默認(rèn)值是/034) 。
BEGIN 先處理(可不加文件參數(shù))
END 結(jié)束時(shí)處理
[[:digit:][:lower:]] 數(shù)字和小寫字母(占一個(gè)字符)
-F"[ ]+|[%]+" 已多個(gè)空格或多個(gè)%為分隔符
[a-z]+ 多個(gè)小寫字母
[a-Z] 代表所有大小寫字母(aAbB...zZ)
[a-z] 代表所有大小寫字母(ab...z)
打印匹配到得行
awk '/Tom/' 文件
如果第三個(gè)字段值小于4000 才打印
awk '$3 4000' 文件
匹配Tom 開頭的行打印第一個(gè)字段
awk '/^Tom/{print $1}'
顯示所有第一個(gè)字段不是以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
(括號(hào)代表if 語(yǔ)句判斷"?"代表then ":"代表else)
算術(shù)運(yùn)算(第三個(gè)字段和第四個(gè)字段乘積大于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 個(gè)元素
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
提取時(shí)間,空格不固定
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 中計(jì)算(求余數(shù))
echo list|awk '{ i=($1%100);if ( $i >= 0 ) {print $0,$i}}'
sub 匹配第一次出現(xiàn)的符合模式的字符串,相當(dāng)于sed 's//'
awk '{sub(/Mac/,"Macintosh");print}' urfile
#用Macintosh 替換Mac
gsub 匹配所有的符合模式的字符串,相當(dāng)于sed 's//g'
awk '{sub(/Mac/,"MacIntosh",$1); print}' file
#第一個(gè)域內(nèi)用Macintosh 替換Mac
處理sql 語(yǔ)句
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;iNR;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é)果中第一個(gè)值是$2 的總和第二個(gè)值是$3 的總和第三個(gè)值是$2 總和除個(gè)數(shù)(平均值) 第
四個(gè)值是$3 總和除個(gè)數(shù)(平均值)
#e+06 是科學(xué)計(jì)數(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è)定一個(gè)變量開始為0,遇到比該數(shù)大的值,就賦值給該變量,直到結(jié)束
求最小值
cat txt |awk 'BEGIN{a=11111}{if ($1a) a=$1 fi}END{print a}'
判斷$1 是否整除(awk 中定義變量引用時(shí)不能帶$ )
cat txt |awk '{ i=$1%10;if ( i == 0 ) {print i}}'
##################################
sed 用法
-n 輸出由編輯指令控制(取消默認(rèn)的輸出,必須與編輯指令一起配合)
-i 直接對(duì)文件操作
-e 多重編輯
p 打印
d 刪除
s 替換
g 配合s 全部替換
i 行前插入
a 行后插入
r 讀
y 轉(zhuǎn)換
q 退出
\(..\) 保存..作為標(biāo)簽1(\1)
代表查找的串內(nèi)容
* 前導(dǎo)符
.* 匹配任意多個(gè)字符
模式空間(兩行兩行處理)
N 將第二行追加到第一行將換行符\n 替換空極為一行
n 將第二行覆蓋到第一行
h 把模式空間里的行拷貝到暫存空間
H 把模式空間里的行追加到暫存空間
g 用暫存空間的內(nèi)容替換模式空間的行
G 把暫存空間的內(nèi)容追加到模式空間的行后
x 將暫存空間的內(nèi)容于模式空間里的當(dāng)前行互換
! 對(duì)所選行以外的所有行應(yīng)用命令。
注意:暫存空間里默認(rèn)存儲(chǔ)一個(gè)空行。
sed 命令替換并打印出替換行( -i 改變文本)
sed -n -e "{s/文本(正則表達(dá)式)/替換的文本/p}"
打印并刪除正則表達(dá)式的那部分內(nèi)容
sed -n -e "{s/^ *[0-9]*//p}"
刪除含關(guān)鍵的一行
sed -i "/^$f/d" a
直接對(duì)文本替換
sed -i "s/=/:/" c
找到pearls 開頭在行尾加jcui
sed -i "/^pearls/s/$/jcui/" ab.txt
標(biāo)簽(保存\(mar\)作為標(biāo)簽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 前面加#號(hào)
echo a|sed -e 's/a/#/g'
##################################
圖形dialog
多選界面[方括號(hào)]
dialog --title "Check me" --checklist "Pick Numbers" 15 25 3 1 "one" "off" 2 "two" "on" 3 "three"
"off" 2>tmp
多選界面(圓括號(hào))
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
進(jìn)度條
dialog --title "Installation" --backtitle "Star Linux" --gauge "Linux Kernel" 10 60 50
選擇yes/no
dialog --title "標(biāo)題" --backtitle "Dialog" --yesno "說明" 20 60
公告
dialog --title "公告標(biāo)題" --backtitle "Dialog" --msgbox "內(nèi)容" 20 60
顯示訊息后立即離開
dialog --title "hey" --backtitle "Dialog" --infobox "Is everything okay?" 10 60
輸入對(duì)話框
dialog --title "hey" --backtitle "Dialog" --inputbox "Is okay?" 10 60 "yes"
顯示文檔內(nèi)容
dialog --title "Array 30" --backtitle "All " --textbox /root/txt 20 75
多條輸入對(duì)話框
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
星號(hào)顯示輸入--insecure
dialog --title "Password" --insecure --passwordbox "請(qǐng)輸入密碼" 10 35
選擇日期
dialog --stdout --title "日歷" --calendar "請(qǐng)選擇" 0 0 9 1 2010
##################################
腳本頭# sh 為當(dāng)前系統(tǒng)默認(rèn)shell,可指定為bash 等
#!/bin/sh
臨時(shí)文件定義
errtmp=/tmp/$$`date +%s%N`.errtmp
outtmp=/tmp/$$`date +%s%N`.outtmp
true > $outtmp
隨機(jī)數(shù)
$RANDOM
進(jìn)程號(hào)
$$
納秒
date +%N
在當(dāng)前bash 環(huán)境下讀取并執(zhí)行FileName 中的命令
source file-name # 等同. FileName
間隔睡眠5 秒
sleep 5
在接收到信號(hào)后將要采取的行動(dòng)
trap
當(dāng)前目錄
$PWD
之前一個(gè)目錄的路徑
$OLDPWD
返回上一個(gè)目錄路徑
cd -
重復(fù)打印
yes
自動(dòng)回答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
排列組合(括號(hào)內(nèi)一個(gè)元素分別和其他括號(hào)內(nèi)元素組合)
echo {a,b,c}{a,b,c}{a,b,c}
返回目錄名
pwd | awk -F/ '{ print "目錄名:" ,$2 }'
替換上一條命令中的(foo)一個(gè)短語(yǔ)(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 行合并為一行(可擴(kuò)展)
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 "第一個(gè)參數(shù)為: $1 參數(shù)個(gè)數(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 "請(qǐng)選擇" --ok-label "提交" --cancel-label "取消"
--menu "請(qǐng)選擇" 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 輸入對(duì)話框加判斷
while :
do
outtmp=/tmp/outtmp
dialog --title "雪松制作" --form "請(qǐng)輸入" 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 "您輸入的不合法,請(qǐng)從新輸入!"
fi
else
echo "您輸入的不合法,請(qǐng)從新輸入!"
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 "您輸入的日期不合法,請(qǐng)從新輸入!"
fi
else
echo "您輸入的日期不合法,請(qǐng)從新輸入!"
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
登陸遠(yuǎn)程執(zhí)行命令(特殊符號(hào)需要\轉(zhuǎn)義)
ssh root@ip EOF
#執(zhí)行命令
EOF
登陸mysql 執(zhí)行命令
mysql -uroot -ppasswd -S mysql.sock --default-character-set=gbk -AEOF>outtmp
#mysql 命令
EOF
##################################
數(shù)學(xué)計(jì)算的小算法
#!/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ò)主機(jī)
[file]
comment=home directories
path=/etc/samba/xuesong
public=yes
writable=yes
browseable=yes
重啟
service smb restart
linux 訪問windows 共享
smbclient -L //ip 地址或計(jì)算機(jī)名
##################################
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; };
};
測(cè)試主配置文件
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
測(cè)試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
測(cè)試解析是否成功
host www.moon.com
nslookup www.moon.com
##################################
ftp 配置
查看vsftp 是否安裝
rpm -qa | grep vsftp
主配置文件
vi /etc/vsftpd/vsftpd.conf
啟動(dòng)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ù)庫(kù)db4
rpm -qa |grep db4
(2)將帳戶放入文本:(奇數(shù)行)用戶名(偶數(shù)行)密碼
vi zhanghu.dat
(3)生成帳戶的文件數(shù)據(jù)庫(kù)
db_load -T -t hash -f zhanghu.dat /etc/vsftpd/vsftpd_zhanghu.db
(4)修改文件數(shù)據(jù)庫(kù)訪問權(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)添加一個(gè)虛擬用戶的入口帳戶
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)因?yàn)槿肟趲羰且粋€(gè)本地帳戶,所以要指定虛擬用戶具有本地帳戶的權(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)客戶端虛擬賬號(hào)測(cè)試
建立用戶腳本。最好在加上判斷用戶名是否存在
#!/bin/sh
echo 請(qǐng)輸入用戶名
read y
echo $y >> zhanghu.dat
echo 請(qǐng)輸入密碼
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)頁(yè)放在的htdocs 中
開機(jī)啟動(dòng)
vi /etc/rc.d/rc.local
/usr/local/httpd/bin/apachectl start
如果啟動(dòng)提示
httpd: Could not reliably determine the server fully qualified domain name, using 127.0.0.1 for
ServerName
修改/etc/hosts 計(jì)算機(jī)名
在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ù)庫(kù)和表文件,在安裝包中輸入。
scripts/mysql_install_db --user=mysql
vi ~/.bashrc
export PATH="$PATH: /usr/local/mysql/bin"
配置文件,有l(wèi)arge,medium,small 三個(gè),根據(jù)機(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 常用命令
啟動(dòng)mysql 服務(wù)
./mysql/bin/mysqld_safe --user=mysql
登錄mysql 的命令
格式: mysql -h 主機(jī)地址-u 用戶名-p 用戶密碼
mysql -h110.110.110.110 -P3306 -uroot -p
mysql -uroot -p -S /data1/mysql5/data/mysql.sock -A --default-character-set=GBK
刷新
flush privileges;
顯示所有數(shù)據(jù)庫(kù)
show databases;
打開數(shù)據(jù)庫(kù)
use dbname;
顯示選中數(shù)據(jù)庫(kù)中所有的表
show tables;
查看表結(jié)構(gòu)
desc tables;
刪除數(shù)據(jù)庫(kù)
drop database name;
刪除表
drop table name;
創(chuàng)建數(shù)據(jù)庫(kù)
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ù)庫(kù)
mysqldump -h host -u root -p dbname >dbname_backup.sql
mysqlhotcopy 只能備份MyISAM 引擎
/bin/mysqlhotcopy -u root -p
還原數(shù)據(jù)庫(kù)
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 查看所有用戶的語(yǔ)句
select user();
刪除用戶
delete from user where user='sss' and host='localhost' ;
查看主從
show slave status\G;
查看主從復(fù)制進(jìn)程
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)建表指定存儲(chǔ)引擎的類型:
CREATE TABLE innodb (id int, title char(20)) ENGINE = INNODB
CREATE TABLE myisam (id int, title char(20)) ENGINE = MyISAM
改變現(xiàn)有的表使用的存儲(chǔ)引擎:
ALTER TABLE mytable ENGINE = MyISAM
查詢表引擎
SHOW TABLE STATUS from 數(shù)據(jù)庫(kù)庫(kù)名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ù)的第二個(gè)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
最后一步重新啟動(dòng)apache 報(bào)如下錯(cuò)誤:
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
命令選項(xiàng)解釋:有兩種命令選項(xiàng)格式,長(zhǎng)的和短的,具有相同的意思。在實(shí)際使用時(shí),兩種都
可以。
-A --add-service 在內(nèi)核的虛擬服務(wù)器表中添加一條新的虛擬服務(wù)器記錄。也就是增加一臺(tái)新的
虛擬服務(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 選項(xiàng)可讀的格式
-a --add-server 在內(nèi)核虛擬服務(wù)器表的一條記錄里添加一條新的真實(shí)服務(wù)器記錄。也就是在一個(gè)
虛擬服務(wù)器中增加一臺(tái)新的真實(shí)服務(wù)器
-e --edit-server 編輯一條虛擬服務(wù)器記錄中的某條真實(shí)服務(wù)器記錄
-d --delete-server 刪除一條虛擬服務(wù)器記錄中的某條真實(shí)服務(wù)器記錄
-L|-l --list 顯示內(nèi)核虛擬服務(wù)器表
其他的選項(xiàng):-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 標(biāo)記過的服務(wù)類型。
-s --scheduler scheduler 使用的調(diào)度算法,有這樣幾個(gè)選項(xiàng)rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,-p
--persistent [timeout] 持久穩(wěn)固的服務(wù)。這個(gè)選項(xiàng)的意思是來自同一個(gè)客戶的多次請(qǐng)求,將被同
一臺(tái)真實(shí)的服務(wù)器處理。timeout 的默認(rèn)值為300 秒。
-M --netmask netmask persistent granularity mask
-r --real-server server-address 真實(shí)的服務(wù)器[Real-Server:port]
-g --gatewaying 指定LVS 的工作模式為直接路由模式(也是LVS 默認(rèn)的模式)
-i --ipip 指定LVS 的工作模式為隧道模式
-m --masquerading 指定LVS 的工作模式為NAT 模式
-w --weight weight 真實(shí)服務(wù)器的權(quán)值
--mcast-interface interface 指定組播的同步接口
-c --connection 顯示LVS 目前的連接如:ipvsadm -L -c
##################################
VS-NAT 模式
內(nèi)容服務(wù)器的容量10~20
使用保留地址的LAN
雙向重寫
安裝ipvsadm 軟件
內(nèi)核做個(gè)連接
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,建立不同頁(yè)面測(cè)試
缺點(diǎn)不能排除宕機(jī)的web 服務(wù)器,可使用LVS+Keepalived 組合
##################################
heartbeat 心跳檢測(cè)(雙機(jī)熱備)
安裝heartbeat 的rpm 包
需要先裝heartbeat-pils 和heartbeat-stonith 兩個(gè)包
主節(jié)點(diǎn)的配置
安裝完解壓配置文件
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 .
查看計(jì)算機(jī)名,記錄下來
uname -n
vi ha.cf
打開日志記錄文件
logfile /var/log/ha-log
打開心跳檢測(cè)
keepalive 2
死亡時(shí)間
deadtime 30
warntime 10
initdead 120
用什么協(xié)議端口(udp)
udpport 694
使用哪個(gè)網(wǎng)卡作為心跳檢測(cè)
bcast eth1
備用的IP
ucast eth1 192.168.1.20
主節(jié)點(diǎn)服務(wù)器
node 主節(jié)點(diǎn)計(jì)算機(jī)名
node 另一個(gè)計(jì)算機(jī)名
ping 外網(wǎng)測(cè)試
ping 一個(gè)外網(wǎng)的IP
配置驗(yàn)證模式
vi authkeys
打開
auth1
1 crc
配置虛擬服務(wù)
vi haresources
加上一條名稱和IP
計(jì)算機(jī)名IP httpd
sev1.example.com 222.90.88.88 httpd
hosts 文件要配置上兩個(gè)機(jī)器的機(jī)器名和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é)點(diǎn)
直接拷貝主節(jié)點(diǎn)的文件修改
安裝完進(jìn)入安裝目錄
cd /etc/ha.d
用sftp 登陸主機(jī)
sftp 222.90.88.10
cd /etc/ha.d
get ha.cf
get authkeys
get hare*
bye
只需要修改ha.cf 文件
vi ha.cf
ucast eth1 192.168.1.10
啟動(dòng)備用節(jié)點(diǎn)
service heartbeat start
測(cè)試
主節(jié)點(diǎn)和負(fù)節(jié)點(diǎn)建立不同index 頁(yè)面
主節(jié)點(diǎn)虛擬出外網(wǎng)ip eth0:0
停掉主節(jié)點(diǎn)任務(wù)
重新訪問
啟動(dòng)后在訪問
##################################
DR 直接路由模式
同一網(wǎng)段的LAN
內(nèi)容服務(wù)器的容量20 以上
降低LVF 的負(fù)載
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
第二臺(tái)服務(wù)器
sftp 222.90.88.10
get /etc/init.d/lvs.sh
bye
mv lvs.sh /etc/init.d/
/etc/init.d/lvs.sh
測(cè)試兩個(gè)服務(wù)器測(cè)試頁(yè)面寫入不同內(nèi)容
分別啟動(dòng)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
測(cè)試兩個(gè)服務(wù)器測(cè)試頁(yè)面寫入不同內(nèi)容
分別啟動(dòng)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
測(cè)試
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
去掉前面兩個(gè)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
查看啟動(dòng)級(jí)別
chkconfig --list |grep sas
開啟啟動(dòng)級(jí)別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
確認(rèn)gcj 的版本號(hào)
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 管理
查看虛擬主機(jī)列表
xm list
使用文本方式連接虛擬系統(tǒng)
xm console test
啟動(dòng)虛擬主機(jī)
xm create test
虛擬機(jī)和主機(jī)切換
ctrl+]
關(guān)閉虛擬主機(jī)
xm shutdown 主機(jī)名
虛擬機(jī)克隆(關(guān)閉后克隆)
virt-clone -o test -n test1 -f /data/xen/test1.img
虛擬機(jī)增加硬盤
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" ]
啟動(dòng)XEN 虛擬機(jī)并登陸測(cè)試新加的磁盤
增加虛擬機(jī)網(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運(yùn)維常用命令,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • Linux 入門常用命令 password — 修改密碼,改變用戶
  • Linux 中 CURL常用命令詳解
  • linux系統(tǒng)安裝git及git常用命令
  • Linux常用命令全集(超全面)
  • linux下防火墻開啟某個(gè)端口號(hào)及防火墻常用命令使用(詳解)
  • Linux操作系統(tǒng)操作MySQL常用命令小結(jié)
  • Linux 常用命令大全(經(jīng)典)
  • Linux下find和grep常用命令及區(qū)別介紹
  • 積累linux常用命令大全
  • LINUX入門級(jí)常用命令20條整理
  • 日常整理linux常用命令大全(收藏)
  • Linux常用命令last的使用方法詳解
  • 詳解Linux防火墻iptables禁IP與解封IP常用命令
  • linux 入侵常用命令匯編
  • 基于Linux調(diào)試工具strace與gdb的常用命令總結(jié)
  • Linux系統(tǒng)信息查看常用命令
  • 新手入門級(jí)linux系統(tǒng)常用命令大全
  • 最新Linux下安裝tomcat8圖解過程

標(biāo)簽:滁州 六盤水 鎮(zhèn)江 丹東 優(yōu)質(zhì)小號(hào) 武漢 百色 自貢

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《很實(shí)用的Linux 系統(tǒng)運(yùn)維常用命令及常識(shí)(超實(shí)用)》,本文關(guān)鍵詞  很,實(shí),用的,Linux,系統(tǒng),運(yùn)維,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《很實(shí)用的Linux 系統(tǒng)運(yùn)維常用命令及常識(shí)(超實(shí)用)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于很實(shí)用的Linux 系統(tǒng)運(yùn)維常用命令及常識(shí)(超實(shí)用)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章