Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
如何学习 Shell
Search
LI Daobing
April 06, 2008
Programming
370
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
如何学习 Shell
LI Daobing
April 06, 2008
More Decks by LI Daobing
See All by LI Daobing
How to attack TLS in PQC decade, part I
lidaobing
0
57
出了问题不要靠猜
lidaobing
40
4.1k
HTTP协议相关的若干安全问题
lidaobing
9
1.2k
Debian & Packaging
lidaobing
1
600
Java 质量保障
lidaobing
3
330
OAuth: How and Why?
lidaobing
1
190
从 Struts 迁移到 Spring MVC,以及为什么?
lidaobing
2
690
glusterfs 文件系统
lidaobing
2
240
Other Decks in Programming
See All in Programming
AWSに止められる覚悟してますか?
morizo_1984
2
430
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
490
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
200
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
320
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
380
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
540
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
270
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
970
FreeBSDでZabbixを動かす
kenkino
0
330
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
850
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
190
The Rails Doctrine Decade
koic
2
400
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
540
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
920
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
Odyssey Design
rkendrick25
PRO
2
820
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.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