当前位置: 首页 > 科技观察

Linux下那些容易被忽视的命令的用法

时间:2023-03-12 13:41:47 科技观察

本文适合在Linux下开发的同学阅读,需要有基本的Linux操作命令。一、前言在工作中,我发现很多同学对Linux下的命令并不熟悉,尤其是一些功能强大的工具,很少用到。俗话说,工欲善其事,必先利其器。本文总结了Linux下常用命令的使用方法,希望能帮助大家提高日常开发的效率。二、命令1、stracestrace用于跟踪程序执行过程中的系统调用,比如跟踪测试进程,只需要:strace-p[test_pid]或者直接strace./test但是如果需要:跟踪进程中的线程:-foption统计时间段内的系统调用数量分布:-Coption过滤某些系统调用:-etrace选项,如-etrace=network只显示与网络相关的系统调用,-etrace=open,close,read,write只显示这4个系统调用,常用于只获取某些系统调用显示系统调用的时间:-ttt选项详细显示每一行的数据,而不是...-s选项增加字符串的长度限制如-s1024例如跟踪pid为12345的进程中所有线程的读写系统调用,输出字符串的长度限制为1024:strace-s1024-f-etrace=read,write-p123452.tcpdumptcpdump是Linux上抓包的工具,比如抓包上eth0网卡,使用:sudotcpdump-ieth0但如果需要:以文本形式显示捕获的数据包数据:-A选项显示十六进制数据包数据:-X选项将结果输出到文件-w选项,如-w1.cap会将消息输出到1.cap文件中,可以用wireshark查看过滤主机和端口号,比如host11.11.11.11和port12345过滤主机ip为11.11.11.11的tcp和端口号为12345例如抓取80端口的HTTP报文,以文本形式显示:sudotcpdump-ianyport80-A这样可以清楚的看到GET和POST请求的内容。3、ncnc可以在Linux上打开TCPServer、TCPClient、UDPServer、UDPClient。例如在12345端口开启TCPServer和Client模拟TCP通信:Server:nc-l127.0.0.112345Client:nc127.0.0.112345在12345端口开启UDPServer和Client模拟TCP通信:Server:nc-ul127。0.0.112345Client:nc-u127.0.0.112345UnixSocket通信示例:Server:nc-Ul/tmp/1.sockClient:nc-U/tmp/1.sock4.curlcurl用于模拟HTTP请求,常用于终端模拟请求,比如最基本的用法:curlhttp://www.baidu.com但是如果需要的话:指定HTTP头-H选项,比如-H"Host:xx.xx.xx.xx"指定请求方法-X选项,如-XPOST,-d指定post数据显示请求详情,包括请求和响应头-v选项重定向请求自动跟踪-L选项commoncurl请求选项-sSfL表示:不显示进度信息,显示错误信息,出现HTTP错误5.findfind可以用来查找文件,例如:find.-name"1.txt"表示在当前目录及其子目录中查找名为1.txt的文件,而组合xargs的功能更强大,如:find.-typef|xargsgrep'abcd'表示在当前目录中查找包含abcd字符串的文件行ctory及其子目录,常用于查找代码。6、lsoflsof命令的主要用法包括:sudolsof-i:[port]查看端口占用进程信息,常用于端口绑定失败时确认端口被哪个进程占用sudolsof-p[pid]查看哪个文件或进程由进程打开Socket7。ssLinux上的ss命令可以用来代替netstat。ss直接读取并解析/proc/net下的统计信息,比netstat遍历/proc下的各个PID目录要快很多。常见示例:ss-t-a显示所有TCP套接字ss-u-a显示所有UDP套接字ss-xsrc/tmp/a.sock显示连接到/tmp/a.sock的进程ss-ostate[stateTCP-STATE]如ss-ostateestablished显示所有已建立的连接8.awk/sedawk和sed在文本处理方面非常强大,其中awk按列处理,sed按行处理。如果用冒号分隔数据,则输出***列数据($0代表该行所有列数据,$1代表***列,$2代表第二列...)awk-F":"'{print$1}'inawk根据结果,结合sort、uniq、head等命令可以轻松完成频率统计等功能。查看文件第100到200行:sed-n'100,200p'log.txt替换字符串中的特定子串echo"intcharset=gb2312float"|sed"s/charset=gb2312/charset=UTF-8/g"replacescdsed-i的/ab/cd/g'test9.screen测试文件每行匹配ab的部分当使用telnet或SSH登录远程主机时,会话会因网络中断而终止。此时会触发SIGHUP信号,终止任务。因此,我们经常会看到一些任务以nohup方式运行,以避免任务中断。screen通过多终端的方式巧妙的解决了这个问题。例子:screen-Stest打开一个screen,那么你就有了一个terminal,所有执行的程序都会显示在psCtrl+a键+d键退出当前screen,切换到上层窗口screen-ls查看所有屏幕列表,如13333.test(Detached)14039.test4(Detached)表示两个屏幕,屏幕标识为13333.test和14039.test4screen-r[pid.]tty.host进入选择的屏幕,如screen-r13333.testexit关闭当前屏幕注:本文假设读者已经了解top、netstat、df、vmstat等常用命令的用法,所以一些容易被忽略但又不失为实用命令的命令的用法非常实用的介绍。本文对这些命令进行了简化和提炼,所有命令的完整功能需要参考命令手册。