? čeština∙Deutsch∙ελλην已英语∙埃斯帕尼尔∙
注意:我计划对此进行修改,并寻找一个新的合着者,以帮助将其扩展为更全面的指南。虽然非常受欢迎,但它可能会更广泛,更深入。如果您想写作并接近成为此材料的专家并愿意考虑提供帮助,请在Josh(0x40)Holloway.com上给我留言。 - Jlevy,Holloway。谢谢你!

命令线上的流利度通常是一种经常被忽视或被认为是奥术的技能,但它以明显和微妙的方式提高了您作为工程师的灵活性和生产力。这是使用我们在Linux工作时发现有用的命令行的注释和技巧的选择。有些技巧是基本的,有些技巧相当具体,精致或晦涩。此页面不长,但是如果您可以在这里使用并回忆所有项目,那么您就会知道很多。
这项工作是许多作者和翻译人员的结果。其中一些最初出现在Quora上,但此后搬到了Github,那里的人比原始作者更有才华了。如果您有与命令行有关的问题,请提交问题。如果您看到错误或可能更好的事情,请做出贡献!
范围:
笔记:
apt , yum , dnf , pacman , pip或brew (适当)安装新程序。学习基本的狂欢。实际上,键入man bash ,至少略读了整个事情;它很容易遵循,而且不长。替代外壳可能很不错,但是bash是强大的,并且总是可用的(仅学习ZSH,鱼类等,在您自己的笔记本电脑上诱惑,在许多情况下限制了您,例如使用现有服务器)。
很好地学习至少一个基于文本的编辑器。 nano编辑器是最简单的基本编辑之一(开放,编辑,保存,搜索)。但是,对于文本终端中的Power用户来说,无需替代VIM( vi ),这是难以学习的,但尊贵,快速且功能齐全的编辑器。许多人还使用经典的Emacs,特别是用于更大的编辑任务。 (当然,任何从事广泛项目的现代软件开发人员不太可能仅使用基于文本的编辑器,也应该熟悉现代的图形IDE和工具。)
查找文档:
man读取官方文档(对于好奇的人, man man列出了章节编号,例如1是“常规”命令,5个是文件/约定,而8个用于管理)。查找与apropos人页。help和help -d情况下为他们提供帮助。您可以通过使用type command来找出命令是可执行的,外壳内置的还是别名。curl cheat.sh/command将提供一个简短的“备忘单”,并提供有关如何使用shell命令的常见示例。使用>和<和管道使用| 。知道>覆盖输出文件和>>附加。了解Stdout和Stderr。
了解使用* (也许是?以及[ ... ] )以及引用的文件范围扩展以及' "之间的差异。(请参见下面的可变扩展有关的更多信息。)
熟悉BASH的工作管理: & , Ctrl-Z , Ctrl-C , jobs , fg , bg , kill等。
通过ssh-agent , ssh-add等了解ssh和无密码身份验证的基础知识。
基本文件管理: ls和ls -l (尤其是ls -l表示的每一列), less , head , tail和tail -f (甚至更好, less +F ), ln和ln -s (了解硬链接与软链接的差异和优势), chown ,Chown, chmod ,chmod, du (快速汇总disk Usage usage usage usage: du -hs * )。对于文件系统管理, df , mount , fdisk , mkfs , lsblk 。了解什么是Inode( ls -i或df -i )。
基本网络管理: ip或ifconfig , dig , traceroute , route 。
学习和使用版本控制管理系统,例如git 。
很好地了解正则表达式,以及grep / egrep的各种旗帜。 -i , -o , -v , -A , -B和-C选项值得知道。
学习使用apt-get , yum , dnf或pacman (取决于发行版)来查找和安装包裹。并确保您有pip安装基于Python的命令行工具(以下最容易通过pip安装)。
在BASH中,使用选项卡完成参数或列出所有可用命令和CTRL-R以搜索命令历史记录(按下键入搜索后,按搜索,按CTRL-R反复循环循环浏览更多匹配项,按Enter执行找到命令,或击中右箭头以将结果放在当前行中以允许编辑)。
在Bash中,使用CTRL-W删除最后一个单词,然后Ctrl-U将内容从当前光标删除到线路的开始。使用Alt-B和Alt-F通过Word移动, CTRL-A将光标移至线路开始, CTRL-E将光标移至线路的结尾, Ctrl-K杀死了线的末端,CTRL-L, CTRL-L以清除屏幕。有关BASH中所有默认的键键,请参见man readline 。有很多。例如alt-。通过以前的论点进行循环,而Alt- *扩展了一个地球。
另外,如果您喜欢VI风格的钥匙结合,请使用set -o vi (和set -o emacs将其放回原处)。
对于编辑长命令,设置编辑器(例如export EDITOR=vim )后, CTRL-X CTRL-E将在编辑器中打开当前命令以进行多行编辑。或以vi风格,逃生v 。
要查看最近的命令,请使用history 。按照!n ( n是命令号)再次执行。您还可以使用许多!! ,最有用的可能是!$有关最后一个命令(请参见“人页”页面中的“历史扩展”)。但是,这些通常很容易被CTRL-R和Alt-替换。 。
使用cd访问您的主目录。使用~前缀(例如~/.bashrc )相对于主目录的访问文件。在sh脚本中,将主目录称为$HOME 。
返回到以前的工作目录: cd - 。
如果您要键入命令但改变主意,请点击alt-#在开始时添加#并将其作为注释输入(或使用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 。
检查通过netstat -lntp或ss -plat (用于TCP; add -u for UDP)或lsof -iTCP -sTCP:LISTEN -P -n (也适用于MACOS)的过程。
另请参阅lsof和fuser有关开放式插座和文件。
查看uptime或w知道系统运行多长时间。
使用alias为常用命令创建快捷方式。例如, alias ll='ls -latr'创建一个新的别名ll 。
保存您通常在~/.bashrc中使用的别名,外壳设置和功能,并安排登录外壳来源。这将使您的所有外壳会议都可以使用。
将环境变量的设置以及登录~/.bash_profile登录时应执行的命令。您从图形环境登录和cron作业中启动的外壳需要单独的配置。
在具有GIT的各种计算机中同步您的配置文件(例如.bashrc和.bash_profile )。
了解变量和文件名包括Whitespace时需要注意。用引号(例如"$FOO"包围您的狂欢变量。更喜欢-0或-print0选项,启用null字符以界定文件名,例如locate -0 pattern | xargs -0 ls -al或find / -print0 -type d | xargs -0 ls -al 。要迭代包含whitespace for for循环的文件名,将您的IF设置为仅使用IFS=$'n'的新线。
在bash脚本中,使用set -x (或variant set -v ,将记录原始输入(包括未注释的变量和注释))进行调试输出。使用严格的模式,除非您有充分的理由不:使用set -e在错误(非零退出代码)上中止。使用set -u检测未设置的可变用法。也要考虑set -o pipefail ,以在管道中流产(尽管这样做,但请更多地阅读,因为此主题有点微妙)。对于更多涉及的脚本,也可以在退出或ERR上使用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中,请注意有很多可变扩展。检查一个变量: ${name:?error message} 。例如,如果bash脚本需要一个参数,则只需写入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 prints 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} offortions,这是有帮助的。在任何其他扩展之前,进行支撑扩展。
扩展的顺序是:支架扩展; Tilde扩展,参数和可变扩展,算术扩展和命令替代(以从左到右的方式完成);单词分裂;和文件名扩展。 (例如,不能使用{$a..$b}的变量来表示类似{1..20}之类的范围。使用seq或a for循环,例如, seq $a $b或for((i=a; i<=b; i++)); do ... ; done 。
命令的输出可以通过<(some command) (称为过程替代)作为文件处理。例如,将local /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也是一个很好的做法。
使用man ascii作为具有十六进制和十进制值的优质ASCII表。对于一般编码信息, man unicode , man utf-8和man latin1很有帮助。
使用screen或tmux多路复用屏幕,在远程SSH会话中特别有用,并分离并重新连接到会话。 byobu可以通过提供更多信息和更容易的管理来增强屏幕或TMUX。 dtach仅是会话持久性的最小替代方法。
在SSH中,知道如何使用-L或-D (和偶尔-R )对隧道进行端口很有用,例如,从远程服务器访问网站。
对您的SSH配置进行一些优化是有用的。例如,此~/.ssh/config包含设置,以避免在某些网络环境中删除连接,使用压缩(这有助于在低频带宽度连接上有助于SCP),并使用本地控制文件与同一服务器进行多路复用通道:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
与SSH相关的其他一些选项对安全性敏感,应该通过小心或主机或受信任的网络启用: StrictHostKeyChecking=no , ForwardAgent=yes
考虑使用使用UDP的mosh的替代方法,避免了连接掉落并在道路上增加便利性(需要服务器端设置)。
要以八进制形式获取文件的权限,这对于系统配置很有用,但在ls中不可用,易于使用,请使用类似
stat -c ' %A %a %n ' /etc/timezone为了从另一个命令的输出中进行交互式选择值,请使用percol或fzf 。
要根据另一个命令的输出(例如git )与文件互动,请使用fpp (pathpicker)。
对于当前目录(和subdirs)中所有文件的简单Web服务器,可供网络上的任何人使用,请使用: python -m SimpleHTTPServer 7777 (适用于端口7777和Python 2)和python -m http.server 7777 (对于端口7777(端口7777)和Python 3)。
要作为其他用户运行命令,请使用sudo 。默认为root运行;使用-u指定另一个用户。使用-i登录该用户(将要求您输入密码)。
要将外壳切换到另一个用户,请使用su username或su - username 。后者的“ - ”获得了一个环境,好像另一个用户刚刚登录一样。省略用户名默认为root。您将被要求提供您要切换的用户的密码。
了解命令行的128K限制。当通配符匹配大量文件时,此“参数列表太长”错误是常见的。 (发生这种情况时,例如find和xargs可能会有所帮助。)
对于基本的计算器(当然,通常可以访问Python),请使用python解释器。例如,
>>> 2+3
5
要在当前目录中通过名称找到文件, find . -iname '*something*' (或类似)。要通过名称在任何地方找到文件,请使用locate something (但请记住updatedb可能没有索引最近创建的文件)。
为了通过源或数据文件进行一般搜索,比grep -r更高级或更快地搜索,包括(从较旧到较新的) ack , ag (“ Silver Searcher”)和rg (RIPGREP)。
将html转换为文本: lynx -dump -stdin
对于Markdown,HTML和各种文档转换,请尝试pandoc 。例如,将降价文档转换为单词格式: pandoc README.md --from markdown --to docx -o temp.docx
如果您必须处理XML,则xmlstarlet是旧的,但是很好。
对于JSON,请使用jq 。供交互式使用,另请参阅jid和jiq 。
对于yaml,请使用shyaml 。
对于Excel或CSV文件,CSVKIT提供in2csv , csvcut , csvjoin , csvgrep等。
对于Amazon S3, s3cmd很方便, s4cmd更快。亚马逊的aws和改进的saws对于其他与AWS相关的任务至关重要。
了解sort和uniq ,包括uniq的-u和-d选项 - 请参见下面的单线。另请参阅comm 。
了解cut , paste并join以操纵文本文件。许多人使用cut ,但忘记join 。
了解wc以计算Newlines( -l ),字符( -m ),Words( -w )和Bytes( -c )。
知道要从stdin到文件的tee ,也可以将其复制到stdout,如ls -al | tee file.txt 。
对于更复杂的计算,包括分组,反向字段和统计计算,请考虑datamash 。
知道该语言环境以微妙的方式影响许多命令行工具,包括分类顺序(整理)和性能。大多数Linux安装都会将LANG或其他语言环境变量设置为像US English这样的本地设置。但是请注意,如果您更改语言环境,则分类将会改变。并且知道I18N例程可以使排序或其他命令运行速度较慢。在某些情况下(例如设置操作或下面的唯一性操作),您可以安全地忽略慢速I18N例程,并使用export LC_ALL=C使用传统的基于字节的排序顺序。
您可以通过将其调用与环境变量设置前缀前相结合来设置特定的命令环境,例如TZ=Pacific/Fiji date 。
了解基本的awk和sed以进行简单的数据爆炸。请参阅单线示例。
要替换一个或多个文件中的所有字符串的出现:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren 。 (在某些情况下, rename命令还允许多个重命名,但是要小心,因为其功能在所有Linux发行版中都不相同。) # 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$// ' * .bakrsync确实是一种快速且非常广泛的文件复制工具。它以在机器之间同步而闻名,但在本地同样有用。当安全限制允许时,使用rsync代替scp允许恢复转移而无需从头开始重新启动。它也是删除大量文件的最快方法之一: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir为了监视处理文件时的进度,请使用pv , pycp , pmonitor , progress , rsync --progress或,或用于块级复制, dd status=progress 。
使用shuf进行洗牌或从文件中选择随机行。
知道sort的选项。对于数字,请使用-n或-h来处理可读数字(例如du -h )。知道密钥的工作原理( -t和-k )。特别是,请注意您需要编写-k1,1才能按第一个字段进行排序; -k1表示按整行排序。稳定排序( sort -s )可能有用。例如,要先按字段2排序,然后是字段1,您可以使用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进行简单的HEX转储和bvi , hexedit或biew进行二进制编辑。
还用于二进制文件, strings (加上grep等),您可以找到一些文本。
对于二进制差异(Delta压缩),请使用xdelta3 。
要转换文本编码,请尝试iconv 。或uconv供更高级使用;它支持一些高级的Unicode事物。例如:
# 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" (其他选项是有问题的)。 dateutils操纵日期和时间表达式,请使用dateadd , datediff , strptime等。
使用zless , zmore , zcat和zgrep在压缩文件上操作。
文件属性可通过chattr设置,并提供文件权限的较低级别替代方案。例如,为了防止意外文件删除不变的标志: sudo chattr +i /critical/directory/or/file
使用getfacl和setfacl来保存和还原文件权限。例如:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (创建稀疏文件), fallocate (Ext4,XFS,BTRFS和OCFS2文件系统), xfs_mkfile (几乎所有文件系统,都来自XFSProgs软件包), mkfile (用于诸如Solaris,Mac OS之类的Unix类系统)。 对于网络调试, curl和curl -I很方便,或者它们的wget等效物,或者更现代的httpie 。
要了解当前的CPU/磁盘状态,经典工具是top (或更好的htop ), iostat和iotop 。使用iostat -mxz 15进行基本CPU和详细的每零件磁盘统计数据和绩效见解。
有关网络连接详细信息,请使用netstat和ss 。
要快速概述系统上发生的事情, dstat特别有用。有关详细信息的最广泛概述,请使用glances 。
要了解内存状态,请运行并了解free和vmstat的输出。特别是,请注意,“缓存”值是由Linux内核作为文件缓存保存的内存,因此有效地计入“自由”值。
Java系统调试是不同的鱼类,但是Oracle和其他一些JVMS的简单技巧是,您可以运行kill -3 <pid>以及完整的堆栈跟踪和堆摘要(包括具有高度信息的垃圾收集细节,可以非常有用)将其倒入STDERR/LOGS。 JDK的jps , jstat , jstack , jmap很有用。 SJK工具更高级。
使用mtr作为更好的示踪剂,以识别网络问题。
为了查看磁盘为何已满, ncdu节省了时间,例如du -sh *等通常的命令。
要查找使用带宽的插座或过程,请尝试iftop或nethogs 。
ab工具(带有Apache)有助于快速检查Web服务器性能。对于更复杂的负载测试,请尝试siege 。
有关更严重的网络调试, wireshark , tshark或ngrep 。
了解strace和ltrace 。如果程序失败,悬挂或崩溃,这些可能会有所帮助,并且您不知道为什么,或者您想获得一般性的性能概念。注意分析选项( -c ),以及连接到运行过程( -p )的能力。使用Trace Child选项( -f )避免丢失重要的呼叫。
了解ldd检查共享库等,但从未在不受信任的文件上运行它。
知道如何使用gdb连接到运行过程并获取其堆栈跟踪。
使用/proc 。在调试现场问题时,有时会有所帮助。示例: /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd , /proc/xxx/exe , /proc/xxx/fd/ , /proc/xxx/smaps (其中xxx是过程ID或PID)。
当调试过去出现问题的原因时, sar可能会非常有帮助。它显示了有关CPU,内存,网络等的历史统计。
有关更深入的系统和性能分析,请查看stap (SystemTap), perf和sysdig 。
检查您使用uname或uname -a (常规UNIX/内核信息)或lsb_release -a (Linux发行info)的操作系统。
每当某件事的表现真的很有趣时,请使用dmesg (可能是硬件或驱动程序问题)。
如果您删除文件,并且没有释放du报告的预期磁盘空间,请检查该文件是否通过进程使用: lsof | grep deleted | grep "filename-of-my-big-file"
将命令拼凑在一起的一些示例:
sort / uniq设置交点,联合和文本文件差异非常有用。假设a和b是已经唯一的文本文件。这是快速的,并且可以在任意大小的文件中起作用,最多可超过许多千兆字节。 (排序不受内存的限制,尽管如果/tmp在一个小的根部分区上,则可能需要使用-T选项。)另请参阅上面关于LC_ALL注释,然后sort 's -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之类的配置设置的目录可能很有用。
在文本文件的第三列中总结所有数字(这可能快3倍,而代码比等效的Python少3倍):
awk ' { x += $3 } END { print x } ' myfilels -l但比ls -lR更容易读取。 find . -type f -lsacct_id参数。如果您想对每个acct_id的请求进行数量计算: egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn要连续监视更改,请使用watch ,例如检查目录中的文件更改,并使用watch -d -n 2 'ls -rtlh | tail'使用watch -d -n 2 ifconfig对WiFi设置进行故障排除时, watch -d -n 2 'ls -rtlh | tail'或网络设置。
运行此功能以获取此文档的随机提示(解析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 :Terminfo条目表
nc :网络调试和数据传输
socat :插座继电器和TCP端口转发器(类似于netcat )
slurm :网络流量可视化
dd :文件或设备之间的数据
file :识别文件的类型
tree :将目录和子目录作为嵌套树显示;喜欢ls ,但递归
stat :文件信息
time :执行和时间命令
timeout :执行指定时间的命令,并在指定的时间完成时停止该过程。
lockfile :创建只能由rm -f删除的信号量文件
logrotate :旋转,压缩和邮件日志。
watch :反复运行命令,显示结果和/或突出显示更改
when-changed :每当更改文件时,运行您指定的任何命令。也请参见inotifywait和entr 。
tac :反向打印文件
comm :按行比较排序的文件
strings :从二进制文件中提取文本
tr :角色翻译或操纵
iconv或uconv :文本编码的转换
split和csplit :分裂文件
sponge :在编写之前阅读所有输入,可用于从然后写入同一文件,例如, grep -v something some-file | sponge some-file
units :单位转换和计算;每两周将Furlongs转换为每眨眼的twips(另请参见/usr/share/units/definitions.units )
apg :生成随机密码
xz :高比率文件压缩
ldd :动态库信息
nm :来自对象文件的符号
ab或wrk :基准测试Web服务器
strace :系统呼叫调试
mtr :最好用于网络调试的示波器
cssh :视觉并发外壳
rsync :SSH或本地文件系统中的文件和文件夹同步文件夹
wireshark和tshark :数据包捕获和网络调试
ngrep :网络层的GREP
host和dig :DNS查找
lsof :过程文件描述符和套接字信息
dstat :有用的系统统计
glances :高水平,多制系统概述
iostat :磁盘用法统计
mpstat :CPU使用统计数据
vmstat :内存使用统计数据
htop :TOP的改进版本
last :登录历史记录
w :谁登录
id :用户/组身份信息
sar :历史系统统计
iftop或nethogs :网络利用套件或进程
ss :插座统计
dmesg :引导和系统错误消息
sysctl :在运行时间查看和配置Linux内核参数
hdparm :SATA/ATA磁盘操纵/性能
lsblk :列表块设备:磁盘和磁盘分区的树视图
lshw , lscpu , lspci , lsusb , dmidecode :硬件信息,包括CPU,BIOS,RAID,RAID,图形,设备等。
lsmod和modinfo :列表并显示内核模块的详细信息。
fortune , ddate和sl :嗯,嗯,这取决于您是否认为蒸汽机体和Zippy引号为“有用”
这些仅与MacOS相关。
带有brew (自制)和/或port (MacPorts)的包装管理。这些可用于在MacOS上安装以上许多命令。
将任何命令的输出复制到带有pbcopy的桌面应用程序,并从一个带有pbpaste粘贴输入中输入。
要启用MacOS终端中的选项密钥作为ALT密钥(例如上述命令中使用的alt -b , Alt -F等),请打开首选项 - >配置文件 - >键盘 - >键盘,然后选择“使用选项为meta键”。
要使用桌面应用程序打开文件,请使用open或open -a /Applications/Whatever.app 。
Spotlight:带有mdfind文件,并列出了带有mdls元数据(例如照片EXIF信息)。
请注意,MacOS基于BSD Unix,许多命令(例如ps , ls , tail , awk , sed )具有与Linux的许多微妙变化,Linux在很大程度上受System V-Style Unix和GNU工具的影响。您通常可以通过注意一个人页面的标题“ BSD General Commands手册”来判断区别。在某些情况下,也可以安装GNU版本(例如gawk和gsed for GNU AWK和SED)。如果编写跨平台bash脚本,请避免使用此类命令(例如,考虑Python或perl )或仔细测试。
要获取MACOS发布信息,请使用sw_vers 。
这些项目仅在Windows上相关。
通过安装Cygwin,在Microsoft Windows下访问Unix Shell的功率。本文档中描述的大多数内容都将开箱即用。
在Windows 10上,您可以将Windows子系统用于Linux(WSL),该系统为UNIX命令行实用程序提供了熟悉的bash环境。
如果您主要想在Windows上使用GNU开发人员工具(例如GCC),请考虑MINGW及其MSYS软件包,该软件包提供诸如Bash,Gawk,Make和Grep之类的实用程序。与Cygwin相比,MSYS没有所有功能。 MingW对于创建UNIX工具的本机Windows端口特别有用。
在Windows下获得Unix外观和感觉的另一个选择是现金。请注意,在此环境中,只有很少的UNIX命令和命令行选项可用。
您可以通过学习和使用wmic从命令行执行和脚本大多数Windows系统管理任务。
本机命令行Windows网络工具您可能会发现有用,包括ping , ipconfig , tracert和netstat 。
您可以通过调用Rundll32命令来执行许多有用的Windows任务。
使用Cygwin的软件包管理器安装其他UNIX程序。
使用mintty作为您的命令行窗口。
通过/dev/clipboard访问Windows剪贴板。
运行cygstart通过其注册应用程序打开任意文件。
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! )
这项工作是根据创意共享归因 - 共享4.0国际许可证获得许可的。