Linux命令大全持续更新中

1 基本命令

1.1 awk命令

1.2 环境变量

export命令显示当前系统定义的所有环境变量

echo $PATH命令输出当前的PATH环境变量的值

使用export命令直接修改PATH的值

如:export PATH=$PATH:/home/uusama/mysql/bin

# env    # 查看环境变量

echo 与 env的区别:

(1)查询指定环境变量
echo $PATH  

(2)查看当前会话中预设的环境变量
env
(3)既查看当前会话中预设的环境变量,也想查看用户自定义的变量
set
 

1.3 系统命令

cat /etc/redhat-release # 系统版本

free –h #剩余内存使用情况 或 free -m 

uname –a #系统位数

lscpu #cpu型号

dmidecode -s system-product-name #虚拟机物理机判断

# free -m   # 查看内存使用量和交换区使用量 
# df -h    # 查看各分区使用情况 ,磁盘使用情况 du -h --max-depth=1
# du -sh <目录名>  # 查看指定目录的大小 

iotop -P #查看各个进程IO使用

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息

iostat -d -k 2 #显示磁盘的使用情况

ps -eo pid,tty,user,comm,lstart,etime |  grep 进程名 #查看进程启动的时间和运行时间

1.4 文件目录查找

方一:

grep –rn 名称  路径

grep -rn  test12 /opt/

方二:

find 路径  -name 名称

1.5 查询库文件位置 whereis

whereis libcrypto.so.10

1.6 查看库文件中是否某个函数

nm test.so | grep main

1.7 查看目录结构

tree -L 3

1.8 查看文件类型

file 文件名

三种类型

1.9 解压压缩命令

(1)tar.gz 格式

tar在Linux上是常用的打包、压缩、加压缩工具

参数:
-c :create 建立压缩档案的参数;
-x : 解压缩压缩档案的参数;
-z : 是否需要用gzip压缩,--gzip, --gunzip, --ungzip   通过 gzip 过滤归档
-v: 压缩的过程中显示档案;
-f: 置顶文档名,在f后面立即接文件名,不能再加参数

-J:--xz 通过 xz 过滤归档

-C, --directory=DIR 改变至目录 DIR
 

解压:tar zxvf /source/test.tar.gz -C /source/ test2

压缩:tar -zcvf /home/sw/test.tar.gz /home/sw/test

(2)gz格式

 gunzip test.gz

(3)解压 zip文件

unzip xxx.zip

1.20 sed命令

linux系统中sed 是一种在线编辑器,它一次处理一行内容。

2 问题定位调试命令

2.1 GDB调试命令

GDB(GNU Debugger)是GCC的调试工具。

2.1.1 编译源程序


调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数

  1. gcc -g hello.c -o hello

  2. g++ -g hello.cpp -o hello

 2.1.2  启动GDB方法

1、gdb program

program 也就是你的执行文件,一般在当前目录下。

2、gdb program core

用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

3、gdb program pid

或 切到正在运行的进程

gdb -p `pidof 进程名`

2.1.3 常用命令

(1)启动程序:run

r
(2)设置断点:b 行号|函数名
根据行号设置断点
break test.c:23 if b==0  #当在b等于0时,程序将会在第23行断
tbreak test.c:10  #在第10行设置临时断点

根据函数名设置断点

reak filename:function 
在源文件filename的function函数的入口处停住 
break class::function或function(type,type) 
在类class的function函数的入口处停住 
break namespace::class::function 
在名称空间为namespace的类class的function函数的入口处停住

(3)  删除断点:delete 断点编号
delete [breakpoints num] [range...]
delete  #删除所有断点
delete 5  #删除第5个断点
delete 1-10
clear   #删除当前行所有breakpoints
clear function  #删除函数名为function处的断点
(4)    禁用断点:disable 断点编号
disable  #禁用所有断点
disable bnum #禁用标号为bnum的断点
(5)    启用断点:enable 断点编号    

enable  #启用所有断点
enable bnum #启用标号为bnum的断点
enable delete bnum  #启动标号为bnum的断点,并且在此之后删除该断点
(6)查看信息

 info break 或info b 查看断点 info thread,info break,info reg等
(7)单步跟踪:next (简写 n)
(8)单步跟踪:step (简写 s)
(9)打印变量:print 变量名字 (简写p)

(gdb) p num                                 <--输出 num 的值
$1 = 3
(gdb) p num=4                             <-- 修改 num 的值为 4
$2 = 4
(10)设置变量:set var=value
(11)查看变量类型:ptype var
(12)顺序执行到结束:cont
(13) 顺序执行到某一行: util lineno
(14)打印堆栈信息:bt

backtrace n
bt n

 n是一个正整数,表示只打印栈顶上n层的栈信息。

where和 bt是完全同义词并产生完全相同的输出。

bt full 相比bt能显示更详细的局部变量信息。

backtrace 命令用于打印当前调试环境中所有栈帧的信息

参数:

  • n:一个整数值,当为正整数时,表示打印最里层的 n 个栈帧的信息;n 为负整数时,那么表示打印最外层 n 个栈帧的信息;
  • -full:打印栈帧信息的同时,打印出局部变量的值。

(15)退出调试:quit(简写 q)

(16)显示源程序代码的内容,包括各行代码所在的行号:list(简写 l)

 显示源代码


(gdb)list linenum
Print lines centered around line number linenum in the current source file.
(gdb)list function  #显示函数名为function的函数的源程序

(17) 查看栈某一层的详细信息

frame n

 frame 8 or f8 查看第8层栈帧的函数调用,包括其中的局部变量

 C++ 程序而言,异常往往出现在某个函数体内,例如 main() 主函数、调用的系统库函数或者自定义的函数等。要知道,程序中每个被调用的函数在执行时,都会生成一些必要的信息,包括:

  • 函数调用发生在程序中的具体位置;
  • 调用函数时的参数;
  • 函数体内部各局部变量的值等等。

这些信息会集中存储在一块称为“栈帧”的内存空间中。也就是说,程序执行时调用了多少个函数,就会相应产生多少个栈帧,其中每个栈帧自函数调用时生成,函数调用结束后自动销毁。

 main() 主函数对应的栈帧,又称为初始帧或者最外层的帧。每当程序中多调用一个函数,执行过程中就会生成一个新的栈帧。更甚者,如果该函数是一个递归函数,则会生成多个栈帧。

当前正被调用函数对应的栈帧的编号为 0,调用它的函数对应栈帧的编号为 1,以此类推。

(gdb) info frame

  • 当前栈帧的编号,以及栈帧的地址;
  • 当前栈帧对应函数的存储地址,以及该函数被调用时的代码存储的地址
  • 当前函数的调用者,对应的栈帧的地址;
  • 编写此栈帧所用的编程语言;
  • 函数参数的存储地址以及值;
  • 函数中局部变量的存储地址;
  • 栈帧中存储的寄存器变量,例如指令寄存器(64位环境中用 rip 表示,32为环境中用 eip 表示)、堆栈基指针寄存器(64位环境用 rbp 表示,32位环境用 ebp 表示)等。)

(18)线程

thread apply all bt   #打印所有线程堆栈

info thread #显示当前可调试的所有线程

thread pid #切换当前调试的线程为指定ID的线程

综合应用:

#include <stdio.h>
int func(int num){
    if(num==1){
        return 1;
    }else{
        return num*func(num-1);
    }
}
int main ()
{
    int n = 5;
    int result = func(n);
    printf("%d! = %d",n,result);
    return 0;
}

 (1)设置断点,并运行,打印变量值:

(gdb) b 3   #设置断点
Breakpoint 1 at 0x4004cf: file main.c, line 3.
(gdb) r
Starting program: ~/demo/main.exe

Breakpoint 1, func (num=5) at main.c:3
3     if(num==1){
(gdb) c
Continuing.

Breakpoint 1, func (num=4) at main.c:3
3     if(num==1){

(gdb) p num    #打印变量值
$1 = 4

(2)backtrace查看栈信息

(gdb) backtrace        <-- 打印所有的栈帧信息
#0  func (num=4) at main.c:3
#1  0x00000000004004e9 in func (num=5) at main.c:6
#2  0x0000000000400508 in main () at main.c:12
(gdb) info frame       <-- 打印当前栈帧的详细信息
Stack level 0, frame at 0x7fffffffe240:            <-- 栈帧编号 0,地址 0x7fffffffe240
rip = 0x4004cf in func (main.c:3); saved rip 0x4004e9   <-- 函数的存储地址 0x4004cf,调用它的函数地址为 0x4004e9
called by frame at 0x7fffffffe260        <-- 当前栈帧的上一级栈帧(编号 1 的栈帧)的地址为 0x7fffffffe260
source language c.
Arglist at 0x7fffffffe230, args: num=4  <-- 函数参数的地址和值
Locals at 0x7fffffffe230, Previous frame's sp is 0x7fffffffe240  <--函数内部局部变量的存储地址
Saved registers:    <-- 栈帧内部存储的寄存器
  rbp at 0x7fffffffe230, rip at 0x7fffffffe238

(3)frame查看

(gdb) info args          <-- 打印当前函数参数的值
num = 4
(gdb) info locals        <-- 打印当前函数内部局部变量的信息(这里没有)
No locals.
(gdb) up   <-- 查看编号为 1 的栈帧
#1  0x00000000004004e9 in func (num=5) at main.c:6
6         return num*func(num-1);
(gdb) frame 1           <-- 当编号为 1 的栈帧作为当前栈帧
#1  0x00000000004004e9 in func (num=5) at main.c:6
6         return num*func(num-1);

 (gdb) info frame      <-- 打印 1 号栈帧的详细信息
Stack level 1, frame at 0x7fffffffe260:
rip = 0x4004e9 in func (main.c:6); saved rip 0x400508
called by frame at 0x7fffffffe280, caller of frame at 0x7fffffffe240  <--上一级栈帧地址为 0x7fffffffe280,下一级栈帧地址为 0x7fffffffe240
source language c.
Arglist at 0x7fffffffe250, args: num=5
Locals at 0x7fffffffe250, Previous frame's sp is 0x7fffffffe260
Saved registers:
  rbp at 0x7fffffffe250, rip at 0x7fffffffe258

(18)display命令

display 命令也用于调试阶段查看某个变量或表达式的值,它们的区别是,使用 display 命令查看变量或表达式的值,每当程序暂停执行(例如单步执行)时,GDB 调试器都会自动帮我们打印出来,而 print 命令则不会。

(gdb) display expr
(gdb) display/fmt expr

其中,expr 表示要查看的目标变量或表达式;参数 fmt 用于指定输出变量或表达式的格式

2.2 网络抓包

2.2.1 tcpdump

tcpdump -i eth0 # 抓包网卡

tcpdump src host 192.168.1.1 #按照源ip抓包

tcpdump dst host 192.168.1.1 #按照目的ip抓包

tcpdump -i any host 192.168.10.1 and port 8080 -w test.pcap -v 

2.2.2 wireshark

(1)按照ip过滤

 IP源地址:ip.src ==192.168.1.1

   IP目的地址:ip.dst== 192.168.1.1

   IP地址(包括源和目的):ip.addr== 192.168.1.1

(2)按照端口过滤

 TCP端口:tcp.port==8080

   TCP目的端口:tcp.dstport == 8080

   TCP源端口:tcp.srcport == 8080

   UDP端口:udp.port ==8080

(3)按照协议过滤

过滤协议:http , tcp , thrift,http

thrift contains "send"  #过滤thrift中包含 "send"

(4)按照mac过滤

   源MAC地址:eth.src==A0:00:00:C5:89:23

   目的MAC地址:eth.dst==A56:10:00:94:g5:89

   MAC地址(包括源和目的):eth.addr==A56:10:00:94:g5:89

2.3 coredump开启关闭

Linux coredump功能是当Linux下应用程序异常时,Linux内核默认的一种异常信号处理机制,内核会把异常信息与进程内存转储成coredump文件,程序员通过gdb工具可以离线分析应用程序异常时的情况。Core的意思是内存, Dump的意思是扔出来, 堆出来.

又称为“核心转储”,是该进程实际使用的物理内存的“快照”。分析core dump文件可以获取应用程序崩溃时的现场信息,如程序运行时的CPU寄存器值、堆栈指针、栈数据、函数调用栈等信息

产生coredump的情况:

  1. 内存访问越界 (数组越界、字符串无\n结束符、字符串读写越界)
  2. 多线程程序中使用了线程不安全的函数,如不可重入函数
  3. 多线程读写的数据未加锁保护(临界区资源需要互斥访问)
  4. 非法指针(如空指针异常或者非法地址访问)
  5. 堆栈溢出

ulimit –c # 设置core 文件的最大值,单位为区块  
ulimit -c unlimited  # 开启coredump

core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号

ulimit –c 0  #关闭coredump

给 

gcore pid   (进程号)

命令:

gcore [-o filename] pid

gcore -o /xxx/xxx/filename pid

2.4 rpm包查询和安装

rpm -aq | grep expect #查看expect是否安装

#安装某个rpm包:

rpm -Uvh pcre-devel-8.32-15.el7_2.1.x86_64.rpm --nodeps –force

2.5 端口映射关系查看

iptables -t nat -L –n

2.6 ldd查看进程依赖的库路径库名

ldd 进程名

2.7 查看库依赖的库

readelf -d 库名.so

readelf -d 动态库文件
 

2.8 pstack查看进程栈信息

pstack是一个shell脚本,用于打印正在运行的进程的栈跟踪信息。获取进程ID,通过pstack命令查看里边的各个线程id以及对应的线程现在正在做什么事情,分析多组数据就可以获得哪些线程里有慢操作影响了服务器的性能,从而得到解决方案

格式:pstack pid

 如:查看bash程序进程栈
ps -fe| grep bash
pstack 7013

栈信息写入文本

pstack 7013 > pstack_test.txt

2.9 跟踪进程的系统调用

strace常用来跟踪进程执行时的系统调用和所接收的信号

strace –p ‘pidof 进程名’

2.10 ps显示进程状态和线程

       1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
  2)ps -A 显示所有程序。
  3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
  4)ps -e 此参数的效果和指定"A"参数相同。
  5)ps e 列出程序时,显示每个程序所使用的环境变量。
  6)ps f 用ASCII字符显示树状结构

常用参数:

a:显示当前终端下的所有进程信息,包括其他用户的进程。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程。
-e:显示系统内的所有进程信息。
-l:使用长(long)格式显示进程信息。
-f:使用完整的(full)格式显示进程信息。
-T:查看进程下面的子线程

方一:top -p pid 

方二:ps -aux | grep process_name

ps -elf | grep tomcat #结合管道操作和grep命令进行过滤,用于查询某一个进程的信息

 ps -T -p pid  #查看进程下面的子线程可以使用命令

2.12 nm命令查看文件中的符号信息

nm命令nm命令是Linux下自带的强大的文本分析工具,是命令来源于name的简写。该命令用来列出指定文件中的符号(如常用的函数名、变量等,以及这些符号存储的区域)。

file.o即为二进制文件,liba.a库文件,可执行程序等。

$ nm [options(s)]  [file(s)]

2.13 pmap

确定系统是如何为服务器上的进程分配内存的.

pmap –d pid

Mapped : 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小

writeable/private: 表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小
shared: 表示进程和其他进程共享的内存大小

2.14 top命令

top -H -p `pidof 进程名`  #查看某进程各个线程的使用情况

如分析哪个地方占用内存高

(1)top 和top -H -p `pidof 进程名`  找占用高的进程和线程

(2)pstack `pidof 进程名` 获取线程id和地址;

(3)使用gperftools工具分析;

2.15 lsof 命令

显示系统打开的文件

lsof -c   进程名 #查看某个进程打开的文件

lfof -p pid #某个PID对应的进程打开的文件

3 网络相关命令

3.1 netstat 命令

netstat 命令用于显示各种网络相关信息(显示网络状态)

netstat –antp(显示网络状态)

# netstat -lntp   # 查看所有监听端口 
# netstat -antp   # 查看所有已经建立的连接 
# netstat -s   # 查看网络统计信息
 

3.2 防火墙

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop

firewall-cmd --state #查看运行状态
firewall-cmd --list-all  #查看规则

# 查询端口是否开放
firewall-cmd --query-port=8080/tcp

firewall-cmd --permanent --zone=public --list-ports
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp

3.3 curl命令

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具。

# curl [option] [url]curl

http://www.1236545.com

3.4 测试端口联通 telnet

telnet ip地址+空格+端口号

4 数据库相关命令

4.1 sqlite3命令

(1)    打开某个数据库文件中
sqlite3  test.db
(2)    退出当前数据库系统
.quit
(3)    显示当前打开的数据库文的位置
.database
(4)    在当前的数据库文件中创建一张新表
create table people(NAME,SEX,AGE);
(5)    显示数据库中所有的表名
sqlite>.tables
(6)    查看表中表头的信息
.schema
(7)    自动按行展示
.mode line   

(8)查询某个表
select * from table_test;

(9)查询某个表有什么字段

PRAGMA table_info([table_test]);

(10)给某个表增加属性

alter table table_test add column name Text ;

(11)修改表的属性

UPDATE table_test SET name=' xiaoming' WHERE name=' xiaohong';

过滤:

UPDATE table_test SET name=' xiaoming' WHERE name like ' xiao%';

5 服务器

5.1 虚拟机管理

virsh 是kvm一个管理工具包。

5.2 查看路由配置

(1) 查看路由配置
Windows :route print

Linux : route
(2) 查看网络
Windows: ipconfig 
Linux :ifconfig
(3)windows添加路由

route add 路由地址 mask 子网掩码 网关地址 –p

删除路由

route delete 网络地址

参考文献:

【1】awk命令简介_divlee130的博客-CSDN博客_awk命令功能

【2】linux下nm命令的基本使用以及输出符号类型详解_小卷不卷0099的博客-CSDN博客_linux nm参数 

【3】 C++ gdb调试_mumu_wangwei的博客-CSDN博客_c++ gdb

【4】GDB frame和backtrace命令:查看栈信息 

【5】Linux 服务器故障排除的前五分钟 (First 5 Minutes Troubleshooting A Linux Server)_51CTO博客_linux服务器故障排查思路 

【6】Linux系列之查看进程线程的方法_smileNicky的博客-CSDN博客_linux查看进程和线程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值