diff

diff比较两个文件的内容(源文件和目标文件).文件名可以是-由标准输入设备读入的文本.作为特别的情况是,diff–比较一份标准输入的它自己的拷贝如果源文件是一个目录和目标文件不是(目录),diff会比较在源文件(目录)里的文件的中和目标文件同名的(文件),反过来也一样.非目录文件不能是-
如果源文件和目标文件都是目录,diff比较两个目录中相应的文件,依照字母次序排序;这个比较是不会递归的,除非给出-r或者–recursive.diff不把一个目录的内容看为它是一个文件来比较。被指定的文件不能是标准的输入,因为标准的输入是无名的并且"有一样的名字的文件"的观点不适用。diff的选项由-,开始所以正常地源文件(名)和目标文件(名)不可以用-开头.然而,–可以被它视为保留的即使作为文件名的开头(theybeginwith-.)[[]]

diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>]
[-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>]
[--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]
-<行数>:指定要显示多少行的文本。此参数必须与-c或-u参数一并使用
-a或--text:diff预设只会逐行比较文本文件
-b或--ignore-space-change:不检查空格字符的不同
-B或--ignore-blank-lines:不检查空白行
-c:显示全部内文,并标出不同之处
-C<行数>或--context<行数>:与执行"-c-<行数>"指令相同
-d或--minimal:使用不同的演算法,以较小的单位来做比较
-D<巨集名称>或ifdef<巨集名称>:此参数的输出格式可用于前置处理器巨集
-e或--ed:此参数的输出格式可用于ed的script文件
-f或-forward-ed:输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处
-H或--speed-large-files:比较大文件时,可加快速度
-I<字符或字符串>或--ignore-matching-lines<字符或字符串>:若两个文件在某几行有
所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异
-i或--ignore-case:不检查大小写的不同
-l或--paginate:将结果交由pr程序来分页
-n或--rcs:将比较结果以RCS的格式来显示
-N或--new-file:在比较目录时,若文件A仅出现在某个目录中,预设会显示:
Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较
-p:若比较的文件为C语言的程序码文件时,显示差异所在的函数名称
-P或--unidirectional-new-file:与-N类似,但只有当第二个目录包含了一个
第一个目录所没有的文件时,才会将这个文件与空白的文件做比较
-q或--brief:仅显示有无差异,不显示详细的信息
-r或--recursive:比较子目录中的文件
-s或--report-identical-files:若没有发现任何差异,仍然显示信息
-S<文件>或--starting-file<文件>:在比较目录时,从指定的文件开始比较
-t或--expand-tabs:在输出时,将tab字符展开
-T或--initial-tab:在每行前面加上tab字符以便对齐
-u,-U<列数>或--unified=<列数>:以合并的方式来显示文件内容的不同
-v或--version:显示版本信息
-w或--ignore-all-space:忽略全部的空格字符
-W<宽度>或--width<宽度>:在使用-y参数时,指定栏宽
-x<文件名或目录>或--exclude<文件名或目录>:不比较选项中所指定的文件或目录
-X<文件>或--exclude-from<文件>:您可以将文件或目录类型存成文本文件,
然后在=<文件>中指定此文本文件
-y或--side-by-side:以并列的方式显示文件的异同之处
--help:显示帮助
--left-column:在使用-y参数时,若两个文件某一行内容相同,
则仅在左侧的栏位显示该行内容
--suppress-common-lines:在使用-y参数时,仅显示不同之处

比较二个文件的不同

[root@dmxsp ~]# diff passwd passwd.1

比较二个文件夹的不同

[root@dmxsp ~]# diff /etc/yum/ /etc/yum.repos.d/ 
Only in /etc/yum.repos.d/: CentOS-Base.repo 
Only in /etc/yum.repos.d/: epel.repo 
Only in /etc/yum/: fssnap.d 
Only in /etc/yum/: pluginconf.d 
Only in /etc/yum/: protected.d 
Only in /etc/yum/: vars 
Only in /etc/yum/: version-groups.conf

递归比较二个文件夹的不同

[root@dmxsp ~]# diff  -r /etc/yum/    /etc/yum.repos.d/
Only in /etc/yum.repos.d/: CentOS-Base.repo
Only in /etc/yum.repos.d/: epel.repo
Only in /etc/yum/: fssnap.d
Only in /etc/yum/: pluginconf.d
Only in /etc/yum/: protected.d
Only in /etc/yum/: vars
Only in /etc/yum/: version-groups.conf

补定文件的内容

[root@dmxsp ~]# diff -ruN passwd passwd.1
--- passwd      2022-06-28 21:53:38.583171133 +0800
+++ passwd.1    2022-06-28 21:55:05.281794045 +0800
@@ -12,10 +12,3 @@
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
-dbus:x:81:81:System message bus:/:/sbin/nologin
-polkitd:x:999:998:User for polkitd:/:/sbin/nologin
-sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
-postfix:x:89:89::/var/spool/postfix:/sbin/nologin
-chrony:x:998:996::/var/lib/chrony:/sbin/nologin
-nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
-tcpdump:x:72:72::/:/sbin/nologin

产生补定文件

[root@dmxsp ~]# diff -ruN passwd passwd.1 > passwd.diff

并排格式输出

[root@dmxsp ~]# diff -y -W 50 passwd passwd.1
"|"表示前后2个文件内容有不同
"<"表示后面文件比前面文件少了1行内容
">"表示后面文件比前面文件多了1行内容

diffstat

根据diff的比较结果,显示统计数字,diffstat读取diff的输出结果,然后统计各文件的插入,删除,修改等差异计量

diff [-wV][-n <文件名长度>][-p <文件名长度>]
-n<文件名长度>:指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
-p<文件名长度>:与-n参数相同,但此处的<文件名长度>包括了文件的路径
-w:指定输出时栏位的宽度
-V:显示版本信息

统计二个文件的不同

[root@dmxsp ~]# diff passwd passwd.1 | diffstat 
unknown | 7 ------- 
1 file changed, 7 deletions(-)

df

用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计

df [选项]... [FILE]...
-a, --all:包含所有的具有 0 Blocks 的文件系统
--block-size=SIZE use SIZE-byte blocks:指定块的大小 
-h,--human-readable:用常见的格式显示出大小(例如:1K 234M 2G)
-H, --si:很像 -h, 但是用 1000 为单位而不是用 1024
-i, --inodes:用信息索引点代替块表示使用状况
-k, --kilobytes:指定块大小等于1024字节来显示使用状况
-l, --local:只显示本地文件系统使用状况
-m, --megabytes:以指定块大小等于1048576字节(1M)来显示使用状况
--no-sync:在取得使用信息前禁止调用同步 (default)
-P, --portability:使用POSIX格式输出
--sync:在取得使用信息前调用同步
-t, --type=TYPE:只显示指定类型(TYPE)的文件系统
-T, --print-type:输出每个文件系统的类型
-x, --exclude-type=TYPE:只显示指定类型(TYPE)之外的文件系统
--help:输出该命令的帮助信息并退出 
--version:输出版本信息并退出

列出各文件系统的磁盘空间使用情况

[root@dmxsp ~]# df

列出各文件系统ionde使用情况

[root@dmxsp ~]# df -ia

列出文件系统的类型

[root@dmxsp ~]# df -T

目前磁盘空间和使用情况 以更易读的方式显示

[root@dmxsp ~]# df -h

以单位显示磁盘的使用情况

[root@dmxsp ~]# df -k

显示所有文件系统的磁盘使用情况

[root@dmxsp ~]# df -a

显示ext4系统类型的信息

[root@dmxsp ~]# df -t ext4

打印除 ext3 外所有的文件系统

[root@dmxsp ~]# df -x ext3

dirs

用于显示目录记录,显示目录堆叠中的记录

dirs [+/-n -l]
+n:显示从左边算起第n笔的目录
-n:显示从右边算起第n笔的目录
-l:显示目录完整的记录

显示目录栈

[root@dmxsp etc]# dirs 
/etc

du

用于显示目录或文件的大小,显示指定的目录或文件所占用的磁盘空间

du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size]
[--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]
-a或-all 显示目录中个别文件的大小
-b或-bytes 显示目录或文件大小时,以byte为单位
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
-D或--dereference-args 显示指定符号连接的源文件大小
-h或--human-readable 以K,M,G为单位,提高信息的可读性
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位
-k或--kilobytes 以1024 bytes为单位
-l或--count-links 重复计算硬件连接的文件
-L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小
-m或--megabytes 以1MB为单位
-s或--summarize 仅显示总计
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统
目录则略过
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件
--exclude=<目录或文件> 略过指定的目录或文件
--max-depth=<目录层数> 超过指定层数的目录后,予以忽略
--help 显示帮助
--version 显示版本信息

查看当前目录下的,所有文件和目录

[root@dmxsp ~]# du

详细查看当前目录,子目录下的,所有文件和目录

[root@dmxsp ~]# du -ah

查看单个文件

[root@dmxsp ~]# du passwd

统计etx目录下,第一层的文件大小

[root@dmxsp ~]# du -ah --max-depth=1 /etc/

统计当前目录大小,并安大小排序

root@dmxsp ~]# du -sm * | sort -n

按大小排序目录(查看文件目录大小)

[root@dmxsp ~]# du -h --time --max-depth=1 | sort -hr

列出当前目录中的目录名不包括xyz字符串的目录的大小

[root@dmxsp ~]# du -h --exclude='*nginx*'

dd

用于读取、转换并输出数据,可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出

if=文件名:输入文件名,默认为标准输入。即指定源文件
of=文件名:输出文件名,默认为标准输出。即指定目的文件
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节
bs=bytes:同时设置读入/输出的块大小为bytes个字节
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小
skip=blocks:从输入文件开头跳过blocks个块后再开始复制
seek=blocks:从输出文件开头跳过blocks个块后再开始复制
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数
--help:显示帮助信息
--version:显示版本信息
conv=<关键字>,关键字可以有以下11种:
conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternate ebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swap:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐

将本地的/dev/hdx整盘备份到/dev/hdy

[root@dmxsp ~]# dd if=/dev/hdx of=/dev/hdy

将/dev/hdx全盘数据备份到指定路径的image文件

[root@dmxsp ~]# dd if=/dev/hdx of=/path/to/image

备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径

[root@dmxsp ~]# dd if=/dev/hdx | gzip >/path/to/image.gz

将备份文件恢复到指定盘

[root@dmxsp ~]# dd if=/path/to/image of=/dev/hdx

将压缩的备份文件恢复到指定盘

[root@dmxsp ~]# gzip -dc /path/to/image.gz | dd of=/dev/hdx

备份磁盘开始的512Byte大小的MBR信息到指定文件

[root@dmxsp ~]# dd if=/dev/zero of=/path/to/image count=1 bs=512M

拷贝光盘数据到root文件夹下,并保存为cd.iso文件

[root@dmxsp ~]# dd if=/dev/cdrom of=/root/cd.iso

增加swap分区文件大小

1.创建一个大小为256M的文件

[root@dmxsp ~]# dd if=/dev/zero of=/swapfile bs=1024 count=262144

2.把这个文件变成swap文件

[root@dmxsp ~]# mkswap /swapfile

3.启用这个swap文件

[root@dmxsp ~]# swapon /swapfile

4.编辑/etc/fstab文件,使在每次开机时自动加载swap文件

/swapfile swap swap default 0 0

销毁磁盘数据(注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据)

dd if=/dev/urandom of=/dev/hda1

修复硬盘
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。 当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。并且这个过程是安全、高效的

dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda

date

可以用来显示或设定系统的日期与时间

date [OPTION]... [+FORMAT] 
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] 
[--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
-s --set=STRING:根据字符串设置时间
-r --reference=FILE:显示文件的最后修改时间
-d --date=STRING:显示由字符串指定的时间, 而不是当前时间
-f  --file=DATEFILE:类似于--date; 一次从DATEFILE处理一行
-R  --rfc-822:根据 RFC-822 指定格式输出日期
-u  --utc, --universal:显示或设置全球时间
%%输出字符%
%a:星期几的缩写 (Sun..Sat)
%A:星期的完整名称(Sunday..Saturday)。
%b:缩写的月份名称(例如,Jan
%B:完整的月份名称(例如,January
%c:本地日期和时间(例如,Thu Mar 3 23:05:25 2005
%C:世纪,和%Y类似,但是省略后两位(例如,20
%d: (01..31)
%D:日期,等价于%m/%d/%y
%e:一月中的一天,格式使用空格填充,等价于%_d
%F:完整的日期;等价于 %Y-%m-%d
%g ISO:标准计数周的年份的最后两位数字
%G ISO:标准计数周的年份,通常只对%V有用
%h:等价于 %b
%H:小时 (00..23)
%I:小时 (01..12)
%j:一年中的第几天 (001..366)
%k:小时,使用空格填充 ( 0..23); 等价于 %_H
%l:小时, 使用空格填充 ( 1..12); 等价于 %_I
%m:月份 (01..12)
%M:分钟 (00..59)
%n:新的一行,换行符
%N:纳秒 (000000000..999999999)
%p:用于表示当地的AMPM,如果未知则为空白
%P:类似 %p, 但是是小写的
%r:本地的 12 小时制时间(例如 11:11:04 PM)
%R:24 小时制 的小时与分钟; 等价于 %H:%M
%s: 1970-01-01 00:00:00 UTC 到现在的秒数
%S: (00..60)
%t:插入水平制表符 tab
%T:时间; 等价于 %H:%M:%S
%u:一周中的一天 (1..7); 1 表示星期一
%U:一年中的第几周,周日作为一周的起始 (00..53)
%V:ISO 标准计数周,该方法将周一作为一周的起始 (01..53)
%w:一周中的一天(0..6),0代表星期天
%W:一年中的第几周,周一作为一周的起始(00..53
%x:本地的日期格式(例如,12/31/99
%X:本地的日期格式(例如,23:13:48%y:年份后两位数字 (00..99) %Y 
%z:+hhmm 格式的数值化时区格式(例如,-0400
%:z:+hh:mm 格式的数值化时区格式(例如,-04:00
%::z:+hh:mm:ss格式的数值化时区格式(例如,-04:00:00
%:::z:数值化时区格式,相比上一个格式增加':'以显示必要的精度(例如,-04,+05:30
%Z:时区缩写 (如 EDT

显示日期和时间

[root@dmxsp ~]# date
Sat Jul 2 13:39:02 +08 2022

修改时间

[root@dmxsp ~]# date -s "15:05:06"
Wed Jun 15 15:05:06 +08 2022

显示完整的日期

[root@dmxsp ~]# date '+%D'
07/02/22
[root@dmxsp ~]# date '+%x'
07/02/2022

显示完整的时间

[root@dmxsp ~]# date '+%T'
13:55:37

declare

用于声明 shell 变量,为shell指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性),在第二种语法中可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)

declare [+/-][rxi][变量名称=设置值]  declare -f
-a:声明数组变量
-f:仅显示函数
-r:将变量设置为只读
-x:指定的变量会成为环境变量,可供shell以外的程序来使用
-i:[设置值]可以是数值,字符串或运算式
+/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性

声明整数型变量

[root@dmxsp ~]# declare -i ab

改变变量内容

[root@dmxsp ~]# ab=12

显示变量内容

[root@dmxsp ~]# echo $ab

取消变量属性

[root@dmxsp ~]# declare +i ab

depmod

用于分析可载入模块的相依性,可检测模块的相依性,供modprobe在安装模块时使用

depmod [-adeisvV][-m <文件>][--help][模块名称]
-a或--all:分析所有可用的模块
-d或debug:执行排错模式
-e:输出无法参照的符号
-i:不检查符号表的版本
-m<文件>或system-map<文件>:使用指定的符号表文件
-s或--system-log:在系统记录中记录错误
-n  --dry_run:将结果modules.dep和各种映射文件输出到标准输出(stdout),
而不是写到模块目录下
-b basedir  --basedir basedir:若你的模块并没有正确的在/lib/mdules/version下,
可以指定目录生成依赖
-A --quick:检查是否有模块比modues.dep中的模块新,若没有,则退出不重新生成文件
-v或--verbose:执行时显示详细的信息
-V或--version:显示版本信息
--help:显示帮助

dmesg

用于显示开机信息,kernel 会将开机信息存储在 ring buffer 中。您若是开机时来不及查看信息,可利用 dmesg 来查看。开机信息亦保存在 /var/log 目录中,名称为 dmesg 的文件里

dmesg [-cn][-s <缓冲区大小>]
-c:显示信息后,清除 ring buffer 中的内容
-s<缓冲区大小>:预设置为 8196,刚好等于 ring buffer 的大小
-n:设置记录信息的层级

打印内核环形缓冲区

[root@dmxsp ~]# dmesg

打印并清除内核环形缓冲区

[root@dmxsp ~]# dmesg -c

查看usb信

dmesg | grep -i usb 

查看dma信息

dmesg | grep -i dma

dump

用于备份文件系统,dump为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件

dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d <密度>][-f <设备名称>]
[-h <层级>][-s <磁带长度>][-T <日期>][目录或文件系统]  dump [-wW]
-0123456789  备份的层级
-b<区块大小>:指定区块的大小,单位为KB
-B<区块数目>:指定备份卷册的区块数目
-c:修改备份磁带预设的密度与容量
-d<密度>:设置磁带的密度。单位为BPI
-f<设备名称>:指定备份设备
-h<层级>:当备份层级等于或大于指定的层级时,将不备份用户标示为"nodump"的文件
-n:当备份工作需要管理员介入时,向所有"operator"群组中的使用者发出通知
-s<磁带长度>:备份磁带的长度,单位为英尺
-T<日期>:指定开始备份的时间与日期
-u:备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期与时间等
-w:与-W类似,但仅显示需要备份的文件
-W:显示需要备份的文件及其最后一次备份的层级,时间与日期

备份磁盘分区

dump -0 -u -f /dev/hda3 /home/pyegrp/

还原

restore rf /dev/hda3 /home/pyegrp

ed

是文本编辑器,用于文本编辑,一次仅能编辑一行而非全屏幕方式的操作

ed [-][-Gs][-p<字符串>][--help][--version][文件]
-G或--traditional:提供回兼容的功能
-p<字符串>:指定ed在command mode的提示字符
-s,-,--quiet或--silent:不执行开启文件时的检查功能
--help:显示帮助
--version:显示版本信息

 ed 完整实例解析

$ ed              <- 激活 ed 命令 
a                 <- 告诉 ed 我要编辑新文件 
My name is Titan. <- 输入第一行内容 
And I love Perl very much. <- 输入第二行内容 
.                 <- 返回 ed 的命令行状态 
i                 <- 告诉 ed 我要在最后一行之前插入内容 
I am 24.          <- 将“I am 24.”插入“My name is Titan.”和“And I love Perl very much.”之间 
.                 <- 返回 ed 的命令行状态 
c                 <- 告诉 ed 我要替换最后一行输入内容 
I am 24 years old. <- 将“I am 24.”替换成“I am 24 years old.”(注意:这里替换的是最后输的内容) 
.                 <- 返回 ed 的命令行状态 
w readme.text     <- 将文件命名为“readme.text”并保存(注意:如果是编辑已经存在的文件,只需要敲入 w 即可) 
q                 <- 完全退出 ed 编辑器

egrep

用于在文件内查找指定的字符串,egrep执行效果与”grep-E”相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法

ex

作者 dmxsp

《Linux-基础命令》有3条评论

回复 googles 取消回复

您的电子邮箱地址不会被公开。