Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
如何学习 Shell
Search
LI Daobing
April 06, 2008
Programming
3
320
如何学习 Shell
LI Daobing
April 06, 2008
Tweet
Share
More Decks by LI Daobing
See All by LI Daobing
出了问题不要靠猜
lidaobing
40
3.9k
HTTP协议相关的若干安全问题
lidaobing
9
1.1k
Debian & Packaging
lidaobing
1
540
Java 质量保障
lidaobing
3
270
OAuth: How and Why?
lidaobing
1
140
从 Struts 迁移到 Spring MVC,以及为什么?
lidaobing
2
630
glusterfs 文件系统
lidaobing
2
180
Other Decks in Programming
See All in Programming
愛される翻訳の秘訣
kishikawakatsumi
3
350
AIエージェントの設計で注意するべきポイント6選
har1101
5
2.5k
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.4k
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
460
Vibe codingでおすすめの言語と開発手法
uyuki234
0
130
SwiftUIで本格音ゲー実装してみた
hypebeans
0
510
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
660
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
180
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
290
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
170
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
AIコーディングエージェント(NotebookLM)
kondai24
0
240
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
410
The Cult of Friendly URLs
andyhume
79
6.7k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
590
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
BBQ
matthewcrist
89
9.9k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
100
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Being A Developer After 40
akosma
91
590k
Leo the Paperboy
mayatellez
0
1.3k
Tell your own story through comics
letsgokoyo
0
770
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
48
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
29
Transcript
如何学习Bash Shell LI Daobing <
[email protected]
> Kingsoft Inc. 2008-04-06
目录 •命令,管道与重定向 •环境变量 •扩展与quote •流程控制 •调试与安全 •附1: 进程查看与调试工具, gdb以外的世界 •附2:
好用的命令介绍
命令,管道与重定向(1) •常用命令列表 ◦ sudo apt-get install manpages-posix; dpkg -L manpages-posix
◦ sudo apt-get install coreutils info; info coreutils ◦ help •管道 ◦标准输入(0),标准输出(1),标准错误(2) ◦将上一个程序的标准输出链接到下一个命令的 标准输入: ls | less
命令,管道与重定向(2) •重定向 ◦ls > ls.log; ls >> ls.log; ls 2>&1
◦">": 将标准输出更改为 ls.log 文件(覆盖) ▪ "2> ls.log": 将标准错误更改为 ls.log 文件(覆盖) ◦">>": 将标准输出更改为 ls.log 文件(追加) ◦"2>&1": 将标准输出的设备复制到标准错误 ◦make 2>&1 | less ▪ 1. 将标准输出更改为管道设备 (管道优先级最高,其余的重 定向指令从左往右处理) ▪ 2. 将标准输出的设备复制到标准错误 ◦参考 bash(1)(REDIRECTION) , mkfifo(1)
命令,管道与重定向(3) •特殊设备 ◦/dev/null: 空设备,读的时候会马上得到 EOF, 写操作 是空操作(黑洞),可用来抛弃输出 ◦/dev/zero: 零设备,读的时候会得到无限的 '\0',写操
作也是空操作 ◦/dev/urandom: 随机数设备,读的时候能得到随机数: $ 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
环境变量(1) •系统环境变量 ◦使用 env 查看 ◦使用 export A=1 设置 ◦会被子进程继承
◦只能为字符串 •BASH 的变量 ◦使用 set/declare 查看 ◦使用 A=1 设置 ◦不被子进程继承 ◦可以为字符串,字符串数组,整数等
扩展与quote (1) •参数的文件名扩展 ◦ls *.png; ls ?.jpg; ls [a-z]* •变量扩展:
$A, ${A} •使用其他命令的输出作为参数 ◦echo `pwd`; A=`pwd` ◦A=1.gif; convert $A `basename $A .gif`.png •其他扩展 ◦$#, $0, $1, ..., "$@", "$*"
扩展与quote (2) •quoting ◦需要quote的字符: |&;()<> space tab ! \ ◦用
\ 来 quote: \|, \& ◦用 '...': 消除所有岐义,不得包含单引号(') ◦用 "...": 与 '...' 类似,但允许变量替换($A),或者命令 替换 `pwd`,也允许使用\"\$\`。 ◦其他: "$@", "$*", $'...'
流程控制 (1) •&&, || , for, while, if, case •&&,
|| ◦ cmd1 || { echo "cmd1 failed"; exit 1; } ◦ test -f .bashrc && cat .bashrc • for ◦ for x in *.jpg; do convert "$x" "`basename $x .jpg`.png" done • while: ◦ x=1; while test $x -lt 100; do echo $x; x=`expr $x + 1`; done
流程控制 (2) •if ◦if [ `id -u` = 0 ];
then echo "you are root"; fi •case ◦ case "$TERM" in xterm*|rxvt*) PROMPT_COMMAND='...' ;; screen*) PROMPT_COMMAND='....' ;; *) ;; esac
调试与安全 (1) •bash -n: 仅检查语法,不执行 •set -x: 在执行前打印实际命令(已完成所有替换) •set -C:
防止在流重定向时覆盖文件(可放入 . bashrc, 减少误操作风险) •mktemp, tempfile: 如何使用临时文件/临时目录 •trap: 截获信号
进程查看与调试工具, gdb以外 •ps aux: 列出所有进程 •pstree -pAa: 进程树 •lsof -p
12345: 列出进程打开的文件 •lsof .bashrc: 列出文件被打开的情况 •fuser -m /dev/sdb1: 列出分区被打开的情况 •strace ls: 跟踪进程使用系统调用的情况 •strace -p 12345: 跟踪已经执行的进程
进程查看与调试工具, gdb以外 •ltrace: 跟踪动态库调用情况 •valgrind: 跟踪程序内存使用情况
好用的命令介绍 •find . -name *.hpp | xargs grep HELLO •find
. -name *.hpp -print0 | \ xargs -0 grep HELLO •find . -name *.hpp -exec grep HELLO {} \; •awk, sed: 专业的流编辑器(字符串函数) •nc: TCP/IP 网络发送/监听/代理工具,可以帮助你 在系统无法完全正常启动时输出错误报告或者输 入数据。 •autossh/tsocks: 自用的 tsocks 代理工具
好用的命令介绍 •dsh: 同时管理多台机器的工具 •keychain: ssh/pgp 信任辅助工具(假定你的 ssh 信任需要输入密码, 那么如何在脚本中安全的使 用?)
•iptraf: IP 流量监视工具
Thanks for your attention