中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
運(yùn)維常用linux命令\shell技巧范例

運(yùn)維常用linux命令\shell技巧范例
                        --------雪松整理

Q群: 198173206  歡迎linux系統(tǒng)運(yùn)維朋友加入!

錯(cuò)誤在所難免,還望指正!

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

----------------------------------
        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

查看上下翻頁且顯示行號(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] 文件或目錄

給口令文件設(shè)置不可改變位
chattr +i /etc/passwd

向下分面器
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

打開文件定位到24行
vi +24 /etc/passwd

vi加強(qiáng)版
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

向前翻頁
ctrl+ U

向后翻頁
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 -C 放到指定目錄 包中的目錄

打包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

升級(jí)包
rpm -Uvh

解壓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)模式(3為多用戶命令)
vi /etc/inittab
禁止 ctrl + alt + del 關(guān)閉計(jì)算機(jī)
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now


查找命令的目錄
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

列出所有語系
locale -a

修改語言
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)

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

使TCP SYN Cookie 保護(hù)生效  # "SYN Attack"是一種拒絕服務(wù)的攻擊方式
echo 1 > /proc/sys/net/ipv4/tcp_syncookies


--------------------------------------------------------------------

    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 頁面錯(cuò)誤次數(shù)
v nDRT 最后一次寫入到現(xiàn)在,被修改過的頁面數(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)題" 收件箱
"`echo "內(nèi)容"|iconv -f utf8 -t gbk`" | /bin/mail -s "`echo "標(biāo)題"|iconv -f utf8 -t gbk`" 收件箱

打開服務(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

抓包
tcpdump tcp port 22

查看監(jiān)聽
netstat -anlp
-a     顯示所有連接中的Socket
-t     顯示TCP連接
-u     顯示UDP連接
-n     顯示所有已建立的有效連接

##################################

先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

恢復(fù)密碼
在linux出現(xiàn)grub后,在安裝的系統(tǒng)上面按"e",然后出現(xiàn)grub的配置文件,按鍵盤移動(dòng)光標(biāo)到第二行"Ker……",再按"e",然后在這一行的結(jié)尾加上:空格 single或者空格1回車,然后按"b"重啟,就進(jìn)入了"單用戶模式"。

查找用戶顯示信息
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
var&str         #  與比較運(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á)式
-A3 打印匹配行和下三行
-w  精確匹配
-wc 精確匹配次數(shù)
grep可用于if判斷,找到$?為then

過濾關(guān)鍵字符行
grep -v "a" txt

精確匹配字符串
grep -w '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  走行換頁\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   換頁
\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語句判斷 "?"代表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語句
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é)果中第一個(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 ($1<a) 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   多重編輯 #修改文件先加 -i

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}"

刪除匹配行
sed -i "/^$f/d" a

刪除匹配行到末尾
sed -i '/ppppppppppp/,$d' incl

直接對(duì)文本替換
sed -i "s/=/:/" c

找到pearls開頭在行尾加j
sed -i "/^pearls/s/$/j/" 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 -i -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 }'

倒置讀取文件  # 刪除最后3行
tac file |sed 1,3d|tac

替換上一條命令中的(foo)一個(gè)短語(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 -A<<EOF>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
fi
A=`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

##################################

    查詢數(shù)據(jù)庫其它引擎

#/bin/bash
path1=/data/mysql/data/
dbpasswd=db123
#MyISAM或InnoDB
engine=InnoDB

if [ -d $path1 ];then

dir=`ls -p $path1 |awk '/\/$/'|awk -F'/' '{print $1}'`
    for db in $dir
    do
    number=`mysql -uroot -p$dbpasswd -A -S "$path1"mysql.sock -e "use ${db};show table status;" |grep -c $engine`
        if [ $number -ne 0 ];then
        echo "${db}"
        fi
    done
fi

##################################

    批量修改數(shù)據(jù)庫引擎
   
#/bin/bash
for db in test test1 test3
do
tables=`mysql -uroot -pdb123 -A -S /data/mysql/data/mysql.sock -e "use $db;show tables;" |awk 'NR != 1{print}'`

for table in $tables
do
mysql -uroot -pdb123 -A -S /data/mysql/data/mysql.sock -e "use $db;alter table $table engine=MyISAM;"
done

done 

##################################

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux經(jīng)常用到的命令
被DDOS了怎么辦,淺談Liunx防御DDOS攻擊
誰再說不熟悉Linux命令,就把這個(gè)給他扔過去!
2018 新浪 Linux 運(yùn)維面試題
shell編程范例之字符串操作 - wuye_chinaunix
UNIX 系統(tǒng)中的文本操作簡(jiǎn)介
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服