Cmp命令
cmp
命令逐字节比较两个文件的内容,一般用于比较二进制文件。
如果两个文件内容完全相同,则cmp
命令不显示任何内容;
如果两个文件内容存有差异,则会显示第一个不同之处的字节数和行数编号;
如果文件是-
或没给出,则从标准输入读入内容。
# 语法:
cmp [选项] [文件1] [文件2]
# 参数:
-l //显示每一个不同点的字节号(10进制)和不同点的字节内容(8进制)
-b //显示文件不同的字节
-i NUM //越过开始的NUM个字节开始比较
-i NUM:NUM2 //第一个文件越过开始的NUM1个字节,第二个文件越过开始的NUM2个字节,开始比较
-n NUM //设定比较的上限,最多比较NUM个字节
-s //抑制所有的默认输出,文件相同只返回0;文件不同返回1;发生错误返回2
# 示例:
[@]# cmp file1 file2
//不使用参数,将直接比较两个文件
file1 file2 differ: char 23, line 6
//若输出是这结果。那么说明file1文件与file2文件内容在第6行的第23个字符开始有差异。
cmp: EOF on file1
//若输出是这样的结果。那么说明file2前半部分与file1相同。但在file2中还有其他数据。
[@]# cmp -l file1 file2
//使用参数l,显示差异的位置以及字符内容
34 75 53
//在34个字节处两个文件开始不同,其中一个内容是75(八进制),另一个是53(八进制)
# 实例:
[@]# cmp nginx nginx.old
nginx nginx.old differ: byte 25
//表示两个二进制文件从第一行第25个字符出开始有差异
Diff命令
diff
命令用于以逐行的方式,比较文本文件的异同处。
如果指定要比较目录,则diff
会比较目录中相同文件名的文件,但不会比较其子目录。
# 实例:
[@]# diff log2014.log log2013.log
/*3c3
< 2014-03
---
> 2013-03
8c8
< 2013-07
---
> 2013-08
11,12d10
< 2013-11
< 2013-12*/
[@]# diff log2014.log log2013.log -y -W 50
/*2013-01 2013-01
2013-02 2013-02
2014-03 | 2013-03
2013-04 2013-04
2013-05 2013-05
2013-06 2013-06
2013-07 2013-07
2013-07 | 2013-08
2013-09 2013-09
2013-10 2013-10
2013-11 <
2013-12 <*/
# 说明:
-y //以并列的方式显示文件的异同处
-W //配合-y使用,指定栏宽
| //表示前后2个文件内容有不同
< //表示后面文件比前面文件少了一行内容
> //表示后面文件比前面文件多了一行内容
Find命令
find
命令用来指定目录查找文件,任何位于参数之前的字符串都将被视为欲查找的目录名。
如果使用该命令时,不设置任何参数,则find
命令将在当前目录下查找子目录与文件,并将查找到的子目录和文件结果全部进行显示。
# 实例:
find . -type f -name "*" | xargs grep "192.168.1.1"
//当前目录搜索所有文件,文件内容包含"192.168.1.1"的内容
find . -name "*.txt" -o -name "*.pdf"
//当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find /usr/ -path "*local*"
//指定目录下匹配包含关键字的文件路径或文件
find /home ! -name "*.txt"
//指定目录下查找非.txt结尾的文件
find . -type f -atime -7
//搜索最近七天内被访问过的所有文件
find . -type f -amin +10
//搜索访问时间超过10分钟的所有文件
find . -type f -size +10k
//搜索大于10KB的文件
find . -type f -perm 777
//当前目录下搜索出权限为777的文件
find . -type f -user tom
//找出当前目录用户tom拥有的所有文件
find . -type f -group sunk
//找出当前目录用户组sunk拥有的所有文件
find ./ -name "*202108*" -exec mv {} ./20210806/ \;
//将当前目录下含202108的所有文件移动到当前目录下20210806文件夹
find .-type f -user root -exec chown tom {} \;
//找出当前目录下所有root的文件,并把所有权更改为用户tom
find . -type f -name "*.txt" -exec cat {} \;> /all.txt
//查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
//将30天前的.log文件移动到old目录中
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
//找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
find . -path "./sk" -prune -o -name "*.txt" -print
//查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
find . -name "*.java"|xargs cat|grep -v ^$|wc -l
//统计代码行数,忽略空行
find /backup/ -mtime -3 -name "*.sql" -exec scp {} root@192.168.251.110:/home/FTP/mysql.backup/es90.backup/ \;
//查找backup目录下,时间在三天内且命名为sql的文件,并将其传输到指定服务器目录
Pgrep命令
pgrep
是一个命令行实用程序,根据指定条件查找正在运行的程序的进程ID,它可以包含完整或者部分的进程名、运行该进程的用户或其他属性。
# 语法:
pgrep [options] pattern
# 示例:
//在没有任何选项的情况下调用时,pgrep将显示与给定名称匹配的所有正在运行的程序的pid。
//例如,要找到Redis服务器的PID,可以运行以下命令:
[@]# ps -ef | grep redis | grep -v grep
/*root 10339 1229 0 20:46 pts/0 00:00:00 /usr/local/redis/bin/redis-cli
root 20662 1 0 22:27 ? 00:00:02 /usr/local/redis/bin/redis-server 0.0.0.0:6379*/
[@]# pgrep redis
/*10339
20662*/
//pgrep在换行中打印每个匹配的进程ID。-d选项允许指定不同的分隔符。
//例如,如果想使用空格作为分隔符,运行下面的命令:
[@]# pgrep redis -l
/*使用-l选项可以列出PID和进程名称:
20683 redis-server
20690 redis-cli*/
[@]# pgrep redis -l -d " "
//20683 redis-server 20690 redis-cli
//使用-u选项告诉pgrep显示给定用户正在运行的进程:
[@]# pgrep -u root -l | head -10
/*1 systemd
2 kthreadd
3 ksoftirqd/0
5 kworker/0:0H
7 migration/0
8 rcu_bh
9 rcu_sched
10 watchdog/0
12 kdevtmpfs
13 netns*/
//若要显示与给定条件不匹配的进程,请使用 -v选项。
//下面的命令将打印所有不是由用户“root”运行的进程:
[@]# pgrep -v -u root -l
/*486 dbus-daemon
493 polkitd
821 qmgr
10806 pickup*/
[@]# ps -ef | grep polkitd | grep -v grep
//polkitd 493 1 0 19:58 ? 00:00:00 /usr/lib/polkit-1/polkitd --no-debug
//-c选项告诉pgrep只打印匹配进程的数量
[@]# pgrep -u root -l -c
85
Strace命令
strace
常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。而strace
命令,就可以跟踪到一个进程产生的系统调用,包括参数、返回值、执行消耗的时间。
在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用。当你想知道程序和操作系统如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执行。strace
后面可以跟任何命令,它将列出许多系统调用信息。且除了调试某些问题意外,它还有如下很强大的功能。
# 示例:
[@]# strace php 2>&1 | grep php.ini
//找到被一个程序读取的配置文件
[@]# strace -e open cat dead.letter
//使用-e参数,可以显示特定的系统调用,如open、write等
[@]# strace -p 1234
//使用-p参数,可以显示运行中进程的系统调用
[@]# strace -c ls
//使用-c参数,可以以一种整洁的方式展示系统调用的概要,包括执行时间、错误等
[@]# strace -o process_strace -p 1234
//使用-o参数,可以把strace命令的输出结果保存到文件中
[@]# strace -t ls
//使用-t参数,可以在每行的输出之前显示时间戳
[@]# strace -tt ls
//使用-tt参数,可以显示微妙级别的时间戳
[@]# strace -r ls
//使用-r参数,可以显示系统调用质检的相对时间戳