Linux 命令记录(持续更新中)

作者: | 更新日期:

linux下的命令学好了,走到哪里都不怕电脑死机了。

linux 有很多很多,我计划按功能划分一下。

大概有基本命令,监控命令,测试命令,优化命令。

基本命令

ls

ls 主要用于显示目录的内容。默认只显示为隐藏的目录和文件名。

cd

cd 主要用于改变当前目录到指定目录。

mkdir

mkdir 主要用于在指定的位置创建一个目录,默认位置是当前位置。

cp

cp 复制文件到指定的地方

md5sum

一般用来检查文件的完整性或用于加密一下文本。

md5 加密一般是不可逆的,虽然现在出现了破解工具,但是应用于破解密码上还是没办法做到的。

使用: md5sum 参数 文件列表

执行md5sum后,一般输出的是 md5值和文件名。

tiankonguse:tiankonguse $ md5sum tiankonguse.sh 
424c541134501ba66d28510614e95049  tiankonguse.sh

但是一般不这样做。
一般是将很多文件的md5值输出到一个文件内,然后需要查看哪些文件修改的时候使用md5sum的 -c 参数即可。

tiankonguse:tiankonguse $ md5sum tiankonguse.sh tiankonguse.bashrc > hash.md5

tiankonguse:tiankonguse $ cat hash.md5 
424c541134501ba66d28510614e95049  tiankonguse.sh
03db1457860db6cfff643f2b514d60d8  tiankonguse.bashrc

tiankonguse:tiankonguse $ echo " " >>  tiankonguse.sh 

tiankonguse:tiankonguse $ md5sum -c hash.md5 
tiankonguse.sh: FAILED
tiankonguse.bashrc: OK
md5sum: WARNING: 1 of 2 computed checksums did NOT match

想得到字符串的 md5 值怎么办呢?

tiankonguse:demo $ echo 'tiankonguse' | md5sum
70a19872bf17b6939447f8a299f69455  -

有人可能会发现这个 md5 值不对, 原来 echo 输出的时候默认在输出的文本后面加上了一个换行符。

怎么避免这个换行符呢?

tiankonguse:demo $ echo -n 'tiankonguse' | md5sum
77192a8e3dc5fb2b7428566f9741ebfc  -

这也是 md5 与 md5sum 的区别吧。

很多人会遇着这个问题, 甚至有人猜想是由于算法不同或者位数不同的原因,没想到是多了一个换行符的原因。

参考资料:iteye, map4b, jiunile.

dd

转换或复制文件

由于在linux中设备驱动和特殊设备可以像普通文件一样操作,所以使用 dd 命令可以操作很多设备中的数据。

默认情况下, dd 从标准输入读数据,从标准输出输出数据。

参数 if=FILE 重定向输入
参数 of=FILE 重定向输出

dd可以在文件、设备、分区和卷之间复制数据

dd if=/dev/sr0 of=myCD.iso bs=2048 conv=noerror,sync
dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=noerror
dd if=/dev/ad0 of=/dev/ad1 bs=1M conv=noerror
dd if=/dev/fd0 of=MBRboot.img bs=512 count=2
dd if=/dev/sda of=MBR.img bs=512 count=1
dd if=/dev/sda of=MBR_boot.img bs=446 count=1
dd if=/dev/zero of=/dev/sda bs=4k
dd if=/dev/urandom of=myrandom bs=100 count=1
dd if=filename of=filename1 conv=ucase
dd if=/dev/zero of=mytestfile.out bs=1 count=0 seek=1G

uname

打印出系统信息。

tiankonguse:~ $ uname
Linux

tiankonguse:~ $ uname -s
Linux
tiankonguse:~ $ uname -n
DEVNET-191-112
tiankonguse:~ $ uname -r
2.6.32.57-tlinux_xenU-1.1.rc8-default
tiankonguse:~ $ uname -v
#1 SMP Wed Feb 20 17:35:10 CST 2013
tiankonguse:~ $ uname -m
x86_64
tiankonguse:~ $ uname -p
x86_64
tiankonguse:~ $ uname -i
x86_64
tiankonguse:~ $ uname -o
GNU/Linux
tiankonguse:~ $ uname -a
Linux DEVNET-191-112 2.6.32.57-tlinux_xenU-1.1.rc8-default #1 SMP Wed Feb 20 17:35:10 CST 2013 x86_64 x86_64 x86_64 GNU/Linux

history

显示带行号的命令历史列表

history n
history -c
history -d lineNumber
history -r historyFileName
history -n historyFileName
history -w historyFileName

pwd

打印当前或活动的目录

tiankonguse:~ $ ll test-pwd
lrwxrwxrwx 1 tiankonguse users 5 Oct 21 17:40 test-pwd -> test/

tiankonguse:~ $ cd test-pwd
tiankonguse:test-pwd $ 

tiankonguse:test-pwd $ pwd
/home/tiankonguse/test-pwd

tiankonguse:test-pwd $ pwd -L
/home/tiankonguse/test-pwd
tiankonguse:~ $ cd test-pwd
tiankonguse:test-pwd $ 

tiankonguse:test-pwd $ pwd -P
/data/tiankonguse/test

mv

移动或者重命名文件

语法

mv  SOURCE DEST

参数

touch

改变文件修改(access and modification)的时间戳

文件不存在的时候会创建一个空文件。

默认修改的时间为当前时间

chmod

修改文件的模式位,比如我主要用于修改文件的权限

用户

操作

权限

样例

#用户,组,其他人都添加读权限
chmod ugo+r filename


#自己添加运行权限
chmod u+x filenmame 

#同组的人添加执行权限
chmod g+x filename 

#三个数字分别为 档案拥有者、群组、其他
chmod 644 filename

chown

改变文件的用户名和组名。

这个命令的好处:

  1. 将一个目录的拥有权转移给一个用户
  2. 多人属于同一个组,一个文件权限转移到一个组,是的这个组的所有人都有权限操作这个文件。

rename

这个函数经常用来批量修改文件名。

rename [options] expression replacement file...

比如我们有一批文件 foo1, ..., foo9, foo10, ..., foo278, 我们想在数字前面加上前导0, 怎么做呢?

rename foo foo0 foo?
rename foo foo0 foo??

可以看出来, 问号是占位符,代表任何字符。

想批量修改文件的后缀,下面的命令就可以

rename .html .md *.html

这些替换是比较简单的替换, 但有时候我们想进行复杂的替换, 怎么办呢?

如果能够进行正则替换就好了。

比如想要把下面的文件替换一下。

Friends - 6x03 - Tow Ross' Denial.srt
Friends - 6x20 - Tow Mac and C.H.E.E.S.E..srt
Friends - 6x05 - Tow Joey's Porshe.srt

=>

S06E03.srt
S06E20.srt
S06E05.srt

stackoverflow 上说下面的就可以, 即常见的正则替换, 但是我运行失败了,提示不存在 n 这个参数,可能我这个版本的 linux 没有这个功能吧。

rename -n 's/(\w+) - (\d{1})x(\d{2}).*$/S0$2E$3\.srt/' *.srt

write

给指定的用户发送消息.

这个可以在两个终端之间聊天.

tiankonguse:~ $ write tiankonguse pts/19

Message from tiankonguse@tiankonguse on pts/19 at 11:40 ...

I'm 18. <<< 18
I'm 19 . from 19
helllo . from 18
^Ctiankonguse:~ $ EOF

tiankonguse:~ $ 


tiankonguse:~ $ 
Message from tiankonguse@tiankonguse on pts/18 at 11:40 ...

tiankonguse:~ $ write tiankonguse pts/18

I'm 18. <<< 18
I'm 19 . from 19
helllo . from 18
EOF
^Ctiankonguse:~ $ 

dig

DNS 查询工具

tiankonguse:~ $ dig github.tiankonguse.com

;; ANSWER SECTION:
github.tiankonguse.com.	300	IN	CNAME	tiankonguse.github.io.
tiankonguse.github.io.	300	IN	CNAME	github.map.fastly.net.
github.map.fastly.net.	300	IN	A	103.245.222.133

;; Query time: 10 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Sun Nov 29 21:43:22 CST 2015
;; MSG SIZE  rcvd: 137

监控命令

last

列出最后登录的用户.

比如下面的就是我执行的结果.

tiankonguse:~ $ last -n 5
tiankong pts/12       :0               Fri Sep  4 11:10   still logged in   
tiankong pts/4        :0               Fri Sep  4 11:06   still logged in   
tiankong pts/3        :0               Fri Sep  4 10:28   still logged in   
tiankong :0           :0               Fri Sep  4 10:03   still logged in   
reboot   system boot  3.13.0-62-generi Fri Sep  4 09:48 - 11:11  (01:23)    

wtmp begins Wed Sep  2 00:53:03 2015

打开一个终端窗口,就会有一条记录.
可以看出来,我打开了三个终端窗口.

建议使用这个命令.

tiankonguse:~ $ last -f /var/log/wtmp -Faixw -n 7
tiankonguse pts/12       Fri Sep  4 11:10:04 2015   still logged in                       0.0.0.0
tiankonguse pts/4        Fri Sep  4 11:06:18 2015   still logged in                       0.0.0.0
tiankonguse pts/3        Fri Sep  4 10:28:11 2015   still logged in                       0.0.0.0
tiankonguse :0           Fri Sep  4 10:03:51 2015   still logged in                       0.0.0.0
runlevel (to lvl 2)   Fri Sep  4 09:48:12 2015 - Fri Sep  4 11:19:32 2015  (01:31)     0.0.0.0
reboot   system boot  Fri Sep  4 09:48:12 2015 - Fri Sep  4 11:19:32 2015  (01:31)     0.0.0.0
shutdown system down  Fri Sep  4 02:20:49 2015 - Fri Sep  4 09:48:12 2015  (07:27)     0.0.0.0

wtmp begins Wed Sep  2 00:53:03 2015

参数大概意思如下:

显示ip这个参数很重要, 我们可以根据ip来判断我们的服务器有没有非法登录.

iftop

这个命令用于显示出口流量.

sudo iftop -np

ps

查看当前进程的信息.

这个命令输出的东西较多, 我常会加个 grep 来搜搜我想要的进程的信息.

tiankonguse:~ $ ps aux | grep -v "root\|tianko\|nobody"
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
syslog     841  0.0  0.0 255840  1576 ?        Ssl  09:48   0:00 rsyslogd
message+   846  0.0  0.0  40236  2524 ?        Ss   09:48   0:02 dbus-daemon --system --fork
kernoops  1191  0.0  0.0  37140  1008 ?        Ss   09:48   0:00 /usr/sbin/kerneloops
whoopsie  1208  0.0  0.1 361204  5132 ?        Ssl  09:48   0:00 whoopsie
redis     1230  0.0  0.1  36992  7316 ?        Ssl  09:48   0:02 /usr/bin/redis-server 127.0.0.1:6379       
mysql     1280  0.0  1.4 492752 58516 ?        Ssl  09:48   0:05 /usr/sbin/mysqld
www-data  1974  0.0  0.1 315036  6208 ?        S    09:48   0:00 /usr/sbin/apache2 -k start
www-data  1975  0.0  0.1 315036  6208 ?        S    09:48   0:00 /usr/sbin/apache2 -k start
www-data  1976  0.0  0.1 315036  6208 ?        S    09:48   0:00 /usr/sbin/apache2 -k start
www-data  1977  0.0  0.1 315036  6208 ?        S    09:48   0:00 /usr/sbin/apache2 -k start
www-data  1978  0.0  0.1 315036  6208 ?        S    09:48   0:00 /usr/sbin/apache2 -k start
rtkit     2226  0.0  0.0 168912  1300 ?        SNl  09:48   0:00 /usr/lib/rtkit/rtkit-daemon
colord    2381  0.0  0.1 301508  5736 ?        Sl   09:48   0:00 /usr/lib/colord/colord
lp        4663  0.0  0.0  63156  2220 ?        S    10:11   0:00 /usr/lib/cups/notifier/dbus dbus:// 
lp        4664  0.0  0.0  63156  2220 ?        S    10:11   0:00 /usr/lib/cups/notifier/dbus dbus://

lsblk

文档中就一句话 list block devices, 列出块设备。

在 DESCRIPTION 里还可以了解到 lsblk 是从 sysfs 文件系统中得到你想要的信息。

默认情况下显示树状信息。

下面介绍一下常用的几个参数

telnet

有时候我们需要查看一台服务器的 是否正常工作, 可以使用 telnet 来尝试连接一下。

客户端查看指定ip的端口是否正常

telnet 127.0.0.1 5555

strace

strace跟踪程序的每个系统调用.

网络通信的时候,我们怀疑IO有问题,这个时候就可以使用 strace 来查看一下在 IO 的哪一步出现问题了。

strace -s 3000 -tt  ./server

但是有时候我们的程序已经在运行了,这个时候我们就需要通过端口来监听这个 server 的 OI 情况了。

strace -p 80 -s 3000 -tt 

有时候想把结果输出到文件怎么办呢?使用 -o 参数。

strace -s 3000 -tt  -o strace.log ./server

ltrace

ltrace能够跟踪进程的库函数调用.

它会显现出哪个库函数被调用.

默认不显示系统调用函数,不过加上 -S 参数就可以输出系统函数了。

tcpdump

有时候我们 server 的 IO 有问题了, 我们确定是网络 IO 的问题。

这个时候就可以抓取指定端口的包来看看哪里的问题了。

sudo tcpdump -ieth1 -Xlpns0 port 5555

-i     Listen on interface.  If unspecified, tcpdump searches the system interface list for the lowest numbered, configured up interface (excluding loopback).
-X     When parsing and printing, in addition to printing the headers of each packet, print the data of each packet (minus its link  level  header) in hex and ASCII.  This is very handy for analysing new protocols.

如果是本机到本机的测试,就会发现不能抓到包了。
原因是本机间通信,根本没有走接口eth1, 所以我们需要换一个接口。没错,即使本地的 lo 。

sudo tcpdump -ilo -Xlpns0 port 5555

关于tcpdump的详细讲解请阅读tcpdump命令详解.

pmap

Pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。

pmap PIDList

参考资料:

gprof

gprof 可以为 Linux平台上的程序精确分析性能瓶颈。

gprof精确地给出函数被调用的时间和次数,给出函数调用关系。

** 原理 **

通过在编译和链接程序的时候(使用 -pg 编译和链接选项),gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or “_mcount” , or “__mcount” , 依赖于编译器或操作系统)的函数,也就是说你的应用程序里的每一个函数都会调用mcount, 而mcount 会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。这张调用图也保存了所有与函数相关的调用时间,调用次数等等的所有信息。

** 使用流程 **

  1. 在编译和链接时 加上-pg选项。一般我们可以加在 makefile 中。
  2. 执行编译的二进制程序。执行参数和方式同以前。
  3. 在程序运行目录下 生成 gmon.out 文件。如果原来有gmon.out 文件,将会被重写。
  4. 结束进程。这时 gmon.out 会再次被刷新。
  5. 用 gprof 工具分析 gmon.out 文件。

参考资料:

top

TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。

TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.

如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.

比较准确的说,top命令提供了实时的对系统处理器的状态监视.

它将显示系统中CPU最“敏感”的任务列表.

该命令可以按CPU使用.内存使用和执行时间对任务进行排序

而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.

top的具体介绍请参考这里.

详细说明

top - 11:10:38 up 143 days, 18:38,  1 user,  load average: 0.46, 0.39, 0.36
Tasks: 514 total,   1 running, 513 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.6%us,  0.1%sy,  0.0%ni, 98.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65807288k total, 14324108k used, 51483180k free,  1405276k buffers
Swap:  2088952k total,        0k used,  2088952k free, 11722016k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                            
15463 user_00   20   0 1408m 329m 303m S 37.4  0.5   9:04.74 searchd

free

free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free)。

vmstat

vmstat 命令是最常见的Linux/Unix监控工具。
vmstat 是一个查看虚拟内存(Virtual Memory)使用状况的工具。
vmstat 可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

** 虚拟内存运行原理**

在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。
当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。

在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。
调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。
交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。

分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。
当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。

当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。
经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。
这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。

** vmstat 命令使用 **

一般 vmstat 工具的使用是通过两个数字参数来完成的.

tiankonguse:~ $ vmstat 2 2
procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------
 r  b   swpd  free    buff   cache    si   so    bi    bo   in   cs us sy id wa st
 0  0    0    1487748 449828 945348    0    0     0     2    0    1  3 11 86  0  1
 1  0    0    1485748 449828 945372    0    0     0     2 1040 3384  1  2 97  0  0

各列的含义如下

也有人说 si 和 so 是交换区与内存的传送数据,而不是磁盘与内存传送数据。

iostat

Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。
它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。
同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

** 用途 **

通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。

** 参数含义 **

tiankonguse:~ $ iostat      
Linux 2.6.18-128.el5 (tiankonguse) 	01/04/15 	_i686_

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.67    0.02   10.54    0.02    0.74   86.04

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
xvda              5.91         1.33        90.37    5977617  406137792
xvda1             0.75         0.70        10.18    3158228   45768376
xvda2             0.00         0.00         0.00        766          0
xvda3             5.16         0.63        80.19    2818399  360369416
xvdb              3.60         2.01       119.58    9046878  537397888
xvdb1             3.60         2.01       119.58    9046550  537397888

** avg-cpu 字段含义 **

如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。
%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

** Device 字段含义 **

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间
如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。
如果avgqu-sz比较大,也表示有当量io在等待。

LISTEN和LISTENING的状态只有用-a或者-l才能看到

优化命令

readelf

作用很明显,是显示elf格式文件的信息

ELF,全称 Executable and Linkable Format(可执行和可链接格式). 具体可参考 wiki.

格式

可以参考这张图片 ELF

含义如下

作用

现在作为 Linux 的目标文件格式. 作为一种可移植的目标文件格式,可以在Intel体系结构上的很多操作系统中使用,从而减少重新编码和重新编译程序的需要

类型

常用命令

objdump

常用来显示来自目标文件的信息
比如查看程序时32位的还是64位的。

例如下面的architecture就可以看出是多少位的。

tiankonguse:src $ objdump -f  a.out 

a.out:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0000000000400830

具体还可以干什么,可以参考文档。

  -a  Display archive header information
  -f  Display the contents of the overall file header
  -p  Display object format specific file header contents
  -h  Display the contents of the section headers  目标文件的所有段概括
  -x  Display the contents of all headers  以某种分类信息的形式把目标文档的数据组织
  -d  Display assembler contents of executable sections 反汇编目标文件
  -D  Display assembler contents of all sections
  -S  Intermix source code with disassembly
  -s  Display the full contents of all sections requested ELF文件节区内容
  -g  Display debug information in object file
  -e  Display debug information using ctags style
  -G  Display (in raw form) any STABS info in the file
  -W  Display DWARF info in the file
  -t  Display the contents of the symbol table(s) 标文件的符号表
  -T  Display the contents of the dynamic symbol table
  -r  Display the relocation entries in the file
  -R  Display the dynamic relocation entries in the file
  -v  Display this program's version number
  -i  List object formats and architectures supported
  -H  Display this information

strings

print the strings of printable characters in files.
打印出文件中可以打印的字符串.

默认打印条件:

一般获取二进制文件里面的字符串常量.
搜索二进制文件中的字符串,比如检查KEY泄露.

strings –f *| grep '^.\{16\}$'

nm

nm 命令常用来获取二进制文件里面包含的符号(函数、变量)。
nm 命令常用来解决程序编译时undefined reference的错误,以及mutiple definition的错误

ldd

ldd 用来显示程序需要使用的动态库和实际使用的动态库.
一般可以解决运行库不匹配的问题。

tiankonguse $ ldd /bin/ls
        ntdll.dll => /cygdrive/c/windows/SYSTEM32/ntdll.dll (0x774a0000)
        kernel32.dll => /cygdrive/c/windows/system32/kernel32.dll (0x77380000)
        KERNELBASE.dll => /cygdrive/c/windows/system32/KERNELBASE.dll (0x7fefdb80000)
        cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)
        cygintl-8.dll => /usr/bin/cygintl-8.dll (0x3ee930000)
        cygiconv-2.dll => /usr/bin/cygiconv-2.dll (0x3f03e0000)

strip

strip 用来去除二进制文件里面包含的符号
这样做可以减小目标文件大小,去除调试信息。

gdb

** 断点 **

# 设置断点
break [行号]
break [函数名]
break [行号] if [条件]


# 删除断点
delete [行号]

** 运行 **

# 开始运行程序
r [程序的输入参数(如果有的话)]


# 从当前断点继续运行程序
continue

** 变量 **

watch [变量]

# 这条语句会显示所有的局部变量以及它们的值
info locals


# 显示特定变量的值
p [变量]


# 显示变量的类型
ptype [变量]


# 覆盖变量的值。
# 注意:你不能创建一个新的变量或改变变量的类型
set var [变量] = [新的值]

** 回溯功能 **

回溯功能(backtrace)可以让我们知道程序如何到达这条语句的。

** 单步调试 **

# 单步调试:运行到下一条语句,有可能进入到一个函数里面。
step

# 直接运行下一条语句,而不进入子函数内部。
next

** 退出GDB **

# 退出GDB
quit

gdb中,大多数的命令单词都可以简写为一个字母。

软件命令

录制视频

kazam, recordmydesktop, xvidcap

视频转换

mencoder record.ogv -nosound -ovc lavc -lavcopts vcodec=mpeg4 -o record.mp4

mplayer

可以播放视频, 也可以将视频转为图片

mplayer -ao null tabs.mp4 -vo jpeg:outdir=./tabs  

convert

这个命令功能很多.

静态图片转gif图片

# -delay n     迟延n*10毫秒
# -loop  n     播放n轮, 0表示不断地重复播放
# -pause n  停止
# -resize  xx% 或 xxx * yyy 缩放 

通信

比较

文件管理

媒体

打印

编程命令

维护与定位

搜索

shell

储存

系统状态

文本处理

其他

tiankonguse::~> cal 3
                                 3                                 

       January               February                 March        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6                1  2  3                1  2  3
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    4  5  6  7  8  9 10
14 15 16 17 18 19 20   11 12 13 14 15 16 17   11 12 13 14 15 16 17
21 22 23 24 25 26 27   18 19 20 21 22 23 24   18 19 20 21 22 23 24
28 29 30 31            25 26 27 28            25 26 27 28 29 30 31

        April                   May                   June         
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7          1  2  3  4  5                   1  2
 8  9 10 11 12 13 14    6  7  8  9 10 11 12    3  4  5  6  7  8  9
15 16 17 18 19 20 21   13 14 15 16 17 18 19   10 11 12 13 14 15 16
22 23 24 25 26 27 28   20 21 22 23 24 25 26   17 18 19 20 21 22 23
29 30                  27 28 29 30 31         24 25 26 27 28 29 30

        July                  August                September      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7             1  2  3  4                      1
 8  9 10 11 12 13 14    5  6  7  8  9 10 11    2  3  4  5  6  7  8
15 16 17 18 19 20 21   12 13 14 15 16 17 18    9 10 11 12 13 14 15
22 23 24 25 26 27 28   19 20 21 22 23 24 25   16 17 18 19 20 21 22
29 30 31               26 27 28 29 30 31      23 24 25 26 27 28 29
                                              30
       October               November               December       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6                1  2  3                      1
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    2  3  4  5  6  7  8
14 15 16 17 18 19 20   11 12 13 14 15 16 17    9 10 11 12 13 14 15
21 22 23 24 25 26 27   18 19 20 21 22 23 24   16 17 18 19 20 21 22
28 29 30 31            25 26 27 28 29 30      23 24 25 26 27 28 29
                                              30 31
tiankonguse:~> dmesg  | tail  -1
[24419533.393616] Out of memory: kill process 669 (searchd) score 13488918 or a child
tiankonguse:~> date -d "1970-01-01 UTC `echo "$(date +%s)-$(cat /proc/uptime|cut -f 1 -d' ')+24419533.393616"|bc ` seconds"
Sat Mar 12 08:30:40 CST 2016

守护进程

硬件

host

install

Mail

文件系统

内核

网络

如果我们的计算机有时候接收到的数据报会导致出错数据删除或故障,我们不必感到奇怪, TCP/IP可以容许这些类型的错误,并能够自动重发数据报。

但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么我们就应该使用Netstat查一查为什么会出现这些情况了。

当然后人说 netstat 已经被ss命令和ip命令所取代.

用途

netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

参数说明

实用命令实例

demo

netstat 功能复杂,我用一个记录一个吧。
前端时间写了一个 server, 使用 TCP 通信。
有时候需要查看一下这个 server 对应端口的情况,于是使用下面的命令查看。
服务端检查一个端口

netstat -alpn | grep 5555

-l, --listening
    Show only listening sockets.  (These are omitted by default.)

-a, --all
    Show both listening and non-listening (for TCP this means established connections) sockets.  With the --interfaces option, show interfaces that are not marked
    
-p, --program
    Show the PID and name of the program to which each socket belongs.
    
--numeric , -n
    Show numerical addresses instead of trying to determine symbolic host, port or user names.

有时候我们只有服务端的ip和端口, 这时候需要找到哪个客户端在使用我们的服务.
tcpdump可以很快找到客户端ip和端口, 但是这个端口是变化的, 该怎么找呢?
lsof就这个命令就可以帮助我们快速找到.

客户端一般会主动端口链接, 这个链接信息在客户端依旧保存一段时间, 这个时候我们通过grep端口或者服务端ip就可以找到进程名.

user_00@V_172_27_32_89_tlinux:~> lsof | grep 33392
dataloade 30652    user_00   38u     IPv4         2337110260                   TCP 172.27.32.89:33392->10.185.16.50:8561 (ESTABLISHED)

user_00@V_172_27_32_89_tlinux:~> lsof | grep 10.185.16.50
dataloade 30652    user_00   38u     IPv4         2337110260                   TCP 

进程管理

用户

NFS and NIS

参考资料

How to debug a C/C++ program with GDB command-line debugger

点击查看评论

关注公众号,接收最新消息

关注小密圈,学习各种算法

tiankonguse +
穿越