查找子串
cat /tmp/debug.log | perl -e 'while(<>) { if ($_ =~ /hd_uid=(\d+)/) { print "$1\n"; } } '  匹配每行"hd_uid="后面的数字
if [ ... ]
then
    ...
fi

exit num

case $i in
1)
    echo 1111;;
2)
    echo 2222;;
*)
    echo other;;
esac

basename 返回shell脚本名

var=$(n=1;while ((n<=$num));do echo $n;((n++));done)  双小括号表示算数运算
echo $var

>>1 2

可以把$var拿来做for循环用

  • shell注释:

#! /bin/sh
Shell脚本中用#表示注释,相当于C语言的//注释。但如果#位于第一行开头,并且是#!(称为Shebang)则例外,它表示该脚本使用后面指定的解释器/bin/sh解释执行。

shell注释-->
    A、方法一
  :<<BLOCK'
  ....注释内容
    'BLOCK
  B、方法二
  :<<'BLOCK
  ....注释内容
  BLOCK'
  C、方法三

  :<<'
    ....注释内容
    '
  以上三种方法都是通过在:<
  
  BLOCK为Here Documents中的定义符号可以随意起名,只要前后匹配就行了

更帅的方法:
    cat <<"EOF" > /dev/null
    this
    is
    a
    multi-
    line
    comment
    EOF
    或者:
    : cat <<"EOF"
    this
    is
    a
    multi-
    line
    comment
    EOF

<--shell注释

  • eval

eval的作用是再次执行命令行处理,也就是说,对一个命令行,执行两次命令行处理。
eval echo "\$$#"  输出最后一个参数,不用eval的话只能输出$number,还不是$number中存储的数据

paste file1 file2     把两个文件的各行连在一起作为新行打印出来
    split -1 file1.txt    文件分割,按照一行一个文件分割

  • 两种计算字符串长度的方法,注意区别,awk取得的是准确值
    [dongsong@tm4ctt143 shell_study]$ echo "sfff"|wc -c
    5
    [dongsong@tm4ctt143 shell_study]$ echo "sfff"|awk '{print length($0)}'
    4
    [dongsong@tm4ctt143 shell_study]$ read testStr
    a(后面四个空格)
    [dongsong@tm4ctt143 shell_study]$ echo $testStr|awk '{print length($0)}'
    1
    [dongsong@tm4ctt143 shell_study]$ echo $testStr|wc -c

    2

<linux与unix shell编程指南 005.pdf>
command > filename 把把标准输出重定向到一个新文件中
command >> filename 把把标准输出重定向到一个文件中(追加)
command 1 > fielname 把把标准输出重定向到一个文件中
command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把把标准错误重定向到一个文件中
command 2 >> filename 把把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把c o m m a n d命令以f i l e n a m e文件作为标准输入,以f i l e n a m e 2文件
作为标准输出
command < filename 把c o m m a n d命令以f i l e n a m e文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到d e l i m i t e r分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入

command<<delimiter将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符,shell就知道输入结束了。

<以下可以在 linux与unix shell编程指南 002.pdf 中找到>
       touch -t 05042140 test.txt 创建一个更改时间是5月4号21:90的文件
       find . -newer test.txt    寻找比test.txt更新的文件
       find . -newer !test.txt    与上面相反
       find . -type d    查找当前目录下的目录
       find . ! -type d | sort 查找当前目录下除目录以外的文件,后面管道加上sort是排序
       find . -type f -mtime -10 -print -mount -exec wc -l {} \;
       find . -type f -mtime -10 -print -mount |xargs wc -l    与上面等同,只是xargs一批一批的执行,exec把前面所有的当成参数一次执行()
        find . -name "*.cpp" | xargs grep "int"     在文件中查找int
    ls *.sql | grep -v 2011-11-17 | xargs rm        ***名字不含2011-11-17字样的sql文件

tcpdump -i lo port 389 -s 1000000 -A
tcpdump -i lo -s 10000 -A -w /home/team/ddd port 389  抓包
tcpdump -i eth0 -s 10000 -A -nnn host 10.0.4.133 and port 80

tcpdump -i eth0 -nnn port 1234
-nnn是显示数字,便于直接观看结果
 
 
tcpdump -i eth0 port 1234 -w xxx.txt
-w把抓包的数据写入文件,可以在win下面用wireshark查看网络数据

把整个文件夹 folderTared 的内容打包成一个gz文件:
tar zvcf folderTared.tar.gz /theDir/folderTared
把压缩的gz文件恢复到指定目录下:
tar zvxf folderTared.tar.gz /theDir/

gunzip t_wiki_doc-2011-10-12.sql.gz

svn checkout ./gamechat http://10.4.3.143/subversion/gamechat/

svnserve --root /data/svn/svn --daemon 把其他仓库的svn数据目录的文件夹直接拷贝到/data/svn/svn下面,运行启动后可正常工作!

svn详细配置:http://wiki.ubuntu.org.cn/SubVersion

[dongsong@tm4ctt143 udplogger]$ md5sum udplogger
23ee4c96305af409d8092e2553ff4357  udplogger

cat /etc/issue                        查询系统版本
file /sbin/init                 查询系统是32位还是64位等相关信息

uname -a        查看系统版本的几种方法
cat /proc/version
cat /etc/issue
lsb_release     -a
/sbin/ip     link        查看系统网卡信息的几种方法

541  wget http://mirror.centos.org/centos/5/os/SRPMS/glibc-2.5-34.src.rpm     下载

--

nc -u 10.4.3.143 873             向143机器的873端口发送UDP数据
    nc -l 2010                监听当前机器的2010端口并显示连接建立起来后受到的数据,需要回复数据可以直接输入

top看不到所有进程,可以用top -b -d 1 -n 1 | less (-d delay延迟1秒更新,-n抓一次快照)

pstree -p 显示系统内所有进程构成的进程树(除了用ps axo 'ppid,pid,cmd'来找进程的父进程以外还可以从进程树里面找)

To print a process tree:
          ps -ejH
          ps axjf

To get info about threads:
          ps -eLf
          ps axms

僵尸进程会占用一部分内存(保存进程退出信息的结构体),可以杀掉其父进程以回收资源(当然,这样干可能会影响父进程的业务)

--

cat /proc/sys/kernel/shmmax        查看系统单个共享内存段最大字节数
cat /proc/sys/kernel/shmmni        查看系统共享内存段最大个数
cat /proc/sys/kernel/shmall        查看系统中共享内存页总数
 ipcs -lm                查看系统共享内存的参数

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

[dongsong@tm4ctt143 ~]$ vvv="Hello world"
[dongsong@tm4ctt143 ~]$ echo ${vvv}
Hello world
[dongsong@tm4ctt143 ~]$ echo ${vvv:-xxxxx}
Hello world
[dongsong@tm4ctt143 ~]$ echo ${vvvv:-xxxxx}
xxxxx
[dongsong@tm4ctt143 ~]$ echo $vvvv

[dongsong@tm4ctt143 ~]$ echo ${vvvv}

[dongsong@tm4ctt143 ~]$ echo ${vvvv:=xxxxx}
xxxxx
[dongsong@tm4ctt143 ~]$ echo ${vvvv}
xxxxx
[dongsong@tm4ctt143 ~]$ echo ${vvva:?EEEEEEErrrrrrr}
bash: vvva: EEEEEEErrrrrrr
[dongsong@tm4ctt143 ~]$ echo ${aa:+hello}

[dongsong@tm4ctt143 ~]$ echo $aa

[dongsong@tm4ctt143 ~]$ echo ${va:+hello}

[dongsong@tm4ctt143 ~]$ echo ${vvv:+hello}
hello
[dongsong@tm4ctt143 ~]$ echo $vvv
Hello world
[dongsong@tm4ctt143 ~]$ echo ${vvv:0:4}
Hell
[dongsong@tm4ctt143 ~]$ echo ${vvv:0:2}
He
[dongsong@tm4ctt143 ~]$ echo ${vvv: -3}
rld
[dongsong@tm4ctt143 ~]$ echo ${!v*}
vvv vvvv
[dongsong@tm4ctt143 ~]$ echo ${#vvv}
11
[dongsong@tm4ctt143 ~]$ echo $vvv
Hello world
[dongsong@tm4ctt143 ~]$ vvv="a.b.php.org"
[dongsong@tm4ctt143 ~]$ vvv="/home/yy/a.b.php.org"
[dongsong@tm4ctt143 ~]$ echo ${vvv%.org}
/home/yy/a.b.php
[dongsong@tm4ctt143 ~]$ echo $vvv
/home/yy/a.b.php.org
[dongsong@tm4ctt143 ~]$ vvv="/home/yy/a.b.org.php.org"
[dongsong@tm4ctt143 ~]$ echo $vvv
/home/yy/a.b.org.php.org
[dongsong@tm4ctt143 ~]$ echo ${vvv%%.org*}
/home/yy/a.b
[dongsong@tm4ctt143 ~]$ echo ${vvv%%.org}
/home/yy/a.b.org.php
[dongsong@tm4ctt143 ~]$ echo ${vvv%%.org*}
/home/yy/a.b
[dongsong@tm4ctt143 ~]$ echo ${vvv%.org*}
/home/yy/a.b.org.php
[dongsong@tm4ctt143 ~]$ man bash

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

curl http://www.baidu.com 对指定url发出请求,可以-d用post方式、-G用get方式;用于测试比较方便,省去打开浏览器的麻烦

siege -f myurls.txt -t 60S [-r 100000] -d 3 -i -c 128 (128 users;3 delay )测试http性能(做压力测试时-d可指为零;内网测试机212的apache用siege和ab测试结果差不多,每秒处理2W+请求)

ab -n 10000 -c 10 http://192.168.1.212:8088/ apache提供的http测试工具

ab -v 显示参数及说明

sar -n DEV 2  网卡流量监控

ls -lhrt /var/log/sa/  查看sysstat的日志
sar -f /var/log/sa/sa13
sar -f /var/log/sa/sa13  |less

675  sar -o data.bin 1      记录cpu等信息
  676  sar -o data2.bin 1
  677  ls
  678  sar -f data.bin      显示cpu等信息
  679  sar -f data.bin  -A | less
----------------

stat filename         显示文件的设备号和inode

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

cat /proc/partitions查看目前机器中的所有磁盘及分区情况

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

umask是从权限中“拿走”相应的位(具体见 linux与unix shell编程指南 001.pdf)
(系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限)

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

[dongsong@localhost soft]$ du -sh       查看目录大小
3.5G    .
[dongsong@localhost soft]$ df -Th                查看挂载点
文件系统      类型    容量  已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
              ext3    6.7G  4.6G  1.8G  73% /
/dev/hda1     ext3     99M   12M   83M  13% /boot
tmpfs        tmpfs    252M     0  252M   0% /dev/shm
/dev/hdd5     ext3     14G  4.0G  9.2G  30% /home

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

[dongsong@localhost soft]$ du -sh       查看目录大小
3.5G    .
[dongsong@localhost soft]$ df -Th                查看挂载点
文件系统      类型    容量  已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
              ext3    6.7G  4.6G  1.8G  73% /
/dev/hda1     ext3     99M   12M   83M  13% /boot
tmpfs        tmpfs    252M     0  252M   0% /dev/shm
/dev/hdd5     ext3     14G  4.0G  9.2G  30% /home

-----------cp start--------------
copy 本地的档案到远程的机器上
scp /etc/lilo.conf k@net67.ee.oit.edu.tw:/home/k
会将本地的 /etc/lilo.conf 这个档案 copy 到 net67.ee.oit.edu.tw,使用者 k 的家目录下。
copy远程机器上的档案到本地来
scp k@net67.ee.oit.edu.tw:/etc/lilo.conf /etc
会将 net67.ee.oitdu.tw 中 /etc/lilo.conf 档案 copy 到本地的 /etc 目录下。
保持从来源 host 档案的属性
scp –p k@net67.ee.tw:/etc/lilo.conf /etc

如果想使用特定端口 使用 scp –P(大写) 如 scp –P 1234 k@net67.ee.tw:/etc/lilo.conf /etc

在此必须注意使用者的权限是否可读取远程上的档案,若想知道更多关于 scp 的使用方法,可去看看 scp 的使用手册。
ssh-keygen
产生公开钥 (pulib key) 和私人钥 (private key),以保障 ssh 联机的安性, 当 ssh 连 shd 服务器,会交换公开钥上,系统会检查 /etc/ssh_know_hosts 内储存的 key,如果找到客户端就用这个 key 产生一个随机产生的session key 传给服务器,两端都用这个 key 来继续完成 ssh 剩下来的阶段。

它会产生 identity.pub、identity 两个档案,私人钥存放于identity,公开钥 存放于 identity.pub 中,接下来使用 scp 将 identity.pub copy 到远程机器的家目录下.ssh下的authorized_keys。 .ssh/authorized_keys(这个 authorized_keys 档案相当于协议的 rhosts 档案),之后使用者能够不用密码去登入。RSA的认证绝对是比 rhosts 认证更来的安全可靠。想让多台机器都不输密码直接往A上拷数据,可以把这几台机器的identity.pub追加到A得authorized_keys文件后面。
执行:
scp identity.pub k@linux1.ee.oit.edu.tw:.ssh/authorized_keys

若在使用 ssh-keygen 产生钥匙对时没有输入密码,则如上所示不需输入密码即可从 net67.ee.oit.edu.tw 去登入 linux1.ee.oit.edu.tw。在此,这里输入的密码可以跟帐号的密码不同,也可以不输入密码。
-----------scp end----------------

ssh -p 7710 root@220.181.83.115 -v  ssh登录
nohup ********* &     转后台运行

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

设置sudo不输入密码:sudo visudo 或者 sudo vi /etc/sudoers, 按如下修改
%admin ALL=(ALL)NOPASSWD:NOPASSWD ALL  //admin组的用户sudo所有命令都不用输入密码
%guy ALL=NOPASSWD:ALL //用户guy sudo 所有命令都不用输入密码
%guy ALL=NOPASSWD:/usr/bin/tt.sh,/usr/sbin/adduser //用户guy sudo指令命令不用输入密码

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

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的
一。& 最经常被用到
   这个用在一个命令的最后,可以把这个命令放到后台执行
二。ctrl + z
     可以将一个正在前台执行的命令放到后台,并且暂停
三。jobs
     查看当前有多少在后台运行的命令
四。fg
     将后台中的命令调至前台继续运行
   如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg
     将一个在后台暂停的命令,变成继续执行
   如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

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

源代码之间建立跳转链接
    ctags -R
    cscope -b -R *.cpp *.hpp

ctags建立之后可以用ctrl+] 和ctrl+t进行正反向跳转,在bash下面之间用vi -t name可以打开函数或者变量定义的文件(功能真风骚,貌似我只用了ctags的1%)

vim xxx.c之前要把当前路径切换到ctags所在目录去,否则找不到符号

ctags的用法:http://oreilly.com/catalog/vi6/chapter/ch08.html#ch08_05.htm

ctags的官网:http://ctags.sourceforge.net/

对lua建立ctag: ctags --langdef=MYLUA --langmap=MYLUA:.lua --regex-MYLUA="/^.*\s*function\s*(\w+):(\w+).*$/\2/f/" --regex-MYLUA="/^\s*(\w+)\s*=\s*[0-9]+.*$/\1/e/" --regex-MYLUA="/^.*\s*function\s*(\w+)\.(\w+).*$/\2/f/" --regex-MYLUA="/^.*\s*function\s*(\w+)\s*\(.*$/\1/f/" --regex-MYLUA="/^\s*(\w+)\s*=\s*\{.*$/\1/e/" --regex-MYLUA="/^\s*module\s+\"(\w+)\".*$/\1/m,module/" --regex-MYLUA="/^\s*module\s+\"[a-zA-Z0-9._]+\.(\w+)\".*$/\1/m,module/" --languages=MYLUA --excmd=pattern -R .

这招不错

find -name '*.[ch]' -exec ctags {} +

这个不行,虽然ls -R 会把目录下面的子目录全部递归遍历一遍,不过ctags并不仅仅是对过滤出来的文件建了tag而是对所有的(ctasg -R)

ls -lhrtR ./* | egrep "*\.h$|*\.cpp$" | ctags -R

vim -t functionName 打开tag定义的文件,并定位到该位置

ctrl+]  跳转到定义的位置

ctrl+t 回到跳转的位置

ctrl+o 回到光标上次所在的位置

ctrl+i 前进到光标回跳前的位置

ctrl+e 保持光标不动把页面向上移动

ctrl+y 保持光标不动把页面向下移动

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

转载于:https://blog.51cto.com/fuwenchao/1422515

shell 杂记一(笨鸟)相关推荐

  1. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

  2. Java程序员从笨鸟到菜鸟之(九十一)跟我学jquery(七)jquery动画大体验

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 最近一直感觉自己好忙,每天都浑浑噩噩的过着,转眼间,好像有好长时间没有更新笨鸟到菜鸟了.现 ...

  3. Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice

    在日常开发中,常用的webservice引擎主要有Axis,axis2,Xfire以及cxf(Xfire的升级版).现在只有axis2和cxf官方有更新.今天我们先以一个比较老的引擎为例.来讲诉一下w ...

  4. Java程序员从笨鸟到菜鸟之(一百零八)一步一步学习webservice(二)webservice基本原理

    本来这第二篇打算讲解"开发第一个基于XFire的webservice"的内容来着.但是想想.开发实例只是局限于了会用的层面上.如果想真正的理解webservice还是需要挖掘其原理 ...

  5. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

    写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...

  6. Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.

    在平常的开发中我们常常遇到不仅仅只是导出excel报表的情况.有时候也需要导出pdf或者CSV报表.其实原理都差不多.刚开始本来不打算也这篇博客介绍这个的.感觉这篇博客和前面的博客有点雷同.原理基本都 ...

  7. Java程序员从笨鸟到菜鸟之(九)——数据库有关知识补充(事务、视图、索引、存储过程)

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 一:事务 首先看一下什么是事务: 通俗的理解,事务是一组原子操作单元,从数据库角度说,就是 ...

  8. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...

  9. Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表...

    在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生 ...

  10. 笨鸟都没有先飞怎么办。。。

    笨鸟没有发现自己笨,也没有先飞怎么办? 还好,现在发现自己是笨鸟也不算太晚,那就要加倍的加油了. 以后要早起学习,就算加班回来晚,早点睡觉,第二天早上也能学习. 早睡早起,最终目标是5点起来.加油! ...

最新文章

  1. 【Android NDK 开发】Android NDK 下载 ( 下载指定历史版本 NDK | Android NDK r10e - 2015 年 5 月 )
  2. JS实现ul,li排序效果
  3. 关系数据库中,表中的每行就是一个对象
  4. 【Tools】MarkDown教程(五)-CSDN MarkDown介绍
  5. 【安卓开发 】Android初级开发(二)Activity启动模式
  6. 前端学习(3231):React中的受控组件
  7. 获取本地ip(一个或多个都能取)
  8. c语言知识点总完整版pdf,C语言知识点总结 重点版.pdf
  9. 移动端车牌识别SDK应用
  10. 只工作不玩耍,聪明的孩子也变傻
  11. MyBatisPlus中的TypeHandler
  12. win10安装过程中一直卡在海内存知己天涯若比邻界面解决方法
  13. 江苏计算机小高考2016,2016江苏小高考成绩揭晓 生物化学4A不易
  14. 淘宝特价版事业部java面试,含爱奇艺,小米,腾讯,阿里
  15. 豆瓣电影评分(微信小程序)——Day1
  16. 职场人士,如何打造“自品牌”?
  17. Philosopher’s Walk ICPC 2017 Daejeon F dfs 分治
  18. Element表格出现闪动问题
  19. FPGA驱动旋转编码器(Verilog)
  20. 使用html5+javascript+css实现单机版五子棋---跟电脑打没赢过

热门文章

  1. 计算机组成原理——关于数据对齐存储
  2. linux下vi修改文件用法
  3. hdu3081 Marriage Match II(最大流)
  4. find之exec和args
  5. mysql语句中把string类型字段转datetime类型
  6. 海量数据处理之倒排索引
  7. 小贝拉机器人是朋友_报废机器人应该属于什么垃圾?《宝莱坞机器人2.0》给你答案...
  8. 全国计算机等级考试题库二级C操作题100套(第26套)
  9. electron 打包_Vue3+Electron整合方式
  10. python flask 分页前后端分离_flask展示pyecharts图表前后端分离的问题