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

本文适合在linux下开发的同学阅读,需要具备基本的linux操作命令。

一、前言

工作中发现很多同学对于Linux下的命令不太熟悉,尤其是一些功能强大的工具,使用者很少。正所谓工欲善其事,必先利其器。本文总结了Linux下常用命令的用法,希望能够帮助大家提升日常开发的效率。

二、命令

1.strace

strace用于跟踪程序执行过程中的系统调用,如跟踪test进程,只需要:


  1. strace -p [test_pid] 或直接strace ./test 

但如果需要:

  • 跟踪进程内的线程: -f 选项
  • 统计时间段内的各个系统调用次数分布:-C 选项
  • 过滤某些系统调用:-e trace选项,如-e trace=network只显示网络相关的系统调用,-e trace=open,close,read,write只显示这4个系统调用,常用于只获取某些特定的系统调用
  • 显示系统调用的时间:-ttt选项
  • 详细显示每行的数据,而不是... -s选项加大字符串的长度限制如-s 1024

比如,跟踪pid为12345的进程中所有线程的read和write系统调用,输出字符串的长度限制为1024:


  1. strace -s 1024 -f -e trace=read,write -p 12345 

2.tcpdump

tcpdump是Linux上的抓包工具,如抓取eth0网卡上的包,使用:


  1. sudo tcpdump -i eth0 

但如果需要:

  • 文本形式显示抓包数据:-A选项
  • 显示16进制的报文数据:-X选项
  • 输出结果到文件中 -w选项,如-w 1.cap将报文输出到1.cap文件,此文件可用wireshark查看
  • 过滤主机和端口号 如host 11.11.11.11 and port 12345过滤主机ip为11.11.11.11,端口号为12345的tcp报文

比如,抓取80端口的HTTP报文,以文本形式展示:


  1. sudo tcpdump -i any port 80 -A 

这样你就可以清楚看到GET、POST请求的内容了。

3.nc

nc可以在Linux上开启TCP Server、TCP Client、UDP Server、UDP Client。

如在端口号12345上开启TCP Server和Client模拟TCP通信:


  1. Server:  nc -l 127.0.0.1 12345 
  2. Client:  nc 127.0.0.1 12345 

在端口号12345上开启UDP Server和Client模拟TCP通信:


  1. Server:  nc -ul 127.0.0.1 12345 
  2. Client:  nc -u 127.0.0.1 12345 

Unix Socket通信示例:


  1. Server:  nc -Ul /tmp/1.sock 
  2. Client:  nc -U /tmp/1.sock 

4.curl

curl用于模拟HTTP请求,在终端模拟请求时常用,如最基本的用法:


  1. curl http://www.baidu.com 

但如果需要:

  • 指定HTTP首部 -H选项,如-H "Host: xx.xx.xx.xx"
  • 指定请求方法 -X选项,如-X POST,-d指定post数据
  • 显示请求详细信息,包括请求和响应首部 -v选项
  • 重定向请求自动追踪 -L选项

常见的curl请求选项-sSfL表示: 不显示进度信息,显示错误信息,发生HTTP错误时失败,自动跟踪重定向

5.find

find可用于查找文件,比如:


  1. find . -name "1.txt" 

表示在当前目录及其子目录下查找文件名为1.txt的文件,结合xargs使用功能更加强大,如:


  1. find . -type f|xargs grep 'abcd' 

表示在当前目录及其子目录下查找包含abcd字符串的文件行,经常用于搜索代码。

6.lsof

lsof命令主要用法包括:

  • sudo lsof -i :[port] 查看端口占用进程信息,经常用于端口绑定失败时确认端口被哪个进程占用
  • sudo lsof -p [pid] 查看进程打开了哪些文件或套接字

7.ss

Linux上的ss命令可以用于替换netstat,ss直接读取解析/proc/net下的统计信息,相比netstat遍历/proc下的每个PID目录,速度快很多。

常见示例:

  • ss -t -a 显示所有的TCP Sockets
  • ss -u -a 显示所有的UDP Sockets
  • ss -x src /tmp/a.sock 显示连接到/tmp/a.sock的进程
  • ss -o state [state TCP-STATE] 如ss -o state established显示所有建立的连接

8.awk/sed

awk和sed在文本处理方面十分强大,其中,awk按列进行处理,sed按行进行处理。

如采用冒号分隔数据,输出第一列数据($0代表行全部列数据,$1代表第一列,$2代表第二列...)


  1. awk -F ":" '{print $1}' 

在awk的结果基础上,结合sort、uniq和head等命令可以轻松完成频率统计等功能


  1. 查看文件的第100行到第200行: 
  2. sed -n '100,200p' log.txt 
  3. 替换字符串中的特定子串 
  4. echo "int charset=gb2312 float"|sed "s/charset=gb2312/charset=UTF-8/g" 
  5. 替换test文件每行匹配ab的部分为cd 
  6. sed -i 's/ab/cd/g' test 

9.screen

当采用telnet或SSH登录远程主机时,因为网络中断的原因会导致session终止,此时会触发SIGHUP信号使得任务终止,因此我们常常会看到有些任务采用nohup的方式运行,避免任务被打断。screen通过多终端的方式,巧妙地解决了这个问题。 示例:

  • screen -S test 开启一个screen,这时拥有一个终端,所有执行的程序都会在ps中展示
  • Ctrl+a键+d键 退出当前screen,切到上级窗口
  • screen -ls 查看所有screen列表,如

  1. 13333.test      (Detached) 
  2. 14039.test4     (Detached) 
  3. 表示两个screen,screen标识为13333.test和14039.test4 
  • screen -r [pid.]tty.host 进入选定的screen,如screen -r 13333.test
  • exit 关闭当前screen

注:本文假定读者已经知道类似top、netstat、df、vmstat等常见命令的用法,所以介绍的都是一些容易被忽视却很实用的命令用法。本文对于这些命令进行了简化和提炼,所有命令的完整功能需要具体参考命令手册。

本文作者:佚名

来源:51CTO

时间: 2024-10-30 11:23:35

Linux下容易被忽视的那些命令用法的相关文章

linux下Mysql的启动关闭的命令

 下面我来为各位介绍linux下Mysql的启动关闭的命令,有需要了解的朋友不防进入看看吧.     linux下Mysql的启动关闭(本文基于centos6.4.mysql5.7.3),mysql安装在/usr/local/mysql目录下: [root@lnmp ~]# /usr/local/mysql/bin/mysql --version /usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.7.3-m13, for Linux (x86_64)

linux下查看动态链接库依赖关系的命令 x86: ldd *.so arm: arm-linux-readelf -d *.so 实际例子: 以项目中用到的库librtsp.so分析: lijun@ubuntu:~/workspace$ arm-hisiv100nptl-

linux下查看动态链接库依赖关系的命令 x86:ldd    *.so arm:arm-linux-readelf    -d    *.so 实际例子:以项目中用到的库librtsp.so分析:lijun@ubuntu:~/workspace$ arm-hisiv100nptl-linux-ld -d librtsp.so arm-hisiv100nptl-linux-ld: warning: liblog.so, needed by librtsp.so, not found (try u

Linux 下dmidecode查看内存条数的命令介绍_Linux

在linux下有很多命令,可以查看机器的硬件信息. 这里介绍一个查看内存的条数等信息的方法. 相看硬件信息,仅适合ubuntu系列发行版: lshw Linux 下查看内存条数: dmidecode |grep -A16 "Memory Device$" 有关dmidecode命令的详细用法,请参考这篇文章:linux查看主板内存槽与内存信息的命令dmidecode . 以上就是小编为大家带来的Linux 下dmidecode查看内存条数的命令介绍全部内容了,希望大家多多支持~ 以上是

嵌入式linux的tftp安装配置及tftp命令用法

TFTP协议简介 TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现.嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持.因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了.下面就详细介绍一下linux服务器端tftp-server的配置. 1.安装tftp服务器 需要安装xinetd.tftp和tftp-server 3个软件 1)如果能上网,通过y

Linux下C语言的fork()子进程函数用法及相关问题解析_C 语言

forkfork()函数是linux下的一个系统调用,它的作用是产生一个子进程,子进程是当前进程的一个副本,它跟父进程有一样的虚存内容,但也有一些不同点. 但是,值得注意的是,父进程调用fork()后,fork()返回的是生成的子进程(如果能顺利生成的话)的ID.子进程执行的起点也是代码中fork的位置,不同的是下面这段C语言代码展示了fork()函数的使用方法: // myfork.c #include <unistd.h> #include <stdio.h> int main

oracle教程:linux下启动服务与监听命令

  在linux操作系统下,如何启动服务与监听命令?首先必须以oracle用户登陆: 1.启动数据库: 以下为引用的内容: oracle@suse92:~> sqlplus /nolog SQL*Plus: Release 9.2.0.4.0 - Production on Fri Jan 20 02:29:37 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect /as sy

Linux下添加用户和用户组的命令使用教程

  useradd useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid [ -o]] [-n] [-r] login useradd -D [-g default_group] [-b default_home] [-f default_ina

Linux下操作邮件的一些基础命令

  系统提供了用户之间通信的邮件系统,当用户打开终端注册登录时发现系统给出如下信息: 代码如下: you have mail. 这时用户可通过键入mail命令读取信件: 代码如下: $ mail mail程序将逐个显示用户的信件,并依照时间顺序,显示最新的信件.每显示一段信件,mail都询问 用户是否要对该信件作些处理.若用户回答d,则表示删除信件;若仅按回车键,表示对信件不作任何改 动(信件仍旧保存,下次还可读这一信件);若回答p,则要求重复显示信件;s filename表示要把信件 存入所命

Linux下更好用的帮助命令—cheat

Linux系统中,我们经常会用man命令来帮助查看这个命令的具体用法,man是很强大的,但是英语不好的同学用man用起来可能不那么顺手,自然而然的就出现了cheat命令,cheat命令就是通过简单的实例告诉你一个命令的具体使用方法,它被创建的目的是帮助系统管理员记住常用的系统命令. 1. Cheat介绍 cheat通过实例告诉使用者一些命令的具体使用方法. 2. Cheat例子 例如当时想要知道tar命令具体是如何使用的,你可以使用下面命令查看: cheat tar #你会看到像下面一样的效果图