操作文件相关的:
cd 更改路径 touch 创建普通文件 rm 删除普通文件 mv 移动文件(重命名)
cp 拷贝文件 mkdir 创建目录文件 rmdir 删除目录文件 chmod 改变文件权限
more 查看文件(分屏幕显示,仅能向前) less 查看文件(可以随意浏览文件) head 查看文件(查看前几行文件)
tail(查看后几行文件,多用于查看经常更改的文件 例如日志文件 ,指定行号即可
cat 查看文(连接文件并打印到标准输出设备上) cat > file 增加文件内容 cat file1 file2 > file 合并文件
grep 匹配查找文件 find 用来在指定目录下查找文件 wc 用来计算数字(例如统计文件行数,位数,单词数等)
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响
tar 打包,解包,解压缩,压缩
操作进程相关的
ps 查看进程(ps -ef 查看所有进程) kill 结束进程 (kill -9 强制结束) pkill 结束一类进程(如一个进程组)
jobs 查看任务状态和列表,包括后台运行 & 将程序放在后台运行 taskset 查询和设置cpu的亲和性
top 动态地查看系统的整体运行情况,例如可以查看cpu的使用率,亲和性等等
Ctrl+z 停止(挂起)进程,可恢复 Ctrl+c 终止进程,不可恢复 Ctrl +d 结束输入 (如结束cat的输入)
与网络相关的
netstat 显示网路状态信息 netstat -ntap 查看tcp连接状态,查看某个端口被哪个进程保留,发送和接收缓冲区还有多少数据等)
ping 测试主机的连通性 lsof 列初当前系统打开的文件描述符 (可指定进程 ,例如lsof -p pid)
ip 显示或操纵Linux主机的路由、网络设备、策略路由和隧道(例如 ip -4 ,设置协议为ipv4)
tcpdump 强大的抓包工具 ifstat 网络流量监测工具 ifconfig 查看ip地址
系统监测相关的
top 动态地查看系统的整体运行情况,负载情况,cup使用率等;
vmstat 实时输出各个资源的使用情况 ,如进程信息,内存使用,cpu使用率,IO使用情况等;(常用的系统瓶颈诊断依据)
iostat 多用于列出磁盘IO的使用情况,cpu等;
df -h 查看磁盘使用情况
sar 是操作系统运行状态的统计工具,比如可以显示cpu使用率,内存状态等;
与内存相关的
free 查看已使用的内存和未使用的内存情况
valgrind 内存泄漏监测工具
开发调试相关的
gcc / g++ 编译
在程序编译时 加 -g 载入调试信息
gdb +程序 调试 (r 启动调试 ;b 加断点;l 显示代码 ;n 执行下一行 ;c 继续执行 ;p 显示变量的值 s 进入函数;finish 退出函数; bt 显示函数调用栈的关系 ; display 持续打印)
core 文件调试(利用core文件直接定位程序崩溃点,core文件:核心转储文件,会在程序崩溃的时候导入该程序此时的ELF)
第一步:执行之前运行崩溃的程序(编译 + -g)
第二步:ulimit -c 生成core文件,文件的后缀为当前进程的pid;
第三步:gdb ./test core.pid 执行gdb;
第四步: bt 显示崩溃点行号;
调试多线程
info threads 显示可调试的线程 thread +id 切换到指定线程
set follew -mode child 跟踪子进程 attach +pid 指定调试一个线程
set schedeler -locking (off/on/step) off 不锁定所有线程都执行;on 锁定当前线程,只有当前线程执行;step 单步执行时,只有当前线程执行
strace -p pid 跟踪系统调用 ltrace -p pid 跟踪程序执行库函数
重点问题:
线程出现死锁了该怎么调试?
同样利用 Core dump来调,
第一步:要设置资源限制,设置为无限大,在任何情况下都会生成core文件,ulimit -c unlimited;
第二步:使用 kill 命令产生 core dump文件:kill -11 pid,这不还是杀掉进程嘛?没错,但是你用信号11杀掉它,会让进程产生一个 Segmentation Fault,从而(如果你没禁用 core dump 的话),导致一个 core dump。随后你得到一个 core 文件,里面包含了死锁的时候,进程的内存镜像,也就包括了正在纠结缠绵,生离死别从而产生死锁的那两个,没准是几个,线程们的,栈。
第三步:用 gdb 打开这个 core 文件,然后thread apply all bt,gdb 会打出所有线程的栈,如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们线程出现死锁,耽误了整个进程。
系统管理有关的
useradd 增加用户 shutdowm 关机 ulimit 查看资源限制
reboot 重启 init 更改系统启动级别 ldd 显示链接了那些库
ipcs 报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息
w 用于单独显示用户运行的进程 objdump 查看目标文件(elf、pe) readelf 显示elf文件的信息
man 查看方法