shell 命令
column -t # 整齐排列
for i in cat list1|awk '{print $1}' |head -n 1
;do printf “
i\t";ssh−p8022root@
i
\t
"
;
s
s
h
−
p
8022
r
o
o
t
@
i “ls -l /opt/log/nginx/access_proxy.log” ;done #取消换行
basename /usr/bin/a.txt # 取值a.txt
dirname /usr/bin/a.txt # 取值/usr/bin
paste -sd, test.txt # 将文件中的多行合并到一行并以”,”分割
if echo abcde|grep -q abc;then echo “found”;else echo “not found” ;fi # grep -q 表示将结果不输出到屏幕
sort -u test.txt # 只显示唯一的行
grep -w 192.168.100.1 test.txt # 强制匹配仅完全匹配字词
let i++ # 相当于i=i+1
readlink anaconda-ks.cfg # 获得当前链接文件的源地址
echo > test.txt # 清空文件中内容
str=aremove&&echo ${str:1} # 去除字符串第一个字符;-1去除字符串最后一个字符;2去除前两个字符
dirname /usr/bin/ls # 去除/ls
mv abc{,.bak} # 改名字为abc.bak
top -n 1 | awk ‘/Cpu/{print $5}’|cut -d% -f 1 # 取剩余cpu利用率
echo 9692.9 7 | awk ‘{print 1/ 1 / 2}’ # 浮点除法运算awk用法
echo print 9692.9/7 | python # 浮点除法运算python用法
echo “scale=3;9692.9/7”|bc # 浮点除法运算bc用法
grep ‘(10.){2,}’ 1.txt # 过滤字符串10 10.是一个整体,至少出现2次
for循环
for ((i=9;i<=10;i++));do echo $i;done
kill pgrep dovecot
# 查看dovecot进程PID并杀死
echo $((5*(6+10))) # 先运算括号
echo $((((((5*(6+10)))+2-2))*10))
basename /root/a.txt # 取最后的文件名
pr # 将文件分解为多个页面的输出;通常用于打印。
排序
join employee bonus | sort -k 2 # join将2个文件合并,以第二列排序
tee # 将它的输入打印到文件和屏幕。当您想创建某些日志记录,但还想在屏幕上看时,这很有用
uniq # 获取已排序的文件或数据流(通过管道)显示唯一行 -c 显示每次行出现次数 -d 只显示重复的行
comm # 比较两个排好序的文件
sleep # 让当前进程休息一会儿
cmp # 判断两个文件内容是否一样
diff # 详细输出两个不同文件的差别
xargs < b.txt # 可以将多行变为一行
curl -I -s www.baidu.com|head -1 # 截取链接状态
ll -rt # 按修改时间从远到近排序
ll -Sh # 安装文件大小排序非目录
du -sh ./* # 列出
kill -15 ps aux | grep java |grep -v "grep " |awk '{print $2}'
find / -name *cpp | cut -d / -f 3-100 | awk ‘{print “../../”$0” \”}’
cat /proc/version
cat /etc/issue # 查看系统版本
if nc -v -z IP I P Port # 判断端口是否开放
if grep error log.txt # 判断文本是否有error
ls -ld */ # 只显示目录
grub-md5-crypt # md5加密
shopt -s extglob && rm -rf !(center) # 删除除center以外的所有
ls | xargs -n 10 rm -f # 以删除10个文件为组删除
ps -eo pid,lstart,etime | grep 47959 # 查看某个进程启动时间
find 用法
find 某个目录 -type f -mtime +7 -exec rm {} \; # 查找名字是-name -iname意思是忽略大小写
find / -type f -size +10M -exec ls -lrt {} \;
find /root -type f -mtime +6 -exec ls -l {} \;
find / ! -name f *.txt # 查找不以txt结尾的文件
//一下默认时间天
-atime # 用户最后一次访问的时间
-mtime # 文件最后一次被修改的时间
-ctime # 权限最后一次改变的时间
//一下默认时间分钟
-amin
-mmin
-cmin
find / -type f -newer test.txt # 查找比test.txt更长的修改时间的文件
-size 5k/M/G # 文件大写 单位
-perm # 权限
-user # 用户
find ./ -type f -name 1 -delete # 删除查找出来的文件
grep mbreader -rl .
find ./ -name * -type f -print | xargs grep “mbreader”
xargs 用法
xargs -d : # 以: 为分隔符
xargs -n 2 # 2组为一行
cat test.txt | xargs -I {} ./a.sh -p {} -l # 将 结果用{}表示传递给后面
xargs rm -f
xargs ls -l
sort 用法
sort # 按字母排序 -u 去除重复行 -r 降序 -o 讲排序后的结果重定向 -n 以数值排序默认10在2前面
sort -n -k 2 -t : facebook.txt # 以:分隔符 的 第2列来进行排序 -t 指定分割符 -k 指定列
sort -M # 按月份排序
sort -c test.txt # 测试文件是否排过序
uniq 用法
uniq # 不加参数删除重复行
uniq -u # 只显示唯一行
uniq -c # 显示各行出现的次数
uniq -d # 找出重复的行
cut 用法
cut -f1,3 # 显示第一列和第三列
cut -f2 –complement # 显示除了第2列其他所有
cut -d : # 分界符:
date 用法
date -d ‘2013-06-01 +10day 10:00:00’ ‘+%F %H:%M’ # 固定日期加10天
date -d +1day ‘+%F %H:%M’ # 当前时间加1天
grep 选项
-v #不显示匹配行
-c #显示匹配行数
-h #不显示文件名
-i #忽略大小写
-n #显示行号
-w #严格匹配
sed 用法
a\ # 当前行后添加行
d # 删除行
i\ # 当前行前插入行
p # 打印行
\n # 换行
s # 替换
g # 全局替换
sed ‘s/[0-9][0-9]$/&.5/’ datafile # 在替代串里的&字符代表在搜索串中真正找到的。每个以两个数字结尾的行都被它自己取代,且要在后面加上.5
sed -i ‘s/love/&/’ a.txt # &号代表搜索串。串love将被星号包围的自身所替代;即love变成love
sed -i ‘/dataavc/i\111\2222’ a.txt # 在a.txt文件中以dataavc开头的行前面插入1111行和222行
sed -i ‘/#德国/a#朝鲜\nd=55’ a.txt # 在#德国行后面追加2行
sed -n ‘2p’ test.txt # 打印第2行
sed -e ‘s/\?.//g’ -e ‘s/.\///g’ # 例如http://www.ourday.cn/bbs/index.php?k=8只过滤出index.php
sed -i ‘20,30s/var\/lib/data/g’ /etc/my.cnf # 替换20至30行
find test -name *.sh -exec sed -i ‘s/.\/hostlists.txt/..\/idctest_iplist/g’ {} \;
sed ‘2,5d’ test.txt # 删除2-5行
sed ‘/my/,/you/d’ test.txt # 删除包含my行到包含you行之间的行
sed ‘/my/,10d’ text.txt # 删除包含my的行到第10行
sed -e ‘/^#/d’ -e ‘/^$/d’ text.txt # 删除注释和空行
cat /home/ntalker/ntalker-t2d-tchat/log/red5.log | sed -n ‘/15:00/,/16:00/p’
sshpass 用法
scp -P 36000 -o “StrictHostKeyChecking no” root@10.182.0.32:/data/soft/java/jdk-6u43-linux-x64.bin . # cvm主机
scp -o “StrictHostKeyChecking no” anaconda-ks.cfg root@yltx11:/opt/ # 避免输入yes/no
sshpass -p 1 scp -o “StrictHostKeyChecking no” anaconda-ks.cfg root@yltx12:/opt/ # 避免输入密码和yes/no
sshpass -p 1 ssh -o “StrictHostKeyChecking no” root@192.168.100.100 “cat /root/list.txt” # 远程查询文件内容
sshpass -p aaaaaa ssh -o “StrictHostKeyChecking no” root@192.168.100.250 “sed -i ‘/#德国/i#朝鲜\nd=55’ /root/a.txt” # 远程插入文件内容
sshpass -p www.utongame.com scp -o “StrictHostKeyChecking no” root@s999.yltx.yaowan.com:/data/share/game_install_center.sh .
sshpass -p www.utongame.com scp -o “StrictHostKeyChecking no” root@s999.yltx.yaowan.com:/data/share/game_install.sh .
seq tr 用法
seq -s ’ ’ -w 10 # 以01 02 …..10格式列出,以空格分割
seq -w 10 | tr “\n” ” ” # 以01 02 …..10格式列出,以行分割,tr将行(\n) 替换为空格(” “)分割
seq -w 10 | tr -d “\n” # 以01 02 …..10格式列出,以行分割,tr -d 去掉分割符行
cat file | tr -d “\r” > new_file # 删除Windows文件“造成”的’^M’字符
cat file | tr -d “#” # 删除注释字符
cat file | tr -s ‘\n’ # 删除空行
cat 1 | echo
[
[
(tr ‘\n’ ‘+’) 0] # 将结果进行加法运算
echo aabcbbabcc|tr “abc” “xyz” # 将a替换x,/b/y/,/c/z/,而不是将字符串/abc/xyz/
echo seq -w 10
{10..99} # 以01 02 …99格式显示
seq -s ” ” -f “%02g” 99 # 以01 02 …99格式显示
seq -f “%02g” 99|xargs -n 99 # 以01 02 …99格式显示
for i in seq -w 99
; do echo -n $i” “;done # 以01 02 …99格式显示,echo -n 取消自动换行
sed ‘/^$/d’ file # 移除空白行
xargs 用法
find /etc -name “*.conf” | xargs ls –l # 命令xargs将结果传递给ls -l
find python -type f -name “a.*” -exec head -1 > f.txt {} \; #python目录下以a.开头的文件第一行读取保存到f.txt
awk 用法
seq 99 |awk ‘{if(NR<10)print ‘0’ 0}’|xargs -n 100 # 以01 02 …99格式显示
echo "1378359168.830" | awk '{print strftime("%F %H:%M",$0)}'
awk -F: '$0 ~ /WARNING|FATAL/ && $0 !~ /IGNOR/{print $5}' a.txt
#打印包含WARNING或者FATAL,但不包含IGNOR的行的第5列
grep -v "IGNOR" a.txt | grep -e "WARNING" -e "FATAL"
#打印包含WARNING或者FATAL行
netstat -anplt | grep :::22|awk '{gsub("/"," ");gsub(":::"," ");print "prot:",$4, "pid:",$7}'
# 过滤出sshd 端口号和进程号
awk '!a[$0]++' a.txt
# 去除重复行
awk '{ip[$1]++}END{for (i in ip){printi,ip[i]}}' /var/log/nginx/access.log
expect 用法
#!/usr/bin/expect -f
spawn scp yunwei-d@119.146.202.24:/data/soft/java/jdk-6u43-linux-x64.bin /data/soft/java/
set timeout 300
expect "(yes/no)?"
send "yes\r"
expect "password:"
set timeout 300
send "123.com\r"
set timeout 300
interact
read 用法
while read -u3 i && read -u4 j
do
echo $i $j
done 3<afile 4<bfile
#的意思是,不断从 afile 和 bfile 中分别读取内容到i , j 中,然后用echo 打印出来。 这个循环会一直执行直到遇到 afile 或 bfile 中至少任意一个的文件尾。
比方说你 afile 的内容是
a
b
c
bfile 的内容是
1
2
3
4
则这段程序就会打印
a 1
b 2
c 3
shell 编程中使用到得if语句内判断参数
文件操作
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
数字比较
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
-z 空串
字符串比较
= 两个字符相等
!= 两个字符不等
-n 比较字符串长度是否大于0,如果大于则为“是”
-z 比较字符串的穿度是否等于零,如果等于则为“是”
if [ ! -e file ] ; then #如果文件不存在的话,then;
逻辑操作
-a 与(and):两个逻辑值为“是”返回值才为“是”,反之为“否”
-o 或(or):两个逻辑值有一个为“是”,返回值就为“是”
# &&或者|| 使用于 if [ ] && [ ]
# -a或者-o 使用于 if [
file ] ; then #如果文件不存在的话,then; 逻辑操作 -a 与(and):两个逻辑值为“是”返回值才为“是”,反之为“否” -o 或(or):两个逻辑值有一个为“是”,返回值就为“是” # &&或者|| 使用于 if [ ] && [ ] # -a或者-o 使用于 if [
? -eq 0 -a
0=‘a.sh′]内部参数
0
=
‘
a
.
s
h
′
]
内
部
参
数
# —-传递给程序的总的参数数目
?—−上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
?
—
−
上
一
个
代
码
或
者
s
h
e
l
l
程
序
在
s
h
e
l
l
中
退
出
的
情
况
,
如
果
正
常
退
出
则
返
回
0
,
反
之
为
非
0
值
。
* —-传递给程序的所有参数组成的字符串。
@—−程序的所有参数数组表示方法array=(redgreenblueyellowmagenta)dir=
@
—
−
程
序
的
所
有
参
数
数
组
表
示
方
法
a
r
r
a
y
=
(
r
e
d
g
r
e
e
n
b
l
u
e
y
e
l
l
o
w
m
a
g
e
n
t
a
)
d
i
r
=
(ls)
for ((i=0;i<{#dir[*]};i++));do echo "
{#dir[*]};i++));do echo "
{dir[i]}”;done
注释
i]}”;done 注释
{#dir[*]} 表示数组长度 ;{dir[
{dir[
i]} 表示数组内容
for 循环
!/bin/bash
a.sh
for a
do
echo $a
done
sh a.sh 1 2 3
1
2
3
VIM 编辑器用法
/pattern # 向后查找
?pattern # 向前查找
n # 下一个匹配
N # 上一个匹配
:%s/a/b/g # 将全文中的a替换为b
:1,5s/a/b/g # 将1-5行中的a替换为b
dd # 删除所在行
dd10 # 删除所在行后面的10行
dw # 删除一个字
x # 删除当前字符
X # 删除前一个字符
yy # 复制当前行
2yy # 复制两行
yw # 复制一个字
p # 小写P粘贴内容在当前行下面,大写P粘贴到上面
Home # 切换到行首
End # 切换到行末
PageUp # 上翻页
PageDown # 下翻页
gg # 跳到文件开头
G # 跳到文件结尾
:set nu # 显示行号
:set nonu # 取消行号
文本内容:
$cat test.txt
001
002
003
004
005
006
0000999
!/bin/bash
#
line=”root:x:0:0:root:/root:/bin/bash”
IFS=”:” # 以:为分隔符
count=0
for item in
linedo[[
l
i
n
e
d
o
[
[
count == 0 ]] && user=
item[[
i
t
e
m
[
[
count == 6 ]] && shell=
itemletcount++doneecho
i
t
e
m
l
e
t
c
o
u
n
t
+
+
d
o
n
e
e
c
h
o
user is $shell
结果 root is /bin/bash
for ((i=10;i<=20;i++)) ; do sh release_s
i/shutdownyulong.sh;donefor((i=10;i<=20;i++));docpgameactivity.xlsreleases
i
/
s
h
u
t
d
o
w
n
y
u
l
o
n
g
.
s
h
;
d
o
n
e
f
o
r
(
(
i
=
10
;
i
<=
20
;
i
+
+
)
)
;
d
o
c
p
g
a
m
e
a
c
t
i
v
i
t
y
.
x
l
s
r
e
l
e
a
s
e
s
{i}/resources/xls/ ;done
for ((i=10;i<=20;i++)) ; do sh release_s${i}/startup_yulong.sh ;done
rsync -aP -e “ssh -p 8022” xn6 root@113.31.17.227:/home/ntalker/ntbackup/dl.ntalker.com/js/
rsync -aP -e “ssh -p 8022” –delete –exclude=’enterpriseIcon’ root@192.168.1.114:/home/ntalker/www/mcenterbc.ntalker.com ./
查看网络连接情况
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}’
sed ’28s/value=.*”/value=”tcp:\/\/aaadf22d.com:33”/g’ webapps/t2d/WEB-INF/red5-web.xml
sed ’28s/[0-9]+/80/g’ webapps/t2d/WEB-INF/red5-web.xml
yum install collectd –downloadonly –downloaddir=/root/ 下载不安装
database.php.template:$db[‘default’][‘hostname’] = ‘{{DEFAULT_HOSTNAME}}’;
database.php.template:$db[‘default’][‘username’] = ‘{{DEFAULT_USERNAME}}’;
查找目标 : .?{{(\w+)}}[^\n]
替换为: \1\n