注意:我计划对此进行修订,并寻找新的合著者来帮助将其扩展为更全面的指南。虽然它非常受欢迎,但它可能会更广泛、更深入一些。如果你喜欢写作并且接近成为此材料的专家并愿意考虑提供帮助,请在 josh (0x40) holloway.com 给我留言。——杰利维,霍洛威。谢谢!
命令行上的流畅性是一项经常被忽视或被认为是晦涩难懂的技能,但它以明显和微妙的方式提高了你作为工程师的灵活性和生产力。这是关于使用命令行的精选注释和技巧,我们发现在 Linux 上工作时很有用。有些技巧是基本的,有些是相当具体的、复杂的或晦涩难懂的。这个页面不长,但如果你能使用和回忆这里的所有项目,你就知道很多了。
这项工作是许多作者和翻译者的成果。其中一些最初出现在Quora上,但后来转移到GitHub上,在那里比原作者更有才华的人进行了许多改进。如果你有与命令行相关的问题,请提交问题。如果你看到错误或更好的内容,请做出贡献!
范围:
笔记:
apt
yum
dnf
pacman
pip
brew
学习基本的 Bash。实际上,键入并至少浏览整个内容;它很容易遵循,而且不会那么长。备用外壳可能很好,但 Bash 功能强大且始终可用(只学习 zsh、鱼等,虽然在你自己的笔记本电脑上很诱人,但在许多情况下会限制你,例如使用现有服务器)。
man bash
至少学习一个基于文本的编辑器。编辑器是最简单的基本编辑(打开、编辑、保存、搜索)之一。但是,对于文本终端中的高级用户来说,Vim () 是难以学习但古老、快速且功能齐全的编辑器,是无可替代的。许多人也使用经典的Emacs,特别是对于较大的编辑任务。(当然,任何从事广泛项目的现代软件开发人员都不太可能只使用纯文本编辑器,并且还应该熟悉现代图形 IDE 和工具。
nano
vi
查找文档:
man
man man
apropos
help
help -d
type command
curl cheat.sh/command将给出一个简短的“备忘单”,其中包含如何使用 shell 命令的常见示例。
了解如何使用 和 以及管道 的输出和输入重定向。“知道”将覆盖输出文件并追加。了解标准输出和标准输出。
>
<
|
>
>>
了解使用(也许和...)和引号的文件 glob 扩展以及双引号和单引号之间的区别。(请参阅下面有关变量扩展的更多信息。
*
?
[
]
"
'
熟悉 Bash 作业管理:、ctrl-z、ctrl-c、、、、、 等。
&
jobs
fg
bg
kill
了解 ,以及通过 、等进行无密码身份验证的基础知识。
ssh
ssh-agent
ssh-add
基本文件管理:和(特别是,了解中每一列的含义)、、、和(甚至更好,),以及(了解硬链接与软链接的区别和优点)、、、(用于磁盘使用情况的快速摘要:)。对于文件系统管理, , , , , .了解什么是索引节点( 或 )。
ls
ls -l
ls -l
less
head
tail
tail -f
less +F
ln
ln -s
chown
chmod
du
du -hs *
df
mount
fdisk
mkfs
lsblk
ls -i
df -i
基本网络管理:或、。
ip
ifconfig
dig
traceroute
route
学习和使用版本控制管理系统,例如 .
git
非常了解正则表达式,以及 / 的各种标志。、 和选项值得了解。
grep
egrep
-i
-o
-v
-A
-B
-C
了解如何使用 、 或(取决于发行版)来查找和安装软件包。并确保你必须安装基于 Python 的命令行工具(下面的一些最容易通过 ) 安装)。
apt-get
yum
dnf
pacman
pip
pip
在 Bash 中,使用 Tab 完成参数或列出所有可用命令,使用 ctrl-r 搜索命令历史记录(按下后,键入搜索,重复按 ctrl-r 循环浏览更多匹配项,按 Enter 执行找到的命令,或按向右箭头将结果放在当前行中以允许编辑)。
在 Bash 中,使用 ctrl-w 删除最后一个单词,使用 ctrl-u 将内容从当前光标删除回行首。使用 alt-b 和 alt-f 按字移动,按 ctrl-a 将光标移动到行首,按 ctrl-e 将光标移动到行尾,按 ctrl-k 移动到行尾,按 ctrl-l 清除屏幕。 有关 Bash 中的所有默认键绑定,请参阅。有很多。例如,alt-. 循环遍历前面的参数,alt-* 扩展一个 glob。
man readline
或者,如果你喜欢 vi 风格的键绑定,请使用(并将其放回原处)。
set -o vi
set -o emacs
对于编辑长命令,在设置编辑器(例如)后,ctrl-x ctrl-e 将在编辑器中打开当前命令以进行多行编辑。或者在 vi 风格中,转义 v。
export EDITOR=vim
要查看最近的命令,请使用 。跟随 (其中 是命令编号) 再次执行。你还可以使用许多缩写,最有用的可能是最后一个参数和最后一个命令(请参阅手册页中的“历史扩展”)。但是,这些通常很容易被ctrl-r和alt-.替换。
history
!n
n
!$
!!
使用 转到你的主目录。使用前缀访问相对于主目录的文件(例如 )。在脚本中,将主目录称为 。
cd
~
~/.bashrc
sh
$HOME
返回到上一个工作目录:。
cd -
如果你键入命令的中途但改变了主意,请按 alt-# 在开头添加 a 并将其作为注释输入(或使用 ctrl-a、#、enter )。然后,你可以稍后通过命令历史记录返回到它。
#
使用 (或 )。它非常强大。请注意,你可以控制每行执行的项目数 () 以及并行度 ()。如果你不确定它是否会做正确的事情,请先使用。另外,很方便。例子:
xargs
parallel
-L
-P
xargs echo
-I{}
find . -name '*.py' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
pstree -p是进程树的有用显示。
使用 和 按名称查找或指示进程( 很有帮助)。
pgrep
pkill
-f
了解你可以发送进程的各种信号。例如,要挂起进程,请使用 。有关完整列表,请参阅
kill -STOP [pid]
man 7 signal
使用或者如果你希望后台进程永远运行。
nohup
disown
检查哪些进程正在通过 或(对于 TCP;对于 UDP 添加)或(在 macOS 上也有效)进行侦听。
netstat -lntp
ss -plat
-u
lsof -iTCP -sTCP:LISTEN -P -n
另请参阅 和 打开的套接字和文件。
lsof
fuser
查看或了解系统运行了多长时间。
uptime
w
用于为常用命令创建快捷方式。例如, 创建一个新的别名 。
alias
alias ll='ls -latr'
ll
保存别名、shell 设置和常用函数,并安排登录 shell 来获取它。这将使你的设置在所有 shell 会话中可用。
~/.bashrc
将环境变量的设置以及登录时应执行的命令放入 。从图形环境登录名和作业启动的 shell 需要单独配置。
~/.bash_profile
cron
同步你的配置文件(例如 和 ) 在具有 Git 的各种计算机之间。
.bashrc
.bash_profile
了解当变量和文件名包含空格时需要小心。用引号将 Bash 变量括起来,例如 .首选 or 选项以启用空字符来分隔文件名,例如 或。要循环访问 for 循环中包含空格的文件名,请仅使用 将 IFS 设置为换行符。
"$FOO"
-0
-print0
locate -0 pattern | xargs -0 ls -al
find / -print0 -type d | xargs -0 ls -al
IFS=$'\n'
在 Bash 脚本中,使用(或记录原始输入的变体,包括未展开的变量和注释)来调试输出。使用严格模式,除非你有充分的理由不这样做:用于在出错时中止(非零退出代码)。用于检测未设置的变量用法。还要考虑中止管道中的错误(尽管如果你这样做,请仔细阅读更多内容,因为本主题有点微妙)。对于更多涉及的脚本,也可以在 EXIT 或 ERR(错误)上使用。一个有用的习惯是启动这样的脚本,这将使它检测并中止常见错误并打印一条消息:
set -x
set -v
set -e
set -u
set -o pipefail
trap
set -euo pipefail
trap "echo 'error: Script failed: see failed command above'" ERR
# do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir
在 Bash 中,请注意有很多种变量扩展。检查变量是否存在:。例如,如果 Bash 脚本需要单个参数,只需编写 .如果变量为空,则使用默认值:。如果要在上一示例中添加一个附加(可选)参数,可以使用类似 .如果省略并因此为空,则将设置为 。算术展开:。序列:。字符串的修剪:和 .例如,如果 ,则打印 .
${name:?error message}
input_file=${1:?usage: $0 input_file}
${name:-default}
output_file=${2:-logfile}
$2
output_file
logfile
i=$(( (i + 1) % 5 ))
{1..10}
${var%suffix}
${var#prefix}
var=foo.pdf
echo ${var%.pdf}.txt
foo.txt
使用支撑扩展...可以减少重新键入相似文本和自动组合项目的必要性。这在(移动两个文件)、(扩展为 )或(展开所有可能的组合并创建目录树)等示例中很有用。在任何其他扩展之前执行支撑扩展。
{
}
mv foo.{txt,pdf} some-dir
cp somefile{,.bak}
cp somefile somefile.bak
mkdir -p test-{a,b,c}/subtest-{1,2,3}
扩展顺序为:大括号扩展;波浪号扩展、参数和变量扩展、算术扩展和命令替换(以从左到右的方式完成);分词;和文件名扩展。(例如,像这样的范围不能用变量使用 .改用 或 循环,例如 or .)
{1..20}
{$a..$b}
seq
for
seq $a $b
for((i=a; i<=b; i++)); do ... ; done
命令的输出可以像文件一样通过(称为进程替换)处理。例如,将本地与远程进行比较:
<(some command)
/etc/hosts
diff /etc/hosts <(ssh somehost cat /etc/hosts)
{
# Your code here
}
cat <<EOF input on multiple lines EOF
在 Bash 中,通过以下方式重定向标准输出和标准错误:或 。通常,为了确保命令不会将打开的文件句柄保留到标准输入,将其绑定到你所在的终端,添加 .
some-command >logfile 2>&1
some-command &>logfile
</dev/null
用于良好的 ASCII 表,带有十六进制和十进制值。有关常规编码信息,、 和 很有帮助。
man ascii
man unicode
man utf-8
man latin1
使用 或 tmux
多路复用屏幕,在远程 ssh 会话上特别有用,并分离并重新附加到会话。 可以通过提供更多信息和更轻松的管理来增强屏幕或 TMUX。仅会话持久性的最小替代方法是 dtach
。
screen
byobu
在 ssh 中,知道如何使用 或(偶尔)移植隧道很有用,例如从远程服务器访问网站。
-L
-D
-R
对 ssh 配置进行一些优化可能会很有用;例如,这包含避免在某些网络环境中断开连接的设置,使用压缩(这对于通过低带宽连接的 SCP 很有帮助),并使用本地控制文件多路复用到同一服务器的通道:
~/.ssh/config
TCPKeepAlive=yes ServerAliveInterval=15 ServerAliveCountMax=6 Compression=yes ControlMaster auto ControlPath /tmp/%r@%h:%p ControlPersist yes
与 ssh 相关的其他一些选项对安全敏感,应谨慎启用,例如,每个子网或主机或在受信任的网络中:,
StrictHostKeyChecking=no
ForwardAgent=yes
将 mosh
视为使用 UDP 的 ssh 的替代方案,避免断开连接并增加路上的便利性(需要服务器端设置)。
要以八进制形式获取文件的权限,这对于系统配置很有用,但在系统中不可用且易于搞砸,请使用类似
ls
stat -c '%A %a %n' /etc/timezone
要根据另一个命令(如)的输出与文件进行交互,请使用(路径选取器)。
git
fpp
对于当前目录(和子目录)中所有文件的简单 Web 服务器,网络上的任何人都可以使用:(端口 7777 和 Python 2)和(端口 7777 和 Python 3)。
python -m SimpleHTTPServer 7777
python -m http.server 7777
要以其他用户身份运行命令,请使用 。默认以根用户身份运行;用于指定其他用户。用于以该用户身份登录(系统将要求你输入密码)。
sudo
-u
-i
要将外壳切换到其他用户,请使用 或 。带有“-”的后者获得的环境就像另一个用户刚刚登录一样。省略用户名默认为 root。系统将要求你输入要切换到的用户的密码。
su username
su - username
了解命令行上的 128K 限制。当通配符匹配大量文件时,此“参数列表太长”错误很常见。(当这种情况发生时,替代方案可能会有所帮助。
find
xargs
对于基本的计算器(当然还有一般的Python访问),请使用解释器。例如
python
>>> 2+3 5
在当前目录中按名称(或类似目录)查找文件。要按名称在任何地方查找文件,请使用(但请记住可能没有索引最近创建的文件)。
find . -iname '*something*'
locate something
updatedb
对于通过源文件或数据文件进行常规搜索,有几个选项比 更高级或更快,包括(按从旧到新的粗略顺序)ack
、ag
(“银色搜索者”)和 rg
(ripgrep)。
grep -r
要将 HTML 转换为文本:
lynx -dump -stdin
对于Markdown,HTML和各种文档转换,请尝试pandoc
。例如,要将 Markdown 文档转换为 Word 格式:
pandoc README.md --from markdown --to docx -o temp.docx
如果你必须处理XML,是旧的,但很好。
xmlstarlet
对于 YAML,请使用 shyaml
。
对于 Excel 或 CSV 文件,csvkit 提供 、、、 等。
in2csv
csvcut
csvjoin
csvgrep
对于 Amazon S3,s3cmd 很方便,s4cmd
更快。亚马逊的
AWS
和改进的锯对于
其他与AWS相关的任务至关重要。
了解 和 ,包括 uniq 和选项 -- 请参阅下面的单行代码。另请参阅。
sort
uniq
-u
-d
comm
了解 、 和操作文本文件。许多人使用但忘记了.
cut
paste
join
cut
join
了解如何计算换行符 ()、字符 ()、单词 () 和字节 ()。
wc
-l
-m
-w
-c
了解如何从 stdin 复制到文件以及 stdout,如 中所示。
tee
ls -al | tee file.txt
对于更复杂的计算(包括分组、反转字段和统计计算),请考虑 datamash
。
要知道,区域设置会以微妙的方式影响许多命令行工具,包括排序顺序(排序规则)和性能。大多数 Linux 安装会将其他区域设置变量设置为本地设置,如美国英语。但请注意,如果你更改区域设置,排序将发生变化。并且知道 i18n 例程可以使排序或其他命令的运行速度慢很多倍。在某些情况下(例如下面的集合运算或唯一性运算),你可以安全地完全忽略慢速 i18n 例程,并使用传统的基于字节的排序顺序,使用 .
LANG
export LC_ALL=C
你可以通过在调用之前加上环境变量设置来设置特定命令的环境,如 中所示。
TZ=Pacific/Fiji date
了解基本和简单的数据重加工。有关示例,请参阅单行。
awk
sed
要就地替换一个或多个文件中出现的所有字符串,请执行以下操作:
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
repren
。(在某些情况下,该命令还允许多次重命名,但要小心,因为它的功能在所有 Linux 发行版上都不相同。rename
# Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from '(.*)\.bak' --to '\1' *.bak
# Same as above, using rename, if available:
rename 's/\.bak$//' *.bak
rsync
rsync
scp
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
要在处理文件时监视进度,请使用 pv
、pycp
、监视
、进度、,
或者对于块级复制,请使用 。
rsync --progress
dd status=progress
用于随机播放或从文件中选择随机线条。
shuf
知道的选项。对于数字,请使用 ,或用于处理人类可读的数字(例如 from)。了解按键的工作原理( 和 )。特别是,请注意你需要编写以仅按第一个字段排序; 表示根据整行排序。稳定排序 () 可能很有用。例如,要先按字段 2 排序,然后按字段 1 排序,可以使用 。
sort
-n
-h
du -h
-t
-k
-k1,1
-k1
sort -s
sort -k1,1 | sort -s -k2,2
如果你需要在 Bash 的命令行中编写制表符文字(例如,对于 -t 参数进行排序),请按 ctrl-v [Tab] 或写入(后者更好,因为你可以复制/粘贴它)。
$'\t'
用于修补源代码的标准工具是 和 。另请参阅差异的摘要统计信息和并排差异。注意适用于整个目录。用于更改摘要。用于比较和编辑文件。
diff
patch
diffstat
sdiff
diff -r
diff -r tree1 tree2 | diffstat
vimdiff
对于二进制文件,请使用 ,或用于简单的十六进制转储和 ,或用于二进制编辑。
hd
hexdump
xxd
bvi
hexedit
biew
同样对于二进制文件,(加号等)允许你查找文本位。
strings
grep
对于二进制差异(增量压缩),请使用 。
xdelta3
要转换文本编码,请尝试 。或用于更高级的使用;它支持一些高级Unicode的东西。例如:
iconv
uconv
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x '::Any-Hex;' < input.txt
uconv -f utf-8 -t utf-8 -x '::Any-Name;' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC;' < input.txt > output.txt
要将文件拆分为多个部分,请参阅(按大小拆分)和(按模式拆分)。
split
csplit
日期和时间:要以有用的 ISO 8601 格式获取当前日期和时间,请使用(其他选项有问题)。要操作日期和时间表达式,请使用 、 等。从日期。
date -u +"%Y-%m-%dT%H:%M:%SZ"
dateadd
datediff
strptime
使用 、、 和 对压缩文件进行操作。
zless
zmore
zcat
zgrep
文件属性可通过 Via 进行设置,并提供文件权限的较低级别替代方案。例如,为了防止意外删除文件,不可变标志:
chattr
sudo chattr +i /critical/directory/or/file
使用 和 保存和恢复文件权限。例如:
getfacl
setfacl
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txt
truncate
fallocate
xfs_mkfile
mkfile
对于Web调试,并且很方便,或者它们的等效物,或者更现代的httpie
。
curl
curl -I
wget
要了解当前的 CPU/磁盘状态,经典工具包括(或更好的)、和 。用于基本 CPU 和详细的每分区磁盘统计信息和性能见解。
top
htop
iostat
iotop
iostat -mxz 15
有关网络连接的详细信息,请使用 和 。
netstat
ss
对于快速概述系统上发生的情况,特别有用。要获得最广泛的详细信息概览,请使用概览
。
dstat
要了解内存状态,请运行并了解 和 的输出。特别是,请注意,“缓存”值是 Linux 内核作为文件缓存持有的内存,因此实际上计入“免费”值。
free
vmstat
Java 系统调试是另一回事,但 Oracle 和其他一些 JVM 的一个简单的技巧是,你可以运行完整的堆栈跟踪和堆摘要(包括代垃圾收集详细信息,这些信息量很大)将被转储到 stderr/logs。JDK 的 、 、 是有用的。SJK工具更先进。
kill -3 <pid>
jps
jstat
jstack
jmap
使用 mtr
作为更好的跟踪路由,以识别网络问题。
为了查看磁盘已满的原因,ncdu
比常用命令(如 )节省时间。
du -sh *
该工具(随Apache一起提供)有助于快速检查Web服务器性能。对于更复杂的负载测试,请尝试 。
ab
siege
了解和.如果程序失败、挂起或崩溃,并且你不知道原因,或者如果你想大致了解性能,这些可能会很有帮助。请注意性能分析选项 () 和附加到正在运行的进程的功能 ()。使用跟踪子选项 () 以避免错过重要呼叫。
strace
ltrace
-c
-p
-f
知道检查共享库等 - 但永远不要在不信任的文件上运行它。
ldd
了解如何连接到正在运行的进程并获取其堆栈跟踪。
gdb
用。有时在调试实时问题时,它非常有用。示例:、、、、、、、(其中是进程 ID 或 pid)。
/proc
/proc/cpuinfo
/proc/meminfo
/proc/cmdline
/proc/xxx/cwd
/proc/xxx/exe
/proc/xxx/fd/
/proc/xxx/smaps
xxx
在调试过去出现问题的原因时,sar
可能非常有帮助。它显示有关CPU,内存,网络等的历史统计信息。
有关更深入的系统和性能分析,请查看 (SystemTap)、perf
和 sysdig
。
stap
检查你使用的操作系统或(一般Unix/内核信息)或(Linux发行版信息)。
uname
uname -a
lsb_release -a
每当某些事情表现得非常有趣(可能是硬件或驱动程序问题)时使用。
dmesg
如果删除文件,但该文件未释放预期的磁盘空间,如 报告的那样,请检查该文件是否正由进程使用:
du
lsof | grep deleted | grep "filename-of-my-big-file"
拼凑命令的几个示例:
sort
uniq
a
b
-T
/tmp
LC_ALL
sort
-u
sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b
diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
用于快速检查目录中所有文件的内容(因此每一行都与文件名配对)或(因此每个文件都有一个标题)。这对于填充了配置设置的目录非常有用,例如 、、 中的配置设置。
grep . *
head -100 *
/sys
/proc
/etc
对文本文件第三列中的所有数字求和(这可能比等效的 Python 快 3 倍,代码少 3 倍):
awk '{ x += $3 } END { print x }' myfile
ls -l
ls -lR
find . -type f -ls
acct_id
acct_id
egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | sort | uniq -c | sort -rn
要持续监控更改,请使用 ,例如,使用 检查目录中文件的更改或网络设置的更改,同时使用 对 wifi 设置进行故障排除。
watch
watch -d -n 2 'ls -rtlh | tail'
watch -d -n 2 ifconfig
运行此函数以从此文档中获取随机提示(解析 Markdown 并提取项目):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed '/cowsay[.]png/d' |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
xmlstarlet unesc | fmt -80 | iconv -t US
}
expr:执行算术或布尔运算或计算正则表达式
m4:简单的宏处理器
yes:打印很多字符串
cal:漂亮的日历
env:运行命令(在脚本中很有用)
printenv:打印出环境变量(在调试和脚本中很有用)
look:查找以字符串开头的英文单词(或文件中的行)
cut和:数据操作
paste
join
fmt:设置文本段落的格式
pr:将文本格式化为页面/列
fold:文本自动换行
column:将文本字段格式化为对齐的固定宽度列或表格
expand和:在制表符和空格之间转换
unexpand
nl:添加行号
seq:打印数字
bc:计算器
factor:因子整数
gpg
:加密和签名文件
toe:术语信息条目表
nc:网络调试和数据传输
socat:套接字继电器和tcp端口转发器(类似于
netcat)
slurm
:网络流量可视化
dd:在文件或设备之间移动数据
file:识别文件类型
tree:将目录和子目录显示为嵌套树;喜欢但递归
ls
stat:文件信息
time:执行和计时命令
timeout:在指定的时间内执行命令,并在指定的时间量完成时停止进程。
lockfile:创建只能由
rm -f
logrotate:旋转、压缩和邮寄日志。
watch:重复运行命令,显示结果和/或突出显示更改
更改时间
:每当看到文件更改时,都会运行你指定的任何命令。也看和。
inotifywait
entr
tac:反向打印文件
comm:逐行比较排序的文件
strings:从二进制文件中提取文本
tr:字符翻译或操作
iconv或:文本编码的转换
uconv
split和:拆分文件
csplit
sponge:在写入之前读取所有输入,对于从读取然后写入同一文件很有用,例如,
grep -v something some-file | sponge some-file
units:单位换算和计算;将每两周的弗隆转换为每眨眼的缇(另请参阅)
/usr/share/units/definitions.units)
apg:生成随机密码
xz:高比率文件压缩
ldd:动态库信息
nm:来自目标文件的符号
ab或
wrk
:对 web 服务器进行基准测试
strace:系统调用调试
mtr
:更好的网络调试跟踪路由
cssh:可视并发外壳
rsync:通过SSH或本地文件系统同步文件和文件夹
ngrep
:用于网络层的 grep
host和:DNS 查找
dig
lsof:进程文件描述符和套接字信息
dstat:有用的系统统计信息
概览
:高级、多子系统概述
iostat:磁盘使用情况统计信息
mpstat:CPU 使用率统计信息
vmstat:内存使用情况统计信息
htop:顶部的改进版本
last:登录历史记录
w:谁登录了
id:用户/组标识信息
sar
:历史系统统计
ss:套接字统计信息
dmesg:启动和系统错误消息
sysctl:在运行时查看和配置 Linux 内核参数
hdparm:SATA/ATA 磁盘操作/性能
lsblk:列出块设备:磁盘和磁盘分区的树视图
lshw、、、、:硬件信息,包括CPU、BIOS、RAID、图形、设备等。
lscpu
lspci
lsusb
dmidecode
lsmod和:列出并显示内核模块的详细信息。
modinfo
fortune、 和 :嗯,好吧,这取决于你是否认为蒸汽机车和 Zippy 报价“有用”
ddate
sl
这些是仅在 macOS 上相关的项目。
使用(Homebrew)和/或(MacPorts)进行包管理。这些可用于在 macOS 上安装上述许多命令。
brew
port
使用 将任何命令的输出复制到桌面应用程序,并使用 粘贴来自桌面应用程序的输入。
pbcopy
pbpaste
要在 macOS 终端中启用 Option 键作为 alt 键(例如在上述命令中使用,如 alt-b、alt-f 等),请打开首选项 -> 配置文件 -> 键盘,然后选择“使用选项作为元键”。
要使用桌面应用程序打开文件,请使用 或 。
open
open -a /Applications/Whatever.app
聚焦:使用 搜索文件并列出元数据(如照片 EXIF 信息)。
mdfind
mdls
请注意,macOS是基于BSD Unix的,许多命令(例如,,,,)与Linux有许多微妙的变化,Linux在很大程度上受到System V风格的Unix和GNU工具的影响。你通常可以通过注意手册页的标题为“BSD 通用命令手册”来区分它们。在某些情况下,也可以安装GNU版本(例如GNU awk和sed)。如果编写跨平台 Bash 脚本,请避免使用此类命令(例如,考虑 Python 或 )或仔细测试。
ps
ls
tail
awk
sed
gawk
gsed
perl
要获取 macOS 版本信息,请使用 。
sw_vers
这些项目仅在 Windows 上相关。
通过安装 Cygwin 在 Microsoft Windows 下访问 Unix shell 的强大功能。本文档中描述的大多数内容都可以开箱即用。
在Windows 10上,你可以使用Windows Subsystem for Linux(WSL),它通过Unix命令行实用程序提供熟悉的Bash环境。
如果你主要想在Windows上使用GNU开发者工具(如GCC),请考虑MinGW及其MSYS包,它提供了bash,gawk,make和grep等实用程序。与Cygwin相比,MSYS并不具备所有功能。MinGW对于创建Unix工具的本机Windows端口特别有用。
在Windows下获得Unix外观和感觉的另一种选择是Cash。请注意,在此环境中只有极少数 Unix 命令和命令行选项可用。
你可以通过学习和使用 从命令行执行大多数 Windows 系统管理任务并编写脚本。
wmic
你可能会发现有用的本机命令行 Windows 网络工具包括 、 、 和 。
ping
ipconfig
tracert
netstat
你可以通过调用该命令来执行许多有用的 Windows 任务。
Rundll32
使用Cygwin的包管理器安装额外的Unix程序。
用作命令行窗口。
mintty
通过 访问 Windows 剪贴板。
/dev/clipboard
运行以通过其注册的应用程序打开任意文件。
cygstart
使用 访问 Windows 注册表。
regtool
请注意,Windows 驱动器路径位于 Cygwin 下,而 Cygwin 的路径显示在 Windows 下。使用 在 Cygwin 和 Windows 样式的文件路径之间进行转换。这在调用 Windows 程序的脚本中最为有用。
C:\
/cygdrive/c
/
C:\cygwin
cygpath
除了非常小的任务外,编写代码是为了让其他人可以阅读它。权力伴随着责任。你可以在 Bash 中做某事并不一定意味着你应该这样做!;)
本作品根据知识共享署名-相同方式共享 4.0 国际许可协议进行许可。