转载请注明出处http://www.paraller.com原文排版地址点击获得更好的阅读体验本文内容主要大纲为参考jlevy/the-art-of-command-line,增加了说明和解释,增加了一些常用的命令。作为Bash日常使用的词汇表,可以按Tab键自动补全参数,使用ctrl-r搜索命令行历史(按键后输入关键字搜索,反复按ctrl-r找到后匹配项,按回车键会执行当前匹配的命令,按右方向键会将匹配项放到当前行,不会直接执行,便于修改)。在Bash中,你可以按ctrl-w删除你输入的最后一个单词,ctrl-u删除行中光标位置之前的内容ctrl-k删除从光标到行尾的所有内容ctrl-a到将光标移动到行首Ctrl-e可以将光标移动到行尾,ctrl-l可以清屏。替代-。循环移动到上一个参数cd命令可以切换工作路径,输入cd~进入主目录。要访问主目录中的文件,请使用前缀~(例如~/.bashrc)。在sh脚本中,环境变量$HOME用于引用主目录的路径。回到之前的工作路径:cd-。如果您在键入命令时改变了主意,请按alt-#在行的开头添加#作为注释,然后按Enter执行它。这样,借助命令行历史记录,就可以很方便地恢复刚刚中途输入的命令。pstree-p以优雅的方式显示进程树。使用pgrep和pkill按名称查找进程或发送信号(-f参数通常很有用)。了解可以发送给流程的信号类型。例如,使用kill-STOP[pid]停止进程。使用man7signal查看详细列表。kill-9强制终止使用nohup或disown保持运行的后台进程。使用netstat-lntp或ss-plat检查哪些进程正在侦听端口(默认是检查TCP端口;添加参数-u以检查UDP端口)。lsof查看打开的套接字和文件。lsof-i:port使用uptime或w查看系统运行了多长时间。使用别名为常用命令创建快捷方式。例如:aliasll='ls-latr'创建一个新的命令别名ll。使用typell查看和保存~/.bashrc中的别名、shell选项和常用函数,详见本文。这样做将使您的设置可用于所有shell会话。将环境变量的设置和登录时执行的命令保存在~/.bash_profile中。从GUI启动的shell和由cron启动的shell需要单独的配置文件。要在多台计算机之间同步您的配置文件(例如.bashrc和.bash_profile),您可以使用Git。当变量和文件名包含空格时要格外小心。Bash变量用引号括起来,例如“$FOO”。尽可能使用-0或-print0选项用NULL分隔文件名,例如locate-0pattern|xargs-0ls-al或find/-print0-typed|xargs-0ls-al。如果在for循环中迭代的文件名包含空字符(空格、制表符等),只需使用IFS=$'\n'将内部字段分隔符设置为换行符。系统调试curl和curl-I可以很方便的用于web调试,他们的好兄弟wget也可以,或者试试比较时髦的httpie。获取CPU和硬盘的使用情况,通常使用top(htop更好)、iostat和iotop。而iostat-mxz15可以让你了解CPU和各个硬盘分区的基本信息和性能。使用netstat和ss查看网络连接详细信息。当你想大致了解系统的当前状态时,dstat非常有用。但是,要深入了解系统,请使用glances,它会在终端窗口中为您提供一些系统级数据。要了解内存状态,请运行并了解free和vmstat的输出。值得注意的是,cached的值是指Linux内核用作文件缓存的内存大小,与空闲内存无关。Java系统调试是完全不同的事情,可用于在Oracle的JVM或其他JVM上进行调试的技巧是您可以运行kill-3并获得完整的堆栈跟踪和堆概览(包括GC的详细信息)被保存标准错误或日志文件。JDK中的jps、jstat、jstack、jmap很有用。SJK工具更先进。使用ncdu查看磁盘使用情况,比du-sh*等常用命令耗时更少。要查找正在使用带宽的套接字连接或进程,请使用iftop或nethogs。ab工具(Apache自带)可以用来简单粗暴的检测web服务器的性能。对于更复杂的负载测试,请使用siege。ab-c10-n100http://www.baidu.com/index.html学习使用/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分发信息)。如果你删除了一个文件,但是du发现磁盘空间并没有像预期的那样被释放,检查一下这个文件是否正在被一个进程使用:lsof|grep删除|grep"filename-of-my-big-file"一行使用grep.*(每行会附加文件名)或head-100*(每个文件有一个文件头)来读取和检查所有内容目录中的文件。这在检查充满配置文件的目录(例如/sys、/proc、/etc)时特别有用。这可能看起来像ls-l的递归版本,但如果您想查看文件树上的大小/日期,则比ls-lR更容易理解:find.-typef-ls假设您有类似Web服务器日志文件文本文件的内容,并且假设URI中有acct_id参数,某个值只会出现在某些行上。如果要计算每个acct_id值发出了多少请求,请使用以下代码:cataccess.log|egrep-o'acct_id=[0-9]+'|剪切-d=-f2|排序|uniq-c|sort-rn持续监控文件变化,可以使用watch,比如查看某个文件夹中文件的变化,可以使用watch-d-n2'ls-rtlh|尾巴';或在对WiFi设置进行故障排除时监控网络要更改设置,您可以使用watch-d-n2ifconfig。type/help/apropos/man阅读文档获取帮助信息typecommand判断该命令是可执行文件、shell内置命令还是别名;typepasswd=>passwd是/usr/bin/passwd,typell=>ll别名为“ls-al”使用help和help-d命令获取帮助信息;touch--helpapropos查找文件apropospasswdman命令读取文件manls网络相关工具ifconfig显示信息eth1Linkencap:EthernetHWaddr00:16:3e:00:56:6einetaddr:120.24.242.119Bcast:120.24.243.255Mask:255.255.252.0向上广播运行多播MTU:1500指标:1RX数据包:1798839错误:0丢弃:0超限0:0TX数据包:0帧1979705错误:0丢弃:0超限:0运营商:0冲突:0txqueuelen:1000RX字节:182577364(182.5MB)TX字节:1107427131(1.1GB)loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:.0.0UPLOOPBACKRUNNINGMTU:65536Metric:1RXpackets:254273er??rors:0dropped:0溢出:0帧:0TX数据包:254273错误:0丢弃:0溢出:0carrier:0collisions:0txqueuelen:0RXbytes:15769084(15.7MB)TXbytes:15769084(15.7MB)eth0代表第一块网卡,其中HWaddr代表网卡物理地址,可以看到当前物理地址网卡的地址(MAC地址)是00:50:56:BF:26:20inetaddr用来表示网卡的IP地址,这个网卡的IP地址是192.168.120.204,广播地址,Bcast:192.168.120.255,掩码地址Mask:255.255。255.0lo是主机的返回地址。这个一般用来测试一个网络程序,但是你不希望局域网或者外网的用户看到它。只能运行查看本主机使用的网络接口,如HTTPD服务器分配到坏地址时,在浏览器中输入127.0.0.1,就可以看到自己设置的WEB网站了。但是你只能看到它,局域网内的其他主机或用户是无从知晓的。第一行:连接类型:以太网(Ethernet)HWaddr(硬件mac地址)第二行:网卡的IP地址、子网、掩码(续)MULTICAST(支持多播)MTU:1500(最大传输单元):1500字节第四行第五行:统计接收和发送的数据包第七行:统计接收和发送的数据字节数。设置:(ssh登录linux服务器时要注意,如果关闭了,除非有多张网卡,否则打不开)##启动和关闭指定网卡ifconfigeth0upifconfigeth0down##配置并删除网卡的IPv6地址ifconfigeth0add33ffe:3240:800:1005::2/64ifconfigeth0del33ffe:3240:800:1005::2/64##修改MAC地址ifconfigeth0hwether00:AA:BB:CC:DD:EEdig检查DNS信息:dig。google-DNS查看baidu.com的A记录#dig@dnsservernamequerytypedig@8.8.8.8www.baidu.comanc测试某个网站或IP端口是否可以访问nc-v-w1120.76.77.58-z9761修改DNSvim/etc/resolv.conf香港(HKG)域名服务器120.136.32.62域名服务器120.136.32.63弗吉尼亚北部(IAD)域名服务器69.20.0.164域名服务器69.20.0.196伦敦(LON)域名服务器83.138.151.80域名服务器83.138.151.81芝加哥域名服务器3.138.151.81.4.8名称服务器173.203.4.9达拉斯/沃思堡(DFW)名称服务器72.3.128.240名称服务器72.3.128.241.悉尼(SYD)名称服务器119.9.60.62名称服务器119.9.60.63.curlGETcurl-GurlPOSTcurl-XPOST"dataparam2=value1&"curl--requestPOSThttps://example.com/resource.cgicurl-H"Content-Type:application/json"-XPOST-d'{"username":"xyz","password":"xyz"}'http://localhost:3000/api/loginPUTcurl-XPUT-darg=val-darg2=val2localhost:8080DELETEcurl-X"DELETE"http://www.url.com/page其他参数curl--form"fileupload=@my-file.txt"https://example.com/resource.cgicurl--data"param1=value1¶m2=value2"https://example.com/resource.cgi-F上传文件curl-Fupload=@localfilename-Fpress=OKURLcurl-iincludeprotocolin输出标头认证curl-uname:passwordwww.secrets.com-v在输出上打印详细信息-#用进度条显示当前传输状态OkeepfilenameBash中的任务管理工具:&|后台运行ctrl-z|暂停当前??进程,可以和bg一起使用,让任务在后台运行ctrl-d|表示一个特殊的二进制值,表示EOF,比如当输入无法结束提示“>”符号(大于号)时,按这个组合结束输入ctrl-c|结束工作|查看后台当前运行了多少命令fg|返回后台进程到前台运行bg|唤醒任务收缩运行kill|服务器ssh-copy-id-i~/.ssh/id_rsa.pub远程主机免密码登录vimconfigHostgIdentityFile~/.ssh/gitlab主机名gitlab.umiit.cn2222端口用户gitgrep正则表达式学习参考这篇文章:正则表达式快速入门grep的一些参数:o只打印匹配的文本E使用正则i或--ignore-case忽略字符大小写的区别v或--revert-match反转查找。Aor--after-context=显示该列之后的内容。Bor--before-context=显示该列之前的内容。Cor--context=or-显示列前后的内容。r遍历文件夹##中的所有文件并仅打印文件名find./|xargsgrep-ri'text'-ldate系统时间和硬件时间hwclock--set--date="8/10/1718:16"date-s"2017-08-1018:19:00"history使用:Crtl/control+R在输入命令前,可以打开历史命令提示符执行历史命令:然后使用!n(n为命令号)再次执行即可;如何删除历史命令的记录?vim/etc/profileHISTSIZE=1//or0echo''>~/.bash_history立即清除当前历史命令在history中的记录:history-c立即更新历史命令:bash执行命令时,命令名不是立即写入历史文件,而是存储在内部缓冲区中,在bash退出时一起写入。但是,您可以调用“history-w”命令让bash立即更新历史文件。history-wdisown使用disown-hjobspec使作业忽略HUP信号。使用disown-ah让所有作业忽略HUP信号。使用disown时,目标job将从job列表中移除,我们将无法再使用jobs查看,但仍可以使用ps-ef查找。[root@pvcent107build]#cp-rtestLargeFilelargeFile&[1]4825[root@pvcent107build]#jobs[1]+运行cp-i-rtestLargeFilelargeFile&[root@pvcent107build]#disown-h%1[root@pvcent107build]#ps-ef|greplargeFileroot4825968109:46pts/400:00:00cp-i-rtestLargeFilelargeFileroot4853968009:46pts/400:00:00greplargeFilexargsxargs命令是向其他命令传递参数的过滤器,是组合多个命令的工具。它擅长将标准输入数据转换为命令行参数xargs可以处理管道或标准输入并将它们转换为特定命令的命令参数。xargs还可以将单行或多行文本输入转换为其他格式,例如多行转单行、单行转多行。xargs的默认命令是echo,空格是默认分隔符。这意味着通过管道传输到xargs的输入将包含换行符和空格,但是通过xargs处理,换行符和空格将被替换为空格/bin/echo命令;输入文本后Crtl-droot@iZwz93msbqzlxk30oxj7s1Z:~#xargshellowolrdhellowolrd多行输入单行输出:cata.md|xargs多行输出,指定字数为一行:cattest.txt|n3abcdef指定限定符-d:echo'hello-world'|xargs-d-helloworld使用-I指定替换字符串{}:{}这个字符串会在xargs展开时被替换,当-I和xargs结合使用时,每个参数命令都会执行一次,将所有图片文件复制到/data/images目录:ls*.jpg|xargs-n1-Icp{}/data/images小知识点cal:漂亮的日历env:执行一条命令(脚本文件中有用)printenv:打印环境变量(调试或编写脚本文件时有用)look:查找单词或行以特定字符串开头fmt:格式化文本段落pr:将文本格式化为页/列形式fold:指定一行显示多个单词folda.md-10column:将文本格式化为多个对齐的、固定宽度的列或表格展开和unexpand:制表符和空格之间的转换nl:add行号seq:打印数字bc:计算器factor:分解因子gpg:加密和签名文件nc:网络调试和数据传输socat:套接字代理,类似netcatslurm:网络流量可视化dd:在文件或设备之间传输数据ddif=a.mdof=b.mdbs=1024file:判断文件类型tree:以树的形式显示路径和文件,类似递归lsstat:文件信息time:执行命令,并计算执行时间lockfile:使文件watch只能通过rm-f删除:重复运行相同的命令,显示结果和/或突出显示更改tac:反转输出文件shuf:从中随机选择行文件comm:逐行比较sortedFileiconv或uconv:文本编码转换split和csplit:splitCutfilesponge:写入前读取所有输入,读取文件后写入同一个文件时很有用,比如grep-vsomethingsome-file|spongesome-fileunits:将一个度量单位转换为另一个等效度量单位(参见/usr/share/units/definitions.units)apg:随机密码生成xz:高百分比文件压缩ldd:动态库信息ab:网络服务器分析strace:调试系统调用mtr:更好的网络调试和跟踪工具rsync:通过ssh或本地文件系统同步文件和文件夹Wireshark和tshark:抓包和网络调试工具lsof:列出当前系统打开文件和查看端口的工具informationdstat:查看系统状态iostat:硬盘使用状态mpstat:CPU使用状态vmstat:内存使用状态htop:增强版toplast:登录记录w:查看登录用户id:用户/组ID信息sar:系统历史dataiftop或nethogs:socket字和进程的网络利用率ss:socket数据dmesg:引导和系统错误信息l和dmidecode:查看硬件信息,包括CPU、BIOS、RAID、显卡、USB设备等lsmod和modinfo:listkernelmodules,andDisplayitsdetails参考网站DNS技巧:LinuxI/O重定向的一些技巧jlevy/the-art-of-command-line了解inode&links&rwx权限ifconfig《dig挖出DNS的秘密》-linux命令五-分钟系列三十四xargs命令Linux技巧:让进程在后台可靠运行的几种方法jqAWK简明教程sed简明教程