Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
如何学 习 Bash Shell LI Daobing <lidaobing@gmail.com> Kingsoft Inc. 2008-04-06
目 录 <ul><ul><li>命令,管道与重定向 </li></ul></ul><ul><ul><li>环境变量 </li></ul></ul><ul><ul><li>扩展与 quote </li></ul></ul><ul><ul><li>...
命令,管道与重定向 (1)‏ <ul><ul><li>常用命令列表 </li></ul></ul><ul><ul><ul><li>sudo apt-get install manpages-posix; dpkg -L manpages-pos...
命令,管道与重定向 (2)‏ <ul><ul><li>重定向 </li></ul></ul><ul><ul><ul><li>ls > ls.log; ls >> ls.log; ls 2>&1 </li></ul></ul></ul><ul><...
命令,管道与重定向 (3)‏ <ul><ul><li>特殊 设备 </li></ul></ul><ul><ul><ul><li>/dev/null:  空 设备,读的时候会马上得到   EOF,  写操作是空操作 ( 黑洞 ) ,可用来抛弃 输...
环境变量 (1)‏ <ul><ul><li>系 统环境变量 </li></ul></ul><ul><ul><ul><li>使用   env  查看 </li></ul></ul></ul><ul><ul><ul><li>使用   export ...
扩展与 quote (1)‏ <ul><ul><li>参数的文件名 扩展 </li></ul></ul><ul><ul><ul><li>ls *.png; ls ?.jpg; ls [a-z]* </li></ul></ul></ul><ul>...
扩展与 quote (2)‏ <ul><ul><li>quoting </li></ul></ul><ul><ul><ul><li>需要 quote 的字符 : |&;()<> space tab !   </li></ul></ul></ul...
流程控制   (1)‏ <ul><ul><li>&&, || , for, while, if, case </li></ul></ul><ul><ul><li>&&, || </li></ul></ul><ul><ul><ul><li>cmd...
流程控制   (2)‏ <ul><ul><li>if </li></ul></ul><ul><ul><ul><li>if [ `id -u` = 0 ]; then echo &quot;you are root&quot;; fi </li>...
调试与安全   (1)‏ <ul><ul><li>bash -n:  仅检查语法,不执行 </li></ul></ul><ul><ul><li>set -x:  在 执行前打印实际命令 ( 已完成所有替 换 )‏ </li></ul></ul>...
进程查看与调试工具 , gdb 以外 <ul><ul><li>ps aux:  列出所有 进程 </li></ul></ul><ul><ul><li>pstree -pAa:  进程树 </li></ul></ul><ul><ul><li>ls...
进程查看与调试工具 , gdb 以外 <ul><ul><li>ltrace:  跟踪 动态库调用情况 </li></ul></ul><ul><ul><li>valgrind:  跟踪程序内存使用情况 </li></ul></ul>
好用的命令介 绍 <ul><ul><li>find . -name *.hpp | xargs grep HELLO </li></ul></ul><ul><ul><li>find . -name *.hpp -print0 |  xargs ...
好用的命令介 绍 <ul><ul><li>dsh:  同 时管理多台机器的工具 </li></ul></ul><ul><ul><li>keychain: ssh/pgp  信任 辅助工具 ( 假定你的   ssh  信任需要 输入密码 ,  那...
Thanks for your attention
Upcoming SlideShare
Loading in …5
×

如何学习Bash Shell

1,708 views

Published on

Published in: Technology
  • Be the first to comment

如何学习Bash Shell

  1. 1. 如何学 习 Bash Shell LI Daobing <lidaobing@gmail.com> Kingsoft Inc. 2008-04-06
  2. 2. 目 录 <ul><ul><li>命令,管道与重定向 </li></ul></ul><ul><ul><li>环境变量 </li></ul></ul><ul><ul><li>扩展与 quote </li></ul></ul><ul><ul><li>流程控制 </li></ul></ul><ul><ul><li>调试与安全 </li></ul></ul><ul><ul><li>附 1: 进程查看与调试工具 , gdb 以外的世界 </li></ul></ul><ul><ul><li>附 2: 好用的命令介 绍 </li></ul></ul>
  3. 3. 命令,管道与重定向 (1)‏ <ul><ul><li>常用命令列表 </li></ul></ul><ul><ul><ul><li>sudo apt-get install manpages-posix; dpkg -L manpages-posix </li></ul></ul></ul><ul><ul><ul><li>sudo apt-get install coreutils info; info coreutils </li></ul></ul></ul><ul><ul><ul><li>help </li></ul></ul></ul><ul><ul><li>管道 </li></ul></ul><ul><ul><ul><li>标准输入 (0) , 标准输出 (1) , 标准错误 (2)‏ </li></ul></ul></ul><ul><ul><ul><li>将上一个程序的 标准输出链接到下一个命令的标准输入 : ls | less </li></ul></ul></ul>
  4. 4. 命令,管道与重定向 (2)‏ <ul><ul><li>重定向 </li></ul></ul><ul><ul><ul><li>ls > ls.log; ls >> ls.log; ls 2>&1 </li></ul></ul></ul><ul><ul><ul><li>&quot;>&quot;: 将 标准输出更改为 ls.log 文件 ( 覆盖 )‏ </li></ul></ul></ul><ul><ul><ul><ul><li>&quot;2> ls.log&quot;: 将 标准错误更改为 ls.log 文件 ( 覆盖 )‏ </li></ul></ul></ul></ul><ul><ul><ul><li>&quot;>>&quot;: 将 标准输出更改为 ls.log 文件 ( 追加 )‏ </li></ul></ul></ul><ul><ul><ul><li>&quot;2>&1&quot;: 将 标准输出的设备复制到标准错误 </li></ul></ul></ul><ul><ul><ul><li>make 2>&1 | less </li></ul></ul></ul><ul><ul><ul><ul><li>1. 将 标准输出更改为管道设备 ( 管道 优先级最高,其余的重定向指令从左往右处理 )‏ </li></ul></ul></ul></ul><ul><ul><ul><ul><li>2. 将 标准输出的设备复制到标准错误 </li></ul></ul></ul></ul><ul><ul><ul><li>参考 bash(1)(REDIRECTION) , mkfifo(1)‏ </li></ul></ul></ul>
  5. 5. 命令,管道与重定向 (3)‏ <ul><ul><li>特殊 设备 </li></ul></ul><ul><ul><ul><li>/dev/null: 空 设备,读的时候会马上得到 EOF, 写操作是空操作 ( 黑洞 ) ,可用来抛弃 输出 </li></ul></ul></ul><ul><ul><ul><li>/dev/zero: 零 设备,读的时候会得到无限的 '' ,写操作也是空操作 </li></ul></ul></ul><ul><ul><ul><li>/dev/urandom: 随机数 设备,读的时候能得到随机数 : </li></ul></ul></ul>$ cat /dev/urandom | head -c 16 | hexdump -C 00000000 e8 fe c0 6e 6f ec 02 89 12 d8 5c 39 da b6 df dd |...no.....9....| 00000010
  6. 6. 环境变量 (1)‏ <ul><ul><li>系 统环境变量 </li></ul></ul><ul><ul><ul><li>使用 env 查看 </li></ul></ul></ul><ul><ul><ul><li>使用 export A=1 设置 </li></ul></ul></ul><ul><ul><ul><li>会被子 进程继承 </li></ul></ul></ul><ul><ul><ul><li>只能 为字符串 </li></ul></ul></ul><ul><ul><li>BASH 的 变量 </li></ul></ul><ul><ul><ul><li>使用 set/declare 查看 </li></ul></ul></ul><ul><ul><ul><li>使用 A=1 设置 </li></ul></ul></ul><ul><ul><ul><li>不被子 进程继承 </li></ul></ul></ul><ul><ul><ul><li>可以 为字符串,字符串数组,整数等 </li></ul></ul></ul>
  7. 7. 扩展与 quote (1)‏ <ul><ul><li>参数的文件名 扩展 </li></ul></ul><ul><ul><ul><li>ls *.png; ls ?.jpg; ls [a-z]* </li></ul></ul></ul><ul><ul><li>变量扩展 : $A, ${A} </li></ul></ul><ul><ul><li>使用其他命令的 输出作为参数 </li></ul></ul><ul><ul><ul><li>echo `pwd`; A=`pwd` </li></ul></ul></ul><ul><ul><ul><li>A=1.gif; convert $A `basename $A .gif`.png </li></ul></ul></ul><ul><ul><li>其他 扩展 </li></ul></ul><ul><ul><ul><li>$#, $0, $1, ..., &quot;$@&quot;, &quot;$*&quot; </li></ul></ul></ul>
  8. 8. 扩展与 quote (2)‏ <ul><ul><li>quoting </li></ul></ul><ul><ul><ul><li>需要 quote 的字符 : |&;()<> space tab ! </li></ul></ul></ul><ul><ul><ul><li>用 来 quote: |, & </li></ul></ul></ul><ul><ul><ul><li>用 '...': 消除所有岐 义,不得包含单引号 (')‏ </li></ul></ul></ul><ul><ul><ul><li>用 &quot;...&quot;: 与 '...' 类似,但允许变量替换 ($A) ,或者命令替 换 `pwd` ,也允 许使用 &quot;$` 。 </li></ul></ul></ul><ul><ul><ul><li>其他 : &quot;$@&quot;, &quot;$*&quot;, $'...' </li></ul></ul></ul>
  9. 9. 流程控制 (1)‏ <ul><ul><li>&&, || , for, while, if, case </li></ul></ul><ul><ul><li>&&, || </li></ul></ul><ul><ul><ul><li>cmd1 || { echo &quot;cmd1 failed&quot;; exit 1; } </li></ul></ul></ul><ul><ul><ul><li>test -f .bashrc && cat .bashrc </li></ul></ul></ul><ul><ul><li>for </li></ul></ul><ul><ul><ul><li>for x in *.jpg; do convert &quot;$x&quot; &quot;`basename $x .jpg`.png&quot; done </li></ul></ul></ul><ul><ul><li>while: </li></ul></ul><ul><ul><ul><li>x=1; while test $x -lt 100; do echo $x; x=`expr $x + 1`; done </li></ul></ul></ul>
  10. 10. 流程控制 (2)‏ <ul><ul><li>if </li></ul></ul><ul><ul><ul><li>if [ `id -u` = 0 ]; then echo &quot;you are root&quot;; fi </li></ul></ul></ul><ul><ul><li>case </li></ul></ul><ul><ul><ul><li>case &quot;$TERM&quot; in xterm*|rxvt*) PROMPT_COMMAND='...' ;; screen*) PROMPT_COMMAND='....' ;; *) ;; esac </li></ul></ul></ul>
  11. 11. 调试与安全 (1)‏ <ul><ul><li>bash -n: 仅检查语法,不执行 </li></ul></ul><ul><ul><li>set -x: 在 执行前打印实际命令 ( 已完成所有替 换 )‏ </li></ul></ul><ul><ul><li>set -C: 防止在流重定向 时覆盖文件 ( 可放入 .bashrc, 减少 误操作风险 )‏ </li></ul></ul><ul><ul><li>mktemp, tempfile: 如何使用 临时文件 / 临时目录 </li></ul></ul><ul><ul><li>trap: 截 获信号 </li></ul></ul>
  12. 12. 进程查看与调试工具 , gdb 以外 <ul><ul><li>ps aux: 列出所有 进程 </li></ul></ul><ul><ul><li>pstree -pAa: 进程树 </li></ul></ul><ul><ul><li>lsof -p 12345: 列出 进程打开的文件 </li></ul></ul><ul><ul><li>lsof .bashrc: 列出文件被打开的情况 </li></ul></ul><ul><ul><li>fuser -m /dev/sdb1: 列出分区被打开的情况 </li></ul></ul><ul><ul><li>strace ls: 跟踪 进程使用系统调用的情况 </li></ul></ul><ul><ul><li>strace -p 12345: 跟踪已 经执行的进程 </li></ul></ul>
  13. 13. 进程查看与调试工具 , gdb 以外 <ul><ul><li>ltrace: 跟踪 动态库调用情况 </li></ul></ul><ul><ul><li>valgrind: 跟踪程序内存使用情况 </li></ul></ul>
  14. 14. 好用的命令介 绍 <ul><ul><li>find . -name *.hpp | xargs grep HELLO </li></ul></ul><ul><ul><li>find . -name *.hpp -print0 | xargs -0 grep HELLO </li></ul></ul><ul><ul><li>find . -name *.hpp -exec grep HELLO {} ; </li></ul></ul><ul><ul><li>awk, sed: 专业的流编辑器 ( 字符串函数 )‏ </li></ul></ul><ul><ul><li>nc: TCP/IP 网 络发送 / 监听 / 代理工具,可以帮助你在系 统无法完全正常启动时输出错误报告或者输入数据。 </li></ul></ul><ul><ul><li>autossh/tsocks: 自用的 tsocks 代理工具 </li></ul></ul>
  15. 15. 好用的命令介 绍 <ul><ul><li>dsh: 同 时管理多台机器的工具 </li></ul></ul><ul><ul><li>keychain: ssh/pgp 信任 辅助工具 ( 假定你的 ssh 信任需要 输入密码 , 那么如何在脚本中 安全的 使用 ?)‏ </li></ul></ul><ul><ul><li>iptraf: IP 流量 监视工具 </li></ul></ul>
  16. 16. Thanks for your attention

×