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
300
如何学习 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
520
Java 质量保障
lidaobing
3
260
OAuth: How and Why?
lidaobing
1
120
从 Struts 迁移到 Spring MVC,以及为什么?
lidaobing
2
580
glusterfs 文件系统
lidaobing
2
160
Other Decks in Programming
See All in Programming
フロントエンドのパフォーマンスチューニング
koukimiura
5
1.8k
Result型で“失敗”を型にするPHPコードの書き方
kajitack
5
980
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
210
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
8.2k
Android 16KBページサイズ対応をはじめからていねいに
mine2424
0
240
Python型ヒント完全ガイド 初心者でも分かる、現代的で実践的な使い方
mickey_kubo
1
180
20250708_JAWS_opscdk
takuyay0ne
2
120
PHPでWebSocketサーバーを実装しよう2025
kubotak
0
310
PicoRuby on Rails
makicamel
2
140
Goで作る、開発・CI環境
sin392
0
260
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
190
ニーリーにおけるプロダクトエンジニア
nealle
0
890
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
A Tale of Four Properties
chriscoyier
160
23k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Documentation Writing (for coders)
carmenintech
72
4.9k
Docker and Python
trallard
45
3.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Producing Creativity
orderedlist
PRO
346
40k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
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